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 1lCH4o-0002X6-Se for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Feb 2021 07:16:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lCH4n-0001ug-Qh for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Feb 2021 07:16:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lCH4n-0001uZ-4B for pgsql-hackers@lists.postgresql.org; Wed, 17 Feb 2021 07:16:45 +0000 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lCH4f-00008o-TB for pgsql-hackers@postgresql.org; Wed, 17 Feb 2021 07:16:43 +0000 Received: by mail-pg1-x52a.google.com with SMTP id t25so7942867pga.2 for ; Tue, 16 Feb 2021 23:16:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7esx0LpXpjIjvRrgorj92vhaNICQ5gazuj2xn1HjfIc=; b=mMMHwhP13ypwv6rbVHlweUS54UOUXeL8rMZnYqOoUnZwiN2iTxJUflRretbefOT3cf eFN+pNNcw1T/No6hNeimTiKfJp4yb/XfNBQypBOGhkA0pwbgVqJccDP93e5Bj5g5C7DU LKdiG95AbQhWccbtgBrPbL3rD5hxOUMY6ejsrkBKqD8HirygplTmX9wZ8OGoPQn4lzWx 0tHHKouFZxb83E0kEuAsS2C03H0UERtj1kUbBJjiNw2KCNYSvyazxGvKI8vI4vt2D2+O c+XZ+6q+XPQ9lT6H/Or/rsgnXuUGWlTUQSd5rLVm7IrFOPF3vXh1/r+ZojAa1AvIv3Qm zrJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7esx0LpXpjIjvRrgorj92vhaNICQ5gazuj2xn1HjfIc=; b=BaY9HY3BIdFGRia0GN3UObsDIvJOQkuTwk5cd77OAh/ndctZRwOJ7Cq5W+Dd5sg82s XFY4gMEr1E8c4TMs0V+DB9mQz+GikmrwohlZiCEVLiyiWgs+4qF5/2kTSda2vlHfvnsL vvwUypDxVSeF6Y//0eyP2dyqpzE0KHIE5/uK4CSzuA3CB4vRK/Sih1F3daOCloJzDRzL MTJQ1CISVo2dM2P1YK/Arnny2Fbp7HCfERLbr7zyu1MLAUEY7hKvfOTU8iigXCnVdmgo DCdTkI5yRDG/kvmW4Hfu2DYSyoqsRzI7JdwWkkq2lekJWhJZfF+em91Rsyf7qo/RRyUs M2/w== X-Gm-Message-State: AOAM530NMTqfMfb58FzM4Nr113q6G67JDG2TpGzfRazHapsnYpB0k2Ic gZOnqySb6Zu1tSt4gnOrHNud+U6ZKnYZkGSMpI0= X-Google-Smtp-Source: ABdhPJwhWyt+Qew8JMkA0LZ7Y3jq1w7t3ir7EpRkj0XHhR3gi9gCjiujt31+dC7Swc275ope9ynvsHruajpMhEuCW3c= X-Received: by 2002:a63:4e13:: with SMTP id c19mr14996477pgb.432.1613546196718; Tue, 16 Feb 2021 23:16:36 -0800 (PST) MIME-Version: 1.0 References: <20201217050522.GU30237@telsasoft.com> <20201217204442.GX30237@telsasoft.com> <20201218175439.GA30237@telsasoft.com> <20201221074725.GF30237@telsasoft.com> <20201225023958.GW30237@telsasoft.com> <96eaa813-4ad6-e80a-04a4-cc8082d356dd@swarm64.com> <508af801-6356-d36b-1867-011ac6df8f55@swarm64.com> In-Reply-To: From: Bharath Rupireddy Date: Wed, 17 Feb 2021 12:46:25 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Luc Vlaming Cc: Justin Pryzby , PostgreSQL-development , Andres Freund , Paul Guo , Jeff Davis Content-Type: multipart/mixed; boundary="000000000000e2d16205bb82ffcb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000e2d16205bb82ffcb Content-Type: text/plain; charset="UTF-8" Hi, I addressed the following review comments and attaching v3 patch set. 1) ExecClearTuple happens before ExecCopySlot in heap_multi_insert_v2 and this allowed us to remove clear_mi_slots flag from TableInsertState. 2) I retained the flushed variable inside TableInsertState so that the callers can know whether the buffered slots have been flushed. If yes, the callers can execute after insert row triggers or perform index insertions. This is easier than passing the after insert row triggers info and index info to new multi insert table am and let it do. This way the functionalities can be kept separate i.e. multi insert ams do only buffering, decisions on when to flush, insertions and the callers will execute triggers or index insertions. And also none of the existing table ams are performing these operations within them, so this is inline with the current design of the table ams. 3) I have kept the single and multi insert API separate. The previous suggestion was to have only a single insert API and let the callers provide initially whether they want multi or single inserts. One problem with that approach is that we have to allow table ams to execute the after row triggers or index insertions. That is something I personally don't like. 0001 - new table ams implementation 0002 - the new multi table ams used in CREATE TABLE AS and REFRESH MATERIALIZED VIEW 0003 - the new multi table ams used in COPY Please review the v3 patch set further. With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --000000000000e2d16205bb82ffcb Content-Type: application/x-patch; name="v3-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v3-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kl92iwt10 RnJvbSA0OTA2MGZkYzJjMmEyZTZjYWYxYTQ4OWZjZDE2Y2FmZDBlMWUyMGEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxNyBGZWIgMjAyMSAxMTowNjozNSArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjNdIE5ldyBUYWJsZSBBTXMgZm9yIE11bHRpIGFuZCBTaW5nbGUgSW5z ZXJ0cwoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyB0YWJsZSBhY2Nlc3MgbWV0aG9kcyBmb3Ig bXVsdGkgYW5kCnNpbmdsZSBpbnNlcnRzLiBBbHNvIGltcGxlbWVudHMvcmVhcnJhbmdlcyB0aGUg b3V0c2lkZSBjb2RlIGZvcgpoZWFwIGFtIGludG8gdGhlc2UgbmV3IEFQSXMuCgpNYWluIGRlc2ln biBnb2FsIG9mIHRoZXNlIG5ldyBBUElzIGlzIHRvIGdpdmUgZmxleGliaWxpdHkgdG8KdGFibGVh bSBkZXZlbG9wZXJzIGluIGltcGxlbWVudGluZyBtdWx0aSBpbnNlcnQgbG9naWMgZGVwZW5kZW50 IG9uCnRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZW5naW5lLiBDdXJyZW50bHksIGZvciBhbGwgdGhl IHVuZGVybHlpbmcKc3RvcmFnZSBlbmdpbmVzLCB3ZSBmb2xsb3cgdGhlIHNhbWUgbXVsdGkgaW5z ZXJ0IGxvZ2ljIHN1Y2ggYXMgd2hlbgphbmQgaG93IHRvIGZsdXNoIHRoZSBidWZmZXJlZCB0dXBs ZXMsIHR1cGxlIHNpemUgY2FsY3VsYXRpb24sIGFuZAp0aGlzIGxvZ2ljIGRvZXNuJ3QgdGFrZSBp bnRvIGFjY291bnQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBlbmdpbmUKY2FwYWJpbGl0aWVzLgoK V2UgY2FuIGFsc28gYXZvaWQgZHVwbGljYXRpbmcgbXVsdGkgaW5zZXJ0IGNvZGUgKGZvciBleGlz dGluZyBDT1BZLAphbmQgdXBjb21pbmcgQ1RBUywgQ1JFQVRFL1JFRlJFU0ggTUFUIFZJRVcgYW5k IElOU0VSVCBTRUxFQ1RzKS4gV2UKY2FuIGFsc28gbW92ZSBidWxrIGluc2VydCBzdGF0ZSBhbGxv Y2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaW5zaWRlCnRoZXNlIEFQSXMuCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8IDIxMiArKysrKysrKysrKysrKysrKysr KysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICAgNSArCiBz cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jICAgIHwgICA3ICsKIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAgICAgfCAgODMgKysrKysrKystCiBzcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDQ5ICsrKysrLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICB8ICA4NyArKysrKysrKysrCiBzcmMvaW5j bHVkZS9leGVjdXRvci90dXB0YWJsZS5oICAgICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdl ZCwgNDM4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwppbmRleCA5OTI2ZTJiZDU0Li43ODkyMjhhYWZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVk ZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCkBAIC0yNTIy LDYgKzI1MjMsMjE3IEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBs ZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIAlwZ3N0YXRfY291bnRfaGVhcF9pbnNl cnQocmVsYXRpb24sIG50dXBsZXMpOwogfQogCisvKgorICogaGVhcF9pbnNlcnRfYmVnaW4gLSBh bGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBUYWJsZUluc2VydFN0YXRlCisgKgorICogRm9yIHNpbmds ZSBpbnNlcnRzOgorICogIDEpIFNwZWNpZnkgaXNfbXVsdGkgYXMgZmFsc2UsIHRoZW4gbXVsdGkg aW5zZXJ0IHN0YXRlIHdpbGwgYmUgTlVMTC4KKyAqCisgKiBGb3IgbXVsdGkgaW5zZXJ0czoKKyAq ICAxKSBTcGVjaWZ5IGlzX211bHRpIGFzIHRydWUsIHRoZW4gbXVsdGkgaW5zZXJ0IHN0YXRlIHdp bGwgYmUgYWxsb2NhdGVkIGFuZAorICogCSAgIGluaXRpYWxpemVkLgorICoKKyAqICBPdGhlciBp bnB1dCBwYXJhbWV0ZXJzIGkuZS4gcmVsYXRpb24sIGNvbW1hbmQgaWQsIG9wdGlvbnMgYXJlIGNv bW1vbiBmb3IKKyAqICBib3RoIHNpbmdsZSBhbmQgbXVsdGkgaW5zZXJ0cy4KKyAqLworVGFibGVJ bnNlcnRTdGF0ZSoKK2hlYXBfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNp ZCwgaW50IG9wdGlvbnMsIGJvb2wgaXNfbXVsdGkpCit7CisJVGFibGVJbnNlcnRTdGF0ZSAqc3Rh dGU7CisKKwlzdGF0ZSA9IHBhbGxvYyhzaXplb2YoVGFibGVJbnNlcnRTdGF0ZSkpOworCXN0YXRl LT5yZWwgPSByZWw7CisJc3RhdGUtPmNpZCA9IGNpZDsKKwlzdGF0ZS0+b3B0aW9ucyA9IG9wdGlv bnM7CisJLyogQmVsb3cgcGFyYW1ldGVycyBhcmUgbm90IHVzZWQgZm9yIHNpbmdsZSBpbnNlcnRz LiAqLworCXN0YXRlLT5taV9zbG90cyA9IE5VTEw7CisJc3RhdGUtPm1pc3RhdGUgPSBOVUxMOwor CXN0YXRlLT5taV9jdXJfc2xvdHMgPSAwOworCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisKKwlp ZiAoaXNfbXVsdGkpCisJeworCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKworCQlt aXN0YXRlID0gcGFsbG9jKHNpemVvZihIZWFwTXVsdGlJbnNlcnRTdGF0ZSkpOworCQlzdGF0ZS0+ bWlfc2xvdHMgPQorCQkJCXBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JV RkZFUkVEX1RVUExFUyk7CisJCW1pc3RhdGUtPm1heF9zbG90cyA9IE1BWF9CVUZGRVJFRF9UVVBM RVM7CisJCW1pc3RhdGUtPm1heF9zaXplID0gTUFYX0JVRkZFUkVEX0JZVEVTOworCQltaXN0YXRl LT5jdXJfc2l6ZSA9IDA7CisJCS8qCisJCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBtZW1vcnkgY29u dGV4dCBzbyB0aGF0IHdlIGNhbiByZXNldCBvbmNlIHBlcgorCQkgKiBtdWx0aSBpbnNlcnQgYmF0 Y2guCisJCSAqLworCQltaXN0YXRlLT5jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1 cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICJoZWFwX211bHRpX2luc2VydCIsCisJ CQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCXN0YXRlLT5taXN0YXRlID0g bWlzdGF0ZTsKKwl9CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBoZWFwX2luc2VydF92 MiAtIGluc2VydCBzaW5nbGUgdHVwbGUgaW50byBhIGhlYXAKKyAqCisgKiBJbnNlcnQgdHVwbGUg ZnJvbSBzbG90IGludG8gdGFibGUuIFRoaXMgaXMgbGlrZSBoZWFwX2luc2VydCgpLCB0aGUgb25s eQorICogZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBwYXJhbWV0ZXJzIGZvciBpbnNlcnRpb24gYXJl IGluc2lkZSB0YWJsZSBpbnNlcnQKKyAqIHN0YXRlIHN0cnVjdHVyZS4KKyAqLwordm9pZAoraGVh cF9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90 KQoreworCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOworCUhlYXBUdXBsZQl0dXBsZSA9IEV4ZWNG ZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUpOworCisJQXNzZXJ0KHN0 YXRlKTsKKworCS8qIFVwZGF0ZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLworCXNsb3QtPnR0c190 YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3RhdGUtPnJlbCk7CisJdHVwbGUtPnRfdGFibGVP aWQgPSBzbG90LT50dHNfdGFibGVPaWQ7CisKKwkvKiBQZXJmb3JtIGluc2VydGlvbiwgYW5kIGNv cHkgdGhlIHJlc3VsdGluZyBJdGVtUG9pbnRlciAqLworCWhlYXBfaW5zZXJ0KHN0YXRlLT5yZWws IHR1cGxlLCBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCUl0 ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOworCisJaWYgKHNo b3VsZEZyZWUpCisJCXBmcmVlKHR1cGxlKTsKK30KKworLyoKKyAqIGhlYXBfbXVsdGlfaW5zZXJ0 X3YyIC0gaW5zZXJ0IG11bHRpcGxlIHR1cGxlcyBpbnRvIGEgaGVhcAorICoKKyAqIENvbXB1dGUg c2l6ZSBvZiB0dXBsZS4gU2VlIGlmIHRoZSBidWZmZXJlZCBzbG90cyBjYW4gaG9sZCB0aGUgdHVw bGUuIElmIHllcywKKyAqIHN0b3JlIGl0IGluIHRoZSBidWZmZXJzLCBvdGhlcndpc2UgZmx1c2gg aS5lLiBpbnNlcnQgdGhlIHNvIGZhciBidWZmZXJlZAorICogdHVwbGVzIGludG8gaGVhcC4KKyAq CisgKiBGbHVzaCBjYW4gaGFwcGVuOgorICogIDEpIGVpdGhlciBpZiBhbGwgdGhlIGJ1ZmZlcmVk IHNsb3RzIGFyZSBmaWxsZWQgdXAKKyAqICAyKSBvciBpZiB0b3RhbCB0dXBsZSBzaXplIG9mIHRo ZSBjdXJyZW50bHkgYnVmZmVyZWQgc2xvdHMgYXJlID49IG1heF9zaXplCisgKi8KK3ZvaWQKK2hl YXBfbXVsdGlfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xv dCAqc2xvdCkKK3sKKwlUdXBsZVRhYmxlU2xvdCAgKmJhdGNoc2xvdDsKKwlIZWFwTXVsdGlJbnNl cnRTdGF0ZSAqbWlzdGF0ZTsKKwlTaXplIHN6OworCisJQXNzZXJ0KHN0YXRlKTsKKworCW1pc3Rh dGUgPSAoSGVhcE11bHRpSW5zZXJ0U3RhdGUgKilzdGF0ZS0+bWlzdGF0ZTsKKworCUFzc2VydCht aXN0YXRlICYmIHN0YXRlLT5taV9zbG90cyk7CisKKwkvKiBSZXNldCBmbHVzaCBzdGF0ZSBpZiBw cmV2aW91c2x5IHNldC4gKi8KKwlpZiAoc3RhdGUtPmZsdXNoZWQpCisJeworCQlzdGF0ZS0+bWlf Y3VyX3Nsb3RzID0gMDsKKwkJc3RhdGUtPmZsdXNoZWQgPSBmYWxzZTsKKwl9CisKKwlBc3NlcnQo c3RhdGUtPm1pX2N1cl9zbG90cyA8IG1pc3RhdGUtPm1heF9zbG90cyk7CisKKwlpZiAoc3RhdGUt Pm1pX3Nsb3RzW3N0YXRlLT5taV9jdXJfc2xvdHNdID09IE5VTEwpCisJCXN0YXRlLT5taV9zbG90 c1tzdGF0ZS0+bWlfY3VyX3Nsb3RzXSA9CisJCQkJCQkJCQl0YWJsZV9zbG90X2NyZWF0ZShzdGF0 ZS0+cmVsLCBOVUxMKTsKKworCWJhdGNoc2xvdCA9IHN0YXRlLT5taV9zbG90c1tzdGF0ZS0+bWlf Y3VyX3Nsb3RzXTsKKworCUV4ZWNDbGVhclR1cGxlKGJhdGNoc2xvdCk7CisJRXhlY0NvcHlTbG90 KGJhdGNoc2xvdCwgc2xvdCk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0dXBsZSBzaXplIGFmdGVy IG9yaWdpbmFsIHNsb3QgaXMgY29waWVkLCBiZWNhdXNlIHRoZSBjb3BpZWQKKwkgKiBzbG90IHR5 cGUgYW5kIHR1cGxlIHNpemUgbWF5IGNoYW5nZS4KKwkgKi8KKwlzeiA9IEdldFR1cGxlU2l6ZShi YXRjaHNsb3QsIG1pc3RhdGUtPm1heF9zaXplKTsKKworCUFzc2VydChzeiA+IDApOworCisJc3Rh dGUtPm1pX2N1cl9zbG90cysrOworCW1pc3RhdGUtPmN1cl9zaXplICs9IHN6OworCisJaWYgKHN0 YXRlLT5taV9jdXJfc2xvdHMgPj0gbWlzdGF0ZS0+bWF4X3Nsb3RzIHx8CisJCW1pc3RhdGUtPmN1 cl9zaXplID49IG1pc3RhdGUtPm1heF9zaXplKQorCQloZWFwX211bHRpX2luc2VydF9mbHVzaChz dGF0ZSk7Cit9CisKKy8qCisgKiBoZWFwX211bHRpX2luc2VydF9mbHVzaCAtIGZsdXNoIGJ1ZmZl cmVkIHR1cGxlcywgaWYgYW55LCBpbnRvIGEgaGVhcAorICoKKyAqIEZsdXNoIHRoZSBidWZmZXJl ZCB0dXBsZXMsIGluZGljYXRlIGNhbGxlciB0aGF0IGZsdXNoaW5nIGhhcHBlbmVkIGFuZCByZXNl dAorICogcGFyYW1ldGVycy4KKyAqLwordm9pZAoraGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goVGFi bGVJbnNlcnRTdGF0ZSAqc3RhdGUpCit7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7 CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJQXNzZXJ0KHN0YXRlKTsKKworCW1pc3Rh dGUgPSAoSGVhcE11bHRpSW5zZXJ0U3RhdGUgKilzdGF0ZS0+bWlzdGF0ZTsKKworCUFzc2VydCht aXN0YXRlICYmIHN0YXRlLT5taV9zbG90cyAmJiBzdGF0ZS0+bWlfY3VyX3Nsb3RzID49IDAgJiYK KwkJICAgbWlzdGF0ZS0+Y29udGV4dCk7CisKKwlpZiAoc3RhdGUtPmZsdXNoZWQpCisJeworCQlz dGF0ZS0+bWlfY3VyX3Nsb3RzID0gMDsKKwkJc3RhdGUtPmZsdXNoZWQgPSBmYWxzZTsKKwkJcmV0 dXJuOworCX0KKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obWlzdGF0ZS0+ Y29udGV4dCk7CisJaGVhcF9tdWx0aV9pbnNlcnQoc3RhdGUtPnJlbCwgc3RhdGUtPm1pX3Nsb3Rz LCBzdGF0ZS0+bWlfY3VyX3Nsb3RzLAorCQkJCQkgIHN0YXRlLT5jaWQsIHN0YXRlLT5vcHRpb25z LCBzdGF0ZS0+YmlzdGF0ZSk7CisJTWVtb3J5Q29udGV4dFJlc2V0KG1pc3RhdGUtPmNvbnRleHQp OworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXN0YXRlLT5mbHVzaGVk ID0gdHJ1ZTsKKwltaXN0YXRlLT5jdXJfc2l6ZSA9IDA7Cit9CisKKy8qCisgKiBoZWFwX2luc2Vy dF9lbmQgLSBjbGVhbiB1cCBUYWJsZUluc2VydFN0YXRlCisgKgorICogRm9yIG11bHRpIGluc2Vy dHMsIGVuc3VyZSB0byBmbHVzaCBhbGwgdGhlIHJlbWFpbmluZyBidWZmZXJzIHdpdGgKKyAqIGhl YXBfbXVsdGlfaW5zZXJ0X2ZsdXNoIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgor ICogSW4gdGhpcyBmdW5jdGlvbiwgYnVmZmVyZWQgc2xvdHMgYXJlIGRyb3BwZWQsIHNob3J0LWxp dmVkIG1lbW9yeSBjb250ZXh0IGlzCisgKiBkZWxldGVkLCBtaXN0YXRlIGFuZCBUYWJsZUluc2Vy dFN0YXRlIGFyZSBmcmVlZCB1cC4KKyAqLwordm9pZAoraGVhcF9pbnNlcnRfZW5kKFRhYmxlSW5z ZXJ0U3RhdGUgKnN0YXRlKQoreworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCWlu dCBpOworCisJQXNzZXJ0KHN0YXRlKTsKKworCW1pc3RhdGUgPSAoSGVhcE11bHRpSW5zZXJ0U3Rh dGUgKilzdGF0ZS0+bWlzdGF0ZTsKKworCWlmICghbWlzdGF0ZSkKKwl7CisJCXBmcmVlKHN0YXRl KTsKKwkJcmV0dXJuOworCX0KKworCUFzc2VydChzdGF0ZS0+bWlfc2xvdHMgJiYgIG1pc3RhdGUt PmNvbnRleHQpOworCisJLyogRW5zdXJlIHRoYXQgdGhlIGJ1ZmZlcnMgaGF2ZSBiZWVuIGZsdXNo ZWQgYmVmb3JlLiAqLworCUFzc2VydChzdGF0ZS0+bWlfY3VyX3Nsb3RzID09IDAgfHwgc3RhdGUt PmZsdXNoZWQpOworCisJZm9yIChpID0gMDsgaSA8IG1pc3RhdGUtPm1heF9zbG90cyAmJiBzdGF0 ZS0+bWlfc2xvdHNbaV0gIT0gTlVMTDsgaSsrKQorCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVT bG90KHN0YXRlLT5taV9zbG90c1tpXSk7CisKKwlNZW1vcnlDb250ZXh0RGVsZXRlKG1pc3RhdGUt PmNvbnRleHQpOworCXBmcmVlKG1pc3RhdGUpOworCXBmcmVlKHN0YXRlLT5taV9zbG90cyk7CisJ cGZyZWUoc3RhdGUpOworfQorCiAvKgogICoJc2ltcGxlX2hlYXBfaW5zZXJ0IC0gaW5zZXJ0IGEg dHVwbGUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCA0 YTcwZTIwYTE0Li40MjQ5YjY2MWFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKQEAgLTI1NTUsNiArMjU1NSwxMSBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRp bmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSA9IGhlYXBh bV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCiAJLnR1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZl ID0gaGVhcGFtX3R1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlLAogCS5tdWx0aV9pbnNlcnQgPSBo ZWFwX211bHRpX2luc2VydCwKKwkudHVwbGVfaW5zZXJ0X2JlZ2luID0gaGVhcF9pbnNlcnRfYmVn aW4sCisJLnR1cGxlX2luc2VydF92MiA9IGhlYXBfaW5zZXJ0X3YyLAorCS5tdWx0aV9pbnNlcnRf djIgPSBoZWFwX211bHRpX2luc2VydF92MiwKKwkubXVsdGlfaW5zZXJ0X2ZsdXNoID0gaGVhcF9t dWx0aV9pbnNlcnRfZmx1c2gsCisJLnR1cGxlX2luc2VydF9lbmQgPSBoZWFwX2luc2VydF9lbmQs CiAJLnR1cGxlX2RlbGV0ZSA9IGhlYXBhbV90dXBsZV9kZWxldGUsCiAJLnR1cGxlX3VwZGF0ZSA9 IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFwYW1fdHVwbGVfbG9jaywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IDMyNWVjZGMxMjIuLjk1ZjFm OWI2YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtNzgsNiArNzgs MTMgQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+ dHVwbGVfY29tcGxldGVfc3BlY3VsYXRpdmUgIT0gTlVMTCk7CiAKIAlBc3NlcnQocm91dGluZS0+ bXVsdGlfaW5zZXJ0ICE9IE5VTEwpOworCisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2luc2VydF9i ZWdpbiAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfaW5zZXJ0X3YyICE9IE5VTEwp OworCUFzc2VydChyb3V0aW5lLT5tdWx0aV9pbnNlcnRfdjIgIT0gTlVMTCk7CisJQXNzZXJ0KHJv dXRpbmUtPm11bHRpX2luc2VydF9mbHVzaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVw bGVfaW5zZXJ0X2VuZCAhPSBOVUxMKTsKKwogCUFzc2VydChyb3V0aW5lLT50dXBsZV9kZWxldGUg IT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX3VwZGF0ZSAhPSBOVUxMKTsKIAlBc3Nl cnQocm91dGluZS0+dHVwbGVfbG9jayAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YwppbmRleCA3M2MzNWRmOWM5Li43OWFlMjI0NTVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjVHVwbGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxl cy5jCkBAIC0xNTksNyArMTU5LDExIEBAIHR0c192aXJ0dWFsX21hdGVyaWFsaXplKFR1cGxlVGFi bGVTbG90ICpzbG90KQogCWlmIChUVFNfU0hPVUxERlJFRShzbG90KSkKIAkJcmV0dXJuOwogCi0J LyogY29tcHV0ZSBzaXplIG9mIG1lbW9yeSByZXF1aXJlZCAqLworCS8qCisJICogQ29tcHV0ZSBz aXplIG9mIG1lbW9yeSByZXF1aXJlZC4gVGhpcyBzaXplIGNhbGN1bGF0aW9uIGNvZGUgaXMgYWxz byB1c2VkCisJICogaW4gR2V0VHVwbGVTaXplKCksIGhlbmNlIGVuc3VyZSB0byBoYXZlIHRoZSBz YW1lIGNoYW5nZXMgb3IgZml4ZXMgaGVyZQorCSAqIGFuZCBhbHNvIHRoZXJlLgorCSAqLwogCWZv ciAoaW50IG5hdHQgPSAwOyBuYXR0IDwgZGVzYy0+bmF0dHM7IG5hdHQrKykKIAl7CiAJCUZvcm1f cGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoZGVzYywgbmF0dCk7CkBAIC0xMjM5LDYg KzEyNDMsODMgQEAgRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChUdXBsZVRhYmxlU2xvdCAq c2xvdCkKIAlwZnJlZShzbG90KTsKIH0KIAorLyoKKyAqIEdldFR1cGxlU2l6ZSAtIENvbXB1dGUg dGhlIHR1cGxlIHNpemUgZ2l2ZW4gYSB0YWJsZSBzbG90LgorICoKKyAqIEZvciBoZWFwIHR1cGxl LCBidWZmZXIgdHVwbGUgYW5kIG1pbmltYWwgdHVwbGUgc2xvdCB0eXBlcyByZXR1cm4gdGhlIGFj dHVhbAorICogdHVwbGUgc2l6ZSB0aGF0IGV4aXN0cy4gRm9yIHZpcnR1YWwgdHVwbGUsIHRoZSBz aXplIGlzIGNhbGN1bGF0ZWQgYXMgdGhlCisgKiBzbG90IGRvZXMgbm90IGhhdmUgdGhlIHR1cGxl IHNpemUuIElmIHRoZSBjb21wdXRlZCBzaXplIGV4Y2VlZHMgdGhlIGdpdmVuCisgKiBtYXhzaXpl IGZvciB0aGUgdmlydHVhbCB0dXBsZSwgdGhpcyBmdW5jdGlvbiBleGl0cywgbm90IGludmVzdGlu ZyB0aW1lIGluCisgKiBmdXJ0aGVyIHVubmVjZXNzYXJ5IGNhbGN1bGF0aW9uLgorICoKKyAqIElt cG9ydGFudCBOb3RlczoKKyAqIDEpIFNpemUgY2FsY3VsYXRpb24gY29kZSBmb3IgdmlydHVhbCBz bG90cyBpcyBiZWluZyB1c2VkIGZyb20KKyAqIAkgIHR0c192aXJ0dWFsX21hdGVyaWFsaXplKCks IGhlbmNlIGVuc3VyZSB0byBoYXZlIHRoZSBzYW1lIGNoYW5nZXMgb3IgZml4ZXMKKyAqIAkgIGhl cmUgYW5kIGFsc28gdGhlcmUuCisgKiAyKSBDdXJyZW50bHksIEdldFR1cGxlU2l6ZSgpIGhhbmRs ZXMgdGhlIGV4aXN0aW5nIGhlYXAsIGJ1ZmZlciwgbWluaW1hbCBhbmQKKyAqIAkgIHZpcnR1YWwg c2xvdHMuIEVuc3VyZSB0byBhZGQgcmVsYXRlZCBjb2RlIGluIGNhc2UgYW55IG5ldyBzbG90IHR5 cGUgaXMKKyAqICAgIGludHJvZHVjZWQuCisgKi8KK2lubGluZSBTaXplCitHZXRUdXBsZVNpemUo VHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNpemUgbWF4c2l6ZSkKK3sKKwlTaXplIHN6ID0gMDsKKwlI ZWFwVHVwbGUgdHVwbGUgPSBOVUxMOworCisJaWYgKFRUU19JU19IRUFQVFVQTEUoc2xvdCkpCisJ CXR1cGxlID0gKChIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdCktPnR1cGxlOworCWVsc2UgaWYo VFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKQorCQl0dXBsZSA9ICgoQnVmZmVySGVhcFR1cGxlVGFi bGVTbG90ICopIHNsb3QpLT5iYXNlLnR1cGxlOworCWVsc2UgaWYoVFRTX0lTX01JTklNQUxUVVBM RShzbG90KSkKKwkJdHVwbGUgPSAoKE1pbmltYWxUdXBsZVRhYmxlU2xvdCAqKSBzbG90KS0+dHVw bGU7CisJZWxzZSBpZihUVFNfSVNfVklSVFVBTChzbG90KSkKKwl7CisJCS8qCisJCSAqIFNpemUg Y2FsY3VsYXRpb24gY29kZSBiZWluZyB1c2VkIGhlcmUgaXMgZnJvbQorCQkgKiB0dHNfdmlydHVh bF9tYXRlcmlhbGl6ZSgpLCBlbnN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVz CisJCSAqIGhlcmUgYW5kIGFsc28gdGhlcmUuCisJCSAqLworCQlUdXBsZURlc2MJZGVzYyA9IHNs b3QtPnR0c190dXBsZURlc2NyaXB0b3I7CisKKwkJZm9yIChpbnQgbmF0dCA9IDA7IG5hdHQgPCBk ZXNjLT5uYXR0czsgbmF0dCsrKQorCQl7CisJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBs ZURlc2NBdHRyKGRlc2MsIG5hdHQpOworCQkJRGF0dW0JCXZhbDsKKworCQkJaWYgKGF0dC0+YXR0 Ynl2YWwpCisJCQkJc3ogKz0gYXR0LT5hdHRsZW47CisKKwkJCWlmIChzbG90LT50dHNfaXNudWxs W25hdHRdKQorCQkJCWNvbnRpbnVlOworCisJCQl2YWwgPSBzbG90LT50dHNfdmFsdWVzW25hdHRd OworCisJCQlpZiAoYXR0LT5hdHRsZW4gPT0gLTEgJiYKKwkJCQlWQVJBVFRfSVNfRVhURVJOQUxf RVhQQU5ERUQoRGF0dW1HZXRQb2ludGVyKHZhbCkpKQorCQkJeworCQkJCXN6ID0gYXR0X2FsaWdu X25vbWluYWwoc3osIGF0dC0+YXR0YWxpZ24pOworCQkJCXN6ICs9IEVPSF9nZXRfZmxhdF9zaXpl KERhdHVtR2V0RU9IUCh2YWwpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlzeiA9IGF0dF9h bGlnbl9ub21pbmFsKHN6LCBhdHQtPmF0dGFsaWduKTsKKwkJCQlzeiA9IGF0dF9hZGRsZW5ndGhf ZGF0dW0oc3osIGF0dC0+YXR0bGVuLCB2YWwpOworCQkJfQorCisJCQkvKgorCQkJICogV2UgYXJl IG5vdCBpbnRlcmVzdGVkIGluIHByb2NlZWRpbmcgZnVydGhlciBpZiB0aGUgY29tcHV0ZWQgc2l6 ZQorCQkJICogY3Jvc3NlcyBtYXhzaXplIGxpbWl0IHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgor CQkJICovCisJCQlpZiAobWF4c2l6ZSAhPSAwICYmIHN6ID49IG1heHNpemUpCisJCQkJYnJlYWs7 CisJCX0KKwl9CisKKwlpZiAodHVwbGUgIT0gTlVMTCAmJiAhVFRTX0lTX1ZJUlRVQUwoc2xvdCkp CisJCXN6ID0gdHVwbGUtPnRfbGVuOworCisJcmV0dXJuIHN6OworfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KgkJCQkgIHR1cGxlIHRhYmxlIHNsb3QgYWNjZXNzb3IgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK aW5kZXggNjBlNWNkMzEwOS4uYzk4Y2ZmYmVhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzYsMTEg KzM2LDI2IEBACiAjZGVmaW5lIEhFQVBfSU5TRVJUX05PX0xPR0lDQUwJVEFCTEVfSU5TRVJUX05P X0xPR0lDQUwKICNkZWZpbmUgSEVBUF9JTlNFUlRfU1BFQ1VMQVRJVkUgMHgwMDEwCiAKLXR5cGVk ZWYgc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKkJ1bGtJbnNlcnRTdGF0ZTsKIHN0cnVjdCBU dXBsZVRhYmxlU2xvdDsKIAogI2RlZmluZSBNYXhMb2NrVHVwbGVNb2RlCUxvY2tUdXBsZUV4Y2x1 c2l2ZQogCisvKgorICogTm8gbW9yZSB0aGFuIHRoaXMgbWFueSB0dXBsZXMgcGVyIHNpbmdsZSBt dWx0aSBpbnNlcnQgYmF0Y2gKKyAqCisgKiBDYXV0aW9uOiBEb24ndCBtYWtlIHRoaXMgdG9vIGJp ZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhpcyBtYW55IHR1cGxlcworICogc3RvcmVkIGlu IG11bHRpIGluc2VydCBidWZmZXIuIEluY3JlYXNpbmcgdGhpcyBjYW4gY2F1c2UgcXVhZHJhdGlj IGdyb3d0aCBpbgorICogbWVtb3J5IHJlcXVpcmVtZW50cyBkdXJpbmcgY29waWVzIGludG8gcGFy dGl0aW9uZWQgdGFibGVzIHdpdGggYSBsYXJnZQorICogbnVtYmVyIG9mIHBhcnRpdGlvbnMuCisg Ki8KKyNkZWZpbmUgTUFYX0JVRkZFUkVEX1RVUExFUwkJMTAwMAorCisvKgorICogRmx1c2ggbXVs dGkgaW5zZXJ0IGJ1ZmZlcnMgaWYgdGhlcmUgYXJlID49IHRoaXMgbWFueSBieXRlcywgYXMgY291 bnRlZCBieQorICogdGhlIHNpemUgb2YgdGhlIHR1cGxlcyBidWZmZXJlZC4KKyAqLworI2RlZmlu ZSBNQVhfQlVGRkVSRURfQllURVMJCTY1NTM1CisKIC8qCiAgKiBEZXNjcmlwdG9yIGZvciBoZWFw IHRhYmxlIHNjYW5zLgogICovCkBAIC05Myw2ICsxMDgsMjUgQEAgdHlwZWRlZiBlbnVtCiAJSEVB UFRVUExFX0RFTEVURV9JTl9QUk9HUkVTUwkvKiBkZWxldGluZyB4YWN0IGlzIHN0aWxsIGluIHBy b2dyZXNzICovCiB9IEhUU1ZfUmVzdWx0OwogCisvKiBIb2xkcyBtdWx0aSBpbnNlcnQgc3RhdGUg Zm9yIGhlYXAgYWNjZXNzIG1ldGhvZC4qLwordHlwZWRlZiBzdHJ1Y3QgSGVhcE11bHRpSW5zZXJ0 U3RhdGUKK3sKKwkvKiBTd2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5IGNvbnRleHQgYmVmb3Jl IGZsdXNoaW5nLiAqLworCU1lbW9yeUNvbnRleHQgICAgICAgY29udGV4dDsKKwkvKiBNYXhpbXVt IG51bWJlciBvZiBzbG90cyB0aGF0IGNhbiBiZSBidWZmZXJlZC4gKi8KKwlpbnQzMiAgICAgICAg ICAgICAgIG1heF9zbG90czsKKwkvKgorCSAqIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGFs bCB0aGUgdHVwbGVzIHRoYXQgYSBzaW5nbGUgYmF0Y2ggb2YKKwkgKiBidWZmZXJlZCBzbG90cyBj YW4gaG9sZC4KKwkgKi8KKwlpbnQ2NCAgICAgICAgICAgICAgIG1heF9zaXplOworCS8qCisJICog VG90YWwgdHVwbGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzbG90cyB0aGF0IGFyZSBjdXJyZW50 bHkgYnVmZmVyZWQuCisJICogRmx1c2ggdGhlIGJ1ZmZlcmVkIHNsb3RzIHdoZW4gY3VyX3NpemUg Pj0gbWF4X3NpemUuCisJICovCisJaW50NjQgICAgICAgICAgICAgICBjdXJfc2l6ZTsKK30gSGVh cE11bHRpSW5zZXJ0U3RhdGU7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlmdW5jdGlvbiBw cm90b3R5cGVzIGZvciBoZWFwIGFjY2VzcyBtZXRob2QKICAqCkBAIC0xMzAsMTUgKzE2NCwyMCBA QCBleHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVs YXRpb24gcmVsYXRpb24sCiAKIGV4dGVybiB2b2lkIGhlYXBfZ2V0X2xhdGVzdF90aWQoVGFibGVT Y2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlciB0aWQpOwogCi1leHRlcm4gQnVsa0luc2VydFN0YXRl IEdldEJ1bGtJbnNlcnRTdGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIEZyZWVCdWxrSW5zZXJ0U3Rh dGUoQnVsa0luc2VydFN0YXRlKTsKLWV4dGVybiB2b2lkIFJlbGVhc2VCdWxrSW5zZXJ0U3RhdGVQ aW4oQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwotCiBleHRlcm4gdm9pZCBoZWFwX2luc2VydChS ZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKIAkJCQkJCWlu dCBvcHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiBleHRlcm4gdm9pZCBoZWFwX211 bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xv dHMsCiAJCQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCiAJ CQkJCQkJICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CisKK2V4dGVybiBUYWJsZUluc2VydFN0 YXRlKiBoZWFwX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsIENvbW1hbmRJZCBjaWQsCisJCQkJ CQkJCQkJICAgaW50IG9wdGlvbnMsIGJvb2wgaXNfbXVsdGkpOworZXh0ZXJuIHZvaWQgaGVhcF9p bnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK K2V4dGVybiB2b2lkIGhlYXBfbXVsdGlfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRl LAorCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgaGVhcF9tdWx0 aV9pbnNlcnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUpOworZXh0ZXJuIHZvaWQgaGVh cF9pbnNlcnRfZW5kKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKTsKKwogZXh0ZXJuIFRNX1Jlc3Vs dCBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJ CSBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCiAJCQkJCQkJ IHN0cnVjdCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKaW5kZXggMzNiZmZiNjgxNS4uNWZiMDAxNDlmZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CkBAIC0yMjgsNiArMjI4LDMyIEBAIHR5cGVkZWYgc3RydWN0IFRNX0luZGV4RGVsZXRlT3AKIAlU TV9JbmRleFN0YXR1cyAqc3RhdHVzOwogfSBUTV9JbmRleERlbGV0ZU9wOwogCisvKiBIb2xkcyB0 YWJsZSBpbnNlcnQgc3RhdGUuICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZUluc2VydFN0YXRlCit7 CisJUmVsYXRpb24JcmVsOworCS8qIEJ1bGsgaW5zZXJ0IHN0YXRlIGlmIHJlcXVlc3RlZCwgb3Ro ZXJ3aXNlIE5VTEwuICovCisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEJKmJpc3RhdGU7CisJ Q29tbWFuZElkCWNpZDsKKwlpbnQJb3B0aW9uczsKKwkvKiBCZWxvdyBtZW1iZXJzIGFyZSBvbmx5 IHVzZWQgZm9yIG11bHRpIGluc2VydHMuICovCisJLyogQXJyYXkgb2YgYnVmZmVyZWQgc2xvdHMu ICovCisJVHVwbGVUYWJsZVNsb3QJKiptaV9zbG90czsKKwkvKiBOdW1iZXIgb2Ygc2xvdHMgdGhh dCBhcmUgY3VycmVudGx5IGJ1ZmZlcmVkLiAqLworCWludDMyCW1pX2N1cl9zbG90czsKKwkvKgor CSAqIEFjY2VzcyBtZXRob2Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gc3VjaCBhcyBwYXJhbWV0ZXJz IHRoYXQgYXJlIG5lZWRlZAorCSAqIGZvciBidWZmZXJpbmcgYW5kIGZsdXNoaW5nIGRlY2lzaW9u cyBjYW4gZ28gaGVyZS4KKwkgKi8KKwl2b2lkCSptaXN0YXRlOworCS8qCisJICogVGhpcyBwYXJh bWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBidWZmZXJlZCBzbG90cyBoYXZlIGJl ZW4KKwkgKiBmbHVzaGVkIHRvIGEgdGFibGUuIFVzZWQgYnkgY2FsbGVycyBvZiBtdWx0aSBpbnNl cnQgQVBJIGZvciBpbnNlcnRpbmcKKwkgKiBpbnRvIGluZGV4ZXMgb3IgZXhlY3V0aW5nIGFmdGVy IHJvdyB0cmlnZ2VycywgaWYgYW55LgorCSAqLworCWJvb2wJZmx1c2hlZDsKK31UYWJsZUluc2Vy dFN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9pbnNlcnQg Ki8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBSZWxhdGlvbk5lZWRzV0FM KCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NLSVBfRlNNCQkweDAwMDIK QEAgLTQ3NSw2ICs1MDEsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAl2b2lk CQkoKm11bHRpX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywg aW50IG5zbG90cywKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLCBzdHJ1Y3Qg QnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZSk7CiAKKwlUYWJsZUluc2VydFN0YXRlKiAoKnR1 cGxlX2luc2VydF9iZWdpbikgKFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJ CQkJIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKTsKKworCXZvaWQgKCp0dXBsZV9pbnNlcnRf djIpIChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCisJ dm9pZCAoKm11bHRpX2luc2VydF92MikgKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7CisKKwl2b2lkICgqbXVsdGlfaW5zZXJ0X2ZsdXNoKSAoVGFibGVJbnNl cnRTdGF0ZSAqc3RhdGUpOworCisJdm9pZCAoKnR1cGxlX2luc2VydF9lbmQpIChUYWJsZUluc2Vy dFN0YXRlICpzdGF0ZSk7CisKIAkvKiBzZWUgdGFibGVfdHVwbGVfZGVsZXRlKCkgZm9yIHJlZmVy ZW5jZSBhYm91dCBwYXJhbWV0ZXJzICovCiAJVE1fUmVzdWx0CSgqdHVwbGVfZGVsZXRlKSAoUmVs YXRpb24gcmVsLAogCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLApAQCAtODIyLDYgKzg1OSw4IEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiB9IFRhYmxlQW1Sb3V0aW5lOwogCiAKK3R5 cGVkZWYgc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKkJ1bGtJbnNlcnRTdGF0ZTsKKwogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICogU2xvdCBmdW5jdGlvbnMuCiAgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkBAIC04NDAsNiArODc5LDEwIEBAIGV4dGVybiBjb25zdCBUdXBsZVRhYmxlU2xvdE9w cyAqdGFibGVfc2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsKTsKICAqLwogZXh0ZXJuIFR1cGxl VGFibGVTbG90ICp0YWJsZV9zbG90X2NyZWF0ZShSZWxhdGlvbiByZWwsIExpc3QgKipyZWdsaXN0 KTsKIAorLyogQnVsayBpbnNlcnQgc3RhdGUgZnVuY3Rpb25zLiAqLworZXh0ZXJuIEJ1bGtJbnNl cnRTdGF0ZSBHZXRCdWxrSW5zZXJ0U3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCBGcmVlQnVsa0lu c2VydFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSk7CitleHRlcm4gdm9pZCBSZWxlYXNlQnVsa0luc2Vy dFN0YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICogVGFibGUgc2NhbiBmdW5jdGlvbnMuCkBAIC0xMzQzLDYgKzEzODYsNTAgQEAgdGFi bGVfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50 IG5zbG90cywKIAkJCQkJCQkJICBjaWQsIG9wdGlvbnMsIGJpc3RhdGUpOwogfQogCitzdGF0aWMg aW5saW5lIFRhYmxlSW5zZXJ0U3RhdGUqCit0YWJsZV9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVs LCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKKwkJCQkgICBib29sIGFsbG9jX2Jpc3RhdGUs IGJvb2wgaXNfbXVsdGkpCit7CisJVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUgPSByZWwtPnJkX3Rh YmxlYW0tPnR1cGxlX2luc2VydF9iZWdpbihyZWwsIGNpZCwKKwkJCQkJCQkJCQlvcHRpb25zLCBp c19tdWx0aSk7CisKKwkvKiBBbGxvY2F0ZSBidWxrIGluc2VydCBzdGF0ZSBoZXJlLCBzaW5jZSBp dCdzIEFNIGluZGVwZW5kZW50LiAqLworCWlmIChhbGxvY19iaXN0YXRlKQorCQlzdGF0ZS0+Ymlz dGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCWVsc2UKKwkJc3RhdGUtPmJpc3RhdGUgPSBO VUxMOworCisJcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2lu c2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7 CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X3YyKHN0YXRlLCBzbG90KTsK K30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNl cnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0YXRlLT5yZWwtPnJk X3RhYmxlYW0tPm11bHRpX2luc2VydF92MihzdGF0ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZAordGFibGVfbXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRl KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPm11bHRpX2luc2VydF9mbHVzaChzdGF0ZSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0 YXRlICpzdGF0ZSkKK3sKKwkvKiBEZWFsbG9jYXRlIGJ1bGsgaW5zZXJ0IHN0YXRlIGhlcmUsIHNp bmNlIGl0J3MgQU0gaW5kZXBlbmRlbnQuICovCisJaWYgKHN0YXRlLT5iaXN0YXRlKQorCQlGcmVl QnVsa0luc2VydFN0YXRlKHN0YXRlLT5iaXN0YXRlKTsKKworCXN0YXRlLT5yZWwtPnJkX3RhYmxl YW0tPnR1cGxlX2luc2VydF9lbmQoc3RhdGUpOworfQorCiAvKgogICogRGVsZXRlIGEgdHVwbGUu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKaW5kZXggNjc5ZTU3ZmJkZC4uMWY1OTYxNDE4MyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5j bHVkZS9leGVjdXRvci90dXB0YWJsZS5oCkBAIC0zMzAsNiArMzMwLDcgQEAgZXh0ZXJuIHZvaWQg c2xvdF9nZXRtaXNzaW5nYXR0cnMoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBzdGFydEF0dE51 bSwKIAkJCQkJCQkJIGludCBsYXN0QXR0TnVtKTsKIGV4dGVybiB2b2lkIHNsb3RfZ2V0c29tZWF0 dHJzX2ludChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGF0dG51bSk7CiAKK2V4dGVybiBTaXpl IEdldFR1cGxlU2l6ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU2l6ZSBtYXhzaXplKTsKIAogI2lm bmRlZiBGUk9OVEVORAogCi0tIAoyLjI1LjEKCg== --000000000000e2d16205bb82ffcb Content-Type: application/x-patch; name="v3-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Disposition: attachment; filename="v3-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kl92iz921 RnJvbSAzMjFjNjRjYjA3MGU1ZTBiMDgzNjM0ZTA1N2YyNjdjODA3MTdiMmYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxNyBGZWIgMjAyMSAxMTowMDo1MyArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjNdIENUQVMgYW5kIFJFRlJFU0ggTWF0IFZpZXcgV2l0aCBOZXcgTXVs dGkgSW5zZXJ0IFRhYmxlIEFNCgpUaGlzIHBhdGNoIGFkZHMgbmV3IG11bHRpIGluc2VydCB0YWJs ZSBhY2Nlc3MgbWV0aG9kcyB0bwpDUkVBVEUgVEFCTEUgQVMsIENSRUFURSBNQVRFUklBTElaRUQg VklFVyBhbmQgUkVGUkVTSCBNQVRFUklBTElaRUQKVklFVy4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jIHwgNDkgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgIHwgMzUgKysrKysrKysrKysrLS0tLS0tLS0t LS0KIDIgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggZGNlODgyMDEyZS4uMzZhZDBlZjY5OCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCkBAIC01OCw5ICs1OCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJLyog VGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgaW50b3JlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9u CXJlbDsJCQkvKiByZWxhdGlvbiB0byB3cml0ZSB0byAqLwogCU9iamVjdEFkZHJlc3MgcmVsYWRk cjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBmb3IgRXhlY0NyZWF0ZVRhYmxlQXMgKi8KLQlDb21tYW5k SWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlp bnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlv bnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8K KwlUYWJsZUluc2VydFN0YXRlICppc3RhdGU7CS8qIGluc2VydCBzdGF0ZSAqLwogfSBEUl9pbnRv cmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBkZWZpbml0aW9uIGNyZWF0aW9u ICovCkBAIC01NDYsMjIgKzU0NCwyNiBAQCBpbnRvcmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpz ZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJaWYgKGlzX21hdHZpZXcg JiYgIWludG8tPnNraXBEYXRhKQogCQlTZXRNYXRWaWV3UG9wdWxhdGVkU3RhdGUoaW50b1JlbGF0 aW9uRGVzYywgdHJ1ZSk7CiAKLQkvKgotCSAqIEZpbGwgcHJpdmF0ZSBmaWVsZHMgb2YgbXlTdGF0 ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCi0JICovCi0JbXlTdGF0ZS0+cmVsID0gaW50b1Jl bGF0aW9uRGVzYzsKLQlteVN0YXRlLT5yZWxhZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0 YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50 aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBfRlNNOwotCiAJLyoKIAkgKiBJZiBXSVRIIE5P IERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUg Zm9yCi0JICogYnVsayBpbnNlcnRzIGFzIHRoZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0Lgor CSAqIGJ1bGsgaW5zZXJ0cyBhbmQgbXVsdGkgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVz IHRvIGluc2VydC4KIAkgKi8KIAlpZiAoIWludG8tPnNraXBEYXRhKQotCQlteVN0YXRlLT5iaXN0 YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJeworCQlteVN0YXRlLT5pc3RhdGUgPSB0YWJs ZV9pbnNlcnRfYmVnaW4oaW50b1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJIEdldEN1cnJlbnRD b21tYW5kSWQodHJ1ZSksCisJCQkJCQkJCQkJCSBUQUJMRV9JTlNFUlRfU0tJUF9GU00sCisJCQkJ CQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCQkgdHJ1ZSk7CisJfQogCWVsc2UKLQkJbXlTdGF0ZS0+ YmlzdGF0ZSA9IE5VTEw7CisJCW15U3RhdGUtPmlzdGF0ZSA9IE5VTEw7CisKKwkvKgorCSAqIEZp bGwgcHJpdmF0ZSBmaWVsZHMgb2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCisJ ICovCisJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKKwlteVN0YXRlLT5yZWxhZGRy ID0gaW50b1JlbGF0aW9uQWRkcjsKIAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1w bGllcyBzb21ldGhpbmcgYWxyZWFkeSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC01ODksMTEg KzU5MSw3IEBAIGludG9yZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2Vp dmVyICpzZWxmKQogCQkgKiB3b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9l c24ndCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1p biksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1 cGxlX2luc2VydChteVN0YXRlLT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0 ZS0+b3V0cHV0X2NpZCwKLQkJCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBt eVN0YXRlLT5iaXN0YXRlKTsKKwkJdGFibGVfbXVsdGlfaW5zZXJ0X3YyKG15U3RhdGUtPmlzdGF0 ZSwgc2xvdCk7CiAJfQogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxh dGlvbiwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KQEAgLTYwOCwxMiArNjA2LDE3IEBAIHN0 YXRpYyB2b2lkCiBpbnRvcmVsX3NodXRkb3duKERlc3RSZWNlaXZlciAqc2VsZikKIHsKIAlEUl9p bnRvcmVsICpteVN0YXRlID0gKERSX2ludG9yZWwgKikgc2VsZjsKLQlJbnRvQ2xhdXNlICppbnRv ID0gbXlTdGF0ZS0+aW50bzsKKwlpbnQgdGlfb3B0aW9uczsKIAotCWlmICghaW50by0+c2tpcERh dGEpCisJaWYgKCFteVN0YXRlLT5pbnRvLT5za2lwRGF0YSkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0 U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0 YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOworCQl0aV9vcHRpb25zID0gbXlTdGF0ZS0+ aXN0YXRlLT5vcHRpb25zOworCisJCXRhYmxlX211bHRpX2luc2VydF9mbHVzaChteVN0YXRlLT5p c3RhdGUpOworCisJCXRhYmxlX2luc2VydF9lbmQobXlTdGF0ZS0+aXN0YXRlKTsKKworCQl0YWJs ZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+cmVsLCB0aV9vcHRpb25zKTsKIAl9CiAKIAkv KiBjbG9zZSByZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2 aWV3LmMKaW5kZXggYzVjMjVjZTExZC4uOWM2YjVmODUyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcu YwpAQCAtNTIsMTAgKzUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlEZXN0UmVjZWl2ZXIgcHViOwkJ CS8qIHB1YmxpY2x5LWtub3duIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJT2lkCQkJdHJhbnNpZW50 b2lkOwkvKiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNl IGZpZWxkcyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwotCVJlbGF0aW9u CXRyYW5zaWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0 cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0 aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8K LQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJs ZUluc2VydFN0YXRlICppc3RhdGU7CS8qIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRy ZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NjYs MTAgKzQ2MywxMSBAQCB0cmFuc2llbnRyZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGlu dCBvcGVyYXRpb24sIFR1cGxlRGVzYyB0eXBlaW5mbykKIAkvKgogCSAqIEZpbGwgcHJpdmF0ZSBm aWVsZHMgb2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCiAJICovCi0JbXlTdGF0 ZS0+dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9J TlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUg PSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5pc3RhdGUgPSB0YWJsZV9pbnNlcnRf YmVnaW4odHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUp LAorCQkJCQkJCQkJCSBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVO LAorCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCSB0cnVlKTsKIAogCS8qCiAJICogVmFsaWQg c21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcgYWxyZWFkeSB3cm90ZSB0byB0aGUgcmVs YXRpb24uCkBAIC00OTQsMTIgKzQ5Miw3IEBAIHRyYW5zaWVudHJlbF9yZWNlaXZlKFR1cGxlVGFi bGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYpCiAJICogY2hlYXAgZWl0aGVyLiBUaGlz IGFsc28gZG9lc24ndCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNIGRhdGEgKHNheSBhCiAJICogdHVw bGUncyB4bWluKSwgYnV0IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCSAqLwotCi0J dGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwKLQkJCQkJICAgc2xvdCwK LQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9u cywKLQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJdGFibGVfbXVsdGlfaW5zZXJ0X3YyKG15 U3RhdGUtPmlzdGF0ZSwgc2xvdCk7CiAKIAkvKiBXZSBrbm93IHRoaXMgaXMgYSBuZXdseSBjcmVh dGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUgbm8gaW5kZXhlcyAqLwogCkBAIC01MTMsMTQgKzUw NiwyMCBAQCBzdGF0aWMgdm9pZAogdHJhbnNpZW50cmVsX3NodXRkb3duKERlc3RSZWNlaXZlciAq c2VsZikKIHsKIAlEUl90cmFuc2llbnRyZWwgKm15U3RhdGUgPSAoRFJfdHJhbnNpZW50cmVsICop IHNlbGY7CisJaW50IHRpX29wdGlvbnM7CisJUmVsYXRpb24gdHJhbnNpZW50cmVsOworCisJdGlf b3B0aW9ucyA9IG15U3RhdGUtPmlzdGF0ZS0+b3B0aW9uczsKKwl0cmFuc2llbnRyZWwgPSBteVN0 YXRlLT5pc3RhdGUtPnJlbDsKKworCXRhYmxlX211bHRpX2luc2VydF9mbHVzaChteVN0YXRlLT5p c3RhdGUpOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRlKTsKKwl0YWJs ZV9pbnNlcnRfZW5kKG15U3RhdGUtPmlzdGF0ZSk7CiAKLQl0YWJsZV9maW5pc2hfYnVsa19pbnNl cnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwl0YWJsZV9m aW5pc2hfYnVsa19pbnNlcnQodHJhbnNpZW50cmVsLCB0aV9vcHRpb25zKTsKIAogCS8qIGNsb3Nl IHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8KLQl0YWJsZV9jbG9z ZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7Ci0JbXlTdGF0ZS0+dHJhbnNpZW50cmVs ID0gTlVMTDsKKwl0YWJsZV9jbG9zZSh0cmFuc2llbnRyZWwsIE5vTG9jayk7CiB9CiAKIC8qCi0t IAoyLjI1LjEKCg== --000000000000e2d16205bb82ffcb Content-Type: application/x-patch; name="v3-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v3-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kl92j1b32 RnJvbSA3NGQ2NThkYTNmMjRiOGFhZTBlNTM4MjYwYzFiYjUzNmUyNjNhNzAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxNyBGZWIgMjAyMSAxMTo1NjozMCArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjNdIENPUFkgV2l0aCBOZXcgTXVsdGkgYW5kIFNpbmdsZSBJbnNlcnQg VGFibGUgQU0KClRoaXMgcGF0Y2ggYWRkcyBuZXcgc2luZ2xlIGFuZCBtdWx0aSBpbnNlcnQgdGFi bGUgYWNjZXNzIG1ldGhvZCB0bwpDT1BZIGNvZGUuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weWZyb20uYyB8IDQ3NCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspLCAzMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tLmMKaW5kZXggNzk2Y2E3YjNmNy4uMjYxNzRhMzUxYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5ZnJvbS5jCkBAIC00Niw1NCArNDYsMTcgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKLS8qCi0gKiBObyBtb3JlIHRoYW4gdGhpcyBtYW55 IHR1cGxlcyBwZXIgQ29weU11bHRpSW5zZXJ0QnVmZmVyCi0gKgotICogQ2F1dGlvbjogRG9uJ3Qg bWFrZSB0aGlzIHRvbyBiaWcsIGFzIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHRoaXMgbWFueQotICog Q29weU11bHRpSW5zZXJ0QnVmZmVyIGl0ZW1zIHN0b3JlZCBpbiBDb3B5TXVsdGlJbnNlcnRJbmZv J3MKLSAqIG11bHRpSW5zZXJ0QnVmZmVycyBsaXN0LiAgSW5jcmVhc2luZyB0aGlzIGNhbiBjYXVz ZSBxdWFkcmF0aWMgZ3Jvd3RoIGluCi0gKiBtZW1vcnkgcmVxdWlyZW1lbnRzIGR1cmluZyBjb3Bp ZXMgaW50byBwYXJ0aXRpb25lZCB0YWJsZXMgd2l0aCBhIGxhcmdlCi0gKiBudW1iZXIgb2YgcGFy dGl0aW9ucy4KLSAqLwotI2RlZmluZSBNQVhfQlVGRkVSRURfVFVQTEVTCQkxMDAwCi0KLS8qCi0g KiBGbHVzaCBidWZmZXJzIGlmIHRoZXJlIGFyZSA+PSB0aGlzIG1hbnkgYnl0ZXMsIGFzIGNvdW50 ZWQgYnkgdGhlIGlucHV0Ci0gKiBzaXplLCBvZiB0dXBsZXMgc3RvcmVkLgotICovCi0jZGVmaW5l IE1BWF9CVUZGRVJFRF9CWVRFUwkJNjU1MzUKLQogLyogVHJpbSB0aGUgbGlzdCBvZiBidWZmZXJz IGJhY2sgZG93biB0byB0aGlzIG51bWJlciBhZnRlciBmbHVzaGluZyAqLwogI2RlZmluZSBNQVhf UEFSVElUSU9OX0JVRkZFUlMJMzIKIAogLyogU3RvcmVzIG11bHRpLWluc2VydCBkYXRhIHJlbGF0 ZWQgdG8gYSBzaW5nbGUgcmVsYXRpb24gaW4gQ29weUZyb20uICovCiB0eXBlZGVmIHN0cnVjdCBD b3B5TXVsdGlJbnNlcnRCdWZmZXIKIHsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdHNbTUFYX0JVRkZF UkVEX1RVUExFU107IC8qIEFycmF5IHRvIHN0b3JlIHR1cGxlcyAqLwotCVJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm87CS8qIFJlc3VsdFJlbEluZm8gZm9yICdyZWxpZCcgKi8KLQlCdWxrSW5z ZXJ0U3RhdGUgYmlzdGF0ZTsJLyogQnVsa0luc2VydFN0YXRlIGZvciB0aGlzIHJlbCAqLwotCWlu dAkJCW51c2VkOwkJCS8qIG51bWJlciBvZiAnc2xvdHMnIGNvbnRhaW5pbmcgdHVwbGVzICovCi0J dWludDY0CQlsaW5lbm9zW01BWF9CVUZGRVJFRF9UVVBMRVNdOwkvKiBMaW5lICMgb2YgdHVwbGUg aW4gY29weQotCQkJCQkJCQkJCQkJICogc3RyZWFtICovCisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0 YXRlOworCS8qIExpbmUgIyBvZiB0dXBsZSBpbiBjb3B5IHN0cmVhbS4gKi8KKwl1aW50NjQJCWxp bmVub3NbTUFYX0JVRkZFUkVEX1RVUExFU107CiB9IENvcHlNdWx0aUluc2VydEJ1ZmZlcjsKIAot LyoKLSAqIFN0b3JlcyBvbmUgb3IgbWFueSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJzIGFuZCBkZXRh aWxzIGFib3V0IHRoZSBzaXplIGFuZAotICogbnVtYmVyIG9mIHR1cGxlcyB3aGljaCBhcmUgc3Rv cmVkIGluIHRoZW0uICBUaGlzIGFsbG93cyBtdWx0aXBsZSBidWZmZXJzIHRvCi0gKiBleGlzdCBh dCBvbmNlIHdoZW4gQ09QWWluZyBpbnRvIGEgcGFydGl0aW9uZWQgdGFibGUuCi0gKi8KLXR5cGVk ZWYgc3RydWN0IENvcHlNdWx0aUluc2VydEluZm8KLXsKLQlMaXN0CSAgICptdWx0aUluc2VydEJ1 ZmZlcnM7IC8qIExpc3Qgb2YgdHJhY2tlZCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJzICovCi0JaW50 CQkJYnVmZmVyZWRUdXBsZXM7IC8qIG51bWJlciBvZiB0dXBsZXMgYnVmZmVyZWQgb3ZlciBhbGwg YnVmZmVycyAqLwotCWludAkJCWJ1ZmZlcmVkQnl0ZXM7CS8qIG51bWJlciBvZiBieXRlcyBmcm9t IGFsbCBidWZmZXJlZCB0dXBsZXMgKi8KLQlDb3B5RnJvbVN0YXRlCWNzdGF0ZTsJCQkvKiBDb3B5 IHN0YXRlIGZvciB0aGlzIENvcHlNdWx0aUluc2VydEluZm8gKi8KLQlFU3RhdGUJICAgKmVzdGF0 ZTsJCQkvKiBFeGVjdXRvciBzdGF0ZSB1c2VkIGZvciBDT1BZICovCi0JQ29tbWFuZElkCW15Y2lk OwkJCS8qIENvbW1hbmQgSWQgdXNlZCBmb3IgQ09QWSAqLwotCWludAkJCXRpX29wdGlvbnM7CQkv KiB0YWJsZSBpbnNlcnQgb3B0aW9ucyAqLwotfSBDb3B5TXVsdGlJbnNlcnRJbmZvOwotCi0KIC8q IG5vbi1leHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIGNoYXIgKmxpbWl0X3By aW50b3V0X2xlbmd0aChjb25zdCBjaGFyICpzdHIpOwogCkBAIC0yMTAsMTQzICsxNzMsNjEgQEAg bGltaXRfcHJpbnRvdXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKICAqIEFsbG9jYXRlIG1lbW9y eSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgZm9yIHRoaXMKICAq IFJlc3VsdFJlbEluZm8uCiAgKi8KLXN0YXRpYyBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKgotQ29w eU11bHRpSW5zZXJ0QnVmZmVySW5pdChSZXN1bHRSZWxJbmZvICpycmkpCi17Ci0JQ29weU11bHRp SW5zZXJ0QnVmZmVyICpidWZmZXI7Ci0KLQlidWZmZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVy ICopIHBhbGxvYyhzaXplb2YoQ29weU11bHRpSW5zZXJ0QnVmZmVyKSk7Ci0JbWVtc2V0KGJ1ZmZl ci0+c2xvdHMsIDAsIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBM RVMpOwotCWJ1ZmZlci0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKLQlidWZmZXItPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKLQlidWZmZXItPm51c2VkID0gMDsKLQotCXJldHVybiBidWZm ZXI7Ci19Ci0KLS8qCi0gKiBNYWtlIGEgbmV3IGJ1ZmZlciBmb3IgdGhpcyBSZXN1bHRSZWxJbmZv LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZl cihDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCi0JCQkJCQkJICAgUmVzdWx0UmVsSW5mbyAq cnJpKQorc3RhdGljIHZvaWQKK0luaXRDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbmZvKExpc3QgKipt aXJyaSwgUmVzdWx0UmVsSW5mbyAqcnJpLAorCQkJCQkJCSAgQ29tbWFuZElkIG15Y2lkLCBpbnQg dGlfb3B0aW9ucykKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKIAotCWJ1ZmZl ciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQocnJpKTsKKwlidWZmZXIgPSAoQ29weU11bHRp SW5zZXJ0QnVmZmVyICopIHBhbGxvYzAoc2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZlcikpOwor CWJ1ZmZlci0+aXN0YXRlID0gdGFibGVfaW5zZXJ0X2JlZ2luKHJyaS0+cmlfUmVsYXRpb25EZXNj LCBteWNpZCwKKwkJCQkJCQkJCQl0aV9vcHRpb25zLCB0cnVlLCB0cnVlKTsKIAogCS8qIFNldHVw IGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhpcyBidWZmZXIgYWdhaW4gKi8KIAly cmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZlcjsKLQkvKiBSZWNvcmQgdGhhdCB3 ZSdyZSB0cmFja2luZyB0aGlzIGJ1ZmZlciAqLwotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJz ID0gbGFwcGVuZChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycywgYnVmZmVyKTsKKwkqbWlycmkg PSBsYXBwZW5kKCptaXJyaSwgcnJpKTsKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgYW4gYWxyZWFk eSBhbGxvY2F0ZWQgQ29weU11bHRpSW5zZXJ0SW5mby4KLSAqCi0gKiBJZiBycmkgaXMgYSBub24t cGFydGl0aW9uZWQgdGFibGUgdGhlbiBhIENvcHlNdWx0aUluc2VydEJ1ZmZlciBpcyBzZXQgdXAK LSAqIGZvciB0aGF0IHRhYmxlLgorICogUnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMgb3Ig aW5zZXJ0IGludG8gaW5kZXhlcywgaWYgYW55LCBhZnRlciBidWZmZXJlZAorICogdHVwbGVzIGFy ZSBmbHVzaGVkIHRvIHRhYmxlLgogICovCiBzdGF0aWMgdm9pZAotQ29weU11bHRpSW5zZXJ0SW5m b0luaXQoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCi0J CQkJCQlDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUsIENvbW1hbmRJZCBteWNp ZCwKLQkJCQkJCWludCB0aV9vcHRpb25zKQorSGFuZGxlQWZ0ZXJSb3dFdmVudHMoUmVzdWx0UmVs SW5mbyAqcnJpLCBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJIENvcHlGcm9tU3RhdGUgY3N0YXRlLCBp bnQzMiBjdXJfc2xvdHMpCiB7Ci0JbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMgPSBOSUw7Ci0J bWlpbmZvLT5idWZmZXJlZFR1cGxlcyA9IDA7Ci0JbWlpbmZvLT5idWZmZXJlZEJ5dGVzID0gMDsK LQltaWluZm8tPmNzdGF0ZSA9IGNzdGF0ZTsKLQltaWluZm8tPmVzdGF0ZSA9IGVzdGF0ZTsKLQlt aWluZm8tPm15Y2lkID0gbXljaWQ7Ci0JbWlpbmZvLT50aV9vcHRpb25zID0gdGlfb3B0aW9uczsK LQotCS8qCi0JICogT25seSBzZXR1cCB0aGUgYnVmZmVyIHdoZW4gbm90IGRlYWxpbmcgd2l0aCBh IHBhcnRpdGlvbmVkIHRhYmxlLgotCSAqIEJ1ZmZlcnMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcyB3 aWxsIGp1c3QgYmUgc2V0dXAgd2hlbiB3ZSBuZWVkIHRvIHNlbmQKLQkgKiB0dXBsZXMgdGhlaXIg d2F5IGZvciB0aGUgZmlyc3QgdGltZS4KLQkgKi8KLQlpZiAocnJpLT5yaV9SZWxhdGlvbkRlc2Mt PnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlDb3B5TXVs dGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIobWlpbmZvLCBycmkpOwotfQotCi0vKgotICogUmV0dXJu cyB0cnVlIGlmIHRoZSBidWZmZXJzIGFyZSBmdWxsCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAot Q29weU11bHRpSW5zZXJ0SW5mb0lzRnVsbChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8pCi17 Ci0JaWYgKG1paW5mby0+YnVmZmVyZWRUdXBsZXMgPj0gTUFYX0JVRkZFUkVEX1RVUExFUyB8fAot CQltaWluZm8tPmJ1ZmZlcmVkQnl0ZXMgPj0gTUFYX0JVRkZFUkVEX0JZVEVTKQotCQlyZXR1cm4g dHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIHRydWUgaWYgd2UgaGF2 ZSBubyBidWZmZXJlZCB0dXBsZXMKLSAqLwotc3RhdGljIGlubGluZSBib29sCi1Db3B5TXVsdGlJ bnNlcnRJbmZvSXNFbXB0eShDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8pCi17Ci0JcmV0dXJu IG1paW5mby0+YnVmZmVyZWRUdXBsZXMgPT0gMDsKLX0KLQotLyoKLSAqIFdyaXRlIHRoZSB0dXBs ZXMgc3RvcmVkIGluICdidWZmZXInIG91dCB0byB0aGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbmxp bmUgdm9pZAotQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAq bWlpbmZvLAotCQkJCQkJICAgQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIpCi17Ci0JTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OwotCWludAkJCWk7Ci0JdWludDY0CQlzYXZlX2N1cl9saW5l bm87Ci0JQ29weUZyb21TdGF0ZQljc3RhdGUgPSBtaWluZm8tPmNzdGF0ZTsKLQlFU3RhdGUJICAg KmVzdGF0ZSA9IG1paW5mby0+ZXN0YXRlOwotCUNvbW1hbmRJZAlteWNpZCA9IG1paW5mby0+bXlj aWQ7Ci0JaW50CQkJdGlfb3B0aW9ucyA9IG1paW5mby0+dGlfb3B0aW9uczsKLQlib29sCQlsaW5l X2J1Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9idWZfdmFsaWQ7Ci0JaW50CQkJbnVzZWQgPSBidWZm ZXItPm51c2VkOwotCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8gPSBidWZmZXItPnJlc3Vs dFJlbEluZm87Ci0JVHVwbGVUYWJsZVNsb3QgKipzbG90cyA9IGJ1ZmZlci0+c2xvdHM7CisJaW50 IGk7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUlu c2VydEJ1ZmZlcjsKKwlUYWJsZUluc2VydFN0YXRlICppc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsK Kwl1aW50NjQJc2F2ZV9jdXJfbGluZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOworCWJvb2wJbGlu ZV9idWZfdmFsaWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwogCi0JLyoKLQkgKiBQcmludCBl cnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYgb25lIG9mIHRoZSBvcGVyYXRp b25zCi0JICogYmVsb3cgZmFpbC4KLQkgKi8KIAljc3RhdGUtPmxpbmVfYnVmX3ZhbGlkID0gZmFs c2U7Ci0Jc2F2ZV9jdXJfbGluZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOwogCi0JLyoKLQkgKiB0 YWJsZV9tdWx0aV9pbnNlcnQgbWF5IGxlYWsgbWVtb3J5LCBzbyBzd2l0Y2ggdG8gc2hvcnQtbGl2 ZWQgbWVtb3J5Ci0JICogY29udGV4dCBiZWZvcmUgY2FsbGluZyBpdC4KLQkgKi8KLQlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3Rh dGUpKTsKLQl0YWJsZV9tdWx0aV9pbnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNj LAotCQkJCQkgICBzbG90cywKLQkJCQkJICAgbnVzZWQsCi0JCQkJCSAgIG15Y2lkLAotCQkJCQkg ICB0aV9vcHRpb25zLAotCQkJCQkgICBidWZmZXItPmJpc3RhdGUpOwotCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQorCWZv ciAoaSA9IDA7IGkgPCBjdXJfc2xvdHM7IGkrKykKIAl7CiAJCS8qCiAJCSAqIElmIHRoZXJlIGFy ZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5zZXJ0ZWQgdHVwbGVzLAog CQkgKiBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMuCiAJCSAqLwotCQlpZiAocmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJCWlmIChycmktPnJpX051bUluZGljZXMg PiAwKQogCQl7Ci0JCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKKwkJCUxpc3QgICAgICAgKnJl Y2hlY2tJbmRleGVzOwogCiAJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3Nb aV07Ci0JCQlyZWNoZWNrSW5kZXhlcyA9Ci0JCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3Vs dFJlbEluZm8sCi0JCQkJCQkJCQkgIGJ1ZmZlci0+c2xvdHNbaV0sIGVzdGF0ZSwgZmFsc2UsIGZh bHNlLAotCQkJCQkJCQkJICBOVUxMLCBOSUwpOwotCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0 YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAot CQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOworCQkJcmVjaGVja0luZGV4ZXMg PSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocnJpLAorCQkJCQkJCQkJCQkJCWlzdGF0ZS0+bWlfc2xv dHNbaV0sIGVzdGF0ZSwKKwkJCQkJCQkJCQkJCQlmYWxzZSwKKwkJCQkJCQkJCQkJCQlmYWxzZSwK KwkJCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQkJCU5VTEwpOworCisJCQlFeGVjQVJJbnNl cnRUcmlnZ2Vycyhlc3RhdGUsCisJCQkJCQkJCXJyaSwKKwkJCQkJCQkJaXN0YXRlLT5taV9zbG90 c1tpXSwKKwkJCQkJCQkJcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJCWNzdGF0ZS0+dHJhbnNpdGlv bl9jYXB0dXJlKTsKKwogCQkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKIAkJfQogCkBAIC0z NTQsNzkgKzIzNSw2OSBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNl cnRJbmZvICptaWluZm8sCiAJCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBu ZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUCiAJCSAqIHRyaWdnZXJzIGFueXdheS4KIAkJICov Ci0JCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJCQkg KHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKLQkJ CQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpKQor CQllbHNlIGlmIChycmktPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJCQkgKHJyaS0+cmlfVHJp Z0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJCSAgcnJpLT5yaV9UcmlnRGVzYy0+ dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKIAkJewogCQkJY3N0YXRlLT5jdXJfbGluZW5vID0gYnVm ZmVyLT5saW5lbm9zW2ldOwotCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRS ZWxJbmZvLAotCQkJCQkJCQkgc2xvdHNbaV0sIE5JTCwgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1 cmUpOworCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLAorCQkJCQkJCQkgcnJpLAorCQkJ CQkJCQkgaXN0YXRlLT5taV9zbG90c1tpXSwKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBjc3Rh dGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CiAJCX0KLQotCQlFeGVjQ2xlYXJUdXBsZShzbG90c1tp XSk7CiAJfQogCi0JLyogTWFyayB0aGF0IGFsbCBzbG90cyBhcmUgZnJlZSAqLwotCWJ1ZmZlci0+ bnVzZWQgPSAwOwotCiAJLyogcmVzZXQgY3VyX2xpbmVubyBhbmQgbGluZV9idWZfdmFsaWQgdG8g d2hhdCB0aGV5IHdlcmUgKi8KIAljc3RhdGUtPmxpbmVfYnVmX3ZhbGlkID0gbGluZV9idWZfdmFs aWQ7CiAJY3N0YXRlLT5jdXJfbGluZW5vID0gc2F2ZV9jdXJfbGluZW5vOwotfQorIH0KIAogLyoK LSAqIERyb3AgdXNlZCBzbG90cyBhbmQgZnJlZSBtZW1iZXIgZm9yIHRoaXMgYnVmZmVyLgotICoK LSAqIFRoZSBidWZmZXIgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBjbGVhbnVwLgorICogU3RvcmUg dHVwbGUgZnJvbSB0aGUgaW5jb21pbmcgc2xvdCBpbnRvIGJ1ZmZlcmVkIHNsb3RzLgogICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZl cikKK3N0YXRpYyB2b2lkCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJUdXBsZShSZXN1bHRSZWxJbmZv ICpycmksIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJICAgQ29weUZyb21TdGF0ZSBjc3Rh dGUsIEVTdGF0ZSAqZXN0YXRlKQogewotCWludAkJCWk7Ci0KLQkvKiBFbnN1cmUgYnVmZmVyIHdh cyBmbHVzaGVkICovCi0JQXNzZXJ0KGJ1ZmZlci0+bnVzZWQgPT0gMCk7Ci0KLQkvKiBSZW1vdmUg YmFjay1saW5rIHRvIG91cnNlbGYgKi8KLQlidWZmZXItPnJlc3VsdFJlbEluZm8tPnJpX0NvcHlN dWx0aUluc2VydEJ1ZmZlciA9IE5VTEw7Ci0KLQlGcmVlQnVsa0luc2VydFN0YXRlKGJ1ZmZlci0+ YmlzdGF0ZSk7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlN dWx0aUluc2VydEJ1ZmZlcjsKKwlUYWJsZUluc2VydFN0YXRlICppc3RhdGUgPSBidWZmZXItPmlz dGF0ZTsKIAotCS8qIFNpbmNlIHdlIG9ubHkgY3JlYXRlIHNsb3RzIG9uIGRlbWFuZCwganVzdCBk cm9wIHRoZSBub24tbnVsbCBvbmVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVGRkVSRURf VFVQTEVTICYmIGJ1ZmZlci0+c2xvdHNbaV0gIT0gTlVMTDsgaSsrKQotCQlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KGJ1ZmZlci0+c2xvdHNbaV0pOworCXRhYmxlX211bHRpX2luc2VydF92 MihidWZmZXItPmlzdGF0ZSwgc2xvdCk7CiAKLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoYnVm ZmVyLT5yZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkJIG1paW5mby0+dGlf b3B0aW9ucyk7CisJYnVmZmVyLT5saW5lbm9zW2lzdGF0ZS0+bWlfY3VyX3Nsb3RzIC0gMV0gPSBj c3RhdGUtPmN1cl9saW5lbm87CiAKLQlwZnJlZShidWZmZXIpOworCWlmIChpc3RhdGUtPmZsdXNo ZWQpCisJCUhhbmRsZUFmdGVyUm93RXZlbnRzKHJyaSwgZXN0YXRlLCBjc3RhdGUsIGlzdGF0ZS0+ bWlfY3VyX3Nsb3RzKTsKIH0KIAogLyoKLSAqIFdyaXRlIG91dCBhbGwgc3RvcmVkIHR1cGxlcyBp biBhbGwgYnVmZmVycyBvdXQgdG8gdGhlIHRhYmxlcy4KLSAqCi0gKiBPbmNlIGZsdXNoZWQgd2Ug YWxzbyB0cmltIHRoZSB0cmFja2VkIGJ1ZmZlcnMgbGlzdCBkb3duIHRvIHNpemUgYnkgcmVtb3Zp bmcKLSAqIHRoZSBidWZmZXJzIGNyZWF0ZWQgZWFybGllc3QgZmlyc3QuCi0gKgotICogQ2FsbGVy cyBzaG91bGQgcGFzcyAnY3Vycl9ycmknIGlzIHRoZSBSZXN1bHRSZWxJbmZvIHRoYXQncyBjdXJy ZW50bHkgYmVpbmcKLSAqIHVzZWQuICBXaGVuIGNsZWFuaW5nIHVwIG9sZCBidWZmZXJzIHdlJ2xs IG5ldmVyIHJlbW92ZSB0aGUgb25lIGZvcgotICogJ2N1cnJfcnJpJy4KKyAqIEZsdXNoIHR1cGxl cyBpbnRvIHRhYmxlIGZyb20gdGhlIGJ1ZmZlcmVkIHNsb3RzLgogICovCi1zdGF0aWMgaW5saW5l IHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9GbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWlu Zm8sIFJlc3VsdFJlbEluZm8gKmN1cnJfcnJpKQoteworc3RhdGljIHZvaWQKK0NvcHlNdWxpdElu c2VydEZsdXNoQnVmZmVycyhMaXN0ICoqbWlycmksIFJlc3VsdFJlbEluZm8gKmN1cnJfcnJpLAor CQkJCQkJCUNvcHlGcm9tU3RhdGUgY3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSkKKyB7CiAJTGlzdENl bGwgICAqbGM7CisJUmVzdWx0UmVsSW5mbyAqcnJpOworCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAq YnVmZmVyOworCVRhYmxlSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKIAotCWZvcmVhY2gobGMsIG1paW5m by0+bXVsdGlJbnNlcnRCdWZmZXJzKQorCWZvcmVhY2gobGMsICptaXJyaSkKIAl7Ci0JCUNvcHlN dWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBsZmly c3QobGMpOworCQlycmkgPSBsZmlyc3QobGMpOworCQlidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0 aUluc2VydEJ1ZmZlcjsKKwkJaXN0YXRlID0gYnVmZmVyLT5pc3RhdGU7CisKKwkJdGFibGVfbXVs dGlfaW5zZXJ0X2ZsdXNoKGlzdGF0ZSk7CiAKLQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2go bWlpbmZvLCBidWZmZXIpOworCQlpZiAoaXN0YXRlLT5mbHVzaGVkKQorCQkJSGFuZGxlQWZ0ZXJS b3dFdmVudHMocnJpLCBlc3RhdGUsIGNzdGF0ZSwgaXN0YXRlLT5taV9jdXJfc2xvdHMpOwogCX0K IAotCW1paW5mby0+YnVmZmVyZWRUdXBsZXMgPSAwOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyA9 IDA7CisJcnJpID0gTlVMTDsKKwlidWZmZXIgPSBOVUxMOworCWlzdGF0ZSA9IE5VTEw7CiAKIAkv KgogCSAqIFRyaW0gdGhlIGxpc3Qgb2YgdHJhY2tlZCBidWZmZXJzIGRvd24gaWYgaXQgZXhjZWVk cyB0aGUgbGltaXQuICBIZXJlIHdlCkBAIC00MzQsODcgKzMwNSw1OSBAQCBDb3B5TXVsdGlJbnNl cnRJbmZvRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpj dXJyX3JyaSkKIAkgKiBsaWtlbHkgdGhhdCB0aGVzZSBvbGRlciBvbmVzIHdpbGwgYmUgbmVlZGVk IHRoYW4gdGhlIG9uZXMgdGhhdCB3ZXJlCiAJICoganVzdCBjcmVhdGVkLgogCSAqLwotCXdoaWxl IChsaXN0X2xlbmd0aChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycykgPiBNQVhfUEFSVElUSU9O X0JVRkZFUlMpCisJd2hpbGUgKGxpc3RfbGVuZ3RoKCptaXJyaSkgPiBNQVhfUEFSVElUSU9OX0JV RkZFUlMpCiAJewotCQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsKKwkJaW50IHRpX29w dGlvbnM7CiAKLQkJYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAqKSBsaW5pdGlhbCht aWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7CisJCXJyaSA9IChSZXN1bHRSZWxJbmZvICopIGxp bml0aWFsKCptaXJyaSk7CiAKIAkJLyoKIAkJICogV2UgbmV2ZXIgd2FudCB0byByZW1vdmUgdGhl IGJ1ZmZlciB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHVzZWQsIHNvCiAJCSAqIGlmIHdlIGhhcHBl biB0byBmaW5kIHRoYXQgdGhlbiBtb3ZlIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAJCSAq LwotCQlpZiAoYnVmZmVyLT5yZXN1bHRSZWxJbmZvID09IGN1cnJfcnJpKQorCQlpZiAocnJpID09 IGN1cnJfcnJpKQogCQl7Ci0JCQltaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyA9IGxpc3RfZGVs ZXRlX2ZpcnN0KG1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKLQkJCW1paW5mby0+bXVsdGlJ bnNlcnRCdWZmZXJzID0gbGFwcGVuZChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycywgYnVmZmVy KTsKLQkJCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgbGluaXRpYWwobWlpbmZv LT5tdWx0aUluc2VydEJ1ZmZlcnMpOworCQkJKm1pcnJpID0gbGlzdF9kZWxldGVfZmlyc3QoKm1p cnJpKTsKKwkJCSptaXJyaSA9IGxhcHBlbmQoKm1pcnJpLCBycmkpOworCQkJcnJpID0gKFJlc3Vs dFJlbEluZm8gKikgbGluaXRpYWwoKm1pcnJpKTsKIAkJfQogCi0JCUNvcHlNdWx0aUluc2VydEJ1 ZmZlckNsZWFudXAobWlpbmZvLCBidWZmZXIpOwotCQltaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVy cyA9IGxpc3RfZGVsZXRlX2ZpcnN0KG1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKLQl9Ci19 CisJCWJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCQlpc3RhdGUgPSBi dWZmZXItPmlzdGF0ZTsKKwkJdGlfb3B0aW9ucyA9IGlzdGF0ZS0+b3B0aW9uczsKIAotLyoKLSAq IENsZWFudXAgYWxsb2NhdGVkIGJ1ZmZlcnMgYW5kIGZyZWUgbWVtb3J5Ci0gKi8KLXN0YXRpYyBp bmxpbmUgdm9pZAotQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvKQotewotCUxpc3RDZWxsICAgKmxjOwotCi0JZm9yZWFjaChsYywgbWlpbmZvLT5t dWx0aUluc2VydEJ1ZmZlcnMpCi0JCUNvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAobWlpbmZv LCBsZmlyc3QobGMpKTsKKwkJdGFibGVfaW5zZXJ0X2VuZChpc3RhdGUpOworCQl0YWJsZV9maW5p c2hfYnVsa19pbnNlcnQocnJpLT5yaV9SZWxhdGlvbkRlc2MsIHRpX29wdGlvbnMpOwogCi0JbGlz dF9mcmVlKG1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKKwkJKm1pcnJpID0gbGlzdF9kZWxl dGVfZmlyc3QoKm1pcnJpKTsKKwl9CiB9CiAKIC8qCi0gKiBHZXQgdGhlIG5leHQgVHVwbGVUYWJs ZVNsb3QgdGhhdCB0aGUgbmV4dCB0dXBsZSBzaG91bGQgYmUgc3RvcmVkIGluLgotICoKLSAqIENh bGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsLgotICoKLSAqIE5v dGU6ICdtaWluZm8nIGlzIHVudXNlZCBidXQgaGFzIGJlZW4gaW5jbHVkZWQgZm9yIGNvbnNpc3Rl bmN5IHdpdGggdGhlCi0gKiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhLgorICogRHJvcCB0 aGUgYnVmZmVyZWQgc2xvdHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNsb3QgKgot Q29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWlu Zm8sCi0JCQkJCQkJCVJlc3VsdFJlbEluZm8gKnJyaSkKK3N0YXRpYyB2b2lkCitDb3B5TXVsaXRJ bnNlcnREcm9wQnVmZmVycyhMaXN0ICptaXJyaSkKIHsKLQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwotCWludAkJCW51c2VkID0g YnVmZmVyLT5udXNlZDsKLQotCUFzc2VydChidWZmZXIgIT0gTlVMTCk7Ci0JQXNzZXJ0KG51c2Vk IDwgTUFYX0JVRkZFUkVEX1RVUExFUyk7CisJTGlzdENlbGwgICAqbGM7CiAKLQlpZiAoYnVmZmVy LT5zbG90c1tudXNlZF0gPT0gTlVMTCkKLQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSB0YWJsZV9z bG90X2NyZWF0ZShycmktPnJpX1JlbGF0aW9uRGVzYywgTlVMTCk7Ci0JcmV0dXJuIGJ1ZmZlci0+ c2xvdHNbbnVzZWRdOwotfQorCWZvcmVhY2gobGMsIG1pcnJpKQorCXsKKwkJaW50IHRpX29wdGlv bnM7CisJCVJlc3VsdFJlbEluZm8gKnJyaSA9IGxmaXJzdChsYyk7CisJCUNvcHlNdWx0aUluc2Vy dEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CisJCVRhYmxl SW5zZXJ0U3RhdGUgKmlzdGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOwogCi0vKgotICogUmVjb3JkIHRo ZSBwcmV2aW91c2x5IHJlc2VydmVkIFR1cGxlVGFibGVTbG90IHRoYXQgd2FzIHJlc2VydmVkIGJ5 Ci0gKiBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90IGFzIGJlaW5nIGNvbnN1bWVkLgot ICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5TXVs dGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKLQkJCQkJCSBUdXBsZVRh YmxlU2xvdCAqc2xvdCwgaW50IHR1cGxlbiwgdWludDY0IGxpbmVubykKLXsKLQlDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCQl0 aV9vcHRpb25zID0gaXN0YXRlLT5vcHRpb25zOwogCi0JQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsK LQlBc3NlcnQoc2xvdCA9PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKKwkJdGFibGVf aW5zZXJ0X2VuZChpc3RhdGUpOwogCi0JLyogU3RvcmUgdGhlIGxpbmUgbnVtYmVyIHNvIHdlIGNh biBwcm9wZXJseSByZXBvcnQgYW55IGVycm9ycyBsYXRlciAqLwotCWJ1ZmZlci0+bGluZW5vc1ti dWZmZXItPm51c2VkXSA9IGxpbmVubzsKKwkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJyaS0+ cmlfUmVsYXRpb25EZXNjLCB0aV9vcHRpb25zKTsKIAotCS8qIFJlY29yZCB0aGlzIHNsb3QgYXMg YmVpbmcgdXNlZCAqLwotCWJ1ZmZlci0+bnVzZWQrKzsKKwkJcGZyZWUoYnVmZmVyKTsKKwl9CiAK LQkvKiBVcGRhdGUgaG93IG1hbnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5kIHRoZWlyIHNpemUgKi8K LQltaWluZm8tPmJ1ZmZlcmVkVHVwbGVzKys7Ci0JbWlpbmZvLT5idWZmZXJlZEJ5dGVzICs9IHR1 cGxlbjsKKwlsaXN0X2ZyZWUobWlycmkpOwogfQogCiAvKgpAQCAtNTI5LDIwICszNzIsMjAgQEAg Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJRVN0YXRlCSAgICplc3RhdGUgPSBDcmVh dGVFeGVjdXRvclN0YXRlKCk7IC8qIGZvciBFeGVjQ29uc3RyYWludHMoKSAqLwogCU1vZGlmeVRh YmxlU3RhdGUgKm10c3RhdGU7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwotCVR1cGxlVGFibGVT bG90ICpzaW5nbGVzbG90ID0gTlVMTDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IE5VTEw7CiAJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAKIAlQYXJ0 aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSA9IE5VTEw7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sg ZXJyY2FsbGJhY2s7CiAJQ29tbWFuZElkCW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVl KTsKIAlpbnQJCQl0aV9vcHRpb25zID0gMDsgLyogc3RhcnQgd2l0aCBkZWZhdWx0IG9wdGlvbnMg Zm9yIGluc2VydCAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVMTDsKIAlDb3B5SW5z ZXJ0TWV0aG9kIGluc2VydE1ldGhvZDsKLQlDb3B5TXVsdGlJbnNlcnRJbmZvIG11bHRpSW5zZXJ0 SW5mbyA9IHswfTsJLyogcGFjaWZ5IGNvbXBpbGVyICovCiAJdWludDY0CQlwcm9jZXNzZWQgPSAw OwogCWJvb2wJCWhhc19iZWZvcmVfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWhhc19pbnN0ZWFk X2luc2VydF9yb3dfdHJpZzsKIAlib29sCQlsZWFmcGFydF91c2VfbXVsdGlfaW5zZXJ0ID0gZmFs c2U7CisJTGlzdAkgICAqbXVsdGlfaW5zZXJ0X3JyaXMgPSBOVUxMOworCVRhYmxlSW5zZXJ0U3Rh dGUgKmlzdGF0ZSA9IE5VTEw7CiAKIAlBc3NlcnQoY3N0YXRlLT5yZWwpOwogCUFzc2VydChsaXN0 X2xlbmd0aChjc3RhdGUtPnJhbmdlX3RhYmxlKSA9PSAxKTsKQEAgLTcyNiw3ICs1NjksNyBAQCBD b3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJICogRm9yIHBhcnRpdGlvbmVkIHRhYmxl cyB3ZSBjYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMgd2hlbiB0aGVyZQogCQkgKiBhcmUgYW55 IHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv CiAJCSAqIGFsbG93IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIHN1Y2ggdHJpZ2dlcnMgaW4gdGhl IGZ1dHVyZSwgYnV0IGZvcgotCQkgKiBub3csIENvcHlNdWx0aUluc2VydEluZm9GbHVzaCBleHBl Y3RzIHRoYXQgYW55IGJlZm9yZSByb3cgaW5zZXJ0CisJCSAqIG5vdywgQ29weU11bGl0SW5zZXJ0 Rmx1c2hCdWZmZXJzIGV4cGVjdHMgdGhhdCBhbnkgYmVmb3JlIHJvdyBpbnNlcnQKIAkJICogYW5k IHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMgYXJlIG9uIHRoZSBzYW1lIHJlbGF0aW9u LgogCQkgKi8KIAkJaW5zZXJ0TWV0aG9kID0gQ0lNX1NJTkdMRTsKQEAgLTc3NCwyMiArNjE3LDIy IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQllbHNlCiAJCQlpbnNlcnRNZXRo b2QgPSBDSU1fTVVMVEk7CiAKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0luaXQoJm11bHRpSW5zZXJ0 SW5mbywgcmVzdWx0UmVsSW5mbywgY3N0YXRlLAotCQkJCQkJCQllc3RhdGUsIG15Y2lkLCB0aV9v cHRpb25zKTsKKwkJLyoKKwkJKiBPbmx5IHNldHVwIHRoZSBidWZmZXIgd2hlbiBub3QgZGVhbGlu ZyB3aXRoIGEgcGFydGl0aW9uZWQgdGFibGUuCisJCSogQnVmZmVycyBmb3IgcGFydGl0aW9uZWQg dGFibGVzIHdpbGwganVzdCBiZSBzZXR1cCB3aGVuIHdlIG5lZWQgdG8KKwkJKiBzZW5kIHR1cGxl cyB0aGVpciB3YXkgZm9yIHRoZSBmaXJzdCB0aW1lLgorCQkqLworCQlpZiAoIXByb3V0ZSkKKwkJ CUluaXRDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbmZvKCZtdWx0aV9pbnNlcnRfcnJpcywgcmVzdWx0 UmVsSW5mbywKKwkJCQkJCQkJCQkgIG15Y2lkLCB0aV9vcHRpb25zKTsKIAl9CiAKIAkvKgotCSAq IElmIG5vdCB1c2luZyBiYXRjaCBtb2RlICh3aGljaCBhbGxvY2F0ZXMgc2xvdHMgYXMgbmVlZGVk KSBzZXQgdXAgYQotCSAqIHR1cGxlIHNsb3QgdG9vLiBXaGVuIGluc2VydGluZyBpbnRvIGEgcGFy dGl0aW9uZWQgdGFibGUsIHdlIGFsc28gbmVlZAotCSAqIG9uZSwgZXZlbiBpZiB3ZSBtaWdodCBi YXRjaCBpbnNlcnQsIHRvIHJlYWQgdGhlIHR1cGxlIGluIHRoZSByb290Ci0JICogcGFydGl0aW9u J3MgZm9ybS4KKwkgKiBTZXQgdXAgYSB0dXBsZSBzbG90IHRvIHdoaWNoIHRoZSBpbnB1dCBkYXRh IGZyb20gY29weSBzdHJlYW0gaXMgcmVhZAorCSAqIGludG8gYW5kIHVzZWQgZm9yIGluc2VydHMg aW50byB0YWJsZS4KIAkgKi8KLQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9TSU5HTEUgfHwgaW5z ZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCkKLQl7Ci0JCXNpbmdsZXNsb3QgPSB0 YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkJ CQkgICAmZXN0YXRlLT5lc190dXBsZVRhYmxlKTsKLQkJYmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRT dGF0ZSgpOwotCX0KKwlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjLAorCQkJCQkJCSAmZXN0YXRlLT5lc190dXBsZVRhYmxlKTsKIAogCWhhc19i ZWZvcmVfaW5zZXJ0X3Jvd190cmlnID0gKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCiAJ CQkJCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2JlZm9yZV9y b3cpOwpAQCAtODI3LDE5ICs2NzAsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkK IAkJUmVzZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSk7CiAKIAkJLyogc2VsZWN0IHNsb3Qg dG8gKGluaXRpYWxseSkgbG9hZCByb3cgaW50byAqLwotCQlpZiAoaW5zZXJ0TWV0aG9kID09IENJ TV9TSU5HTEUgfHwgcHJvdXRlKQotCQl7Ci0JCQlteXNsb3QgPSBzaW5nbGVzbG90OwotCQkJQXNz ZXJ0KG15c2xvdCAhPSBOVUxMKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCUFzc2VydChyZXN1bHRS ZWxJbmZvID09IHRhcmdldF9yZXN1bHRSZWxJbmZvKTsKLQkJCUFzc2VydChpbnNlcnRNZXRob2Qg PT0gQ0lNX01VTFRJKTsKLQotCQkJbXlzbG90ID0gQ29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVl U2xvdCgmbXVsdGlJbnNlcnRJbmZvLAotCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvKTsKLQkJ fQorCQlteXNsb3QgPSBzbG90OworCQlBc3NlcnQobXlzbG90ICE9IE5VTEwpOwogCiAJCS8qCiAJ CSAqIFN3aXRjaCB0byBwZXItdHVwbGUgY29udGV4dCBiZWZvcmUgY2FsbGluZyBOZXh0Q29weUZy b20sIHdoaWNoIGRvZXMKQEAgLTkwNywyMSArNzM5LDIyIEBAIENvcHlGcm9tKENvcHlGcm9tU3Rh dGUgY3N0YXRlKQogCQkJCWlmIChsZWFmcGFydF91c2VfbXVsdGlfaW5zZXJ0KQogCQkJCXsKIAkJ CQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9PSBOVUxMKQot CQkJCQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKCZtdWx0aUluc2VydEluZm8sCi0J CQkJCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbyk7CisJCQkJCQlJbml0Q29weU11bHRpSW5zZXJ0 QnVmZmVySW5mbygmbXVsdGlfaW5zZXJ0X3JyaXMsCisJCQkJCQkJCQkJCQkJICByZXN1bHRSZWxJ bmZvLCBteWNpZCwKKwkJCQkJCQkJCQkJCQkgIHRpX29wdGlvbnMpOwogCQkJCX0KLQkJCQllbHNl IGlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMICYmCi0JCQkJCQkgIUNv cHlNdWx0aUluc2VydEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQorCQkJCWVsc2UgaWYg KGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwpCiAJCQkJewogCQkJCQkvKgog CQkJCQkgKiBGbHVzaCBwZW5kaW5nIGluc2VydHMgaWYgdGhpcyBwYXJ0aXRpb24gY2FuJ3QgdXNl CiAJCQkJCSAqIGJhdGNoaW5nLCBzbyByb3dzIGFyZSB2aXNpYmxlIHRvIHRyaWdnZXJzIGV0Yy4K IAkJCQkJICovCi0JCQkJCUNvcHlNdWx0aUluc2VydEluZm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZv LCByZXN1bHRSZWxJbmZvKTsKKwkJCQkJQ29weU11bGl0SW5zZXJ0Rmx1c2hCdWZmZXJzKCZtdWx0 aV9pbnNlcnRfcnJpcywKKwkJCQkJCQkJCQkJCXJlc3VsdFJlbEluZm8sIGNzdGF0ZSwgZXN0YXRl KTsKIAkJCQl9CiAKLQkJCQlpZiAoYmlzdGF0ZSAhPSBOVUxMKQotCQkJCQlSZWxlYXNlQnVsa0lu c2VydFN0YXRlUGluKGJpc3RhdGUpOworCQkJCWlmIChpc3RhdGUgJiYgaXN0YXRlLT5iaXN0YXRl KQorCQkJCQlSZWxlYXNlQnVsa0luc2VydFN0YXRlUGluKGlzdGF0ZS0+YmlzdGF0ZSk7CiAJCQkJ cHJldlJlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvOwogCQkJfQogCkBAIC05NjMsOCArNzk2 LDggQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJLyogbm8gb3RoZXIgcGF0 aCBhdmFpbGFibGUgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJCQkJQXNzZXJ0KGluc2VydE1l dGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwpOwogCi0JCQkJYmF0Y2hzbG90ID0gQ29weU11 bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdCgmbXVsdGlJbnNlcnRJbmZvLAotCQkJCQkJCQkJCQkJ CQkJcmVzdWx0UmVsSW5mbyk7CisJCQkJYmF0Y2hzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVz dWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkgICZlc3RhdGUtPmVzX3R1 cGxlVGFibGUpOwogCiAJCQkJaWYgKG1hcCAhPSBOVUxMKQogCQkJCQlteXNsb3QgPSBleGVjdXRl X2F0dHJfbWFwX3Nsb3QobWFwLT5hdHRyTWFwLCBteXNsb3QsCkBAIC0xMDM2LDI0ICs4NjksOSBA QCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkvKiBTdG9yZSB0aGUgc2xvdCBp biB0aGUgbXVsdGktaW5zZXJ0IGJ1ZmZlciwgd2hlbiBlbmFibGVkLiAqLwogCQkJCWlmIChpbnNl cnRNZXRob2QgPT0gQ0lNX01VTFRJIHx8IGxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQpCiAJCQkJ ewotCQkJCQkvKgotCQkJCQkgKiBUaGUgc2xvdCBwcmV2aW91c2x5IG1pZ2h0IHBvaW50IGludG8g dGhlIHBlci10dXBsZQotCQkJCQkgKiBjb250ZXh0LiBGb3IgYmF0Y2hpbmcgaXQgbmVlZHMgdG8g YmUgbG9uZ2VyIGxpdmVkLgotCQkJCQkgKi8KLQkJCQkJRXhlY01hdGVyaWFsaXplU2xvdChteXNs b3QpOwotCiAJCQkJCS8qIEFkZCB0aGlzIHR1cGxlIHRvIHRoZSB0dXBsZSBidWZmZXIgKi8KLQkJ CQkJQ29weU11bHRpSW5zZXJ0SW5mb1N0b3JlKCZtdWx0aUluc2VydEluZm8sCi0JCQkJCQkJCQkJ CSByZXN1bHRSZWxJbmZvLCBteXNsb3QsCi0JCQkJCQkJCQkJCSBjc3RhdGUtPmxpbmVfYnVmLmxl biwKLQkJCQkJCQkJCQkJIGNzdGF0ZS0+Y3VyX2xpbmVubyk7Ci0KLQkJCQkJLyoKLQkJCQkJICog SWYgZW5vdWdoIGluc2VydHMgaGF2ZSBxdWV1ZWQgdXAsIHRoZW4gZmx1c2ggYWxsCi0JCQkJCSAq IGJ1ZmZlcnMgb3V0IHRvIHRoZWlyIHRhYmxlcy4KLQkJCQkJICovCi0JCQkJCWlmIChDb3B5TXVs dGlJbnNlcnRJbmZvSXNGdWxsKCZtdWx0aUluc2VydEluZm8pKQotCQkJCQkJQ29weU11bHRpSW5z ZXJ0SW5mb0ZsdXNoKCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8pOworCQkJCQlDb3B5 TXVsdGlJbnNlcnRCdWZmZXJUdXBsZShyZXN1bHRSZWxJbmZvLCBteXNsb3QsIGNzdGF0ZSwKKwkJ CQkJCQkJCQkJICAgZXN0YXRlKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKQEAgLTEwNzksOSAr ODk3LDE5IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCQl9CiAJCQkJCWVs c2UKIAkJCQkJeworCQkJCQkJaWYgKCFpc3RhdGUpCisJCQkJCQl7CisJCQkJCQkJaXN0YXRlID0g dGFibGVfaW5zZXJ0X2JlZ2luKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJ CQkJCQkJCQkJbXljaWQsCisJCQkJCQkJCQkJCQkJCXRpX29wdGlvbnMsCisJCQkJCQkJCQkJCQkJ CXRydWUsCisJCQkJCQkJCQkJCQkJCWZhbHNlKTsKKwkJCQkJCX0KKworCQkJCQkJaXN0YXRlLT5y ZWwgPSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisKIAkJCQkJCS8qIE9LLCBzdG9y ZSB0aGUgdHVwbGUgYW5kIGNyZWF0ZSBpbmRleCBlbnRyaWVzIGZvciBpdCAqLwotCQkJCQkJdGFi bGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJ CQkgICBteXNsb3QsIG15Y2lkLCB0aV9vcHRpb25zLCBiaXN0YXRlKTsKKwkJCQkJCXRhYmxlX2lu c2VydF92Mihpc3RhdGUsIG15c2xvdCk7CiAKIAkJCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9O dW1JbmRpY2VzID4gMCkKIAkJCQkJCQlyZWNoZWNrSW5kZXhlcyA9IEV4ZWNJbnNlcnRJbmRleFR1 cGxlcyhyZXN1bHRSZWxJbmZvLApAQCAtMTExMywxNiArOTQxLDE0IEBAIENvcHlGcm9tKENvcHlG cm9tU3RhdGUgY3N0YXRlKQogCiAJLyogRmx1c2ggYW55IHJlbWFpbmluZyBidWZmZXJlZCB0dXBs ZXMgKi8KIAlpZiAoaW5zZXJ0TWV0aG9kICE9IENJTV9TSU5HTEUpCi0JewotCQlpZiAoIUNvcHlN dWx0aUluc2VydEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQotCQkJQ29weU11bHRpSW5z ZXJ0SW5mb0ZsdXNoKCZtdWx0aUluc2VydEluZm8sIE5VTEwpOwotCX0KKwkJQ29weU11bGl0SW5z ZXJ0Rmx1c2hCdWZmZXJzKCZtdWx0aV9pbnNlcnRfcnJpcywgcmVzdWx0UmVsSW5mbywKKwkJCQkJ CQkJCWNzdGF0ZSwgZXN0YXRlKTsKIAogCS8qIERvbmUsIGNsZWFuIHVwICovCiAJZXJyb3JfY29u dGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogCi0JaWYgKGJpc3RhdGUgIT0gTlVM TCkKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShiaXN0YXRlKTsKKwlpZiAoaXN0YXRlKQorCQl0YWJs ZV9pbnNlcnRfZW5kKGlzdGF0ZSk7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CiAKQEAgLTExNDksNyArOTc1LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUp CiAKIAkvKiBUZWFyIGRvd24gdGhlIG11bHRpLWluc2VydCBidWZmZXIgZGF0YSAqLwogCWlmIChp bnNlcnRNZXRob2QgIT0gQ0lNX1NJTkdMRSkKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAo Jm11bHRpSW5zZXJ0SW5mbyk7CisJCUNvcHlNdWxpdEluc2VydERyb3BCdWZmZXJzKG11bHRpX2lu c2VydF9ycmlzKTsKIAogCS8qIENsb3NlIGFsbCB0aGUgcGFydGl0aW9uZWQgdGFibGVzLCBsZWFm IHBhcnRpdGlvbnMsIGFuZCB0aGVpciBpbmRpY2VzICovCiAJaWYgKHByb3V0ZSkKLS0gCjIuMjUu MQoK --000000000000e2d16205bb82ffcb--