Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyMVm-0003ND-02 for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 04:10:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyMVk-002UeB-1G for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 04:10:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyMVj-002Ue1-2q for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 04:10:00 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyMVf-000000017bC-0aOz for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 04:09:59 +0000 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4836f363d0dso77482345e9.3 for ; Thu, 05 Mar 2026 20:09:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772770194; cv=none; d=google.com; s=arc-20240605; b=X/tFQFa9jugexiY0Lh1Tf9q3rJDs9gClpy2loxzApM9AD0kQewUZ1C5j1a5UnSqGmP t0blD+yQqxQyXrrH2u5Y4O9J1PdcWcrm9ShHL/CRDFt5UGUAkx8lcVETrOkTEvyR2iSt 9Ho3EYTzT7bnaVSoxLpQU6ffT1KgNH2e7h8PFrRiMXChEUEiV60lSPmv+G0qJIR4oD+F sSi2a3s1qI3BqGBqFlMw2P4RZuazkKZL6c+c2LwQzPrFge+6DFUZ6NiPDF+dxATRw0Zp votsucyULf0f2cHiNGPSsKwuCP3lKQKdHBLThmGeOj/A/tDKIaGE9rfboerv4mOrqF+x v2uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=h/JQ6l+tJHAhEd5vmT1GMCjZTFr6LEu4G2ue8IMSYHo=; fh=q3pTFSl7+E46v63aTjTAcdXKOvOQ38z7RIqvfPThmAQ=; b=QSX63bIgibmUr9Ch2pYxqjN6cpdXxqWp9lTJtlR+kBnll09Ki3MHD8euyravRTCCuV pV9ToHoSWP/oJEl6NaoSENMQtzQXkPwzGfMFDo9xp8KzCZpD32kzz4irEps01aMc3wm0 ar8vwey1imQsQztosewpNy6gWNM7hSms+fR/yLkAgf2g4ufkSsNLog8MVWj+K69/+hLs bVkcxw1qLTrfEsfB4rIl52RzlB/TvSLsBueRyVrZjW34Ex6o2ArC3kM0juyLyYhJOVQB 5avedq+n5mdO2I+IhZwuGaG2KUAMzE2VGa2jaRM6C1k3SbnjzQxajc6i9Qm4pp2RzJCC 9TwA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772770194; x=1773374994; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=h/JQ6l+tJHAhEd5vmT1GMCjZTFr6LEu4G2ue8IMSYHo=; b=hJvYKid+7BQsBO0Q7hhXuxmSiS7Y2em4ptBk4NX7Drpwbr97fHDIbQowxlvQ6XDYER iIDzjVmXr4GM/4x2doFO/pEbdfuDbKiGiTYRGRzse/8hOWgwwIBmmbX9H8NABK5u6Zs/ ttNyZ/leziDWtNYDL7snWZtNEGlGpjyCSbl27ZvNVUs9DSPJNotTrYwZPYNiM7DmeQdi FV4JCflecjZzXvPB6afiGZmrmV+ESxsLzNJTrAosqu6qQXKknXOSDrzLVh9itQhOl375 RNj11/kQKuWRxjeXTY0rC2FsBTmAAiVyOfRRdZ0dJgb2toAdH3R1KzpYv+aTi9bmUlQM +X7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772770194; x=1773374994; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=h/JQ6l+tJHAhEd5vmT1GMCjZTFr6LEu4G2ue8IMSYHo=; b=CfgdQXp2d76WF1siEDSJcC+AX3W8hQyLHJI9onBUziBKVBFri1KMxvOcqVNxuWDLd7 WbntPIXeIigGB/kSfAJHJrzWWdpZKtRDzKVUOS/9fUUpjLC18bAhWTPy8Xh8EomYbGbw YeY+JGfe++Oyo/uwhee/58mm/RkI19OHdaQyFqE0gba0N9JcdSLV17OhceanEtI3z6UV APYzyXjy9QnIPc6yPw4GBvB7bom3T3rTccrc+jCba6RyIgnaI8oXA8u4omvn8h76QVDb 3tsehgLLcMXjrR4usc3BYeG8Rpznc5Io6tDGLhF3H1oph7WxVADNeG7lXrp6XZYq5cCx ImIA== X-Forwarded-Encrypted: i=1; AJvYcCXlPBhRA7Bs0vDbeXjKaPkXAS7aQMQ8lLJK1pmo80cPjLuoYrDul3Pv7ygghcwh2Y5fISKuiLHwTqHouMPd@lists.postgresql.org X-Gm-Message-State: AOJu0YzvieIVdomWHkXGEPQGZ4rAfeWBppl0aBRcVsIRGcANr2lSXMMA us8Syh29ogPhrF7szrZpiCrI36HeuAnI2d1Rwyhddbj4iNT5Ab6D5bZyhziGfQt+kFyv2zAnkd9 n3iIf5Vn627Wzw7hphVRntlr6pDPPh5g= X-Gm-Gg: ATEYQzxsUT7vk0RrS8yTyH3g9QKYcxJ+EoYbG1grD6Ixh6ctJpJMOMBUrOBLKRvFP0d q0GnDLs5/pOghpALGiBWeE0LZ/LMmVy/DFEztfGoQFYlAAxtxNC51uV86LhHOPR/DZ9uhYL0hEB D106apu75vmy3s/t+4L0CQr0oXxzEuT+mzzWYFlxO/J9UW4U+zVpjnSMIN0dlFEmjWY9ZE5vGXn meS+bbk/sVB/xKMB24qAU7hjTJjpquj9hnM+dR5qk0b/OJlpkBzYF5Vn8VxyNJ6lLTMwXfESeJG 8PYKoqAKrhv8VPS0K//RB11u/PSq/EYW0+jJMbKt3MU4zJbIWP0fhP+ICBji9q8WeMwSX5m6 X-Received: by 2002:a05:600c:350e:b0:477:9b35:3e49 with SMTP id 5b1f17b1804b1-48526916bafmr7834435e9.3.1772770193694; Thu, 05 Mar 2026 20:09:53 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Fri, 6 Mar 2026 17:09:41 +1300 X-Gm-Features: AaiRm51AEzS7jS_ba8O2bstTuVcyey_fMnn-eHw71ATohEHiTe-B-yOnYm6iBW4 Message-ID: Subject: Re: More speedups for tuple deformation To: Andres Freund Cc: John Naylor , Chao Li , PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000a9ff6e064c533952" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="UTF-8" One of my goals for proactively populating CompactAttribute.attcacheoff is to make it so we're able to support deforming only a subset of columns. If we only need a small number of columns from the tuple and all those columns have a known attcacheoff and no NULLs come prior, then we can quite efficiently just go to those cached offsets and fetch only the attributes that we need. To do this, we'll need an extra array to store which attnums we're interested in, rather than deforming all attrs up to the highest attnum that we need, as we do today. I expect that looking at this new array will slow things down a bit when we're accessing either most or all columns in, say, a SELECT * query. So, IMO, it'd be bad to *replace* the current deforming code with code which does this. Instead, I propose we add an additional deform operator and have some heuristic which decides which one is best to use. I expect ExecPushExprSetupSteps() could make that choice fairly easily. Perhaps something cheap like bms_num_members(scan_attrs) is less than half the bms_prev_member(scan_attrs, -1) (the highest member). There's going to be many cases where the attcacheoff isn't known in the attributes being selected. So that we still get some gains when that's the case, I've coded it up so that we start walking the tuple at the last attribute that has an attcacheoff. In many cases, that'll mean we don't need to walk the entire tuple. Often, leading columns are fixed-width, so this means that there's likely some benefit to most cases. There might need to be a bit more education or documentation about best column ordering practises. There are a few hurdles to make this work, and one is the physical tlist optimization. If the planner replaces the targetlist with a physical tlist, the executor is going to think we need all columns, which would have it likely choose not to do the selective deforming. To make this work, I've added some code in createplan.c to extract the attnums we need from the qual and tlist before the physical tlist is installed. That's recorded in a Bitmapset and passed down to the executor and to the code which sets up the ExprStates. Currently, mostly to exercise this code as much as possible, I've coded it to always do the selective deforming when the Bitmapset isn't empty. So far, I've only done this for Seq Scan, but I expect all the scans that deform tuples could use this. I've attached the code which does all this in the 0006 patch. Ideally, I'd have had this at least to the current state about 2-3 months ago, so I don't intend that 0006 is v19 material, but I wanted to share to show where I intend this work to go. Performance: Using the t_1_40 table from the deform_test_setup.sh script I sent in [1], running "select a from t_1_40 where a = 0;" ("a" is the 43rd column in that table), on my Zen2 machine, I get the following from perf top and pgbench: master: 75.57% postgres [.] tts_buffer_heap_getsomeattrs 4.70% postgres [.] ExecInterpExpr 2.85% postgres [.] ExecSeqScanWithQualProject 1.94% postgres [.] heapgettup_pagemode 1.21% postgres [.] UnlockBuffer 1.15% postgres [.] slot_getsomeattrs_int $ for i in {1..3}; do pgbench -n -f bench.sql -M prepared -T 10 postgres | grep latency; done latency average = 154.175 ms latency average = 156.780 ms latency average = 157.599 ms 0001-0005: 64.24% postgres [.] tts_buffer_heap_getsomeattrs 15.01% postgres [.] ExecInterpExpr 3.22% postgres [.] ExecSeqScanWithQualProject 3.01% postgres [.] heapgettup_pagemode 1.57% postgres [.] ExecStoreBufferHeapTuple 1.53% postgres [.] heap_prepare_pagescan $ for i in {1..3}; do pgbench -n -f bench.sql -M prepared -T 10 postgres | grep latency; done latency average = 130.981 ms latency average = 134.700 ms latency average = 134.898 ms 0001-0006: 42.28% postgres [.] heapgettup_pagemode 11.38% postgres [.] ExecInterpExpr 7.13% postgres [.] ExecSeqScanWithQualProject 5.92% postgres [.] tts_buffer_heap_selectattrs <-- it's down here. 5.69% postgres [.] ExecStoreBufferHeapTuple 5.11% postgres [.] heap_getnextslot 3.87% postgres [.] heap_prepare_pagescan $ for i in {1..3}; do pgbench -n -f bench.sql -M prepared -T 10 postgres | grep latency; done latency average = 71.689 ms latency average = 75.638 ms latency average = 75.149 ms Keep in mind that this is one of the best cases as t_1_40 has no NULLs and only has fixed-width columns. The only slightly better case would be to add more columns and fetch only the final one. 40 doesn't seem excessively unrealistic, to get an idea of the gains that someone *could* see. You can see that perf top report that tts_buffer_heap_getsomeattrs dropped from taking 75.57% down to 64.24% with 0001-0005. Adding 0006 sees that replaced with tts_buffer_heap_selectattrs which takes less than 6% of the CPU time. It also highlights the next most interesting thing we should probably make faster, heapgettup_pagemode(). I've attached v12 of the patch. There are a few changes in 0001-0005 that should help make things a bit faster than v11. I've also attached the new selective deforming code in 0006. There's no JIT support for 0006 yet, I don't need to be told about that :-) I'm planning on starting to go through 0002-0005 in much more detail from mid next week with my committer hat on. If anyone wants to relook at any of the 0002-0005 patches, there's still time. I'm also happy to receive feedback on 0006, but I will address concerns with that at a lower priority. One thing that's still left todo in the 0004 patch is enable the TTS_FLAG_OBEYS_NOT_NULL_CONSTRAINTS optimisation for a few other scan types. Thanks for reading David [1] https://postgr.es/m/CAApHDvo1i-ycAcWnK3L7ZASTuM8mW46kvRqMaUHD46HSuJmx7A@mail.gmail.com --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0001-Introduce-deform_bench-test-module.patch" Content-Disposition: attachment; filename="v12-0001-Introduce-deform_bench-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3fjo0 RnJvbSAyN2NmOGQwMDA3NDg3ZDlkZDIyYTdiNmUwNTYyZTAzOTk0MDNkZmVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNyBKYW4gMjAyNiAxNTowODowOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDEv Nl0gSW50cm9kdWNlIGRlZm9ybV9iZW5jaCB0ZXN0IG1vZHVsZQoKRm9yIGJlbmNobWFya2luZyB0 dXBsZSBkZWZvcm1hdGlvbi4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0 aWdub3JlICAgICAgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZp bGUgICAgICAgIHwgIDIxICsrKysKIC4uLi9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAu c3FsICAgICAgICB8ICAgOCArKwogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3Jt X2JlbmNoLmMgIHwgMTA3ICsrKysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvZGVmb3JtX2Jl bmNoL2RlZm9ybV9iZW5jaC5jb250cm9sIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL21lc29uLmJ1aWxkICAgICB8ICAyMiArKysrCiBzcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2Jl bmNoLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9y bV9iZW5jaC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZGVm b3JtX2JlbmNoL2RlZm9ybV9iZW5jaC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmNvbnRyb2wKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9tZXNvbi5idWls ZAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBA CisjIEdlbmVyYXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVj ay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1ZmMwZjdhNTgzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKQEAgLTAsMCArMSwyMSBAQAorIyBz cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gZGVm b3JtX2JlbmNoCitPQkpTID0gZGVmb3JtX2JlbmNoLm8KKworRVhURU5TSU9OID0gZGVmb3JtX2Jl bmNoCitEQVRBID0gZGVmb3JtX2JlbmNoLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gImRlZm9ybV9i ZW5jaCAtIHR1cGxlIGRlZm9ybSBiZW5jaG1hcmtpbmciCisKK1JFR1JFU1MgPSBkZWZvcm1fYmVu Y2gKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNo ZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5MmI3MWRiYTNiCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAuc3FsCkBA IC0wLDAgKzEsOCBAQAorLyogZGVmb3JtX2JlbmNoLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gZGVmb3JtX2JlbmNoIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlZm9ybV9iZW5jaCh0YWJsZW9p ZCBPaWQsIGF0dG51bSBpbnRbXSkgUkVUVVJOUyBGTE9BVAorQVMgJ01PRFVMRV9QQVRITkFNRScs ICdkZWZvcm1fYmVuY2gnCitMQU5HVUFHRSBDIFZPTEFUSUxFIFNUUklDVDsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjc4MzhmNjM5YmVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLmMKQEAgLTAsMCArMSwxMDcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRlZm9ybV9iZW5jaC5jCisgKgorICogZm9yIGJl bmNobWFya2luZyB0dXBsZSBkZWZvcm1hdGlvbiByb3V0aW5lcworICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2Fy cmF5YWNjZXNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGRlZm9ybV9iZW5jaCk7CisKK0RhdHVtCitkZWZv cm1fYmVuY2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQl0YWJsZW9pZCA9IFBHX0dFVEFS R19PSUQoMCk7CisJQXJyYXlUeXBlICAqYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7 CisJVGFibGVTY2FuRGVzYyBzY2FuOworCVJlbGF0aW9uCXJlbDsKKwlUdXBsZURlc2MJdHVwZGVz YzsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXMgPSBOVUxM OworCWJvb2wJICAgKmVsZW1fbnVsbHMgPSBOVUxMOworCWludAkJCWVsZW1fY291bnQ7CisJaW50 CQkgICAqYXR0bnVtczsKKwljbG9ja190CQlzdGFydCwKKwkJCQllbmQ7CisKKwlyZWwgPSByZWxh dGlvbl9vcGVuKHRhYmxlb2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKHJlbC0+cmRfcmVs LT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygib25seSBo ZWFwIEFNIGlzIHN1cHBvcnRlZCIpKSk7CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCXNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc0J1ZmZlckhl YXBUdXBsZSk7CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIEdldEFjdGl2ZVNu YXBzaG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsKKworCS8qCisJICogVGhlIGFycmF5IGlz IHVzZWQgdG8gYWxsb3cgY2FsbGVycyB0byBkZWZpbmUgaG93IG1hbnkgYXR0cyB0byBkZWZvcm0u CisJICogZS5nOiAnezEsMTB9Jzo6aW50W10gd291bGQgZGVmb3JtIGF0dG51bT0xLCB0aGVuIGlu IGEgMm5kIHBhc3MgZGVmb3JtCisJICogdGhlIHJlbWFpbmRlciB1cCB0byBhdHRudW09MTAuICBQ YXNzaW5nIGFuIGVsZW1lbnQgYXMgTlVMTCBtZWFucyBhbGwKKwkgKiBhdHRudW1zLiAgVGhpcyBh bGxvd3Mgc2ltdWxhdGlvbiBvZiBpbmNyZW1lbnRhbCBkZWZvcm1hdGlvbi4gIEdlbmVyYWxseQor CSAqIGlmIHlvdSdyZSBwYXNzaW5nIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDEgZWxlbWVudCwg dGhlbiB0aGUgYXJyYXkKKwkgKiBzaG91bGQgYmUgaW4gYXNjZW5kaW5nIG9yZGVyLiAgRG9pbmcg c29tZXRoaW5nIGxpa2UgJ3sxMCwxfScgd291bGQgbWVhbgorCSAqIHdlJ3ZlIGFscmVhZHkgZGVm b3JtZWQgMTAgYXR0cmlidXRlcyBhbmQgb24gdGhlIDJuZCBwYXNzIHRoZXJlJ3MKKwkgKiBub3Ro aW5nIHRvIGRvIHNpbmNlIGF0dG51bT0xIHdhcyBhbHJlYWR5IGRlZm9ybWVkIGluIHRoZSBmaXJz dCBwYXNzLgorCSAqCisJICogWW91J2xsIGdldCBhbiBFUlJPUiBpZiB5b3UgcGFzcyBhIG51bWJl ciBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogYXR0cmlidXRlcyBpbiB0aGUgdGFibGUu CisJICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyYXksCisJCQkJCSAgSU5UNE9JRCwKKwkJCQkJ ICBzaXplb2YoaW50MzIpLAorCQkJCQkgIHRydWUsCisJCQkJCSAgJ2knLAorCQkJCQkgICZlbGVt X2RhdHVtcywKKwkJCQkJICAmZWxlbV9udWxscywKKwkJCQkJICAmZWxlbV9jb3VudCk7CisKKwlh dHRudW1zID0gcGFsbG9jX2FycmF5KGludCwgZWxlbV9jb3VudCk7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGVsZW1fY291bnQ7IGkrKykKKwl7CisJCS8qIE1ha2UgYSBOVUxMIGVsZW1lbnQgbWVh biBhbGwgYXR0cmlidXRlcyAqLworCQlpZiAoZWxlbV9udWxsc1tpXSkKKwkJCWF0dG51bXNbaV0g PSB0dXBkZXNjLT5uYXR0czsKKwkJZWxzZQorCQkJYXR0bnVtc1tpXSA9IERhdHVtR2V0SW50MzIo ZWxlbV9kYXR1bXNbaV0pOworCX0KKworCXN0YXJ0ID0gY2xvY2soKTsKKworCXdoaWxlIChoZWFw X2dldG5leHRzbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwl7CisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogRGVmb3JtIGluIHN0YWdlcyBhY2NvcmRpbmcg dG8gdGhlIGF0dG51bXMgYXJyYXkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtX2NvdW50 OyBpKyspCisJCQlzbG90X2dldHNvbWVhdHRycyhzbG90LCBhdHRudW1zW2ldKTsKKwl9CisKKwll bmQgPSBjbG9jaygpOworCisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwl0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCisJLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBydW4gdGhl IHRlc3QgKi8KKwlQR19SRVRVUk5fRkxPQVQ4KChkb3VibGUpIChlbmQgLSBzdGFydCkgLyAoQ0xP Q0tTX1BFUl9TRUMgLyAxMDAwKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2Rl Zm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvZGVmb3Jt X2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5hMjAyM2Y5ZDczOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorIyBk ZWZvcm1fYmVuY2ggZXh0ZW5zaW9uCitjb21tZW50ID0gJ2Z1bmN0aW9ucyBmb3IgYmVuY2htYXJr aW5nIHR1cGxlIGRlZm9ybWF0aW9uJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9w YXRobmFtZSA9ICckbGliZGlyL2RlZm9ybV9iZW5jaCcKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvZGVmb3JtX2JlbmNoL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjgyMDQ5NTg1MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2RlZm9ybV9iZW5jaF9zb3Vy Y2VzID0gZmlsZXMoCisgICdkZWZvcm1fYmVuY2guYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09 ICd3aW5kb3dzJworICBkZWZvcm1fYmVuY2hfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mo d2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ2RlZm9ybV9iZW5jaCcs CisgICAgJy0tRklMRURFU0MnLCAnZGVmb3JtX2JlbmNoIC0gYmVuY2htYXJraW5nIHR1cGxlIGRl Zm9ybWF0aW9uJyxdKQorZW5kaWYKKworZGVmb3JtX2JlbmNoID0gc2hhcmVkX21vZHVsZSgnZGVm b3JtX2JlbmNoJywKKyAgZGVmb3JtX2JlbmNoX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9t b2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IGRlZm9ybV9iZW5jaAorCit0ZXN0X2lu c3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ2RlZm9ybV9iZW5jaC0tMS4wLnNxbCcsCisgICdkZWZv cm1fYmVuY2guY29udHJvbCcsCispCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCBlMmIzZWVmNDEzNi4u MTMxMmYzYjRkN2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogc3ViZGly KCdicmluJykKIHN1YmRpcignY29tbWl0X3RzJykKK3N1YmRpcignZGVmb3JtX2JlbmNoJykKIHN1 YmRpcignZGVsYXlfZXhlY3V0aW9uJykKIHN1YmRpcignZHVtbXlfaW5kZXhfYW0nKQogc3ViZGly KCdkdW1teV9zZWNsYWJlbCcpCi0tIAoyLjUxLjAKCg== --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0002-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Disposition: attachment; filename="v12-0002-Allow-sibling-call-optimization-in-slot_getsomea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3jjv1 RnJvbSBjZWFmMmM3OGZhY2JjMmUxMTgxNTJkNDE5YTJjN2JjZjcyYTYzYWQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAxNiBGZWIgMjAyNiAxNDoyMDoxOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDIv Nl0gQWxsb3cgc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBpbgogc2xvdF9nZXRzb21lYXR0cnNf aW50KCkKClRoaXMgY2hhbmdlcyB0aGUgVHVwbGVUYWJsZVNsb3RPcHMgY29udHJhY3QgdG8gbWFr ZSBpdCBzbyB0aGUKZ2V0c29tZWF0dHJzKCkgZnVuY3Rpb24gaXMgaW4gY2hhcmdlIG9mIGNhbGxp bmcKc2xvdF9nZXRtaXNzaW5nYXR0cnMoKS4KClNpbmNlIHRoaXMgcmVtb3ZlcyBhbGwgY29kZSBm cm9tIHNsb3RfZ2V0c29tZWF0dHJzX2ludCgpIGFzaWRlIGZyb20gdGhlCmdldHNvbWVhdHRycygp IGNhbGwgaXRzZWxmLCB3ZSBtYXkgYXMgd2VsbCBhZGp1c3Qgc2xvdF9nZXRzb21lYXR0cnMoKSBz bwp0aGF0IGl0IGNhbGxzIGdldHNvbWVhdHRycygpIGRpcmVjdGx5LiAgV2UgbGVhdmUgc2xvdF9n ZXRzb21lYXR0cnNfaW50KCkKaW50YWN0IGFzIHRoaXMgaXMgc3RpbGwgY2FsbGVkIGZyb20gdGhl IEpJVCBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyB8IDU4ICsr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRh YmxlLmggICB8IDEzICsrKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwg MzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5 ZTUzLi43ZWZmZTk1NDI4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtNzMsNyAr NzMsNyBAQAogc3RhdGljIFR1cGxlRGVzYyBFeGVjVHlwZUZyb21UTEludGVybmFsKExpc3QgKnRh cmdldExpc3QsCiAJCQkJCQkJCQkJYm9vbCBza2lwanVuayk7CiBzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgdm9pZCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90 ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKLQkJCQkJCQkJCQkJCQkJCSAg aW50IG5hdHRzKTsKKwkJCQkJCQkJCQkJCQkJCSAgaW50IHJlcW5hdHRzKTsKIHN0YXRpYyBpbmxp bmUgdm9pZCB0dHNfYnVmZmVyX2hlYXBfc3RvcmVfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CiAJCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJCQkJICAgQnVmZmVyIGJ1 ZmZlciwKQEAgLTExMDgsNyArMTEwOCwxMCBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVy bmFsKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsCiAgKiBzbG90X2RlZm9y bV9oZWFwX3R1cGxlCiAgKgkJR2l2ZW4gYSBUdXBsZVRhYmxlU2xvdCwgZXh0cmFjdCBkYXRhIGZy b20gdGhlIHNsb3QncyBwaHlzaWNhbCB0dXBsZQogICoJCWludG8gaXRzIERhdHVtL2lzbnVsbCBh cnJheXMuICBEYXRhIGlzIGV4dHJhY3RlZCB1cCB0aHJvdWdoIHRoZQotICoJCW5hdHRzJ3RoIGNv bHVtbiAoY2FsbGVyIG11c3QgZW5zdXJlIHRoaXMgaXMgYSBsZWdhbCBjb2x1bW4gbnVtYmVyKS4K KyAqCQlyZXFuYXR0cyd0aCBjb2x1bW4uICBJZiB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IGF0dHJp YnV0ZXMgaW4gdGhlIGdpdmVuCisgKgkJdHVwbGUsIHRoZW4gc2xvdF9nZXRtaXNzaW5nYXR0cnMo KSBpcyBjYWxsZWQgdG8gcG9wdWxhdGUgdGhlCisgKgkJcmVtYWluZGVyLiAgSWYgcmVxbmF0dHMg aXMgYWJvdmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIHRoZQorICoJCXNsb3QncyBUdXBs ZURlc2MsIGFuIGVycm9yIGlzIHJhaXNlZC4KICAqCiAgKgkJVGhpcyBpcyBlc3NlbnRpYWxseSBh biBpbmNyZW1lbnRhbCB2ZXJzaW9uIG9mIGhlYXBfZGVmb3JtX3R1cGxlOgogICoJCW9uIGVhY2gg Y2FsbCB3ZSBleHRyYWN0IGF0dHJpYnV0ZXMgdXAgdG8gdGhlIG9uZSBuZWVkZWQsIHdpdGhvdXQK QEAgLTExMjAsMjEgKzExMjMsMjMgQEAgc2xvdF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbChU dXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLAogICovCiBzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAogc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRh YmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCi0JCQkJCSAgIGlu dCBuYXR0cykKKwkJCQkJICAgaW50IHJlcW5hdHRzKQogewogCWJvb2wJCWhhc251bGxzID0gSGVh cFR1cGxlSGFzTnVsbHModHVwbGUpOwogCWludAkJCWF0dG51bTsKKwlpbnQJCQluYXR0czsKIAl1 aW50MzIJCW9mZjsJCQkvKiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwogCWJvb2wJCXNsb3c7CQkJ LyogY2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVvZmY/ICovCiAKIAkvKiBXZSBjYW4gb25seSBmZXRj aCBhcyBtYW55IGF0dHJpYnV0ZXMgYXMgdGhlIHR1cGxlIGhhcy4gKi8KLQluYXR0cyA9IE1pbihI ZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXBsZS0+dF9kYXRhKSwgbmF0dHMpOworCW5hdHRzID0g TWluKEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpLCByZXFuYXR0cyk7CiAK IAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhlIGZpcnN0IGNhbGwgZm9yIHRoaXMgdHVwbGUsIGFu ZCBpbml0aWFsaXplIG9yIHJlc3RvcmUKIAkgKiBsb29wIHN0YXRlLgogCSAqLwogCWF0dG51bSA9 IHNsb3QtPnR0c19udmFsaWQ7CisJc2xvdC0+dHRzX252YWxpZCA9IHJlcW5hdHRzOwogCWlmIChh dHRudW0gPT0gMCkKIAl7CiAJCS8qIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwpA QCAtMTE5OSwxMiArMTIwNCwxNSBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVT bG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkvKgogCSAqIFNhdmUg c3RhdGUgZm9yIG5leHQgZXhlY3V0aW9uCiAJICovCi0Jc2xvdC0+dHRzX252YWxpZCA9IGF0dG51 bTsKIAkqb2ZmcCA9IG9mZjsKIAlpZiAoc2xvdykKIAkJc2xvdC0+dHRzX2ZsYWdzIHw9IFRUU19G TEFHX1NMT1c7CiAJZWxzZQogCQlzbG90LT50dHNfZmxhZ3MgJj0gflRUU19GTEFHX1NMT1c7CisK KwkvKiBGZXRjaCBhbnkgbWlzc2luZyBhdHRycyBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgcmVxbmF0 dHMgaXMgaW52YWxpZC4gKi8KKwlpZiAodW5saWtlbHkoYXR0bnVtIDwgcmVxbmF0dHMpKQorCQlz bG90X2dldG1pc3NpbmdhdHRycyhzbG90LCBhdHRudW0sIHJlcW5hdHRzKTsKIH0KIAogY29uc3Qg VHVwbGVUYWJsZVNsb3RPcHMgVFRTT3BzVmlydHVhbCA9IHsKQEAgLTIwNTgsMzQgKzIwNjYsMzYg QEAgc2xvdF9nZXRtaXNzaW5nYXR0cnMoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBzdGFydEF0 dE51bSwgaW50IGxhc3RBdHROdW0pCiB7CiAJQXR0ck1pc3NpbmcgKmF0dHJtaXNzID0gTlVMTDsK IAorCS8qIENoZWNrIGZvciBpbnZhbGlkIGF0dG51bXMgKi8KKwlpZiAodW5saWtlbHkobGFzdEF0 dE51bSA+IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzKSkKKwkJZWxvZyhFUlJPUiwg ImludmFsaWQgYXR0cmlidXRlIG51bWJlciAlZCIsIGxhc3RBdHROdW0pOworCiAJaWYgKHNsb3Qt PnR0c190dXBsZURlc2NyaXB0b3ItPmNvbnN0cikKIAkJYXR0cm1pc3MgPSBzbG90LT50dHNfdHVw bGVEZXNjcmlwdG9yLT5jb25zdHItPm1pc3Npbmc7CiAKIAlpZiAoIWF0dHJtaXNzKQogCXsKIAkJ Lyogbm8gbWlzc2luZyB2YWx1ZXMgYXJyYXkgYXQgYWxsLCBzbyBqdXN0IGZpbGwgZXZlcnl0aGlu ZyBpbiBhcyBOVUxMICovCi0JCW1lbXNldChzbG90LT50dHNfdmFsdWVzICsgc3RhcnRBdHROdW0s IDAsCi0JCQkgICAobGFzdEF0dE51bSAtIHN0YXJ0QXR0TnVtKSAqIHNpemVvZihEYXR1bSkpOwot CQltZW1zZXQoc2xvdC0+dHRzX2lzbnVsbCArIHN0YXJ0QXR0TnVtLCAxLAotCQkJICAgKGxhc3RB dHROdW0gLSBzdGFydEF0dE51bSkgKiBzaXplb2YoYm9vbCkpOworCQlmb3IgKGludCBhdHRudW0g PSBzdGFydEF0dE51bTsgYXR0bnVtIDwgbGFzdEF0dE51bTsgYXR0bnVtKyspCisJCXsKKwkJCXNs b3QtPnR0c192YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKKwkJCXNsb3QtPnR0c19pc251bGxb YXR0bnVtXSA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKLQkJaW50CQkJbWlzc2F0dG51bTsK LQotCQkvKiBpZiB0aGVyZSBpcyBhIG1pc3NpbmcgdmFsdWVzIGFycmF5IHdlIG11c3QgcHJvY2Vz cyB0aGVtIG9uZSBieSBvbmUgKi8KLQkJZm9yIChtaXNzYXR0bnVtID0gc3RhcnRBdHROdW07Ci0J CQkgbWlzc2F0dG51bSA8IGxhc3RBdHROdW07Ci0JCQkgbWlzc2F0dG51bSsrKQorCQkvKiB1c2Ug YXR0cm1pc3MgdG8gc2V0IHRoZSBtaXNzaW5nIHZhbHVlcyAqLworCQlmb3IgKGludCBhdHRudW0g PSBzdGFydEF0dE51bTsgYXR0bnVtIDwgbGFzdEF0dE51bTsgYXR0bnVtKyspCiAJCXsKLQkJCXNs b3QtPnR0c192YWx1ZXNbbWlzc2F0dG51bV0gPSBhdHRybWlzc1ttaXNzYXR0bnVtXS5hbV92YWx1 ZTsKLQkJCXNsb3QtPnR0c19pc251bGxbbWlzc2F0dG51bV0gPSAhYXR0cm1pc3NbbWlzc2F0dG51 bV0uYW1fcHJlc2VudDsKKwkJCXNsb3QtPnR0c192YWx1ZXNbYXR0bnVtXSA9IGF0dHJtaXNzW2F0 dG51bV0uYW1fdmFsdWU7CisJCQlzbG90LT50dHNfaXNudWxsW2F0dG51bV0gPSAhYXR0cm1pc3Nb YXR0bnVtXS5hbV9wcmVzZW50OwogCQl9CiAJfQogfQogCiAvKgotICogc2xvdF9nZXRzb21lYXR0 cnNfaW50IC0gd29ya2hvcnNlIGZvciBzbG90X2dldHNvbWVhdHRycygpCisgKiBzbG90X2dldHNv bWVhdHRyc19pbnQKKyAqCQlleHRlcm5hbCBmdW5jdGlvbiB0byBjYWxsIGdldHNvbWVhdHRycygp IGZvciB1c2UgaW4gSklUCiAgKi8KIHZvaWQKIHNsb3RfZ2V0c29tZWF0dHJzX2ludChUdXBsZVRh YmxlU2xvdCAqc2xvdCwgaW50IGF0dG51bSkKQEAgLTIwOTQsMjEgKzIxMDQsMTMgQEAgc2xvdF9n ZXRzb21lYXR0cnNfaW50KFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0bnVtKQogCUFzc2Vy dChzbG90LT50dHNfbnZhbGlkIDwgYXR0bnVtKTsJLyogY2hlY2tlZCBpbiBzbG90X2dldHNvbWVh dHRycyAqLwogCUFzc2VydChhdHRudW0gPiAwKTsKIAotCWlmICh1bmxpa2VseShhdHRudW0gPiBz bG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cykpCi0JCWVsb2coRVJST1IsICJpbnZhbGlk IGF0dHJpYnV0ZSBudW1iZXIgJWQiLCBhdHRudW0pOwotCiAJLyogRmV0Y2ggYXMgbWFueSBhdHRy aWJ1dGVzIGFzIHBvc3NpYmxlIGZyb20gdGhlIHVuZGVybHlpbmcgdHVwbGUuICovCiAJc2xvdC0+ dHRzX29wcy0+Z2V0c29tZWF0dHJzKHNsb3QsIGF0dG51bSk7CiAKIAkvKgotCSAqIElmIHRoZSB1 bmRlcmx5aW5nIHR1cGxlIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggYXR0cmlidXRlcywgdHVwbGUKLQkg KiBkZXNjcmlwdG9yIG11c3QgaGF2ZSB0aGUgbWlzc2luZyBhdHRyaWJ1dGVzLgorCSAqIEF2b2lk IHB1dHRpbmcgbmV3IGNvZGUgaGVyZSBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIGNvbXBpbGVy IGZyb20KKwkgKiB1c2luZyB0aGUgc2libGluZyBjYWxsIG9wdGltaXphdGlvbiBmb3IgdGhlIGFi b3ZlIGZ1bmN0aW9uLgogCSAqLwotCWlmICh1bmxpa2VseShzbG90LT50dHNfbnZhbGlkIDwgYXR0 bnVtKSkKLQl7Ci0JCXNsb3RfZ2V0bWlzc2luZ2F0dHJzKHNsb3QsIHNsb3QtPnR0c19udmFsaWQs IGF0dG51bSk7Ci0JCXNsb3QtPnR0c19udmFsaWQgPSBhdHRudW07Ci0JfQogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAppbmRleCBhMmRmZDcwN2U3OC4uM2IwOWFiYmY5OWYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMTUxLDEwICsxNTEsMTIgQEAgc3RydWN0IFR1 cGxlVGFibGVTbG90T3BzCiAKIAkvKgogCSAqIEZpbGwgdXAgZmlyc3QgbmF0dHMgZW50cmllcyBv ZiB0dHNfdmFsdWVzIGFuZCB0dHNfaXNudWxsIGFycmF5cyB3aXRoCi0JICogdmFsdWVzIGZyb20g dGhlIHR1cGxlIGNvbnRhaW5lZCBpbiB0aGUgc2xvdC4gVGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxs ZWQKLQkgKiB3aXRoIG5hdHRzIG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYXZh aWxhYmxlIGluIHRoZSB0dXBsZSwKLQkgKiBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBzZXQgdHRz X252YWxpZCB0byB0aGUgbnVtYmVyIG9mIHJldHVybmVkCi0JICogY29sdW1ucy4KKwkgKiB2YWx1 ZXMgZnJvbSB0aGUgdHVwbGUgY29udGFpbmVkIGluIHRoZSBzbG90IGFuZCBzZXQgdGhlIHNsb3Qn cworCSAqIHR0c19udmFsaWQgdG8gbmF0dHMuIFRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHdp dGggYW4gbmF0dHMgdmFsdWUKKwkgKiBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVz IGF2YWlsYWJsZSBpbiB0aGUgdHVwbGUsIGluIHdoaWNoCisJICogY2FzZSB0aGUgZnVuY3Rpb24g bXVzdCBjYWxsIHNsb3RfZ2V0bWlzc2luZ2F0dHJzKCkgdG8gcG9wdWxhdGUgdGhlCisJICogcmVt YWluaW5nIGF0dHJpYnV0ZXMuICBUaGUgZnVuY3Rpb24gbXVzdCByYWlzZSBhbiBFUlJPUiBpZiAn bmF0dHMnIGlzCisJICogaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIHRo ZSBzbG90J3MgVHVwbGVEZXNjLgogCSAqLwogCXZvaWQJCSgqZ2V0c29tZWF0dHJzKSAoVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGludCBuYXR0cyk7CiAKQEAgLTM1Nyw4ICszNTksOSBAQCBleHRlcm4g dm9pZCBzbG90X2dldHNvbWVhdHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRu dW0pOwogc3RhdGljIGlubGluZSB2b2lkCiBzbG90X2dldHNvbWVhdHRycyhUdXBsZVRhYmxlU2xv dCAqc2xvdCwgaW50IGF0dG51bSkKIHsKKwkvKiBQb3B1bGF0ZSBzbG90IHdpdGggYXR0cmlidXRl cyB1cCB0byAnYXR0bnVtJywgaWYgaXQncyBub3QgYWxyZWFkeSAqLwogCWlmIChzbG90LT50dHNf bnZhbGlkIDwgYXR0bnVtKQotCQlzbG90X2dldHNvbWVhdHRyc19pbnQoc2xvdCwgYXR0bnVtKTsK KwkJc2xvdC0+dHRzX29wcy0+Z2V0c29tZWF0dHJzKHNsb3QsIGF0dG51bSk7CiB9CiAKIC8qCi0t IAoyLjUxLjAKCg== --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0003-Add-empty-TupleDescFinalize-function.patch" Content-Disposition: attachment; filename="v12-0003-Add-empty-TupleDescFinalize-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3m3i2 RnJvbSAwMGJjM2VjZWZjMjBkYWVmMTI1Yzc2NmZhOWNhMWQ1ZTVhZjRkMjUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxNTo0MTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDMv Nl0gQWRkIGVtcHR5IFR1cGxlRGVzY0ZpbmFsaXplKCkgZnVuY3Rpb24KCkN1cnJlbnRseSBkb2Vz IG5vdGhpbmcsIGJ1dCB3aWxsIGluIGEgZnV0dXJlIGNvbW1pdC4KLS0tCiBjb250cmliL2RibGlu ay9kYmxpbmsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKysrCiBjb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgICAgICAgfCAgMiArKwogY29u dHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyAgICAgICAgICAgICAgIHwgIDIgKysK IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyAgICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jICAgICAgICAgICAgICAgICB8 IDEzICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMg ICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dmdW5jcy5jICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNl YmFja3VwX2NvcHkuYyAgICAgICAgICAgICAgICB8ICAzICsrKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgICAg IHwgIDQgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jICAgICAgICAgICAg ICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAg ICAgICAgICAgICAgICB8ICA0ICsrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlv bnNjYW4uYyAgICAgICAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVs YXRpb24uYyAgICAgICAgICAgICAgICAgfCAgNCArKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMgICAgICAgICAgICAgICAgICAgfCAgMiArKwogLi4uL3JlcGxpY2F0aW9uL2xp YnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIHwgIDEgKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgICAgICAgICAgIHwgIDUgKysrKysKIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hY2wuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgICAgICAgICB8ICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jICAgICAgICAgICAgICB8ICAx ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jICAgICAgICAgICAgICAgICB8 ICA1ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYyAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAg ICAgICAgICAgfCAgOCArKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMg ICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19mdW5jcy5jICAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogc3JjL2luY2x1ZGUvYWNjZXNz L3R1cGRlc2MuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL3BsL3BscGdzcWwv c3JjL3BsX2NvbXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIC4uLi90ZXN0X2N1 c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jICAgICB8ICAxICsKIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMgICAgICB8ICAxICsKIDM5IGZp bGVzIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMgYi9jb250cmliL2RibGluay9kYmxpbmsuYwppbmRl eCAyNDk4ZDgwYzhlNy4uNDAzODk1MGE2ZWYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZGJsaW5rL2Ri bGluay5jCisrKyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC04ODEsNiArODgxLDcgQEAg bWF0ZXJpYWxpemVSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBHY29ubiAqY29ubiwg UEdyZXN1bHQgKnJlcykKIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAog CQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJbnR1cGxlcyA9IDE7CiAJCW5maWVsZHMgPSAxOwogCX0KQEAgLTEwNDQsNiArMTA0NSw3IEBA IG1hdGVyaWFsaXplUXVlcnlSZXN1bHQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQl0dXBk ZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJzdGF0dXMiLAogCQkJCQkJCSAgIFRFWFRPSUQsIC0x LCAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJYXR0aW5tZXRhID0gVHVw bGVEZXNjR2V0QXR0SW5NZXRhZGF0YSh0dXBkZXNjKTsKIAogCQkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhyc2luZm8tPmVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnkp OwpAQCAtMTUyOSw2ICsxNTMxLDggQEAgZGJsaW5rX2dldF9wa2V5KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgImNvbG5hbWUi LAogCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOworCiAJCS8qCiAJCSAqIEdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0 ZXIgdG8gcHJvZHVjZSB0dXBsZXMgZnJvbSByYXcKIAkJICogQyBzdHJpbmdzCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggODliODY4NTUyNDMu LmE2YjRmYjUyNTJiIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jCkBAIC0xNzQsNiArMTc0LDcgQEAgcGdfYnVmZmVyY2FjaGVfcGFnZXMoUEdfRlVO Q1RJT05fQVJHUykKIAkJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSA5LCAicGlubmluZ19iYWNrZW5kcyIsCiAJCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZjdHgtPnR1cGRlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBsZWRlc2MpOwogCiAJCS8qIEFsbG9jYXRlIE5CdWZmZXJzIHdvcnRoIG9mIEJ1 ZmZlckNhY2hlUGFnZXNSZWMgcmVjb3Jkcy4gKi8KQEAgLTQ0Miw2ICs0NDMsNyBAQCBwZ19idWZm ZXJjYWNoZV9vc19wYWdlc19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBp bmNsdWRlX251bWEpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSAzLCAibnVtYV9ub2RlIiwKIAkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURl c2NGaW5hbGl6ZSh0dXBsZWRlc2MpOwogCQlmY3R4LT50dXBkZXNjID0gQmxlc3NUdXBsZURlc2Mo dHVwbGVkZXNjKTsKIAkJZmN0eC0+aW5jbHVkZV9udW1hID0gaW5jbHVkZV9udW1hOwogCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jIGIvY29udHJpYi9w Z192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwppbmRleCA5YmMzYTc4NGJmNy4uZGZhYjBiNjRj ZjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMKKysr IGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwpAQCAtNDY5LDYgKzQ2OSw4 IEBAIHBnX3Zpc2liaWxpdHlfdHVwZGVzYyhib29sIGluY2x1ZGVfYmxrbm8sIGJvb2wgaW5jbHVk ZV9wZCkKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsICsrYSwgInBkX2FsbF92aXNpYmxl IiwgQk9PTE9JRCwgLTEsIDApOwogCUFzc2VydChhID09IG1heGF0dHIpOwogCisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CisKIAlyZXR1cm4gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA2OWMyMzNjNjJlYi4uNzQy YWMwODlhMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTg0LDYgKzg0 LDcgQEAgYnJ0dXBsZV9kaXNrX3R1cGRlc2MoQnJpbkRlc2MgKmJyZGVzYykKIAogCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJYnJkZXNjLT5iZF9kaXNrdGRlc2MgPSB0dXBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3R1cGRlc2MuYwppbmRleCBiNjlkMTBmMGE0NS4uMjEzNzM4NWE4MzMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vdHVwZGVzYy5jCkBAIC0yMjEsNiArMjIxLDkgQEAgQ3JlYXRlVHVwbGVEZXNj KGludCBuYXR0cywgRm9ybV9wZ19hdHRyaWJ1dGUgKmF0dHJzKQogCQltZW1jcHkoVHVwbGVEZXNj QXR0cihkZXNjLCBpKSwgYXR0cnNbaV0sIEFUVFJJQlVURV9GSVhFRF9QQVJUX1NJWkUpOwogCQlw b3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShkZXNjLCBpKTsKIAl9CisKKwlUdXBsZURlc2NGaW5h bGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0yNjUsNiArMjY4LDggQEAgQ3Jl YXRlVHVwbGVEZXNjQ29weShUdXBsZURlc2MgdHVwZGVzYykKIAlkZXNjLT50ZHR5cGVpZCA9IHR1 cGRlc2MtPnRkdHlwZWlkOwogCWRlc2MtPnRkdHlwbW9kID0gdHVwZGVzYy0+dGR0eXBtb2Q7CiAK KwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC0zMTEs NiArMzE2LDggQEAgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURlc2MgdHVwZGVz YywgaW50IG5hdHRzKQogCWRlc2MtPnRkdHlwZWlkID0gdHVwZGVzYy0+dGR0eXBlaWQ7CiAJZGVz Yy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRl c2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTM5Niw2ICs0MDMsOCBAQCBDcmVhdGVUdXBs ZURlc2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKQogCWRlc2MtPnRkdHlwZWlkID0gdHVw ZGVzYy0+dGR0eXBlaWQ7CiAJZGVzYy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAor CVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQzOCw2 ICs0NDcsOCBAQCBUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAJ ICogc291cmNlJ3MgcmVmY291bnQgd291bGQgYmUgd3JvbmcgaW4gYW55IGNhc2UuKQogCSAqLwog CWRzdC0+dGRyZWZjb3VudCA9IC0xOworCisJVHVwbGVEZXNjRmluYWxpemUoZHN0KTsKIH0KIAog LyoKQEAgLTEwNjUsNiArMTA3Niw4IEBAIEJ1aWxkRGVzY0Zyb21MaXN0cyhjb25zdCBMaXN0ICpu YW1lcywgY29uc3QgTGlzdCAqdHlwZXMsIGNvbnN0IExpc3QgKnR5cG1vZHMsIGNvCiAJCVR1cGxl RGVzY0luaXRFbnRyeUNvbGxhdGlvbihkZXNjLCBhdHRudW0sIGF0dGNvbGxhdGlvbik7CiAJfQog CisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwppbmRleCBmZjkyNzI3OWNjMy4uZmU3Yjk4NGZmMzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludXRpbC5jCkBAIC0xMjksNiArMTI5LDcgQEAgaW5pdEdpblN0YXRlKEdpblN0 YXRlICpzdGF0ZSwgUmVsYXRpb24gaW5kZXgpCiAJCQkJCQkJICAgYXR0ci0+YXR0bmRpbXMpOwog CQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHN0YXRlLT50dXBkZXNjW2ldLCAoQXR0ck51 bWJlcikgMiwKIAkJCQkJCQkJCQlhdHRyLT5hdHRjb2xsYXRpb24pOworCQkJVHVwbGVEZXNjRmlu YWxpemUoc3RhdGUtPnR1cGRlc2NbaV0pOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0c2Nhbi5jCmluZGV4IGYyM2JjNGE2NzU3Li5jNjVmOTNhYmRhZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0c2Nhbi5jCkBAIC0yMDEsNiArMjAxLDcgQEAgZ2lzdHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCiAJCQkJCQkJCQkJCSBhdHRubyAtIDEp LT5hdHR0eXBpZCwKIAkJCQkJCQkgICAtMSwgMCk7CiAJCX0KKwkJVHVwbGVEZXNjRmluYWxpemUo c28tPmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjKTsKIAkJc2Nhbi0+eHNfaGl0dXBkZXNjID0gc28t Pmdpc3RzdGF0ZS0+ZmV0Y2hUdXBkZXNjOwogCiAJCS8qIEFsc28gY3JlYXRlIGEgbWVtb3J5IGNv bnRleHQgdGhhdCB3aWxsIGhvbGQgdGhlIHJldHVybmVkIHR1cGxlcyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3OWI4N2FjLi5iMjQ2ZTgxMjdkYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtMzQwLDYgKzM0MCw3IEBAIGdldFNwR2lz dFR1cGxlRGVzYyhSZWxhdGlvbiBpbmRleCwgU3BHaXN0VHlwZURlc2MgKmtleVR5cGUpCiAJCQlU dXBsZURlc2NDb21wYWN0QXR0cihvdXRUdXBEZXNjLCBpKS0+YXR0Y2FjaGVvZmYgPSAtMTsKIAog CQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShvdXRUdXBEZXNjLCBzcGdLZXlDb2x1bW4pOwor CQlUdXBsZURlc2NGaW5hbGl6ZShvdXRUdXBEZXNjKTsKIAl9CiAJcmV0dXJuIG91dFR1cERlc2M7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCA1ZjY1ZmE3YjgwZi4u MDI4MWI1OGY0MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtNzQ0 LDYgKzc0NCw3IEBAIHBnX3ByZXBhcmVkX3hhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVE ZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZGJpZCIsCiAJCQkJCQkgICBP SURPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCmluZGV4IDc4NTQzMDU1ODk1Li5iZTRjYzI0ZjFk YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKQEAgLTQyNyw2ICs0Mjcs NyBAQCBwZ193YWxmaWxlX25hbWVfb2Zmc2V0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNj SW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDIsICJmaWxlX29mZnNldCIs CiAJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1 cGxlRGVzYyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVE ZXNjKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9j b3B5LmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKaW5kZXggMDdmNThi MzlkOGMuLjZjMzQ1M2VmZDgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cF9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfY29weS5jCkBA IC0zNTcsNiArMzU3LDggQEAgU2VuZFhsb2dSZWNQdHJSZXN1bHQoWExvZ1JlY1B0ciBwdHIsIFRp bWVMaW5lSUQgdGxpKQogCSAqLwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDIsICJ0bGkiLCBJTlQ4T0lELCAtMSwgMCk7CiAKKwlUdXBsZURlc2NGaW5h bGl6ZSh0dXBkZXNjKTsKKwogCS8qIHNlbmQgUm93RGVzY3JpcHRpb24gKi8KIAl0c3RhdGUgPSBi ZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwog CkBAIC0zODgsNiArMzkwLDcgQEAgU2VuZFRhYmxlc3BhY2VMaXN0KExpc3QgKnRhYmxlc3BhY2Vz KQogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJz cGNvaWQiLCBPSURPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAyLCAic3BjbG9jYXRpb24iLCBURVhUT0lELCAtMSwgMCk7CiAJVHVw bGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInNpemUiLCBJ TlQ4T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBzZW5k IFJvd0Rlc2NyaXB0aW9uICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRl c3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA0M2RlNDJj ZTM5ZS4uNzVlOTdmYjM5NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXgu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTQ4MSw2ICs0ODEsOCBAQCBD b25zdHJ1Y3RUdXBsZURlc2NyaXB0b3IoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlwb3B1bGF0 ZV9jb21wYWN0X2F0dHJpYnV0ZShpbmRleFR1cERlc2MsIGkpOwogCX0KIAorCVR1cGxlRGVzY0Zp bmFsaXplKGluZGV4VHVwRGVzYyk7CisKIAlyZXR1cm4gaW5kZXhUdXBEZXNjOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggYWFkYzdjMjAyYzYuLmE3OTE1N2M0M2Jm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMzIyLDYgKzEzMjIsNyBA QCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgInF1YWwiLAogCQkJCQkJICAgUEdf Tk9ERV9UUkVFT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJ CWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dXNlcl9mY3R4ID0gdGFibGVfaW5mb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCBj NzhkY2VhOThjMS4uMDc4YTFjZjUxMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv dG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKQEAgLTIyOSw2 ICsyMjksMTIgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9uIHJlbCwgT2lkIHRvYXN0T2lk LCBPaWQgdG9hc3RJbmRleE9pZCwKIAlUdXBsZURlc2NBdHRyKHR1cGRlc2MsIDEpLT5hdHRjb21w cmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAlUdXBsZURlc2NBdHRyKHR1cGRl c2MsIDIpLT5hdHRjb21wcmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAorCXBv cHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRlc2MsIDApOworCXBvcHVsYXRlX2NvbXBhY3Rf YXR0cmlidXRlKHR1cGRlc2MsIDEpOworCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHR1cGRl c2MsIDIpOworCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CisKIAkvKgogCSAqIFRvYXN0 IHRhYmxlcyBmb3IgcmVndWxhciByZWxhdGlvbnMgZ28gaW4gcGdfdG9hc3Q7IHRob3NlIGZvciB0 ZW1wCiAJICogcmVsYXRpb25zIGdvIGludG8gdGhlIHBlci1iYWNrZW5kIHRlbXAtdG9hc3QtdGFi bGUgbmFtZXNwYWNlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDkzOTE4YTIyM2I4Li41Zjky MmMzZjVjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMjgxLDYgKzI4MSw3IEBAIEV4cGxh aW5SZXN1bHREZXNjKEV4cGxhaW5TdG10ICpzdG10KQogCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0 ZVR1cGxlRGVzYygxKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIp IDEsICJRVUVSWSBQTEFOIiwKIAkJCQkJICAgcmVzdWx0X3R5cGUsIC0xLCAwKTsKKwlUdXBsZURl c2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9mdW5jdGlvbmNtZHMuYwppbmRleCAyNDIzNzJiMWU2OC4uM2FmZDc2MmU5ZGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCkBAIC0yNDI0LDYgKzI0MjQsNyBAQCBDYWxsU3RtdFJl c3VsdERlc2MoQ2FsbFN0bXQgKnN0bXQpCiAJCQkJCQkJICAgLTEsCiAJCQkJCQkJICAgMCk7CiAJ CX0KKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCiAJcmV0dXJuIHR1cGRlc2M7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBlMWI4MDhiYmI2MC4uNTUxNjY3NjUwYmEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTgwOCw2ICsxODA4LDcgQEAgcGdfZ2V0X3NlcXVl bmNlX2RhdGEoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgQk9PTE9JRCwgLTEsIDApOwogCVR1 cGxlRGVzY0luaXRFbnRyeShyZXN1bHRUdXBsZURlc2MsIChBdHRyTnVtYmVyKSAzLCAicGFnZV9s c24iLAogCQkJCQkgICBMU05PSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZShyZXN1bHRU dXBsZURlc2MpOwogCXJlc3VsdFR1cGxlRGVzYyA9IEJsZXNzVHVwbGVEZXNjKHJlc3VsdFR1cGxl RGVzYyk7CiAKIAlzZXFyZWwgPSB0cnlfcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggODUyNDJkY2MyNDUuLjgwOTIyOTc0 OTcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTAzMCw2ICsxMDMwLDggQEAgRGVm aW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBPaWQgb3duZXJJZCwK IAkJfQogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2NyaXB0b3IpOworCiAJLyoKIAkgKiBG b3IgcmVsYXRpb25zIHdpdGggdGFibGUgQU0gYW5kIHBhcnRpdGlvbmVkIHRhYmxlcywgc2VsZWN0 IGFjY2VzcwogCSAqIG1ldGhvZCB0byB1c2U6IGFuIGV4cGxpY2l0bHkgaW5kaWNhdGVkIG9uZSwg b3IgKGluIHRoZSBjYXNlIG9mIGEKQEAgLTE0NTgsNiArMTQ2MCw4IEBAIEJ1aWxkRGVzY0ZvclJl bGF0aW9uKGNvbnN0IExpc3QgKmNvbHVtbnMpCiAJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRl KGRlc2MsIGF0dG51bSAtIDEpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJ cmV0dXJuIGRlc2M7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwppbmRleCAxMjkwZGYxMGM2Zi4uOGU5MjBh NzIzNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTMzOCw1ICszMzgsNiBAQCBXYWl0U3RtdFJlc3Vs dERlc2MoV2FpdFN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNj KDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1 cyIsCiAJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNj KTsKIAlyZXR1cm4gdHVwZGVzYzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNTUkYuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwppbmRleCBhMGIxMTFk YzBlNC4uYjQ4MWU1MGFjZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNT UkYuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU1JGLmMKQEAgLTI3Miw2ICsyNzIs NyBAQCBFeGVjTWFrZVRhYmxlRnVuY3Rpb25SZXN1bHQoU2V0RXhwclN0YXRlICpzZXRleHByLAog CQkJCQkJCQkJICAgZnVuY3JldHR5cGUsCiAJCQkJCQkJCQkgICAtMSwKIAkJCQkJCQkJCSAgIDAp OworCQkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCQkJcnNpbmZvLnNldERlc2Mg PSB0dXBkZXNjOwogCQkJCX0KIAkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CkBAIC03NzYsNiArNzc3LDcgQEAgaW5pdF9zZXhwcihPaWQgZm9pZCwgT2lkIGlucHV0X2NvbGxh dGlvbiwgRXhwciAqbm9kZSwKIAkJCQkJCQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkgICAtMSwK IAkJCQkJCQkgICAwKTsKKwkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJc2V4cHIt PmZ1bmNSZXN1bHREZXNjID0gdHVwZGVzYzsKIAkJCXNleHByLT5mdW5jUmV0dXJuc1R1cGxlID0g ZmFsc2U7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRleCA3ZWZmZTk1NDI4Ni4u MDdiMjQ4YWE1ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTIxNzUsNiArMjE3 NSw4IEBAIEV4ZWNUeXBlRnJvbVRMSW50ZXJuYWwoTGlzdCAqdGFyZ2V0TGlzdCwgYm9vbCBza2lw anVuaykKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUodHlwZUluZm8p OworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCkBAIC0yMjA5LDYgKzIyMTEsOCBAQCBFeGVjVHlw ZUZyb21FeHByTGlzdChMaXN0ICpleHByTGlzdCkKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVw bGVEZXNjRmluYWxpemUodHlwZUluZm8pOworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKaW5kZXggNjNlNjA1ZTFmODEuLmZlYjgy ZDY0OTY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9uc2Nhbi5jCkBAIC00MTQs NiArNDE0LDcgQEAgRXhlY0luaXRGdW5jdGlvblNjYW4oRnVuY3Rpb25TY2FuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24o dHVwZGVzYywKIAkJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJCWV4cHJDb2xs YXRpb24oZnVuY2V4cHIpKTsKKwkJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKQEAgLTQ4NSw2ICs0ODYsNyBAQCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihG dW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJCSAg IDApOwogCQl9CiAKKwkJVHVwbGVEZXNjRmluYWxpemUoc2Nhbl90dXBkZXNjKTsKIAkJQXNzZXJ0 KGF0dG5vID09IG5hdHRzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKaW5k ZXggZTAwM2RiNTIwZGUuLjljNDE1ZTE2NmVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwpAQCAtMTg4Myw2ICsxODgzLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHR1cGRl c2MsCiAJCQkJCQkJCQkJKEF0dHJOdW1iZXIpIDEsCiAJCQkJCQkJCQkJZXhwckNvbGxhdGlvbihm dW5jZXhwcikpOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCX0KIAkJZWxzZSBp ZiAoZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkKIAkJewpAQCAtMTk0MCw2ICsxOTQx LDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVuY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAog CiAJCQkJaSsrOwogCQkJfQorCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkJCS8q CiAJCQkgKiBFbnN1cmUgdGhhdCB0aGUgY29sZGVmbGlzdCBkZWZpbmVzIGEgbGVnYWwgc2V0IG9m IG5hbWVzIChubwpAQCAtMjAwOCw3ICsyMDEwLDcgQEAgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yRnVu Y3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCSAgIDApOwogCQkJLyogbm8gbmVlZCB0 byBzZXQgY29sbGF0aW9uICovCiAJCX0KLQorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsK IAkJQXNzZXJ0KG5hdHRzID09IHRvdGFsYXR0cyk7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYwppbmRleCAzYmNmYzFmNWUzZC4uZjU3YzRkNDEwODAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdGFyZ2V0LmMKQEAgLTE1NzIsNiArMTU3Miw4IEBAIGV4cGFuZFJlY29yZFZhcmlhYmxl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVmFyICp2YXIsIGludCBsZXZlbHN1cCkKIAkJfQogCQlBc3Nl cnQobG5hbWUgPT0gTlVMTCAmJiBsdmFyID09IE5VTEwpOwkvKiBsaXN0cyBzYW1lIGxlbmd0aD8g Ki8KIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBsZURlc2MpOworCiAJCXJldHVybiB0dXBsZURl c2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJl Y2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBx d2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdjODYzOWIzMmU5Li45ZjA0Yzll ZDI1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTEwNzMsNiArMTA3Myw3IEBAIGxpYnBx cmN2X3Byb2Nlc3NUdXBsZXMoUEdyZXN1bHQgKnBncmVzLCBXYWxSY3ZFeGVjUmVzdWx0ICp3YWxy ZXMsCiAJZm9yIChjb2xuID0gMDsgY29sbiA8IG5SZXRUeXBlczsgY29sbisrKQogCQlUdXBsZURl c2NJbml0RW50cnkod2FscmVzLT50dXBsZWRlc2MsIChBdHRyTnVtYmVyKSBjb2xuICsgMSwKIAkJ CQkJCSAgIFBRZm5hbWUocGdyZXMsIGNvbG4pLCByZXRUeXBlc1tjb2xuXSwgLTEsIDApOworCVR1 cGxlRGVzY0ZpbmFsaXplKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAlhdHRpbm1ldGEgPSBUdXBsZURl c2NHZXRBdHRJbk1ldGFkYXRhKHdhbHJlcy0+dHVwbGVkZXNjKTsKIAogCS8qIE5vIHBvaW50IGlu IGRvaW5nIG1vcmUgaGVyZSBpZiB0aGVyZSB3ZXJlIG5vIHR1cGxlcyByZXR1cm5lZC4gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMmNkZThlYmM3MjkuLjMzYTllOGQ3ZjIx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpAQCAtNDUxLDYgKzQ1MSw3IEBAIElk ZW50aWZ5U3lzdGVtKHZvaWQpCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgImRibmFtZSIsCiAJCQkJ CQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkv KiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1 cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CkBAIC00OTYs NiArNDk3LDcgQEAgUmVhZFJlcGxpY2F0aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpj bWQpCiAJLyogVGltZUxpbmVJRCBpcyB1bnNpZ25lZCwgc28gaW50NCBpcyBub3Qgd2lkZSBlbm91 Z2guICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg MywgInJlc3RhcnRfdGxpIiwKIAkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAogCW1lbXNldChudWxscywgdHJ1ZSwgUkVBRF9SRVBMSUNBVElP Tl9TTE9UX0NPTFMgKiBzaXplb2YoYm9vbCkpOwogCkBAIC01OTgsNiArNjAwLDcgQEAgU2VuZFRp bWVMaW5lSGlzdG9yeShUaW1lTGluZUhpc3RvcnlDbWQgKmNtZCkKIAl0dXBkZXNjID0gQ3JlYXRl VGVtcGxhdGVUdXBsZURlc2MoMik7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgMSwgImZpbGVuYW1lIiwgVEVYVE9JRCwgLTEsIDApOwogCVR1cGxlRGVz Y0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJjb250ZW50IiwgVEVY VE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJVExIaXN0b3J5 RmlsZU5hbWUoaGlzdGZuYW1lLCBjbWQtPnRpbWVsaW5lKTsKIAlUTEhpc3RvcnlGaWxlUGF0aChw YXRoLCBjbWQtPnRpbWVsaW5lKTsKQEAgLTEwMTUsNiArMTAxOCw3IEBAIFN0YXJ0UmVwbGljYXRp b24oU3RhcnRSZXBsaWNhdGlvbkNtZCAqY21kKQogCQkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsK IAkJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm5l eHRfdGxpX3N0YXJ0cG9zIiwKIAkJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVw bGUgKi8KIAkJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2Ms ICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTEzNjksNiArMTM3Myw3IEBAIENyZWF0ZVJlcGxpY2F0aW9u U2xvdChDcmVhdGVSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0 LCAib3V0cHV0X3BsdWdpbiIsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxl cyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAm VFRTT3BzVmlydHVhbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKaW5kZXggMDcxZTNmMmM0OWUuLmUyMTBkNjQ3 MmJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FjbC5jCkBAIC0xODMxLDYgKzE4MzEsNyBAQCBhY2xleHBsb2RlKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJl cikgNCwgImlzX2dyYW50YWJsZSIsCiAJCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAKKwkJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBkZXNjKTsKIAogCQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgY29udGV4 dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKaW5kZXggYzA4MzYwOGIxZDUuLmJmYjk0OTQwMWQw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKQEAgLTQ1NCw2ICs0NTQsNyBAQCBwZ19zdGF0X2Zp bGUoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgImNyZWF0aW9uIiwgVElNRVNUQU1QVFpPSUQs IC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDYsCiAJ CQkJCSAgICJpc2RpciIsIEJPT0xPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBk ZXNjKTsKIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAogCW1lbXNldChpc251bGwsIGZhbHNl LCBzaXplb2YoaXNudWxsKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggOWRhZGQ2 ZGE2NzIuLjQ0ODFjMzU0ZmQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9j a2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCkBAIC0xNDYs NiArMTQ2LDcgQEAgcGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxNiwgIndhaXRzdGFydCIsCiAJCQkJCQkg ICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMKaW5kZXggM2I2ZGE4ZTM2YWMu LmZkOGI4Njc2NDcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNl dGFnZ3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwpAQCAt MjMzLDYgKzIzMyw3IEBAIG9yZGVyZWRfc2V0X3N0YXJ0dXAoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgdXNlX3R1cGxlcykKIAkJCQkJCQkJICAgLTEsCiAJCQkJCQkJCSAgIDApOwogCisJ CQkJVHVwbGVEZXNjRmluYWxpemUobmV3ZGVzYyk7CiAJCQkJRnJlZVR1cGxlRGVzYyhxc3RhdGUt PnR1cGRlc2MpOwogCQkJCXFzdGF0ZS0+dHVwZGVzYyA9IG5ld2Rlc2M7CiAJCQl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCmluZGV4IGIxZGY5NmU3YjBiLi4wYjEwZGEzYjE4MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTc2OSw2ICs3NjksNyBAQCBwZ19zdGF0 X2dldF9iYWNrZW5kX3N1YnhhY3QoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJbml0RW50 cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdWJ4YWN0X292ZXJmbG93IiwKIAkJCQkJICAg Qk9PTE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CiAKIAlpZiAoKGxvY2FsX2JlZW50cnkgPSBwZ3N0YXRfZ2V0X2xv Y2FsX2JlZW50cnlfYnlfcHJvY19udW1iZXIocHJvY051bWJlcikpICE9IE5VTEwpCkBAIC0xNjcw LDYgKzE2NzEsNyBAQCBwZ19zdGF0X3dhbF9idWlsZF90dXBsZShQZ1N0YXRfV2FsQ291bnRlcnMg d2FsX2NvdW50ZXJzLAogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg NiwgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAorCVR1 cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJ LyogRmlsbCB2YWx1ZXMgYW5kIE5VTExzICovCkBAIC0yMDk3LDYgKzIwOTksNyBAQCBwZ19zdGF0 X2dldF9hcmNoaXZlcihQR19GVU5DVElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgNywgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpP SUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOwogCiAJLyogR2V0IHN0YXRpc3RpY3MgYWJvdXQgdGhlIGFyY2hpdmVyIHBy b2Nlc3MgKi8KQEAgLTIxNzgsNiArMjE4MSw3IEBAIHBnX3N0YXRfZ2V0X3JlcGxpY2F0aW9uX3Ns b3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAlU dXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEzLCAic3RhdHNfcmVzZXQi LAogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1 cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJbmFtZXN0cmNweSgmc2xvdG5h bWUsIHRleHRfdG9fY3N0cmluZyhzbG90bmFtZV90ZXh0KSk7CkBAIC0yMjY1LDYgKzIyNjksNyBA QCBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJ ICAgSU5UOE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51 bWJlcikgMTMsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7 CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7 CiAKIAlpZiAoIXN1YmVudHJ5KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Rz dmVjdG9yX29wLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYwppbmRleCA3 MWM3YzdkM2IzYy4uZDhkZWNlNDJiOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC90c3ZlY3Rvcl9vcC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5j CkBAIC02NTEsNiArNjUxLDcgQEAgdHN2ZWN0b3JfdW5uZXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CQkJCQkgICBURVhUQVJSQVlPSUQsIC0xLCAwKTsKIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl KGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKIAkJCWVsb2co RVJST1IsICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKwkJVHVwbGVEZXNjRmlu YWxpemUodHVwZGVzYyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSB0dXBkZXNjOwogCiAJCWZ1 bmNjdHgtPnVzZXJfZmN0eCA9IFBHX0dFVEFSR19UU1ZFQ1RPUl9DT1BZKDApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggYTFjODhjNmIxYjYuLmQyN2FjMjE2ZTZkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTcyOSw2ICs3MjksOCBAQCBSZWxhdGlvbkJ1aWxk VHVwbGVEZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQlwZnJlZShjb25zdHIpOwogCQlyZWxhdGlv bi0+cmRfYXR0LT5jb25zdHIgPSBOVUxMOwogCX0KKworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0 aW9uLT5yZF9hdHQpOwogfQogCiAvKgpAQCAtMTk4NSw2ICsxOTg3LDcgQEAgZm9ybXJkZXNjKGNv bnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwKIAogCS8qIGluaXRp YWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVpbGRUdXBs ZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZWxhdGlvbi0+cmRfYXR0LCAwKS0+YXR0 Y2FjaGVvZmYgPSAwOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0aW9uLT5yZF9hdHQpOwogCiAJ LyogbWFyayBub3QtbnVsbCBzdGF0dXMgKi8KIAlpZiAoaGFzX25vdF9udWxsKQpAQCAtMzY4OCw2 ICszNjkxLDggQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAqcmVsbmFt ZSwKIAlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKIAkJVHVwbGVEZXNjQXR0cihyZWwtPnJk X2F0dCwgaSktPmF0dHJlbGlkID0gcmVsaWQ7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZShyZWwtPnJk X2F0dCk7CisKIAlyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSA9IHJlbHRhYmxlc3BhY2U7CiAK IAlpZiAobWFwcGVkX3JlbGF0aW9uKQpAQCAtNDQ0Myw2ICs0NDQ4LDcgQEAgQnVpbGRIYXJkY29k ZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9ybURhdGFfcGdfYXR0cmlidXRlICphdHRy cykKIAogCS8qIGluaXRpYWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJl bGF0aW9uQnVpbGRUdXBsZURlc2MgKi8KIAlUdXBsZURlc2NDb21wYWN0QXR0cihyZXN1bHQsIDAp LT5hdHRjYWNoZW9mZiA9IDA7CisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0KTsKIAogCS8qIE5v dGU6IHdlIGRvbid0IGJvdGhlciB0byBzZXQgdXAgYSBUdXBsZUNvbnN0ciBlbnRyeSAqLwogCkBA IC02MjkxLDYgKzYyOTcsOCBAQCBsb2FkX3JlbGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkK IAkJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKHJlbC0+cmRfYXR0LCBpKTsKIAkJfQogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRfYXR0KTsKKwogCQkvKiBuZXh0IHJlYWQgdGhlIGFj Y2VzcyBtZXRob2Qgc3BlY2lmaWMgZmllbGQgKi8KIAkJaWYgKGZyZWFkKCZsZW4sIDEsIHNpemVv ZihsZW4pLCBmcCkgIT0gc2l6ZW9mKGxlbikpCiAJCQlnb3RvIHJlYWRfZmFpbGVkOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMgYi9zcmMvYmFja2VuZC91dGls cy9mbWdyL2Z1bmNhcGkuYwppbmRleCA4YTkzNGVhOGRjYS4uNTE2ZDAyY2ZiODIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZnVuY2FwaS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2ZtZ3IvZnVuY2FwaS5jCkBAIC0zNDAsNiArMzQwLDggQEAgZ2V0X2V4cHJfcmVzdWx0X3R5 cGUoTm9kZSAqZXhwciwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGNvbCkpOwogCQkJaSsrOwog CQl9CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOworCiAJCWlmIChyZXN1bHRUeXBlSWQp CiAJCQkqcmVzdWx0VHlwZUlkID0gcmV4cHItPnJvd190eXBlaWQ7CiAJCWlmIChyZXN1bHRUdXBs ZURlc2MpCkBAIC0xMDQ0LDYgKzEwNDYsNyBAQCByZXNvbHZlX3BvbHltb3JwaGljX3R1cGRlc2Mo VHVwbGVEZXNjIHR1cGRlc2MsIG9pZHZlY3RvciAqZGVjbGFyZWRfYXJncywKIAkJfQogCX0KIAor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xODUz LDYgKzE4NTYsOCBAQCBidWlsZF9mdW5jdGlvbl9yZXN1bHRfdHVwZGVzY19kKGNoYXIgcHJva2lu ZCwKIAkJCQkJCSAgIDApOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0 dXJuIGRlc2M7CiB9CiAKQEAgLTE5NzAsNiArMTk3NSw3IEBAIFR5cGVHZXRUdXBsZURlc2MoT2lk IHR5cGVvaWQsIExpc3QgKmNvbGFsaWFzZXMpCiAJCQkJCQkgICB0eXBlb2lkLAogCQkJCQkJICAg LTEsCiAJCQkJCQkgICAwKTsKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCWVs c2UgaWYgKGZ1bmN0eXBjbGFzcyA9PSBUWVBFRlVOQ19SRUNPUkQpCiAJewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX2Z1bmNzLmMKaW5kZXggODUyNGRkM2E5ODEuLjQ3MmNiNTM5M2NlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX2Z1bmNzLmMKQEAgLTQ0NCw2ICs0NDQsNyBAQCBHZXRQR1ZhcmlhYmxlUmVz dWx0RGVzYyhjb25zdCBjaGFyICpuYW1lKQogCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywg KEF0dHJOdW1iZXIpIDEsIHZhcm5hbWUsCiAJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAJfQor CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCkBAIC00 NjUsNiArNDY2LDcgQEAgU2hvd0dVQ0NvbmZpZ09wdGlvbihjb25zdCBjaGFyICpuYW1lLCBEZXN0 UmVjZWl2ZXIgKmRlc3QpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwog CVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIHZhcm5h bWUsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9 IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7 CkBAIC00OTksNiArNTAxLDcgQEAgU2hvd0FsbEdVQ0NvbmZpZyhEZXN0UmVjZWl2ZXIgKmRlc3Qp CiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMywgImRlc2NyaXB0aW9uIiwKIAkJCQkJCQkgIFRFWFRPSUQs IC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9y IHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBk ZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTkzNCw2ICs5MzcsOCBAQCBz aG93X2FsbF9zZXR0aW5ncyhQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDE3LCAicGVuZGluZ19yZXN0YXJ0IiwKIAkJCQkJCSAgIEJP T0xPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCQkvKgog CQkgKiBHZW5lcmF0ZSBhdHRyaWJ1dGUgbWV0YWRhdGEgbmVlZGVkIGxhdGVyIHRvIHByb2R1Y2Ug dHVwbGVzIGZyb20gcmF3CiAJCSAqIEMgc3RyaW5ncwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3R1cGRlc2MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKaW5kZXggZDQ2 Y2RiZjdhM2MuLjU5NTQxM2RiYmM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVw ZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKQEAgLTE5NSw2ICsxOTUs NyBAQCBleHRlcm4gVHVwbGVEZXNjIENyZWF0ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVwbGVE ZXNjIHR1cGRlc2MsIGludCBuYXR0cyk7CiAKIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVE ZXNjQ29weUNvbnN0cihUdXBsZURlc2MgdHVwZGVzYyk7CiAKKyNkZWZpbmUgVHVwbGVEZXNjRmlu YWxpemUoZCkgKCh2b2lkKSAwKQogI2RlZmluZSBUdXBsZURlc2NTaXplKHNyYykgXAogCShvZmZz ZXRvZihzdHJ1Y3QgVHVwbGVEZXNjRGF0YSwgY29tcGFjdF9hdHRycykgKyBcCiAJIChzcmMpLT5u YXR0cyAqIHNpemVvZihDb21wYWN0QXR0cmlidXRlKSArIFwKZGlmZiAtLWdpdCBhL3NyYy9wbC9w bHBnc3FsL3NyYy9wbF9jb21wLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCmluZGV4 IDVlY2M3NzY2NzU3Li5iNzJjOTYzYjNiZSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3Jj L3BsX2NvbXAuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfY29tcC5jCkBAIC0xOTEyLDYg KzE5MTIsOCBAQCBidWlsZF9yb3dfZnJvbV92YXJzKFBMcGdTUUxfdmFyaWFibGUgKip2YXJzLCBp bnQgbnVtdmFycykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHJvdy0+cm93dHVwZGVz YywgaSArIDEsIHR5cGNvbGwpOwogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJvdy0+cm93dHVw ZGVzYyk7CisKIAlyZXR1cm4gcm93OwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKaW5kZXgg NDg1ZTA4ZTVjMTkuLmY5ZTdjNzE3MjgwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jCkBAIC0y MDYsNiArMjA2LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRfcmVwb3J0KFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdGF0c19yZXNldCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRa T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURl c2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5udW1jYWxs cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcHJlZHRlc3QvdGVzdF9wcmVk dGVzdC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpp bmRleCA2NzlhNWRlNDU2ZC4uNDhjYTJhNGVhNzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpAQCAtMjMwLDYgKzIzMCw3IEBAIHRlc3RfcHJl ZHRlc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgInNfcl9ob2xkcyIsIEJPT0xPSUQsIC0x LCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDgsCiAJCQkJ CSAgICJ3X3JfaG9sZHMiLCBCT09MT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVw ZGVzYyk7CiAJdHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJdmFsdWVzWzBd ID0gQm9vbEdldERhdHVtKHN0cm9uZ19pbXBsaWVkX2J5KTsKLS0gCjIuNTEuMAoK --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0004-Optimize-tuple-deformation.patch" Content-Disposition: attachment; filename="v12-0004-Optimize-tuple-deformation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3p8i3 RnJvbSBkNDZjMTA2MzI1YzZkZDdmNDU2ZmU1ZDI4ZDQ3YTgzY2MyOTVhOWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDQv Nl0gT3B0aW1pemUgdHVwbGUgZGVmb3JtYXRpb24KClRoaXMgY29tbWl0IGluY2x1ZGVzIHZhcmlv dXMgb3B0aW1pemF0aW9ucyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZgp0dXBsZSBkZWZv cm1hdGlvbi4KCldlIG5vdyBwcmVjYWxjdWxhdGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hl b2ZmLCB3aGljaCBhbGxvd3MgdXMgdG8KcmVtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIGRlZm9ybSBy b3V0aW5lcyB3aGljaCB3YXMgc2V0dGluZyB0aGUKYXR0Y2FjaGVvZmYuICBTZXR0aW5nIHRoZSBh dHRjYWNoZW9mZiBpcyBoYW5kbGVkIGJ5IFR1cGxlRGVzY0ZpbmFsaXplKCksCndoaWNoIG11c3Qg YmUgY2FsbGVkIGJlZm9yZSB0aGUgVHVwbGVEZXNjIGlzIHVzZWQgZm9yIGFueXRoaW5nLiAgSGF2 aW5nCnRoaXMgVHVwbGVEZXNjRmluYWxpemUoKSBmdW5jdGlvbiBtZWFucyB3ZSBjYW4gc3RvcmUg dGhlIGZpcnN0CmF0dHJpYnV0ZSBpbiB0aGUgVHVwbGVEZXNjIHdoaWNoIGRvZXMgbm90IGhhdmUg YW4gb2Zmc2V0IGNhY2hlZC4gIFRoYXQKYWxsb3dzIHVzIHRvIGFkZCBhIGRlZGljYXRlZCBkZWZv cm1pbmcgbG9vcCB0byBkZWZvcm0gYWxsIGF0dHJpYnV0ZXMgdXAKdG8gdGhlIGZpbmFsIG9uZSB3 aXRoIGFuIGF0dGNhY2hlb2ZmIHNldCwgb3IgdXAgdG8gdGhlIGZpcnN0IE5VTEwKYXR0cmlidXRl LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCgpXZSBhbHNvIHJlY29yZCB0aGUgbWF4aW11bSBhdHRy aWJ1dGUgbnVtYmVyIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QKaW4gdGhlIHR1cGxlLCB0 aGF0IGlzLCBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50IGFuZCBpc24ndCBhbgphdHRoYXNtaXNz aW5nIGF0dHJpYnV0ZS4gIFdoZW4gZGVmb3JtaW5nIG9ubHkgYXR0cmlidXRlcyBwcmlvciB0byB0 aGUKZ3VhcmFudGVlZCBhdHRudW0sIHdlJ3ZlIG5vIG5lZWQgdG8gYWNjZXNzIHRoZSB0dXBsZSdz IG5hdHQgY291bnQuICBBcyBhbgphZGRpdGlvbmFsIG9wdGltaXphdGlvbiwgd2Ugb25seSBjb3Vu dCBmaXhlZC13aWR0aCBjb2x1bW5zIHdoZW4KY2FsY3VsYXRpbmcgdGhlIG1heGltdW0gZ3VhcmFu dGVlZCBjb2x1bW4gYXMgdGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIHRvCmVtaXQgY29kZSB0byBm ZXRjaCBieXJlZiB0eXBlcyBpbiB0aGUgZGVmb3JtYXRpb24gbG9vcCBmb3IgZ3VhcmFudGVlZAph dHRyaWJ1dGVzLgoKU29tZSBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgZGVmb3JtIHR1cGxlcyB0aGF0 IGhhdmUgeWV0IHRvIGdvIHRocm91Z2ggTk9UCk5VTEwgY29uc3RyYWludCB2YWxpZGF0aW9uLiAg V2UncmUgdW5hYmxlIHRvIHBlcmZvcm0gdGhlIGd1YXJhbnRlZWQKYXR0cmlidXRlIG9wdGltaXph dGlvbiB3aGVuIHRoYXQncyB0aGUgY2FzZS4gIFRoZSBvcHRpbWl6YXRpb24gaXMgb3B0LWluCnZp YSB0aGUgVHVwbGVUYWJsZVNsb3QgdXNpbmcgdGhlIFRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NP TlNUUkFJTlRTCmZsYWcuCgpUaGlzIGNvbW1pdCBhbHNvIGFkZHMgYSBtb3JlIGVmZmljaWVudCB3 YXkgb2YgcG9wdWxhdGluZyB0aGUgaXNudWxsCmFycmF5IGJ5IHVzaW5nIGEgYml0LXdpc2UgdHJp Y2sgd2hpY2ggcGVyZm9ybXMgbXVsdGlwbGljYXRpb24gb24gdGhlCmludmVyc2Ugb2YgdGhlIHR1 cGxlJ3MgYml0bWFwIGJ5dGUgYW5kIG1hc2tpbmcgb3V0IGFsbCBidXQgdGhlIGxvd2VyIGJpdApv ZiBlYWNoIG9mIHRoZSBib29sZWFuJ3MgYnl0ZS4gIFRoaXMgcmVzdWx0cyBpbiBtdWNoIG1vcmUg b3B0aW1hbCBjb2RlCndoZW4gY29tcGFyZWQgdG8gZGV0ZXJtaW5pbmcgdGhlIE5VTExuZXNzIHZp YSBhdHRfaXNudWxsKCkuICA4IGlzbnVsbAplbGVtZW50cyBhcmUgcHJvY2Vzc2VkIGF0IG9uY2Ug dXNpbmcgdGhpcyBtZXRob2QsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8Kcm91bmQgdGhlIHR0c19p c251bGwgYXJyYXkgc2l6ZSB1cCB0byB0aGUgbmV4dCA4IGJ5dGVzLiAgVGhlIHBhbGxvYyBjb2Rl CmRvZXMgdGhpcyBhbnl3YXksIGJ1dCB0aGUgcm91bmQtdXAgbmVlZGVkIHRvIGJlIGZvcm1hbGl6 ZWQgc28gYXMgbm90IHRvCm92ZXJ3cml0ZSB0aGUgc2VudGluZWwgYnl0ZSBpbiBkZWJ1ZyBidWls ZHMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYyAgICAgICAgIHwg MzYwICsrKysrKystLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxl LmMgICAgICAgIHwgMzYzICsrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi90dXBkZXNjLmMgICAgICAgICAgIHwgIDUxICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd1dGlscy5jICAgICAgICAgIHwgICAzIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNN YWluLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jICAgICAgICAgICAgIHwgNDE3ICsrKysrKysrKystLS0tLS0tLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQWdnLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUN0ZXNjYW4uYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQ3VzdG9tLmMgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVGb3JlaWduc2Nhbi5jICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUZ1bmN0aW9uc2Nhbi5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAgNSArLQogLi4uL2V4ZWN1dG9yL25vZGVOYW1l ZHR1cGxlc3RvcmVzY2FuLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9u b2RlU2FtcGxlc2Nhbi5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVTZXFzY2FuLmMgICAgICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVN1YnF1ZXJ5c2Nhbi5jICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl VGFibGVGdW5jc2Nhbi5jICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVU aWRyYW5nZXNjYW4uYyAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRp ZHNjYW4uYyAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVmFs dWVzc2Nhbi5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXb3Jr dGFibGVzY2FuLmMgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9k ZWZvcm0uYyAgICAgICAgIHwgICA2IC0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 L3Bnb3V0cHV0LmMgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YyAgICAgICAgICAgIHwgIDEyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggICAgICAg ICAgICAgICAgICB8ICAyMCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaCAgICAgICAg ICAgICAgICAgIHwgMjI0ICsrKysrKysrKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUu aCAgICAgICAgICAgICAgIHwgIDI4ICstCiBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9k ZWZvcm1fYmVuY2guYyAgfCAgIDQgKy0KIDMyIGZpbGVzIGNoYW5nZWQsIDkwMiBpbnNlcnRpb25z KCspLCA2NjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi9oZWFwdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaGVhcHR1cGxlLmMK aW5kZXggMTFiZWMyMGU4MmUuLmIyYWM3ZmVmMzViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v aGVhcHR1cGxlLmMKQEAgLTQ5OCwxOSArNDk4LDcgQEAgaGVhcF9hdHRpc251bGwoSGVhcFR1cGxl IHR1cCwgaW50IGF0dG51bSwgVHVwbGVEZXNjIHR1cGxlRGVzYykKICAqCQlub2NhY2hlZ2V0YXR0 cgogICoKICAqCQlUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZnJvbSBmYXN0Z2V0YXR0cigpLCBpbiBj YXNlcyB3aGVyZSB3ZQotICoJCWNhbid0IHVzZSBhIGNhY2hlb2Zmc2V0IGFuZCB0aGUgdmFsdWUg aXMgbm90IG51bGwuCi0gKgotICoJCVRoaXMgY2FjaGVzIGF0dHJpYnV0ZSBvZmZzZXRzIGluIHRo ZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KLSAqCi0gKgkJQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNw ZWVkIHRoaW5ncyB1cCB3b3VsZCBiZSB0byBjYWNoZSBvZmZzZXRzCi0gKgkJd2l0aCB0aGUgdHVw bGUsIGJ1dCB0aGF0IHNlZW1zIG1vcmUgZGlmZmljdWx0IHVubGVzcyB5b3UgdGFrZQotICoJCXRo ZSBzdG9yYWdlIGhpdCBvZiBhY3R1YWxseSBwdXR0aW5nIHRob3NlIG9mZnNldHMgaW50byB0aGUK LSAqCQl0dXBsZSB5b3Ugc2VuZCB0byBkaXNrLiAgWXVjay4KLSAqCi0gKgkJVGhpcyBzY2hlbWUg d2lsbCBiZSBzbGlnaHRseSBzbG93ZXIgdGhhbiB0aGF0LCBidXQgc2hvdWxkCi0gKgkJcGVyZm9y bSB3ZWxsIGZvciBxdWVyaWVzIHdoaWNoIGhpdCBsYXJnZSAjJ3Mgb2YgdHVwbGVzLiAgQWZ0ZXIK LSAqCQl5b3UgY2FjaGUgdGhlIG9mZnNldHMgb25jZSwgZXhhbWluaW5nIGFsbCB0aGUgb3RoZXIg dHVwbGVzIHVzaW5nCi0gKgkJdGhlIHNhbWUgYXR0cmlidXRlIGRlc2NyaXB0b3Igd2lsbCBnbyBt dWNoIHF1aWNrZXIuIC1jaW0gNS80LzkxCisgKgkJY2FuJ3QgdXNlIHRoZSBhdHRjYWNoZW9mZiBh bmQgdGhlIHZhbHVlIGlzIG5vdCBudWxsLgogICoKICAqCQlOT1RFOiBpZiB5b3UgbmVlZCB0byBj aGFuZ2UgdGhpcyBjb2RlLCBzZWUgYWxzbyBoZWFwX2RlZm9ybV90dXBsZS4KICAqCQlBbHNvIHNl ZSBub2NhY2hlX2luZGV4X2dldGF0dHIsIHdoaWNoIGlzIHRoZSBzYW1lIGNvZGUgZm9yIGluZGV4 CkBAIC01MjIsMTk0ICs1MTAsMTI1IEBAIG5vY2FjaGVnZXRhdHRyKEhlYXBUdXBsZSB0dXAsCiAJ CQkgICBpbnQgYXR0bnVtLAogCQkJICAgVHVwbGVEZXNjIHR1cGxlRGVzYykKIHsKKwlDb21wYWN0 QXR0cmlidXRlICpjYXR0cjsKIAlIZWFwVHVwbGVIZWFkZXIgdGQgPSB0dXAtPnRfZGF0YTsKIAlj aGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIGRhdGEgcGFydCBvZiB0dXBsZSAqLwogCWJpdHM4CSAg ICpicCA9IHRkLT50X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJv b2wJCXNsb3cgPSBmYWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJ CW9mZjsJCQkvKiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAqLworCWludAkJCXN0YXJ0QXR0 cjsKKwlpbnQJCQlmaXJzdE51bGxBdHRyOworCWludAkJCWk7CisJYm9vbAkJaGFzbnVsbHMgPSBI ZWFwVHVwbGVIYXNOdWxscyh0dXApOwogCi0JLyogLS0tLS0tLS0tLS0tLS0tLQotCSAqCSBUaHJl ZSBjYXNlczoKLQkgKgotCSAqCSAxOiBObyBudWxscyBhbmQgbm8gdmFyaWFibGUtd2lkdGggYXR0 cmlidXRlcy4KLQkgKgkgMjogSGFzIGEgbnVsbCBvciBhIHZhci13aWR0aCBBRlRFUiBhdHQuCi0J ICoJIDM6IEhhcyBudWxscyBvciB2YXItd2lkdGhzIEJFRk9SRSBhdHQuCi0JICogLS0tLS0tLS0t LS0tLS0tLQotCSAqLworCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0Zp bmFsaXplKCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRy ID49IDApOwogCiAJYXR0bnVtLS07CiAKLQlpZiAoIUhlYXBUdXBsZU5vTnVsbHModHVwKSkKKwkv KgorCSAqIFRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyB3ZSBuZWVkIHRvIGxv b2sgYXQsIHN0YXJ0IHdhbGtpbmcKKwkgKiB0aGUgdHVwbGUgYXQgdGhlIGF0dHJpYnV0ZSB3aXRo IHRoZSBoaWdoZXN0IGF0dGNhY2hlb2ZmIHByaW9yIHRvIGF0dG51bQorCSAqIG9yIHRoZSBmaXJz dCBOVUxMIGF0dHJpYnV0ZSBwcmlvciB0byBhdHRudW0sIHdoaWNoZXZlciBjb21lcyBmaXJzdC4K KwkgKi8KKwlpZiAoaGFzbnVsbHMpCisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0dHIo YnAsIGF0dG51bSk7CisJZWxzZQorCQlmaXJzdE51bGxBdHRyID0gYXR0bnVtOworCisJaWYgKHR1 cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID4gMCkKIAl7CiAJCS8qCi0JCSAqIHRo ZXJlJ3MgYSBudWxsIHNvbWV3aGVyZSBpbiB0aGUgdHVwbGUKLQkJICoKLQkJICogY2hlY2sgdG8g c2VlIGlmIGFueSBwcmVjZWRpbmcgYml0cyBhcmUgbnVsbC4uLgorCQkgKiBTdGFydCBhdCB0aGUg aGlnaGVzdCBhdHRjYWNoZW9mZiBhdHRyaWJ1dGUgd2l0aCBubyBOVUxMcyBpbiBwcmlvcgorCQkg KiBhdHRyaWJ1dGVzLgogCQkgKi8KLQkJaW50CQkJYnl0ZSA9IGF0dG51bSA+PiAzOwotCQlpbnQJ CQlmaW5hbGJpdCA9IGF0dG51bSAmIDB4MDc7Ci0KLQkJLyogY2hlY2sgZm9yIG51bGxzICJiZWZv cmUiIGZpbmFsIGJpdCBvZiBsYXN0IGJ5dGUgKi8KLQkJaWYgKCh+YnBbYnl0ZV0pICYgKCgxIDw8 IGZpbmFsYml0KSAtIDEpKQotCQkJc2xvdyA9IHRydWU7Ci0JCWVsc2UKLQkJewotCQkJLyogY2hl Y2sgZm9yIG51bGxzIGluIGFueSAiZWFybGllciIgYnl0ZXMgKi8KLQkJCWludAkJCWk7Ci0KLQkJ CWZvciAoaSA9IDA7IGkgPCBieXRlOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGJwW2ldICE9IDB4RkYp Ci0JCQkJewotCQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9 CisJCXN0YXJ0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciAt IDEsIGZpcnN0TnVsbEF0dHIpOworCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2MsIHN0YXJ0QXR0ciktPmF0dGNhY2hlb2ZmOworCX0KKwllbHNlCisJeworCQkvKiBPdGhlcndp c2UsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcuLi4gKi8KKwkJc3RhcnRBdHRyID0gMDsKKwkJb2Zm ID0gMDsKIAl9CiAKIAl0cCA9IChjaGFyICopIHRkICsgdGQtPnRfaG9mZjsKIAotCWlmICghc2xv dykKKwkvKgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0aGUgZmlyc3QgTlVMTCBhdHRyLiAg V2UgdXNlIHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0aGUgdHVwbGUgaGFzIG5vIHZhcmlh YmxlLXdpZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdpZHRoCisJICogY29sdW1ucyBleGlz dHMsIHdlIHVzZSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSB0byBtb3ZlIHRoZSBvZmZzZXQKKwkg KiBiZXlvbmQgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgorCSAqLworCWlmICghSGVhcFR1cGxlSGFz VmFyV2lkdGgodHVwKSkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKLQotCQkvKgotCQkg KiBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgYXJlIG5vIG51bGxzIHVwIHRvIGFuZCBpbmNsdWRpbmcg dGhlIHRhcmdldAotCQkgKiBhdHRyaWJ1dGUuICBJZiB3ZSBoYXZlIGEgY2FjaGVkIG9mZnNldCwg d2UgY2FuIHVzZSBpdC4KLQkJICovCi0JCWF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxl RGVzYywgYXR0bnVtKTsKLQkJaWYgKGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCXJldHVybiBm ZXRjaGF0dChhdHQsIHRwICsgYXR0LT5hdHRjYWNoZW9mZik7Ci0KLQkJLyoKLQkJICogT3RoZXJ3 aXNlLCBjaGVjayBmb3Igbm9uLWZpeGVkLWxlbmd0aCBhdHRycyB1cCB0byBhbmQgaW5jbHVkaW5n Ci0JCSAqIHRhcmdldC4gIElmIHRoZXJlIGFyZW4ndCBhbnksIGl0J3Mgc2FmZSB0byBjaGVhcGx5 IGluaXRpYWxpemUgdGhlCi0JCSAqIGNhY2hlZCBvZmZzZXRzIGZvciB0aGVzZSBhdHRycy4KLQkJ ICovCi0JCWlmIChIZWFwVHVwbGVIYXNWYXJXaWR0aCh0dXApKQorCQlmb3IgKGkgPSBzdGFydEF0 dHI7IGkgPCBmaXJzdE51bGxBdHRyOyBpKyspCiAJCXsKLQkJCWludAkJCWo7CisJCQljYXR0ciA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CiAKLQkJCWZvciAoaiA9IDA7IGog PD0gYXR0bnVtOyBqKyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxl RGVzYywgaiktPmF0dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJy ZWFrOwotCQkJCX0KLQkJCX0KKwkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBjYXR0 ci0+YXR0YWxpZ25ieSk7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKIAkJfQotCX0KLQotCWlm ICghc2xvdykKLQl7Ci0JCWludAkJCW5hdHRzID0gdHVwbGVEZXNjLT5uYXR0czsKLQkJaW50CQkJ aiA9IDE7Ci0KLQkJLyoKLQkJICogSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYSB0dXBsZSB3aXRo IG5vIG51bGxzIG9yIHZhci13aWR0aHMgdXAgdG8KLQkJICogYW5kIGluY2x1ZGluZyB0aGUgdGFy Z2V0IGF0dHJpYnV0ZSwgc28gd2UgY2FuIHVzZSB0aGUgY2FjaGVkIG9mZnNldAotCQkgKiAuLi4g b25seSB3ZSBkb24ndCBoYXZlIGl0IHlldCwgb3Igd2UnZCBub3QgaGF2ZSBnb3QgaGVyZS4gIFNp bmNlCi0JCSAqIGl0J3MgY2hlYXAgdG8gY29tcHV0ZSBvZmZzZXRzIGZvciBmaXhlZC13aWR0aCBj b2x1bW5zLCB3ZSB0YWtlIHRoZQotCQkgKiBvcHBvcnR1bml0eSB0byBpbml0aWFsaXplIHRoZSBj YWNoZWQgb2Zmc2V0cyBmb3IgKmFsbCogdGhlIGxlYWRpbmcKLQkJICogZml4ZWQtd2lkdGggY29s dW1ucywgaW4gaG9wZSBvZiBhdm9pZGluZyBmdXR1cmUgdmlzaXRzIHRvIHRoaXMKLQkJICogcm91 dGluZS4KLQkJICovCi0JCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgMCktPmF0dGNh Y2hlb2ZmID0gMDsKLQotCQkvKiB3ZSBtaWdodCBoYXZlIHNldCBzb21lIG9mZnNldHMgaW4gdGhl IHNsb3cgcGF0aCBwcmV2aW91c2x5ICovCi0JCXdoaWxlIChqIDwgbmF0dHMgJiYgVHVwbGVEZXNj Q29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKS0+YXR0Y2FjaGVvZmYgPiAwKQotCQkJaisrOwotCi0J CW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiAtIDEpLT5hdHRjYWNoZW9m ZiArCi0JCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGogLSAxKS0+YXR0bGVuOwog Ci0JCWZvciAoOyBqIDwgbmF0dHM7IGorKykKKwkJZm9yICg7IGkgPCBhdHRudW07IGkrKykKIAkJ ewotCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVE ZXNjLCBqKTsKKwkJCWlmIChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJ aWYgKGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJYnJlYWs7Ci0KLQkJCW9mZiA9IGF0dF9ub21pbmFs X2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21w YWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCi0J CQlvZmYgKz0gYXR0LT5hdHRsZW47CisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwg Y2F0dHItPmF0dGFsaWduYnkpOworCQkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CiAJCX0KLQotCQlB c3NlcnQoaiA+IGF0dG51bSk7Ci0KLQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVE ZXNjLCBhdHRudW0pLT5hdHRjYWNoZW9mZjsKIAl9CiAJZWxzZQogCXsKLQkJYm9vbAkJdXNlY2Fj aGUgPSB0cnVlOwotCQlpbnQJCQlpOwotCi0JCS8qCi0JCSAqIE5vdyB3ZSBrbm93IHRoYXQgd2Ug aGF2ZSB0byB3YWxrIHRoZSB0dXBsZSBDQVJFRlVMTFkuICBCdXQgd2Ugc3RpbGwKLQkJICogbWln aHQgYmUgYWJsZSB0byBjYWNoZSBzb21lIG9mZnNldHMgZm9yIG5leHQgdGltZS4KLQkJICoKLQkJ ICogTm90ZSAtIFRoaXMgbG9vcCBpcyBhIGxpdHRsZSB0cmlja3kuICBGb3IgZWFjaCBub24tbnVs bCBhdHRyaWJ1dGUsCi0JCSAqIHdlIGhhdmUgdG8gZmlyc3QgYWNjb3VudCBmb3IgYWxpZ25tZW50 IHBhZGRpbmcgYmVmb3JlIHRoZSBhdHRyLAotCQkgKiB0aGVuIGFkdmFuY2Ugb3ZlciB0aGUgYXR0 ciBiYXNlZCBvbiBpdHMgbGVuZ3RoLiAgTnVsbHMgaGF2ZSBubwotCQkgKiBzdG9yYWdlIGFuZCBu byBhbGlnbm1lbnQgcGFkZGluZyBlaXRoZXIuICBXZSBjYW4gdXNlL3NldAotCQkgKiBhdHRjYWNo ZW9mZiB1bnRpbCB3ZSByZWFjaCBlaXRoZXIgYSBudWxsIG9yIGEgdmFyLXdpZHRoIGF0dHJpYnV0 ZS4KLQkJICovCi0JCW9mZiA9IDA7Ci0JCWZvciAoaSA9IDA7OyBpKyspCQkvKiBsb29wIGV4aXQg aXMgYXQgImJyZWFrIiAqLworCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkgPCBmaXJzdE51bGxBdHRy OyBpKyspCiAJCXsKLQkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzYywgaSk7CisJCQlpbnQJCQlhdHRsZW47CiAKLQkJCWlmIChIZWFwVHVwbGVI YXNOdWxscyh0dXApICYmIGF0dF9pc251bGwoaSwgYnApKQotCQkJewotCQkJCXVzZWNhY2hlID0g ZmFsc2U7Ci0JCQkJY29udGludWU7CQkvKiB0aGlzIGNhbm5vdCBiZSB0aGUgdGFyZ2V0IGF0dCAq LwotCQkJfQorCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwor CQkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsKIAotCQkJLyogSWYgd2Uga25vdyB0aGUgbmV4dCBv ZmZzZXQsIHdlIGNhbiBza2lwIHRoZSByZXN0ICovCi0JCQlpZiAodXNlY2FjaGUgJiYgYXR0LT5h dHRjYWNoZW9mZiA+PSAwKQotCQkJCW9mZiA9IGF0dC0+YXR0Y2FjaGVvZmY7Ci0JCQllbHNlIGlm IChhdHQtPmF0dGxlbiA9PSAtMSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbiBvbmx5IGNh Y2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1dGUgaWYgdGhlCi0JCQkJICogb2Zm c2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZQot CQkJCSAqIG5vIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdpbGwgYmUg dmFsaWQgZm9yCi0JCQkJICogZWl0aGVyIGFuIGFsaWduZWQgb3IgdW5hbGlnbmVkIHZhbHVlLgot CQkJCSAqLwotCQkJCWlmICh1c2VjYWNoZSAmJgotCQkJCQlvZmYgPT0gYXR0X25vbWluYWxfYWxp Z25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSkpCi0JCQkJCWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7 Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGF0 dC0+YXR0YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJCSAgdHAgKyBvZmYpOwotCQkJCQl1c2VjYWNo ZSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBub3QgdmFybGVu YSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJCW9mZiA9IGF0dF9u b21pbmFsX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJLyoKKwkJCSAqIGNzdHJp bmdzIGRvbid0IGV4aXN0IGluIGhlYXAgdHVwbGVzLiAgVXNlIHBnX2Fzc3VtZSB0byBpbnN0cnVj dAorCQkJICogdGhlIGNvbXBpbGVyIG5vdCB0byBlbWl0IHRoZSBjc3RyaW5nLXJlbGF0ZWQgY29k ZSBpbgorCQkJICogYXR0X2FkZGxlbmd0aF9wb2ludGVyKCkuCisJCQkgKi8KKwkJCXBnX2Fzc3Vt ZShhdHRsZW4gPiAwIHx8IGF0dGxlbiA9PSAtMSk7CiAKLQkJCQlpZiAodXNlY2FjaGUpCi0JCQkJ CWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQl9CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGln bmJ5KG9mZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGF0dGxl biwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVy KG9mZiwgYXR0bGVuLCB0cCArIG9mZik7CisJCX0KIAotCQkJaWYgKGkgPT0gYXR0bnVtKQotCQkJ CWJyZWFrOworCQlmb3IgKDsgaSA8IGF0dG51bTsgaSsrKQorCQl7CisJCQlpbnQJCQlhdHRsZW47 CiAKLQkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGF0dC0+YXR0bGVuLCB0cCAr IG9mZik7CisJCQlpZiAoYXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGludWU7CiAKLQkJCWlm ICh1c2VjYWNoZSAmJiBhdHQtPmF0dGxlbiA8PSAwKQotCQkJCXVzZWNhY2hlID0gZmFsc2U7CisJ CQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CisJCQlhdHRsZW4g PSBjYXR0ci0+YXR0bGVuOworCisJCQkvKiBBcyBhYm92ZSwgaGVhcHR1cGxlcyBoYXZlIG5vIGNz dHJpbmdzICovCisJCQlwZ19hc3N1bWUoYXR0bGVuID4gMCB8fCBhdHRsZW4gPT0gLTEpOworCisJ CQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksIGF0dGxl biwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVy KG9mZiwgYXR0bGVuLCB0cCArIG9mZik7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZmV0Y2hhdHQoVHVw bGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pLCB0cCArIG9mZik7CisJY2F0dHIg PSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkg IGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJICB0cCArIG9mZik7CisKKwlyZXR1cm4gZmV0Y2hhdHQo Y2F0dHIsIHRwICsgb2ZmKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM0Nyw2ICsx MjY2LDcgQEAgaGVhcF9kZWZvcm1fdHVwbGUoSGVhcFR1cGxlIHR1cGxlLCBUdXBsZURlc2MgdHVw bGVEZXNjLAogCQkJCSAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsKQogewogCUhlYXBUdXBs ZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwog CWJvb2wJCWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVwbGUpOwogCWludAkJCXRkZXNj X25hdHRzID0gdHVwbGVEZXNjLT5uYXR0czsKIAlpbnQJCQluYXR0czsJCQkvKiBudW1iZXIgb2Yg YXR0cyB0byBleHRyYWN0ICovCkBAIC0xMzU0LDcwICsxMjc0LDk4IEBAIGhlYXBfZGVmb3JtX3R1 cGxlKEhlYXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGxlRGVzYywKIAljaGFyCSAgICp0cDsJ CQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KIAl1aW50MzIJCW9mZjsJCQkvKiBvZmZzZXQgaW4g dHVwbGUgZGF0YSAqLwogCWJpdHM4CSAgICpicCA9IHR1cC0+dF9iaXRzOwkvKiBwdHIgdG8gbnVs bCBiaXRtYXAgaW4gdHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGNhbiB3ZSB1c2Uv c2V0IGF0dGNhY2hlb2ZmPyAqLworCWludAkJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyOworCWlu dAkJCWZpcnN0TnVsbEF0dHI7CiAKIAluYXR0cyA9IEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1 cCk7CiAKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgp PyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsK KwogCS8qCiAJICogSW4gaW5oZXJpdGFuY2Ugc2l0dWF0aW9ucywgaXQgaXMgcG9zc2libGUgdGhh dCB0aGUgZ2l2ZW4gdHVwbGUgYWN0dWFsbHkKIAkgKiBoYXMgbW9yZSBmaWVsZHMgdGhhbiB0aGUg Y2FsbGVyIGlzIGV4cGVjdGluZy4gIERvbid0IHJ1biBvZmYgdGhlIGVuZCBvZgogCSAqIHRoZSBj YWxsZXIncyBhcnJheXMuCiAJICovCiAJbmF0dHMgPSBNaW4obmF0dHMsIHRkZXNjX25hdHRzKTsK KwlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVk T2Zmc2V0QXR0ciwgbmF0dHMpOworCisJaWYgKGhhc251bGxzKQorCXsKKwkJZmlyc3ROdWxsQXR0 ciA9IGZpcnN0X251bGxfYXR0cihicCwgbmF0dHMpOworCisJCS8qCisJCSAqIFhYWDogaXQnZCBi ZSBuaWNlIHRvIHVzZSBwb3B1bGF0ZV9pc251bGxfYXJyYXkoKSBoZXJlLCBidXQgdGhhdAorCQkg KiByZXF1aXJlcyB0aGF0IHRoZSBpc251bGwgYXJyYXkncyBzaXplIGlzIHJvdW5kZWQgdXAgdG8g dGhlIG5leHQKKwkJICogbXVsdGlwbGUgb2YgOC4gIERvaW5nIHRoYXQgd291bGQgcmVxdWlyZSBh ZGp1c3RpbmcgbWFueSBsb2NhdGlvbnMKKwkJICogdGhhdCBhbGxvY2F0ZSB0aGUgYXJyYXkuCisJ CSAqLworCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0 QXR0ciwgZmlyc3ROdWxsQXR0cik7CisJfQorCWVsc2UKKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRz OwogCiAJdHAgPSAoY2hhciAqKSB0dXAgKyB0dXAtPnRfaG9mZjsKKwlhdHRudW0gPSAwOwogCi0J b2ZmID0gMDsKKwlpZiAoZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPiAwKQorCXsKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJCS8qIEluIEFzc2VydCBlbmFibGVkIGJ1aWxkcywgdmVyaWZ5 IGF0dGNhY2hlb2ZmIGlzIGNvcnJlY3QgKi8KKwkJaW50CQkJb2ZmY2hlY2sgPSAwOworI2VuZGlm CisJCWRvCisJCXsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQljYXR0ciA9IFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJCW9mZiA9IGNhdHRyLT5hdHRj YWNoZW9mZjsKIAotCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJCW9mZmNoZWNrID0gYXR0X25vbWluYWxfYWxp Z25ieShvZmZjaGVjaywgY2F0dHItPmF0dGFsaWduYnkpOworCQkJQXNzZXJ0KG9mZmNoZWNrID09 IGNhdHRyLT5hdHRjYWNoZW9mZik7CisJCQlvZmZjaGVjayArPSBjYXR0ci0+YXR0bGVuOworI2Vu ZGlmCisKKwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLAorCQkJ CQkJCQkJCQkgY2F0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJCQkgY2F0dHItPmF0dGxlbik7CisJ CX0gd2hpbGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOworCQlvZmYgKz0g Y2F0dHItPmF0dGxlbjsKKwl9CisJZWxzZQorCQlvZmYgPSAwOworCisJZm9yICg7IGF0dG51bSA8 IGZpcnN0TnVsbEF0dHI7IGF0dG51bSsrKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0 dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJaXNudWxsW2F0 dG51bV0gPSBmYWxzZTsKKwkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2Ms IGF0dG51bSk7CisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJ CQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJ CQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJ fQorCisJZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwl7CisJCUFzc2VydChoYXNu dWxscyk7CiAKLQkJaWYgKGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCWlm IChhdHRfaXNudWxsKGF0dG51bSwgYnApKQogCQl7CiAJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1 bSkgMDsKIAkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2Fu J3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaXNu dWxsW2F0dG51bV0gPSBmYWxzZTsKLQotCQlpZiAoIXNsb3cgJiYgdGhpc2F0dC0+YXR0Y2FjaGVv ZmYgPj0gMCkKLQkJCW9mZiA9IHRoaXNhdHQtPmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0aGlz YXR0LT5hdHRsZW4gPT0gLTEpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0 aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0IGlz IGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwotCQkJ ICogcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBm b3IgZWl0aGVyCi0JCQkgKiBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCSAqLwot CQkJaWYgKCFzbG93ICYmCi0JCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlz YXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCWVs c2UKLQkJCXsKLQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0 YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJc2xvdyA9IHRydWU7Ci0J CQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2Ug YXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYs IHRoaXNhdHQtPmF0dGFsaWduYnkpOwotCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0 Y2FjaGVvZmYgPSBvZmY7Ci0JCX0KLQotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNh dHQsIHRwICsgb2ZmKTsKLQotCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlz YXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKLQotCQlpZiAodGhpc2F0dC0+YXR0bGVuIDw9IDApCi0J CQlzbG93ID0gdHJ1ZTsJCS8qIGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCisJCWNh dHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCisJCS8qIGFs aWduICdvZmYnLCBmZXRjaCB0aGUgZGF0dW0sIGFuZCBpbmNyZW1lbnQgb2ZmIGJleW9uZCB0aGUg ZGF0dW0gKi8KKwkJdmFsdWVzW2F0dG51bV0gPSBhbGlnbl9mZXRjaF90aGVuX2FkZCh0cCwKKwkJ CQkJCQkJCQkJICAmb2ZmLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJ CQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKIAl9 CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxl LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYwppbmRleCBkNjM1MDIw MWUwMS4uOGM0MTA4NTMxOTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v aW5kZXh0dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5kZXh0dXBsZS5j CkBAIC0yMjMsMTggKzIyMyw2IEBAIGluZGV4X2Zvcm1fdHVwbGVfY29udGV4dChUdXBsZURlc2Mg dHVwbGVEZXNjcmlwdG9yLAogICoKICAqCQlUaGlzIGdldHMgY2FsbGVkIGZyb20gaW5kZXhfZ2V0 YXR0cigpIG1hY3JvLCBhbmQgb25seSBpbiBjYXNlcwogICoJCXdoZXJlIHdlIGNhbid0IHVzZSBj YWNoZW9mZnNldCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBudWxsLgotICoKLSAqCQlUaGlzIGNhY2hl cyBhdHRyaWJ1dGUgb2Zmc2V0cyBpbiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0b3IuCi0gKgotICoJ CUFuIGFsdGVybmF0aXZlIHdheSB0byBzcGVlZCB0aGluZ3MgdXAgd291bGQgYmUgdG8gY2FjaGUg b2Zmc2V0cwotICoJCXdpdGggdGhlIHR1cGxlLCBidXQgdGhhdCBzZWVtcyBtb3JlIGRpZmZpY3Vs dCB1bmxlc3MgeW91IHRha2UKLSAqCQl0aGUgc3RvcmFnZSBoaXQgb2YgYWN0dWFsbHkgcHV0dGlu ZyB0aG9zZSBvZmZzZXRzIGludG8gdGhlCi0gKgkJdHVwbGUgeW91IHNlbmQgdG8gZGlzay4gIFl1 Y2suCi0gKgotICoJCVRoaXMgc2NoZW1lIHdpbGwgYmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gdGhh dCwgYnV0IHNob3VsZAotICoJCXBlcmZvcm0gd2VsbCBmb3IgcXVlcmllcyB3aGljaCBoaXQgbGFy Z2UgIydzIG9mIHR1cGxlcy4gIEFmdGVyCi0gKgkJeW91IGNhY2hlIHRoZSBvZmZzZXRzIG9uY2Us IGV4YW1pbmluZyBhbGwgdGhlIG90aGVyIHR1cGxlcyB1c2luZwotICoJCXRoZSBzYW1lIGF0dHJp YnV0ZSBkZXNjcmlwdG9yIHdpbGwgZ28gbXVjaCBxdWlja2VyLiAtY2ltIDUvNC85MQogICogLS0t LS0tLS0tLS0tLS0tLQogICovCiBEYXR1bQpAQCAtMjQyLDIwNSArMjMwLDEyNCBAQCBub2NhY2hl X2luZGV4X2dldGF0dHIoSW5kZXhUdXBsZSB0dXAsCiAJCQkJCSAgaW50IGF0dG51bSwKIAkJCQkJ ICBUdXBsZURlc2MgdHVwbGVEZXNjKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWNo YXIJICAgKnRwOwkJCQkvKiBwdHIgdG8gZGF0YSBwYXJ0IG9mIHR1cGxlICovCiAJYml0czgJICAg KmJwID0gTlVMTDsJCS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNs b3cgPSBmYWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJCWRhdGFf b2ZmOwkJLyogdHVwbGUgZGF0YSBvZmZzZXQgKi8KIAlpbnQJCQlvZmY7CQkJLyogY3VycmVudCBv ZmZzZXQgd2l0aGluIGRhdGEgKi8KKwlpbnQJCQlzdGFydEF0dHI7CisJaW50CQkJZmlyc3ROdWxs QXR0cjsKKwlib29sCQloYXNudWxscyA9IEluZGV4VHVwbGVIYXNOdWxscyh0dXApOworCWludAkJ CWk7CiAKLQkvKiAtLS0tLS0tLS0tLS0tLS0tCi0JICoJIFRocmVlIGNhc2VzOgotCSAqCi0JICoJ IDE6IE5vIG51bGxzIGFuZCBubyB2YXJpYWJsZS13aWR0aCBhdHRyaWJ1dGVzLgotCSAqCSAyOiBI YXMgYSBudWxsIG9yIGEgdmFyLXdpZHRoIEFGVEVSIGF0dC4KLQkgKgkgMzogSGFzIG51bGxzIG9y IHZhci13aWR0aHMgQkVGT1JFIGF0dC4KLQkgKiAtLS0tLS0tLS0tLS0tLS0tCi0JICovCi0KLQlk YXRhX29mZiA9IEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KHR1cC0+dF9pbmZvKTsKKwkvKiBEaWQg c29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0 dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0ciA+PSAwKTsKIAogCWF0dG51bS0tOwog Ci0JaWYgKEluZGV4VHVwbGVIYXNOdWxscyh0dXApKQotCXsKLQkJLyoKLQkJICogdGhlcmUncyBh IG51bGwgc29tZXdoZXJlIGluIHRoZSB0dXBsZQotCQkgKgotCQkgKiBjaGVjayB0byBzZWUgaWYg ZGVzaXJlZCBhdHQgaXMgbnVsbAotCQkgKi8KKwlkYXRhX29mZiA9IEluZGV4SW5mb0ZpbmREYXRh T2Zmc2V0KHR1cC0+dF9pbmZvKTsKKwl0cCA9IChjaGFyICopIHR1cCArIGRhdGFfb2ZmOwogCi0J CS8qIFhYWCAia25vd3MiIHRfYml0cyBhcmUganVzdCBhZnRlciBmaXhlZCB0dXBsZSBoZWFkZXIh ICovCisJLyoKKwkgKiBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgd2UgbmVl ZCB0byBsb29rIGF0LCBzdGFydCB3YWxraW5nCisJICogdGhlIHR1cGxlIGF0IHRoZSBhdHRyaWJ1 dGUgd2l0aCB0aGUgaGlnaGVzdCBhdHRjYWNoZW9mZiBwcmlvciB0byBhdHRudW0KKwkgKiBvciB0 aGUgZmlyc3QgTlVMTCBhdHRyaWJ1dGUgcHJpb3IgdG8gYXR0bnVtLCB3aGljaGV2ZXIgY29tZXMg Zmlyc3QuCisJICovCisJaWYgKGhhc251bGxzKQorCXsKIAkJYnAgPSAoYml0czggKikgKChjaGFy ICopIHR1cCArIHNpemVvZihJbmRleFR1cGxlRGF0YSkpOwotCi0JCS8qCi0JCSAqIE5vdyBjaGVj ayB0byBzZWUgaWYgYW55IHByZWNlZGluZyBiaXRzIGFyZSBudWxsLi4uCi0JCSAqLwotCQl7Ci0J CQlpbnQJCQlieXRlID0gYXR0bnVtID4+IDM7Ci0JCQlpbnQJCQlmaW5hbGJpdCA9IGF0dG51bSAm IDB4MDc7Ci0KLQkJCS8qIGNoZWNrIGZvciBudWxscyAiYmVmb3JlIiBmaW5hbCBiaXQgb2YgbGFz dCBieXRlICovCi0JCQlpZiAoKH5icFtieXRlXSkgJiAoKDEgPDwgZmluYWxiaXQpIC0gMSkpCi0J CQkJc2xvdyA9IHRydWU7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogY2hlY2sgZm9yIG51bGxzIGlu IGFueSAiZWFybGllciIgYnl0ZXMgKi8KLQkJCQlpbnQJCQlpOwotCi0JCQkJZm9yIChpID0gMDsg aSA8IGJ5dGU7IGkrKykKLQkJCQl7Ci0JCQkJCWlmIChicFtpXSAhPSAweEZGKQotCQkJCQl7Ci0J CQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9 CisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0dHIoYnAsIGF0dG51bSk7CiAJfQorCWVs c2UKKwkJZmlyc3ROdWxsQXR0ciA9IGF0dG51bTsKIAotCXRwID0gKGNoYXIgKikgdHVwICsgZGF0 YV9vZmY7Ci0KLQlpZiAoIXNsb3cpCisJaWYgKHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZz ZXRBdHRyID4gMCkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKLQotCQkvKgotCQkgKiBJ ZiB3ZSBnZXQgaGVyZSwgdGhlcmUgYXJlIG5vIG51bGxzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhl IHRhcmdldAotCQkgKiBhdHRyaWJ1dGUuICBJZiB3ZSBoYXZlIGEgY2FjaGVkIG9mZnNldCwgd2Ug Y2FuIHVzZSBpdC4KLQkJICovCi0JCWF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz YywgYXR0bnVtKTsKLQkJaWYgKGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCXJldHVybiBmZXRj aGF0dChhdHQsIHRwICsgYXR0LT5hdHRjYWNoZW9mZik7Ci0KIAkJLyoKLQkJICogT3RoZXJ3aXNl LCBjaGVjayBmb3Igbm9uLWZpeGVkLWxlbmd0aCBhdHRycyB1cCB0byBhbmQgaW5jbHVkaW5nCi0J CSAqIHRhcmdldC4gIElmIHRoZXJlIGFyZW4ndCBhbnksIGl0J3Mgc2FmZSB0byBjaGVhcGx5IGlu aXRpYWxpemUgdGhlCi0JCSAqIGNhY2hlZCBvZmZzZXRzIGZvciB0aGVzZSBhdHRycy4KKwkJICog U3RhcnQgYXQgdGhlIGhpZ2hlc3QgYXR0Y2FjaGVvZmYgYXR0cmlidXRlIHdpdGggbm8gTlVMTHMg aW4gcHJpb3IKKwkJICogYXR0cmlidXRlcy4KIAkJICovCi0JCWlmIChJbmRleFR1cGxlSGFzVmFy d2lkdGhzKHR1cCkpCi0JCXsKLQkJCWludAkJCWo7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gYXR0 bnVtOyBqKyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg aiktPmF0dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwot CQkJCX0KLQkJCX0KLQkJfQorCQlzdGFydEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNh Y2hlZE9mZnNldEF0dHIgLSAxLCBmaXJzdE51bGxBdHRyKTsKKwkJb2ZmID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBzdGFydEF0dHIpLT5hdHRjYWNoZW9mZjsKIAl9Ci0KLQlpZiAo IXNsb3cpCisJZWxzZQogCXsKLQkJaW50CQkJbmF0dHMgPSB0dXBsZURlc2MtPm5hdHRzOwotCQlp bnQJCQlqID0gMTsKLQotCQkvKgotCQkgKiBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhIHR1cGxl IHdpdGggbm8gbnVsbHMgb3IgdmFyLXdpZHRocyB1cCB0bwotCQkgKiBhbmQgaW5jbHVkaW5nIHRo ZSB0YXJnZXQgYXR0cmlidXRlLCBzbyB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgb2Zmc2V0Ci0JCSAq IC4uLiBvbmx5IHdlIGRvbid0IGhhdmUgaXQgeWV0LCBvciB3ZSdkIG5vdCBoYXZlIGdvdCBoZXJl LiAgU2luY2UKLQkJICogaXQncyBjaGVhcCB0byBjb21wdXRlIG9mZnNldHMgZm9yIGZpeGVkLXdp ZHRoIGNvbHVtbnMsIHdlIHRha2UgdGhlCi0JCSAqIG9wcG9ydHVuaXR5IHRvIGluaXRpYWxpemUg dGhlIGNhY2hlZCBvZmZzZXRzIGZvciAqYWxsKiB0aGUgbGVhZGluZwotCQkgKiBmaXhlZC13aWR0 aCBjb2x1bW5zLCBpbiBob3BlIG9mIGF2b2lkaW5nIGZ1dHVyZSB2aXNpdHMgdG8gdGhpcwotCQkg KiByb3V0aW5lLgotCQkgKi8KLQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCAwKS0+ YXR0Y2FjaGVvZmYgPSAwOworCQkvKiBPdGhlcndpc2UsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcu Li4gKi8KKwkJc3RhcnRBdHRyID0gMDsKKwkJb2ZmID0gMDsKKwl9CiAKLQkJLyogd2UgbWlnaHQg aGF2ZSBzZXQgc29tZSBvZmZzZXRzIGluIHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3 aGlsZSAoaiA8IG5hdHRzICYmIFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0 dGNhY2hlb2ZmID4gMCkKLQkJCWorKzsKKwkvKgorCSAqIENhbGN1bGF0ZSAnb2ZmJyB1cCB0byB0 aGUgZmlyc3QgTlVMTCBhdHRyLiAgV2UgdXNlIHR3byBjaGVhcGVyIGxvb3BzCisJICogd2hlbiB0 aGUgdHVwbGUgaGFzIG5vIHZhcmlhYmxlLXdpZHRoIGNvbHVtbnMuICBXaGVuIHZhcmlhYmxlLXdp ZHRoCisJICogY29sdW1ucyBleGlzdHMsIHdlIHVzZSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSB0 byBtb3ZlIHRoZSBvZmZzZXQKKwkgKiBiZXlvbmQgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgorCSAq LworCWlmIChJbmRleFR1cGxlSGFzVmFyd2lkdGhzKHR1cCkpCisJeworCQkvKiBDYWxjdWxhdGUg dGhlIG9mZnNldCB1cCB1bnRpbCB0aGUgZmlyc3QgTlVMTCAqLworCQlmb3IgKGkgPSBzdGFydEF0 dHI7IGkgPCBmaXJzdE51bGxBdHRyOyBpKyspCisJCXsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKIAotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIGogLSAxKS0+YXR0Y2FjaGVvZmYgKwotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIo dHVwbGVEZXNjLCBqIC0gMSktPmF0dGxlbjsKKwkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnko b2ZmLAorCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCSAgY2F0dHItPmF0 dGxlbiwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2lu dGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOworCQl9CiAKLQkJZm9yICg7IGogPCBu YXR0czsgaisrKQorCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgYW55IHJlbWFpbmluZyBj b2x1bW5zLiAqLworCQlmb3IgKDsgaSA8IGF0dG51bTsgaSsrKQogCQl7Ci0JCQlDb21wYWN0QXR0 cmlidXRlICphdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopOworCQkJQXNz ZXJ0KGhhc251bGxzKTsKIAotCQkJaWYgKGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJYnJlYWs7CisJ CQlpZiAoYXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGludWU7CiAKLQkJCW9mZiA9IGF0dF9u b21pbmFsX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJY2F0dHIgPSBUdXBsZURl c2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2Zm OwotCi0JCQlvZmYgKz0gYXR0LT5hdHRsZW47CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5 KG9mZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5h dHRsZW4sCisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9p bnRlcihvZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKIAkJfQotCi0JCUFzc2VydChqID4g YXR0bnVtKTsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51 bSktPmF0dGNhY2hlb2ZmOwogCX0KIAllbHNlCiAJewotCQlib29sCQl1c2VjYWNoZSA9IHRydWU7 Ci0JCWludAkJCWk7CisJCS8qIEhhbmRsZSB0dXBsZXMgd2l0aCBvbmx5IGZpeGVkLXdpZHRoIGF0 dHJpYnV0ZXMgKi8KIAotCQkvKgotCQkgKiBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgdG8gd2Fs ayB0aGUgdHVwbGUgQ0FSRUZVTExZLiAgQnV0IHdlIHN0aWxsCi0JCSAqIG1pZ2h0IGJlIGFibGUg dG8gY2FjaGUgc29tZSBvZmZzZXRzIGZvciBuZXh0IHRpbWUuCi0JCSAqCi0JCSAqIE5vdGUgLSBU aGlzIGxvb3AgaXMgYSBsaXR0bGUgdHJpY2t5LiAgRm9yIGVhY2ggbm9uLW51bGwgYXR0cmlidXRl LAotCQkgKiB3ZSBoYXZlIHRvIGZpcnN0IGFjY291bnQgZm9yIGFsaWdubWVudCBwYWRkaW5nIGJl Zm9yZSB0aGUgYXR0ciwKLQkJICogdGhlbiBhZHZhbmNlIG92ZXIgdGhlIGF0dHIgYmFzZWQgb24g aXRzIGxlbmd0aC4gIE51bGxzIGhhdmUgbm8KLQkJICogc3RvcmFnZSBhbmQgbm8gYWxpZ25tZW50 IHBhZGRpbmcgZWl0aGVyLiAgV2UgY2FuIHVzZS9zZXQKLQkJICogYXR0Y2FjaGVvZmYgdW50aWwg d2UgcmVhY2ggZWl0aGVyIGEgbnVsbCBvciBhIHZhci13aWR0aCBhdHRyaWJ1dGUuCi0JCSAqLwot CQlvZmYgPSAwOwotCQlmb3IgKGkgPSAwOzsgaSsrKQkJLyogbG9vcCBleGl0IGlzIGF0ICJicmVh ayIgKi8KKwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgdXAgdW50aWwgdGhlIGZpcnN0IE5VTEwg Ki8KKwkJZm9yIChpID0gc3RhcnRBdHRyOyBpIDwgZmlyc3ROdWxsQXR0cjsgaSsrKQogCQl7Ci0J CQlDb21wYWN0QXR0cmlidXRlICphdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2Ms IGkpOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0J CQlpZiAoSW5kZXhUdXBsZUhhc051bGxzKHR1cCkgJiYgYXR0X2lzbnVsbChpLCBicCkpCi0JCQl7 Ci0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKLQkJCQljb250aW51ZTsJCS8qIHRoaXMgY2Fubm90IGJl IHRoZSB0YXJnZXQgYXR0ICovCi0JCQl9Ci0KLQkJCS8qIElmIHdlIGtub3cgdGhlIG5leHQgb2Zm c2V0LCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLwotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0 Y2FjaGVvZmYgPj0gMCkKLQkJCQlvZmYgPSBhdHQtPmF0dGNhY2hlb2ZmOwotCQkJZWxzZSBpZiAo YXR0LT5hdHRsZW4gPT0gLTEpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBjYW4gb25seSBjYWNo ZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJCSAqIG9mZnNl dCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQgYmUKLQkJ CQkgKiBubyBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4gdGhlIG9mZnNldCB3aWxsIGJlIHZh bGlkIGZvcgotCQkJCSAqIGVpdGhlciBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJ CQkgKi8KLQkJCQlpZiAodXNlY2FjaGUgJiYKLQkJCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWdu Ynkob2ZmLCBhdHQtPmF0dGFsaWduYnkpKQotCQkJCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwot CQkJCWVsc2UKLQkJCQl7Ci0JCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBhdHQt PmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCQkgIHRwICsgb2ZmKTsKLQkJCQkJdXNlY2FjaGUg PSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogbm90IHZhcmxlbmEs IHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCQlvZmYgPSBhdHRfbm9t aW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCUFzc2VydChjYXR0ci0+YXR0 bGVuID4gMCk7CisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFs aWduYnkpOworCQkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CisJCX0KIAotCQkJCWlmICh1c2VjYWNo ZSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCX0KKwkJLyogQ2FsY3VsYXRlIHRo ZSBvZmZzZXQgZm9yIGFueSByZW1haW5pbmcgY29sdW1ucy4gKi8KKwkJZm9yICg7IGkgPCBhdHRu dW07IGkrKykKKwkJeworCQkJQXNzZXJ0KGhhc251bGxzKTsKIAotCQkJaWYgKGkgPT0gYXR0bnVt KQotCQkJCWJyZWFrOworCQkJaWYgKGF0dF9pc251bGwoaSwgYnApKQorCQkJCWNvbnRpbnVlOwog Ci0JCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBhdHQtPmF0dGxlbiwgdHAgKyBv ZmYpOworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0J CQlpZiAodXNlY2FjaGUgJiYgYXR0LT5hdHRsZW4gPD0gMCkKLQkJCQl1c2VjYWNoZSA9IGZhbHNl OworCQkJQXNzZXJ0KGNhdHRyLT5hdHRsZW4gPiAwKTsKKwkJCW9mZiA9IGF0dF9ub21pbmFsX2Fs aWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSk7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsK IAkJfQogCX0KIAotCXJldHVybiBmZXRjaGF0dChUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2MsIGF0dG51bSksIHRwICsgb2ZmKTsKKwljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgYXR0bnVtKTsKKwlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHIt PmF0dGFsaWduYnksCisJCQkJCQkJICBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CisJcmV0dXJu IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiB9CiAKIC8qCkBAIC00ODAsNjMgKzM4Nyw4NyBA QCBpbmRleF9kZWZvcm1fdHVwbGVfaW50ZXJuYWwoVHVwbGVEZXNjIHR1cGxlRGVzY3JpcHRvciwK IAkJCQkJCQlEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCQkJY2hhciAqdHAsIGJp dHM4ICpicCwgaW50IGhhc251bGxzKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCWlu dAkJCW5hdHRzID0gdHVwbGVEZXNjcmlwdG9yLT5uYXR0czsgLyogbnVtYmVyIG9mIGF0dHMgdG8g ZXh0cmFjdCAqLwotCWludAkJCWF0dG51bTsKLQlpbnQJCQlvZmYgPSAwOwkJLyogb2Zmc2V0IGlu IHR1cGxlIGRhdGEgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGNhbiB3ZSB1c2Uvc2V0IGF0 dGNhY2hlb2ZmPyAqLworCWludAkJCWF0dG51bSA9IDA7CisJdWludDMyCQlvZmYgPSAwOwkJLyog b2Zmc2V0IGluIHR1cGxlIGRhdGEgKi8KKwlpbnQJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cjsK KwlpbnQJCQlmaXJzdE51bGxBdHRyOwogCiAJLyogQXNzZXJ0IHRvIHByb3RlY3QgY2FsbGVycyB3 aG8gYWxsb2NhdGUgZml4ZWQtc2l6ZSBhcnJheXMgKi8KIAlBc3NlcnQobmF0dHMgPD0gSU5ERVhf TUFYX0tFWVMpOwogCi0JZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKysp CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8K KwlBc3NlcnQodHVwbGVEZXNjcmlwdG9yLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7 CisKKwlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbih0dXBsZURlc2NyaXB0b3ItPmZpcnN0 Tm9uQ2FjaGVkT2Zmc2V0QXR0ciwgbmF0dHMpOworCisJaWYgKGhhc251bGxzKQorCXsKKwkJZmly c3ROdWxsQXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgbmF0dHMpOworCQlmaXJzdE5vbkNhY2hl T2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwgZmlyc3ROdWxsQXR0cik7 CisJfQorCWVsc2UKKwkJZmlyc3ROdWxsQXR0ciA9IG5hdHRzOworCisJaWYgKGZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyID4gMCkKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQgPSBUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2NyaXB0b3IsIGF0dG51bSk7CisjaWZkZWYgVVNFX0FT U0VSVF9DSEVDS0lORworCQkvKiBJbiBBc3NlcnQgZW5hYmxlZCBidWlsZHMsIHZlcmlmeSBhdHRj YWNoZW9mZiBpcyBjb3JyZWN0ICovCisJCW9mZiA9IDA7CisjZW5kaWYKIAotCQlpZiAoaGFzbnVs bHMgJiYgYXR0X2lzbnVsbChhdHRudW0sIGJwKSkKKwkJZG8KIAkJewotCQkJdmFsdWVzW2F0dG51 bV0gPSAoRGF0dW0pIDA7Ci0JCQlpc251bGxbYXR0bnVtXSA9IHRydWU7Ci0JCQlzbG93ID0gdHJ1 ZTsJCS8qIGNhbid0IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCi0JCQljb250aW51ZTsKLQkJ fQorCQkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFj dEF0dHIodHVwbGVEZXNjcmlwdG9yLCBhdHRudW0pOwogCi0JCWlzbnVsbFthdHRudW1dID0gZmFs c2U7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJb2ZmID0gYXR0X25vbWluYWxfYWxp Z25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwkJCUFzc2VydChvZmYgPT0gY2F0dHItPmF0 dGNhY2hlb2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+YXR0bGVuOworI2VuZGlmCiAKLQkJaWYgKCFz bG93ICYmIHRoaXNhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlvZmYgPSB0aGlzYXR0LT5hdHRj YWNoZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0JCQkvKgot CQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0 ZSBpZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRo YXQgdGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0 aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25lZCBvciB1 bmFsaWduZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAmJgotCQkJCW9mZiA9PSBhdHRf bm9taW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhpc2F0dC0+ YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb2ZmID0gYXR0X3BvaW50ZXJf YWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCSAgdHAgKyBv ZmYpOwotCQkJCXNsb3cgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90 IHZhcmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCW9mZiA9 IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCXZhbHVl c1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgY2F0dHItPmF0dGNhY2hlb2ZmLCBjYXR0 ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSBjYXR0ci0+YXR0bGVuKTsKKwkJfSB3aGlsZSAoKyth dHRudW0gPCBmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0cik7CiAKLQkJCWlmICghc2xvdykKLQkJCQl0 aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJfQorCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVv ZmYgKyBjYXR0ci0+YXR0bGVuOworCX0KIAotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRo aXNhdHQsIHRwICsgb2ZmKTsKKwlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVt KyspCisJeworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQljYXR0ciA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKworCQkvKiBhbGlnbiAnb2ZmJywg ZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJ CXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAg Jm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgY2F0dHIt PmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSk7CisJfQogCi0JCW9mZiA9 IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIHRoaXNhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOwor CWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCisJeworCQlBc3NlcnQoaGFzbnVsbHMp OwogCi0JCWlmICh0aGlzYXR0LT5hdHRsZW4gPD0gMCkKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2Fu J3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KKwkJaWYgKGF0dF9pc251bGwoYXR0bnVtLCBi cCkpCisJCXsKKwkJCXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAwOworCQkJaXNudWxsW2F0dG51 bV0gPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNl OworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVt KTsKKworCQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9m ZiBiZXlvbmQgdGhlIGRhdHVtICovCisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhl bl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2 YWwsCisJCQkJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0 YWxpZ25ieSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9u L3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCmluZGV4IDIx MzczODVhODMzLi5jNjg1NjEzMzdkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMK QEAgLTE5Nyw2ICsxOTcsMTAgQEAgQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoaW50IG5hdHRzKQog CWRlc2MtPnRkdHlwbW9kID0gLTE7CiAJZGVzYy0+dGRyZWZjb3VudCA9IC0xOwkJLyogYXNzdW1l IG5vdCByZWZlcmVuY2UtY291bnRlZCAqLwogCisJLyogVGhpcyB3aWxsIGJlIHNldCB0byB0aGUg Y29ycmVjdCB2YWx1ZSBieSBUdXBsZURlc2NGaW5hbGl6ZSgpICovCisJZGVzYy0+Zmlyc3ROb25D YWNoZWRPZmZzZXRBdHRyID0gLTE7CisJZGVzYy0+Zmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IC0x OworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTQ1Nyw2ICs0NjEsOSBAQCBUdXBsZURlc2NDb3B5 KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpCiAgKgkJZGVzY3JpcHRvciB0byBhbm90aGVy LgogICoKICAqICEhISBDb25zdHJhaW50cyBhbmQgZGVmYXVsdHMgYXJlIG5vdCBjb3BpZWQgISEh CisgKgorICogVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBjYWxsaW5nIFR1cGxlRGVzY0Zp bmFsaXplKCkgb24gJ2RzdCcgb25jZSBhbGwKKyAqIFR1cGxlRGVzYyBjaGFuZ2VzIGhhdmUgYmVl biBtYWRlLgogICovCiB2b2lkCiBUdXBsZURlc2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0 ck51bWJlciBkc3RBdHRubywKQEAgLTQ4OSw2ICs0OTYsNTAgQEAgVHVwbGVEZXNjQ29weUVudHJ5 KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJcG9wdWxhdGVfY29tcGFjdF9h dHRyaWJ1dGUoZHN0LCBkc3RBdHRubyAtIDEpOwogfQogCisvKgorICogVHVwbGVEZXNjRmluYWxp emUKKyAqCQlGaW5hbGl6ZSB0aGUgZ2l2ZW4gVHVwbGVEZXNjLiAgVGhpcyBtdXN0IGJlIGNhbGxl ZCBhZnRlciB0aGUKKyAqCQlhdHRyaWJ1dGVzIGFycmF5cyBoYXZlIGJlZW4gcG9wdWxhdGVkIG9y IGFkanVzdGVkIGJ5IGFueSBjb2RlLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHBvcHVs YXRlX2NvbXBhY3RfYXR0cmlidXRlKCkgYW5kIGJlZm9yZQorICogQmxlc3NUdXBsZURlc2MoKS4K KyAqLwordm9pZAorVHVwbGVEZXNjRmluYWxpemUoVHVwbGVEZXNjIHR1cGRlc2MpCit7CisJaW50 CQkJZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gMDsKKwlpbnQJCQlmaXJzdE5vbkd1YXJhbnRl ZWRBdHRyID0gdHVwZGVzYy0+bmF0dHM7CisJaW50CQkJb2ZmID0gMDsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNh dHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgaSk7CisKKwkJLyoKKwkJICogRmlu ZCB0aGUgaGlnaGVzdCBhdHRudW0gd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBleGlzdCBpbiBhbGwg dHVwbGVzCisJCSAqIGluIHRoZSB0YWJsZS4gIFdlIGN1cnJlbnRseSBvbmx5IHBheSBhdHRlbnRp b24gdG8gYnl2YWwgYXR0cmlidXRlcworCQkgKiB0byBhbGxvdyBhZGRpdGlvbmFsIG9wdGltaXph dGlvbnMgZHVyaW5nIHR1cGxlIGRlZm9ybWF0aW9uLgorCQkgKi8KKwkJaWYgKGZpcnN0Tm9uR3Vh cmFudGVlZEF0dHIgPT0gdHVwZGVzYy0+bmF0dHMgJiYKKwkJCShjYXR0ci0+YXR0bnVsbGFiaWxp dHkgIT0gQVRUTlVMTEFCTEVfVkFMSUQgfHwgIWNhdHRyLT5hdHRieXZhbCB8fAorCQkJIGNhdHRy LT5hdHRoYXNtaXNzaW5nIHx8IGNhdHRyLT5hdHRpc2Ryb3BwZWQgfHwgY2F0dHItPmF0dGxlbiA8 PSAwKSkKKwkJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBpOworCisJCWlmIChjYXR0ci0+YXR0 bGVuIDw9IDApCisJCQlicmVhazsKKworCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwg Y2F0dHItPmF0dGFsaWduYnkpOworCisJCWNhdHRyLT5hdHRjYWNoZW9mZiA9IG9mZjsKKworCQlv ZmYgKz0gY2F0dHItPmF0dGxlbjsKKwkJZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gaSArIDE7 CisJfQorCisJdHVwZGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyID0gZmlyc3ROb25DYWNo ZWRPZmZzZXRBdHRyOworCXR1cGRlc2MtPmZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBmaXJzdE5v bkd1YXJhbnRlZWRBdHRyOworfQorCiAvKgogICogRnJlZSBhIFR1cGxlRGVzYyBpbmNsdWRpbmcg YWxsIHN1YnN0cnVjdHVyZQogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5k ZXggYjI0NmU4MTI3ZGIuLmE0Njk0YmQ4MDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jCkBAIC0zMzUsOSArMzM1LDYgQEAgZ2V0U3BHaXN0VHVwbGVEZXNjKFJlbGF0aW9uIGlu ZGV4LCBTcEdpc3RUeXBlRGVzYyAqa2V5VHlwZSkKIAkJLyogV2Ugc2hvdWxkbid0IG5lZWQgdG8g Ym90aGVyIHdpdGggbWFraW5nIHRoZXNlIHZhbGlkOiAqLwogCQlhdHQtPmF0dGNvbXByZXNzaW9u ID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCQlhdHQtPmF0dGNvbGxhdGlvbiA9IEludmFs aWRPaWQ7Ci0JCS8qIEluIGNhc2Ugd2UgY2hhbmdlZCB0eXBsZW4sIHdlJ2QgYmV0dGVyIHJlc2V0 IGZvbGxvd2luZyBvZmZzZXRzICovCi0JCWZvciAoaW50IGkgPSBzcGdGaXJzdEluY2x1ZGVDb2x1 bW47IGkgPCBvdXRUdXBEZXNjLT5uYXR0czsgaSsrKQotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIo b3V0VHVwRGVzYywgaSktPmF0dGNhY2hlb2ZmID0gLTE7CiAKIAkJcG9wdWxhdGVfY29tcGFjdF9h dHRyaWJ1dGUob3V0VHVwRGVzYywgc3BnS2V5Q29sdW1uKTsKIAkJVHVwbGVEZXNjRmluYWxpemUo b3V0VHVwRGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBiZmQzZWJjNjAxZS4uMGI2 MzU0ODY5OTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtMTk0NCw3ICsxOTQ0LDcgQEAg RXhlY1BhcnRpdGlvbkNoZWNrRW1pdEVycm9yKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCSAqLwogCQlpZiAobWFwICE9IE5VTEwpCiAJCQlzbG90ID0gZXhlY3V0ZV9hdHRyX21hcF9z bG90KG1hcCwgc2xvdCwKLQkJCQkJCQkJCQkgTWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZU VFNPcHNWaXJ0dWFsKSk7CisJCQkJCQkJCQkJIE1ha2VUdXBsZVRhYmxlU2xvdCh0dXBkZXNjLCAm VFRTT3BzVmlydHVhbCwgMCkpOwogCQltb2RpZmllZENvbHMgPSBibXNfdW5pb24oRXhlY0dldElu c2VydGVkQ29scyhyb290cmVsLCBlc3RhdGUpLAogCQkJCQkJCQkgRXhlY0dldFVwZGF0ZWRDb2xz KHJvb3RyZWwsIGVzdGF0ZSkpOwogCX0KQEAgLTIwNjAsNyArMjA2MCw3IEBAIEV4ZWNDb25zdHJh aW50cyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCSAqLwogCQkJCWlmIChtYXAg IT0gTlVMTCkKIAkJCQkJc2xvdCA9IGV4ZWN1dGVfYXR0cl9tYXBfc2xvdChtYXAsIHNsb3QsCi0J CQkJCQkJCQkJCQkgTWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKSk7 CisJCQkJCQkJCQkJCQkgTWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFs LCAwKSk7CiAJCQkJbW9kaWZpZWRDb2xzID0gYm1zX3VuaW9uKEV4ZWNHZXRJbnNlcnRlZENvbHMo cm9vdHJlbCwgZXN0YXRlKSwKIAkJCQkJCQkJCQkgRXhlY0dldFVwZGF0ZWRDb2xzKHJvb3RyZWws IGVzdGF0ZSkpOwogCQkJCXJlbCA9IHJvb3RyZWwtPnJpX1JlbGF0aW9uRGVzYzsKQEAgLTIxOTYs NyArMjE5Niw3IEBAIFJlcG9ydE5vdE51bGxWaW9sYXRpb25FcnJvcihSZXN1bHRSZWxJbmZvICpy ZXN1bHRSZWxJbmZvLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJICovCiAJCWlmIChtYXAgIT0g TlVMTCkKIAkJCXNsb3QgPSBleGVjdXRlX2F0dHJfbWFwX3Nsb3QobWFwLCBzbG90LAotCQkJCQkJ CQkJCSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpKTsKKwkJCQkJ CQkJCQkgTWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsLCAwKSk7CiAJ CW1vZGlmaWVkQ29scyA9IGJtc191bmlvbihFeGVjR2V0SW5zZXJ0ZWRDb2xzKHJvb3RyZWwsIGVz dGF0ZSksCiAJCQkJCQkJCSBFeGVjR2V0VXBkYXRlZENvbHMocm9vdHJlbCwgZXN0YXRlKSk7CiAJ CXJlbCA9IHJvb3RyZWwtPnJpX1JlbGF0aW9uRGVzYzsKQEAgLTIzMDQsNyArMjMwNCw3IEBAIEV4 ZWNXaXRoQ2hlY2tPcHRpb25zKFdDT0tpbmQga2luZCwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKIAkJCQkJCSAqLwogCQkJCQkJaWYgKG1hcCAhPSBOVUxMKQogCQkJCQkJCXNsb3QgPSBl eGVjdXRlX2F0dHJfbWFwX3Nsb3QobWFwLCBzbG90LAotCQkJCQkJCQkJCQkJCQkgTWFrZVR1cGxl VGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKSk7CisJCQkJCQkJCQkJCQkJCSBNYWtl VHVwbGVUYWJsZVNsb3QodHVwZGVzYywgJlRUU09wc1ZpcnR1YWwsIDApKTsKIAogCQkJCQkJbW9k aWZpZWRDb2xzID0gYm1zX3VuaW9uKEV4ZWNHZXRJbnNlcnRlZENvbHMocm9vdHJlbCwgZXN0YXRl KSwKIAkJCQkJCQkJCQkJCSBFeGVjR2V0VXBkYXRlZENvbHMocm9vdHJlbCwgZXN0YXRlKSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggMDdiMjQ4YWE1ZjMuLjE0YjJhOWYwYWY2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC05OTIsMTE4ICs5OTIsNiBAQCB0dHNfYnVm ZmVyX2hlYXBfc3RvcmVfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBs ZSwKIAl9CiB9CiAKLS8qCi0gKiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsCi0gKgkJ QW4gYWx3YXlzIGlubGluZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHVzZSBpbiBzbG90X2RlZm9ybV9o ZWFwX3R1cGxlIHRvCi0gKgkJYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGVtaXQgc3BlY2lhbGl6ZWQg dmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiBmb3IKLSAqCQl2YXJpb3VzIGNvbWJpbmF0aW9ucyBv ZiAic2xvdyIgYW5kICJoYXNudWxscyIuICBGb3IgZXhhbXBsZSwgaWYgYQotICoJCWdpdmVuIHR1 cGxlIGhhcyBubyBudWxscywgdGhlbiB3ZSBuZWVkbid0IGNoZWNrICJoYXNudWxscyIgZm9yIGV2 ZXJ5Ci0gKgkJYXR0cmlidXRlIHRoYXQgd2UncmUgZGVmb3JtaW5nLiAgVGhlIGNhbGxlciBjYW4g anVzdCBjYWxsIHRoaXMKLSAqCQlmdW5jdGlvbiB3aXRoIGhhc251bGxzIHNldCB0byBjb25zdGFu dC1mYWxzZSBhbmQgaGF2ZSB0aGUgY29tcGlsZXIKLSAqCQlyZW1vdmUgdGhlIGNvbnN0YW50LWZh bHNlIGJyYW5jaGVzIGFuZCBlbWl0IG1vcmUgb3B0aW1hbCBjb2RlLgotICoKLSAqIFJldHVybnMg dGhlIG5leHQgYXR0bnVtIHRvIGRlZm9ybSwgd2hpY2ggY2FuIGJlIGVxdWFsIHRvIG5hdHRzIHdo ZW4gdGhlCi0gKiBmdW5jdGlvbiBtYW5hZ2VzIHRvIGRlZm9ybSBhbGwgcmVxdWVzdGVkIGF0dHJp YnV0ZXMuICAqb2ZmcCBpcyBhbiBpbnB1dCBhbmQKLSAqIG91dHB1dCBwYXJhbWV0ZXIgd2hpY2gg aXMgdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgdHVwbGUgdG8gc3RhcnQgZGVmb3JtaW5nCi0g KiBmcm9tIHdoaWNoLCBvbiByZXR1cm4sIGdldHMgc2V0IHRvIHRoZSBvZmZzZXQgd2hlcmUgdGhl IG5leHQgYXR0cmlidXRlCi0gKiBzaG91bGQgYmUgZGVmb3JtZWQgZnJvbS4gICpzbG93cCBpcyBz ZXQgdG8gdHJ1ZSB3aGVuIHN1YnNlcXVlbnQgZGVmb3JtaW5nCi0gKiBvZiB0aGlzIHR1cGxlIG11 c3QgdXNlIGEgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggInNsb3ciIHBhc3NlZCBhcwot ICogdHJ1ZS4KLSAqCi0gKiBDYWxsZXJzIGNhbm5vdCBhc3N1bWUgd2hlbiB3ZSByZXR1cm4gImF0 dG51bSIgKGkuZS4gYWxsIHJlcXVlc3RlZAotICogYXR0cmlidXRlcyBoYXZlIGJlZW4gZGVmb3Jt ZWQpIHRoYXQgc2xvdyBtb2RlIGlzbid0IHJlcXVpcmVkIGZvciBhbnkKLSAqIGFkZGl0aW9uYWwg ZGVmb3JtaW5nIGFzIHRoZSBmaW5hbCBhdHRyaWJ1dGUgbWF5IGhhdmUgY2F1c2VkIGEgc3dpdGNo IHRvCi0gKiBzbG93IG1vZGUuCi0gKi8KLXN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGlu ZSBpbnQKLXNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwoVHVwbGVUYWJsZVNsb3QgKnNs b3QsIEhlYXBUdXBsZSB0dXBsZSwKLQkJCQkJCQkJaW50IGF0dG51bSwgaW50IG5hdHRzLCBib29s IHNsb3csCi0JCQkJCQkJCWJvb2wgaGFzbnVsbHMsIHVpbnQzMiAqb2ZmcCwgYm9vbCAqc2xvd3Ap Ci17Ci0JVHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3I7Ci0J RGF0dW0JICAgKnZhbHVlcyA9IHNsb3QtPnR0c192YWx1ZXM7Ci0JYm9vbAkgICAqaXNudWxsID0g c2xvdC0+dHRzX2lzbnVsbDsKLQlIZWFwVHVwbGVIZWFkZXIgdHVwID0gdHVwbGUtPnRfZGF0YTsK LQljaGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KLQliaXRzOAkgICAqYnAg PSB0dXAtPnRfYml0czsJLyogcHRyIHRvIG51bGwgYml0bWFwIGluIHR1cGxlICovCi0JYm9vbAkJ c2xvd25leHQgPSBmYWxzZTsKLQotCXRwID0gKGNoYXIgKikgdHVwICsgdHVwLT50X2hvZmY7Ci0K LQlmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQotCXsKLQkJQ29tcGFjdEF0dHJpYnV0 ZSAqdGhpc2F0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKLQot CQlpZiAoaGFzbnVsbHMgJiYgYXR0X2lzbnVsbChhdHRudW0sIGJwKSkKLQkJewotCQkJdmFsdWVz W2F0dG51bV0gPSAoRGF0dW0pIDA7Ci0JCQlpc251bGxbYXR0bnVtXSA9IHRydWU7Ci0JCQlpZiAo IXNsb3cpCi0JCQl7Ci0JCQkJKnNsb3dwID0gdHJ1ZTsKLQkJCQlyZXR1cm4gYXR0bnVtICsgMTsK LQkJCX0KLQkJCWVsc2UKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCWlzbnVsbFthdHRudW1dID0g ZmFsc2U7Ci0KLQkJLyogY2FsY3VsYXRlIHRoZSBvZmZzZXQgb2YgdGhpcyBhdHRyaWJ1dGUgKi8K LQkJaWYgKCFzbG93ICYmIHRoaXNhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQkqb2ZmcCA9IHRo aXNhdHQtPmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0aGlzYXR0LT5hdHRsZW4gPT0gLTEpCi0J CXsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxl bmEgYXR0cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxp Z25lZCwgc28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwotCQkJICogcGFkIGJ5dGVzIGluIGFueSBj YXNlOiB0aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IgZWl0aGVyCi0JCQkgKiBhbiBh bGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCSAqLwotCQkJaWYgKCFzbG93ICYmICpvZmZw ID09IGF0dF9ub21pbmFsX2FsaWduYnkoKm9mZnAsIHRoaXNhdHQtPmF0dGFsaWduYnkpKQotCQkJ CXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gKm9mZnA7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJKm9mZnAg PSBhdHRfcG9pbnRlcl9hbGlnbmJ5KCpvZmZwLAotCQkJCQkJCQkJCQl0aGlzYXR0LT5hdHRhbGln bmJ5LAotCQkJCQkJCQkJCQktMSwKLQkJCQkJCQkJCQkJdHAgKyAqb2ZmcCk7Ci0KLQkJCQlpZiAo IXNsb3cpCi0JCQkJCXNsb3duZXh0ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJ CS8qIG5vdCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0J CQkqb2ZmcCA9IGF0dF9ub21pbmFsX2FsaWduYnkoKm9mZnAsIHRoaXNhdHQtPmF0dGFsaWduYnkp OwotCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPSAqb2ZmcDsKLQkJ fQotCi0JCXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQodGhpc2F0dCwgdHAgKyAqb2ZmcCk7Ci0K LQkJKm9mZnAgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKm9mZnAsIHRoaXNhdHQtPmF0dGxlbiwg dHAgKyAqb2ZmcCk7Ci0KLQkJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBzd2l0Y2ggdG8gc2xvdyBt b2RlICovCi0JCWlmICghc2xvdykKLQkJewotCQkJLyoKLQkJCSAqIFdlJ3JlIHVuYWJsZSB0byBk ZWZvcm0gYW55IGZ1cnRoZXIgaWYgdGhlIGFib3ZlIGNvZGUgc2V0Ci0JCQkgKiAnc2xvd25leHQn LCBvciBpZiB0aGlzIGlzbid0IGEgZml4ZWQtd2lkdGggYXR0cmlidXRlLgotCQkJICovCi0JCQlp ZiAoc2xvd25leHQgfHwgdGhpc2F0dC0+YXR0bGVuIDw9IDApCi0JCQl7Ci0JCQkJKnNsb3dwID0g dHJ1ZTsKLQkJCQlyZXR1cm4gYXR0bnVtICsgMTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBu YXR0czsKLX0KLQogLyoKICAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUKICAqCQlHaXZlbiBhIFR1 cGxlVGFibGVTbG90LCBleHRyYWN0IGRhdGEgZnJvbSB0aGUgc2xvdCdzIHBoeXNpY2FsIHR1cGxl CkBAIC0xMTI1LDk0ICsxMDEzLDIyOCBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxp bmUgdm9pZAogc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVh cFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAJCQkJCSAgIGludCByZXFuYXR0cykKIHsKLQli b29sCQloYXNudWxscyA9IEhlYXBUdXBsZUhhc051bGxzKHR1cGxlKTsKLQlpbnQJCQlhdHRudW07 CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CisJVHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3Qt PnR0c190dXBsZURlc2NyaXB0b3I7CisJSGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2Rh dGE7CisJc2l6ZV90CQlhdHRudW07CisJaW50CQkJZmlyc3ROb25DYWNoZU9mZnNldEF0dHI7CisJ aW50CQkJZmlyc3ROb25HdWFyYW50ZWVkQXR0cjsKKwlpbnQJCQlmaXJzdE51bGxBdHRyOwogCWlu dAkJCW5hdHRzOworCURhdHVtCSAgICp2YWx1ZXM7CisJYm9vbAkgICAqaXNudWxsOworCWNoYXIJ ICAgKnRwOwkJCQkvKiBwdHIgdG8gdHVwbGUgZGF0YSAqLwogCXVpbnQzMgkJb2ZmOwkJCS8qIG9m ZnNldCBpbiB0dXBsZSBkYXRhICovCi0JYm9vbAkJc2xvdzsJCQkvKiBjYW4gd2UgdXNlL3NldCBh dHRjYWNoZW9mZj8gKi8KIAotCS8qIFdlIGNhbiBvbmx5IGZldGNoIGFzIG1hbnkgYXR0cmlidXRl cyBhcyB0aGUgdHVwbGUgaGFzLiAqLwotCW5hdHRzID0gTWluKEhlYXBUdXBsZUhlYWRlckdldE5h dHRzKHR1cGxlLT50X2RhdGEpLCByZXFuYXR0cyk7CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRv IGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjLT5maXJzdE5v bkNhY2hlZE9mZnNldEF0dHIgPj0gMCk7CisKKwlpc251bGwgPSBzbG90LT50dHNfaXNudWxsOwog CiAJLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBmaXJzdCBjYWxsIGZvciB0aGlzIHR1cGxlLCBh bmQgaW5pdGlhbGl6ZSBvciByZXN0b3JlCi0JICogbG9vcCBzdGF0ZS4KKwkgKiBTb21lIGNhbGxl cnMgbWF5IGZvcm0gYW5kIGRlZm9ybSB0dXBsZXMgcHJpb3IgdG8gTk9UIE5VTEwgY29uc3RyYWlu dHMKKwkgKiBiZWluZyBjaGVja2VkLiAgSGVyZSB3ZSdkIGxpa2UgdG8gb3B0aW1pemUgdGhlIGNh c2Ugd2hlcmUgd2Ugb25seSBuZWVkCisJICogdG8gZmV0Y2ggYXR0cmlidXRlcyBiZWZvcmUgb3Ig dXAgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBhdHRyaWJ1dGUgaXMKKwkgKiBndWFyYW50ZWVkIHRv IGV4aXN0IGluIHRoZSB0dXBsZS4gIFdlIHJlbHkgb24gdGhlIHNsb3QgZmxhZyBiZWluZyBzZXQK KwkgKiBjb3JyZWN0bHkgdG8gb25seSBlbmFibGUgdGhpcyBvcHRpbWl6YXRpb24gd2hlbiBpdCdz IHZhbGlkIHRvIGRvIHNvLgorCSAqIFRoaXMgb3B0aW1pemF0aW9uIGFsbG93cyB1cyB0byBzYXZl IGZldGNoaW5nIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcworCSAqIGZyb20gdGhlIHR1cGxlIGFu ZCBzYXZlcyB0aGUgYWRkaXRpb25hbCBjb3N0IG9mIGhhbmRsaW5nIG5vbi1ieXZhbAorCSAqIGF0 dHJzLgogCSAqLworCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHIgPSBNaW4ocmVxbmF0dHMsIHNsb3Qt PnR0c19maXJzdF9ub25ndWFyYW50ZWVkKTsKKworCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyID0g dHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZnNldEF0dHI7CisKKwlpZiAoSGVhcFR1cGxlSGFz TnVsbHModHVwbGUpKQorCXsKKwkJbmF0dHMgPSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXAp OworCQl0cCA9IChjaGFyICopIHR1cCArIE1BWEFMSUdOKG9mZnNldG9mKEhlYXBUdXBsZUhlYWRl ckRhdGEsIHRfYml0cykgKworCQkJCQkJCQkJIEJJVE1BUExFTihuYXR0cykpOworCisJCW5hdHRz ID0gTWluKG5hdHRzLCByZXFuYXR0cyk7CisJCWlmIChuYXR0cyA+IGZpcnN0Tm9uR3VhcmFudGVl ZEF0dHIpCisJCXsKKwkJCWJpdHM4CSAgICpicCA9IHR1cC0+dF9iaXRzOworCisJCQkvKiBGaW5k IHRoZSBmaXJzdCBOVUxMIGF0dHIgKi8KKwkJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0 dHIoYnAsIG5hdHRzKTsKKworCQkJLyoKKwkJCSAqIEFuZCBwb3B1bGF0ZSB0aGUgaXNudWxsIGFy cmF5IGZvciBhbGwgYXR0cmlidXRlcyBiZWluZyBmZXRjaGVkCisJCQkgKiBmcm9tIHRoZSB0dXBs ZS4KKwkJCSAqLworCQkJcG9wdWxhdGVfaXNudWxsX2FycmF5KGJwLCBuYXR0cywgaXNudWxsKTsK KworCQkJLyogV2UgY2FuIG9ubHkgdXNlIGFueSBjYWNoZWQgb2Zmc2V0cyB1bnRpbCB0aGUgZmly c3QgTlVMTCBhdHRyICovCisJCQlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5v bkNhY2hlT2Zmc2V0QXR0ciwKKwkJCQkJCQkJCQkgIGZpcnN0TnVsbEF0dHIpOworCQl9CisJCWVs c2UKKwkJeworCQkJLyogT3RoZXJ3aXNlIGFsbCByZXF1aXJlZCBjb2x1bW5zIGFyZSBndWFyYW50 ZWVkIHRvIGV4aXN0ICovCisJCQlmaXJzdE51bGxBdHRyID0gbmF0dHM7CisJCX0KKwl9CisJZWxz ZQorCXsKKwkJdHAgPSAoY2hhciAqKSB0dXAgKyBNQVhBTElHTihvZmZzZXRvZihIZWFwVHVwbGVI ZWFkZXJEYXRhLCB0X2JpdHMpKTsKKworCQkvKgorCQkgKiBXZSBvbmx5IG5lZWQgdG8gbG9vayBh dCB0aGUgdHVwbGUncyBuYXR0cyBpZiB3ZSBuZWVkIG1vcmUgdGhhbiB0aGUKKwkJICogZ3VhcmFu dGVlZCBudW1iZXIgb2YgY29sdW1ucworCQkgKi8KKwkJaWYgKHJlcW5hdHRzID4gZmlyc3ROb25H dWFyYW50ZWVkQXR0cikKKwkJCW5hdHRzID0gTWluKEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1 cCksIHJlcW5hdHRzKTsKKwkJZWxzZQorCQl7CisJCQkvKiBObyBuZWVkIHRvIGFjY2VzcyB0aGUg bnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gdGhlIHR1cGxlICovCisJCQluYXR0cyA9IHJlcW5hdHRz OworCQl9CisKKwkJLyogQWxsIGF0dHJzIGNhbiBiZSBmZXRjaGVkIHdpdGhvdXQgY2hlY2tpbmcg Zm9yIE5VTExzICovCisJCWZpcnN0TnVsbEF0dHIgPSBuYXR0czsKKwl9CisKIAlhdHRudW0gPSBz bG90LT50dHNfbnZhbGlkOworCXZhbHVlcyA9IHNsb3QtPnR0c192YWx1ZXM7CiAJc2xvdC0+dHRz X252YWxpZCA9IHJlcW5hdHRzOwotCWlmIChhdHRudW0gPT0gMCkKKworCS8qIEVuc3VyZSB3ZSBj YWxjdWxhdGVkIHRwIGNvcnJlY3RseSAqLworCUFzc2VydCh0cCA9PSAoY2hhciAqKSB0dXAgKyB0 dXAtPnRfaG9mZik7CisKKwlpZiAoYXR0bnVtIDwgZmlyc3ROb25HdWFyYW50ZWVkQXR0cikKIAl7 Ci0JCS8qIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwotCQlvZmYgPSAwOwotCQlz bG93ID0gZmFsc2U7CisJCWludAkJCWF0dGxlbjsKKworCQlmb3IgKDsgYXR0bnVtIDwgZmlyc3RO b25HdWFyYW50ZWVkQXR0cjsgYXR0bnVtKyspCisJCXsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFs c2U7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsK KwkJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47CisKKwkJCS8qIFdlIGRvbid0IGV4cGVjdCBhbnkg bm9uLWJ5dmFsIHR5cGVzICovCisJCQlwZ19hc3N1bWUoYXR0bGVuID4gMCk7CisJCQlBc3NlcnQo Y2F0dHItPmF0dGJ5dmFsID09IHRydWUpOworCisJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7 CisJCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dF9ub2Vycih0cCArIG9mZiwgdHJ1ZSwgYXR0 bGVuKTsKKwkJfQorCisJCW9mZiArPSBhdHRsZW47CisKKwkJaWYgKGF0dG51bSA9PSByZXFuYXR0 cykKKwkJCWdvdG8gZG9uZTsKIAl9CiAJZWxzZQogCXsKIAkJLyogUmVzdG9yZSBzdGF0ZSBmcm9t IHByZXZpb3VzIGV4ZWN1dGlvbiAqLwogCQlvZmYgPSAqb2ZmcDsKLQkJc2xvdyA9IFRUU19TTE9X KHNsb3QpOworCisJCS8qIFdlIGV4cGVjdCAqb2ZmcCB0byBiZSBzZXQgdG8gMCB3aGVuIGF0dG51 bSA9PSAwICovCisJCUFzc2VydChvZmYgPT0gMCB8fCBhdHRudW0gPiAwKTsKIAl9CiAKKwkvKiBX ZSBjYW4gb25seSBmZXRjaCBhcyBtYW55IGF0dHJpYnV0ZXMgYXMgdGhlIHR1cGxlIGhhcy4gKi8K KwlmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwg bmF0dHMpOworCiAJLyoKLQkgKiBJZiAnc2xvdycgaXNuJ3Qgc2V0LCB0cnkgZGVmb3JtaW5nIHVz aW5nIGRlZm9ybWluZyBjb2RlIHRoYXQgZG9lcyBub3QKLQkgKiBjb250YWluIGFueSBvZiB0aGUg ZXh0cmEgY2hlY2tzIHJlcXVpcmVkIGZvciBub24tZml4ZWQgb2Zmc2V0Ci0JICogZGVmb3JtaW5n LiAgRHVyaW5nIGRlZm9ybWluZywgaWYgb3Igd2hlbiB3ZSBmaW5kIGEgTlVMTCBvciBhIHZhcmlh YmxlCi0JICogbGVuZ3RoIGF0dHJpYnV0ZSwgd2UnbGwgc3dpdGNoIHRvIGEgZGVmb3JtaW5nIG1l dGhvZCB3aGljaCBpbmNsdWRlcyB0aGUKLQkgKiBleHRyYSBjb2RlIHJlcXVpcmVkIGZvciBub24t Zml4ZWQgb2Zmc2V0IGRlZm9ybWluZywgYS5rLmEgc2xvdyBtb2RlLgotCSAqIEJlY2F1c2UgdGhp cyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCwgd2UgaW5saW5lCi0JICogc2xvdF9kZWZvcm1faGVh cF90dXBsZV9pbnRlcm5hbCBwYXNzaW5nIHRoZSAnc2xvdycgYW5kICdoYXNudWxsJwotCSAqIHBh cmFtZXRlcnMgYXMgY29uc3RhbnRzIHRvIGFsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHNwZWNp YWxpemVkIGNvZGUKLQkgKiB3aXRoIHRoZSBrbm93bi1jb25zdCBmYWxzZSBjb21wYXJpc29ucyBh bmQgc3Vic2VxdWVudCBicmFuY2hlcyByZW1vdmVkLgorCSAqIEhhbmRsZSB0aGUgcG9ydGlvbiBv ZiB0aGUgdHVwbGUgdGhhdCB3ZSBoYXZlIGNhY2hlZCB0aGUgb2Zmc2V0IGZvciB1cAorCSAqIHRv IHRoZSBmaXJzdCBOVUxMIGF0dHJpYnV0ZS4gIFRoZSBvZmZzZXQgaXMgZWZmZWN0aXZlbHkgZml4 ZWQgZm9yCisJICogdGhlc2UsIHNvIHdlIGNhbiB1c2UgdGhlIENvbXBhY3RBdHRyaWJ1dGUncyBh dHRjYWNoZW9mZi4KIAkgKi8KLQlpZiAoIXNsb3cpCisJaWYgKGF0dG51bSA8IGZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyKQogCXsKLQkJLyogVHVwbGUgd2l0aG91dCBhbnkgTlVMTHM/IFdlIGNhbiBz a2lwIGRvaW5nIGFueSBOVUxMIGNoZWNraW5nICovCi0JCWlmICghaGFzbnVsbHMpCi0JCQlhdHRu dW0gPSBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsKHNsb3QsCi0JCQkJCQkJCQkJCQkJ IHR1cGxlLAotCQkJCQkJCQkJCQkJCSBhdHRudW0sCi0JCQkJCQkJCQkJCQkJIG5hdHRzLAotCQkJ CQkJCQkJCQkJCSBmYWxzZSwgLyogc2xvdyAqLwotCQkJCQkJCQkJCQkJCSBmYWxzZSwgLyogaGFz bnVsbHMgKi8KLQkJCQkJCQkJCQkJCQkgJm9mZiwKLQkJCQkJCQkJCQkJCQkgJnNsb3cpOwotCQll bHNlCi0JCQlhdHRudW0gPSBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsKHNsb3QsCi0J CQkJCQkJCQkJCQkJIHR1cGxlLAotCQkJCQkJCQkJCQkJCSBhdHRudW0sCi0JCQkJCQkJCQkJCQkJ IG5hdHRzLAotCQkJCQkJCQkJCQkJCSBmYWxzZSwgLyogc2xvdyAqLwotCQkJCQkJCQkJCQkJCSB0 cnVlLAkvKiBoYXNudWxscyAqLwotCQkJCQkJCQkJCQkJCSAmb2ZmLAotCQkJCQkJCQkJCQkJCSAm c2xvdyk7CisJCWludAkJCWF0dGxlbjsKKworCQlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROb25DYWNo ZU9mZnNldEF0dHI7IGF0dG51bSsrKQorCQl7CisJCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOwor CQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCQlh dHRsZW4gPSBjYXR0ci0+YXR0bGVuOworCisJCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmY7CisJ CQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dF9ub2Vycih0cCArIG9mZiwKKwkJCQkJCQkJCQkJ IGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCQkJIGF0dGxlbik7CisJCX0KKworCQkvKgorCQkg KiBQb2ludCB0aGUgb2Zmc2V0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxhc3QgYXR0cmlidXRlIHdp dGggYSBjYWNoZWQKKwkJICogb2Zmc2V0LiAgV2UgZXhwZWN0IHRoZSBmaW5hbCBjYWNoZWQgb2Zm c2V0IGF0dHJpYnV0ZSB0byBoYXZlIGEKKwkJICogZml4ZWQgd2lkdGgsIHNvIGp1c3QgYWRkIHRo ZSBhdHRsZW4gdG8gdGhlIGF0dGNhY2hlb2ZmCisJCSAqLworCQlBc3NlcnQoYXR0bGVuID4gMCk7 CisJCW9mZiArPSBhdHRsZW47CiAJfQogCi0JLyogSWYgdGhlcmUncyBzdGlsbCB3b3JrIHRvIGRv IHRoZW4gd2UgbXVzdCBiZSBpbiBzbG93IG1vZGUgKi8KLQlpZiAoYXR0bnVtIDwgbmF0dHMpCisJ LyoKKwkgKiBIYW5kbGUgYW55IHBvcnRpb24gb2YgdGhlIHR1cGxlIHRoYXQgZG9lc24ndCBoYXZl IGEgZml4ZWQgb2Zmc2V0IHVwCisJICogdW50aWwgdGhlIGZpcnN0IE5VTEwgYXR0cmlidXRlLiAg VGhpcyBsb29wIG9ubHkgZGlmZmVycyBmcm9tIHRoZSBvbmUKKwkgKiBhZnRlciBpdCBieSB0aGUg TlVMTCBjaGVja3MuCisJICovCisJZm9yICg7IGF0dG51bSA8IGZpcnN0TnVsbEF0dHI7IGF0dG51 bSsrKQogCXsKLQkJLyogWFhYIGlzIGl0IHdvcnRoIGFkZGluZyBhIHNlcGFyYXRlIGNhbGwgd2hl biBoYXNudWxscyBpcyBmYWxzZT8gKi8KLQkJYXR0bnVtID0gc2xvdF9kZWZvcm1faGVhcF90dXBs ZV9pbnRlcm5hbChzbG90LAotCQkJCQkJCQkJCQkJIHR1cGxlLAotCQkJCQkJCQkJCQkJIGF0dG51 bSwKLQkJCQkJCQkJCQkJCSBuYXR0cywKLQkJCQkJCQkJCQkJCSB0cnVlLAkvKiBzbG93ICovCi0J CQkJCQkJCQkJCQkgaGFzbnVsbHMsCi0JCQkJCQkJCQkJCQkgJm9mZiwKLQkJCQkJCQkJCQkJCSAm c2xvdyk7CisJCWludAkJCWF0dGxlbjsKKworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQlj YXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJYXR0bGVu ID0gY2F0dHItPmF0dGxlbjsKKworCQkvKgorCQkgKiBjc3RyaW5ncyBkb24ndCBleGlzdCBpbiBo ZWFwIHR1cGxlcy4gIFVzZSBwZ19hc3N1bWUgdG8gaW5zdHJ1Y3QgdGhlCisJCSAqIGNvbXBpbGVy IG5vdCB0byBlbWl0IHRoZSBjc3RyaW5nLXJlbGF0ZWQgY29kZSBpbgorCQkgKiBhbGlnbl9mZXRj aF90aGVuX2FkZCgpLgorCQkgKi8KKwkJcGdfYXNzdW1lKGF0dGxlbiA+IDAgfHwgYXR0bGVuID09 IC0xKTsKKworCQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2ggdGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50 IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJCXZhbHVlc1thdHRudW1dID0gYWxpZ25fZmV0Y2hf dGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0 Ynl2YWwsCisJCQkJCQkJCQkJCSAgYXR0bGVuLAorCQkJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGln bmJ5KTsKIAl9CiAKIAkvKgotCSAqIFNhdmUgc3RhdGUgZm9yIG5leHQgZXhlY3V0aW9uCisJICog Tm93IGhhbmRsZSBhbnkgcmVtYWluaW5nIGF0dHJpYnV0ZXMgaW4gdGhlIHR1cGxlIHVwIHRvIHRo ZSByZXF1ZXN0ZWQKKwkgKiBhdHRudW0uICBUaGlzIHRpbWUsIGluY2x1ZGUgTlVMTCBjaGVja3Mg YXMgd2UncmUgbm93IGF0IHRoZSBmaXJzdCBOVUxMCisJICogYXR0cmlidXRlLgogCSAqLwotCSpv ZmZwID0gb2ZmOwotCWlmIChzbG93KQotCQlzbG90LT50dHNfZmxhZ3MgfD0gVFRTX0ZMQUdfU0xP VzsKLQllbHNlCi0JCXNsb3QtPnR0c19mbGFncyAmPSB+VFRTX0ZMQUdfU0xPVzsKKwlmb3IgKDsg YXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQorCXsKKwkJaW50CQkJYXR0bGVuOwogCi0JLyogRmV0 Y2ggYW55IG1pc3NpbmcgYXR0cnMgYW5kIHJhaXNlIGFuIGVycm9yIGlmIHJlcW5hdHRzIGlzIGlu dmFsaWQuICovCisJCWlmIChpc251bGxbYXR0bnVtXSkKKwkJeworCQkJdmFsdWVzW2F0dG51bV0g PSAoRGF0dW0pIDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNhdHRyID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOwor CisJCS8qIEFzIGFib3ZlLCB3ZSBkb24ndCBleHBlY3QgY3N0cmluZ3MgKi8KKwkJcGdfYXNzdW1l KGF0dGxlbiA+IDAgfHwgYXR0bGVuID09IC0xKTsKKworCQkvKiBhbGlnbiAnb2ZmJywgZmV0Y2gg dGhlIGRhdHVtLCBhbmQgaW5jcmVtZW50IG9mZiBiZXlvbmQgdGhlIGRhdHVtICovCisJCXZhbHVl c1thdHRudW1dID0gYWxpZ25fZmV0Y2hfdGhlbl9hZGQodHAsCisJCQkJCQkJCQkJCSAgJm9mZiwK KwkJCQkJCQkJCQkJICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgYXR0bGVuLAorCQkJ CQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwl9CisKKwkvKiBGZXRjaCBhbnkgbWlzc2lu ZyBhdHRycyBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgcmVxbmF0dHMgaXMgaW52YWxpZCAqLwogCWlm ICh1bmxpa2VseShhdHRudW0gPCByZXFuYXR0cykpCisJeworCQkqb2ZmcCA9IG9mZjsKIAkJc2xv dF9nZXRtaXNzaW5nYXR0cnMoc2xvdCwgYXR0bnVtLCByZXFuYXR0cyk7CisJCXJldHVybjsKKwl9 Citkb25lOgorCisJLyogU2F2ZSBjdXJyZW50IG9mZnNldCBmb3IgbmV4dCBleGVjdXRpb24gKi8K Kwkqb2ZmcCA9IG9mZjsKIH0KIAogY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgVFRTT3BzVmlydHVh bCA9IHsKQEAgLTEzMDcsNyArMTMyOSw3IEBAIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09w c0J1ZmZlckhlYXBUdXBsZSA9IHsKICAqLwogVHVwbGVUYWJsZVNsb3QgKgogTWFrZVR1cGxlVGFi bGVTbG90KFR1cGxlRGVzYyB0dXBsZURlc2MsCi0JCQkJICAgY29uc3QgVHVwbGVUYWJsZVNsb3RP cHMgKnR0c19vcHMpCisJCQkJICAgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnR0c19vcHMsIHVp bnQxNiBmbGFncykKIHsKIAlTaXplCQliYXNlc3osCiAJCQkJYWxsb2NzejsKQEAgLTEzMzEsNiAr MTM1Myw3IEBAIE1ha2VUdXBsZVRhYmxlU2xvdChUdXBsZURlc2MgdHVwbGVEZXNjLAogCSooKGNv bnN0IFR1cGxlVGFibGVTbG90T3BzICoqKSAmc2xvdC0+dHRzX29wcykgPSB0dHNfb3BzOwogCXNs b3QtPnR5cGUgPSBUX1R1cGxlVGFibGVTbG90OwogCXNsb3QtPnR0c19mbGFncyB8PSBUVFNfRkxB R19FTVBUWTsKKwlzbG90LT50dHNfZmxhZ3MgfD0gZmxhZ3M7CiAJaWYgKHR1cGxlRGVzYyAhPSBO VUxMKQogCQlzbG90LT50dHNfZmxhZ3MgfD0gVFRTX0ZMQUdfRklYRUQ7CiAJc2xvdC0+dHRzX3R1 cGxlRGVzY3JpcHRvciA9IHR1cGxlRGVzYzsKQEAgLTEzNDIsMTIgKzEzNjUsMzEgQEAgTWFrZVR1 cGxlVGFibGVTbG90KFR1cGxlRGVzYyB0dXBsZURlc2MsCiAJCXNsb3QtPnR0c192YWx1ZXMgPSAo RGF0dW0gKikKIAkJCSgoKGNoYXIgKikgc2xvdCkKIAkJCSArIE1BWEFMSUdOKGJhc2VzeikpOwor CisJCS8qCisJCSAqIFdlIHJvdW5kIHRoZSBzaXplIG9mIHR0c19pc251bGwgdXAgdG8gdGhlIG5l eHQgaGlnaGVzdCBtdWx0aXBsZSBvZgorCQkgKiA4LiAgVGhpcyBpcyBuZWVkZWQgYXMgcG9wdWxh dGVfaXNudWxsX2FycmF5KCkgb3BlcmF0ZXMgb24gOAorCQkgKiBlbGVtZW50cyBhdCBhIHRpbWUg d2hlbiBjb252ZXJ0aW5nIGEgdHVwbGUncyBOVUxMIGJpdG1hcCBpbnRvIGEKKwkJICogYm9vbGVh biBhcnJheS4KKwkJICovCiAJCXNsb3QtPnR0c19pc251bGwgPSAoYm9vbCAqKQogCQkJKCgoY2hh ciAqKSBzbG90KQogCQkJICsgTUFYQUxJR04oYmFzZXN6KQotCQkJICsgTUFYQUxJR04odHVwbGVE ZXNjLT5uYXR0cyAqIHNpemVvZihEYXR1bSkpKTsKKwkJCSArIFRZUEVBTElHTig4LCB0dXBsZURl c2MtPm5hdHRzICogc2l6ZW9mKERhdHVtKSkpOwogCiAJCVBpblR1cGxlRGVzYyh0dXBsZURlc2Mp OworCisJCS8qCisJCSAqIFByZWNhbGN1bGF0ZSB0aGUgbWF4aW11bSBndWFyYW50ZWVkIGF0dHJp YnV0ZSB0aGF0IGhhcyB0byBleGlzdCBpbgorCQkgKiBldmVyeSB0dXBsZSB3aGljaCBnZXRzIGRl Zm9ybWVkIGludG8gdGhpcyBzbG90LiAgV2hlbiB0aGUKKwkJICogVFRTX0ZMQUdfT0JFWVNfTk9U X05VTExfQ09OU1RSQUlOVFMgZmxhZyBpcyBlbmFibGVkLCB3ZSBzaW1wbHkgdGFrZQorCQkgKiB0 aGUgcHJlY2FsY3VsYXRlZCB2YWx1ZSBmcm9tIHRoZSB0dXBsZURlc2MsIG90aGVyd2lzZSB0aGUK KwkJICogb3B0aW1pemF0aW9uIGlzIGRpc2FibGVkLCBhbmQgd2Ugc2V0IHRoZSB2YWx1ZSB0byAw LgorCQkgKi8KKwkJaWYgKChmbGFncyAmIFRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJ TlRTKSAhPSAwKQorCQkJc2xvdC0+dHRzX2ZpcnN0X25vbmd1YXJhbnRlZWQgPSB0dXBsZURlc2Mt PmZpcnN0Tm9uR3VhcmFudGVlZEF0dHI7CisJCWVsc2UKKwkJCXNsb3QtPnR0c19maXJzdF9ub25n dWFyYW50ZWVkID0gMDsKIAl9CiAKIAkvKgpAQCAtMTM2Niw5ICsxNDA4LDkgQEAgTWFrZVR1cGxl VGFibGVTbG90KFR1cGxlRGVzYyB0dXBsZURlc2MsCiAgKi8KIFR1cGxlVGFibGVTbG90ICoKIEV4 ZWNBbGxvY1RhYmxlU2xvdChMaXN0ICoqdHVwbGVUYWJsZSwgVHVwbGVEZXNjIGRlc2MsCi0JCQkJ ICAgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnR0c19vcHMpCisJCQkJICAgY29uc3QgVHVwbGVU YWJsZVNsb3RPcHMgKnR0c19vcHMsIHVpbnQxNiBmbGFncykKIHsKLQlUdXBsZVRhYmxlU2xvdCAq c2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChkZXNjLCB0dHNfb3BzKTsKKwlUdXBsZVRhYmxlU2xv dCAqc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChkZXNjLCB0dHNfb3BzLCBmbGFncyk7CiAKIAkq dHVwbGVUYWJsZSA9IGxhcHBlbmQoKnR1cGxlVGFibGUsIHNsb3QpOwogCkBAIC0xNDM1LDcgKzE0 NzcsNyBAQCBUdXBsZVRhYmxlU2xvdCAqCiBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoVHVwbGVE ZXNjIHR1cGRlc2MsCiAJCQkJCQkgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnR0c19vcHMpCiB7 Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywgdHRz X29wcyk7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVz YywgdHRzX29wcywgMCk7CiAKIAlyZXR1cm4gc2xvdDsKIH0KQEAgLTE1MTUsOCArMTU1NywxNCBA QCBFeGVjU2V0U2xvdERlc2NyaXB0b3IoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIC8qIHNsb3QgdG8g Y2hhbmdlICovCiAJICovCiAJc2xvdC0+dHRzX3ZhbHVlcyA9IChEYXR1bSAqKQogCQlNZW1vcnlD b250ZXh0QWxsb2Moc2xvdC0+dHRzX21jeHQsIHR1cGRlc2MtPm5hdHRzICogc2l6ZW9mKERhdHVt KSk7CisKKwkvKgorCSAqIFdlIHJvdW5kIHRoZSBzaXplIG9mIHR0c19pc251bGwgdXAgdG8gdGhl IG5leHQgaGlnaGVzdCBtdWx0aXBsZSBvZiA4LgorCSAqIFRoaXMgaXMgbmVlZGVkIGFzIHBvcHVs YXRlX2lzbnVsbF9hcnJheSgpIG9wZXJhdGVzIG9uIDggZWxlbWVudHMgYXQgYQorCSAqIHRpbWUg d2hlbiBjb252ZXJ0aW5nIGEgdHVwbGUncyBOVUxMIGJpdG1hcCBpbnRvIGEgYm9vbGVhbiBhcnJh eS4KKwkgKi8KIAlzbG90LT50dHNfaXNudWxsID0gKGJvb2wgKikKLQkJTWVtb3J5Q29udGV4dEFs bG9jKHNsb3QtPnR0c19tY3h0LCB0dXBkZXNjLT5uYXR0cyAqIHNpemVvZihib29sKSk7CisJCU1l bW9yeUNvbnRleHRBbGxvYyhzbG90LT50dHNfbWN4dCwgVFlQRUFMSUdOKDgsIHR1cGRlc2MtPm5h dHRzICogc2l6ZW9mKGJvb2wpKSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkBAIC0xOTc4LDcgKzIwMjYsNyBAQCBFeGVjSW5pdFJlc3VsdFNsb3QoUGxhblN0YXRl ICpwbGFuc3RhdGUsIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICp0dHNfb3BzKQogCVR1cGxlVGFi bGVTbG90ICpzbG90OwogCiAJc2xvdCA9IEV4ZWNBbGxvY1RhYmxlU2xvdCgmcGxhbnN0YXRlLT5z dGF0ZS0+ZXNfdHVwbGVUYWJsZSwKLQkJCQkJCQkgIHBsYW5zdGF0ZS0+cHNfUmVzdWx0VHVwbGVE ZXNjLCB0dHNfb3BzKTsKKwkJCQkJCQkgIHBsYW5zdGF0ZS0+cHNfUmVzdWx0VHVwbGVEZXNjLCB0 dHNfb3BzLCAwKTsKIAlwbGFuc3RhdGUtPnBzX1Jlc3VsdFR1cGxlU2xvdCA9IHNsb3Q7CiAKIAlw bGFuc3RhdGUtPnJlc3VsdG9wc2ZpeGVkID0gcGxhbnN0YXRlLT5wc19SZXN1bHRUdXBsZURlc2Mg IT0gTlVMTDsKQEAgLTIwMDYsMTAgKzIwNTQsMTEgQEAgRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RU TChQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKICAqLwogdm9pZAogRXhlY0luaXRTY2FuVHVwbGVTbG90 KEVTdGF0ZSAqZXN0YXRlLCBTY2FuU3RhdGUgKnNjYW5zdGF0ZSwKLQkJCQkJICBUdXBsZURlc2Mg dHVwbGVkZXNjLCBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqdHRzX29wcykKKwkJCQkJICBUdXBs ZURlc2MgdHVwbGVkZXNjLCBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqdHRzX29wcywKKwkJCQkJ ICB1aW50MTYgZmxhZ3MpCiB7CiAJc2NhbnN0YXRlLT5zc19TY2FuVHVwbGVTbG90ID0gRXhlY0Fs bG9jVGFibGVTbG90KCZlc3RhdGUtPmVzX3R1cGxlVGFibGUsCi0JCQkJCQkJCQkJCQkJIHR1cGxl ZGVzYywgdHRzX29wcyk7CisJCQkJCQkJCQkJCQkJIHR1cGxlZGVzYywgdHRzX29wcywgZmxhZ3Mp OwogCXNjYW5zdGF0ZS0+cHMuc2NhbmRlc2MgPSB0dXBsZWRlc2M7CiAJc2NhbnN0YXRlLT5wcy5z Y2Fub3BzZml4ZWQgPSB0dXBsZWRlc2MgIT0gTlVMTDsKIAlzY2Fuc3RhdGUtPnBzLnNjYW5vcHMg PSB0dHNfb3BzOwpAQCAtMjAyOSw3ICsyMDc4LDcgQEAgRXhlY0luaXRFeHRyYVR1cGxlU2xvdChF U3RhdGUgKmVzdGF0ZSwKIAkJCQkJICAgVHVwbGVEZXNjIHR1cGxlZGVzYywKIAkJCQkJICAgY29u c3QgVHVwbGVUYWJsZVNsb3RPcHMgKnR0c19vcHMpCiB7Ci0JcmV0dXJuIEV4ZWNBbGxvY1RhYmxl U2xvdCgmZXN0YXRlLT5lc190dXBsZVRhYmxlLCB0dXBsZWRlc2MsIHR0c19vcHMpOworCXJldHVy biBFeGVjQWxsb2NUYWJsZVNsb3QoJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSwgdHVwbGVkZXNjLCB0 dHNfb3BzLCAwKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjI2MSwxMCArMjMxMCwx NiBAQCBFeGVjVHlwZVNldENvbE5hbWVzKFR1cGxlRGVzYyB0eXBlSW5mbywgTGlzdCAqbmFtZXNM aXN0KQogICogVGhpcyBoYXBwZW5zICJmb3IgZnJlZSIgaWYgdGhlIHR1cGRlc2MgY2FtZSBmcm9t IGEgcmVsY2FjaGUgZW50cnksIGJ1dAogICogbm90IGlmIHdlIGhhdmUgbWFudWZhY3R1cmVkIGEg dHVwZGVzYyBmb3IgYSB0cmFuc2llbnQgUkVDT1JEIGRhdGF0eXBlLgogICogSW4gdGhhdCBjYXNl IHdlIGhhdmUgdG8gbm90aWZ5IHR5cGNhY2hlLmMgb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdHlw ZS4KKyAqCisgKiBUdXBsZURlc2NGaW5hbGl6ZSgpIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBUdXBs ZURlc2MgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCiAgKi8KIFR1cGxlRGVzYwog Qmxlc3NUdXBsZURlc2MoVHVwbGVEZXNjIHR1cGRlc2MpCiB7CisJLyogRGlkIHNvbWVvbmUgZm9y Z2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQodHVwZGVzYy0+Zmly c3ROb25DYWNoZWRPZmZzZXRBdHRyID49IDApOworCiAJaWYgKHR1cGRlc2MtPnRkdHlwZWlkID09 IFJFQ09SRE9JRCAmJgogCQl0dXBkZXNjLT50ZHR5cG1vZCA8IDApCiAJCWFzc2lnbl9yZWNvcmRf dHlwZV90eXBtb2QodHVwZGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjVXRpbHMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCmluZGV4IGE3OTU1 ZTQ3NmY5Li5mNjI1ODI4NTlmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTcxMSw3 ICs3MTEsNyBAQCBFeGVjQ3JlYXRlU2NhblNsb3RGcm9tT3V0ZXJQbGFuKEVTdGF0ZSAqZXN0YXRl LAogCW91dGVyUGxhbiA9IG91dGVyUGxhblN0YXRlKHNjYW5zdGF0ZSk7CiAJdHVwRGVzYyA9IEV4 ZWNHZXRSZXN1bHRUeXBlKG91dGVyUGxhbik7CiAKLQlFeGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0 YXRlLCBzY2Fuc3RhdGUsIHR1cERlc2MsIHR0c19vcHMpOworCUV4ZWNJbml0U2NhblR1cGxlU2xv dChlc3RhdGUsIHNjYW5zdGF0ZSwgdHVwRGVzYywgdHRzX29wcywgMCk7CiB9CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwppbmRleCA3ZDQ4N2ExNjVmYS4uYzVjMzIxYjRmNDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTE2ODIsNyArMTY4Miw3IEBAIGZpbmRfaGFzaF9jb2x1 bW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCQkJCQkgICZwZXJoYXNoLT5oYXNoZnVuY3Rpb25z KTsKIAkJcGVyaGFzaC0+aGFzaHNsb3QgPQogCQkJRXhlY0FsbG9jVGFibGVTbG90KCZlc3RhdGUt PmVzX3R1cGxlVGFibGUsIGhhc2hEZXNjLAotCQkJCQkJCSAgICZUVFNPcHNNaW5pbWFsVHVwbGUp OworCQkJCQkJCSAgICZUVFNPcHNNaW5pbWFsVHVwbGUsIDApOwogCiAJCWxpc3RfZnJlZShoYXNo VGxpc3QpOwogCQlibXNfZnJlZShjb2xub3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0 bWFwSGVhcHNjYW4uYwppbmRleCBjNjhjMjZjYmYzOC4uZGNiNzU5OWI5NmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jCkBAIC0zODEsNyArMzgxLDEwIEBAIEV4 ZWNJbml0Qml0bWFwSGVhcFNjYW4oQml0bWFwSGVhcFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCSAqLwogCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fu c3RhdGUtPnNzLAogCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGN1cnJlbnRSZWxhdGlvbiksCi0J CQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJlbnRSZWxhdGlvbikpOworCQkJCQkJICB0 YWJsZV9zbG90X2NhbGxiYWNrcyhjdXJyZW50UmVsYXRpb24pLCAwKTsKKworCXNjYW5zdGF0ZS0+ c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9CisJCVRUU19GTEFHX09CRVlTX05PVF9O VUxMX0NPTlNUUkFJTlRTOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBw cm9qZWN0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN0ZXNjYW4u YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVDdGVzY2FuLmMKaW5kZXggZTZlNDc2Mzg4ZTUu LjQ1YjA5ZDkzYjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQ3Rlc2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVDdGVzY2FuLmMKQEAgLTI2MSw3ICsy NjEsNyBAQCBFeGVjSW5pdEN0ZVNjYW4oQ3RlU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGlu dCBlZmxhZ3MpCiAJICovCiAJRXhlY0luaXRTY2FuVHVwbGVTbG90KGVzdGF0ZSwgJnNjYW5zdGF0 ZS0+c3MsCiAJCQkJCQkgIEV4ZWNHZXRSZXN1bHRUeXBlKHNjYW5zdGF0ZS0+Y3RlcGxhbnN0YXRl KSwKLQkJCQkJCSAgJlRUU09wc01pbmltYWxUdXBsZSk7CisJCQkJCQkgICZUVFNPcHNNaW5pbWFs VHVwbGUsIDApOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0 aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jCmluZGV4IGE5YWQ1YWY2YTk4Li5iN2NjODkw Y2QyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVDdXN0b20uYwpAQCAtNzksMTQgKzc5LDE0IEBAIEV4 ZWNJbml0Q3VzdG9tU2NhbihDdXN0b21TY2FuICpjc2NhbiwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCVR1cGxlRGVzYwlzY2FuX3R1cGRlc2M7CiAKIAkJc2Nhbl90dXBkZXNjID0gRXhl Y1R5cGVGcm9tVEwoY3NjYW4tPmN1c3RvbV9zY2FuX3RsaXN0KTsKLQkJRXhlY0luaXRTY2FuVHVw bGVTbG90KGVzdGF0ZSwgJmNzcy0+c3MsIHNjYW5fdHVwZGVzYywgc2xvdE9wcyk7CisJCUV4ZWNJ bml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZjc3MtPnNzLCBzY2FuX3R1cGRlc2MsIHNsb3RPcHMs IDApOwogCQkvKiBOb2RlJ3MgdGFyZ2V0bGlzdCB3aWxsIGNvbnRhaW4gVmFycyB3aXRoIHZhcm5v ID0gSU5ERVhfVkFSICovCiAJCXRsaXN0dmFybm8gPSBJTkRFWF9WQVI7CiAJfQogCWVsc2UKIAl7 CiAJCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZjc3MtPnNzLCBSZWxhdGlvbkdldERl c2NyKHNjYW5fcmVsKSwKLQkJCQkJCQkgIHNsb3RPcHMpOworCQkJCQkJCSAgc2xvdE9wcywgMCk7 CiAJCS8qIE5vZGUncyB0YXJnZXRsaXN0IHdpbGwgY29udGFpbiBWYXJzIHdpdGggdmFybm8gPSBz Y2FucmVsaWQgKi8KIAkJdGxpc3R2YXJubyA9IHNjYW5yZWxpZDsKIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlRm9yZWlnbnNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVGb3JlaWduc2Nhbi5jCmluZGV4IDg3MjFiNjdiN2NjLi42ZjBkYWRkY2UwNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmMKQEAgLTE5MSw3ICsxOTEsNyBAQCBF eGVjSW5pdEZvcmVpZ25TY2FuKEZvcmVpZ25TY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAogCQlzY2FuX3R1cGRlc2MgPSBFeGVjVHlwZUZyb21UTChub2RlLT5mZHdfc2Nh bl90bGlzdCk7CiAJCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNz LCBzY2FuX3R1cGRlc2MsCi0JCQkJCQkJICAmVFRTT3BzSGVhcFR1cGxlKTsKKwkJCQkJCQkgICZU VFNPcHNIZWFwVHVwbGUsIDApOwogCQkvKiBOb2RlJ3MgdGFyZ2V0bGlzdCB3aWxsIGNvbnRhaW4g VmFycyB3aXRoIHZhcm5vID0gSU5ERVhfVkFSICovCiAJCXRsaXN0dmFybm8gPSBJTkRFWF9WQVI7 CiAJfQpAQCAtMjAyLDcgKzIwMiw3IEBAIEV4ZWNJbml0Rm9yZWlnblNjYW4oRm9yZWlnblNjYW4g Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkvKiBkb24ndCB0cnVzdCBGRFdz IHRvIHJldHVybiB0dXBsZXMgZnVsZmlsbGluZyBOT1QgTlVMTCBjb25zdHJhaW50cyAqLwogCQlz Y2FuX3R1cGRlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KFJlbGF0aW9uR2V0RGVzY3IoY3VycmVu dFJlbGF0aW9uKSk7CiAJCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUt PnNzLCBzY2FuX3R1cGRlc2MsCi0JCQkJCQkJICAmVFRTT3BzSGVhcFR1cGxlKTsKKwkJCQkJCQkg ICZUVFNPcHNIZWFwVHVwbGUsIDApOwogCQkvKiBOb2RlJ3MgdGFyZ2V0bGlzdCB3aWxsIGNvbnRh aW4gVmFycyB3aXRoIHZhcm5vID0gc2NhbnJlbGlkICovCiAJCXRsaXN0dmFybm8gPSBzY2FucmVs aWQ7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9uc2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9uc2Nhbi5jCmluZGV4IGZlYjgy ZDY0OTY3Li4yMjI3NDFhZGYzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUZ1bmN0aW9uc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNj YW4uYwpAQCAtNDk0LDcgKzQ5NCw3IEBAIEV4ZWNJbml0RnVuY3Rpb25TY2FuKEZ1bmN0aW9uU2Nh biAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogSW5pdGlhbGl6ZSBzY2Fu IHNsb3QgYW5kIHR5cGUuCiAJICovCiAJRXhlY0luaXRTY2FuVHVwbGVTbG90KGVzdGF0ZSwgJnNj YW5zdGF0ZS0+c3MsIHNjYW5fdHVwZGVzYywKLQkJCQkJCSAgJlRUU09wc01pbmltYWxUdXBsZSk7 CisJCQkJCQkgICZUVFNPcHNNaW5pbWFsVHVwbGUsIDApOwogCiAJLyoKIAkgKiBJbml0aWFsaXpl IHJlc3VsdCBzbG90LCB0eXBlIGFuZCBwcm9qZWN0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggYzJkMDkzNzQ1MTcuLjE0NGE1N2ZkZTk1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTU2Nyw3ICs1NjcsMTAgQEAg RXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCSAqLwogCXR1cERlc2MgPSBFeGVjVHlwZUZyb21UTChub2RlLT5pbmRl eHRsaXN0KTsKIAlFeGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0YXRlLCAmaW5kZXhzdGF0ZS0+c3Ms IHR1cERlc2MsCi0JCQkJCQkgICZUVFNPcHNWaXJ0dWFsKTsKKwkJCQkJCSAgJlRUU09wc1ZpcnR1 YWwsIDApOworCisJaW5kZXhzdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9 CisJCVRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOwogCiAJLyoKIAkgKiBXZSBu ZWVkIGFub3RoZXIgc2xvdCwgaW4gYSBmb3JtYXQgdGhhdCdzIHN1aXRhYmxlIGZvciB0aGUgdGFi bGUgQU0sIGZvcgpAQCAtNTc2LDcgKzU3OSw3IEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRl eE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRl LT5pb3NzX1RhYmxlU2xvdCA9CiAJCUV4ZWNBbGxvY1RhYmxlU2xvdCgmZXN0YXRlLT5lc190dXBs ZVRhYmxlLAogCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihjdXJyZW50UmVsYXRpb24pLAotCQkJ CQkJICAgdGFibGVfc2xvdF9jYWxsYmFja3MoY3VycmVudFJlbGF0aW9uKSk7CisJCQkJCQkgICB0 YWJsZV9zbG90X2NhbGxiYWNrcyhjdXJyZW50UmVsYXRpb24pLCAwKTsKIAogCS8qCiAJICogSW5p dGlhbGl6ZSByZXN1bHQgdHlwZSBhbmQgcHJvamVjdGlvbiBpbmZvLiAgVGhlIG5vZGUncyB0YXJn ZXRsaXN0IHdpbGwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBhNjE2YWJm ZjA0Yy4uZTdiZWJiODk1MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAg LTkzOCw3ICs5MzgsMTAgQEAgRXhlY0luaXRJbmRleFNjYW4oSW5kZXhTY2FuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8KIAlFeGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0 YXRlLCAmaW5kZXhzdGF0ZS0+c3MsCiAJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY3VycmVudFJl bGF0aW9uKSwKLQkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3MoY3VycmVudFJlbGF0aW9uKSk7 CisJCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJlbnRSZWxhdGlvbiksIDApOworCisJ aW5kZXhzdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9CisJCVRUU19GTEFH X09CRVlTX05PVF9OVUxMX0NPTlNUUkFJTlRTOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3Vs dCB0eXBlIGFuZCBwcm9qZWN0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU5hbWVkdHVwbGVzdG9yZXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVOYW1l ZHR1cGxlc3RvcmVzY2FuLmMKaW5kZXggZmRmY2NjODE2OWYuLjI5ZDg2MmE0MDAxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTmFtZWR0dXBsZXN0b3Jlc2Nhbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVOYW1lZHR1cGxlc3RvcmVzY2FuLmMKQEAgLTEzNyw3 ICsxMzcsNyBAQCBFeGVjSW5pdE5hbWVkVHVwbGVzdG9yZVNjYW4oTmFtZWRUdXBsZXN0b3JlU2Nh biAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZwogCSAqIFRoZSBzY2FuIHR1cGxlIHR5 cGUgaXMgc3BlY2lmaWVkIGZvciB0aGUgdHVwbGVzdG9yZS4KIAkgKi8KIAlFeGVjSW5pdFNjYW5U dXBsZVNsb3QoZXN0YXRlLCAmc2NhbnN0YXRlLT5zcywgc2NhbnN0YXRlLT50dXBkZXNjLAotCQkJ CQkJICAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwkJCQkJCSAgJlRUU09wc01pbmltYWxUdXBsZSwg MCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24uCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2FtcGxlc2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVNhbXBsZXNjYW4uYwppbmRleCAxYjBhZjcwZmQ3YS4uYTFkYTA1 ZWNjMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTYW1wbGVzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNhbXBsZXNjYW4uYwpAQCAtMTI4LDcgKzEy OCwxMSBAQCBFeGVjSW5pdFNhbXBsZVNjYW4oU2FtcGxlU2NhbiAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiAJLyogYW5kIGNyZWF0ZSBzbG90IHdpdGggYXBwcm9wcmlhdGUgcm93 dHlwZSAqLwogCUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLAog CQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u KSwKLQkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3Moc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24pKTsKKwkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3Moc2NhbnN0YXRlLT5zcy5z c19jdXJyZW50UmVsYXRpb24pLAorCQkJCQkJICAwKTsKKworCXNjYW5zdGF0ZS0+c3Muc3NfU2Nh blR1cGxlU2xvdC0+dHRzX2ZsYWdzIHw9CisJCVRUU19GTEFHX09CRVlTX05PVF9OVUxMX0NPTlNU UkFJTlRTOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9u LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKaW5kZXggYWYzYzc4OGNlOGIuLjhmMjE5ZjYw YTkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTI0NCw3ICsyNDQsOCBAQCBF eGVjSW5pdFNlcVNjYW4oU2VxU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJLyogYW5kIGNyZWF0ZSBzbG90IHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvd3R5cGUgKi8KIAlF eGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0YXRlLCAmc2NhbnN0YXRlLT5zcywKIAkJCQkJCSAgUmVs YXRpb25HZXREZXNjcihzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiksCi0JCQkJCQkg IHRhYmxlX3Nsb3RfY2FsbGJhY2tzKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKSk7 CisJCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uKSwKKwkJCQkJCSAgVFRTX0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFMpOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1YnF1ZXJ5c2Nhbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVN1YnF1ZXJ5c2Nhbi5jCmluZGV4IDRmZDZmNmZiNGE1Li43MDkxNGU4 MTg5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVN1YnF1ZXJ5c2Nhbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTdWJxdWVyeXNjYW4uYwpAQCAtMTMwLDcg KzEzMCw4IEBAIEV4ZWNJbml0U3VicXVlcnlTY2FuKFN1YnF1ZXJ5U2NhbiAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJRXhlY0luaXRTY2FuVHVwbGVTbG90KGVzdGF0 ZSwgJnN1YnF1ZXJ5c3RhdGUtPnNzLAogCQkJCQkJICBFeGVjR2V0UmVzdWx0VHlwZShzdWJxdWVy eXN0YXRlLT5zdWJwbGFuKSwKLQkJCQkJCSAgRXhlY0dldFJlc3VsdFNsb3RPcHMoc3VicXVlcnlz dGF0ZS0+c3VicGxhbiwgTlVMTCkpOworCQkJCQkJICBFeGVjR2V0UmVzdWx0U2xvdE9wcyhzdWJx dWVyeXN0YXRlLT5zdWJwbGFuLCBOVUxMKSwKKwkJCQkJCSAgMCk7CiAKIAkvKgogCSAqIFRoZSBz bG90IHVzZWQgYXMgdGhlIHNjYW50dXBsZSBpc24ndCB0aGUgc2xvdCBhYm92ZSAob3V0c2lkZSBv ZiBFUFEpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVuY3Nj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNzY2FuLmMKaW5kZXggNTIw NzBkMTQ3YTQuLjc2OWI5NzY2NTQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlVGFibGVGdW5jc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1 bmNzY2FuLmMKQEAgLTE0OCw3ICsxNDgsNyBAQCBFeGVjSW5pdFRhYmxlRnVuY1NjYW4oVGFibGVG dW5jU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkJCQkJCSB0Zi0+ Y29sY29sbGF0aW9ucyk7CiAJLyogYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNjYW4gc2xvdCAqLwog CUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLCB0dXBkZXNjLAot CQkJCQkJICAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwkJCQkJCSAgJlRUU09wc01pbmltYWxUdXBs ZSwgMCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24u CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkcmFuZ2VzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkcmFuZ2VzY2FuLmMKaW5kZXggNTAzODE3ZGE2NWIu LmRlY2MzMTY3YmE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlkcmFu Z2VzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHJhbmdlc2Nhbi5jCkBA IC0zOTQsNyArMzk0LDEwIEBAIEV4ZWNJbml0VGlkUmFuZ2VTY2FuKFRpZFJhbmdlU2NhbiAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJRXhlY0luaXRTY2FuVHVwbGVT bG90KGVzdGF0ZSwgJnRpZHJhbmdlc3RhdGUtPnNzLAogCQkJCQkJICBSZWxhdGlvbkdldERlc2Ny KGN1cnJlbnRSZWxhdGlvbiksCi0JCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJlbnRS ZWxhdGlvbikpOworCQkJCQkJICB0YWJsZV9zbG90X2NhbGxiYWNrcyhjdXJyZW50UmVsYXRpb24p LCAwKTsKKworCXRpZHJhbmdlc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QtPnR0c19mbGFncyB8 PQorCQlUVFNfRkxBR19PQkVZU19OT1RfTlVMTF9DT05TVFJBSU5UUzsKIAogCS8qCiAJICogSW5p dGlhbGl6ZSByZXN1bHQgdHlwZSBhbmQgcHJvamVjdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVUaWRzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGlk c2Nhbi5jCmluZGV4IDRlZGRiMDgyOGI1Li4yNjU5M2I5MzBhZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVRpZHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlVGlkc2Nhbi5jCkBAIC01MzYsNyArNTM2LDEwIEBAIEV4ZWNJbml0VGlkU2NhbihUaWRTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8KIAlFeGVjSW5pdFNjYW5U dXBsZVNsb3QoZXN0YXRlLCAmdGlkc3RhdGUtPnNzLAogCQkJCQkJICBSZWxhdGlvbkdldERlc2Ny KGN1cnJlbnRSZWxhdGlvbiksCi0JCQkJCQkgIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKGN1cnJlbnRS ZWxhdGlvbikpOworCQkJCQkJICB0YWJsZV9zbG90X2NhbGxiYWNrcyhjdXJyZW50UmVsYXRpb24p LCAwKTsKKworCXRpZHN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90LT50dHNfZmxhZ3MgfD0KKwkJ VFRTX0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFM7CiAKIAkvKgogCSAqIEluaXRpYWxp emUgcmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlVmFsdWVzc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVZhbHVl c3NjYW4uYwppbmRleCBlNjYzZmI2OGNmYy4uZWZmYzg5NmVhMWMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVWYWx1ZXNzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVZhbHVlc3NjYW4uYwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIEV4ZWNJbml0VmFsdWVzU2Nh bihWYWx1ZXNTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiBHZXQg aW5mbyBhYm91dCB2YWx1ZXMgbGlzdCwgaW5pdGlhbGl6ZSBzY2FuIHNsb3Qgd2l0aCBpdC4KIAkg Ki8KIAl0dXBkZXNjID0gRXhlY1R5cGVGcm9tRXhwckxpc3QoKExpc3QgKikgbGluaXRpYWwobm9k ZS0+dmFsdWVzX2xpc3RzKSk7Ci0JRXhlY0luaXRTY2FuVHVwbGVTbG90KGVzdGF0ZSwgJnNjYW5z dGF0ZS0+c3MsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKKwlFeGVjSW5pdFNjYW5UdXBsZVNs b3QoZXN0YXRlLCAmc2NhbnN0YXRlLT5zcywgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwsIDApOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlIGFuZCBwcm9qZWN0aW9uLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdvcmt0YWJsZXNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVXb3JrdGFibGVzY2FuLmMKaW5kZXggMjEwY2M0NGY5MTEuLjY2ZTkw NGM3NjM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV29ya3RhYmxlc2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXb3JrdGFibGVzY2FuLmMKQEAgLTE2 NSw3ICsxNjUsNyBAQCBFeGVjSW5pdFdvcmtUYWJsZVNjYW4oV29ya1RhYmxlU2NhbiAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJc2NhbnN0YXRlLT5zcy5wcy5yZXN1bHRvcHNz ZXQgPSB0cnVlOwogCXNjYW5zdGF0ZS0+c3MucHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKIAot CUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLCBOVUxMLCAmVFRT T3BzTWluaW1hbFR1cGxlKTsKKwlFeGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0YXRlLCAmc2NhbnN0 YXRlLT5zcywgTlVMTCwgJlRUU09wc01pbmltYWxUdXBsZSwgMCk7CiAKIAkvKgogCSAqIGluaXRp YWxpemUgY2hpbGQgZXhwcmVzc2lvbnMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZGVmb3JtLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5j CmluZGV4IDNlYjA4N2ViNTZiLi4xMjUyMWUzZTQ2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZt aml0X2RlZm9ybS5jCkBAIC02Miw3ICs2Miw2IEBAIHNsb3RfY29tcGlsZV9kZWZvcm0oTExWTUpp dENvbnRleHQgKmNvbnRleHQsIFR1cGxlRGVzYyBkZXNjLAogCUxMVk1WYWx1ZVJlZiB2X3R0c192 YWx1ZXM7CiAJTExWTVZhbHVlUmVmIHZfdHRzX251bGxzOwogCUxMVk1WYWx1ZVJlZiB2X3Nsb3Rv ZmZwOwotCUxMVk1WYWx1ZVJlZiB2X2ZsYWdzcDsKIAlMTFZNVmFsdWVSZWYgdl9udmFsaWRwOwog CUxMVk1WYWx1ZVJlZiB2X252YWxpZDsKIAlMTFZNVmFsdWVSZWYgdl9tYXhhdHQ7CkBAIC0xNzgs NyArMTc3LDYgQEAgc2xvdF9jb21waWxlX2RlZm9ybShMTFZNSml0Q29udGV4dCAqY29udGV4dCwg VHVwbGVEZXNjIGRlc2MsCiAJdl90dHNfbnVsbHMgPQogCQlsX2xvYWRfc3RydWN0X2dlcChiLCBT dHJ1Y3RUdXBsZVRhYmxlU2xvdCwgdl9zbG90LCBGSUVMRE5PX1RVUExFVEFCTEVTTE9UX0lTTlVM TCwKIAkJCQkJCSAgInR0c19JU05VTEwiKTsKLQl2X2ZsYWdzcCA9IGxfc3RydWN0X2dlcChiLCBT dHJ1Y3RUdXBsZVRhYmxlU2xvdCwgdl9zbG90LCBGSUVMRE5PX1RVUExFVEFCTEVTTE9UX0ZMQUdT LCAiIik7CiAJdl9udmFsaWRwID0gbF9zdHJ1Y3RfZ2VwKGIsIFN0cnVjdFR1cGxlVGFibGVTbG90 LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJMRVNMT1RfTlZBTElELCAiIik7CiAKIAlpZiAob3Bz ID09ICZUVFNPcHNIZWFwVHVwbGUgfHwgb3BzID09ICZUVFNPcHNCdWZmZXJIZWFwVHVwbGUpCkBA IC03NDcsMTQgKzc0NSwxMCBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0ICpj b250ZXh0LCBUdXBsZURlc2MgZGVzYywKIAogCXsKIAkJTExWTVZhbHVlUmVmIHZfb2ZmID0gbF9s b2FkKGIsIFR5cGVTaXplVCwgdl9vZmZwLCAiIik7Ci0JCUxMVk1WYWx1ZVJlZiB2X2ZsYWdzOwog CiAJCUxMVk1CdWlsZFN0b3JlKGIsIGxfaW50MTZfY29uc3QobGMsIG5hdHRzKSwgdl9udmFsaWRw KTsKIAkJdl9vZmYgPSBMTFZNQnVpbGRUcnVuYyhiLCB2X29mZiwgTExWTUludDMyVHlwZUluQ29u dGV4dChsYyksICIiKTsKIAkJTExWTUJ1aWxkU3RvcmUoYiwgdl9vZmYsIHZfc2xvdG9mZnApOwot CQl2X2ZsYWdzID0gbF9sb2FkKGIsIExMVk1JbnQxNlR5cGVJbkNvbnRleHQobGMpLCB2X2ZsYWdz cCwgInR0c19mbGFncyIpOwotCQl2X2ZsYWdzID0gTExWTUJ1aWxkT3IoYiwgdl9mbGFncywgbF9p bnQxNl9jb25zdChsYywgVFRTX0ZMQUdfU0xPVyksICIiKTsKLQkJTExWTUJ1aWxkU3RvcmUoYiwg dl9mbGFncywgdl9mbGFnc3ApOwogCQlMTFZNQnVpbGRSZXRWb2lkKGIpOwogCX0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggODU3ZWJmN2Q2ZmIu LjRlY2ZjYmZmN2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMKQEAgLTE1NTksNyArMTU1OSw3IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJaWYgKHJlbGVudHJ5LT5h dHRybWFwKQogCQl7CiAJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xv dChSZWxhdGlvbkdldERlc2NyKHRhcmdldHJlbCksCi0JCQkJCQkJCQkJCQkJICAmVFRTT3BzVmly dHVhbCk7CisJCQkJCQkJCQkJCQkJICAmVFRTT3BzVmlydHVhbCwgMCk7CiAKIAkJCW9sZF9zbG90 ID0gZXhlY3V0ZV9hdHRyX21hcF9zbG90KHJlbGVudHJ5LT5hdHRybWFwLCBvbGRfc2xvdCwgc2xv dCk7CiAJCX0KQEAgLTE1NzQsNyArMTU3NCw3IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJaWYgKHJlbGVudHJ5 LT5hdHRybWFwKQogCQl7CiAJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IE1ha2VUdXBsZVRhYmxl U2xvdChSZWxhdGlvbkdldERlc2NyKHRhcmdldHJlbCksCi0JCQkJCQkJCQkJCQkJICAmVFRTT3Bz VmlydHVhbCk7CisJCQkJCQkJCQkJCQkJICAmVFRTT3BzVmlydHVhbCwgMCk7CiAKIAkJCW5ld19z bG90ID0gZXhlY3V0ZV9hdHRyX21hcF9zbG90KHJlbGVudHJ5LT5hdHRybWFwLCBuZXdfc2xvdCwg c2xvdCk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQyN2FjMjE2ZTZk Li41OTdkZTY4N2I0NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC02NjYsMTQg KzY2Niw2IEBAIFJlbGF0aW9uQnVpbGRUdXBsZURlc2MoUmVsYXRpb24gcmVsYXRpb24pCiAJCWVs b2coRVJST1IsICJwZ19hdHRyaWJ1dGUgY2F0YWxvZyBpcyBtaXNzaW5nICVkIGF0dHJpYnV0ZShz KSBmb3IgcmVsYXRpb24gT0lEICV1IiwKIAkJCSBuZWVkLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0 aW9uKSk7CiAKLQkvKgotCSAqIFdlIGNhbiBlYXNpbHkgc2V0IHRoZSBhdHRjYWNoZW9mZiB2YWx1 ZSBmb3IgdGhlIGZpcnN0IGF0dHJpYnV0ZTogaXQKLQkgKiBtdXN0IGJlIHplcm8uICBUaGlzIGVs aW1pbmF0ZXMgdGhlIG5lZWQgZm9yIHNwZWNpYWwgY2FzZXMgZm9yIGF0dG51bT0xCi0JICogdGhh dCB1c2VkIHRvIGV4aXN0IGluIGZhc3RnZXRhdHRyKCkgYW5kIGluZGV4X2dldGF0dHIoKS4KLQkg Ki8KLQlpZiAoUmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pID4gMCkKLQkJ VHVwbGVEZXNjQ29tcGFjdEF0dHIocmVsYXRpb24tPnJkX2F0dCwgMCktPmF0dGNhY2hlb2ZmID0g MDsKLQogCS8qCiAJICogU2V0IHVwIGNvbnN0cmFpbnQvZGVmYXVsdCBpbmZvCiAJICovCkBAIC0x OTg1LDggKzE5NzcsNiBAQCBmb3JtcmRlc2MoY29uc3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQg cmVsYXRpb25SZWx0eXBlLAogCQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShyZWxhdGlvbi0+ cmRfYXR0LCBpKTsKIAl9CiAKLQkvKiBpbml0aWFsaXplIGZpcnN0IGF0dHJpYnV0ZSdzIGF0dGNh Y2hlb2ZmLCBjZiBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjICovCi0JVHVwbGVEZXNjQ29tcGFjdEF0 dHIocmVsYXRpb24tPnJkX2F0dCwgMCktPmF0dGNhY2hlb2ZmID0gMDsKIAlUdXBsZURlc2NGaW5h bGl6ZShyZWxhdGlvbi0+cmRfYXR0KTsKIAogCS8qIG1hcmsgbm90LW51bGwgc3RhdHVzICovCkBA IC00NDQ2LDggKzQ0MzYsNiBAQCBCdWlsZEhhcmRjb2RlZERlc2NyaXB0b3IoaW50IG5hdHRzLCBj b25zdCBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgKmF0dHJzKQogCQlwb3B1bGF0ZV9jb21wYWN0X2F0 dHJpYnV0ZShyZXN1bHQsIGkpOwogCX0KIAotCS8qIGluaXRpYWxpemUgZmlyc3QgYXR0cmlidXRl J3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVpbGRUdXBsZURlc2MgKi8KLQlUdXBsZURlc2ND b21wYWN0QXR0cihyZXN1bHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7CiAJVHVwbGVEZXNjRmluYWxp emUocmVzdWx0KTsKIAogCS8qIE5vdGU6IHdlIGRvbid0IGJvdGhlciB0byBzZXQgdXAgYSBUdXBs ZUNvbnN0ciBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2Mu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKaW5kZXggNTk1NDEzZGJiYzUuLmFkN2Jj MDEzODEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKQEAgLTEzMSw2ICsxMzEsMTkgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29tcGFjdEF0dHJpYnV0ZQogICogQW55IGNvZGUgbWFraW5nIGNoYW5nZXMgbWFudWFs bHkgdG8gYW5kIGZpZWxkcyBpbiB0aGUgRm9ybURhdGFfcGdfYXR0cmlidXRlCiAgKiBhcnJheSBt dXN0IHN1YnNlcXVlbnRseSBjYWxsIHBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKCkgdG8gZmx1 c2ggdGhlCiAgKiBjaGFuZ2VzIG91dCB0byB0aGUgY29ycmVzcG9uZGluZyAnY29tcGFjdF9hdHRy cycgZWxlbWVudC4KKyAqCisgKiBmaXJzdE5vbkNhY2hlZE9mZnNldEF0dHIgc3RvcmVzIHRoZSBp bmRleCBpbnRvIHRoZSBjb21wYWN0X2F0dHJzIGFycmF5IGZvcgorICogdGhlIGZpcnN0IGF0dHJp YnV0ZSB0aGF0IHdlIGRvbid0IGhhdmUgYSBrbm93biBhdHRjYWNoZW9mZiBmb3IuCisgKgorICog Zmlyc3ROb25HdWFyYW50ZWVkQXR0ciBzdG9yZXMgdGhlIGluZGV4IHRvIGludG8gdGhlIGNvbXBh Y3RfYXR0cnMgYXJyYXkgZm9yCisgKiB0aGUgZmlyc3QgYXR0cmlidXRlIHRoYXQgaXMgZWl0aGVy IE5VTExhYmxlLCBtaXNzaW5nLCBvciAhYXR0Ynl2YWwuICBUaGlzCisgKiBjYW4gYmUgdXNlZCBp biBsb2NhdGlvbnMgYXMgYSBndWFyYW50ZWUgdGhhdCBhdHRyaWJ1dGVzIGJlZm9yZSB0aGlzIHdp bGwKKyAqIGFsd2F5cyBleGlzdCBpbiB0dXBsZXMuICBUaGUgIWF0dGJ5dmFsIHBhcnQgaXNuJ3Qg cmVxdWlyZWQgZm9yIHRoaXMsIGJ1dAorICogaW5jbHVkaW5nIHRoaXMgYWxsb3dzIHZhcmlvdXMg dHVwbGUgZGVmb3JtaW5nIHJvdXRpbmVzIHRvIGZvcmVnbyBhbnkgY2hlY2tzCisgKiBmb3IgIWF0 dGJ5dmFsLgorICoKKyAqIE9uY2UgYSBUdXBsZURlc2MgaGFzIGJlZW4gcG9wdWxhdGVkLCBiZWZv cmUgaXQgaXMgdXNlZCBmb3IgYW55IHB1cnBvc2UsCisgKiBUdXBsZURlc2NGaW5hbGl6ZSgpIG11 c3QgYmUgY2FsbGVkIG9uIGl0LgogICovCiB0eXBlZGVmIHN0cnVjdCBUdXBsZURlc2NEYXRhCiB7 CkBAIC0xMzgsNiArMTUxLDExIEBAIHR5cGVkZWYgc3RydWN0IFR1cGxlRGVzY0RhdGEKIAlPaWQJ CQl0ZHR5cGVpZDsJCS8qIGNvbXBvc2l0ZSB0eXBlIElEIGZvciB0dXBsZSB0eXBlICovCiAJaW50 MzIJCXRkdHlwbW9kOwkJLyogdHlwbW9kIGZvciB0dXBsZSB0eXBlICovCiAJaW50CQkJdGRyZWZj b3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCwgb3IgLTEgaWYgbm90IGNvdW50aW5nICovCisJaW50 CQkJZmlyc3ROb25DYWNoZWRPZmZzZXRBdHRyOwkvKiBpbmRleCBvZiB0aGUgZmlyc3QgYXR0IHdp dGhvdXQKKwkJCQkJCQkJCQkJICogYW4gYXR0Y2FjaGVvZmYgKi8KKwlpbnQJCQlmaXJzdE5vbkd1 YXJhbnRlZWRBdHRyOyAvKiBpbmRleCBvZiB0aGUgZmlyc3QgbnVsbGFibGUsCisJCQkJCQkJCQkJ ICogbWlzc2luZywgZHJvcHBlZCwgb3IgIWF0dGJ5dmFsCisJCQkJCQkJCQkJICogYXR0cmlidXRl LiAqLwogCVR1cGxlQ29uc3RyICpjb25zdHI7CQkvKiBjb25zdHJhaW50cywgb3IgTlVMTCBpZiBu b25lICovCiAJLyogY29tcGFjdF9hdHRyc1tOXSBpcyB0aGUgY29tcGFjdCBtZXRhZGF0YSBvZiBB dHRyaWJ1dGUgTnVtYmVyIE4rMSAqLwogCUNvbXBhY3RBdHRyaWJ1dGUgY29tcGFjdF9hdHRyc1tG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOwpAQCAtMTk1LDcgKzIxMyw2IEBAIGV4dGVybiBUdXBsZURl c2MgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURlc2MgdHVwZGVzYywgaW50IG5h dHRzKTsKIAogZXh0ZXJuIFR1cGxlRGVzYyBDcmVhdGVUdXBsZURlc2NDb3B5Q29uc3RyKFR1cGxl RGVzYyB0dXBkZXNjKTsKIAotI2RlZmluZSBUdXBsZURlc2NGaW5hbGl6ZShkKSAoKHZvaWQpIDAp CiAjZGVmaW5lIFR1cGxlRGVzY1NpemUoc3JjKSBcCiAJKG9mZnNldG9mKHN0cnVjdCBUdXBsZURl c2NEYXRhLCBjb21wYWN0X2F0dHJzKSArIFwKIAkgKHNyYyktPm5hdHRzICogc2l6ZW9mKENvbXBh Y3RBdHRyaWJ1dGUpICsgXApAQCAtMjA2LDYgKzIyMyw3IEBAIGV4dGVybiB2b2lkIFR1cGxlRGVz Y0NvcHkoVHVwbGVEZXNjIGRzdCwgVHVwbGVEZXNjIHNyYyk7CiBleHRlcm4gdm9pZCBUdXBsZURl c2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0ck51bWJlciBkc3RBdHRubywKIAkJCQkJCQkg ICBUdXBsZURlc2Mgc3JjLCBBdHRyTnVtYmVyIHNyY0F0dG5vKTsKIAorZXh0ZXJuIHZvaWQgVHVw bGVEZXNjRmluYWxpemUoVHVwbGVEZXNjIHR1cGRlc2MpOwogZXh0ZXJuIHZvaWQgRnJlZVR1cGxl RGVzYyhUdXBsZURlc2MgdHVwZGVzYyk7CiAKIGV4dGVybiB2b2lkIEluY3JUdXBsZURlc2NSZWZD b3VudChUdXBsZURlc2MgdHVwZGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dHVwbWFjcy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaAppbmRleCBkNjRjMThiOTUw Yi4uODdkYmViNzY2MTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaApAQCAtMTUsNyArMTUsOSBAQAogI2Rl ZmluZSBUVVBNQUNTX0gKIAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZV9kLmgiCS8qIGZvciBU WVBBTElHTiBtYWNyb3MgKi8KLQorI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKKyNpbmNs dWRlICJwb3J0L3BnX2Jzd2FwLmgiCisjaW5jbHVkZSAidmFyYXR0LmgiCiAKIC8qCiAgKiBDaGVj ayBhIHR1cGxlJ3MgbnVsbCBiaXRtYXAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0 ZSBpcyBudWxsLgpAQCAtMjgsNiArMzAsNjIgQEAgYXR0X2lzbnVsbChpbnQgQVRULCBjb25zdCBi aXRzOCAqQklUUykKIAlyZXR1cm4gIShCSVRTW0FUVCA+PiAzXSAmICgxIDw8IChBVFQgJiAweDA3 KSkpOwogfQogCisvKgorICogcG9wdWxhdGVfaXNudWxsX2FycmF5CisgKgkJVHJhbnNmb3JtIGEg dHVwbGUncyBudWxsIGJpdG1hcCBpbnRvIGEgYm9vbGVhbiBhcnJheS4KKyAqCisgKiBDYWxsZXIg bXVzdCBlbnN1cmUgdGhhdCB0aGUgaXNudWxsIGFycmF5IGlzIHNpemVkIHNvIGl0IGNvbnRhaW5z CisgKiBhdCBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFzIHRoZXJlIGFyZSBiaXRzIGluIHRoZSAn Yml0cycgYXJyYXkuCisgKiBDYWxsZXJzIHNob3VsZCBiZSBhd2FyZSB0aGF0IGlzbnVsbCBpcyBw b3B1bGF0ZWQgOCBlbGVtZW50cyBhdCBhIHRpbWUsCisgKiBlZmZlY3RpdmVseSBhcyBpZiBuYXR0 cyBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDguCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZAorcG9wdWxhdGVfaXNudWxsX2FycmF5KGNvbnN0IGJpdHM4ICpiaXRzLCBpbnQg bmF0dHMsIGJvb2wgKmlzbnVsbCkKK3sKKwlpbnQJCQluYnl0ZXMgPSAobmF0dHMgKyA3KSA+PiAz OworCisJLyoKKwkgKiBNdWx0aXBseWluZyB0aGUgaW52ZXJ0ZWQgTlVMTCBiaXRtYXAgYnl0ZSBi eSB0aGlzIHZhbHVlIHJlc3VsdHMgaW4gdGhlCisJICogbG93ZXN0IGJpdCBpbiBlYWNoIGJ5dGUg YmVpbmcgc2V0IHRoZSBzYW1lIGFzIGVhY2ggYml0IG9mIHRoZSBpbnZlcnRlZAorCSAqIGJ5dGUu ICBXZSBwZXJmb3JtIHRoaXMgYXMgMiAzMi1iaXQgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBhIHNp bmdsZQorCSAqIDY0LWJpdCBvcGVyYXRpb24gYXMgbXVsdGlwbHlpbmcgYnkgdGhlIHJlcXVpcmVk IHZhbHVlIHRvIGRvIHRoaXMgaW4KKwkgKiA2NC1iaXRzIHdvdWxkIHJlc3VsdCBpbiBvdmVyZmxv d2luZyBhIHVpbnQ2NCBpbiBzb21lIGNhc2VzLgorCSAqCisJICogWFhYIGlmIHdlIGV2ZXIgcmVx dWlyZSBCTUkyICgtbWFyY2g9eDg2LTY0LXYzKSwgdGhlbiB0aGlzIGNvdWxkIGJlIGRvbmUKKwkg KiBtb3JlIGVmZmljaWVudGx5IG9uIG1vc3QgWDg2LTY0IENQVXMgd2l0aCB0aGUgUERFUCBpbnN0 cnVjdGlvbi4gIEJld2FyZQorCSAqIHRoYXQgc29tZSBjaGlwcyAoZS5nLiBBTUQncyBaZW4yKSBh cmUgaG9ycmlibHkgaW5lZmZpY2llbnQgYXQgUERFUC4KKwkgKi8KKyNkZWZpbmUgU1BSRUFEX0JJ VFNfTVVMVElQTElFUl8zMiAweDIwNDA4MVUKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmJ5dGVz OyBpKyssIGlzbnVsbCArPSA4KQorCXsKKwkJdWludDY0CQlpc251bGxfODsKKwkJYml0czgJCW51 bGxieXRlID0gfmJpdHNbaV07CisKKwkJLyogQ29udmVydCB0aGUgbG93ZXIgNCBiaXRzIG9mIE5V TEwgYml0bWFwIHdvcmQgaW50byBhIDY0IGJpdCBpbnQgKi8KKwkJaXNudWxsXzggPSAobnVsbGJ5 dGUgJiAweGYpICogU1BSRUFEX0JJVFNfTVVMVElQTElFUl8zMjsKKworCQkvKgorCQkgKiBDb252 ZXJ0IHRoZSB1cHBlciA0IGJpdHMgb2YgbnVsbCBiaXRtYXAgd29yZCBpbnRvIGEgNjQgYml0IGlu dCwKKwkJICogc2hpZnQgaW50byB0aGUgdXBwZXIgMzIgYml0IGFuZCBiaXR3aXNlLU9SIHdpdGgg dGhlIHJlc3VsdCBvZiB0aGUKKwkJICogbG93ZXIgNCBiaXRzLgorCQkgKi8KKwkJaXNudWxsXzgg fD0gKCh1aW50NjQpICgobnVsbGJ5dGUgPj4gNCkgKiBTUFJFQURfQklUU19NVUxUSVBMSUVSXzMy KSkgPDwgMzI7CisKKwkJLyogTWFzayBvdXQgYWxsIG90aGVyIGJpdHMgYXBhcnQgZnJvbSB0aGUg bG93ZXN0IGJpdCBvZiBlYWNoIGJ5dGUuICovCisJCWlzbnVsbF84ICY9IFVJTlQ2NENPTlNUKDB4 MDEwMTAxMDEwMTAxMDEwMSk7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKworCQkvKgorCQkg KiBGaXggYnl0ZSBvcmRlciBvbiBiaWctZW5kaWFuIG1hY2hpbmVzIGJlZm9yZSBjb3B5aW5nIHRv IHRoZSBhcnJheS4KKwkJICovCisJCWlzbnVsbF84ID0gcGdfYnN3YXA2NChpc251bGxfOCk7Cisj ZW5kaWYKKwkJbWVtY3B5KGlzbnVsbCwgJmlzbnVsbF84LCBzaXplb2YodWludDY0KSk7CisJfQor fQorCiAjaWZuZGVmIEZST05URU5ECiAvKgogICogR2l2ZW4gYW4gYXR0Ynl2YWwgYW5kIGFuIGF0 dGxlbiBmcm9tIGVpdGhlciBhIEZvcm1fcGdfYXR0cmlidXRlIG9yCkBAIC02OSw2ICsxMjcsMTcw IEBAIGZldGNoX2F0dChjb25zdCB2b2lkICpULCBib29sIGF0dGJ5dmFsLCBpbnQgYXR0bGVuKQog CWVsc2UKIAkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShUKTsKIH0KKworLyoKKyAqIFNhbWUsIGJ1 dCBubyBlcnJvciBjaGVja2luZyBmb3IgaW52YWxpZCBhdHRsZW5zIGZvciBieXZhbCB0eXBlcy4g IFRoaXMKKyAqIGlzIHNhZmUgdG8gdXNlIHdoZW4gYXR0bGVuIGNvbWVzIGZyb20gQ29tcGFjdEF0 dHJpYnV0ZSBhcyB3ZSB2YWxpZGF0ZSB0aGUKKyAqIGxlbmd0aCB3aGVuIHBvcHVsYXRpbmcgdGhh dCBzdHJ1Y3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgRGF0dW0KK2ZldGNoX2F0dF9ub2Vycihjb25z dCB2b2lkICpULCBib29sIGF0dGJ5dmFsLCBpbnQgYXR0bGVuKQoreworCWlmIChhdHRieXZhbCkK Kwl7CisJCXN3aXRjaCAoYXR0bGVuKQorCQl7CisJCQljYXNlIHNpemVvZihpbnQzMik6CisJCQkJ cmV0dXJuIEludDMyR2V0RGF0dW0oKigoY29uc3QgaW50MzIgKikgVCkpOworCQkJY2FzZSBzaXpl b2YoaW50MTYpOgorCQkJCXJldHVybiBJbnQxNkdldERhdHVtKCooKGNvbnN0IGludDE2ICopIFQp KTsKKwkJCWNhc2Ugc2l6ZW9mKGNoYXIpOgorCQkJCXJldHVybiBDaGFyR2V0RGF0dW0oKigoY29u c3QgY2hhciAqKSBUKSk7CisJCQlkZWZhdWx0OgorCQkJCUFzc2VydChhdHRsZW4gPT0gc2l6ZW9m KGludDY0KSk7CisJCQkJcmV0dXJuIEludDY0R2V0RGF0dW0oKigoY29uc3QgaW50NjQgKikgVCkp OworCQl9CisJfQorCWVsc2UKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShUKTsKK30KKworCisv KgorICogYWxpZ25fZmV0Y2hfdGhlbl9hZGQKKyAqCQlBcHBsaWVzIGFsbCB0aGUgZnVuY3Rpb25h bGl0eSBvZiBhdHRfcG9pbnRlcl9hbGlnbmJ5KCksCisgKgkJZmV0Y2hfYXR0X25vZXJyKCkgYW5k IGF0dF9hZGRsZW5ndGhfcG9pbnRlcigpLCByZXN1bHRpbmcgaW4gdGhlICpvZmYKKyAqCQlwb2lu dGVyIHRvIHRoZSBwZXJoYXBzIHVuYWxpZ25lZCBudW1iZXIgb2YgYnl0ZXMgaW50byAndHVwcHRy JywgcmVhZHkKKyAqCQl0byBkZWZvcm0gdGhlIG5leHQgYXR0cmlidXRlLgorICoKKyAqIHR1cHB0 cjogcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0dXBsZSwgYWZ0ZXIgdGhlIGhlYWRl ciBhbmQgYW55CisgKiBOVUxMIGJpdG1hc2suCisgKiBvZmY6IG9mZnNldCBpbiBieXRlcyBmb3Ig cmVhZGluZyB0dXBsZSBkYXRhLCBwb3NzaWJseSB1bmFsaWduZWQuCisgKiBhdHRieXZhbCwgYXR0 bGVuIGFuZCBhdHRhbGlnbmJ5IGFyZSB2YWx1ZXMgZnJvbSBDb21wYWN0QXR0cmlidXRlLgorICov CitzdGF0aWMgaW5saW5lIERhdHVtCithbGlnbl9mZXRjaF90aGVuX2FkZChjb25zdCBjaGFyICp0 dXBwdHIsIHVpbnQzMiAqb2ZmLCBib29sIGF0dGJ5dmFsLCBpbnQgYXR0bGVuLAorCQkJCQkgdWlu dDggYXR0YWxpZ25ieSkKK3sKKwlEYXR1bQkJcmVzOworCisJaWYgKGF0dGxlbiA+IDApCisJewor CQljb25zdCBjaGFyICpvZmZzZXRfcHRyOworCisJCSpvZmYgPSBUWVBFQUxJR04oYXR0YWxpZ25i eSwgKm9mZik7CisJCW9mZnNldF9wdHIgPSB0dXBwdHIgKyAqb2ZmOworCQkqb2ZmICs9IGF0dGxl bjsKKwkJaWYgKGF0dGJ5dmFsKQorCQl7CisJCQlzd2l0Y2ggKGF0dGxlbikKKwkJCXsKKwkJCQlj YXNlIHNpemVvZihjaGFyKToKKwkJCQkJcmV0dXJuIENoYXJHZXREYXR1bSgqKChjb25zdCBjaGFy ICopIG9mZnNldF9wdHIpKTsKKwkJCQljYXNlIHNpemVvZihpbnQxNik6CisJCQkJCXJldHVybiBJ bnQxNkdldERhdHVtKCooKGNvbnN0IGludDE2ICopIG9mZnNldF9wdHIpKTsKKwkJCQljYXNlIHNp emVvZihpbnQzMik6CisJCQkJCXJldHVybiBJbnQzMkdldERhdHVtKCooKGNvbnN0IGludDMyICop IG9mZnNldF9wdHIpKTsKKwkJCQlkZWZhdWx0OgorCisJCQkJCS8qCisJCQkJCSAqIHBvcHVsYXRl X2NvbXBhY3RfYXR0cmlidXRlX2ludGVybmFsKCkgc2hvdWxkIGhhdmUKKwkJCQkJICogY2hlY2tl ZAorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KGF0dGxlbiA9PSBzaXplb2YoaW50NjQpKTsKKwkJCQkJ cmV0dXJuIEludDY0R2V0RGF0dW0oKigoY29uc3QgaW50NjQgKikgb2Zmc2V0X3B0cikpOworCQkJ fQorCQl9CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0ob2Zmc2V0X3B0cik7CisJfQorCWVsc2Ug aWYgKGF0dGxlbiA9PSAtMSkKKwl7CisJCWlmICghVkFSQVRUX0lTX1NIT1JUKHR1cHB0ciArICpv ZmYpKQorCQkJKm9mZiA9IFRZUEVBTElHTihhdHRhbGlnbmJ5LCAqb2ZmKTsKKworCQlyZXMgPSBQ b2ludGVyR2V0RGF0dW0odHVwcHRyICsgKm9mZik7CisJCSpvZmYgKz0gVkFSU0laRV9BTlkoRGF0 dW1HZXRQb2ludGVyKHJlcykpOworCQlyZXR1cm4gcmVzOworCX0KKwllbHNlCisJeworCQlBc3Nl cnQoYXR0bGVuID09IC0yKTsKKwkJKm9mZiA9IFRZUEVBTElHTihhdHRhbGlnbmJ5LCAqb2ZmKTsK KwkJcmVzID0gUG9pbnRlckdldERhdHVtKHR1cHB0ciArICpvZmYpOworCQkqb2ZmICs9IHN0cmxl bih0dXBwdHIgKyAqb2ZmKSArIDE7CisJCXJldHVybiByZXM7CisJfQorfQorCisvKgorICogZmly c3RfbnVsbF9hdHRyCisgKgkJSW5zcGVjdCBhIE5VTEwgYml0bWFwIGZyb20gYSB0dXBsZSBhbmQg cmV0dXJuIHRoZSAwLWJhc2VkIGF0dG51bSBvZiB0aGUKKyAqCQlmaXJzdCBOVUxMIGF0dHJpYnV0 ZS4gIFJldHVybnMgbmF0dHMgaWYgbm8gTlVMTHMgd2VyZSBmb3VuZC4KKyAqCisgKiBUaGlzIGlz IGNvZGVkIHRvIGV4cGVjdCB0aGF0ICdiaXRzJyBjb250YWlucyBhdCBsZWFzdCBvbmUgMCBiaXQg c29tZXdoZXJlCisgKiBpbiB0aGUgYXJyYXksIGJ1dCBub3QgbmVjZXNzYXJpbHkgPCBuYXR0cy4g IE5vdGUgdGhhdCBuYXR0cyBtYXkgYmUgcGFzc2VkCisgKiBhcyBhIHZhbHVlIGxvd2VyIHRoYW4g dGhlIG51bWJlciBvZiBiaXRzIHBoeXNpY2FsbHkgc3RvcmVkIGluIHRoZSB0dXBsZSdzCisgKiBO VUxMIGJpdG1hcCwgaW4gd2hpY2ggY2FzZSB3ZSBtYXkgbm90IGZpbmQgYSBOVUxMIGFuZCByZXR1 cm4gbmF0dHMuCisgKgorICogVGhlIHJlYXNvbiB3ZSByZXF1aXJlIGF0IGxlYXN0IG9uZSAwIGJp dCBzb21ld2hlcmUgaW4gdGhlIE5VTEwgYml0bWFwIGlzCisgKiB0aGF0IHRoZSBmb3IgbG9vcCB0 aGF0IGNoZWNrcyAweEZGIGJ5dGVzIHdvdWxkIGxvb3AgdG8gdGhlIGxhc3QgYnl0ZSBpbgorICog dGhlIGFycmF5IGlmIGFsbCBieXRlcyB3ZXJlIDB4RkYsIGFuZCB0aGUgc3Vic2VxdWVudCBjb2Rl IHRoYXQgZmluZHMgdGhlCisgKiByaWdodC1tb3N0IDAgYml0IHdvdWxkIGFjY2VzcyB0aGUgZmly c3QgYnl0ZSBiZXlvbmQgdGhlIGJpdG1hcC4gIFByb3ZpZGVkCisgKiB3ZSBmaW5kIGEgMCBiaXQg YmVmb3JlIHRoZW4sIHRoYXQgd29uJ3QgaGFwcGVuLiAgU2luY2UgdHVwbGVzIHdoaWNoIGhhdmUg bm8KKyAqIE5VTExzIGRvbid0IGhhdmUgYSBOVUxMIGJpdG1hcCwgdGhpcyBmdW5jdGlvbiB3b24n dCBnZXQgY2FsbGVkIGZvciB0aGF0CisgKiBjYXNlLgorICovCitzdGF0aWMgaW5saW5lIGludAor Zmlyc3RfbnVsbF9hdHRyKGNvbnN0IGJpdHM4ICpiaXRzLCBpbnQgbmF0dHMpCit7CisJaW50CQkJ bmF0dEJ5dGUgPSBuYXR0cyA+PiAzOworCWludAkJCWJ5dGVudW07CisJaW50CQkJcmVzOworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWludAkJCWZpcnN0bnVsbF9jaGVjayA9IG5hdHRz OworCisJLyogRG8gaXQgdGhlIHNsb3cgd2F5IGFuZCBjaGVjayB3ZSBnZXQgdGhlIHNhbWUgYW5z d2VyLiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKKwl7CisJCWlmIChhdHRf aXNudWxsKGksIGJpdHMpKQorCQl7CisJCQlmaXJzdG51bGxfY2hlY2sgPSBpOworCQkJYnJlYWs7 CisJCX0KKwl9CisjZW5kaWYKKworCS8qIFByb2Nlc3MgYWxsIGJ5dGVzIHVwIHRvIGp1c3QgYmVm b3JlIHRoZSBieXRlIGZvciB0aGUgbmF0dHMgYXR0cmlidXRlICovCisJZm9yIChieXRlbnVtID0g MDsgYnl0ZW51bSA8IG5hdHRCeXRlOyBieXRlbnVtKyspCisJeworCQkvKiBicmVhayBpZiB0aGVy ZSdzIGFueSBOVUxMIGF0dHJzIChhIDAgYml0KSAqLworCQlpZiAoYml0c1tieXRlbnVtXSAhPSAw eEZGKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBMb29rIGZvciB0aGUgaGlnaGVzdCAwLWJp dCBpbiB0aGUgJ2J5dGVudW0nIGVsZW1lbnQuICBUbyBkbyB0aGlzLCB3ZQorCSAqIHByb21vdGUg dGhlIHVpbnQ4IHRvIHVpbnQzMiBiZWZvcmUgcGVyZm9ybWluZyB0aGUgYml0d2lzZSBOT1QgYW5k CisJICogbG9va2luZyBmb3IgdGhlIGZpcnN0IDEtYml0LiAgVGhpcyB3b3JrcyBldmVuIHdoZW4g dGhlIGJ5dGUgaXMgMHhGRiwgYXMKKwkgKiB0aGUgYml0d2lzZSBOT1Qgb2YgMHhGRiBpbiAzMiBi aXRzIGlzIDB4RkZGRkZGMDAsIGluIHdoaWNoIGNhc2UKKwkgKiBwZ19yaWdodG1vc3Rfb25lX3Bv czMyKCkgd2lsbCByZXR1cm4gOC4gIFdlIG1heSBlbmQgdXAgd2l0aCBhIHZhbHVlCisJICogaGln aGVyIHRoYW4gbmF0dHMgaGVyZSwgYnV0IHdlJ2xsIGZpeCB0aGF0IHdpdGggdGhlIE1pbigpIGJl bG93LgorCSAqLworCXJlcyA9IGJ5dGVudW0gPDwgMzsKKwlyZXMgKz0gcGdfcmlnaHRtb3N0X29u ZV9wb3MzMih+KCh1aW50MzIpIGJpdHNbYnl0ZW51bV0pKTsKKworCS8qCisJICogU2luY2Ugd2Ug ZGlkIG5vIG1hc2tpbmcgdG8gbWFzayBvdXQgYml0cyBiZXlvbmQgdGhlIG5hdHQndGggYml0LCB3 ZSBtYXkKKwkgKiBoYXZlIGZvdW5kIGEgYml0IGhpZ2hlciB0aGFuIG5hdHRzLCBzbyB3ZSBtdXN0 IGNhcCByZXMgdG8gbmF0dHMKKwkgKi8KKwlyZXMgPSBNaW4ocmVzLCBuYXR0cyk7CisKKwkvKiBF bnN1cmUgd2UgZ290IHRoZSBzYW1lIGFuc3dlciBhcyB0aGUgYXR0X2lzbnVsbCgpIGxvb3AgZ290 ICovCisJQXNzZXJ0KHJlcyA9PSBmaXJzdG51bGxfY2hlY2spOworCisJcmV0dXJuIHJlczsKK30K ICNlbmRpZgkJCQkJCQkvKiBGUk9OVEVORCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK aW5kZXggZDQ2YmE1OTg5NWQuLmJmMjM5ZmMxNTZmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK QEAgLTU5NSw3ICs1OTUsOCBAQCBleHRlcm4gdm9pZCBFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRM KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJICBjb25zdCBUdXBsZVRhYmxlU2xvdE9w cyAqdHRzX29wcyk7CiBleHRlcm4gdm9pZCBFeGVjSW5pdFNjYW5UdXBsZVNsb3QoRVN0YXRlICpl c3RhdGUsIFNjYW5TdGF0ZSAqc2NhbnN0YXRlLAogCQkJCQkJCQkgIFR1cGxlRGVzYyB0dXBsZWRl c2MsCi0JCQkJCQkJCSAgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnR0c19vcHMpOworCQkJCQkJ CQkgIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICp0dHNfb3BzLAorCQkJCQkJCQkgIHVpbnQxNiBm bGFncyk7CiBleHRlcm4gVHVwbGVUYWJsZVNsb3QgKkV4ZWNJbml0RXh0cmFUdXBsZVNsb3QoRVN0 YXRlICplc3RhdGUsCiAJCQkJCQkJCQkJCSAgVHVwbGVEZXNjIHR1cGxlZGVzYywKIAkJCQkJCQkJ CQkJICBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqdHRzX29wcyk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFi bGUuaAppbmRleCAzYjA5YWJiZjk5Zi4uNzg1NTgwOThmYTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFi bGUuaApAQCAtODQsOSArODQsNiBAQAogICogdHRzX3ZhbHVlcy90dHNfaXNudWxsIGFyZSBhbGxv Y2F0ZWQgZWl0aGVyIHdoZW4gdGhlIHNsb3QgaXMgY3JlYXRlZCAod2hlbgogICogdGhlIGRlc2Ny aXB0b3IgaXMgcHJvdmlkZWQpLCBvciB3aGVuIGEgZGVzY3JpcHRvciBpcyBhc3NpZ25lZCB0byB0 aGUgc2xvdDsKICAqIHRoZXkgYXJlIG9mIGxlbmd0aCBlcXVhbCB0byB0aGUgZGVzY3JpcHRvcidz IG5hdHRzLgotICoKLSAqIFRoZSBUVFNfRkxBR19TTE9XIGZsYWcgaXMgc2F2ZWQgc3RhdGUgZm9y Ci0gKiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlLCBhbmQgc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5 IGFueSBvdGhlciBjb2RlLgogICotLS0tLS0tLS0tCiAgKi8KIApAQCAtOTgsOSArOTUsMTMgQEAK ICNkZWZpbmUJCQlUVFNfRkxBR19TSE9VTERGUkVFCQkoMSA8PCAyKQogI2RlZmluZSBUVFNfU0hP VUxERlJFRShzbG90KSAoKChzbG90KS0+dHRzX2ZsYWdzICYgVFRTX0ZMQUdfU0hPVUxERlJFRSkg IT0gMCkKIAotLyogc2F2ZWQgc3RhdGUgZm9yIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUgKi8KLSNk ZWZpbmUJCQlUVFNfRkxBR19TTE9XCQkoMSA8PCAzKQotI2RlZmluZSBUVFNfU0xPVyhzbG90KSAo KChzbG90KS0+dHRzX2ZsYWdzICYgVFRTX0ZMQUdfU0xPVykgIT0gMCkKKy8qCisgKiB0cnVlID0g c2xvdCdzIGZvcm1lZCB0dXBsZSBndWFyYW50ZWVkIHRvIG5vdCBoYXZlIE5VTExzIGluIE5PVCBO VUxMYWJsZQorICogY29sdW1ucy4KKyAqLworI2RlZmluZQkJCVRUU19GTEFHX09CRVlTX05PVF9O VUxMX0NPTlNUUkFJTlRTCQkoMSA8PCAzKQorI2RlZmluZSBUVFNfT0JFWVNfTk9UX05VTExfQ09O U1RSQUlOVFMoc2xvdCkgXAorCSgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19PQkVZU19O T1RfTlVMTF9DT05TVFJBSU5UUykgIT0gMCkKIAogLyogZml4ZWQgdHVwbGUgZGVzY3JpcHRvciAq LwogI2RlZmluZQkJCVRUU19GTEFHX0ZJWEVECQkoMSA8PCA0KQpAQCAtMTIzLDcgKzEyNCwxNCBA QCB0eXBlZGVmIHN0cnVjdCBUdXBsZVRhYmxlU2xvdAogI2RlZmluZSBGSUVMRE5PX1RVUExFVEFC TEVTTE9UX1ZBTFVFUyA1CiAJRGF0dW0JICAgKnR0c192YWx1ZXM7CQkvKiBjdXJyZW50IHBlci1h dHRyaWJ1dGUgdmFsdWVzICovCiAjZGVmaW5lIEZJRUxETk9fVFVQTEVUQUJMRVNMT1RfSVNOVUxM IDYKLQlib29sCSAgICp0dHNfaXNudWxsOwkJLyogY3VycmVudCBwZXItYXR0cmlidXRlIGlzbnVs bCBmbGFncyAqLworCWJvb2wJICAgKnR0c19pc251bGw7CQkvKiBjdXJyZW50IHBlci1hdHRyaWJ1 dGUgaXNudWxsIGZsYWdzLiAgQXJyYXkKKwkJCQkJCQkJICogc2l6ZSBtdXN0IGFsd2F5cyBiZSBy b3VuZGVkIHVwIHRvIHRoZSBuZXh0CisJCQkJCQkJCSAqIG11bHRpcGxlIG9mIDggZWxlbWVudHMu ICovCisJaW50CQkJdHRzX2ZpcnN0X25vbmd1YXJhbnRlZWQ7CS8qIFRoZSB2YWx1ZSBmcm9tIHRo ZSBUdXBsZURlc2MncworCQkJCQkJCQkJCQkgKiBmaXJzdE5vbkd1YXJhbnRlZWRBdHRyLCBvciAw CisJCQkJCQkJCQkJCSAqIHdoZW4gdHRzX2ZsYWdzIGRvZXMgbm90IGNvbnRhaW4KKwkJCQkJCQkJ CQkJICogVFRTX0ZMQUdfT0JFWVNfTk9UX05VTExfQ09OU1RSQUlOVFMgKi8KKwogCU1lbW9yeUNv bnRleHQgdHRzX21jeHQ7CQkvKiBzbG90IGl0c2VsZiBpcyBpbiB0aGlzIGNvbnRleHQgKi8KIAlJ dGVtUG9pbnRlckRhdGEgdHRzX3RpZDsJLyogc3RvcmVkIHR1cGxlJ3MgdGlkICovCiAJT2lkCQkJ dHRzX3RhYmxlT2lkOwkvKiB0YWJsZSBvaWQgb2YgdHVwbGUgKi8KQEAgLTMxMyw5ICszMjEsMTEg QEAgdHlwZWRlZiBzdHJ1Y3QgTWluaW1hbFR1cGxlVGFibGVTbG90CiAKIC8qIGluIGV4ZWN1dG9y L2V4ZWNUdXBsZXMuYyAqLwogZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpNYWtlVHVwbGVUYWJsZVNs b3QoVHVwbGVEZXNjIHR1cGxlRGVzYywKLQkJCQkJCQkJCQkgIGNvbnN0IFR1cGxlVGFibGVTbG90 T3BzICp0dHNfb3BzKTsKKwkJCQkJCQkJCQkgIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICp0dHNf b3BzLAorCQkJCQkJCQkJCSAgdWludDE2IGZsYWdzKTsKIGV4dGVybiBUdXBsZVRhYmxlU2xvdCAq RXhlY0FsbG9jVGFibGVTbG90KExpc3QgKip0dXBsZVRhYmxlLCBUdXBsZURlc2MgZGVzYywKLQkJ CQkJCQkJCQkgIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICp0dHNfb3BzKTsKKwkJCQkJCQkJCQkg IGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICp0dHNfb3BzLAorCQkJCQkJCQkJCSAgdWludDE2IGZs YWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNSZXNldFR1cGxlVGFibGUoTGlzdCAqdHVwbGVUYWJsZSwg Ym9vbCBzaG91bGRGcmVlKTsKIGV4dGVybiBUdXBsZVRhYmxlU2xvdCAqTWFrZVNpbmdsZVR1cGxl VGFibGVTbG90KFR1cGxlRGVzYyB0dXBkZXNjLAogCQkJCQkJCQkJCQkJY29uc3QgVHVwbGVUYWJs ZVNsb3RPcHMgKnR0c19vcHMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvZGVmb3JtX2JlbmNoLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZv cm1fYmVuY2guYwppbmRleCA3ODM4ZjYzOWJlZi4uNGYxMDQ5ODkyOTcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCkBAIC00OCw3ICs0OCw5IEBAIGRl Zm9ybV9iZW5jaChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBlcnJtc2coIm9ubHkgaGVhcCBBTSBp cyBzdXBwb3J0ZWQiKSkpOwogCiAJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKLQlz bG90ID0gTWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNCdWZmZXJIZWFwVHVwbGUp OworCXNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QodHVwZGVzYywKKwkJCQkJCQkgICZUVFNPcHNC dWZmZXJIZWFwVHVwbGUsCisJCQkJCQkJICBUVFNfRkxBR19PQkVZU19OT1RfTlVMTF9DT05TVFJB SU5UUyk7CiAJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIEdldEFjdGl2ZVNuYXBz aG90KCksIDAsIE5VTEwsIHRydWUsIGZhbHNlKTsKIAogCS8qCi0tIAoyLjUxLjAKCg== --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Disposition: attachment; filename="v12-0005-Reduce-size-of-CompactAttribute-struct-to-8-byte.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3sh44 RnJvbSA4ZTFhOTQ1ZjE3MmUzYzZlOWNjMDA5MmU1YzIxNjgxNTFlZDhjNmQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAyMyBGZWIgMjAyNiAwOTozOTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDUv Nl0gUmVkdWNlIHNpemUgb2YgQ29tcGFjdEF0dHJpYnV0ZSBzdHJ1Y3QgdG8gOCBieXRlcwoKUHJl dmlvdXNseSwgdGhpcyB3YXMgMTYgYnl0ZXMuICBXaXRoIHRoZSB1c2Ugb2Ygc29tZSBiaXRmbGFn cyBhbmQgYnkKcmVkdWNpbmcgdGhlIGF0dGNhY2hlb2ZmIGZpZWxkIHNpemUgdG8gYSAxNi1iaXQg dHlwZSwgd2UgY2FuIGhhbHZlIHRoZQpzaXplIG9mIHRoZSBzdHJ1Y3QuCgpJdCdzIHVubGlrZWx5 IHRoYXQgY2FjaGluZyB0aGUgb2Zmc2V0cyBmb3Igb2Zmc2V0cyBsYXJnZXIgdGhhbiB3aGF0IHdp bGwKZml0IGluIGEgMTYtYml0IGludCB3aWxsIGhlbHAgbXVjaCBhcyB0aGUgdHVwbGUgaXMgdmVy eSBsaWtlbHkgdG8gaGF2ZQpzb21lIG5vbi1maXhlZC13aWR0aCB0eXBlcyBhbnl3YXksIHRoZSBv ZmZzZXRzIG9mIHdoaWNoIHdlIGNhbm5vdCBjYWNoZS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyB8IDEwICsrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYyAgIHwgMTcgKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90 dXBkZXNjLmggICAgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAz MCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVw ZGVzYy5jCmluZGV4IGM2ODU2MTMzN2Q3Li43MTQ2MWJhNjA5NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi90dXBkZXNjLmMKQEAgLTUzMCw2ICs1MzAsMTYgQEAgVHVwbGVEZXNjRmluYWxpemUoVHVw bGVEZXNjIHR1cGRlc2MpCiAKIAkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGNhdHRy LT5hdHRhbGlnbmJ5KTsKIAorCQkvKgorCQkgKiBhdHRjYWNoZW9mZiBpcyBhbiBpbnQxNiwgc28g ZG9uJ3QgdHJ5IHRvIGNhY2hlIGFueSBvZmZzZXRzIGxhcmdlcgorCQkgKiB0aGFuIHdpbGwgZml0 IGluIHRoYXQgdHlwZS4gIEFueSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBvZmZzZXQgbW9yZQorCQkg KiB0aGFuIDJeMTUgYXJlIGxpa2VseSBkdWUgdG8gdmFyaWFibGUtbGVuZ3RoIGF0dHJpYnV0ZXMu ICBTaW5jZSB3ZQorCQkgKiBkb24ndCBjYWNoZSBvZmZzZXRzIGZvciBvciBiZXlvbmQgdmFyaWFi bGUtbGVuZ3RoIGF0dHJpYnV0ZXMsIHVzaW5nCisJCSAqIGFuIGludDE2IHJhdGhlciB0aGFuIGFu IGludDMyIGhlcmUgaXMgdW5saWtlbHkgdG8gY29zdCB1cyBhbnl0aGluZy4KKwkJICovCisJCWlm IChvZmYgPiBQR19JTlQxNl9NQVgpCisJCQlicmVhazsKKwogCQljYXR0ci0+YXR0Y2FjaGVvZmYg PSBvZmY7CiAKIAkJb2ZmICs9IGNhdHRyLT5hdHRsZW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKaW5kZXggMTRiMmE5ZjBhZjYuLjFiNWUxZWJkMzM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1 cGxlcy5jCkBAIC0xMDEzLDYgKzEwMTMsNyBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgdm9pZAogc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwg SGVhcFR1cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAJCQkJCSAgIGludCByZXFuYXR0cykKIHsK KwlDb21wYWN0QXR0cmlidXRlICpjYXR0cnM7CiAJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJ VHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3I7CiAJSGVhcFR1 cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CkBAIC0xMDk5LDYgKzExMDAsMTMgQEAgc2xv dF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxl LCB1aW50MzIgKm9mZnAsCiAJdmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsKIAlzbG90LT50dHNf bnZhbGlkID0gcmVxbmF0dHM7CiAKKwkvKgorCSAqIFdlIHN0b3JlIHRoZSB0dXBsZURlc2MncyBD b21wYWN0QXR0cmlidXRlIGFycmF5IGluICdjYXR0cnMnIGFzIGdjYworCSAqIHNlZW1zIHRvIGJl IHVud2lsbGluZyB0byBvcHRpbWl6ZSBhY2Nlc3NpbmcgdGhlIENvbXBhY3RBdHRyaWJ1dGUKKwkg KiBlbGVtZW50IGVmZmljaWVudGx5IHdoZW4gYWNjZXNzaW5nIGl0IHZpYSBUdXBsZURlc2NDb21w YWN0QXR0cigpLgorCSAqLworCWNhdHRycyA9IHR1cGxlRGVzYy0+Y29tcGFjdF9hdHRyczsKKwog CS8qIEVuc3VyZSB3ZSBjYWxjdWxhdGVkIHRwIGNvcnJlY3RseSAqLwogCUFzc2VydCh0cCA9PSAo Y2hhciAqKSB0dXAgKyB0dXAtPnRfaG9mZik7CiAKQEAgLTExMDksNyArMTExNyw3IEBAIHNsb3Rf ZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwg dWludDMyICpvZmZwLAogCQlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROb25HdWFyYW50ZWVkQXR0cjsg YXR0bnVtKyspCiAJCXsKIAkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7Ci0JCQljYXR0ciA9IFR1 cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJCWNhdHRyID0gJmNhdHRy c1thdHRudW1dOwogCQkJYXR0bGVuID0gY2F0dHItPmF0dGxlbjsKIAogCQkJLyogV2UgZG9uJ3Qg ZXhwZWN0IGFueSBub24tYnl2YWwgdHlwZXMgKi8KQEAgLTExNDksOSArMTE1Nyw4IEBAIHNsb3Rf ZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwg dWludDMyICpvZmZwLAogCQlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHI7 IGF0dG51bSsrKQogCQl7CiAJCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOwotCQkJY2F0dHIgPSBU dXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCQljYXR0ciA9ICZjYXR0 cnNbYXR0bnVtXTsKIAkJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47Ci0KIAkJCW9mZiA9IGNhdHRy LT5hdHRjYWNoZW9mZjsKIAkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsg b2ZmLAogCQkJCQkJCQkJCQkgY2F0dHItPmF0dGJ5dmFsLApAQCAtMTE3Nyw3ICsxMTg0LDcgQEAg c2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1 cGxlLCB1aW50MzIgKm9mZnAsCiAJCWludAkJCWF0dGxlbjsKIAogCQlpc251bGxbYXR0bnVtXSA9 IGZhbHNlOwotCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVt KTsKKwkJY2F0dHIgPSAmY2F0dHJzW2F0dG51bV07CiAJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47 CiAKIAkJLyoKQEAgLTEyMTAsNyArMTIxNyw3IEBAIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVw bGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAogCQkJY29u dGludWU7CiAJCX0KIAotCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg YXR0bnVtKTsKKwkJY2F0dHIgPSAmY2F0dHJzW2F0dG51bV07CiAJCWF0dGxlbiA9IGNhdHRyLT5h dHRsZW47CiAKIAkJLyogQXMgYWJvdmUsIHdlIGRvbid0IGV4cGVjdCBjc3RyaW5ncyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90dXBkZXNjLmgKaW5kZXggYWQ3YmMwMTM4MTIuLmU5ODAzNmI1OGJmIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBk ZXNjLmgKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHVwbGVDb25zdHIKICAqCQlk aXJlY3RseSBhZnRlciB0aGUgRm9ybURhdGFfcGdfYXR0cmlidXRlIHN0cnVjdCBpcyBwb3B1bGF0 ZWQgb3IKICAqCQlhbHRlcmVkIGluIGFueSB3YXkuCiAgKgotICogQ3VycmVudGx5LCB0aGlzIHN0 cnVjdCBpcyAxNiBieXRlcy4gIEFueSBjb2RlIGNoYW5nZXMgd2hpY2ggZW5sYXJnZSB0aGlzCisg KiBDdXJyZW50bHksIHRoaXMgc3RydWN0IGlzIDggYnl0ZXMuICBBbnkgY29kZSBjaGFuZ2VzIHdo aWNoIGVubGFyZ2UgdGhpcwogICogc3RydWN0IHNob3VsZCBiZSBjb25zaWRlcmVkIHZlcnkgY2Fy ZWZ1bGx5LgogICoKICAqIENvZGUgd2hpY2ggbXVzdCBhY2Nlc3MgYSBUdXBsZURlc2MncyBhdHRy aWJ1dGUgZGF0YSBzaG91bGQgYWx3YXlzIG1ha2UgdXNlCkBAIC02NywxNyArNjcsMTcgQEAgdHlw ZWRlZiBzdHJ1Y3QgVHVwbGVDb25zdHIKICAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcGFjdEF0dHJp YnV0ZQogewotCWludDMyCQlhdHRjYWNoZW9mZjsJLyogZml4ZWQgb2Zmc2V0IGludG8gdHVwbGUs IGlmIGtub3duLCBvciAtMSAqLworCWludDE2CQlhdHRjYWNoZW9mZjsJLyogZml4ZWQgb2Zmc2V0 IGludG8gdHVwbGUsIGlmIGtub3duLCBvciAtMSAqLwogCWludDE2CQlhdHRsZW47CQkJLyogYXR0 ciBsZW4gaW4gYnl0ZXMgb3IgLTEgPSB2YXJsZW4sIC0yID0KIAkJCQkJCQkJICogY3N0cmluZyAq LwogCWJvb2wJCWF0dGJ5dmFsOwkJLyogYXMgRm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dGJ5dmFs ICovCi0JYm9vbAkJYXR0aXNwYWNrYWJsZTsJLyogRm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dHN0 b3JhZ2UgIT0KLQkJCQkJCQkJICogVFlQU1RPUkFHRV9QTEFJTiAqLwotCWJvb2wJCWF0dGhhc21p c3Npbmc7CS8qIGFzIEZvcm1EYXRhX3BnX2F0dHJpYnV0ZS5hdHRoYXNtaXNzaW5nICovCi0JYm9v bAkJYXR0aXNkcm9wcGVkOwkvKiBhcyBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0aXNkcm9wcGVk ICovCi0JYm9vbAkJYXR0Z2VuZXJhdGVkOwkvKiBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0Z2Vu ZXJhdGVkICE9ICdcMCcgKi8KLQljaGFyCQlhdHRudWxsYWJpbGl0eTsgLyogc3RhdHVzIG9mIG5v dC1udWxsIGNvbnN0cmFpbnQsIHNlZSBiZWxvdyAqLwogCXVpbnQ4CQlhdHRhbGlnbmJ5OwkJLyog YWxpZ25tZW50IHJlcXVpcmVtZW50IGluIGJ5dGVzICovCisJYm9vbAkJYXR0aXNwYWNrYWJsZTox OwkvKiBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0c3RvcmFnZSAhPQorCQkJCQkJCQkJICogVFlQ U1RPUkFHRV9QTEFJTiAqLworCWJvb2wJCWF0dGhhc21pc3Npbmc6MTsJLyogYXMgRm9ybURhdGFf cGdfYXR0cmlidXRlLmF0dGhhc21pc3NpbmcgKi8KKwlib29sCQlhdHRpc2Ryb3BwZWQ6MTsgLyog YXMgRm9ybURhdGFfcGdfYXR0cmlidXRlLmF0dGlzZHJvcHBlZCAqLworCWJvb2wJCWF0dGdlbmVy YXRlZDoxOyAvKiBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUuYXR0Z2VuZXJhdGVkICE9ICdcMCcgKi8K KwljaGFyCQlhdHRudWxsYWJpbGl0eTsgLyogc3RhdHVzIG9mIG5vdC1udWxsIGNvbnN0cmFpbnQs IHNlZSBiZWxvdyAqLwogfSBDb21wYWN0QXR0cmlidXRlOwogCiAvKiBWYWxpZCB2YWx1ZXMgZm9y IENvbXBhY3RBdHRyaWJ1dGUtPmF0dG51bGxhYmlsaXR5ICovCi0tIAoyLjUxLjAKCg== --000000000000a9ff6e064c533952 Content-Type: text/plain; charset="US-ASCII"; name="v12-0006-WIP-Introduce-selective-tuple-deforming.patch" Content-Disposition: attachment; filename="v12-0006-WIP-Introduce-selective-tuple-deforming.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmed3vfd5 RnJvbSA4OTQ3NDUxMTY2NThhY2VjNGE1YTUzNjU3YWY0NjUyNTVjY2E3MDY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCA0IE1hciAyMDI2IDE2OjU1OjA5ICsxMzAwClN1YmplY3Q6IFtQQVRDSCB2MTIgNi82 XSBXSVA6IEludHJvZHVjZSBzZWxlY3RpdmUgdHVwbGUgZGVmb3JtaW5nCgpVcCB1bnRpbCBub3cs IHdlIGhhdmUgYWx3YXlzIGRlZm9ybWVkIGV2ZXJ5IGF0dHJpYnV0ZSBvZiBlYWNoIHR1cGxlIHVw CnVudGlsIHRoZSBsYXN0IGF0dHJpYnV0ZSB0aGF0IHdlIHJlcXVpcmUuICBUaGlzIGRpZCBvbmNl IG1ha2Ugc2Vuc2UgdG8KZG8gYXMgd2Ugb2Z0ZW4gaGFkIHRvIHdhbGsgdGhlIHR1cGxlIGluIG9y ZGVyIHRvIGRldGVybWluZSB0aGUgYnl0ZQpvZmZzZXQgdG8gYW55IGF0dHJpYnV0ZSB0aGF0IHdl IGRlZm9ybS4gIE5vdywgc2luY2Ugd2UgcHJvYWN0aXZlbHkKcG9wdWxhdGUgdGhlIENvbXBhY3RB dHRyaWJ1dGUuYXR0Y2FjaGVvZmYsIGluIHNvbWUgY2FzZXMgd2UgbWlnaHQgYmUgaW4KYSBiZXR0 ZXIgcG9zaXRpb24gdG8gb25seSBkZWZvcm0gdGhlIGF0dHJpYnV0ZXMgdGhhdCB3ZSBuZWVkIHRv IGRlZm9ybQpieSBkaXJlY3RseSBqdW1waW5nIHRvIHRoZSBjYWNoZWQgYnl0ZSBvZmZzZXQgYW5k IHNraXBwaW5nIGRlZm9ybWluZyBhbnkKYXR0cmlidXRlcyB3aGljaCBhcmUgbm90IHJlcXVpcmVk LiAgSW4gc29tZSBjYXNlcyB0aGUgc2F2aW5ncyBjYW4gYmUKdmVyeSBsYXJnZSBhcyBpdCBub3Qg b25seSBhbGxvd3MgdHRzX3ZhbHVlcyBhbmQgdHRzX2lzbnVsbCBmb3IgdW5uZWVkZWQKYXR0cmli dXRlcyB0byBiZSBsZWZ0IHVucG9wdWxhdGVkLCBidXQgaXQgbWlnaHQgYWxzbyBtZWFuIHdlIGNh biBza2lwCmxvYWRpbmcgZW50aXJlIGNhY2hlbGluZXMgd2hlbiB0aGUgdHVwbGUgaXMgd2lkZSBl bm91Z2ggdG8gc3BhbiBtdWx0aXBsZQpjYWNoZWxpbmVzLgoKV2UgZG9uJ3Qgd2FudCB0byBleGNs dXNpdmVseSBhbHdheXMgZGVmb3JtIHR1cGxlcyB0aGlzIHdheSBhcyBkb2luZyB0aGlzCm1lYW5z IHBheWluZyBhdHRlbnRpb24gdG8gYW4gYWRkaXRpb25hbCBhcnJheSB3aGljaCBzdGF0ZXMgd2hp Y2ggYXR0bnVtcwp3ZSBtdXN0IGRlZm9ybS4gIExvb2tpbmcgYXQgdGhhdCBhcnJheSBmb3IgYSBT RUxFQ1QgKiBxdWVyeSwgd2hpY2gKcmVxdWlyZXMgdXMgdG8gZGVmb3JtIGFsbCBhdHRyaWJ1dGVz LCB3b3VsZCBhZGQgb3ZlcmhlYWQuICBUbyBzdXBwb3J0CnRoaXMgYSBuZXcgZXhwcmVzc2lvbiBl dmFsdWF0aW9uIG9wZXJhdG9yIGhhcyBiZWVuIGFkZGVkIGNhbGxlZApFRU9QX1NDQU5fU0VMRUNU U09NRSBhbmQgZWFjaCBmdW5jdGlvbiB3aGljaCBidWlsZHMgYW4gRXhwclN0YXRlIG5vdwphY2Nl cHRzIGEgdmFyaWFudCBmdW5jdGlvbiB0aGF0IGFsbG93cyB0aGUgY2FsbGVyIHRvIHNwZWNpZnkg d2hpY2ggYXR0bnVtcwphcmUgcmVxdWlyZWQgZnJvbSB0aGUgc2NhbiBzaWRlLiAgVGhpcyBwdXRz IGl0IG9uIHRoZSBjYWxsZXIgdG8gZGVjaWRlCndoaWNoIHR5cGUgb2YgZGVmb3JtaW5nIHNob3Vs ZCBiZSBkb25lLiAgV2hlbiB0aGUgY2FsbGVyIHByb3ZpZGVzCnRoZSBhdHRudW1zLCB0aGUgZXhw cmVzc2lvbiB3aWxsIGJlIGJ1aWx0IHdpdGggRUVPUF9TQ0FOX1NFTEVDVFNPTUUKcmF0aGVyIHRo YW4gRUVPUF9TQ0FOX0ZFVENIU09NRS4gIFRoaXMgY3VycmVudGx5IGRvZXMgbm90IGludGVyYWN0 IHdlbGwKd2l0aCB0aGUgcGh5c2ljYWwgdGxpc3Qgb3B0aW1pemF0aW9uLiAgQ3VycmVudGx5IGl0 J3MgdGhlIHBsYW5uZXIncyBqb2IKdG8gZmlndXJlIG91dCB3aGljaCBhdHRyaWJ1dGVzIGFyZSBh Y3R1YWxseSByZXF1aXJlZC4KClRPRE86IEpJVCBzdXBwb3J0Ci0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYyAgICAgICAgIHwgMTY2ICsrKysrKysrKystCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jICAgfCAgMTMgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NjYW4uYyAgICAgICAgIHwgIDE4ICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMgICAgICAgfCAzNjIgKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjVXRpbHMuYyAgICAgICAgfCAgNDcgKystCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlU2Vxc2Nhbi5jICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYyB8ICA0MyArKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgg ICAgICAgICB8ICAyNCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAg IHwgIDE5ICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oICAgICAgICAgfCAgMjIg KysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAgOCArCiAxMSBm aWxlcyBjaGFuZ2VkLCA3MDIgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggMDg4ZWNhMjQwMjEuLjhhMmJmMDQ1OThiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTY2LDYgKzY2LDE0IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJTZXR1 cEluZm8KIAlBdHRyTnVtYmVyCWxhc3RfbmV3OwogCS8qIE1VTFRJRVhQUiBTdWJQbGFuIG5vZGVz IGFwcGVhcmluZyBpbiB0aGUgZXhwcmVzc2lvbjogKi8KIAlMaXN0CSAgICptdWx0aWV4cHJfc3Vi cGxhbnM7CisKKwkvKgorCSAqIEZldGNoIG9ubHkgdGhlc2UgYXR0bnVtcyBmcm9tIHRoZSBzY2Fu IHdpdGggRUVPUF9TQ0FOX1NFTEVDVFNPTUUuIEVtcHR5CisJICogc2V0IG1lYW5zIHVzZSBFRU9Q X1NDQU5fRkVUQ0hTT01FIChpLmUgZmV0Y2ggYWxsIHVwIHVudGlsIGxhc3Rfc2NhbikuCisJICog VGhlIGZpcnN0IHVzZXIgYXR0cmlidXRlIGlzIGJhc2VkIGF0IG1lbWJlciAwLiAgU3lzdGVtIGF0 dHJpYnV0ZXMgbm90CisJICogcmVwcmVzZW50ZWQuCisJICovCisJQml0bWFwc2V0ICAqc2Nhbl9h dHRyczsKIH0gRXhwclNldHVwSW5mbzsKIAogc3RhdGljIHZvaWQgRXhlY1JlYWR5RXhwcihFeHBy U3RhdGUgKnN0YXRlKTsKQEAgLTc3LDcgKzg1LDggQEAgc3RhdGljIHZvaWQgRXhlY0luaXRGdW5j KEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgRXhwciAqbm9kZSwgTGlzdCAqYXJncywKIHN0YXRpYyB2 b2lkIEV4ZWNJbml0U3ViUGxhbkV4cHIoU3ViUGxhbiAqc3VicGxhbiwKIAkJCQkJCQkJRXhwclN0 YXRlICpzdGF0ZSwKIAkJCQkJCQkJRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOwotc3RhdGlj IHZvaWQgRXhlY0NyZWF0ZUV4cHJTZXR1cFN0ZXBzKEV4cHJTdGF0ZSAqc3RhdGUsIE5vZGUgKm5v ZGUpOworc3RhdGljIHZvaWQgRXhlY0NyZWF0ZUV4cHJTZXR1cFN0ZXBzKEV4cHJTdGF0ZSAqc3Rh dGUsIE5vZGUgKm5vZGUsCisJCQkJCQkJCQkgQml0bWFwc2V0ICpzY2FuX2F0dHJzKTsKIHN0YXRp YyB2b2lkIEV4ZWNQdXNoRXhwclNldHVwU3RlcHMoRXhwclN0YXRlICpzdGF0ZSwgRXhwclNldHVw SW5mbyAqaW5mbyk7CiBzdGF0aWMgYm9vbCBleHByX3NldHVwX3dhbGtlcihOb2RlICpub2RlLCBF eHByU2V0dXBJbmZvICppbmZvKTsKIHN0YXRpYyBib29sIEV4ZWNDb21wdXRlU2xvdEluZm8oRXhw clN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CkBAIC0xNDEsNiArMTUwLDE5IEBAIHN0 YXRpYyB2b2lkIEV4ZWNJbml0SnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEpzb25SZXR1 cm5pbmcgKnJldHVybmluZywKICAqLwogRXhwclN0YXRlICoKIEV4ZWNJbml0RXhwcihFeHByICpu b2RlLCBQbGFuU3RhdGUgKnBhcmVudCkKK3sKKwlyZXR1cm4gRXhlY0luaXRFeHByV2l0aFNjYW5B dHRycyhub2RlLCBwYXJlbnQsIE5VTEwpOworfQorCisvKgorICogRXhlY0luaXRFeHByV2l0aFNj YW5BdHRycworICoJCUFzIEV4ZWNJbml0RXhwciBidXQgd2hlbiAnc2Nhbl9hdHRycycgaXMgc2V0 LCB1c2UKKyAqCQlFRU9QX1NDQU5fU0VMRUNUU09NRSBpbnN0ZWFkIG9mIEVFT1BfU0NBTl9GRVRD SFNPTUUgdG8gZGVmb3JtIG9ubHkKKyAqCQl0aGUgbWVudGlvbmVkICdzY2FuX2F0dHJzJyBmcm9t IHRoZSBzY2FuIHR1cGxlLgorICovCitFeHByU3RhdGUgKgorRXhlY0luaXRFeHByV2l0aFNjYW5B dHRycyhFeHByICpub2RlLCBQbGFuU3RhdGUgKnBhcmVudCwKKwkJCQkJCSAgQml0bWFwc2V0ICpz Y2FuX2F0dHJzKQogewogCUV4cHJTdGF0ZSAgKnN0YXRlOwogCUV4cHJFdmFsU3RlcCBzY3JhdGNo ID0gezB9OwpAQCAtMTU2LDcgKzE3OCw3IEBAIEV4ZWNJbml0RXhwcihFeHByICpub2RlLCBQbGFu U3RhdGUgKnBhcmVudCkKIAlzdGF0ZS0+ZXh0X3BhcmFtcyA9IE5VTEw7CiAKIAkvKiBJbnNlcnQg c2V0dXAgc3RlcHMgYXMgbmVlZGVkICovCi0JRXhlY0NyZWF0ZUV4cHJTZXR1cFN0ZXBzKHN0YXRl LCAoTm9kZSAqKSBub2RlKTsKKwlFeGVjQ3JlYXRlRXhwclNldHVwU3RlcHMoc3RhdGUsIChOb2Rl ICopIG5vZGUsIHNjYW5fYXR0cnMpOwogCiAJLyogQ29tcGlsZSB0aGUgZXhwcmVzc2lvbiBwcm9w ZXIgKi8KIAlFeGVjSW5pdEV4cHJSZWMobm9kZSwgc3RhdGUsICZzdGF0ZS0+cmVzdmFsdWUsICZz dGF0ZS0+cmVzbnVsbCk7CkBAIC0xOTMsNyArMjE1LDcgQEAgRXhlY0luaXRFeHByV2l0aFBhcmFt cyhFeHByICpub2RlLCBQYXJhbUxpc3RJbmZvIGV4dF9wYXJhbXMpCiAJc3RhdGUtPmV4dF9wYXJh bXMgPSBleHRfcGFyYW1zOwogCiAJLyogSW5zZXJ0IHNldHVwIHN0ZXBzIGFzIG5lZWRlZCAqLwot CUV4ZWNDcmVhdGVFeHByU2V0dXBTdGVwcyhzdGF0ZSwgKE5vZGUgKikgbm9kZSk7CisJRXhlY0Ny ZWF0ZUV4cHJTZXR1cFN0ZXBzKHN0YXRlLCAoTm9kZSAqKSBub2RlLCBOVUxMKTsKIAogCS8qIENv bXBpbGUgdGhlIGV4cHJlc3Npb24gcHJvcGVyICovCiAJRXhlY0luaXRFeHByUmVjKG5vZGUsIHN0 YXRlLCAmc3RhdGUtPnJlc3ZhbHVlLCAmc3RhdGUtPnJlc251bGwpOwpAQCAtMjI3LDYgKzI0OSwx OSBAQCBFeGVjSW5pdEV4cHJXaXRoUGFyYW1zKEV4cHIgKm5vZGUsIFBhcmFtTGlzdEluZm8gZXh0 X3BhcmFtcykKICAqLwogRXhwclN0YXRlICoKIEV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFu U3RhdGUgKnBhcmVudCkKK3sKKwlyZXR1cm4gRXhlY0luaXRRdWFsV2l0aFNjYW5BdHRycyhxdWFs LCBwYXJlbnQsIE5VTEwpOworfQorCisvKgorICogRXhlY0luaXRRdWFsV2l0aFNjYW5BdHRycwor ICoJCUFzIEV4ZWNJbml0UXVhbCBidXQgd2hlbiAnc2Nhbl9hdHRycycgaXMgc2V0LCB1c2UKKyAq CQlFRU9QX1NDQU5fU0VMRUNUU09NRSBpbnN0ZWFkIG9mIEVFT1BfU0NBTl9GRVRDSFNPTUUgdG8g ZGVmb3JtIG9ubHkKKyAqCQl0aGUgbWVudGlvbmVkICdzY2FuX2F0dHJzJyBmcm9tIHRoZSBzY2Fu IHR1cGxlLgorICovCitFeHByU3RhdGUgKgorRXhlY0luaXRRdWFsV2l0aFNjYW5BdHRycyhMaXN0 ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCwKKwkJCQkJCSAgQml0bWFwc2V0ICpzY2FuX2F0dHJz KQogewogCUV4cHJTdGF0ZSAgKnN0YXRlOwogCUV4cHJFdmFsU3RlcCBzY3JhdGNoID0gezB9OwpA QCAtMjQ3LDcgKzI4Miw3IEBAIEV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBh cmVudCkKIAlzdGF0ZS0+ZmxhZ3MgPSBFRU9fRkxBR19JU19RVUFMOwogCiAJLyogSW5zZXJ0IHNl dHVwIHN0ZXBzIGFzIG5lZWRlZCAqLwotCUV4ZWNDcmVhdGVFeHByU2V0dXBTdGVwcyhzdGF0ZSwg KE5vZGUgKikgcXVhbCk7CisJRXhlY0NyZWF0ZUV4cHJTZXR1cFN0ZXBzKHN0YXRlLCAoTm9kZSAq KSBxdWFsLCBzY2FuX2F0dHJzKTsKIAogCS8qCiAJICogRXhlY1F1YWwoKSBuZWVkcyB0byByZXR1 cm4gZmFsc2UgZm9yIGFuIGV4cHJlc3Npb24gcmV0dXJuaW5nIE5VTEwuIFRoYXQKQEAgLTM3Miw2 ICs0MDcsMjggQEAgRXhlY0J1aWxkUHJvamVjdGlvbkluZm8oTGlzdCAqdGFyZ2V0TGlzdCwKIAkJ CQkJCVR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJUGxhblN0YXRlICpwYXJlbnQsCiAJCQkJ CQlUdXBsZURlc2MgaW5wdXREZXNjKQoreworCXJldHVybiBFeGVjQnVpbGRQcm9qZWN0aW9uSW5m b1dpdGhTY2FuQXR0cnModGFyZ2V0TGlzdCwKKwkJCQkJCQkJCQkJCWVjb250ZXh0LAorCQkJCQkJ CQkJCQkJc2xvdCwKKwkJCQkJCQkJCQkJCXBhcmVudCwKKwkJCQkJCQkJCQkJCWlucHV0RGVzYywK KwkJCQkJCQkJCQkJCU5VTEwpOworfQorCisvKgorICogRXhlY0J1aWxkUHJvamVjdGlvbkluZm9X aXRoU2NhbkF0dHJzCisgKgkJQXMgRXhlY0J1aWxkUHJvamVjdGlvbkluZm8gYnV0IHdoZW4gJ3Nj YW5fYXR0cnMnIGlzIHNldCwgdXNlCisgKgkJRUVPUF9TQ0FOX1NFTEVDVFNPTUUgaW5zdGVhZCBv ZiBFRU9QX1NDQU5fRkVUQ0hTT01FIHRvIGRlZm9ybSBvbmx5CisgKgkJdGhlIG1lbnRpb25lZCAn c2Nhbl9hdHRycycgZnJvbSB0aGUgc2NhbiB0dXBsZS4KKyAqLworUHJvamVjdGlvbkluZm8gKgor RXhlY0J1aWxkUHJvamVjdGlvbkluZm9XaXRoU2NhbkF0dHJzKExpc3QgKnRhcmdldExpc3QsCisJ CQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90 ICpzbG90LAorCQkJCQkJCQkJIFBsYW5TdGF0ZSAqcGFyZW50LAorCQkJCQkJCQkJIFR1cGxlRGVz YyBpbnB1dERlc2MsCisJCQkJCQkJCQkgQml0bWFwc2V0ICpzY2FuX2F0dHJzKQogewogCVByb2pl Y3Rpb25JbmZvICpwcm9qSW5mbyA9IG1ha2VOb2RlKFByb2plY3Rpb25JbmZvKTsKIAlFeHByU3Rh dGUgICpzdGF0ZTsKQEAgLTM4OSw3ICs0NDYsNyBAQCBFeGVjQnVpbGRQcm9qZWN0aW9uSW5mbyhM aXN0ICp0YXJnZXRMaXN0LAogCXN0YXRlLT5yZXN1bHRzbG90ID0gc2xvdDsKIAogCS8qIEluc2Vy dCBzZXR1cCBzdGVwcyBhcyBuZWVkZWQgKi8KLQlFeGVjQ3JlYXRlRXhwclNldHVwU3RlcHMoc3Rh dGUsIChOb2RlICopIHRhcmdldExpc3QpOworCUV4ZWNDcmVhdGVFeHByU2V0dXBTdGVwcyhzdGF0 ZSwgKE5vZGUgKikgdGFyZ2V0TGlzdCwgc2Nhbl9hdHRycyk7CiAKIAkvKiBOb3cgY29tcGlsZSBl YWNoIHRsaXN0IGNvbHVtbiAqLwogCWZvcmVhY2gobGMsIHRhcmdldExpc3QpCkBAIC0yODcxLDEx ICsyOTI4LDE5IEBAIEV4ZWNJbml0U3ViUGxhbkV4cHIoU3ViUGxhbiAqc3VicGxhbiwKIC8qCiAg KiBBZGQgZXhwcmVzc2lvbiBzdGVwcyBwZXJmb3JtaW5nIHNldHVwIHRoYXQncyBuZWVkZWQgYmVm b3JlIGFueSBvZiB0aGUKICAqIG1haW4gZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9uLgorICoK KyAqICdzY2FuX2F0dHJzJyBtYXkgYmUgZ2l2ZW4gYW4gZW1wdHkgc2V0LCBpbiB3aGljaCBjYXNl IGRlZm9ybWluZyB0aGUgc2NhbgorICogdHVwbGUgaXMgZG9uZSB2aWEgRUVPUF9TQ0FOX0ZFVENI U09NRSwgd2hpY2ggZmV0Y2hlcyBldmVyeSBhdHRyaWJ1dGUgZnJvbQorICogdGhlIHNjYW4gdHVw bGUgdXAgdW50aWwgdGhlIG1heGltdW0gYXR0cmlidXRlIHVzZWQgYnkgdGhpcyBleHByZXNzaW9u LgorICogV2hlbiAnc2Nhbl9hdHRycycgaXMgc2V0LCBFRU9QX1NDQU5fU0VMRUNUU09NRSBpcyB1 c2VkIHRvIG9ubHkgZmV0Y2ggdGhlCisgKiBhdHRyaWJ1dGVzIG1lbnRpb25lZC4gIENhbGxlcnMg bXVzdCBjcmVhdGUgYSB1bmlvbmVkIHNldCBvZiB0aGUgYXR0cmlidXRlcworICogbmVlZGVkIGZy b20gdGhlIHNjYW4gZm9yIGFsbCBleHByZXNzaW9ucyB1c2luZyB0aGUgZ2l2ZW4gc2xvdCBzbyB0 aGF0IHdlCisgKiBpbmNyZW1lbnRhbGx5IGZldGNoIHRoZSBhdHRyaWJ1dGVzIHJlcXVpcmVkIGJ5 IGFsbCBFeHByU3RhdGVzLgogICovCiBzdGF0aWMgdm9pZAotRXhlY0NyZWF0ZUV4cHJTZXR1cFN0 ZXBzKEV4cHJTdGF0ZSAqc3RhdGUsIE5vZGUgKm5vZGUpCitFeGVjQ3JlYXRlRXhwclNldHVwU3Rl cHMoRXhwclN0YXRlICpzdGF0ZSwgTm9kZSAqbm9kZSwgQml0bWFwc2V0ICpzY2FuX2F0dHJzKQog ewotCUV4cHJTZXR1cEluZm8gaW5mbyA9IHswLCAwLCAwLCAwLCAwLCBOSUx9OworCUV4cHJTZXR1 cEluZm8gaW5mbyA9IHswLCAwLCAwLCAwLCAwLCBOSUwsIHNjYW5fYXR0cnN9OwogCiAJLyogUHJl c2NhbiB0byBmaW5kIG91dCB3aGF0IHdlIG5lZWQuICovCiAJZXhwcl9zZXR1cF93YWxrZXIobm9k ZSwgJmluZm8pOwpAQCAtMjkyMywxMSArMjk4OCw3NSBAQCBFeGVjUHVzaEV4cHJTZXR1cFN0ZXBz KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJTZXR1cEluZm8gKmluZm8pCiAJfQogCWlmIChpbmZvLT5s YXN0X3NjYW4gPiAwKQogCXsKLQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX1NDQU5fRkVUQ0hTT01F OwotCQlzY3JhdGNoLmQuZmV0Y2gubGFzdF92YXIgPSBpbmZvLT5sYXN0X3NjYW47Ci0JCXNjcmF0 Y2guZC5mZXRjaC5maXhlZCA9IGZhbHNlOwotCQlzY3JhdGNoLmQuZmV0Y2gua2luZCA9IE5VTEw7 Ci0JCXNjcmF0Y2guZC5mZXRjaC5rbm93bl9kZXNjID0gTlVMTDsKKwkJLyoKKwkJICogV2UgaGF2 ZSB0d28gb3BlcmF0b3JzIGZvciBmZXRjaGluZyBhdHRyaWJ1dGVzIG91dCBvZiBhIHR1cGxlIGR1 cmluZworCQkgKiBzY2Fucy4gIEVFT1BfU0NBTl9GRVRDSFNPTUUgZGVmb3JtcyBhbGwgYXR0cmli dXRlcyBpbiB0aGUgdHVwbGUgdXAKKwkJICogdG8gdGhlICdsYXN0X3NjYW4nIGF0dG51bS4gIFRo aXMgaXNuJ3QgaWRlYWwgaW4gc29tZSBjYXNlcywgYXMgd2UKKwkJICogbWF5IG9ubHkgbmVlZCBh IGZldyBhdHRyaWJ1dGVzLCBhbmQgdGhvc2UgbWlnaHQgYmUgZGVlcCBpbnRvIHRoZQorCQkgKiB0 dXBsZS4gIEVFT1BfU0NBTl9TRUxFQ1RTT01FIGlzIGFuIG9wZXJhdG9yIHRoYXQgZmV0Y2hlcyBv bmx5IHRoZQorCQkgKiByZXF1aXJlZCBhdHRyaWJ1dGVzIGZyb20gdGhlIHR1cGxlLiAgV2hlbiB0 aGUgYXR0Y2FjaGVvZmYgZm9yIHRoZXNlCisJCSAqIGF0dHJpYnV0ZXMgaXMga25vd24gYW5kIG5v IE5VTExzIGV4aXN0IGluIHRoZSB0dXBsZSBwcmlvciB0byB0aGUKKwkJICogcmVxdWlyZWQgYXR0 cmlidXRlcywgdGhlbiB0aGlzIGNhbiBiZSBhIHZlcnkgZmFzdCBvcGVyYXRpb24uCisJCSAqIEVF T1BfU0NBTl9GRVRDSFNPTUUgaXMgc3RpbGwgc3VwcG9ydGVkIGFzIG1hbnkgY2FzZXMgcmVxdWly ZSBhbGwKKwkJICogYXR0cmlidXRlcywgYW5kIEVFT1BfU0NBTl9GRVRDSFNPTUUgY2FuIGRvIHRo aXMgbW9yZSBlZmZpY2llbnRseS4KKwkJICovCisJCWlmIChibXNfaXNfZW1wdHkoaW5mby0+c2Nh bl9hdHRycykpCisJCXsKKwkJCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9TQ0FOX0ZFVENIU09NRTsK KwkJCXNjcmF0Y2guZC5mZXRjaC5sYXN0X3ZhciA9IGluZm8tPmxhc3Rfc2NhbjsKKwkJCXNjcmF0 Y2guZC5mZXRjaC5maXhlZCA9IGZhbHNlOworCQkJc2NyYXRjaC5kLmZldGNoLmtpbmQgPSBOVUxM OworCQkJc2NyYXRjaC5kLmZldGNoLmtub3duX2Rlc2MgPSBOVUxMOworCQl9CisJCWVsc2UKKwkJ eworCQkJaW50CQkJbmF0dHJzID0gYm1zX251bV9tZW1iZXJzKGluZm8tPnNjYW5fYXR0cnMpOwor CQkJQXR0ck51bWJlciAqYXR0czsKKwkJCWludAkJCWE7CisJCQlpbnQJCQlpOworCisJCQlzY3Jh dGNoLm9wY29kZSA9IEVFT1BfU0NBTl9TRUxFQ1RTT01FOworCQkJc2NyYXRjaC5kLmZldGNoLmxh c3RfdmFyID0gaW5mby0+bGFzdF9zY2FuOworCQkJc2NyYXRjaC5kLmZldGNoLmZpeGVkID0gZmFs c2U7CisJCQlzY3JhdGNoLmQuZmV0Y2gubmF0dHMgPSBuYXR0cnM7CisJCQlzY3JhdGNoLmQuZmV0 Y2gua2luZCA9IE5VTEw7CisJCQlzY3JhdGNoLmQuZmV0Y2gua25vd25fZGVzYyA9IE5VTEw7CisK KwkJCS8qCisJCQkgKiBBbGxvY2F0ZSB0aGVzZSB0d28gYXJyYXlzIGFzIGEgc2luZ2xlIGFsbG9j YXRpb24uICBUaGUKKwkJCSAqIHJlcV9hdHRudW1zIGFycmF5IG5lZWRzIDEgZWxlbWVudCBmb3Ig ZWFjaCBhdHRudW0gdGhhdCdzIGJlaW5nCisJCQkgKiBzZWxlY3RlZCwgcGx1cyBhIHNlbnRpbmVs IGF0dG51bSB3aGljaCB3ZSBzZXQgdG8gdGhlCisJCQkgKiAnbGFzdF9zY2FuJyBhdHRudW0gc28g dGhhdCB3ZSBjb3JyZWN0bHkgdGVybWluYXRlIGVhY2ggb2YgdGhlCisJCQkgKiBsb29wcyBkdXJp bmcgc2VsZWN0aXZlIGRlZm9ybWF0aW9uIGJlZm9yZSB3YWxraW5nIG9mZiB0aGUgZW5kCisJCQkg KiBvZiB0aGUgYXJyYXkuCisJCQkgKi8KKwkJCWF0dHMgPSBwYWxsb2NfYXJyYXkoQXR0ck51bWJl ciwgbmF0dHJzICsgMSArIGluZm8tPmxhc3Rfc2NhbiArIDEpOworCisJCQlzY3JhdGNoLmQuZmV0 Y2gucmVxX2F0dG51bXMgPSBhdHRzOworCQkJc2NyYXRjaC5kLmZldGNoLm5leHRfcmVxX2F0dG51 bXNfaW5kZXggPSAmYXR0c1tuYXR0cnMgKyAxXTsKKworCQkJLyogU3RvcmUgZWFjaCBhdHRudW0g aW4gdGhlIEJpdG1hcHNldCBpbnRvIHRoZSByZXFfYXR0bnVtIGFycmF5ICovCisJCQlhID0gLTE7 CisJCQlpID0gMDsKKwkJCXdoaWxlICgoYSA9IGJtc19uZXh0X21lbWJlcihpbmZvLT5zY2FuX2F0 dHJzLCBhKSkgPj0gMCkKKwkJCQlzY3JhdGNoLmQuZmV0Y2gucmVxX2F0dG51bXNbaSsrXSA9IGE7 CisKKwkJCS8qIGluc3RhbGwgc2VudGluZWwgKi8KKwkJCXNjcmF0Y2guZC5mZXRjaC5yZXFfYXR0 bnVtc1tuYXR0cnNdID0gaW5mby0+bGFzdF9zY2FuOworCisJCQkvKgorCQkJICogUG9wdWxhdGUg dGhlIG5leHRfcmVxX2F0dG51bXNfaW5kZXggYXJyYXkuICBUaGlzIGFsbG93cyB0aGUKKwkJCSAq IGRlZm9ybWluZyBmdW5jdGlvbiB0byByZWZpbmQgdGhlIHBvc2l0aW9uIGluIHRoZQorCQkJICog bmV4dF9yZXFfYXR0bnVtc19pbmRleCBhcnJheSBmcm9tIHR0c19udmFsaWQuCisJCQkgKi8KKwkJ CWEgPSAwOworCQkJZm9yIChpID0gMDsgaSA8PSBpbmZvLT5sYXN0X3NjYW47IGkrKykKKwkJCXsK KwkJCQlzY3JhdGNoLmQuZmV0Y2gubmV4dF9yZXFfYXR0bnVtc19pbmRleFtpXSA9IGE7CisJCQkJ aWYgKGJtc19pc19tZW1iZXIoaSwgaW5mby0+c2Nhbl9hdHRycykpCisJCQkJCWErKzsKKwkJCX0K KwkJfQogCQlpZiAoRXhlY0NvbXB1dGVTbG90SW5mbyhzdGF0ZSwgJnNjcmF0Y2gpKQogCQkJRXhw ckV2YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwogCX0KQEAgLTMwMDAsNiArMzEyOSwxMyBA QCBleHByX3NldHVwX3dhbGtlcihOb2RlICpub2RlLCBFeHByU2V0dXBJbmZvICppbmZvKQogCQkJ CXN3aXRjaCAodmFyaWFibGUtPnZhcnJldHVybmluZ3R5cGUpCiAJCQkJewogCQkJCQljYXNlIFZB Ul9SRVRVUk5JTkdfREVGQVVMVDoKKworCQkJCQkJLyoKKwkJCQkJCSAqIHNjYW5fYXR0cnMgbXVz dCBjb250YWluIGEgbWVtYmVyIGZvciB0aGlzIGF0dG51bSBvcgorCQkJCQkJICogYmUgY29tcGxl dGVseSBlbXB0eQorCQkJCQkJICovCisJCQkJCQlBc3NlcnQoYXR0bnVtIDwgMCB8fCBibXNfaXNf ZW1wdHkoaW5mby0+c2Nhbl9hdHRycykgfHwKKwkJCQkJCQkgICBibXNfaXNfbWVtYmVyKGF0dG51 bSAtIDEsIGluZm8tPnNjYW5fYXR0cnMpKTsKIAkJCQkJCWluZm8tPmxhc3Rfc2NhbiA9IE1heChp bmZvLT5sYXN0X3NjYW4sIGF0dG51bSk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBWQVJfUkVU VVJOSU5HX09MRDoKQEAgLTMwNjYsNyArMzIwMiw4IEBAIEV4ZWNDb21wdXRlU2xvdEluZm8oRXhw clN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKIAkJICAgb3Bjb2RlID09IEVFT1BfT1VU RVJfRkVUQ0hTT01FIHx8CiAJCSAgIG9wY29kZSA9PSBFRU9QX1NDQU5fRkVUQ0hTT01FIHx8CiAJ CSAgIG9wY29kZSA9PSBFRU9QX09MRF9GRVRDSFNPTUUgfHwKLQkJICAgb3Bjb2RlID09IEVFT1Bf TkVXX0ZFVENIU09NRSk7CisJCSAgIG9wY29kZSA9PSBFRU9QX05FV19GRVRDSFNPTUUgfHwKKwkJ ICAgb3Bjb2RlID09IEVFT1BfU0NBTl9TRUxFQ1RTT01FKTsKIAogCWlmIChvcC0+ZC5mZXRjaC5r bm93bl9kZXNjICE9IE5VTEwpCiAJewpAQCAtMzExOSw2ICszMjU2LDcgQEAgRXhlY0NvbXB1dGVT bG90SW5mbyhFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQogCQl9CiAJfQogCWVs c2UgaWYgKG9wY29kZSA9PSBFRU9QX1NDQU5fRkVUQ0hTT01FIHx8CisJCQkgb3Bjb2RlID09IEVF T1BfU0NBTl9TRUxFQ1RTT01FIHx8CiAJCQkgb3Bjb2RlID09IEVFT1BfT0xEX0ZFVENIU09NRSB8 fAogCQkJIG9wY29kZSA9PSBFRU9QX05FV19GRVRDSFNPTUUpCiAJewpAQCAtNDMxMSw3ICs0NDQ5 LDcgQEAgRXhlY0J1aWxkSGFzaDMyRXhwcihUdXBsZURlc2MgZGVzYywgY29uc3QgVHVwbGVUYWJs ZVNsb3RPcHMgKm9wcywKIAlzdGF0ZS0+cGFyZW50ID0gcGFyZW50OwogCiAJLyogSW5zZXJ0IHNl dHVwIHN0ZXBzIGFzIG5lZWRlZC4gKi8KLQlFeGVjQ3JlYXRlRXhwclNldHVwU3RlcHMoc3RhdGUs IChOb2RlICopIGhhc2hfZXhwcnMpOworCUV4ZWNDcmVhdGVFeHByU2V0dXBTdGVwcyhzdGF0ZSwg KE5vZGUgKikgaGFzaF9leHBycywgTlVMTCk7CiAKIAkvKgogCSAqIE1ha2UgYSBwbGFjZSB0byBz dG9yZSBpbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZXMgYmV0d2VlbiBzdWJzZXF1ZW50CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA2MWZmNWRkYzc0Yy4uNzY5NjU4MjZmODMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNDc5LDYgKzQ3OSw3IEBA IEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwg Ym9vbCAqaXNudWxsKQogCQkmJkNBU0VfRUVPUF9TQ0FOX0ZFVENIU09NRSwKIAkJJiZDQVNFX0VF T1BfT0xEX0ZFVENIU09NRSwKIAkJJiZDQVNFX0VFT1BfTkVXX0ZFVENIU09NRSwKKwkJJiZDQVNF X0VFT1BfU0NBTl9TRUxFQ1RTT01FLAogCQkmJkNBU0VfRUVPUF9JTk5FUl9WQVIsCiAJCSYmQ0FT RV9FRU9QX09VVEVSX1ZBUiwKIAkJJiZDQVNFX0VFT1BfU0NBTl9WQVIsCkBAIC02NzYsNiArNjc3 LDE4IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29u dGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVF T1BfU0NBTl9TRUxFQ1RTT01FKQorCQl7CisJCQlDaGVja09wU2xvdENvbXBhdGliaWxpdHkob3As IHNjYW5zbG90KTsKKworCQkJc2xvdF9zZWxlY3RhdHRycyhzY2Fuc2xvdCwKKwkJCQkJCQkgb3At PmQuZmV0Y2gubGFzdF92YXIsCisJCQkJCQkJIG9wLT5kLmZldGNoLnJlcV9hdHRudW1zLAorCQkJ CQkJCSBvcC0+ZC5mZXRjaC5uZXh0X3JlcV9hdHRudW1zX2luZGV4KTsKKworCQkJRUVPX05FWFQo KTsKKwkJfQorCiAJCUVFT19DQVNFKEVFT1BfSU5ORVJfVkFSKQogCQl7CiAJCQlpbnQJCQlhdHRu dW0gPSBvcC0+ZC52YXIuYXR0bnVtOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTY2FuLmMKaW5kZXggOWY2OGJl MTdiOTkuLjUyNWFmMTFhYTA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj U2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTY2FuLmMKQEAgLTg2LDYgKzg2 LDI0IEBAIEV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm8oU2NhblN0YXRlICpub2RlKQogCUV4 ZWNDb25kaXRpb25hbEFzc2lnblByb2plY3Rpb25JbmZvKCZub2RlLT5wcywgdHVwZGVzYywgc2Nh bi0+c2NhbnJlbGlkKTsKIH0KIAorLyoKKyAqIEV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm9X aXRoU2NhbkF0dHJzCisgKgkJQXMgRXhlY0Fzc2lnblNjYW5Qcm9qZWN0aW9uSW5mbyBidXQgd2hl biAnc2Nhbl9hdHRycycgaXMgc2V0LCB1c2UKKyAqCQlFRU9QX1NDQU5fU0VMRUNUU09NRSBpbnN0 ZWFkIG9mIEVFT1BfU0NBTl9GRVRDSFNPTUUgdG8gZGVmb3JtIG9ubHkKKyAqCQl0aGUgbWVudGlv bmVkICdzY2FuX2F0dHJzJyBmcm9tIHRoZSBzY2FuIHR1cGxlLgorICovCit2b2lkCitFeGVjQXNz aWduU2NhblByb2plY3Rpb25JbmZvV2l0aFNjYW5BdHRycyhTY2FuU3RhdGUgKm5vZGUsCisJCQkJ CQkJCQkJICBCaXRtYXBzZXQgKnNjYW5fYXR0cnMpCit7CisJU2NhbgkgICAqc2NhbiA9IChTY2Fu ICopIG5vZGUtPnBzLnBsYW47CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBub2RlLT5zc19TY2FuVHVw bGVTbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOworCisJRXhlY0NvbmRpdGlvbmFsQXNzaWduUHJv amVjdGlvbkluZm9XaXRoU2NhbkF0dHJzKCZub2RlLT5wcywgdHVwZGVzYywKKwkJCQkJCQkJCQkJ CQkgc2Nhbi0+c2NhbnJlbGlkLAorCQkJCQkJCQkJCQkJCSBzY2FuX2F0dHJzKTsKK30KKwogLyoK ICAqIEV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm9XaXRoVmFybm8KICAqCQlBcyBhYm92ZSwg YnV0IGNhbGxlciBjYW4gc3BlY2lmeSB2YXJubyBleHBlY3RlZCBpbiBWYXJzIGluIHRoZSB0bGlz dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRleCAxYjVlMWViZDMzNC4uNWU1MDJiZmRi YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTc0LDYgKzc0LDEyIEBAIHN0YXRp YyBUdXBsZURlc2MgRXhlY1R5cGVGcm9tVExJbnRlcm5hbChMaXN0ICp0YXJnZXRMaXN0LAogCQkJ CQkJCQkJCWJvb2wgc2tpcGp1bmspOwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IHZvaWQgc2xvdF9kZWZvcm1faGVhcF90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1 cGxlIHR1cGxlLCB1aW50MzIgKm9mZnAsCiAJCQkJCQkJCQkJCQkJCQkgIGludCByZXFuYXR0cyk7 CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBzbG90X3NlbGVjdGl2ZWx5 X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJCQkJ CQkJICBIZWFwVHVwbGUgdHVwbGUsCisJCQkJCQkJCQkJCQkJCQkJCQkgIHVpbnQzMiAqb2ZmcCwK KwkJCQkJCQkJCQkJCQkJCQkJCSAgaW50IGxhc3RfYXR0bnVtLAorCQkJCQkJCQkJCQkJCQkJCQkJ ICBBdHRyTnVtYmVyICphdHRudW1zLAorCQkJCQkJCQkJCQkJCQkJCQkJICBBdHRyTnVtYmVyICph dHRudW1fbWFwKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB0dHNfYnVmZmVyX2hlYXBfc3RvcmVfdHVw bGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBsZSwK IAkJCQkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwKQEAgLTEyOSw3ICsxMzUsMjIgQEAgdHRzX3Zp cnR1YWxfY2xlYXIoVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiBzdGF0aWMgdm9pZAogdHRzX3ZpcnR1 YWxfZ2V0c29tZWF0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgbmF0dHMpCiB7Ci0JZWxv ZyhFUlJPUiwgImdldHNvbWVhdHRycyBpcyBub3QgcmVxdWlyZWQgdG8gYmUgY2FsbGVkIG9uIGEg dmlydHVhbCB0dXBsZSB0YWJsZSBzbG90Iik7CisJZWxvZyhFUlJPUiwKKwkJICIlcyBpcyBub3Qg cmVxdWlyZWQgdG8gYmUgY2FsbGVkIG9uIGEgdmlydHVhbCB0dXBsZSB0YWJsZSBzbG90IiwKKwkJ ICJnZXRzb21lYXR0cnMiKTsKK30KKworLyoKKyAqIFZpcnR1YWxUdXBsZVRhYmxlU2xvdHMgYWx3 YXlzIGhhdmUgZnVsbHkgcG9wdWxhdGVkIHR0c192YWx1ZXMgYW5kCisgKiB0dHNfaXNudWxsIGFy cmF5cy4gIFNvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4KKyAqLworc3Rh dGljIHZvaWQKK3R0c192aXJ0dWFsX3NlbGVjdGF0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBp bnQgbGFzdF9hdHRudW0sCisJCQkJCQlBdHRyTnVtYmVyICphdHRudW1zLCBBdHRyTnVtYmVyICph dHRudW1fbWFwKQoreworCWVsb2coRVJST1IsCisJCSAiJXMgaXMgbm90IHJlcXVpcmVkIHRvIGJl IGNhbGxlZCBvbiBhIHZpcnR1YWwgdHVwbGUgdGFibGUgc2xvdCIsCisJCSAic2VsZWN0YXR0cnMi KTsKIH0KIAogLyoKQEAgLTM1Miw2ICszNzMsMjIgQEAgdHRzX2hlYXBfZ2V0c29tZWF0dHJzKFR1 cGxlVGFibGVTbG90ICpzbG90LCBpbnQgbmF0dHMpCiAJc2xvdF9kZWZvcm1faGVhcF90dXBsZShz bG90LCBoc2xvdC0+dHVwbGUsICZoc2xvdC0+b2ZmLCBuYXR0cyk7CiB9CiAKK3N0YXRpYyB2b2lk Cit0dHNfaGVhcF9zZWxlY3RhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGxhc3RfYXR0 bnVtLAorCQkJCQkgQXR0ck51bWJlciAqYXR0bnVtcywgQXR0ck51bWJlciAqYXR0bnVtX21hcCkK K3sKKwlIZWFwVHVwbGVUYWJsZVNsb3QgKmhzbG90ID0gKEhlYXBUdXBsZVRhYmxlU2xvdCAqKSBz bG90OworCisJQXNzZXJ0KCFUVFNfRU1QVFkoc2xvdCkpOworCisJc2xvdF9zZWxlY3RpdmVseV9k ZWZvcm1faGVhcF90dXBsZShzbG90LAorCQkJCQkJCQkJICAgaHNsb3QtPnR1cGxlLAorCQkJCQkJ CQkJICAgJmhzbG90LT5vZmYsCisJCQkJCQkJCQkgICBsYXN0X2F0dG51bSwKKwkJCQkJCQkJCSAg IGF0dG51bXMsCisJCQkJCQkJCQkgICBhdHRudW1fbWFwKTsKK30KKwogc3RhdGljIERhdHVtCiB0 dHNfaGVhcF9nZXRzeXNhdHRyKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0bnVtLCBib29s ICppc251bGwpCiB7CkBAIC01NTAsNiArNTg3LDIyIEBAIHR0c19taW5pbWFsX2dldHNvbWVhdHRy cyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IG5hdHRzKQogCXNsb3RfZGVmb3JtX2hlYXBfdHVw bGUoc2xvdCwgbXNsb3QtPnR1cGxlLCAmbXNsb3QtPm9mZiwgbmF0dHMpOwogfQogCitzdGF0aWMg dm9pZAordHRzX21pbmltYWxfc2VsZWN0YXR0cnMoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBs YXN0X2F0dG51bSwKKwkJCQkJCUF0dHJOdW1iZXIgKmF0dG51bXMsIEF0dHJOdW1iZXIgKmF0dG51 bV9tYXApCit7CisJTWluaW1hbFR1cGxlVGFibGVTbG90ICptc2xvdCA9IChNaW5pbWFsVHVwbGVU YWJsZVNsb3QgKikgc2xvdDsKKworCUFzc2VydCghVFRTX0VNUFRZKHNsb3QpKTsKKworCXNsb3Rf c2VsZWN0aXZlbHlfZGVmb3JtX2hlYXBfdHVwbGUoc2xvdCwKKwkJCQkJCQkJCSAgIG1zbG90LT50 dXBsZSwKKwkJCQkJCQkJCSAgICZtc2xvdC0+b2ZmLAorCQkJCQkJCQkJICAgbGFzdF9hdHRudW0s CisJCQkJCQkJCQkgICBhdHRudW1zLAorCQkJCQkJCQkJICAgYXR0bnVtX21hcCk7Cit9CisKIC8q CiAgKiBNaW5pbWFsVHVwbGVUYWJsZVNsb3RzIG5ldmVyIHByb3ZpZGUgc3lzdGVtIGF0dHJpYnV0 ZXMuIFdlIGdlbmVyYWxseQogICogc2hvdWxkbid0IGdldCBoZXJlLCBidXQgcHJvdmlkZSBhIHVz ZXItZnJpZW5kbHkgbWVzc2FnZSBpZiB3ZSBkby4KQEAgLTc1Nyw2ICs4MTAsMjMgQEAgdHRzX2J1 ZmZlcl9oZWFwX2dldHNvbWVhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IG5hdHRzKQog CXNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoc2xvdCwgYnNsb3QtPmJhc2UudHVwbGUsICZic2xvdC0+ YmFzZS5vZmYsIG5hdHRzKTsKIH0KIAorc3RhdGljIHZvaWQKK3R0c19idWZmZXJfaGVhcF9zZWxl Y3RhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGxhc3RfYXR0bnVtLAorCQkJCQkJCUF0 dHJOdW1iZXIgKmF0dG51bXMsIEF0dHJOdW1iZXIgKmF0dG51bV9tYXApCit7CisJQnVmZmVySGVh cFR1cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xv dDsKKworCUFzc2VydCghVFRTX0VNUFRZKHNsb3QpKTsKKworCXNsb3Rfc2VsZWN0aXZlbHlfZGVm b3JtX2hlYXBfdHVwbGUoc2xvdCwKKwkJCQkJCQkJCSAgIGJzbG90LT5iYXNlLnR1cGxlLAorCQkJ CQkJCQkJICAgJmJzbG90LT5iYXNlLm9mZiwKKwkJCQkJCQkJCSAgIGxhc3RfYXR0bnVtLAorCQkJ CQkJCQkJICAgYXR0bnVtcywKKwkJCQkJCQkJCSAgIGF0dG51bV9tYXApOworfQorCisKIHN0YXRp YyBEYXR1bQogdHRzX2J1ZmZlcl9oZWFwX2dldHN5c2F0dHIoVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IGludCBhdHRudW0sIGJvb2wgKmlzbnVsbCkKIHsKQEAgLTEyNDQsMTIgKzEzMTQsMjk5IEBAIGRv bmU6CiAJKm9mZnAgPSBvZmY7CiB9CiAKKy8qCisgKiBzbG90X3NlbGVjdGl2ZWx5X2RlZm9ybV9o ZWFwX3R1cGxlCisgKgkJRGVmb3JtIGF0dHJpYnV0ZXMgb2YgJ3R1cGxlJyBpbnRvIHRoZSBEYXR1 bS9pc251bGwgYXJyYXlzIGluICdzbG90Jy4KKyAqCQlVbmxpa2Ugc2xvdF9kZWZvcm1faGVhcF90 dXBsZSwgd2hpY2ggZGVmb3JtcyBldmVyeSBhdHRyaWJ1dGUgdXAgdG8gdGhlCisgKgkJZ2l2ZW4g YXR0cmlidXRlIG51bWJlciwgaGVyZSB3ZSBkZWZvcm0gb25seSB0aGUgYXR0cmlidXRlIG51bWJl cnMKKyAqCQltZW50aW9uZWQgaW4gdGhlICdhdHRudW1zJyBhcnJheS4gIFdoZW4gb25seSBhIGZl dyBhdHRyaWJ1dGVzIGFyZQorICoJCXJlcXVpcmVkLCB0aGlzIGNhbiBiZSBtb3JlIGVmZmljaWVu dC4gIFdoZW4gdGhlIGF0dHJpYnV0ZXMgaGF2ZSBhCisgKgkJa25vd24gYXR0Y2FjaGVvZmYgYW5k IGl0J3MgdmFsaWQgdG8gdXNlIHRoYXQsIHRoZW4gdGhpcyB2ZXJzaW9uIGNhbiBiZQorICoJCW11 Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlIHdoZW4gb25seSBh IHNtYWxsCisgKgkJbnVtYmVyIG9mIHRoZSB0b3RhbCBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4K KyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK3Nsb3Rfc2VsZWN0 aXZlbHlfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0 dXBsZSwKKwkJCQkJCQkJICAgdWludDMyICpvZmZwLCBpbnQgbGFzdF9hdHRudW0sCisJCQkJCQkJ CSAgIEF0dHJOdW1iZXIgKmF0dG51bXMsCisJCQkJCQkJCSAgIEF0dHJOdW1iZXIgKmF0dG51bV9t YXApCit7CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHJzOworCUNvbXBhY3RBdHRyaWJ1dGUgKmNh dHRyOworCVR1cGxlRGVzYwl0dXBsZURlc2MgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOwor CUhlYXBUdXBsZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOworCXNpemVfdAkJYXR0bnVtOwor CWludAkJCWF0dG51bXNfaWR4OworCWludAkJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyOworCWlu dAkJCWZpcnN0Tm9uR3VhcmFudGVlZEF0dHI7CisJaW50CQkJZmlyc3ROdWxsQXR0cjsKKwlpbnQJ CQluYXR0czsKKwlEYXR1bQkgICAqdmFsdWVzOworCWJvb2wJICAgKmlzbnVsbDsKKwljaGFyCSAg ICp0cDsJCQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KKwl1aW50MzIJCW9mZjsJCQkvKiBvZmZz ZXQgaW4gdHVwbGUgZGF0YSAqLworCWludAkJCW9mZl9hdHRudW07CQkvKiB0aGUgYXR0bnVtIHRo YXQgJ29mZicgcG9pbnRzIHRvICovCisKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBU dXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVk T2Zmc2V0QXR0ciA+PSAwKTsKKworCWlzbnVsbCA9IHNsb3QtPnR0c19pc251bGw7CisKKwkvKgor CSAqIFNvbWUgY2FsbGVycyBtYXkgZm9ybSBhbmQgZGVmb3JtIHR1cGxlcyBwcmlvciB0byBOT1Qg TlVMTCBjb25zdHJhaW50cworCSAqIGJlaW5nIGNoZWNrZWQuICBIZXJlIHdlJ2QgbGlrZSB0byBv cHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB3ZSBvbmx5IG5lZWQKKwkgKiB0byBmZXRjaCBhdHRyaWJ1 dGVzIGJlZm9yZSBvciB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGF0dHJpYnV0ZSBpcworCSAq IGd1YXJhbnRlZWQgdG8gZXhpc3QgaW4gdGhlIHR1cGxlLiAgV2UgcmVseSBvbiB0aGUgc2xvdCBm bGFnIGJlaW5nIHNldAorCSAqIGNvcnJlY3RseSB0byBvbmx5IGVuYWJsZSB0aGlzIG9wdGltaXph dGlvbiB3aGVuIGl0J3MgdmFsaWQgdG8gZG8gc28uCisJICogVGhpcyBvcHRpbWl6YXRpb24gYWxs b3dzIHVzIHRvIHNhdmUgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzCisJICogZnJv bSB0aGUgdHVwbGUgYW5kIHNhdmVzIHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgaGFuZGxpbmcgbm9u LWJ5dmFsCisJICogYXR0cnMuCisJICovCisJZmlyc3ROb25HdWFyYW50ZWVkQXR0ciA9IE1pbihs YXN0X2F0dG51bSwgc2xvdC0+dHRzX2ZpcnN0X25vbmd1YXJhbnRlZWQpOworCisJZmlyc3ROb25D YWNoZU9mZnNldEF0dHIgPSB0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zmc2V0QXR0cjsKKwor CWlmIChIZWFwVHVwbGVIYXNOdWxscyh0dXBsZSkpCisJeworCQluYXR0cyA9IEhlYXBUdXBsZUhl YWRlckdldE5hdHRzKHR1cCk7CisJCXRwID0gKGNoYXIgKikgdHVwICsgTUFYQUxJR04ob2Zmc2V0 b2YoSGVhcFR1cGxlSGVhZGVyRGF0YSwgdF9iaXRzKSArCisJCQkJCQkJCQkgQklUTUFQTEVOKG5h dHRzKSk7CisKKwkJbmF0dHMgPSBNaW4obmF0dHMsIGxhc3RfYXR0bnVtKTsKKwkJaWYgKG5hdHRz ID4gZmlyc3ROb25HdWFyYW50ZWVkQXR0cikKKwkJeworCQkJYml0czgJICAgKmJwID0gdHVwLT50 X2JpdHM7CisKKwkJCS8qIEZpbmQgdGhlIGZpcnN0IE5VTEwgYXR0ciAqLworCQkJZmlyc3ROdWxs QXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgbmF0dHMpOworCisJCQkvKgorCQkJICogQW5kIHBv cHVsYXRlIHRoZSBpc251bGwgYXJyYXkgZm9yIGFsbCBhdHRyaWJ1dGVzIHVwIHRvIHRoZSBsYXN0 CisJCQkgKiBhdHRyaWJ1dGUgd2UncmUgZGVmb3JtaW5nLiAgV2hlbiBub3QgdXNpbmcgYXR0Y2Fj aGVvZmYsIHdlIG5lZWQKKwkJCSAqIHRvIGtub3cgaWYgYW4gYXR0cmlidXRlIGlzIE5VTEwgZXZl biB3aGVuIHdlJ3JlIG5vdCBkZWZvcm1pbmcKKwkJCSAqIGl0LCBzbyB0aGF0IHdlIGNhbiBza2lw IG92ZXIgaXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0IHRvCisJCQkgKiBhdHRyaWJ1dGVz IHRoYXQgd2UgYXJlIGRlZm9ybWluZy4KKwkJCSAqLworCQkJcG9wdWxhdGVfaXNudWxsX2FycmF5 KGJwLCBuYXR0cywgaXNudWxsKTsKKworCQkJLyogV2UgY2FuIG9ubHkgdXNlIGFueSBjYWNoZWQg b2Zmc2V0cyB1bnRpbCB0aGUgZmlyc3QgTlVMTCBhdHRyICovCisJCQlmaXJzdE5vbkNhY2hlT2Zm c2V0QXR0ciA9IE1pbihmaXJzdE5vbkNhY2hlT2Zmc2V0QXR0ciwKKwkJCQkJCQkJCQkgIGZpcnN0 TnVsbEF0dHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT3RoZXJ3aXNlIGFsbCByZXF1aXJl ZCBjb2x1bW5zIGFyZSBndWFyYW50ZWVkIHRvIGV4aXN0ICovCisJCQlmaXJzdE51bGxBdHRyID0g bmF0dHM7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJdHAgPSAoY2hhciAqKSB0dXAgKyBNQVhBTElH TihvZmZzZXRvZihIZWFwVHVwbGVIZWFkZXJEYXRhLCB0X2JpdHMpKTsKKworCQkvKgorCQkgKiBX ZSBvbmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgdHVwbGUncyBuYXR0cyBpZiB3ZSBuZWVkIG1vcmUg dGhhbiB0aGUKKwkJICogZ3VhcmFudGVlZCBudW1iZXIgb2YgY29sdW1ucworCQkgKi8KKwkJaWYg KGxhc3RfYXR0bnVtID4gZmlyc3ROb25HdWFyYW50ZWVkQXR0cikKKwkJCW5hdHRzID0gTWluKEhl YXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cCksIGxhc3RfYXR0bnVtKTsKKwkJZWxzZQorCQl7CisJ CQkvKiBObyBuZWVkIHRvIGFjY2VzcyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gdGhlIHR1 cGxlICovCisJCQluYXR0cyA9IGxhc3RfYXR0bnVtOworCQl9CisKKwkJLyogQWxsIGF0dHJzIGNh biBiZSBmZXRjaGVkIHdpdGhvdXQgY2hlY2tpbmcgZm9yIE5VTExzICovCisJCWZpcnN0TnVsbEF0 dHIgPSBuYXR0czsKKwl9CisKKwlhdHRudW1zX2lkeCA9IGF0dG51bV9tYXBbc2xvdC0+dHRzX252 YWxpZF07CisJYXR0bnVtID0gYXR0bnVtc1thdHRudW1zX2lkeF07CisJdmFsdWVzID0gc2xvdC0+ dHRzX3ZhbHVlczsKKworCS8qCisJICogV2Ugc3RvcmUgdGhlIHR1cGxlRGVzYydzIENvbXBhY3RB dHRyaWJ1dGUgYXJyYXkgaW4gJ2NhdHRycycgYXMgZ2NjCisJICogc2VlbXMgdG8gYmUgdW53aWxs aW5nIHRvIG9wdGltaXplIGFjY2Vzc2luZyB0aGUgQ29tcGFjdEF0dHJpYnV0ZQorCSAqIGVsZW1l bnQgZWZmaWNpZW50bHkgd2hlbiBhY2Nlc3NpbmcgaXQgdmlhIFR1cGxlRGVzY0NvbXBhY3RBdHRy KCkuCisJICovCisJY2F0dHJzID0gdHVwbGVEZXNjLT5jb21wYWN0X2F0dHJzOworCisJLyogRW5z dXJlIHdlIGNhbGN1bGF0ZWQgdHAgY29ycmVjdGx5ICovCisJQXNzZXJ0KHRwID09IChjaGFyICop IHR1cCArIHR1cC0+dF9ob2ZmKTsKKworCWlmIChhdHRudW0gPCBmaXJzdE5vbkd1YXJhbnRlZWRB dHRyKQorCXsKKwkJaW50CQkJYXR0bGVuOworCisJCWZvciAoOyBhdHRudW0gPCBmaXJzdE5vbkd1 YXJhbnRlZWRBdHRyOyBhdHRudW0gPSBhdHRudW1zWysrYXR0bnVtc19pZHhdKQorCQl7CisJCQlp c251bGxbYXR0bnVtXSA9IGZhbHNlOworCQkJY2F0dHIgPSAmY2F0dHJzW2F0dG51bV07CisJCQlh dHRsZW4gPSBjYXR0ci0+YXR0bGVuOworCisJCQkvKiBXZSBkb24ndCBleHBlY3QgYW55IG5vbi1i eXZhbCB0eXBlcyAqLworCQkJcGdfYXNzdW1lKGF0dGxlbiA+IDApOworCQkJQXNzZXJ0KGNhdHRy LT5hdHRieXZhbCA9PSB0cnVlKTsKKworCQkJb2ZmID0gY2F0dHItPmF0dGNhY2hlb2ZmOworCQkJ dmFsdWVzW2F0dG51bV0gPSBmZXRjaF9hdHRfbm9lcnIodHAgKyBvZmYsIHRydWUsIGF0dGxlbik7 CisJCX0KKworCQlvZmYgKz0gYXR0bGVuOworCisJCWlmIChhdHRudW0gPT0gbGFzdF9hdHRudW0p CisJCQlnb3RvIGRvbmU7CisJfQorCisJLyogV2UgY2FuIG9ubHkgZmV0Y2ggYXMgbWFueSBhdHRy aWJ1dGVzIGFzIHRoZSB0dXBsZSBoYXMuICovCisJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPSBN aW4oZmlyc3ROb25DYWNoZU9mZnNldEF0dHIsIG5hdHRzKTsKKworCS8qCisJICogSGFuZGxlIHRo ZSBwb3J0aW9uIG9mIHRoZSB0dXBsZSB0aGF0IHdlIGhhdmUgY2FjaGVkIHRoZSBvZmZzZXQgZm9y IHVwCisJICogdG8gdGhlIGZpcnN0IE5VTEwgYXR0cmlidXRlLiAgVGhlIG9mZnNldCBpcyBlZmZl Y3RpdmVseSBmaXhlZCBmb3IKKwkgKiB0aGVzZSwgc28gd2UgY2FuIHVzZSB0aGUgQ29tcGFjdEF0 dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmLgorCSAqLworCWlmIChhdHRudW0gPCBmaXJzdE5vbkNhY2hl T2Zmc2V0QXR0cikKKwl7CisJCWludAkJCWF0dGxlbjsKKworCQlmb3IgKDsgYXR0bnVtIDwgZmly c3ROb25DYWNoZU9mZnNldEF0dHI7IGF0dG51bSA9IGF0dG51bXNbKythdHRudW1zX2lkeF0pCisJ CXsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQljYXR0ciA9ICZjYXR0cnNbYXR0bnVt XTsKKwkJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47CisKKwkJCW9mZiA9IGNhdHRyLT5hdHRjYWNo ZW9mZjsKKwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0X25vZXJyKHRwICsgb2ZmLCBjYXR0 ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSBhdHRsZW4pOworCQl9CisKKwkJb2ZmICs9IGF0dGxl bjsKKwkJQXNzZXJ0KGF0dGxlbiA+IDApOworCisJCWlmIChhdHRudW0gPT0gbGFzdF9hdHRudW0p CisJCQlnb3RvIGRvbmU7CisJfQorCisKKwlpZiAoc2xvdC0+dHRzX252YWxpZCA+PSBmaXJzdE5v bkNhY2hlT2Zmc2V0QXR0cikKKwl7CisJCS8qIFJlc3RvcmUgc3RhdGUgZnJvbSBwcmV2aW91cyBl eGVjdXRpb24gKi8KKwkJb2ZmX2F0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7CisJCW9mZiA9ICpv ZmZwOworCX0KKwllbHNlCisJeworCQlvZmZfYXR0bnVtID0gZmlyc3ROb25DYWNoZU9mZnNldEF0 dHIgLSAxOworCQlvZmYgPSBjYXR0cnNbb2ZmX2F0dG51bV0uYXR0Y2FjaGVvZmY7CisJfQorCisJ LyoKKwkgKiBXZSBubyBsb25nZXIgaGF2ZSB0aGUgYWJpbGl0eSB0byB1c2UgYXR0Y2FjaGVvZmYs IHNvIHdlIG11c3QgbG9vaworCSAqIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgZnJvbSB0aGlzIHBv aW50IG9uLiAgRm9yIGF0dHJpYnV0ZXMgdGhhdCB3ZSBhcmUKKwkgKiBub3Qgc2VsZWN0aW5nLCB3 ZSBvbmx5IGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHRvIHNraXAgdGhlbSwgYW5kIGRvbid0IGRvCisJ ICogdGhlIGFjdHVhbCBmZXRjaC4gIEhlcmUgd2UgbG9vcCB1cCB0byB0aGUgZmlyc3QgTlVMTCBh dHRyaWJ1dGUuCisJICovCisJZm9yICg7IG9mZl9hdHRudW0gPCBmaXJzdE51bGxBdHRyOyBvZmZf YXR0bnVtKyspCisJeworCQlpbnQJCQlhdHRsZW47CisKKwkJY2F0dHIgPSAmY2F0dHJzW29mZl9h dHRudW1dOworCQlhdHRsZW4gPSBjYXR0ci0+YXR0bGVuOworCisJCS8qCisJCSAqIGNzdHJpbmdz IGRvbid0IGV4aXN0IGluIGhlYXAgdHVwbGVzLiAgVXNlIHBnX2Fzc3VtZSB0byBpbnN0cnVjdCB0 aGUKKwkJICogY29tcGlsZXIgbm90IHRvIGVtaXQgdGhlIGNzdHJpbmctcmVsYXRlZCBjb2RlIGlu CisJCSAqIGFsaWduX2ZldGNoX3RoZW5fYWRkKCkuCisJCSAqLworCQlwZ19hc3N1bWUoYXR0bGVu ID4gMCB8fCBhdHRsZW4gPT0gLTEpOworCisJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2Zm LCBjYXR0ci0+YXR0YWxpZ25ieSwgYXR0bGVuLCB0cCArIG9mZik7CisKKwkJLyoKKwkJICogSWYg dGhpcyBpcyBhbiBhdHRyaWJ1dGUgd2Ugd2FudCwgZG8gdGhlIGZldGNoIGFuZCB0aGVuIG1vdmUg YXR0bnVtCisJCSAqIHRvIHRoZSBuZXh0IGF0dHJpYnV0ZSB3ZSB3YW50LgorCQkgKi8KKwkJaWYg KG9mZl9hdHRudW0gPT0gYXR0bnVtKQorCQl7CisJCQlpc251bGxbb2ZmX2F0dG51bV0gPSBmYWxz ZTsKKwkJCXZhbHVlc1tvZmZfYXR0bnVtXSA9CisJCQkJZmV0Y2hfYXR0X25vZXJyKHRwICsgb2Zm LCBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCWF0dGxlbik7CisJCQlhdHRudW0gPSBhdHRudW1z WysrYXR0bnVtc19pZHhdOworCisJCX0KKwkJLyogTW92ZSBvZmZzZXQgYmV5b25kIHRoaXMgYXR0 cmlidXRlICovCisJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGF0dGxlbiwgdHAg KyBvZmYpOworCX0KKworCS8qCisJICogTm93IGhhbmRsZSBhbnkgcmVtYWluaW5nIGF0dHJpYnV0 ZXMgaW4gdGhlIHR1cGxlIHVwIHRvIHRoZSByZXF1ZXN0ZWQKKwkgKiBhdHRudW0uICBUaGlzIHRp bWUsIGluY2x1ZGUgTlVMTCBjaGVja3MgYXMgd2UncmUgbm93IGF0IHRoZSBmaXJzdCBOVUxMCisJ ICogYXR0cmlidXRlLgorCSAqLworCWZvciAoOyBvZmZfYXR0bnVtIDwgbmF0dHM7IG9mZl9hdHRu dW0rKykKKwl7CisJCWludAkJCWF0dGxlbjsKKworCQljYXR0ciA9ICZjYXR0cnNbb2ZmX2F0dG51 bV07CisJCWF0dGxlbiA9IGNhdHRyLT5hdHRsZW47CisKKwkJLyogQXMgYWJvdmUsIHdlIGRvbid0 IGV4cGVjdCBjc3RyaW5ncyAqLworCQlwZ19hc3N1bWUoYXR0bGVuID4gMCB8fCBhdHRsZW4gPT0g LTEpOworCisJCS8qIElzIHRoaXMgYW4gYXR0cmlidXRlIHdlJ3JlIHNlbGVjdGluZz8gKi8KKwkJ aWYgKG9mZl9hdHRudW0gPT0gYXR0bnVtKQorCQl7CisJCQlhdHRudW0gPSBhdHRudW1zWysrYXR0 bnVtc19pZHhdOworCisJCQlpZiAoaXNudWxsW29mZl9hdHRudW1dKQorCQkJeworCQkJCXZhbHVl c1tvZmZfYXR0bnVtXSA9IChEYXR1bSkgMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyoK KwkJCSAqIGFsaWduICdvZmYnLCBmZXRjaCB0aGUgZGF0dW0sIGFuZCBpbmNyZW1lbnQgb2ZmIGJl eW9uZCB0aGUKKwkJCSAqIGRhdHVtCisJCQkgKi8KKwkJCXZhbHVlc1tvZmZfYXR0bnVtXSA9IGFs aWduX2ZldGNoX3RoZW5fYWRkKHRwLAorCQkJCQkJCQkJCQkJCSAgJm9mZiwKKwkJCQkJCQkJCQkJ CQkgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCQkJCQkgIGF0dGxlbiwKKwkJCQkJCQkJCQkJ CQkgIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwkJfQorCQllbHNlIGlmICghaXNudWxsW29mZl9hdHRu dW1dKQorCQl7CisJCQkvKiBXZSBkb24ndCB3YW50IHRoaXMgYXR0cmlidXRlLCBtb3ZlIGJleW9u ZCBpdCAqLworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGln bmJ5LCBhdHRsZW4sIHRwICsgb2ZmKTsKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihv ZmYsIGF0dGxlbiwgdHAgKyBvZmYpOworCQl9CisKKwl9CisKKwkvKiBGZXRjaCBhbnkgbWlzc2lu ZyBhdHRycyBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgcmVxbmF0dHMgaXMgaW52YWxpZCAqLworCWlm ICh1bmxpa2VseShhdHRudW0gPCBsYXN0X2F0dG51bSkpCisJeworCQkqb2ZmcCA9IG9mZjsKKwkJ LyogWFhYIHdvcnRoIGRvaW5nIHRoaXMgc2VsZWN0aXZlbHkgdG9vPyAqLworCQlzbG90X2dldG1p c3NpbmdhdHRycyhzbG90LCBhdHRudW0sIGxhc3RfYXR0bnVtKTsKKwkJc2xvdC0+dHRzX252YWxp ZCA9IGxhc3RfYXR0bnVtOworCQlyZXR1cm47CisJfQorZG9uZToKKworCXNsb3QtPnR0c19udmFs aWQgPSBsYXN0X2F0dG51bTsKKwkvKiBTYXZlIGN1cnJlbnQgb2Zmc2V0IGZvciBuZXh0IGV4ZWN1 dGlvbiAqLworCSpvZmZwID0gb2ZmOworfQorCiBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyBUVFNP cHNWaXJ0dWFsID0gewogCS5iYXNlX3Nsb3Rfc2l6ZSA9IHNpemVvZihWaXJ0dWFsVHVwbGVUYWJs ZVNsb3QpLAogCS5pbml0ID0gdHRzX3ZpcnR1YWxfaW5pdCwKIAkucmVsZWFzZSA9IHR0c192aXJ0 dWFsX3JlbGVhc2UsCiAJLmNsZWFyID0gdHRzX3ZpcnR1YWxfY2xlYXIsCiAJLmdldHNvbWVhdHRy cyA9IHR0c192aXJ0dWFsX2dldHNvbWVhdHRycywKKwkuc2VsZWN0YXR0cnMgPSB0dHNfdmlydHVh bF9zZWxlY3RhdHRycywKIAkuZ2V0c3lzYXR0ciA9IHR0c192aXJ0dWFsX2dldHN5c2F0dHIsCiAJ Lm1hdGVyaWFsaXplID0gdHRzX3ZpcnR1YWxfbWF0ZXJpYWxpemUsCiAJLmlzX2N1cnJlbnRfeGFj dF90dXBsZSA9IHR0c192aXJ0dWFsX2lzX2N1cnJlbnRfeGFjdF90dXBsZSwKQEAgLTEyNzEsNiAr MTYyOCw3IEBAIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09wc0hlYXBUdXBsZSA9IHsKIAku cmVsZWFzZSA9IHR0c19oZWFwX3JlbGVhc2UsCiAJLmNsZWFyID0gdHRzX2hlYXBfY2xlYXIsCiAJ LmdldHNvbWVhdHRycyA9IHR0c19oZWFwX2dldHNvbWVhdHRycywKKwkuc2VsZWN0YXR0cnMgPSB0 dHNfaGVhcF9zZWxlY3RhdHRycywKIAkuZ2V0c3lzYXR0ciA9IHR0c19oZWFwX2dldHN5c2F0dHIs CiAJLmlzX2N1cnJlbnRfeGFjdF90dXBsZSA9IHR0c19oZWFwX2lzX2N1cnJlbnRfeGFjdF90dXBs ZSwKIAkubWF0ZXJpYWxpemUgPSB0dHNfaGVhcF9tYXRlcmlhbGl6ZSwKQEAgLTEyODksNiArMTY0 Nyw3IEBAIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09wc01pbmltYWxUdXBsZSA9IHsKIAku cmVsZWFzZSA9IHR0c19taW5pbWFsX3JlbGVhc2UsCiAJLmNsZWFyID0gdHRzX21pbmltYWxfY2xl YXIsCiAJLmdldHNvbWVhdHRycyA9IHR0c19taW5pbWFsX2dldHNvbWVhdHRycywKKwkuc2VsZWN0 YXR0cnMgPSB0dHNfbWluaW1hbF9zZWxlY3RhdHRycywKIAkuZ2V0c3lzYXR0ciA9IHR0c19taW5p bWFsX2dldHN5c2F0dHIsCiAJLmlzX2N1cnJlbnRfeGFjdF90dXBsZSA9IHR0c19taW5pbWFsX2lz X2N1cnJlbnRfeGFjdF90dXBsZSwKIAkubWF0ZXJpYWxpemUgPSB0dHNfbWluaW1hbF9tYXRlcmlh bGl6ZSwKQEAgLTEzMDcsNiArMTY2Niw3IEBAIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzIFRUU09w c0J1ZmZlckhlYXBUdXBsZSA9IHsKIAkucmVsZWFzZSA9IHR0c19idWZmZXJfaGVhcF9yZWxlYXNl LAogCS5jbGVhciA9IHR0c19idWZmZXJfaGVhcF9jbGVhciwKIAkuZ2V0c29tZWF0dHJzID0gdHRz X2J1ZmZlcl9oZWFwX2dldHNvbWVhdHRycywKKwkuc2VsZWN0YXR0cnMgPSB0dHNfYnVmZmVyX2hl YXBfc2VsZWN0YXR0cnMsCiAJLmdldHN5c2F0dHIgPSB0dHNfYnVmZmVyX2hlYXBfZ2V0c3lzYXR0 ciwKIAkuaXNfY3VycmVudF94YWN0X3R1cGxlID0gdHRzX2J1ZmZlcl9pc19jdXJyZW50X3hhY3Rf dHVwbGUsCiAJLm1hdGVyaWFsaXplID0gdHRzX2J1ZmZlcl9oZWFwX21hdGVyaWFsaXplLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjVXRpbHMuYwppbmRleCBmNjI1ODI4NTlmOS4uMjUyZTgzMDY2MzEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNVdGlscy5jCkBAIC01ODAsOCArNTgwLDcgQEAgRXhlY0dldENvbW1vbkNo aWxkU2xvdE9wcyhQbGFuU3RhdGUgKnBzKQogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lk Ci1FeGVjQXNzaWduUHJvamVjdGlvbkluZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJCQkg VHVwbGVEZXNjIGlucHV0RGVzYykKK0V4ZWNBc3NpZ25Qcm9qZWN0aW9uSW5mbyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgVHVwbGVEZXNjIGlucHV0RGVzYykKIHsKIAlwbGFuc3RhdGUtPnBzX1Byb2pJ bmZvID0KIAkJRXhlY0J1aWxkUHJvamVjdGlvbkluZm8ocGxhbnN0YXRlLT5wbGFuLT50YXJnZXRs aXN0LApAQCAtNTkxLDYgKzU5MCwyOCBAQCBFeGVjQXNzaWduUHJvamVjdGlvbkluZm8oUGxhblN0 YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCWlucHV0RGVzYyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCQlFeGVjQXNzaWduUHJvamVjdGlvbkluZm9XaXRoU2NhbkF0dHJzCisgKgorICog QXMgRXhlY0Fzc2lnblNjYW5Qcm9qZWN0aW9uSW5mbyBidXQgd2hlbiAnc2Nhbl9hdHRycycgaXMg c2V0LCB1c2UKKyAqIEVFT1BfU0NBTl9TRUxFQ1RTT01FIGluc3RlYWQgb2YgRUVPUF9TQ0FOX0ZF VENIU09NRSB0byBkZWZvcm0gb25seSB0aGUKKyAqIG1lbnRpb25lZCAnc2Nhbl9hdHRycycgZnJv bSB0aGUgc2NhbiB0dXBsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyovCit2b2lkCitFeGVjQXNz aWduUHJvamVjdGlvbkluZm9XaXRoU2NhbkF0dHJzKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJ CQkJCQkJICBUdXBsZURlc2MgaW5wdXREZXNjLAorCQkJCQkJCQkJICBCaXRtYXBzZXQgKnNjYW5f YXR0cnMpCit7CisJcGxhbnN0YXRlLT5wc19Qcm9qSW5mbyA9CisJCUV4ZWNCdWlsZFByb2plY3Rp b25JbmZvV2l0aFNjYW5BdHRycyhwbGFuc3RhdGUtPnBsYW4tPnRhcmdldGxpc3QsCisJCQkJCQkJ CQkJCSBwbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0LAorCQkJCQkJCQkJCQkgcGxhbnN0YXRlLT5w c19SZXN1bHRUdXBsZVNsb3QsCisJCQkJCQkJCQkJCSBwbGFuc3RhdGUsCisJCQkJCQkJCQkJCSBp bnB1dERlc2MsCisJCQkJCQkJCQkJCSBzY2FuX2F0dHJzKTsKK30KKwogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCiAgKgkJRXhlY0NvbmRpdGlvbmFsQXNzaWduUHJvamVjdGlvbkluZm8KQEAgLTYwMiw2 ICs2MjMsMjYgQEAgRXhlY0Fzc2lnblByb2plY3Rpb25JbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LAogdm9pZAogRXhlY0NvbmRpdGlvbmFsQXNzaWduUHJvamVjdGlvbkluZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIFR1cGxlRGVzYyBpbnB1dERlc2MsCiAJCQkJCQkJCQlpbnQgdmFybm8pCit7CisJ RXhlY0NvbmRpdGlvbmFsQXNzaWduUHJvamVjdGlvbkluZm9XaXRoU2NhbkF0dHJzKHBsYW5zdGF0 ZSwKKwkJCQkJCQkJCQkJCQkgaW5wdXREZXNjLAorCQkJCQkJCQkJCQkJCSB2YXJubywKKwkJCQkJ CQkJCQkJCQkgTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjQ29uZGl0 aW9uYWxBc3NpZ25Qcm9qZWN0aW9uSW5mb1dpdGhTY2FuQXR0cnMKKyAqCisgKiBBcyBFeGVjQ29u ZGl0aW9uYWxBc3NpZ25Qcm9qZWN0aW9uSW5mbyBidXQgd2hlbiAnc2Nhbl9hdHRycycgaXMgc2V0 LCB1c2UKKyAqIEVFT1BfU0NBTl9TRUxFQ1RTT01FIGluc3RlYWQgb2YgRUVPUF9TQ0FOX0ZFVENI U09NRSB0byBkZWZvcm0gb25seSB0aGUKKyAqIG1lbnRpb25lZCAnc2Nhbl9hdHRycycgZnJvbSB0 aGUgc2NhbiB0dXBsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyovCit2b2lkCitFeGVjQ29uZGl0 aW9uYWxBc3NpZ25Qcm9qZWN0aW9uSW5mb1dpdGhTY2FuQXR0cnMoUGxhblN0YXRlICpwbGFuc3Rh dGUsCisJCQkJCQkJCQkJCQkgVHVwbGVEZXNjIGlucHV0RGVzYywKKwkJCQkJCQkJCQkJCSBpbnQg dmFybm8sCisJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpzY2FuX2F0dHJzKQogewogCWlmICh0bGlz dF9tYXRjaGVzX3R1cGRlc2MocGxhbnN0YXRlLAogCQkJCQkJCSAgcGxhbnN0YXRlLT5wbGFuLT50 YXJnZXRsaXN0LApAQCAtNjIyLDcgKzY2Myw3IEBAIEV4ZWNDb25kaXRpb25hbEFzc2lnblByb2pl Y3Rpb25JbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBUdXBsZURlc2MgaW5wdXREZXNjLAogCQkJ cGxhbnN0YXRlLT5yZXN1bHRvcHNmaXhlZCA9IHRydWU7CiAJCQlwbGFuc3RhdGUtPnJlc3VsdG9w c3NldCA9IHRydWU7CiAJCX0KLQkJRXhlY0Fzc2lnblByb2plY3Rpb25JbmZvKHBsYW5zdGF0ZSwg aW5wdXREZXNjKTsKKwkJRXhlY0Fzc2lnblByb2plY3Rpb25JbmZvV2l0aFNjYW5BdHRycyhwbGFu c3RhdGUsIGlucHV0RGVzYywgc2Nhbl9hdHRycyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVNlcXNjYW4uYwppbmRleCA4ZjIxOWY2MGE5My4uNDFkZTM2NzgzMmMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVNlcXNjYW4uYwpAQCAtMjUxLDEzICsyNTEsMTUgQEAgRXhlY0luaXRTZXFTY2FuKFNl cVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIEluaXRpYWxpemUg cmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24uCiAJICovCiAJRXhlY0luaXRSZXN1bHRUeXBlVEwo JnNjYW5zdGF0ZS0+c3MucHMpOwotCUV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm8oJnNjYW5z dGF0ZS0+c3MpOworCUV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm9XaXRoU2NhbkF0dHJzKCZz Y2Fuc3RhdGUtPnNzLAorCQkJCQkJCQkJCQkgIG5vZGUtPnNjYW4uc2Nhbl92YXJhdHRub3MpOwog CiAJLyoKIAkgKiBpbml0aWFsaXplIGNoaWxkIGV4cHJlc3Npb25zCiAJICovCi0Jc2NhbnN0YXRl LT5zcy5wcy5xdWFsID0KLQkJRXhlY0luaXRRdWFsKG5vZGUtPnNjYW4ucGxhbi5xdWFsLCAoUGxh blN0YXRlICopIHNjYW5zdGF0ZSk7CisJc2NhbnN0YXRlLT5zcy5wcy5xdWFsID0gRXhlY0luaXRR dWFsV2l0aFNjYW5BdHRycyhub2RlLT5zY2FuLnBsYW4ucXVhbCwKKwkJCQkJCQkJCQkJCQkgIChQ bGFuU3RhdGUgKikgc2NhbnN0YXRlLAorCQkJCQkJCQkJCQkJCSAgbm9kZS0+c2Nhbi5zY2FuX3Zh cmF0dG5vcyk7CiAKIAkvKgogCSAqIFdoZW4gRXZhbFBsYW5RdWFsKCkgaXMgbm90IGluIHVzZSwg YXNzaWduIEV4ZWNQcm9jTm9kZSBmb3IgdGhpcyBub2RlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKaW5kZXggNTBiMGUxMDMwOGIuLjQ1MjJhYzRkNGMwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xMTgsNyArMTE4LDggQEAgc3RhdGlj IE1vZGlmeVRhYmxlICpjcmVhdGVfbW9kaWZ5dGFibGVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg TW9kaWZ5VGFibGVQYXRoICoKIHN0YXRpYyBMaW1pdCAqY3JlYXRlX2xpbWl0X3BsYW4oUGxhbm5l ckluZm8gKnJvb3QsIExpbWl0UGF0aCAqYmVzdF9wYXRoLAogCQkJCQkJCQlpbnQgZmxhZ3MpOwog c3RhdGljIFNlcVNjYW4gKmNyZWF0ZV9zZXFzY2FuX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBh dGggKmJlc3RfcGF0aCwKLQkJCQkJCQkJCUxpc3QgKnRsaXN0LCBMaXN0ICpzY2FuX2NsYXVzZXMp OworCQkJCQkJCQkJTGlzdCAqdGxpc3QsIExpc3QgKnNjYW5fY2xhdXNlcywKKwkJCQkJCQkJCUJp dG1hcHNldCAqdGxpc3RfdmFyYXR0bm9zKTsKIHN0YXRpYyBTYW1wbGVTY2FuICpjcmVhdGVfc2Ft cGxlc2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpiZXN0X3BhdGgsCiAJCQkJCQkJ CQkJICBMaXN0ICp0bGlzdCwgTGlzdCAqc2Nhbl9jbGF1c2VzKTsKIHN0YXRpYyBTY2FuICpjcmVh dGVfaW5kZXhzY2FuX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqYmVzdF9wYXRo LApAQCAtMTc4LDcgKzE3OSw4IEBAIHN0YXRpYyB2b2lkIGxhYmVsX3NvcnRfd2l0aF9jb3N0c2l6 ZShQbGFubmVySW5mbyAqcm9vdCwgU29ydCAqcGxhbiwKIAkJCQkJCQkJCSBkb3VibGUgbGltaXRf dHVwbGVzKTsKIHN0YXRpYyB2b2lkIGxhYmVsX2luY3JlbWVudGFsc29ydF93aXRoX2Nvc3RzaXpl KFBsYW5uZXJJbmZvICpyb290LCBJbmNyZW1lbnRhbFNvcnQgKnBsYW4sCiAJCQkJCQkJCQkJCQlM aXN0ICpwYXRoa2V5cywgZG91YmxlIGxpbWl0X3R1cGxlcyk7Ci1zdGF0aWMgU2VxU2NhbiAqbWFr ZV9zZXFzY2FuKExpc3QgKnFwdGxpc3QsIExpc3QgKnFwcXVhbCwgSW5kZXggc2NhbnJlbGlkKTsK K3N0YXRpYyBTZXFTY2FuICptYWtlX3NlcXNjYW4oTGlzdCAqcXB0bGlzdCwgTGlzdCAqcXBxdWFs LCBJbmRleCBzY2FucmVsaWQsCisJCQkJCQkJIEJpdG1hcHNldCAqc2Nhbl92YXJhdHRub3MpOwog c3RhdGljIFNhbXBsZVNjYW4gKm1ha2Vfc2FtcGxlc2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0ICpx cHF1YWwsIEluZGV4IHNjYW5yZWxpZCwKIAkJCQkJCQkJICAgVGFibGVTYW1wbGVDbGF1c2UgKnRz Yyk7CiBzdGF0aWMgSW5kZXhTY2FuICptYWtlX2luZGV4c2NhbihMaXN0ICpxcHRsaXN0LCBMaXN0 ICpxcHF1YWwsIEluZGV4IHNjYW5yZWxpZCwKQEAgLTU1MCw2ICs1NTIsNyBAQCBjcmVhdGVfcGxh bl9yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykK IHN0YXRpYyBQbGFuICoKIGNyZWF0ZV9zY2FuX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBhdGgg KmJlc3RfcGF0aCwgaW50IGZsYWdzKQogeworCUJpdG1hcHNldCAgKnRsaXN0X3ZhcmF0dG5vcyA9 IE5VTEw7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXJlbnQ7CiAJTGlzdAkgICAq c2Nhbl9jbGF1c2VzOwogCUxpc3QJICAgKmdhdGluZ19jbGF1c2VzOwpAQCAtNTc5LDYgKzU4Miwx NCBAQCBjcmVhdGVfc2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpiZXN0X3BhdGgs IGludCBmbGFncykKIAkJCWJyZWFrOwogCX0KIAorCS8qCisJICogRmlndXJlIG91dCB3aGljaCBh dHRyaWJ1dGVzIHdlIG5lZWQgZnJvbSB0aGUgc2NhbiBiZWZvcmUgYXBwbHlpbmcgdGhlCisJICog cGh5c2ljYWwgdGxpc3Qgb3B0aW1pemF0aW9uLgorCSAqLworCXB1bGxfdmFyYXR0bm9zKChOb2Rl ICopIGJlc3RfcGF0aC0+cGF0aHRhcmdldC0+ZXhwcnMsCisJCQkJICAgcmVsLT5yZWxpZCwKKwkJ CQkgICAmdGxpc3RfdmFyYXR0bm9zKTsKKwogCS8qCiAJICogSWYgdGhpcyBpcyBhIHBhcmFtZXRl cml6ZWQgc2Nhbiwgd2UgYWxzbyBuZWVkIHRvIGVuZm9yY2UgYWxsIHRoZSBqb2luCiAJICogY2xh dXNlcyBhdmFpbGFibGUgZnJvbSB0aGUgb3V0ZXIgcmVsYXRpb24ocykuCkBAIC02NzIsNyArNjgz LDggQEAgY3JlYXRlX3NjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqYmVzdF9wYXRo LCBpbnQgZmxhZ3MpCiAJCQlwbGFuID0gKFBsYW4gKikgY3JlYXRlX3NlcXNjYW5fcGxhbihyb290 LAogCQkJCQkJCQkJCQkJYmVzdF9wYXRoLAogCQkJCQkJCQkJCQkJdGxpc3QsCi0JCQkJCQkJCQkJ CQlzY2FuX2NsYXVzZXMpOworCQkJCQkJCQkJCQkJc2Nhbl9jbGF1c2VzLAorCQkJCQkJCQkJCQkJ dGxpc3RfdmFyYXR0bm9zKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVF9TYW1wbGVTY2FuOgpAQCAt Mjc1MiwxMCArMjc2NCwxMyBAQCBjcmVhdGVfbGltaXRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg TGltaXRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKICAqLwogc3RhdGljIFNlcVNjYW4gKgog Y3JlYXRlX3NlcXNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqYmVzdF9wYXRoLAot CQkJCQlMaXN0ICp0bGlzdCwgTGlzdCAqc2Nhbl9jbGF1c2VzKQorCQkJCQlMaXN0ICp0bGlzdCwg TGlzdCAqc2Nhbl9jbGF1c2VzLCBCaXRtYXBzZXQgKnRsaXN0X3ZhcmF0dG5vcykKIHsKIAlTZXFT Y2FuICAgICpzY2FuX3BsYW47CiAJSW5kZXgJCXNjYW5fcmVsaWQgPSBiZXN0X3BhdGgtPnBhcmVu dC0+cmVsaWQ7CisJQml0bWFwc2V0ICAqc2Nhbl92YXJhdHRub3MgPSB0bGlzdF92YXJhdHRub3M7 CisJQml0bWFwc2V0ICAqbm9uX3N5c19hdHRycyA9IE5VTEw7CisJaW50CQkJaTsKIAogCS8qIGl0 IHNob3VsZCBiZSBhIGJhc2UgcmVsLi4uICovCiAJQXNzZXJ0KHNjYW5fcmVsaWQgPiAwKTsKQEAg LTI3NjcsNiArMjc4MiwxOSBAQCBjcmVhdGVfc2Vxc2Nhbl9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBQYXRoICpiZXN0X3BhdGgsCiAJLyogUmVkdWNlIFJlc3RyaWN0SW5mbyBsaXN0IHRvIGJhcmUg ZXhwcmVzc2lvbnM7IGlnbm9yZSBwc2V1ZG9jb25zdGFudHMgKi8KIAlzY2FuX2NsYXVzZXMgPSBl eHRyYWN0X2FjdHVhbF9jbGF1c2VzKHNjYW5fY2xhdXNlcywgZmFsc2UpOwogCisJLyogUHVsbCB2 YXJhdHRub3MgZnJvbSBXSEVSRSBjbGF1c2UgVmFycyAqLworCXB1bGxfdmFyYXR0bm9zKChOb2Rl ICopIHNjYW5fY2xhdXNlcywgc2Nhbl9yZWxpZCwgJnNjYW5fdmFyYXR0bm9zKTsKKworCS8qIERv bid0IHNldCB0aGVzZSB3aGVuIHdob2xlLXJvdyB2YXIgaXMgcHJlc2VudCAqLworCWlmICghYm1z X2lzX21lbWJlcigwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwgc2Nhbl92 YXJhdHRub3MpKQorCXsKKwkJLyogWFhYIGludmVudCBibXNfcmlnaHRfc2hpZnRfbWVtYmVycygp PyAqLworCQlpID0gMCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihzY2FuX3ZhcmF0dG5vcywgaSkpID49IDApCisJCQlu b25fc3lzX2F0dHJzID0gYm1zX2FkZF9tZW1iZXIobm9uX3N5c19hdHRycywKKwkJCQkJCQkJCQkg ICBpIC0gMSArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCX0KKwogCS8q IFJlcGxhY2UgYW55IG91dGVyLXJlbGF0aW9uIHZhcmlhYmxlcyB3aXRoIG5lc3Rsb29wIHBhcmFt cyAqLwogCWlmIChiZXN0X3BhdGgtPnBhcmFtX2luZm8pCiAJewpAQCAtMjc3Niw3ICsyODA0LDgg QEAgY3JlYXRlX3NlcXNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqYmVzdF9wYXRo LAogCiAJc2Nhbl9wbGFuID0gbWFrZV9zZXFzY2FuKHRsaXN0LAogCQkJCQkJCSBzY2FuX2NsYXVz ZXMsCi0JCQkJCQkJIHNjYW5fcmVsaWQpOworCQkJCQkJCSBzY2FuX3JlbGlkLAorCQkJCQkJCSBu b25fc3lzX2F0dHJzKTsKIAogCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnNjYW5fcGxhbi0+c2Nh bi5wbGFuLCBiZXN0X3BhdGgpOwogCkBAIC01NDg3LDcgKzU1MTYsOCBAQCBiaXRtYXBfc3VicGxh bl9tYXJrX3NoYXJlZChQbGFuICpwbGFuKQogc3RhdGljIFNlcVNjYW4gKgogbWFrZV9zZXFzY2Fu KExpc3QgKnFwdGxpc3QsCiAJCQkgTGlzdCAqcXBxdWFsLAotCQkJIEluZGV4IHNjYW5yZWxpZCkK KwkJCSBJbmRleCBzY2FucmVsaWQsCisJCQkgQml0bWFwc2V0ICpzY2FuX3ZhcmF0dG5vcykKIHsK IAlTZXFTY2FuICAgICpub2RlID0gbWFrZU5vZGUoU2VxU2Nhbik7CiAJUGxhbgkgICAqcGxhbiA9 ICZub2RlLT5zY2FuLnBsYW47CkBAIC01NDk3LDYgKzU1MjcsNyBAQCBtYWtlX3NlcXNjYW4oTGlz dCAqcXB0bGlzdCwKIAlwbGFuLT5sZWZ0dHJlZSA9IE5VTEw7CiAJcGxhbi0+cmlnaHR0cmVlID0g TlVMTDsKIAlub2RlLT5zY2FuLnNjYW5yZWxpZCA9IHNjYW5yZWxpZDsKKwlub2RlLT5zY2FuLnNj YW5fdmFyYXR0bm9zID0gc2Nhbl92YXJhdHRub3M7CiAKIAlyZXR1cm4gbm9kZTsKIH0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjRXhwci5oCmluZGV4IGFhOWIzNjFmYTMxLi5mMjlkOWRkNzk5YiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjRXhwci5oCkBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9w CiAJRUVPUF9PTERfRkVUQ0hTT01FLAogCUVFT1BfTkVXX0ZFVENIU09NRSwKIAorCS8qIGFwcGx5 IHNsb3Rfc2VsZWN0YXR0cnMgb24gdGhlIGNvcnJlc3BvbmRpbmcgdHVwbGUgc2xvdCAqLworCUVF T1BfU0NBTl9TRUxFQ1RTT01FLAorCiAJLyogY29tcHV0ZSBub24tc3lzdGVtIFZhciB2YWx1ZSAq LwogCUVFT1BfSU5ORVJfVkFSLAogCUVFT1BfT1VURVJfVkFSLApAQCAtMzE4LDE1ICszMjEsMzQg QEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJICovCiAJdW5pb24KIAl7Ci0JCS8qIGZv ciBFRU9QX0lOTkVSL09VVEVSL1NDQU4vT0xEL05FV19GRVRDSFNPTUUgKi8KKwkJLyoKKwkJICog Zm9yIEVFT1BfSU5ORVIvT1VURVIvU0NBTi9PTEQvTkVXX0ZFVENIU09NRSBhbmQKKwkJICogRUVP UF9TQ0FOX1NFTEVDVFNPTUUKKwkJICovCiAJCXN0cnVjdAogCQl7CiAJCQkvKiBhdHRyaWJ1dGUg bnVtYmVyIHVwIHRvIHdoaWNoIHRvIGZldGNoIChpbmNsdXNpdmUpICovCiAJCQlpbnQJCQlsYXN0 X3ZhcjsKIAkJCS8qIHdpbGwgdGhlIHR5cGUgb2Ygc2xvdCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkg aW52b2NhdGlvbiAqLwogCQkJYm9vbAkJZml4ZWQ7CisJCQkvKiBOdW1iZXIgb2YgZWxlbWVudHMg aW4gcmVxX2F0dG51bXMgYXJyYXkuIFhYWCBuZWVkZWQ/ICovCisJCQlBdHRyTnVtYmVyCW5hdHRz OworCisJCQkvKiBPbmUgZWxlbWVudCBmb3IgZWFjaCBhdHRudW0gdG8gc2VsZWN0LCBvcmRlcmVk IGJ5IGF0dG51bSAqLworCQkJQXR0ck51bWJlciAqcmVxX2F0dG51bXM7CisKKwkJCS8qCisJCQkg KiBQcm92aWRlcyBtYXBwaW5nIG9mIDAtYmFzZWQgYXR0bnVtcyBiYWNrIHRvIHRoZSBpbmRleCBv ZiB0aGUKKwkJCSAqIHJlcV9hdHRudW1zIGFycmF5IHRoYXQgZGVmb3JtaW5nIHNob3VsZCBjb250 aW51ZSBmcm9tLiAgVGhpcworCQkJICogYWxsb3dzIHVzIHRvIHJlLWZpbmQgdGhlIGVsZW1lbnQg b2YgcmVxX2F0dG51bXMgdXNpbmcgdGhlCisJCQkgKiBzbG90J3MgdHRzX252YWxpZCBzbyB0aGF0 IHdlIGNhbiBjb250aW51ZSBkZWZvcm1pbmcgZnJvbSB0aGUKKwkJCSAqIGxhc3QgZGVmcm9tZWQg YXR0cmlidXRlLgorCQkJICovCisJCQlBdHRyTnVtYmVyICpuZXh0X3JlcV9hdHRudW1zX2luZGV4 OworCiAJCQkvKiB0dXBsZSBkZXNjcmlwdG9yLCBpZiBrbm93biAqLwogCQkJVHVwbGVEZXNjCWtu b3duX2Rlc2M7CisKIAkJCS8qIHR5cGUgb2Ygc2xvdCwgY2FuIG9ubHkgYmUgcmVsaWVkIHVwb24g aWYgZml4ZWQgaXMgc2V0ICovCiAJCQljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqa2luZDsKIAkJ fQkJCWZldGNoOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggYmYyMzlmYzE1NmYuLjY5ZjNj NWRhNmM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTMyNCw4ICszMjQsMTIgQEAgRXhl Y1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSkKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMg aW4gZXhlY0V4cHIuYwogICovCiBleHRlcm4gRXhwclN0YXRlICpFeGVjSW5pdEV4cHIoRXhwciAq bm9kZSwgUGxhblN0YXRlICpwYXJlbnQpOworZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRFeHBy V2l0aFNjYW5BdHRycyhFeHByICpub2RlLCBQbGFuU3RhdGUgKnBhcmVudCwKKwkJCQkJCQkJCQkJ Qml0bWFwc2V0ICpzY2FuX2F0dHJzKTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0RXhwcldp dGhQYXJhbXMoRXhwciAqbm9kZSwgUGFyYW1MaXN0SW5mbyBleHRfcGFyYW1zKTsKIGV4dGVybiBF eHByU3RhdGUgKkV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCk7Citl eHRlcm4gRXhwclN0YXRlICpFeGVjSW5pdFF1YWxXaXRoU2NhbkF0dHJzKExpc3QgKnF1YWwsIFBs YW5TdGF0ZSAqcGFyZW50LAorCQkJCQkJCQkJCQlCaXRtYXBzZXQgKnNjYW5fYXR0cnMpOwogZXh0 ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRDaGVjayhMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVu dCk7CiBleHRlcm4gTGlzdCAqRXhlY0luaXRFeHByTGlzdChMaXN0ICpub2RlcywgUGxhblN0YXRl ICpwYXJlbnQpOwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUg KmFnZ3N0YXRlLCBzdHJ1Y3QgQWdnU3RhdGVQZXJQaGFzZURhdGEgKnBoYXNlLApAQCAtMzY0LDYg KzM2OCwxMiBAQCBleHRlcm4gUHJvamVjdGlvbkluZm8gKkV4ZWNCdWlsZFByb2plY3Rpb25JbmZv KExpc3QgKnRhcmdldExpc3QsCiAJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCQkJCQkJCQkgICBQbGFuU3RhdGUgKnBhcmVudCwKIAkJCQkJCQkJCQkJICAgVHVwbGVEZXNj IGlucHV0RGVzYyk7CitleHRlcm4gUHJvamVjdGlvbkluZm8gKkV4ZWNCdWlsZFByb2plY3Rpb25J bmZvV2l0aFNjYW5BdHRycyhMaXN0ICp0YXJnZXRMaXN0LAorCQkJCQkJCQkJCQkJCQkJRXhwckNv bnRleHQgKmVjb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJ CQkJCQkJCQkJCQkJCQlQbGFuU3RhdGUgKnBhcmVudCwKKwkJCQkJCQkJCQkJCQkJCVR1cGxlRGVz YyBpbnB1dERlc2MsCisJCQkJCQkJCQkJCQkJCQlCaXRtYXBzZXQgKnNjYW5fYXR0cnMpOwogZXh0 ZXJuIFByb2plY3Rpb25JbmZvICpFeGVjQnVpbGRVcGRhdGVQcm9qZWN0aW9uKExpc3QgKnRhcmdl dExpc3QsCiAJCQkJCQkJCQkJCQkgYm9vbCBldmFsVGFyZ2V0TGlzdCwKIAkJCQkJCQkJCQkJCSBM aXN0ICp0YXJnZXRDb2xub3MsCkBAIC01ODIsNiArNTkyLDggQEAgdHlwZWRlZiBib29sICgqRXhl Y1NjYW5SZWNoZWNrTXRkKSAoU2NhblN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7 CiBleHRlcm4gVHVwbGVUYWJsZVNsb3QgKkV4ZWNTY2FuKFNjYW5TdGF0ZSAqbm9kZSwgRXhlY1Nj YW5BY2Nlc3NNdGQgYWNjZXNzTXRkLAogCQkJCQkJCQlFeGVjU2NhblJlY2hlY2tNdGQgcmVjaGVj a010ZCk7CiBleHRlcm4gdm9pZCBFeGVjQXNzaWduU2NhblByb2plY3Rpb25JbmZvKFNjYW5TdGF0 ZSAqbm9kZSk7CitleHRlcm4gdm9pZCBFeGVjQXNzaWduU2NhblByb2plY3Rpb25JbmZvV2l0aFNj YW5BdHRycyhTY2FuU3RhdGUgKm5vZGUsCisJCQkJCQkJCQkJCQkJICBCaXRtYXBzZXQgKnNjYW5f YXR0cnMpOwogZXh0ZXJuIHZvaWQgRXhlY0Fzc2lnblNjYW5Qcm9qZWN0aW9uSW5mb1dpdGhWYXJu byhTY2FuU3RhdGUgKm5vZGUsIGludCB2YXJubyk7CiBleHRlcm4gdm9pZCBFeGVjU2NhblJlU2Nh bihTY2FuU3RhdGUgKm5vZGUpOwogCkBAIC02NzgsOCArNjkwLDE1IEBAIGV4dGVybiBjb25zdCBU dXBsZVRhYmxlU2xvdE9wcyAqRXhlY0dldENvbW1vblNsb3RPcHMoUGxhblN0YXRlICoqcGxhbnN0 YXRlcywKIGV4dGVybiBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqRXhlY0dldENvbW1vbkNoaWxk U2xvdE9wcyhQbGFuU3RhdGUgKnBzKTsKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25Qcm9qZWN0aW9u SW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJCSBUdXBsZURlc2MgaW5wdXREZXNj KTsKK2V4dGVybiB2b2lkIEV4ZWNBc3NpZ25Qcm9qZWN0aW9uSW5mb1dpdGhTY2FuQXR0cnMoUGxh blN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkJCQkJCQkgIFR1cGxlRGVzYyBpbnB1dERlc2MsCisJ CQkJCQkJCQkJCQkgIEJpdG1hcHNldCAqc2Nhbl9hdHRycyk7CiBleHRlcm4gdm9pZCBFeGVjQ29u ZGl0aW9uYWxBc3NpZ25Qcm9qZWN0aW9uSW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJ CQkJCQkJCVR1cGxlRGVzYyBpbnB1dERlc2MsIGludCB2YXJubyk7CitleHRlcm4gdm9pZCBFeGVj Q29uZGl0aW9uYWxBc3NpZ25Qcm9qZWN0aW9uSW5mb1dpdGhTY2FuQXR0cnMoUGxhblN0YXRlICpw bGFuc3RhdGUsCisJCQkJCQkJCQkJCQkJCQkgVHVwbGVEZXNjIGlucHV0RGVzYywKKwkJCQkJCQkJ CQkJCQkJCSBpbnQgdmFybm8sCisJCQkJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpzY2FuX2F0dHJz KTsKIGV4dGVybiB2b2lkIEV4ZWNBc3NpZ25TY2FuVHlwZShTY2FuU3RhdGUgKnNjYW5zdGF0ZSwg VHVwbGVEZXNjIHR1cERlc2MpOwogZXh0ZXJuIHZvaWQgRXhlY0NyZWF0ZVNjYW5TbG90RnJvbU91 dGVyUGxhbihFU3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJCQkJU2NhblN0YXRlICpzY2Fuc3RhdGUs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAppbmRleCA3ODU1ODA5OGZhMy4uY2MyYzVhMjU3ZDAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMTY4LDYgKzE2OCwxNiBAQCBzdHJ1Y3QgVHVwbGVU YWJsZVNsb3RPcHMKIAkgKi8KIAl2b2lkCQkoKmdldHNvbWVhdHRycykgKFR1cGxlVGFibGVTbG90 ICpzbG90LCBpbnQgbmF0dHMpOwogCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgdHRzX3ZhbHVlcyBh bmQgdHRzX2lzbnVsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gc2xvdCB3aXRoCisJICogdGhlIHZh bHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZnJvbSB0aGUgdHVwbGUgc3RvcmVk IGluIHRoZQorCSAqIHNsb3QuICBQb3B1bGF0ZSB1cCBhcyBmYXIgYXMgbGFzdF9hdHRudW0gYW5k IHN0b3JlIGVhY2ggYXR0cmlidXRlCisJICogbWVudGlvbmVkIGluIHRoZSBhdHRudW1zIGFycmF5 LiAgVXNlIGF0dG51bV9tYXAgdG8gZGV0ZXJtaW5lIHRoZQorCSAqIHN0YXJ0aW5nIGVsZW1lbnQg aW4gdGhlIGF0dG51bXMgYXJyYXkgZnJvbSB0aGUgc2xvdCdzIHR0c19udmFsaWQuCisJICovCisJ dm9pZAkJKCpzZWxlY3RhdHRycykgKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgbGFzdF9hdHRu dW0sCisJCQkJCQkJCUF0dHJOdW1iZXIgKmF0dG51bXMsIEF0dHJOdW1iZXIgKmF0dG51bV9tYXAp OworCiAJLyoKIAkgKiBSZXR1cm5zIHZhbHVlIG9mIHRoZSBnaXZlbiBzeXN0ZW0gYXR0cmlidXRl IGFzIGEgZGF0dW0gYW5kIHNldHMgaXNudWxsCiAJICogdG8gZmFsc2UsIGlmIGl0J3Mgbm90IE5V TEwuIFRocm93cyBhbiBlcnJvciBpZiB0aGUgc2xvdCB0eXBlIGRvZXMgbm90CkBAIC0zNzQsNiAr Mzg0LDE4IEBAIHNsb3RfZ2V0c29tZWF0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0 bnVtKQogCQlzbG90LT50dHNfb3BzLT5nZXRzb21lYXR0cnMoc2xvdCwgYXR0bnVtKTsKIH0KIAor c3RhdGljIGlubGluZSB2b2lkCitzbG90X3NlbGVjdGF0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90 LCBpbnQgbGFzdF9hdHRudW0sIEF0dHJOdW1iZXIgKmF0dG51bXMsCisJCQkJIEF0dHJOdW1iZXIg KmF0dG51bV9tYXApCit7CisJLyoKKwkgKiBQb3B1bGF0ZSBzbG90IG9ubHkgYXR0cmlidXRlcyBt ZW50aW9uZWQgaW4gdGhlIGF0dG51bXMgYXJyYXksIHVwIHRvCisJICogJ2xhc3RfYXR0bnVtJywg aWYgaXQncyBub3QgYWxyZWFkeQorCSAqLworCWlmIChzbG90LT50dHNfbnZhbGlkIDwgbGFzdF9h dHRudW0pCisJCXNsb3QtPnR0c19vcHMtPnNlbGVjdGF0dHJzKHNsb3QsIGxhc3RfYXR0bnVtLCBh dHRudW1zLCBhdHRudW1fbWFwKTsKK30KKwogLyoKICAqIHNsb3RfZ2V0YWxsYXR0cnMKICAqCQlU aGlzIGZ1bmN0aW9uIGZvcmNlcyBhbGwgdGhlIGVudHJpZXMgb2YgdGhlIHNsb3QncyBEYXR1bS9p c251bGwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOGM5MzIxYWFiOGMuLjA4ZGNmMDJiOGJiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtNTQwLDYgKzU0MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBT Y2FuCiAJUGxhbgkJcGxhbjsKIAkvKiByZWxpZCBpcyBpbmRleCBpbnRvIHRoZSByYW5nZSB0YWJs ZSAqLwogCUluZGV4CQlzY2FucmVsaWQ7CisKKwkvKgorCSAqIEFsbCB2YXJhdHRub3MgdGhhdCBh cmUgcmVxdWlyZWQgZnJvbSB0aGUgc2NhbnJlbGlkLiAgRG9lcyBub3QgaW5jbHVkZQorCSAqIGFu eSBhZGRlZCBkdWUgdG8gdGhlIHBoeXNpY2FsIHRsaXN0IG9wdGltaXphdGlvbiBvciBzeXN0ZW0g YXR0cmlidXRlcworCSAqIG9yIHdob2xlLXJvdyBhdHRyaWJ1dGVzLiAgVXNlciBhdHRyaWJ1dGVz IGFyZSAwIGJhc2VkLCBpLmUgYXR0bnVtPT0xIGlzCisJICogbWVtYmVyIDAuCisJICovCisJQml0 bWFwc2V0ICAqc2Nhbl92YXJhdHRub3M7CiB9IFNjYW47CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K LS0gCjIuNTEuMAoK --000000000000a9ff6e064c533952--