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 1oGFMY-000448-Tb for pgsql-hackers@arkaria.postgresql.org; Tue, 26 Jul 2022 07:52:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oGFMV-0001J0-Hu for pgsql-hackers@arkaria.postgresql.org; Tue, 26 Jul 2022 07:52:15 +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 1oGFMV-0001Ia-1o for pgsql-hackers@lists.postgresql.org; Tue, 26 Jul 2022 07:52:15 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oGFMS-0004Ad-V9 for pgsql-hackers@lists.postgresql.org; Tue, 26 Jul 2022 07:52:14 +0000 Received: by mail-pj1-x102d.google.com with SMTP id o20-20020a17090aac1400b001f2da729979so2939277pjq.0 for ; Tue, 26 Jul 2022 00:52:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=LvgV51xS7oBDvAcCVKL4JMSMV97iGz/TbFDby7u6R5U=; b=iWINE2UFfuu98uva1Y8SHdWm75YcddojhQVClvNFEvUhHTNFM5YEJp1mizZRPBBNXB Hu/MAFw3qOLd28AquzlWCX3X+NVrzvWUV38vX6+hsWAwsc0WDsrbt19MGVXVjJuK1A2b 4ZspUbf7EnpzI/qjZdzwg1gqvEfr5KYrdWI9oPfqQBgxIsRyLjwXpUajG9N94HUsijTK OUE0p2Kxgchte8NSMkaby3+mo7bU7kYIe38oD8ffPdXOX8XrHMORE5lTq1WwkVgfi44P xofUbCPgOt5YSdt26DGXkwfCi8k239u5zbP2G5m9c7+9hDdErXEZR4XHsea6g/78tidc yzMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=LvgV51xS7oBDvAcCVKL4JMSMV97iGz/TbFDby7u6R5U=; b=LAS0syV9geN8+HzqyoCjJhvjkwhK8dmSAdeXDmP5BgBUjuXFdZMepvC4Dtpw/1H1Qp 6TBPmLG96LBTYCaeuFrK4v+7zRQyqtEZKBH/PGRqjp03BUKNXzPuaEMKCXe9Gw0c3z9a j7cCTUHYDVhMNwDUBP8Vg/RKk1caFN2bpI2WNVSRKrpyFZcE1QDyawn+TWohhQ9YAHts bi/sd+0HA+ORtBfZanCaT+JWq9fA3XmcUHzEet0kTieWCQjucTy9Ej6kisDS0ousqorH IDVkY1bLf8TzZsvm42VyKY69OkkUYHYm0R3eoLa+G+nc/2NASWN38Hc2N9l2hf2g31gx 0lAw== X-Gm-Message-State: AJIora9IQpCfEEfwoze8IDiQKNVw09cSFfoN+Lc10IA5Sfpu5gC4Kksc YmOuarPJeo3Cka4ZQ7IzXRbIWBltWGzuhs4BTZ4= X-Google-Smtp-Source: AGRyM1utuaX9g8/sPjpdO4R8rgYejf2Rh4Oz0t/Yfrsf6MU7nixDhxPXS/j7AQGXwc0c70wBBMtKkZD2JhAwYVc/SNw= X-Received: by 2002:a17:90a:e7c8:b0:1f0:c82:c89d with SMTP id kb8-20020a17090ae7c800b001f00c82c89dmr18271502pjb.108.1658821929924; Tue, 26 Jul 2022 00:52:09 -0700 (PDT) MIME-Version: 1.0 References: <20211008.165055.1621145185927268721.horikyota.ntt@gmail.com> <20220523.133323.444599955292141474.horikyota.ntt@gmail.com> In-Reply-To: From: Masahiko Sawada Date: Tue, 26 Jul 2022 16:51:33 +0900 Message-ID: Subject: Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns To: Amit Kapila Cc: "shiy.fnst@fujitsu.com" , Kyotaro Horiguchi , "Drouvot, Bertrand" , PostgreSQL Hackers , "Oh, Mike" Content-Type: multipart/mixed; boundary="000000000000e1f20c05e4b0939c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e1f20c05e4b0939c Content-Type: text/plain; charset="UTF-8" On Tue, Jul 26, 2022 at 2:18 PM Amit Kapila wrote: > > On Tue, Jul 26, 2022 at 7:00 AM Masahiko Sawada wrote: > > > > On Mon, Jul 25, 2022 at 7:57 PM shiy.fnst@fujitsu.com > > wrote: > > > > > > Hi, > > > > > > I did some performance test for the master branch patch (based on v6 patch) to > > > see if the bsearch() added by this patch will cause any overhead. > > > > Thank you for doing performance tests! > > > > > > > > I tested them three times and took the average. > > > > > > The results are as follows, and attach the bar chart. > > > > > > case 1 > > > --------- > > > No catalog modifying transaction. > > > Decode 800k pgbench transactions. (8 clients, 100k transactions per client) > > > > > > master 7.5417 > > > patched 7.4107 > > > > > > case 2 > > > --------- > > > There's one catalog modifying transaction. > > > Decode 100k/500k/1M transactions. > > > > > > 100k 500k 1M > > > master 0.0576 0.1491 0.4346 > > > patched 0.0586 0.1500 0.4344 > > > > > > case 3 > > > --------- > > > There are 64 catalog modifying transactions. > > > Decode 100k/500k/1M transactions. > > > > > > 100k 500k 1M > > > master 0.0600 0.1666 0.4876 > > > patched 0.0620 0.1653 0.4795 > > > > > > (Because the result of case 3 shows that there is a overhead of about 3% in the > > > case decoding 100k transactions with 64 catalog modifying transactions, I > > > tested the next run of 100k xacts with or without catalog modifying > > > transactions, to see if it affects subsequent decoding.) > > > > > > case 4.1 > > > --------- > > > After the test steps in case 3 (64 catalog modifying transactions, decode 100k > > > transactions), run 100k xacts and then decode. > > > > > > master 0.3699 > > > patched 0.3701 > > > > > > case 4.2 > > > --------- > > > After the test steps in case 3 (64 catalog modifying transactions, decode 100k > > > transactions), run 64 DDLs(without checkpoint) and 100k xacts, then decode. > > > > > > master 0.3687 > > > patched 0.3696 > > > > > > Summary of the tests: > > > After applying this patch, there is a overhead of about 3% in the case decoding > > > 100k transactions with 64 catalog modifying transactions. This is an extreme > > > case, so maybe it's okay. > > > > Yes. If we're worried about the overhead and doing bsearch() is the > > cause, probably we can try simplehash instead of the array. > > > > I am not sure if we need to go that far for this extremely corner > case. Let's first try your below idea. > > > An improvement idea is that we pass the parsed->xinfo down to > > SnapBuildXidHasCatalogChanges(), and then return from that function > > before doing bearch() if the parsed->xinfo doesn't have > > XACT_XINFO_HAS_INVALS. That would save calling bsearch() for > > non-catalog-modifying transactions. Is it worth trying? > > > > I think this is worth trying and this might reduce some of the > overhead as well in the case presented by Shi-San. Okay, I've attached an updated patch that does the above idea. Could you please do the performance tests again to see if the idea can help reduce the overhead, Shi yu? Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/ --000000000000e1f20c05e4b0939c Content-Type: application/octet-stream; name="master-v9-0001-Add-catalog-modifying-transactions-to-logical-dec.patch" Content-Disposition: attachment; filename="master-v9-0001-Add-catalog-modifying-transactions-to-logical-dec.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l61vpy3x0 RnJvbSBhZDk0ZmQ2NDRlNmYzZmMxMTBiYTViNTUzNDhkZjYzMjkwZTUxODlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCA2IEp1bCAyMDIyIDEyOjUzOjM2ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2 OV0gQWRkIGNhdGFsb2cgbW9kaWZ5aW5nIHRyYW5zYWN0aW9ucyB0byBsb2dpY2FsIGRlY29kaW5n CiBzZXJpYWxpemVkIHNuYXBzaG90LgoKUHJldmlvdXNseSwgd2UgcmVsaWVkIG9uIEhFQVAyX05F V19DSUQgcmVjb3JkcyBhbmQgWEFDVF9JTlZBTElEQVRJT04KcmVjb3JkcyB0byBrbm93IGlmIHRo ZSB0cmFuc2FjdGlvbiBoYXMgbW9kaWZpZWQgdGhlIGNhdGFsb2csIGFuZCB0aGF0CmluZm9ybWF0 aW9uIGlzIG5vdCBzZXJpYWxpemVkIHRvIHNuYXBzaG90LiBUaGVyZWZvcmUsIGlmIHRoZSBsb2dp Y2FsCmRlY29kaW5nIGRlY29kZXMgb25seSB0aGUgY29tbWl0IHJlY29yZCBvZiB0aGUgdHJhbnNh Y3Rpb24gdGhhdAphY3R1YWxseSBoYXMgbW9kaWZpZWQgYSBjYXRhbG9nLCB3ZSBtaXNzZWQgYWRk aW5nIGl0cyBYSUQgdG8gdGhlCnNuYXBzaG90LiBXZSBlbmRlZCB1cCBsb29raW5nIGF0IGNhdGFs b2dzIHdpdGggdGhlIHdyb25nIHNuYXBzaG90LgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgdGhpcyBj aGFuZ2UgYWRkcyB0aGUgbGlzdCBvZiB0cmFuc2FjdGlvbiBJRHMgYW5kCnN1Yi10cmFuc2FjdGlv biBJRHMsIHRoYXQgaGF2ZSBtb2RpZmllZCBjYXRhbG9ncyBhbmQgYXJlIHJ1bm5pbmcgd2hlbgpz bmFwc2hvdCBzZXJpYWxpemF0aW9uLCB0byB0aGUgc2VyaWFsaXplZCBzbmFwc2hvdC4gV2hlbiBk ZWNvZGluZyBhCkNPTU1JVCByZWNvcmQsIHdlIGNoZWNrIGJvdGggdGhlIGxpc3QgYW5kIHRoZSBS ZW9yZGVyQnVmZmVyIHRvIHNlZSBpZgp0aGUgdHJhbnNhY3Rpb24gaGFzIG1vZGlmaWVkIGNhdGFs b2dzLgoKU2luY2UgdGhpcyBhZGRzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gdGhlIHNlcmlh bGl6ZWQgc25hcHNob3QsIHdlCmNhbm5vdCBiYWNrcGF0Y2ggaXQuIEZvciBiYWNrIGJyYW5jaGVz LCB3ZSB0YWtlIGFub3RoZXIgYXBwcm9hY2g7CnJlbWVtYmVyIHRoZSBsYXN0LXJ1bm5pbmcteGFj dHMgbGlzdCBvZiB0aGUgZmlyc3QgZGVjb2RlZApSVU5OSU5HX1hBQ1RTIHJlY29yZCwgY2hlY2sg aWYgdGhlIHRyYW5zYWN0aW9uIHdob3NlIGNvbW1pdCByZWNvcmQKaGFzIFhBQ1RfWElORk9fSEFT X0lOVkFMUyBhbmQgd2hvc2UgWElEIGlzIGluIHRoZSBsaXN0LCBhbmQgbWFyayB0aGUKdG9wLWxl dmVsIHRyYW5zYWN0aW9uIGFuZCBzdWIgdHJhbnNhY3Rpb25zIGFzIGNvbnRhaW5pbmcgY2F0YWxv ZwpjaGFuZ2VzLiBUaGlzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgZmlsZSBmb3JtYXQgY2hhbmdlcyBi dXQgdGhlCnRyYW5zYWN0aW9uIHdpbGwgZW5kIHVwIGJlaW5nIGFkZGVkIHRvIHRoZSBzbmFwc2hv dCBldmVuIGlmIGl0IGhhcwpvbmx5IHJlbGNhY2hlIGludmFsaWRhdGlvbnMuIEl0IGRvZXNuJ3Qg YmVjb21lIGEgcHJvYmxlbSBhcyB3ZSB1c2UgdGhlCmhpc3RvcmljYWwgc25hcHNob3QgZm9yIG9u bHkgY2F0YWxvZyBsb29rdXBzLgoKVGhpcyBjb21taXQgYnVtcHMgU05BUEJVSUxEX1ZFUlNJT04g YmVjYXVzZSBvZiBjaGFuZ2UgaW4gU25hcEJ1aWxkLgoKQmFjay1wYXRjaCB0byBhbGwgc3VwcG9y dGVkIHJlbGVhc2VkLgoKUmVwb3J0ZWQtYnk6IE1pa2UgT2ggPG1pbnNvb0BhbWF6b24uY29tPgpB dXRob3I6IE1hc2FoaWtvIFNhd2FkYSA8c2F3YWRhLm1zaGtAZ21haWwuY29tPgpSZXZpZXdlZC1i eTogQW1pdCBLYXBpbGEgPGFtaXQua2FwaWxhMTZAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogVGFr YW1pY2hpIE9zdW1pIDxvc3VtaS50YWthbWljaGlAZnVqaXRzdS5jb20+ClJldmlld2VkLWJ5OiBL eW90YXJvIEhvcmlndWNoaSA8aG9yaWt5b3RhLm50dEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBC ZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6b24uY29tPgpSZXZpZXdlZC1ieTogU2hpIHl1 IDxzaGl5LmZuc3RAZnVqaXRzdS5jb20+ClJldmlld2VkLWJ5OiBBaHNhbiBIYWRpIDxhaHNhbi5o YWRpQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS84MUQwRDhCMC1F N0M0LTQ5OTktQjYxNi0xRTUwMDREQkRDRDIlNDBhbWF6b24uY29tCkJhY2twYXRjaC10aHJvdWdo OiAxMAotLS0KIGNvbnRyaWIvdGVzdF9kZWNvZGluZy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8 ICAgMiArLQogLi4uL2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dCAgICAgIHwg IDQ0ICsrKwogLi4uL3NwZWNzL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90LnNwZWMgICAgICAgIHwg IDM5ICsrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwg ICAzICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAg NzEgKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgICB8 IDI4MCArKysrKysrKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaCAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQu aCAgICAgICAgICAgfCAgIDIgKy0KIDggZmlsZXMgY2hhbmdlZCwgMzYwIGluc2VydGlvbnMoKyks IDkzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvdGVzdF9kZWNvZGlu Zy9leHBlY3RlZC9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3Rlc3RfZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3Bl YwoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9NYWtlZmlsZSBiL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9NYWtlZmlsZQppbmRleCBiMjIwOTA2NDc5Li5jN2NlNjAzNzA2IDEwMDY0 NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvTWFrZWZpbGUKKysrIGIvY29udHJpYi90ZXN0 X2RlY29kaW5nL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQCBSRUdSRVNTID0gZGRsIHhhY3QgcmV3 cml0ZSB0b2FzdCBwZXJtaXNzaW9ucyBkZWNvZGluZ19pbl94YWN0IFwKIAlzcGlsbCBzbG90IHRy dW5jYXRlIHN0cmVhbSBzdGF0cyB0d29waGFzZSB0d29waGFzZV9zdHJlYW0KIElTT0xBVElPTiA9 IG14YWN0IGRlbGF5ZWRfc3RhcnR1cCBvbmRpc2tfc3RhcnR1cCBjb25jdXJyZW50X2RkbF9kbWwg XAogCW9sZGVzdF94bWluIHNuYXBzaG90X3RyYW5zZmVyIHN1YnhhY3Rfd2l0aG91dF90b3AgY29u Y3VycmVudF9zdHJlYW0gXAotCXR3b3BoYXNlX3NuYXBzaG90IHNsb3RfY3JlYXRpb25fZXJyb3IK Kwl0d29waGFzZV9zbmFwc2hvdCBzbG90X2NyZWF0aW9uX2Vycm9yIGNhdGFsb2dfY2hhbmdlX3Nu YXBzaG90CiAKIFJFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250 cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNhbC5jb25mCiBJU09MQVRJT05fT1BUUyA9IC0tdGVtcC1j b25maWcgJCh0b3Bfc3JjZGlyKS9jb250cmliL3Rlc3RfZGVjb2RpbmcvbG9naWNhbC5jb25mCmRp ZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxvZ19jaGFuZ2Vf c25hcHNob3Qub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2NhdGFsb2dfY2hh bmdlX3NuYXBzaG90Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5k YzRmOWI3MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVj dGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dApAQCAtMCwwICsxLDQ0IEBACitQYXJzZWQg dGVzdCBzcGVjIHdpdGggMiBzZXNzaW9ucworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczBfaW5p dCBzMF9iZWdpbiBzMF9zYXZlcG9pbnQgczBfdHJ1bmNhdGUgczFfY2hlY2twb2ludCBzMV9nZXRf Y2hhbmdlcyBzMF9jb21taXQgczBfYmVnaW4gczBfaW5zZXJ0IHMxX2NoZWNrcG9pbnQgczFfZ2V0 X2NoYW5nZXMgczBfY29tbWl0IHMxX2dldF9jaGFuZ2VzCitzdGVwIHMwX2luaXQ6IFNFTEVDVCAn aW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29sYXRpb25f c2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7Cis/Y29sdW1uPworLS0tLS0tLS0KK2luaXQgICAgCiso MSByb3cpCisKK3N0ZXAgczBfYmVnaW46IEJFR0lOOworc3RlcCBzMF9zYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzcDE7CitzdGVwIHMwX3RydW5jYXRlOiBUUlVOQ0FURSB0YmwxOworc3RlcCBzMV9jaGVj a3BvaW50OiBDSEVDS1BPSU5UOworc3RlcCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVM TCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0YQor LS0tLQorKDAgcm93cykKKworc3RlcCBzMF9jb21taXQ6IENPTU1JVDsKK3N0ZXAgczBfYmVnaW46 IEJFR0lOOworc3RlcCBzMF9pbnNlcnQ6IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgxKTsKK3N0 ZXAgczFfY2hlY2twb2ludDogQ0hFQ0tQT0lOVDsKK3N0ZXAgczFfZ2V0X2NoYW5nZXM6IFNFTEVD VCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdpc29sYXRpb25fc2xvdCcs IE5VTEwsIE5VTEwsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnLCAnaW5jbHVkZS14aWRzJywgJzAn KTsKK2RhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCRUdJTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKK3RhYmxlIHB1YmxpYy50YmwxOiBUUlVOQ0FURTogKG5vLWZsYWdzKQorQ09N TUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyByb3dzKQorCitzdGVwIHMw X2NvbW1pdDogQ09NTUlUOworc3RlcCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEgRlJPTSBw Z19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVMTCwg J3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0YSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAordGFibGUgcHVibGljLnRibDE6IElOU0VSVDogdmFsMVtpbnRlZ2VyXToxIHZhbDJb aW50ZWdlcl06bnVsbAorQ09NTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorKDMgcm93cykKKworP2NvbHVtbj8KKy0tLS0tLS0tCitzdG9w ICAgIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3BlY3Mv Y2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcGVj cy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjI5NzFkZGM2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Rlc3Rf ZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYwpAQCAtMCwwICsxLDM5 IEBACisjIFRlc3QgZGVjb2Rpbmcgb25seSB0aGUgY29tbWl0IHJlY29yZCBvZiB0aGUgdHJhbnNh Y3Rpb24gdGhhdCBoYXZlCisjIG1vZGlmaWVkIGNhdGFsb2dzLgorc2V0dXAKK3sKKyAgICBEUk9Q IFRBQkxFIElGIEVYSVNUUyB0YmwxOworICAgIENSRUFURSBUQUJMRSB0YmwxICh2YWwxIGludGVn ZXIsIHZhbDIgaW50ZWdlcik7Cit9CisKK3RlYXJkb3duCit7CisgICAgRFJPUCBUQUJMRSB0Ymwx OworICAgIFNFTEVDVCAnc3RvcCcgRlJPTSBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ2lzb2xh dGlvbl9zbG90Jyk7Cit9CisKK3Nlc3Npb24gInMwIgorc2V0dXAgeyBTRVQgc3luY2hyb25vdXNf Y29tbWl0PW9uOyB9CitzdGVwICJzMF9pbml0IiB7IFNFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVh dGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29sYXRpb25fc2xvdCcsICd0ZXN0X2RlY29k aW5nJyk7IH0KK3N0ZXAgInMwX2JlZ2luIiB7IEJFR0lOOyB9CitzdGVwICJzMF9zYXZlcG9pbnQi IHsgU0FWRVBPSU5UIHNwMTsgfQorc3RlcCAiczBfdHJ1bmNhdGUiIHsgVFJVTkNBVEUgdGJsMTsg fQorc3RlcCAiczBfaW5zZXJ0IiB7IElOU0VSVCBJTlRPIHRibDEgVkFMVUVTICgxKTsgfQorc3Rl cCAiczBfY29tbWl0IiB7IENPTU1JVDsgfQorCitzZXNzaW9uICJzMSIKK3NldHVwIHsgU0VUIHN5 bmNocm9ub3VzX2NvbW1pdD1vbjsgfQorc3RlcCAiczFfY2hlY2twb2ludCIgeyBDSEVDS1BPSU5U OyB9CitzdGVwICJzMV9nZXRfY2hhbmdlcyIgeyBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxf c2xvdF9nZXRfY2hhbmdlcygnaXNvbGF0aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnc2tpcC1lbXB0 eS14YWN0cycsICcxJywgJ2luY2x1ZGUteGlkcycsICcwJyk7IH0KKworIyBGb3IgdGhlIHRyYW5z YWN0aW9uIHRoYXQgVFJVTkNBVEVkIHRoZSB0YWJsZSB0YmwxLCB0aGUgbGFzdCBkZWNvZGluZyBk ZWNvZGVzCisjIG9ubHkgaXRzIENPTU1JVCByZWNvcmQsIGJlY2F1c2UgaXQgc3RhcnRzIGZyb20g dGhlIFJVTk5JTkdfWEFDVFMgcmVjb3JkIGVtaXR0ZWQKKyMgZHVyaW5nIHRoZSBmaXJzdCBjaGVj a3BvaW50IGV4ZWN1dGlvbi4gIFRoaXMgdHJhbnNhY3Rpb24gbXVzdCBiZSBtYXJrZWQgYXMKKyMg Y29udGFpbmluZyBjYXRhbG9nIGNoYW5nZXMgd2hpbGUgZGVjb2RpbmcgdGhlIENPTU1JVCByZWNv cmQgYW5kIHRoZSBkZWNvZGluZworIyBvZiB0aGUgSU5TRVJUIHJlY29yZCBtdXN0IHJlYWQgdGhl IHBnX2NsYXNzIHdpdGggdGhlIGNvcnJlY3QgaGlzdG9yaWMgc25hcHNob3QuCisjCisjIE5vdGUg dGhhdCBpbiBhIGNhc2Ugd2hlcmUgYmd3cml0ZXIgd3JvdGUgdGhlIFJVTk5JTkdfWEFDVFMgcmVj b3JkIGJldHdlZW4gInMwX2NvbW1pdCIKKyMgYW5kICJzMF9iZWdpbiIsIHRoaXMgZG9lc24ndCBo YXBwZW4gYXMgdGhlIGRlY29kaW5nIHN0YXJ0cyBmcm9tIHRoZSBSVU5OSU5HX1hBQ1RTCisjIHJl Y29yZCB3cml0dGVuIGJ5IGJnd3JpdGVyLiAgT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiBlaXRoZXIg c3RvcCB0aGUgYmd3cml0ZXIgb3IKKyMgaW5jcmVhc2UgTE9HX1NOQVBTSE9UX0lOVEVSVkFMX01T IGJ1dCBpdCdzIG5vdCBwcmFjdGljYWwgdmlhIHRlc3RzLgorcGVybXV0YXRpb24gInMwX2luaXQi ICJzMF9iZWdpbiIgInMwX3NhdmVwb2ludCIgInMwX3RydW5jYXRlIiAiczFfY2hlY2twb2ludCIg InMxX2dldF9jaGFuZ2VzIiAiczBfY29tbWl0IiAiczBfYmVnaW4iICJzMF9pbnNlcnQiICJzMV9j aGVja3BvaW50IiAiczFfZ2V0X2NoYW5nZXMiICJzMF9jb21taXQiICJzMV9nZXRfY2hhbmdlcyIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IGM1YzZhMmJhNjgu LjE2NjdkNzIwYjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpA QCAtNjI4LDcgKzYyOCw4IEBAIERlY29kZUNvbW1pdChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAl9CiAKIAlTbmFwQnVpbGRDb21taXRUeG4oY3R4 LT5zbmFwc2hvdF9idWlsZGVyLCBidWYtPm9yaWdwdHIsIHhpZCwKLQkJCQkJICAgcGFyc2VkLT5u c3VieGFjdHMsIHBhcnNlZC0+c3VieGFjdHMpOworCQkJCQkgICBwYXJzZWQtPm5zdWJ4YWN0cywg cGFyc2VkLT5zdWJ4YWN0cywKKwkJCQkJICAgcGFyc2VkLT54aW5mbyk7CiAKIAkvKiAtLS0tCiAJ ICogQ2hlY2sgd2hldGhlciB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIHRyYW5z YWN0aW9uLCBhbmQgdGVsbApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl b3JkZXJidWZmZXIuYwppbmRleCA4OGEzN2ZkZTcyLi4wYjJkOWI3OTMwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMzQ5LDYgKzM0 OSw4IEBAIFJlb3JkZXJCdWZmZXJBbGxvY2F0ZSh2b2lkKQogCWJ1ZmZlci0+YnlfdHhuX2xhc3Rf eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJYnVmZmVyLT5ieV90eG5fbGFzdF90eG4gPSBO VUxMOwogCisJYnVmZmVyLT5jYXRjaGFuZ2VfbnR4bnMgPSAwOworCiAJYnVmZmVyLT5vdXRidWYg PSBOVUxMOwogCWJ1ZmZlci0+b3V0YnVmc2l6ZSA9IDA7CiAJYnVmZmVyLT5zaXplID0gMDsKQEAg LTM2Niw2ICszNjgsNyBAQCBSZW9yZGVyQnVmZmVyQWxsb2NhdGUodm9pZCkKIAogCWRsaXN0X2lu aXQoJmJ1ZmZlci0+dG9wbGV2ZWxfYnlfbHNuKTsKIAlkbGlzdF9pbml0KCZidWZmZXItPnR4bnNf YnlfYmFzZV9zbmFwc2hvdF9sc24pOworCWRsaXN0X2luaXQoJmJ1ZmZlci0+Y2F0Y2hhbmdlX3R4 bnMpOwogCiAJLyoKIAkgKiBFbnN1cmUgdGhlcmUncyBubyBzdGFsZSBkYXRhIGZyb20gcHJpb3Ig dXNlcyBvZiB0aGlzIHNsb3QsIGluIGNhc2Ugc29tZQpAQCAtMTUyNiwxNCArMTUyOSwyMiBAQCBS ZW9yZGVyQnVmZmVyQ2xlYW51cFRYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuKQogCX0KIAogCS8qCi0JICogUmVtb3ZlIFRYTiBmcm9tIGl0cyBjb250YWluaW5nIGxp c3QuCisJICogUmVtb3ZlIFRYTiBmcm9tIGl0cyBjb250YWluaW5nIGxpc3RzLgogCSAqCiAJICog Tm90ZTogaWYgdHhuIGlzIGtub3duIGFzIHN1YnhhY3QsIHdlIGFyZSBkZWxldGluZyB0aGUgVFhO IGZyb20gaXRzCiAJICogcGFyZW50J3MgbGlzdCBvZiBrbm93biBzdWJ4YWN0czsgdGhpcyBsZWF2 ZXMgdGhlIHBhcmVudCdzIG5zdWJ4YWN0cwogCSAqIGNvdW50IHRvbyBoaWdoLCBidXQgd2UgZG9u J3QgY2FyZS4gIE90aGVyd2lzZSwgd2UgYXJlIGRlbGV0aW5nIHRoZSBUWE4KLQkgKiBmcm9tIHRo ZSBMU04tb3JkZXJlZCBsaXN0IG9mIHRvcGxldmVsIFRYTnMuCisJICogZnJvbSB0aGUgTFNOLW9y ZGVyZWQgbGlzdCBvZiB0b3BsZXZlbCBUWE5zLiBXZSByZW1vdmUgVFhOIGZyb20KKwkgKiB0aGUg bGlzdCBvZiBjYXRhbG9nIG1vZGlmeWluZyB0cmFuc2FjdGlvbnMgYXMgd2VsbC4KIAkgKi8KIAlk bGlzdF9kZWxldGUoJnR4bi0+bm9kZSk7CisJaWYgKHJidHhuX2hhc19jYXRhbG9nX2NoYW5nZXMo dHhuKSkKKwl7CisJCWRsaXN0X2RlbGV0ZSgmdHhuLT5jYXRjaGFuZ2Vfbm9kZSk7CisJCXJiLT5j YXRjaGFuZ2VfbnR4bnMtLTsKKworCQlBc3NlcnQocmItPmNhdGNoYW5nZV9udHhucyA+PSAwKTsK Kwl9CiAKIAkvKiBub3cgcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGJ1ZmZlciAqLwogCWhhc2hfc2Vh cmNoKHJiLT5ieV90eG4sCkBAIC0zMjc1LDEwICszMjg2LDE2IEBAIFJlb3JkZXJCdWZmZXJYaWRT ZXRDYXRhbG9nQ2hhbmdlcyhSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJ CQkJCQkJCSAgWExvZ1JlY1B0ciBsc24pCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOworCVJl b3JkZXJCdWZmZXJUWE4gKnRvcHR4bjsKIAogCXR4biA9IFJlb3JkZXJCdWZmZXJUWE5CeVhpZChy YiwgeGlkLCB0cnVlLCBOVUxMLCBsc24sIHRydWUpOwogCi0JdHhuLT50eG5fZmxhZ3MgfD0gUkJU WE5fSEFTX0NBVEFMT0dfQ0hBTkdFUzsKKwlpZiAoIXJidHhuX2hhc19jYXRhbG9nX2NoYW5nZXMo dHhuKSkKKwl7CisJCXR4bi0+dHhuX2ZsYWdzIHw9IFJCVFhOX0hBU19DQVRBTE9HX0NIQU5HRVM7 CisJCWRsaXN0X3B1c2hfdGFpbCgmcmItPmNhdGNoYW5nZV90eG5zLCAmdHhuLT5jYXRjaGFuZ2Vf bm9kZSk7CisJCXJiLT5jYXRjaGFuZ2VfbnR4bnMrKzsKKwl9CiAKIAkvKgogCSAqIE1hcmsgdG9w LWxldmVsIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjYXRhbG9nIGNoYW5nZXMgdG9vIGlmIG9uZSBv ZiBpdHMKQEAgLTMyODYsOCArMzMwMyw1MiBAQCBSZW9yZGVyQnVmZmVyWGlkU2V0Q2F0YWxvZ0No YW5nZXMoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCSAqIGNvbnZlbmll bnRseSBjaGVjayBqdXN0IHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBhbmQgZGVjaWRlIHdoZXRoZXIg dG8KIAkgKiBidWlsZCB0aGUgaGFzaCB0YWJsZSBvciBub3QuCiAJICovCi0JaWYgKHR4bi0+dG9w dHhuICE9IE5VTEwpCi0JCXR4bi0+dG9wdHhuLT50eG5fZmxhZ3MgfD0gUkJUWE5fSEFTX0NBVEFM T0dfQ0hBTkdFUzsKKwl0b3B0eG4gPSB0eG4tPnRvcHR4bjsKKwlpZiAodG9wdHhuICE9IE5VTEwg JiYgIXJidHhuX2hhc19jYXRhbG9nX2NoYW5nZXModG9wdHhuKSkKKwl7CisJCXRvcHR4bi0+dHhu X2ZsYWdzIHw9IFJCVFhOX0hBU19DQVRBTE9HX0NIQU5HRVM7CisJCWRsaXN0X3B1c2hfdGFpbCgm cmItPmNhdGNoYW5nZV90eG5zLCAmdG9wdHhuLT5jYXRjaGFuZ2Vfbm9kZSk7CisJCXJiLT5jYXRj aGFuZ2VfbnR4bnMrKzsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gcGFsbG9jJ2VkIGFycmF5IG9m IHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGNoYW5nZWQgY2F0YWxvZ3MuCisgKiBUaGUgcmV0 dXJuZWQgYXJyYXkgaXMgc29ydGVkIGluIHhpZENvbXBhcmF0b3Igb3JkZXIuCisgKgorICogVGhl IGNhbGxlciBtdXN0IGZyZWUgdGhlIHJldHVybmVkIGFycmF5IHdoZW4gZG9uZSB3aXRoIGl0Lgor ICovCitUcmFuc2FjdGlvbklkICoKK1Jlb3JkZXJCdWZmZXJHZXRDYXRhbG9nQ2hhbmdlc1hhY3Rz KFJlb3JkZXJCdWZmZXIgKnJiKQoreworCWRsaXN0X2l0ZXIgaXRlcjsKKwlUcmFuc2FjdGlvbklk ICp4aWRzID0gTlVMTDsKKwlzaXplX3QJeGNudCA9IDA7CisKKwkvKiBRdWljayByZXR1cm4gaWYg dGhlIGxpc3QgaXMgZW1wdHkgKi8KKwlpZiAoZGxpc3RfaXNfZW1wdHkoJnJiLT5jYXRjaGFuZ2Vf dHhucykpCisJeworCQlBc3NlcnQocmItPmNhdGNoYW5nZV9udHhucyA9PSAwKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyogSW5pdGlhbGl6ZSBYSUQgYXJyYXkgKi8KKwl4aWRzID0gKFRyYW5z YWN0aW9uSWQgKikgcGFsbG9jKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIHJiLT5jYXRjaGFuZ2Vf bnR4bnMpOworCWRsaXN0X2ZvcmVhY2goaXRlciwgJnJiLT5jYXRjaGFuZ2VfdHhucykKKwl7CisJ CVJlb3JkZXJCdWZmZXJUWE4gKnR4biA9IGRsaXN0X2NvbnRhaW5lcihSZW9yZGVyQnVmZmVyVFhO LAorCQkJCQkJCQkJCQkJY2F0Y2hhbmdlX25vZGUsCisJCQkJCQkJCQkJCQlpdGVyLmN1cik7CisK KwkJQXNzZXJ0KHJidHhuX2hhc19jYXRhbG9nX2NoYW5nZXModHhuKSk7CisKKwkJeGlkc1t4Y250 KytdID0gdHhuLT54aWQ7CisJfQorCisJcXNvcnQoeGlkcywgeGNudCwgc2l6ZW9mKFRyYW5zYWN0 aW9uSWQpLCB4aWRDb21wYXJhdG9yKTsKKworCUFzc2VydCh4Y250ID09IHJiLT5jYXRjaGFuZ2Vf bnR4bnMpOworCXJldHVybiB4aWRzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvc25hcGJ1aWxkLmMKaW5kZXggNzNjMGYxNTIxNC4uYWI2YmFlM2I2ZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCkBAIC0yNDEsNiArMjQx LDMwIEBAIHN0cnVjdCBTbmFwQnVpbGQKIAkJICovCiAJCVRyYW5zYWN0aW9uSWQgKnhpcDsKIAl9 CQkJY29tbWl0dGVkOworCisJLyoKKwkgKiBBcnJheSBvZiB0cmFuc2FjdGlvbnMgYW5kIHN1YnRy YW5zYWN0aW9ucyB0aGF0IGhhZCBtb2RpZmllZCBjYXRhbG9ncworCSAqIGFuZCB3ZXJlIHJ1bm5p bmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIHNlcmlhbGl6ZWQuCisJICoKKwkgKiBXZSBub3JtYWxs eSByZWx5IG9uIEhFQVAyX05FV19DSUQgYW5kIFhMT0dfWEFDVF9JTlZBTElEQVRJT05TIHJlY29y ZHMgdG8KKwkgKiBrbm93IGlmIHRoZSB0cmFuc2FjdGlvbiBoYXMgY2hhbmdlZCB0aGUgY2F0YWxv Zy4gQnV0IGl0IGNvdWxkIGhhcHBlbiB0aGF0CisJICogdGhlIGxvZ2ljYWwgZGVjb2RpbmcgZGVj b2RlcyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbi4KKwkgKiBUaGlz IGFycmF5IHN0b3JlcyB0aGUgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBtb2RpZmllZCBjYXRhbG9n cyBhbmQgd2VyZQorCSAqIHJ1bm5pbmcgd2hlbiBzZXJpYWxpemluZyBhIHNuYXBzaG90LCBhbmQg dGhpcyBhcnJheSBpcyB1c2VkIHRvIGFkZCBzdWNoCisJICogdHJhbnNhY3Rpb25zIHRvIHRoZSBz bmFwc2hvdC4KKwkgKgorCSAqIFRoaXMgYXJyYXkgaXMgc2V0IG9uY2Ugd2hlbiByZXN0b3Jpbmcg dGhlIHNuYXBzaG90LCB3ZSByZW1vdmUgeGlkcyBmcm9tCisJICogdGhpcyBhcnJheSB3aGVuIHRo ZXkgYmVjb21lIG9sZCBlbm91Z2ggdG8gbWF0dGVyLCBhbmQgdGhlbiBpdCBldmVudHVhbGx5CisJ ICogYmVjb21lcyBlbXB0eS4KKwkgKi8KKwlzdHJ1Y3QKKwl7CisJCS8qIG51bWJlciBvZiB0cmFu c2FjdGlvbnMgKi8KKwkJc2l6ZV90CQl4Y250OworCisJCS8qIFRoaXMgYXJyYXkgbXVzdCBiZSBz b3J0ZWQgaW4geGlkQ29tcGFyYXRvciBvcmRlciAqLworCQlUcmFuc2FjdGlvbklkICp4aXA7CisJ fQkJCWNhdGNoYW5nZTsKIH07CiAKIC8qCkBAIC0yNTAsOCArMjc0LDggQEAgc3RydWN0IFNuYXBC dWlsZAogc3RhdGljIFJlc291cmNlT3duZXIgU2F2ZWRSZXNvdXJjZU93bmVyRHVyaW5nRXhwb3J0 ID0gTlVMTDsKIHN0YXRpYyBib29sIEV4cG9ydEluUHJvZ3Jlc3MgPSBmYWxzZTsKIAotLyogLT5j b21taXR0ZWQgbWFuaXB1bGF0aW9uICovCi1zdGF0aWMgdm9pZCBTbmFwQnVpbGRQdXJnZUNvbW1p dHRlZFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpOworLyogLT5jb21taXR0ZWQgYW5kIC0+Y2F0Y2hh bmdlIG1hbmlwdWxhdGlvbiAqLworc3RhdGljIHZvaWQgU25hcEJ1aWxkUHVyZ2VPbGRlclR4bihT bmFwQnVpbGQgKmJ1aWxkZXIpOwogCiAvKiBzbmFwc2hvdCBidWlsZGluZy9tYW5pcHVsYXRpb24v ZGlzdHJpYnV0aW9uIGZ1bmN0aW9ucyAqLwogc3RhdGljIFNuYXBzaG90IFNuYXBCdWlsZEJ1aWxk U25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKTsKQEAgLTI2Miw2ICsyODYsOSBAQCBzdGF0aWMg dm9pZCBTbmFwQnVpbGRTbmFwSW5jUmVmY291bnQoU25hcHNob3Qgc25hcCk7CiAKIHN0YXRpYyB2 b2lkIFNuYXBCdWlsZERpc3RyaWJ1dGVOZXdDYXRhbG9nU25hcHNob3QoU25hcEJ1aWxkICpidWls ZGVyLCBYTG9nUmVjUHRyIGxzbik7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBTbmFwQnVpbGRYaWRI YXNDYXRhbG9nQ2hhbmdlcyhTbmFwQnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkLAor CQkJCQkJCQkJCQkJIHVpbnQzMiB4aW5mbyk7CisKIC8qIHhsb2cgcmVhZGluZyBoZWxwZXIgZnVu Y3Rpb25zIGZvciBTbmFwQnVpbGRQcm9jZXNzUnVubmluZ1hhY3RzICovCiBzdGF0aWMgYm9vbCBT bmFwQnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwg eGxfcnVubmluZ194YWN0cyAqcnVubmluZyk7CiBzdGF0aWMgdm9pZCBTbmFwQnVpbGRXYWl0U25h cHNob3QoeGxfcnVubmluZ194YWN0cyAqcnVubmluZywgVHJhbnNhY3Rpb25JZCBjdXRvZmYpOwpA QCAtMjY5LDYgKzI5Niw3IEBAIHN0YXRpYyB2b2lkIFNuYXBCdWlsZFdhaXRTbmFwc2hvdCh4bF9y dW5uaW5nX3hhY3RzICpydW5uaW5nLCBUcmFuc2FjdGlvbklkIGN1dG9mCiAvKiBzZXJpYWxpemF0 aW9uIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgU25hcEJ1aWxkU2VyaWFsaXplKFNuYXBCdWls ZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pOwogc3RhdGljIGJvb2wgU25hcEJ1aWxkUmVzdG9y ZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKTsKK3N0YXRpYyB2b2lkIFNuYXBC dWlsZFJlc3RvcmVDb250ZW50cyhpbnQgZmQsIGNoYXIgKmRlc3QsIFNpemUgc2l6ZSwgY29uc3Qg Y2hhciAqcGF0aCk7CiAKIC8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBzbmFwc2hvdCBidWlsZGVyLgpA QCAtMzA2LDYgKzMzNCw5IEBAIEFsbG9jYXRlU25hcHNob3RCdWlsZGVyKFJlb3JkZXJCdWZmZXIg KnJlb3JkZXIsCiAJCXBhbGxvYzAoYnVpbGRlci0+Y29tbWl0dGVkLnhjbnRfc3BhY2UgKiBzaXpl b2YoVHJhbnNhY3Rpb25JZCkpOwogCWJ1aWxkZXItPmNvbW1pdHRlZC5pbmNsdWRlc19hbGxfdHJh bnNhY3Rpb25zID0gdHJ1ZTsKIAorCWJ1aWxkZXItPmNhdGNoYW5nZS54Y250ID0gMDsKKwlidWls ZGVyLT5jYXRjaGFuZ2UueGlwID0gTlVMTDsKKwogCWJ1aWxkZXItPmluaXRpYWxfeG1pbl9ob3Jp em9uID0geG1pbl9ob3Jpem9uOwogCWJ1aWxkZXItPnN0YXJ0X2RlY29kaW5nX2F0ID0gc3RhcnRf bHNuOwogCWJ1aWxkZXItPmJ1aWxkaW5nX2Z1bGxfc25hcHNob3QgPSBuZWVkX2Z1bGxfc25hcHNo b3Q7CkBAIC04ODgsMTIgKzkxOSwxNyBAQCBTbmFwQnVpbGRBZGRDb21taXR0ZWRUeG4oU25hcEJ1 aWxkICpidWlsZGVyLCBUcmFuc2FjdGlvbklkIHhpZCkKIH0KIAogLyoKLSAqIFJlbW92ZSBrbm93 bGVkZ2UgYWJvdXQgdHJhbnNhY3Rpb25zIHdlIHRyZWF0IGFzIGNvbW1pdHRlZCB0aGF0IGFyZSBz bWFsbGVyCi0gKiB0aGFuIC0+eG1pbi4gVGhvc2Ugd29uJ3QgZXZlciBnZXQgY2hlY2tlZCB2aWEg dGhlIC0+Y29tbWl0dGVkIGFycmF5IGJ1dCB2aWEKLSAqIHRoZSBjbG9nIG1hY2hpbmVyeSwgc28g d2UgZG9uJ3QgbmVlZCB0byB3YXN0ZSBtZW1vcnkgb24gdGhlbS4KKyAqIFJlbW92ZSBrbm93bGVk Z2UgYWJvdXQgdHJhbnNhY3Rpb25zIHdlIHRyZWF0IGFzIGNvbW1pdHRlZCBvciBjb250YWluaW5n IGNhdGFsb2cKKyAqIGNoYW5nZXMgdGhhdCBhcmUgc21hbGxlciB0aGFuIC0+eG1pbi4gVGhvc2Ug d29uJ3QgZXZlciBnZXQgY2hlY2tlZCB2aWEKKyAqIHRoZSAtPmNvbW1pdHRlZCBvciAtPmNhdGNo YW5nZSBhcnJheSwgcmVzcGVjdGl2ZWx5LiBUaGUgY29tbWl0dGVkIHhpZHMgd2lsbAorICogZ2V0 IGNoZWNrZWQgdmlhIHRoZSBjbG9nIG1hY2hpbmVyeS4KKyAqCisgKiBXZSBjYW4gaWRlYWxseSBy ZW1vdmUgdGhlIHRyYW5zYWN0aW9uCisgKiBmcm9tIGNhdGNoYW5nZSBhcnJheSBvbmNlIGl0IGlz IGZpbmlzaGVkIChjb21taXR0ZWQvYWJvcnRlZCkgYnV0IHRoYXQgY291bGQKKyAqIGJlIGNvc3Rs eSBhcyB3ZSBuZWVkIHRvIG1haW50YWluIHRoZSB4aWRzIG9yZGVyIGluIHRoZSBhcnJheS4KICAq Lwogc3RhdGljIHZvaWQKLVNuYXBCdWlsZFB1cmdlQ29tbWl0dGVkVHhuKFNuYXBCdWlsZCAqYnVp bGRlcikKK1NuYXBCdWlsZFB1cmdlT2xkZXJUeG4oU25hcEJ1aWxkICpidWlsZGVyKQogewogCWlu dAkJCW9mZjsKIAlUcmFuc2FjdGlvbklkICp3b3Jrc3BhY2U7CkBAIC05MjgsNiArOTY0LDQwIEBA IFNuYXBCdWlsZFB1cmdlQ29tbWl0dGVkVHhuKFNuYXBCdWlsZCAqYnVpbGRlcikKIAlidWlsZGVy LT5jb21taXR0ZWQueGNudCA9IHN1cnZpdmluZ194aWRzOwogCiAJcGZyZWUod29ya3NwYWNlKTsK KworCS8qCisJICogcHVyZ2UgeGlkcyBpbiAtPmNhdGNoYW5nZSBhcyB3ZWxsLiBUaGUgcHVyZ2Vk IGFycmF5IG11c3QgYWxzbyBiZQorCSAqIHNvcnRlZCBpbiB4aWRDb21wYXJhdG9yIG9yZGVyLgor CSAqLworCWlmIChidWlsZGVyLT5jYXRjaGFuZ2UueGNudCA+IDApCisJeworCQkvKgorCQkgKiBT aW5jZSBjYXRjaGFuZ2UueGlwIGlzIHNvcnRlZCwgd2UgZmluZCB0aGUgbG93ZXIgYm91bmQgb2YK KwkJICogeGlkcyB0aGF0IHN0aWxsIGFyZSBpbnRlcmVzdGluZy4KKwkJICovCisJCWZvciAob2Zm ID0gMDsgb2ZmIDwgYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQ7IG9mZisrKQorCQl7CisJCQlpZiAo VHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhidWlsZGVyLT5jYXRjaGFuZ2UueGlwW29mZl0s CisJCQkJCQkJCQkJCSBidWlsZGVyLT54bWluKSkKKwkJCQlicmVhazsKKwkJfQorCisJCXN1cnZp dmluZ194aWRzID0gYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQgLSBvZmY7CisJCWlmIChzdXJ2aXZp bmdfeGlkcyA+IDApCisJCQltZW1tb3ZlKGJ1aWxkZXItPmNhdGNoYW5nZS54aXAsICYoYnVpbGRl ci0+Y2F0Y2hhbmdlLnhpcFtvZmZdKSwKKwkJCQkJc3Vydml2aW5nX3hpZHMgKiBzaXplb2YoVHJh bnNhY3Rpb25JZCkpOworCQllbHNlCisJCXsKKwkJCS8qIGNhdGNoYW5nZSBsaXN0IGJlY29tZXMg ZW1wdHkgKi8KKwkJCXBmcmVlKGJ1aWxkZXItPmNhdGNoYW5nZS54aXApOworCQkJYnVpbGRlci0+ Y2F0Y2hhbmdlLnhpcCA9IE5VTEw7CisJCX0KKworCQllbG9nKERFQlVHMywgInB1cmdlZCBjYXRh bG9nIG1vZGlmeWluZyB0cmFuc2FjdGlvbnMgZnJvbSAldSB0byAldSwgeG1pbiAldSIsCisJCQkg KHVpbnQzMikgYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQsICh1aW50MzIpIHN1cnZpdmluZ194aWRz LAorCQkJYnVpbGRlci0+eG1pbik7CisJCWJ1aWxkZXItPmNhdGNoYW5nZS54Y250ID0gc3Vydml2 aW5nX3hpZHM7CisJfQogfQogCiAvKgpAQCAtOTM1LDcgKzEwMDUsNyBAQCBTbmFwQnVpbGRQdXJn ZUNvbW1pdHRlZFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpCiAgKi8KIHZvaWQKIFNuYXBCdWlsZENv bW1pdFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCBUcmFuc2FjdGlvbklk IHhpZCwKLQkJCQkgICBpbnQgbnN1YnhhY3RzLCBUcmFuc2FjdGlvbklkICpzdWJ4YWN0cykKKwkJ CQkgICBpbnQgbnN1YnhhY3RzLCBUcmFuc2FjdGlvbklkICpzdWJ4YWN0cywgdWludDMyIHhpbmZv KQogewogCWludAkJCW54YWN0OwogCkBAIC05ODMsNyArMTA1Myw3IEBAIFNuYXBCdWlsZENvbW1p dFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJICogQWRkIHN1YnRyYW5zYWN0aW9uIHRvIGJhc2Ugc25hcHNob3QgaWYgY2F0YWxvZyBt b2RpZnlpbmcsIHdlIGRvbid0CiAJCSAqIGRpc3Rpbmd1aXNoIHRvIHRvcGxldmVsIHRyYW5zYWN0 aW9ucyB0aGVyZS4KIAkJICovCi0JCWlmIChSZW9yZGVyQnVmZmVyWGlkSGFzQ2F0YWxvZ0NoYW5n ZXMoYnVpbGRlci0+cmVvcmRlciwgc3VieGlkKSkKKwkJaWYgKFNuYXBCdWlsZFhpZEhhc0NhdGFs b2dDaGFuZ2VzKGJ1aWxkZXIsIHN1YnhpZCwgeGluZm8pKQogCQl7CiAJCQlzdWJfbmVlZHNfdGlt ZXRyYXZlbCA9IHRydWU7CiAJCQluZWVkc19zbmFwc2hvdCA9IHRydWU7CkBAIC0xMDEyLDcgKzEw ODIsNyBAQCBTbmFwQnVpbGRDb21taXRUeG4oU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRy IGxzbiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogCiAJLyogaWYgdG9wLWxldmVsIG1vZGlmaWVk IGNhdGFsb2csIGl0J2xsIG5lZWQgYSBzbmFwc2hvdCAqLwotCWlmIChSZW9yZGVyQnVmZmVyWGlk SGFzQ2F0YWxvZ0NoYW5nZXMoYnVpbGRlci0+cmVvcmRlciwgeGlkKSkKKwlpZiAoU25hcEJ1aWxk WGlkSGFzQ2F0YWxvZ0NoYW5nZXMoYnVpbGRlciwgeGlkLCB4aW5mbykpCiAJewogCQllbG9nKERF QlVHMiwgImZvdW5kIHRvcCBsZXZlbCB0cmFuc2FjdGlvbiAldSwgd2l0aCBjYXRhbG9nIGNoYW5n ZXMiLAogCQkJIHhpZCk7CkBAIC0xMDg5LDYgKzExNTksMjkgQEAgU25hcEJ1aWxkQ29tbWl0VHhu KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlkLAog CX0KIH0KIAorLyoKKyAqIENoZWNrIHRoZSByZW9yZGVyIGJ1ZmZlciBhbmQgdGhlIHNuYXBzaG90 IHRvIHNlZSBpZiB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gaGFzCisgKiBtb2RpZmllZCBjYXRhbG9n cy4KKyAqLworc3RhdGljIGlubGluZSBib29sCitTbmFwQnVpbGRYaWRIYXNDYXRhbG9nQ2hhbmdl cyhTbmFwQnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSAgdWludDMy IHhpbmZvKQoreworCWlmIChSZW9yZGVyQnVmZmVyWGlkSGFzQ2F0YWxvZ0NoYW5nZXMoYnVpbGRl ci0+cmVvcmRlciwgeGlkKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHRoZSBjb21t aXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbiBkb2VzIG5vdCBoYXZlIGludmFsaWRhdGlvbgor CSAqIG1lc3NhZ2VzLCBpdCBkaWQgbm90IGNoYW5nZSBjYXRhbG9ncyBmb3Igc3VyZS4KKwkgKi8K KwlpZiAoISh4aW5mbyAmIFhBQ1RfWElORk9fSEFTX0lOVkFMUykpCisJCXJldHVybiBmYWxzZTsK KworCS8qIENoZWNrIHRoZSBjYXRjaGFuZ2UgWElEIGFycmF5ICovCisJcmV0dXJuICgoYnVpbGRl ci0+Y2F0Y2hhbmdlLnhjbnQgPiAwKSAmJgorCQkJKGJzZWFyY2goJnhpZCwgYnVpbGRlci0+Y2F0 Y2hhbmdlLnhpcCwgYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQsCisJCQkJCSBzaXplb2YoVHJhbnNh Y3Rpb25JZCksIHhpZENvbXBhcmF0b3IpICE9IE5VTEwpKTsKK30KIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNuYXBzaG90IGJ1aWxkaW5nIGZ1bmN0aW9ucyBk ZWFsaW5nIHdpdGggeGxvZyByZWNvcmRzCkBAIC0xMTM1LDcgKzEyMjgsNyBAQCBTbmFwQnVpbGRQ cm9jZXNzUnVubmluZ1hhY3RzKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24sIHhs X3J1bm5pbmdfeGFjdAogCWJ1aWxkZXItPnhtaW4gPSBydW5uaW5nLT5vbGRlc3RSdW5uaW5nWGlk OwogCiAJLyogUmVtb3ZlIHRyYW5zYWN0aW9ucyB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgdHJhY2sg b2ZmIGFueW1vcmUgKi8KLQlTbmFwQnVpbGRQdXJnZUNvbW1pdHRlZFR4bihidWlsZGVyKTsKKwlT bmFwQnVpbGRQdXJnZU9sZGVyVHhuKGJ1aWxkZXIpOwogCiAJLyoKIAkgKiBBZHZhbmNlIHRoZSB4 bWluIGxpbWl0IGZvciB0aGUgY3VycmVudCByZXBsaWNhdGlvbiBzbG90LCB0byBhbGxvdwpAQCAt MTQzOCw2ICsxNTMxLDcgQEAgU25hcEJ1aWxkV2FpdFNuYXBzaG90KHhsX3J1bm5pbmdfeGFjdHMg KnJ1bm5pbmcsIFRyYW5zYWN0aW9uSWQgY3V0b2ZmKQogICoKICAqIHN0cnVjdCBTbmFwQnVpbGRP bkRpc2s7CiAgKiBUcmFuc2FjdGlvbklkICogY29tbWl0dGVkLnhjbnQ7ICgqbm90IHhjbnRfc3Bh Y2UqKQorICogVHJhbnNhY3Rpb25JZCAqIGNhdGNoYW5nZS54Y250OwogICoKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgU25hcEJ1aWxkT25EaXNrCkBAIC0xNDY3LDcgKzE1NjEsNyBAQCB0eXBlZGVmIHN0 cnVjdCBTbmFwQnVpbGRPbkRpc2sKIAlvZmZzZXRvZihTbmFwQnVpbGRPbkRpc2ssIHZlcnNpb24p CiAKICNkZWZpbmUgU05BUEJVSUxEX01BR0lDIDB4NTFBMUUwMDEKLSNkZWZpbmUgU05BUEJVSUxE X1ZFUlNJT04gNAorI2RlZmluZSBTTkFQQlVJTERfVkVSU0lPTiA1CiAKIC8qCiAgKiBTdG9yZS9M b2FkIGEgc25hcHNob3QgZnJvbSBkaXNrLCBkZXBlbmRpbmcgb24gdGhlIHNuYXBzaG90IGJ1aWxk ZXIncyBzdGF0ZS4KQEAgLTE0OTMsNiArMTU4Nyw5IEBAIFNuYXBCdWlsZFNlcmlhbGl6ZShTbmFw QnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogewogCVNpemUJCW5lZWRlZF9sZW5ndGg7 CiAJU25hcEJ1aWxkT25EaXNrICpvbmRpc2sgPSBOVUxMOworCVRyYW5zYWN0aW9uSWQJKmNhdGNo YW5nZV94aXAgPSBOVUxMOworCU1lbW9yeUNvbnRleHQJb2xkX2N0eDsKKwlzaXplX3QJCWNhdGNo YW5nZV94Y250OwogCWNoYXIJICAgKm9uZGlza19jOwogCWludAkJCWZkOwogCWNoYXIJCXRtcHBh dGhbTUFYUEdQQVRIXTsKQEAgLTE1NzgsMTAgKzE2NzUsMTYgQEAgU25hcEJ1aWxkU2VyaWFsaXpl KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pCiAJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCiAJCQkJIGVycm1zZygiY291bGQgbm90IHJlbW92ZSBmaWxlIFwiJXNcIjog JW0iLCB0bXBwYXRoKSkpOwogCisJb2xkX2N0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhidWls ZGVyLT5jb250ZXh0KTsKKworCS8qIEdldCB0aGUgY2F0YWxvZyBtb2RpZnlpbmcgdHJhbnNhY3Rp b25zIHRoYXQgYXJlIHlldCBub3QgY29tbWl0dGVkICovCisJY2F0Y2hhbmdlX3hpcCA9IFJlb3Jk ZXJCdWZmZXJHZXRDYXRhbG9nQ2hhbmdlc1hhY3RzKGJ1aWxkZXItPnJlb3JkZXIpOworCWNhdGNo YW5nZV94Y250ID0gYnVpbGRlci0+cmVvcmRlci0+Y2F0Y2hhbmdlX250eG5zOworCiAJbmVlZGVk X2xlbmd0aCA9IHNpemVvZihTbmFwQnVpbGRPbkRpc2spICsKLQkJc2l6ZW9mKFRyYW5zYWN0aW9u SWQpICogYnVpbGRlci0+Y29tbWl0dGVkLnhjbnQ7CisJCXNpemVvZihUcmFuc2FjdGlvbklkKSAq IChidWlsZGVyLT5jb21taXR0ZWQueGNudCArIGNhdGNoYW5nZV94Y250KTsKIAotCW9uZGlza19j ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhidWlsZGVyLT5jb250ZXh0LCBuZWVkZWRfbGVuZ3Ro KTsKKwlvbmRpc2tfYyA9IHBhbGxvYzAobmVlZGVkX2xlbmd0aCk7CiAJb25kaXNrID0gKFNuYXBC dWlsZE9uRGlzayAqKSBvbmRpc2tfYzsKIAlvbmRpc2stPm1hZ2ljID0gU05BUEJVSUxEX01BR0lD OwogCW9uZGlzay0+dmVyc2lvbiA9IFNOQVBCVUlMRF9WRVJTSU9OOwpAQCAtMTU5OCwxNiArMTcw MSwzMSBAQCBTbmFwQnVpbGRTZXJpYWxpemUoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRy IGxzbikKIAlvbmRpc2stPmJ1aWxkZXIuc25hcHNob3QgPSBOVUxMOwogCW9uZGlzay0+YnVpbGRl ci5yZW9yZGVyID0gTlVMTDsKIAlvbmRpc2stPmJ1aWxkZXIuY29tbWl0dGVkLnhpcCA9IE5VTEw7 CisJb25kaXNrLT5idWlsZGVyLmNhdGNoYW5nZS54aXAgPSBOVUxMOworCS8qIHVwZGF0ZSBjYXRj aGFuZ2Ugb25seSBvbiBkaXNrIGRhdGEgKi8KKwlvbmRpc2stPmJ1aWxkZXIuY2F0Y2hhbmdlLnhj bnQgPSBjYXRjaGFuZ2VfeGNudDsKIAogCUNPTVBfQ1JDMzJDKG9uZGlzay0+Y2hlY2tzdW0sCiAJ CQkJJm9uZGlzay0+YnVpbGRlciwKIAkJCQlzaXplb2YoU25hcEJ1aWxkKSk7CiAKIAkvKiBjb3B5 IGNvbW1pdHRlZCB4YWN0cyAqLwotCXN6ID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogYnVpbGRl ci0+Y29tbWl0dGVkLnhjbnQ7Ci0JbWVtY3B5KG9uZGlza19jLCBidWlsZGVyLT5jb21taXR0ZWQu eGlwLCBzeik7Ci0JQ09NUF9DUkMzMkMob25kaXNrLT5jaGVja3N1bSwgb25kaXNrX2MsIHN6KTsK LQlvbmRpc2tfYyArPSBzejsKKwlpZiAoYnVpbGRlci0+Y29tbWl0dGVkLnhjbnQgPiAwKQorCXsK KwkJc3ogPSBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBidWlsZGVyLT5jb21taXR0ZWQueGNudDsK KwkJbWVtY3B5KG9uZGlza19jLCBidWlsZGVyLT5jb21taXR0ZWQueGlwLCBzeik7CisJCUNPTVBf Q1JDMzJDKG9uZGlzay0+Y2hlY2tzdW0sIG9uZGlza19jLCBzeik7CisJCW9uZGlza19jICs9IHN6 OworCX0KKworCS8qIGNvcHkgY2F0YWxvZyBtb2RpZnlpbmcgeGFjdHMgKi8KKwlpZiAoY2F0Y2hh bmdlX3hjbnQgPiAwKQorCXsKKwkJc3ogPSBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBjYXRjaGFu Z2VfeGNudDsKKwkJbWVtY3B5KG9uZGlza19jLCBjYXRjaGFuZ2VfeGlwLCBzeik7CisJCUNPTVBf Q1JDMzJDKG9uZGlzay0+Y2hlY2tzdW0sIG9uZGlza19jLCBzeik7CisJCW9uZGlza19jICs9IHN6 OworCX0KIAogCUZJTl9DUkMzMkMob25kaXNrLT5jaGVja3N1bSk7CiAKQEAgLTE2ODgsMTIgKzE4 MDYsMTYgQEAgU25hcEJ1aWxkU2VyaWFsaXplKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0 ciBsc24pCiAJICovCiAJYnVpbGRlci0+bGFzdF9zZXJpYWxpemVkX3NuYXBzaG90ID0gbHNuOwog CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jdHgpOworCiBvdXQ6CiAJUmVvcmRlckJ1ZmZl clNldFJlc3RhcnRQb2ludChidWlsZGVyLT5yZW9yZGVyLAogCQkJCQkJCQkgYnVpbGRlci0+bGFz dF9zZXJpYWxpemVkX3NuYXBzaG90KTsKIAkvKiBiZSB0aWR5ICovCiAJaWYgKG9uZGlzaykKIAkJ cGZyZWUob25kaXNrKTsKKwlpZiAoY2F0Y2hhbmdlX3hpcCkKKwkJcGZyZWUoY2F0Y2hhbmdlX3hp cCk7CiB9CiAKIC8qCkBAIC0xNzA3LDcgKzE4MjksNiBAQCBTbmFwQnVpbGRSZXN0b3JlKFNuYXBC dWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pCiAJaW50CQkJZmQ7CiAJY2hhcgkJcGF0aFtN QVhQR1BBVEhdOwogCVNpemUJCXN6OwotCWludAkJCXJlYWRCeXRlczsKIAlwZ19jcmMzMmMJY2hl Y2tzdW07CiAKIAkvKiBubyBwb2ludCBpbiBsb2FkaW5nIGEgc25hcHNob3QgaWYgd2UncmUgYWxy ZWFkeSB0aGVyZSAqLwpAQCAtMTczOSwyOSArMTg2MCw3IEBAIFNuYXBCdWlsZFJlc3RvcmUoU25h cEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbikKIAogCiAJLyogcmVhZCBzdGF0aWNhbGx5 IHNpemVkIHBvcnRpb24gb2Ygc25hcHNob3QgKi8KLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQo V0FJVF9FVkVOVF9TTkFQQlVJTERfUkVBRCk7Ci0JcmVhZEJ5dGVzID0gcmVhZChmZCwgJm9uZGlz aywgU25hcEJ1aWxkT25EaXNrQ29uc3RhbnRTaXplKTsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5k KCk7Ci0JaWYgKHJlYWRCeXRlcyAhPSBTbmFwQnVpbGRPbkRpc2tDb25zdGFudFNpemUpCi0Jewot CQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0KLQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsK LQotCQlpZiAocmVhZEJ5dGVzIDwgMCkKLQkJewotCQkJZXJybm8gPSBzYXZlX2Vycm5vOwotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBl cnJtc2coImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7Ci0JCX0KLQkJ ZWxzZQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJV UFRFRCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiByZWFkICVk IG9mICV6dSIsCi0JCQkJCQkJcGF0aCwgcmVhZEJ5dGVzLAotCQkJCQkJCShTaXplKSBTbmFwQnVp bGRPbkRpc2tDb25zdGFudFNpemUpKSk7Ci0JfQorCVNuYXBCdWlsZFJlc3RvcmVDb250ZW50cyhm ZCwgKGNoYXIgKikgJm9uZGlzaywgU25hcEJ1aWxkT25EaXNrQ29uc3RhbnRTaXplLCBwYXRoKTsK IAogCWlmIChvbmRpc2subWFnaWMgIT0gU05BUEJVSUxEX01BR0lDKQogCQllcmVwb3J0KEVSUk9S LApAQCAtMTc4MSw1NiArMTg4MCwyNiBAQCBTbmFwQnVpbGRSZXN0b3JlKFNuYXBCdWlsZCAqYnVp bGRlciwgWExvZ1JlY1B0ciBsc24pCiAJCQkJU25hcEJ1aWxkT25EaXNrQ29uc3RhbnRTaXplIC0g U25hcEJ1aWxkT25EaXNrTm90Q2hlY2tzdW1tZWRTaXplKTsKIAogCS8qIHJlYWQgU25hcEJ1aWxk ICovCi0JcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU05BUEJVSUxEX1JFQUQp OwotCXJlYWRCeXRlcyA9IHJlYWQoZmQsICZvbmRpc2suYnVpbGRlciwgc2l6ZW9mKFNuYXBCdWls ZCkpOwotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQlpZiAocmVhZEJ5dGVzICE9IHNpemVv ZihTbmFwQnVpbGQpKQotCXsKLQkJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JCUNsb3Nl VHJhbnNpZW50RmlsZShmZCk7Ci0KLQkJaWYgKHJlYWRCeXRlcyA8IDApCi0JCXsKLQkJCWVycm5v ID0gc2F2ZV9lcnJubzsKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0i LCBwYXRoKSkpOwotCQl9Ci0JCWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl KEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBm aWxlIFwiJXNcIjogcmVhZCAlZCBvZiAlenUiLAotCQkJCQkJCXBhdGgsIHJlYWRCeXRlcywgc2l6 ZW9mKFNuYXBCdWlsZCkpKSk7Ci0JfQorCVNuYXBCdWlsZFJlc3RvcmVDb250ZW50cyhmZCwgKGNo YXIgKikgJm9uZGlzay5idWlsZGVyLCBzaXplb2YoU25hcEJ1aWxkKSwgcGF0aCk7CiAJQ09NUF9D UkMzMkMoY2hlY2tzdW0sICZvbmRpc2suYnVpbGRlciwgc2l6ZW9mKFNuYXBCdWlsZCkpOwogCiAJ LyogcmVzdG9yZSBjb21taXR0ZWQgeGFjdHMgaW5mb3JtYXRpb24gKi8KLQlzeiA9IHNpemVvZihU cmFuc2FjdGlvbklkKSAqIG9uZGlzay5idWlsZGVyLmNvbW1pdHRlZC54Y250OwotCW9uZGlzay5i dWlsZGVyLmNvbW1pdHRlZC54aXAgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGJ1aWxkZXItPmNv bnRleHQsIHN6KTsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTkFQQlVJ TERfUkVBRCk7Ci0JcmVhZEJ5dGVzID0gcmVhZChmZCwgb25kaXNrLmJ1aWxkZXIuY29tbWl0dGVk LnhpcCwgc3opOwotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQlpZiAocmVhZEJ5dGVzICE9 IHN6KQorCWlmIChvbmRpc2suYnVpbGRlci5jb21taXR0ZWQueGNudCA+IDApCiAJewotCQlpbnQJ CQlzYXZlX2Vycm5vID0gZXJybm87Ci0KLQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKKwkJc3og PSBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBvbmRpc2suYnVpbGRlci5jb21taXR0ZWQueGNudDsK KwkJb25kaXNrLmJ1aWxkZXIuY29tbWl0dGVkLnhpcCA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8o YnVpbGRlci0+Y29udGV4dCwgc3opOworCQlTbmFwQnVpbGRSZXN0b3JlQ29udGVudHMoZmQsIChj aGFyICopIG9uZGlzay5idWlsZGVyLmNvbW1pdHRlZC54aXAsIHN6LCBwYXRoKTsKKwkJQ09NUF9D UkMzMkMoY2hlY2tzdW0sIG9uZGlzay5idWlsZGVyLmNvbW1pdHRlZC54aXAsIHN6KTsKKwl9CiAK LQkJaWYgKHJlYWRCeXRlcyA8IDApCi0JCXsKLQkJCWVycm5vID0gc2F2ZV9lcnJubzsKLQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKSkpOwotCQl9Ci0JCWVs c2UKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBU RUQpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogcmVhZCAlZCBv ZiAlenUiLAotCQkJCQkJCXBhdGgsIHJlYWRCeXRlcywgc3opKSk7CisJLyogcmVzdG9yZSBjYXRh bG9nIG1vZGlmeWluZyB4YWN0cyBpbmZvcm1hdGlvbiAqLworCWlmIChvbmRpc2suYnVpbGRlci5j YXRjaGFuZ2UueGNudCA+IDApCisJeworCQlzeiA9IHNpemVvZihUcmFuc2FjdGlvbklkKSAqIG9u ZGlzay5idWlsZGVyLmNhdGNoYW5nZS54Y250OworCQlvbmRpc2suYnVpbGRlci5jYXRjaGFuZ2Uu eGlwID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhidWlsZGVyLT5jb250ZXh0LCBzeik7CisJCVNu YXBCdWlsZFJlc3RvcmVDb250ZW50cyhmZCwgKGNoYXIgKikgb25kaXNrLmJ1aWxkZXIuY2F0Y2hh bmdlLnhpcCwgc3osIHBhdGgpOworCQlDT01QX0NSQzMyQyhjaGVja3N1bSwgb25kaXNrLmJ1aWxk ZXIuY2F0Y2hhbmdlLnhpcCwgc3opOwogCX0KLQlDT01QX0NSQzMyQyhjaGVja3N1bSwgb25kaXNr LmJ1aWxkZXIuY29tbWl0dGVkLnhpcCwgc3opOwogCiAJaWYgKENsb3NlVHJhbnNpZW50RmlsZShm ZCkgIT0gMCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE4ODUsNiArMTk1NCwxMyBAQCBTbmFwQnVp bGRSZXN0b3JlKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pCiAJfQogCW9uZGlz ay5idWlsZGVyLmNvbW1pdHRlZC54aXAgPSBOVUxMOwogCisJLyogc2V0IGNhdGFsb2cgbW9kaWZ5 aW5nIHRyYW5zYWN0aW9ucyAqLworCWlmIChidWlsZGVyLT5jYXRjaGFuZ2UueGlwKQorCQlwZnJl ZShidWlsZGVyLT5jYXRjaGFuZ2UueGlwKTsKKwlidWlsZGVyLT5jYXRjaGFuZ2UueGNudCA9IG9u ZGlzay5idWlsZGVyLmNhdGNoYW5nZS54Y250OworCWJ1aWxkZXItPmNhdGNoYW5nZS54aXAgPSBv bmRpc2suYnVpbGRlci5jYXRjaGFuZ2UueGlwOworCW9uZGlzay5idWlsZGVyLmNhdGNoYW5nZS54 aXAgPSBOVUxMOworCiAJLyogb3VyIHNuYXBzaG90IGlzIG5vdCBpbnRlcmVzdGluZyBhbnltb3Jl LCBidWlsZCBhIG5ldyBvbmUgKi8KIAlpZiAoYnVpbGRlci0+c25hcHNob3QgIT0gTlVMTCkKIAl7 CkBAIC0xOTA2LDkgKzE5ODIsNDMgQEAgU25hcEJ1aWxkUmVzdG9yZShTbmFwQnVpbGQgKmJ1aWxk ZXIsIFhMb2dSZWNQdHIgbHNuKQogc25hcHNob3Rfbm90X2ludGVyZXN0aW5nOgogCWlmIChvbmRp c2suYnVpbGRlci5jb21taXR0ZWQueGlwICE9IE5VTEwpCiAJCXBmcmVlKG9uZGlzay5idWlsZGVy LmNvbW1pdHRlZC54aXApOworCWlmIChvbmRpc2suYnVpbGRlci5jYXRjaGFuZ2UueGlwICE9IE5V TEwpCisJCXBmcmVlKG9uZGlzay5idWlsZGVyLmNhdGNoYW5nZS54aXApOwogCXJldHVybiBmYWxz ZTsKIH0KIAorLyoKKyAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZXJpYWxpemVkIHNuYXBz aG90IHRvIHRoZSBkZXN0LgorICovCitzdGF0aWMgdm9pZAorU25hcEJ1aWxkUmVzdG9yZUNvbnRl bnRzKGludCBmZCwgY2hhciAqZGVzdCwgU2l6ZSBzaXplLCBjb25zdCBjaGFyICpwYXRoKQorewor CWludAkJCXJlYWRCeXRlczsKKworCXBnc3RhdF9yZXBvcnRfd2FpdF9zdGFydChXQUlUX0VWRU5U X1NOQVBCVUlMRF9SRUFEKTsKKwlyZWFkQnl0ZXMgPSByZWFkKGZkLCBkZXN0LCBzaXplKTsKKwlw Z3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7CisJaWYgKHJlYWRCeXRlcyAhPSBzaXplKQorCXsKKwkJ aW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOworCisJCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7CisK KwkJaWYgKHJlYWRCeXRlcyA8IDApCisJCXsKKwkJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKSkpOworCQl9CisJCWVs c2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBU RUQpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogcmVhZCAlZCBv ZiAlenUiLAorCQkJCQkJCXBhdGgsIHJlYWRCeXRlcywgc2l6ZW9mKFNuYXBCdWlsZCkpKSk7CisJ fQorfQorCiAvKgogICogUmVtb3ZlIGFsbCBzZXJpYWxpemVkIHNuYXBzaG90cyB0aGF0IGFyZSBu b3QgcmVxdWlyZWQgYW55bW9yZSBiZWNhdXNlIG5vCiAgKiBzbG90IGNhbiBuZWVkIHRoZW0uIFRo aXMgZG9lc24ndCBhY3R1YWxseSBoYXZlIHRvIHJ1biBkdXJpbmcgYSBjaGVja3BvaW50LApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IGQxMDlkMGJhZWQuLmZkODRm MTc1YzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTM4MCw2 ICszODAsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRYTgogCSAqLwogCWRsaXN0 X25vZGUJbm9kZTsKIAorCS8qCisJICogQSBub2RlIGluIHRoZSBsaXN0IG9mIGNhdGFsb2cgbW9k aWZ5aW5nIHRyYW5zYWN0aW9ucworCSAqLworCWRsaXN0X25vZGUJY2F0Y2hhbmdlX25vZGU7CisK IAkvKgogCSAqIFNpemUgb2YgdGhpcyB0cmFuc2FjdGlvbiAoY2hhbmdlcyBjdXJyZW50bHkgaW4g bWVtb3J5LCBpbiBieXRlcykuCiAJICovCkBAIC01MjYsNiArNTMxLDEyIEBAIHN0cnVjdCBSZW9y ZGVyQnVmZmVyCiAJICovCiAJZGxpc3RfaGVhZAl0eG5zX2J5X2Jhc2Vfc25hcHNob3RfbHNuOwog CisJLyoKKwkgKiBUcmFuc2FjdGlvbnMgYW5kIHN1YnRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgbW9k aWZpZWQgc3lzdGVtIGNhdGFsb2dzLgorCSAqLworCWRsaXN0X2hlYWQJY2F0Y2hhbmdlX3R4bnM7 CisJaW50CQkJY2F0Y2hhbmdlX250eG5zOworCiAJLyoKIAkgKiBvbmUtZW50cnkgc2l6ZWQgY2Fj aGUgZm9yIGJ5X3R4bi4gVmVyeSBmcmVxdWVudGx5IHRoZSBzYW1lIHR4biBnZXRzCiAJICogbG9v a2VkIHVwIG92ZXIgYW5kIG92ZXIgYWdhaW4uCkBAIC02NzcsNiArNjg4LDcgQEAgZXh0ZXJuIHZv aWQgUmVvcmRlckJ1ZmZlclNraXBQcmVwYXJlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUHJlcGFyZShSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZCk7CiBleHRlcm4gUmVvcmRlckJ1ZmZl clRYTiAqUmVvcmRlckJ1ZmZlckdldE9sZGVzdFRYTihSZW9yZGVyQnVmZmVyICopOwogZXh0ZXJu IFRyYW5zYWN0aW9uSWQgUmVvcmRlckJ1ZmZlckdldE9sZGVzdFhtaW4oUmVvcmRlckJ1ZmZlciAq cmIpOworZXh0ZXJuIFRyYW5zYWN0aW9uSWQgKlJlb3JkZXJCdWZmZXJHZXRDYXRhbG9nQ2hhbmdl c1hhY3RzKFJlb3JkZXJCdWZmZXIgKnJiKTsKIAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclNl dFJlc3RhcnRQb2ludChSZW9yZGVyQnVmZmVyICosIFhMb2dSZWNQdHIgcHRyKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9zbmFwYnVpbGQuaAppbmRleCBkMTc5MjUxYWFkLi5lNmFkZWEyNGYyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaApAQCAtODIsNyArODIsNyBAQCBleHRlcm4gdm9p ZCBTbmFwQnVpbGRTZXRUd29QaGFzZUF0KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBw dHIpOwogCiBleHRlcm4gdm9pZCBTbmFwQnVpbGRDb21taXRUeG4oU25hcEJ1aWxkICpidWlsZGVy LCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4 YWN0cywKLQkJCQkJCQkgICBUcmFuc2FjdGlvbklkICpzdWJ4YWN0cyk7CisJCQkJCQkJICAgVHJh bnNhY3Rpb25JZCAqc3VieGFjdHMsIHVpbnQzMiB4aW5mbyk7CiBleHRlcm4gYm9vbCBTbmFwQnVp bGRQcm9jZXNzQ2hhbmdlKFNuYXBCdWlsZCAqYnVpbGRlciwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJ CQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKTsKIGV4dGVybiB2b2lkIFNuYXBCdWlsZFByb2Nlc3NO ZXdDaWQoU25hcEJ1aWxkICpidWlsZGVyLCBUcmFuc2FjdGlvbklkIHhpZCwKLS0gCjIuMjQuMyAo QXBwbGUgR2l0LTEyOCkKCg== --000000000000e1f20c05e4b0939c--