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 1viQKf-005o6V-0v for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 05:00:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1viQKc-004mOl-36 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 05:00:39 +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 1viQKc-004mOU-1N for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 05:00:38 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viQKa-001emT-0D for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 05:00:38 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-43596062728so276886f8f.1 for ; Tue, 20 Jan 2026 21:00:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768971635; cv=none; d=google.com; s=arc-20240605; b=FhBSAkOSoyhDan8nG1wYwxRNoNjs0LBWInT8vgr/lZ/yOs59LR0w5ive2SQbNQfoew zIOLJwDMrXcYzS51g8evUC4v24YyCLZ7VFMUvONu79lBtWZ7usFZVijYKdR4jqRf//k6 Dk0/In8sbBJbvBQaa/ME8eCREs3DzUATAaoErBnbzMvoln1FX76qu0oM42pjKmK16v8/ Zpl8mwpxrh9PBPkAy/TTSU7K+uOpMbPgpm6SSE7ceiUjGEHm+inkMR4m5ufzhoGhantk kD5p+Pg8KqlkZOcgKnBE6cG71dcKw2RAdugveYn49f86TuKjmGpavWhdVJalSvKwae6a 7a1w== 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=du9kfJcVPGGGjxKqiDb6EzbrdV1BAJwpmik9pcDsT9Q=; fh=s/jUEQSRv3AzIVS+Vsir93t61xUYTjdLDvw1jrEeauc=; b=JJsyNJHHISPJoN9OBWVWas/8wideF4LHOodF5yIM5V9avmUJyFCrFCsOlyNTTqjUwk ILFao97ljMx+mJkGaO0jyVxXDooY5OJkRTIZL/SU/9WwZjAC1P84qvtspRHK6RJcPrd7 dozOUlBXNZ+zWNoxOL87p4INXdiYRpzMssnqu9QU63OK/3wfe1B1fO4y10dMBx+DC1QH /8lET4xEm76KBjX9QJVNqPigOkxg0XotG1fmCnZ1DpkmFKHJYRYcGkWO2hxQKp2Eq5CM irzldpFMOheQ2cDAalfzmWVOtoGvZ0SCDSJVN39w1QHjuTsUPkR1bUe0botvSLFpowrq 38Rg==; 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=1768971634; x=1769576434; 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=du9kfJcVPGGGjxKqiDb6EzbrdV1BAJwpmik9pcDsT9Q=; b=ms6e9XcDp3KSlY6ByNAADDHLGND3o34qlGyETncanoCggSHclVryV6W80sbxmLVIWE LAoxj4RrwjeHLvgPyB+XapOlIb2a61uItu+S/PfrLGPQFoArgnoN18AJCVMacwv7fhq5 UXCfwDozufyxY3lxN3eaHr+BQptr60XuZuAkNebPYAs8+pLTK1RmbqLL4LtcM9o/hpdy tkVy/QKhf0P4D5VB7gTM9Nca/DajD+eVLWrGoLXJCNwykX5lxs2j3+MBNsmzPPRFioTE e+FcpmHLseuQ7iMPQc5rQSKmfZCtn7qKsgYV/L9JVravZUoZU6QwbkpFmQqbUn9Mu561 qPyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768971635; x=1769576435; 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=du9kfJcVPGGGjxKqiDb6EzbrdV1BAJwpmik9pcDsT9Q=; b=WMwzZBzlqZizlhOASLwlqWMcfR9HQZrFZJ2nMRbmVuISWysTJZeqwQLV4pmFc+6jJQ h4gSKpy5EW5JiFsnTblvEiP7oJc8iO8cbBhvxD6L0eN4eaUTblobj9EHuY4SNq09v6c0 1MI9rjfHt5yDFtPZ5gyagM7GS9BDmXe21qJHqYbaOHtTkVn0SIaSCDLvj4eeMhwkuc/F XYqOaln4nxQOFG2kgmcpwOwfNKAdJcRtJq6X4jdReHKIQeRquIVWbXncllwRQEvbJVDa RqkWdQUDGX1LhS4WHmqEEUQTK/WrSjsI2E2yUiijd5FgsPOWEaXZz7KJji09GxfETEvH dorA== X-Forwarded-Encrypted: i=1; AJvYcCU/RMtiAz5PscAo+ppouQ97SSDEdUm0xfzLURtmRRUzm0eIjEMTK+FR+kMC9jp9gJr40nF42SHnu72cUa1X@lists.postgresql.org X-Gm-Message-State: AOJu0YyEx+7dGQUFf/IOguYo/nlSLTNHsBTuVW+rHmCuskbpJm09gqv7 6836yJOdOM1tkv4RlBc8Tw1sT4bgOWrBfQvTBfRLtt/5cVRokxXpBn1GFwcW5sAGOt1RTlObcmk HKvAOvZnRMQ6S+Ltl3+jYV/XgdiLZyA1YD2l2 X-Gm-Gg: AZuq6aILpbLtrlrZpa1vACh6XbT95tymW1ACCd+IJLLZQ714nvvATA5tv/8cKPpABxu IAHHCphgZwZcyNdazAydTYHmwBrDOQ9Y/VG9KF/bBPGFxSv1iv11C299U1CaAtjHw3yzTKrj3a+ 0GNvVq0xqKxXeSJFsBibvjS9FwCvvCxqXqRaBfPuuc9nA3ch0t02lh5LFpUa8S2iEPocjxB01E3 cmWNLRupD/TdATxH9z2GhLU/I5Bn3i0OUKa6x0XzLhydnn4X1awxpUMCDNwMf1ZmxvmnxBWzUvW lrj9UWNypBrU29IC/tasbvdd/aWerZyZA5DI8vx8KppeKXz1pQ9ef73meqQAxpkf9Luj0PM= X-Received: by 2002:a05:6000:2c01:b0:435:9538:939b with SMTP id ffacd0b85a97d-435953894f2mr5047884f8f.8.1768971634422; Tue, 20 Jan 2026 21:00:34 -0800 (PST) MIME-Version: 1.0 References: <9A17C43D-7A28-4885-8974-555A40C9523E@gmail.com> In-Reply-To: From: David Rowley Date: Wed, 21 Jan 2026 18:00:21 +1300 X-Gm-Features: AZwV_QgyWGlm3sIKqsnhHbO2lNauK7OSvIsJQ3uXYKVpq3ARZz3oC-WWz4fgv0U Message-ID: Subject: Re: More speedups for tuple deformation To: Andres Freund Cc: Chao Li , PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000e3535d0648decd59" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e3535d0648decd59 Content-Type: text/plain; charset="UTF-8" On Wed, 21 Jan 2026 at 07:38, Andres Freund wrote: > I wonder if it's possible to split the patch - it's big enough to be > nontrivial to review... Perhaps the finalization could be introduced > separately from the patch actually making use of it? Seems reasonable. I've done that in the attached 0001, which contains a dummy macro for TupleDescFinalize() and all the required calls to it. > I wonder if we should somehow change the API of tupledesc creation, to make > old code that doesn't have TupleDescFinalize() fail to compile, instead of > just warn... I don't have any ideas on how to do that. I could maybe imagine some preprocessor magic if we always expected a CreateTupleDesc() and TupleDescFinalize() in the same function, but the TupleDescFinalize() may be required after any modification to the TupleDesc that could invalidate the processing that's done within that function. > Think it'd be worth adding an assertion to BlessTupleDesc that > TupleDescFinalize has been called, I think that'll lead to easier to > understand backtraces in a lot of cases. Particularly if you consider cases > where BlessTupleDesc() will create a tupdesc in shared memory, that could then > trigger an assertion failure in a parallel worker or such. Modified. > Maybe add an assert for cattr->attbyval? Just to avoid a bad debugging > experience if somebody tries to extend this logic to > e.g. non-null-fixed-width-byref columns? I ended up removing the OPTIMIZE_BYVAL code in the attached. Over all the machines I tested on, with the benchmark results I previously shared, it seemed to cause a slowdown rather than a speedup. Perhaps it can be refined and tried again later, but I've removed it for now to reduce complexity. > I also wonder if we could have assert-only crosschecking of the "real" offsets > against the cached ones? I've modified the code to do that. v5 patches attached. Thanks for reviewing. David --000000000000e3535d0648decd59 Content-Type: text/plain; charset="US-ASCII"; name="v5-0001-Add-empty-TupleDescFinalize-function.patch" Content-Disposition: attachment; filename="v5-0001-Add-empty-TupleDescFinalize-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mknjz24r0 RnJvbSBlOTRlZTQzNjhhY2QxNjk3ZmEwYjA4YWUzYjBkZDFjY2M1MWQxOGJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxNTo0MTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMS8y XSBBZGQgZW1wdHkgVHVwbGVEZXNjRmluYWxpemUoKSBmdW5jdGlvbgoKQ3VycmVudGx5IGRvZXMg bm90aGluZywgYnV0IHdpbGwgaW4gYSBmdXR1cmUgY29tbWl0LgotLS0KIGNvbnRyaWIvZGJsaW5r L2RibGluay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsrKysKIGNvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyAgICAgICB8ICAyICsrCiBjb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jICAgICAgICAgICAgICAgfCAgMiArKwog c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMgICAgICAgICAgICAgICAgIHwg MTMgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAg ICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyAg ICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGls cy5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdv cGhhc2UuYyAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ2Z1bmNzLmMgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2Vi YWNrdXBfY29weS5jICAgICAgICAgICAgICAgIHwgIDMgKysrCiBzcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBzcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBz cmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyAgICAgICAgICAgICAgICAgfCAgMSAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgICAgICAgICAgfCAg MSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgICAgICAg fCAgNCArKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjU1JGLmMgICAgICAgICAgICAg ICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9u c2Nhbi5jICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxh dGlvbi5jICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYyAgICAgICAgICAgICAgICAgICB8ICAyICsrCiAuLi4vcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgfCAgMSArCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2FjbC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgICAgICAgICAgICAgICAgIHwg IDUgKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jICAgICAgICAgICAg ICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAg ICAgICAgICB8ICA4ICsrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9mbWdyL2Z1bmNhcGkuYyAg ICAgICAgICAgICAgICAgICAgfCAgNiArKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X2Z1bmNzLmMgICAgICAgICAgICAgICAgICB8ICA1ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dHVwZGVzYy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvcGwvcGxwZ3NxbC9z cmMvcGxfY29tcC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogLi4uL3Rlc3RfY3Vz dG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgICAgIHwgIDEgKwogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYyAgICAgIHwgIDEgKwogMzkgZmls ZXMgY2hhbmdlZCwgMTAwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQg YS9jb250cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCmluZGV4 IDhjYjMxNjY0OTVjLi4xY2U0NTAyZmVjMiAxMDA2NDQKLS0tIGEvY29udHJpYi9kYmxpbmsvZGJs aW5rLmMKKysrIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKQEAgLTg4MSw2ICs4ODEsNyBAQCBt YXRlcmlhbGl6ZVJlc3VsdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEdjb25uICpjb25uLCBQ R3Jlc3VsdCAqcmVzKQogCQl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1cyIsCiAJ CQkJCQkgICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQludHVwbGVzID0gMTsKIAkJbmZpZWxkcyA9IDE7CiAJfQpAQCAtMTA0NCw2ICsxMDQ1LDcgQEAg bWF0ZXJpYWxpemVRdWVyeVJlc3VsdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCXR1cGRl c2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsKIAkJCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1cyIsCiAJCQkJCQkJICAgVEVYVE9JRCwgLTEs IDApOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCQlhdHRpbm1ldGEgPSBUdXBs ZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOwogCiAJCQlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHJzaW5mby0+ZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeSk7 CkBAIC0xNTI5LDYgKzE1MzEsOCBAQCBkYmxpbmtfZ2V0X3BrZXkoUEdfRlVOQ1RJT05fQVJHUykK IAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAiY29sbmFtZSIs CiAJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CisKIAkJLyoKIAkJICogR2VuZXJhdGUgYXR0cmlidXRlIG1ldGFkYXRhIG5lZWRlZCBsYXRl ciB0byBwcm9kdWNlIHR1cGxlcyBmcm9tIHJhdwogCQkgKiBDIHN0cmluZ3MKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwppbmRleCBkY2JhM2ZiNTQ3My4u MmZkZjVhMzQxZjYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl X3BhZ2VzLmMKQEAgLTE3NCw2ICsxNzQsNyBAQCBwZ19idWZmZXJjYWNoZV9wYWdlcyhQR19GVU5D VElPTl9BUkdTKQogCQkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDksICJwaW5uaW5nX2JhY2tlbmRzIiwKIAkJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CiAKKwkJ VHVwbGVEZXNjRmluYWxpemUodHVwbGVkZXNjKTsKIAkJZmN0eC0+dHVwZGVzYyA9IEJsZXNzVHVw bGVEZXNjKHR1cGxlZGVzYyk7CiAKIAkJLyogQWxsb2NhdGUgTkJ1ZmZlcnMgd29ydGggb2YgQnVm ZmVyQ2FjaGVQYWdlc1JlYyByZWNvcmRzLiAqLwpAQCAtNDQyLDYgKzQ0Myw3IEBAIHBnX2J1ZmZl cmNhY2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGlu Y2x1ZGVfbnVtYSkKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDMsICJudW1hX25vZGUiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZjdHgtPnR1cGRlc2MgPSBCbGVzc1R1cGxlRGVzYyh0 dXBsZWRlc2MpOwogCQlmY3R4LT5pbmNsdWRlX251bWEgPSBpbmNsdWRlX251bWE7CiAKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9jb250cmliL3Bn X3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IDliYzNhNzg0YmY3Li5kZmFiMGI2NGNm NSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYworKysg Yi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBAIC00NjksNiArNDY5LDgg QEAgcGdfdmlzaWJpbGl0eV90dXBkZXNjKGJvb2wgaW5jbHVkZV9ibGtubywgYm9vbCBpbmNsdWRl X3BkKQogCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKythLCAicGRfYWxsX3Zpc2libGUi LCBCT09MT0lELCAtMSwgMCk7CiAJQXNzZXJ0KGEgPT0gbWF4YXR0cik7CiAKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKKwogCXJldHVybiBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCmluZGV4IDcwNjM4N2UzNmQ2Li43ZjE1 MGRmOWVlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwpAQCAtODQsNiArODQs NyBAQCBicnR1cGxlX2Rpc2tfdHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKQogCiAJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQlicmRlc2MtPmJkX2Rpc2t0ZGVzYyA9IHR1cGRlc2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vdHVwZGVzYy5jCmluZGV4IDk0YjRmMWY5OTc1Li5lOThkZTgwNmE3NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi90dXBkZXNjLmMKQEAgLTIzOCw2ICsyMzgsOSBAQCBDcmVhdGVUdXBsZURlc2Mo aW50IG5hdHRzLCBGb3JtX3BnX2F0dHJpYnV0ZSAqYXR0cnMpCiAJCW1lbWNweShUdXBsZURlc2NB dHRyKGRlc2MsIGkpLCBhdHRyc1tpXSwgQVRUUklCVVRFX0ZJWEVEX1BBUlRfU0laRSk7CiAJCXBv cHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKGRlc2MsIGkpOwogCX0KKworCVR1cGxlRGVzY0ZpbmFs aXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTI4Miw2ICsyODUsOCBAQCBDcmVh dGVUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyB0dXBkZXNjKQogCWRlc2MtPnRkdHlwZWlkID0gdHVw ZGVzYy0+dGR0eXBlaWQ7CiAJZGVzYy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAor CVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTMyOCw2 ICszMzMsOCBAQCBDcmVhdGVUdXBsZURlc2NUcnVuY2F0ZWRDb3B5KFR1cGxlRGVzYyB0dXBkZXNj LCBpbnQgbmF0dHMpCiAJZGVzYy0+dGR0eXBlaWQgPSB0dXBkZXNjLT50ZHR5cGVpZDsKIAlkZXNj LT50ZHR5cG1vZCA9IHR1cGRlc2MtPnRkdHlwbW9kOwogCisJVHVwbGVEZXNjRmluYWxpemUoZGVz Yyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtNDEzLDYgKzQyMCw4IEBAIENyZWF0ZVR1cGxl RGVzY0NvcHlDb25zdHIoVHVwbGVEZXNjIHR1cGRlc2MpCiAJZGVzYy0+dGR0eXBlaWQgPSB0dXBk ZXNjLT50ZHR5cGVpZDsKIAlkZXNjLT50ZHR5cG1vZCA9IHR1cGRlc2MtPnRkdHlwbW9kOwogCisJ VHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtNDU1LDYg KzQ2NCw4IEBAIFR1cGxlRGVzY0NvcHkoVHVwbGVEZXNjIGRzdCwgVHVwbGVEZXNjIHNyYykKIAkg KiBzb3VyY2UncyByZWZjb3VudCB3b3VsZCBiZSB3cm9uZyBpbiBhbnkgY2FzZS4pCiAJICovCiAJ ZHN0LT50ZHJlZmNvdW50ID0gLTE7CisKKwlUdXBsZURlc2NGaW5hbGl6ZShkc3QpOwogfQogCiAv KgpAQCAtMTA4Miw2ICsxMDkzLDggQEAgQnVpbGREZXNjRnJvbUxpc3RzKGNvbnN0IExpc3QgKm5h bWVzLCBjb25zdCBMaXN0ICp0eXBlcywgY29uc3QgTGlzdCAqdHlwbW9kcywgY28KIAkJVHVwbGVE ZXNjSW5pdEVudHJ5Q29sbGF0aW9uKGRlc2MsIGF0dG51bSwgYXR0Y29sbGF0aW9uKTsKIAl9CiAK KwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCmluZGV4IGQyMDUwOTNlMjFkLi5hNTMzZDc5ZTI2ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMKQEAgLTEyOSw2ICsxMjksNyBAQCBpbml0R2luU3RhdGUoR2luU3Rh dGUgKnN0YXRlLCBSZWxhdGlvbiBpbmRleCkKIAkJCQkJCQkgICBhdHRyLT5hdHRuZGltcyk7CiAJ CQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24oc3RhdGUtPnR1cGRlc2NbaV0sIChBdHRyTnVt YmVyKSAyLAogCQkJCQkJCQkJCWF0dHItPmF0dGNvbGxhdGlvbik7CisJCQlUdXBsZURlc2NGaW5h bGl6ZShzdGF0ZS0+dHVwZGVzY1tpXSk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3RzY2FuLmMKaW5kZXggZjIzYmM0YTY3NTcuLmM2NWY5M2FiZGFlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3RzY2FuLmMKQEAgLTIwMSw2ICsyMDEsNyBAQCBnaXN0cmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJCQkJCQkJIGF0dG5vIC0gMSkt PmF0dHR5cGlkLAogCQkJCQkJCSAgIC0xLCAwKTsKIAkJfQorCQlUdXBsZURlc2NGaW5hbGl6ZShz by0+Z2lzdHN0YXRlLT5mZXRjaFR1cGRlc2MpOwogCQlzY2FuLT54c19oaXR1cGRlc2MgPSBzby0+ Z2lzdHN0YXRlLT5mZXRjaFR1cGRlc2M7CiAKIAkJLyogQWxzbyBjcmVhdGUgYSBtZW1vcnkgY29u dGV4dCB0aGF0IHdpbGwgaG9sZCB0aGUgcmV0dXJuZWQgdHVwbGVzICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggOWY1Mzc5Yjg3YWMuLmIyNDZlODEyN2RiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC0zNDAsNiArMzQwLDcgQEAgZ2V0U3BHaXN0 VHVwbGVEZXNjKFJlbGF0aW9uIGluZGV4LCBTcEdpc3RUeXBlRGVzYyAqa2V5VHlwZSkKIAkJCVR1 cGxlRGVzY0NvbXBhY3RBdHRyKG91dFR1cERlc2MsIGkpLT5hdHRjYWNoZW9mZiA9IC0xOwogCiAJ CXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKG91dFR1cERlc2MsIHNwZ0tleUNvbHVtbik7CisJ CVR1cGxlRGVzY0ZpbmFsaXplKG91dFR1cERlc2MpOwogCX0KIAlyZXR1cm4gb3V0VHVwRGVzYzsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IGU1MGFiYjMzMWNjLi45 ZjcwOGY4NDMzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhh c2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC03NDQs NiArNzQ0LDcgQEAgcGdfcHJlcGFyZWRfeGFjdChQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURl c2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUsICJkYmlkIiwKIAkJCQkJCSAgIE9J RE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlmdW5jY3R4 LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKaW5kZXggMmVmZTQxMDVlZmIuLmI2YmM2MTZjNzRj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwpAQCAtNDAwLDYgKzQwMCw3 IEBAIHBnX3dhbGZpbGVfbmFtZV9vZmZzZXQoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJ bml0RW50cnkocmVzdWx0VHVwbGVEZXNjLCAoQXR0ck51bWJlcikgMiwgImZpbGVfb2Zmc2V0IiwK IAkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0VHVw bGVEZXNjKTsKIAlyZXN1bHRUdXBsZURlc2MgPSBCbGVzc1R1cGxlRGVzYyhyZXN1bHRUdXBsZURl c2MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2Nv cHkuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2NvcHkuYwppbmRleCBmZWNmYWQ5 YWI3Yi4uMjlkYmQwY2IzMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwX2NvcHkuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKQEAg LTM1Nyw2ICszNTcsOCBAQCBTZW5kWGxvZ1JlY1B0clJlc3VsdChYTG9nUmVjUHRyIHB0ciwgVGlt ZUxpbmVJRCB0bGkpCiAJICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAo QXR0ck51bWJlcikgMiwgInRsaSIsIElOVDhPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFs aXplKHR1cGRlc2MpOworCiAJLyogc2VuZCBSb3dEZXNjcmlwdGlvbiAqLwogCXRzdGF0ZSA9IGJl Z2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CiAK QEAgLTM4OCw2ICszOTAsNyBAQCBTZW5kVGFibGVzcGFjZUxpc3QoTGlzdCAqdGFibGVzcGFjZXMp CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInNw Y29pZCIsIE9JRE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVz YywgKEF0dHJOdW1iZXIpIDIsICJzcGNsb2NhdGlvbiIsIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBs ZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAic2l6ZSIsIElO VDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHNlbmQg Um93RGVzY3JpcHRpb24gKi8KIAl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVz dCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDQzZGU0MmNl MzllLi43NWU5N2ZiMzk0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNDgxLDYgKzQ4MSw4IEBAIENv bnN0cnVjdFR1cGxlRGVzY3JpcHRvcihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXBvcHVsYXRl X2NvbXBhY3RfYXR0cmlidXRlKGluZGV4VHVwRGVzYywgaSk7CiAJfQogCisJVHVwbGVEZXNjRmlu YWxpemUoaW5kZXhUdXBEZXNjKTsKKwogCXJldHVybiBpbmRleFR1cERlc2M7CiB9CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA5YTQ3OTFjNTczZS4uZmEzNTNhMGRkMzcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEyMzAsNiArMTIzMCw3IEBA IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAicXVhbCIsCiAJCQkJCQkgICBQR19O T0RFX1RSRUVPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJ ZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCQlmdW5jY3R4 LT51c2VyX2ZjdHggPSB0YWJsZV9pbmZvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IGM3 OGRjZWE5OGMxLi4wNzhhMWNmNTEyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMjI5LDYg KzIyOSwxMiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQs IE9pZCB0b2FzdEluZGV4T2lkLAogCVR1cGxlRGVzY0F0dHIodHVwZGVzYywgMSktPmF0dGNvbXBy ZXNzaW9uID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCVR1cGxlRGVzY0F0dHIodHVwZGVz YywgMiktPmF0dGNvbXByZXNzaW9uID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCisJcG9w dWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUodHVwZGVzYywgMCk7CisJcG9wdWxhdGVfY29tcGFjdF9h dHRyaWJ1dGUodHVwZGVzYywgMSk7CisJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUodHVwZGVz YywgMik7CisKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCS8qCiAJICogVG9hc3Qg dGFibGVzIGZvciByZWd1bGFyIHJlbGF0aW9ucyBnbyBpbiBwZ190b2FzdDsgdGhvc2UgZm9yIHRl bXAKIAkgKiByZWxhdGlvbnMgZ28gaW50byB0aGUgcGVyLWJhY2tlbmQgdGVtcC10b2FzdC10YWJs ZSBuYW1lc3BhY2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4OGMuLjdhYmQ5 ZWQyNzJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0yODEsNiArMjgxLDcgQEAgRXhwbGFp blJlc3VsdERlc2MoRXhwbGFpblN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRl VHVwbGVEZXNjKDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg MSwgIlFVRVJZIFBMQU4iLAogCQkJCQkgICByZXN1bHRfdHlwZSwgLTEsIDApOworCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2Z1bmN0aW9uY21kcy5jCmluZGV4IGE1MTZiMDM3ZGVhLi42YThmMTYyYjY0MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZnVuY3Rpb25jbWRzLmMKQEAgLTI0MjMsNiArMjQyMyw3IEBAIENhbGxTdG10UmVz dWx0RGVzYyhDYWxsU3RtdCAqc3RtdCkKIAkJCQkJCQkgICAtMSwKIAkJCQkJCQkgICAwKTsKIAkJ fQorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAl9CiAKIAlyZXR1cm4gdHVwZGVzYzsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IGUxYjgwOGJiYjYwLi41NTE2Njc2NTBiYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xODA4LDYgKzE4MDgsNyBAQCBwZ19nZXRfc2VxdWVu Y2VfZGF0YShQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAJVHVw bGVEZXNjSW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDMsICJwYWdlX2xz biIsCiAJCQkJCSAgIExTTk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1 cGxlRGVzYyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVE ZXNjKTsKIAogCXNlcXJlbCA9IHRyeV9yZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBmOTc2YzBlNWM3ZS4uYWU3YzlkYjlm YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xMDI5LDYgKzEwMjksOCBAQCBEZWZp bmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkLAog CQl9CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzY3JpcHRvcik7CisKIAkvKgogCSAqIEZv ciByZWxhdGlvbnMgd2l0aCB0YWJsZSBBTSBhbmQgcGFydGl0aW9uZWQgdGFibGVzLCBzZWxlY3Qg YWNjZXNzCiAJICogbWV0aG9kIHRvIHVzZTogYW4gZXhwbGljaXRseSBpbmRpY2F0ZWQgb25lLCBv ciAoaW4gdGhlIGNhc2Ugb2YgYQpAQCAtMTQ0OCw2ICsxNDUwLDggQEAgQnVpbGREZXNjRm9yUmVs YXRpb24oY29uc3QgTGlzdCAqY29sdW1ucykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUo ZGVzYywgYXR0bnVtIC0gMSk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAly ZXR1cm4gZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCmluZGV4IDEyOTBkZjEwYzZmLi44ZTkyMGE3 MjM3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpAQCAtMzM4LDUgKzMzOCw2IEBAIFdhaXRTdG10UmVzdWx0 RGVzYyhXYWl0U3RtdCAqc3RtdCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mo MSk7CiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic3RhdHVz IiwKIAkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCXJldHVybiB0dXBkZXNjOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NSRi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jCmluZGV4IGEwYjExMWRj MGU0Li5iNDgxZTUwYWNmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NS Ri5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwpAQCAtMjcyLDYgKzI3Miw3 IEBAIEV4ZWNNYWtlVGFibGVGdW5jdGlvblJlc3VsdChTZXRFeHByU3RhdGUgKnNldGV4cHIsCiAJ CQkJCQkJCQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkJCSAgIC0xLAogCQkJCQkJCQkJICAgMCk7 CisJCQkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJCQlyc2luZm8uc2V0RGVzYyA9 IHR1cGRlc2M7CiAJCQkJfQogCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK QEAgLTc3Niw2ICs3NzcsNyBAQCBpbml0X3NleHByKE9pZCBmb2lkLCBPaWQgaW5wdXRfY29sbGF0 aW9uLCBFeHByICpub2RlLAogCQkJCQkJCSAgIGZ1bmNyZXR0eXBlLAogCQkJCQkJCSAgIC0xLAog CQkJCQkJCSAgIDApOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCQlzZXhwci0+ ZnVuY1Jlc3VsdERlc2MgPSB0dXBkZXNjOwogCQkJc2V4cHItPmZ1bmNSZXR1cm5zVHVwbGUgPSBm YWxzZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5ZTUzLi5l NmFiNTFlNjQwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtMjE3Myw2ICsyMTcz LDggQEAgRXhlY1R5cGVGcm9tVExJbnRlcm5hbChMaXN0ICp0YXJnZXRMaXN0LCBib29sIHNraXBq dW5rKQogCQljdXJfcmVzbm8rKzsKIAl9CiAKKwlUdXBsZURlc2NGaW5hbGl6ZSh0eXBlSW5mbyk7 CisKIAlyZXR1cm4gdHlwZUluZm87CiB9CiAKQEAgLTIyMDcsNiArMjIwOSw4IEBAIEV4ZWNUeXBl RnJvbUV4cHJMaXN0KExpc3QgKmV4cHJMaXN0KQogCQljdXJfcmVzbm8rKzsKIAl9CiAKKwlUdXBs ZURlc2NGaW5hbGl6ZSh0eXBlSW5mbyk7CisKIAlyZXR1cm4gdHlwZUluZm87CiB9CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4uYwppbmRleCA2M2U2MDVlMWY4MS4uZmViODJk NjQ5NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKQEAgLTQxNCw2 ICs0MTQsNyBAQCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihGdW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlvbih0 dXBkZXNjLAogCQkJCQkJCQkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQkJCQkJCQkJZXhwckNvbGxh dGlvbihmdW5jZXhwcikpOworCQkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJfQog CQkJZWxzZQogCQkJewpAQCAtNDg1LDYgKzQ4Niw3IEBAIEV4ZWNJbml0RnVuY3Rpb25TY2FuKEZ1 bmN0aW9uU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkJCQkJICAg MCk7CiAJCX0KIAorCQlUdXBsZURlc2NGaW5hbGl6ZShzY2FuX3R1cGRlc2MpOwogCQlBc3NlcnQo YXR0bm8gPT0gbmF0dHMpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRl eCAzZWM4ZDhkZTAxMS4uMGFkNzY3ZDgyN2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlv bi5jCkBAIC0xODkxLDYgKzE4OTEsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24odHVwZGVz YywKIAkJCQkJCQkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGZ1 bmNleHByKSk7CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJfQogCQllbHNlIGlm IChmdW5jdHlwY2xhc3MgPT0gVFlQRUZVTkNfUkVDT1JEKQogCQl7CkBAIC0xOTQ4LDYgKzE5NDks NyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsCiAK IAkJCQlpKys7CiAJCQl9CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCQkJLyoK IAkJCSAqIEVuc3VyZSB0aGF0IHRoZSBjb2xkZWZsaXN0IGRlZmluZXMgYSBsZWdhbCBzZXQgb2Yg bmFtZXMgKG5vCkBAIC0yMDE2LDcgKzIwMTgsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5j dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAgMCk7CiAJCQkvKiBubyBuZWVkIHRv IHNldCBjb2xsYXRpb24gKi8KIAkJfQotCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQlBc3NlcnQobmF0dHMgPT0gdG90YWxhdHRzKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3RhcmdldC5jCmluZGV4IGI1YTJmOTE1YjY3Li41ZmQxN2YzZDhkMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV90YXJnZXQuYwpAQCAtMTU3MCw2ICsxNTcwLDggQEAgZXhwYW5kUmVjb3JkVmFyaWFibGUo UGFyc2VTdGF0ZSAqcHN0YXRlLCBWYXIgKnZhciwgaW50IGxldmVsc3VwKQogCQl9CiAJCUFzc2Vy dChsbmFtZSA9PSBOVUxMICYmIGx2YXIgPT0gTlVMTCk7CS8qIGxpc3RzIHNhbWUgbGVuZ3RoPyAq LwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlRGVzYyk7CisKIAkJcmV0dXJuIHR1cGxlRGVz YzsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVj ZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggN2M4NjM5YjMyZTkuLjlmMDRjOWVk MjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVy L2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdh bHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtMTA3Myw2ICsxMDczLDcgQEAgbGlicHFy Y3ZfcHJvY2Vzc1R1cGxlcyhQR3Jlc3VsdCAqcGdyZXMsIFdhbFJjdkV4ZWNSZXN1bHQgKndhbHJl cywKIAlmb3IgKGNvbG4gPSAwOyBjb2xuIDwgblJldFR5cGVzOyBjb2xuKyspCiAJCVR1cGxlRGVz Y0luaXRFbnRyeSh3YWxyZXMtPnR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIGNvbG4gKyAxLAogCQkJ CQkJICAgUFFmbmFtZShwZ3JlcywgY29sbiksIHJldFR5cGVzW2NvbG5dLCAtMSwgMCk7CisJVHVw bGVEZXNjRmluYWxpemUod2FscmVzLT50dXBsZWRlc2MpOwogCWF0dGlubWV0YSA9IFR1cGxlRGVz Y0dldEF0dEluTWV0YWRhdGEod2FscmVzLT50dXBsZWRlc2MpOwogCiAJLyogTm8gcG9pbnQgaW4g ZG9pbmcgbW9yZSBoZXJlIGlmIHRoZXJlIHdlcmUgbm8gdHVwbGVzIHJldHVybmVkLiAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCAxYWIwOTY1NWE3MC4uMjY5YjA4MWJhYzAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCkBAIC00NTIsNiArNDUyLDcgQEAgSWRl bnRpZnlTeXN0ZW0odm9pZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJ bml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAiZGJuYW1lIiwKIAkJCQkJ CQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8q IHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0gYmVnaW5fdHVw X291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTQ5Nyw2 ICs0OTgsNyBAQCBSZWFkUmVwbGljYXRpb25TbG90KFJlYWRSZXBsaWNhdGlvblNsb3RDbWQgKmNt ZCkKIAkvKiBUaW1lTGluZUlEIGlzIHVuc2lnbmVkLCBzbyBpbnQ0IGlzIG5vdCB3aWRlIGVub3Vn aC4gKi8KIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAz LCAicmVzdGFydF90bGkiLAogCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0Zp bmFsaXplKHR1cGRlc2MpOwogCiAJbWVtc2V0KG51bGxzLCB0cnVlLCBSRUFEX1JFUExJQ0FUSU9O X1NMT1RfQ09MUyAqIHNpemVvZihib29sKSk7CiAKQEAgLTU5OSw2ICs2MDEsNyBAQCBTZW5kVGlt ZUxpbmVIaXN0b3J5KFRpbWVMaW5lSGlzdG9yeUNtZCAqY21kKQogCXR1cGRlc2MgPSBDcmVhdGVU ZW1wbGF0ZVR1cGxlRGVzYygyKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2Ms IChBdHRyTnVtYmVyKSAxLCAiZmlsZW5hbWUiLCBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgImNvbnRlbnQiLCBURVhU T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAlUTEhpc3RvcnlG aWxlTmFtZShoaXN0Zm5hbWUsIGNtZC0+dGltZWxpbmUpOwogCVRMSGlzdG9yeUZpbGVQYXRoKHBh dGgsIGNtZC0+dGltZWxpbmUpOwpAQCAtMTAxNiw2ICsxMDE5LDcgQEAgU3RhcnRSZXBsaWNhdGlv bihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOwog CQlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAibmV4 dF90bGlfc3RhcnRwb3MiLAogCQkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CiAKIAkJLyogcHJlcGFyZSBmb3IgcHJvamVjdGlvbiBvZiB0dXBs ZSAqLwogCQl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywg JlRUU09wc1ZpcnR1YWwpOwpAQCAtMTM3MCw2ICsxMzc0LDcgQEAgQ3JlYXRlUmVwbGljYXRpb25T bG90KENyZWF0ZVJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQogCQkJCQkJCSAgVEVYVE9JRCwgLTEs IDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDQs ICJvdXRwdXRfcGx1Z2luIiwKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVz ICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZU VFNPcHNWaXJ0dWFsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYwppbmRleCAzYTY5MDVmOTU0Ni4uOWQzNzA1M2M4 MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvYWNsLmMKQEAgLTE4MTgsNiArMTgxOCw3IEBAIGFjbGV4cGxvZGUoUEdf RlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVy KSA0LCAiaXNfZ3JhbnRhYmxlIiwKIAkJCQkJCSAgIEJPT0xPSUQsIC0xLCAwKTsKIAorCQlUdXBs ZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVw bGVEZXNjKHR1cGRlc2MpOwogCiAJCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdXNlciBjb250ZXh0 ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYwppbmRleCBjMDgzNjA4YjFkNS4uYmZiOTQ5NDAxZDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYwpAQCAtNDU0LDYgKzQ1NCw3IEBAIHBnX3N0YXRfZmls ZShQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICAiY3JlYXRpb24iLCBUSU1FU1RBTVBUWk9JRCwg LTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNiwKIAkJ CQkJICAgImlzZGlyIiwgQk9PTE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJbWVtc2V0KGlzbnVsbCwgZmFsc2Us IHNpemVvZihpc251bGwpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2Nr ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwppbmRleCA5ZGFkZDZk YTY3Mi4uNDQ4MWMzNTRmZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2Nr ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKQEAgLTE0Niw2 ICsxNDYsNyBAQCBwZ19sb2NrX3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJ bml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDE2LCAid2FpdHN0YXJ0IiwKIAkJCQkJCSAg IFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7 CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAogCQkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwppbmRleCAzYjZkYThlMzZhYy4u ZmQ4Yjg2NzY0NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0 YWdncy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jCkBAIC0y MzMsNiArMjMzLDcgQEAgb3JkZXJlZF9zZXRfc3RhcnR1cChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgYm9vbCB1c2VfdHVwbGVzKQogCQkJCQkJCQkgICAtMSwKIAkJCQkJCQkJICAgMCk7CiAKKwkJ CQlUdXBsZURlc2NGaW5hbGl6ZShuZXdkZXNjKTsKIAkJCQlGcmVlVHVwbGVEZXNjKHFzdGF0ZS0+ dHVwZGVzYyk7CiAJCQkJcXN0YXRlLT50dXBkZXNjID0gbmV3ZGVzYzsKIAkJCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3Bnc3RhdGZ1bmNzLmMKaW5kZXggNzNjYTBiYjBiN2YuLjA4YWQyN2U1N2MyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtNzY5LDYgKzc2OSw3IEBAIHBnX3N0YXRf Z2V0X2JhY2tlbmRfc3VieGFjdChQR19GVU5DVElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRy eSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgInN1YnhhY3Rfb3ZlcmZsb3ciLAogCQkJCQkgICBC T09MT0lELCAtMSwgMCk7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1 cGxlRGVzYyh0dXBkZXNjKTsKIAogCWlmICgobG9jYWxfYmVlbnRyeSA9IHBnc3RhdF9nZXRfbG9j YWxfYmVlbnRyeV9ieV9wcm9jX251bWJlcihwcm9jTnVtYmVyKSkgIT0gTlVMTCkKQEAgLTE2NTgs NiArMTY1OSw3IEBAIHBnX3N0YXRfd2FsX2J1aWxkX3R1cGxlKFBnU3RhdF9XYWxDb3VudGVycyB3 YWxfY291bnRlcnMsCiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA2 LCAic3RhdHNfcmVzZXQiLAogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCisJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkv KiBGaWxsIHZhbHVlcyBhbmQgTlVMTHMgKi8KQEAgLTIwODUsNiArMjA4Nyw3IEBAIHBnX3N0YXRf Z2V0X2FyY2hpdmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSA3LCAic3RhdHNfcmVzZXQiLAogCQkJCQkgICBUSU1FU1RBTVBUWk9J RCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURl c2ModHVwZGVzYyk7CiAKIAkvKiBHZXQgc3RhdGlzdGljcyBhYm91dCB0aGUgYXJjaGl2ZXIgcHJv Y2VzcyAqLwpAQCAtMjE2Niw2ICsyMTY5LDcgQEAgcGdfc3RhdF9nZXRfcmVwbGljYXRpb25fc2xv dChQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMTMsICJzdGF0c19yZXNldCIs CiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVw ZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAluYW1lc3RyY3B5KCZzbG90bmFt ZSwgdGV4dF90b19jc3RyaW5nKHNsb3RuYW1lX3RleHQpKTsKQEAgLTIyNTMsNiArMjI1Nyw3IEBA IHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkg ICBJTlQ4T0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVt YmVyKSAxMywgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsK KwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsK IAogCWlmICghc3ViZW50cnkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2 ZWN0b3Jfb3AuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jCmluZGV4IDk0 ZTBmZWQ4MzA5Li43Y2ExOWE5Nzg4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RzdmVjdG9yX29wLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX29wLmMK QEAgLTY1MSw2ICs2NTEsNyBAQCB0c3ZlY3Rvcl91bm5lc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CQkJCSAgIFRFWFRBUlJBWU9JRCwgLTEsIDApOwogCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUo ZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQogCQkJZWxvZyhF UlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCQlUdXBsZURlc2NGaW5h bGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IHR1cGRlc2M7CiAKIAkJZnVu Y2N0eC0+dXNlcl9mY3R4ID0gUEdfR0VUQVJHX1RTVkVDVE9SX0NPUFkoMCk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYwppbmRleCA2YjYzNGM5ZmZmMS4uNzcwZWRiMzRlMDggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNzI5LDYgKzcyOSw4IEBAIFJlbGF0aW9uQnVpbGRU dXBsZURlc2MoUmVsYXRpb24gcmVsYXRpb24pCiAJCXBmcmVlKGNvbnN0cik7CiAJCXJlbGF0aW9u LT5yZF9hdHQtPmNvbnN0ciA9IE5VTEw7CiAJfQorCisJVHVwbGVEZXNjRmluYWxpemUocmVsYXRp b24tPnJkX2F0dCk7CiB9CiAKIC8qCkBAIC0xOTg1LDYgKzE5ODcsNyBAQCBmb3JtcmRlc2MoY29u c3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQgcmVsYXRpb25SZWx0eXBlLAogCiAJLyogaW5pdGlh bGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVsYXRpb25CdWlsZFR1cGxl RGVzYyAqLwogCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRj YWNoZW9mZiA9IDA7CisJVHVwbGVEZXNjRmluYWxpemUocmVsYXRpb24tPnJkX2F0dCk7CiAKIAkv KiBtYXJrIG5vdC1udWxsIHN0YXR1cyAqLwogCWlmIChoYXNfbm90X251bGwpCkBAIC0zNjg4LDYg KzM2OTEsOCBAQCBSZWxhdGlvbkJ1aWxkTG9jYWxSZWxhdGlvbihjb25zdCBjaGFyICpyZWxuYW1l LAogCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQogCQlUdXBsZURlc2NBdHRyKHJlbC0+cmRf YXR0LCBpKS0+YXR0cmVsaWQgPSByZWxpZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRf YXR0KTsKKwogCXJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlID0gcmVsdGFibGVzcGFjZTsKIAog CWlmIChtYXBwZWRfcmVsYXRpb24pCkBAIC00NDQzLDYgKzQ0NDgsNyBAQCBCdWlsZEhhcmRjb2Rl ZERlc2NyaXB0b3IoaW50IG5hdHRzLCBjb25zdCBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgKmF0dHJz KQogCiAJLyogaW5pdGlhbGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVs YXRpb25CdWlsZFR1cGxlRGVzYyAqLwogCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlc3VsdCwgMCkt PmF0dGNhY2hlb2ZmID0gMDsKKwlUdXBsZURlc2NGaW5hbGl6ZShyZXN1bHQpOwogCiAJLyogTm90 ZTogd2UgZG9uJ3QgYm90aGVyIHRvIHNldCB1cCBhIFR1cGxlQ29uc3RyIGVudHJ5ICovCiAKQEAg LTYyNjgsNiArNjI3NCw4IEBAIGxvYWRfcmVsY2FjaGVfaW5pdF9maWxlKGJvb2wgc2hhcmVkKQog CQkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUocmVsLT5yZF9hdHQsIGkpOwogCQl9CiAKKwkJ VHVwbGVEZXNjRmluYWxpemUocmVsLT5yZF9hdHQpOworCiAJCS8qIG5leHQgcmVhZCB0aGUgYWNj ZXNzIG1ldGhvZCBzcGVjaWZpYyBmaWVsZCAqLwogCQlpZiAoZnJlYWQoJmxlbiwgMSwgc2l6ZW9m KGxlbiksIGZwKSAhPSBzaXplb2YobGVuKSkKIAkJCWdvdG8gcmVhZF9mYWlsZWQ7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL2Z1bmNhcGkuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2ZtZ3IvZnVuY2FwaS5jCmluZGV4IDhhOTM0ZWE4ZGNhLi41MTZkMDJjZmI4MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvZm1nci9mdW5jYXBpLmMKQEAgLTM0MCw2ICszNDAsOCBAQCBnZXRfZXhwcl9yZXN1bHRfdHlw ZShOb2RlICpleHByLAogCQkJCQkJCQkJCWV4cHJDb2xsYXRpb24oY29sKSk7CiAJCQlpKys7CiAJ CX0KKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CisKIAkJaWYgKHJlc3VsdFR5cGVJZCkK IAkJCSpyZXN1bHRUeXBlSWQgPSByZXhwci0+cm93X3R5cGVpZDsKIAkJaWYgKHJlc3VsdFR1cGxl RGVzYykKQEAgLTEwNDQsNiArMTA0Niw3IEBAIHJlc29sdmVfcG9seW1vcnBoaWNfdHVwZGVzYyhU dXBsZURlc2MgdHVwZGVzYywgb2lkdmVjdG9yICpkZWNsYXJlZF9hcmdzLAogCQl9CiAJfQogCisJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4NTMs NiArMTg1Niw4IEBAIGJ1aWxkX2Z1bmN0aW9uX3Jlc3VsdF90dXBkZXNjX2QoY2hhciBwcm9raW5k LAogCQkJCQkJICAgMCk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1 cm4gZGVzYzsKIH0KIApAQCAtMTk3MCw2ICsxOTc1LDcgQEAgVHlwZUdldFR1cGxlRGVzYyhPaWQg dHlwZW9pZCwgTGlzdCAqY29sYWxpYXNlcykKIAkJCQkJCSAgIHR5cGVvaWQsCiAJCQkJCQkgICAt MSwKIAkJCQkJCSAgIDApOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAl9CiAJZWxz ZSBpZiAoZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19mdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfZnVuY3MuYwppbmRleCA0ZjNlNDBiZjQ3MC4uYjgyZjgwN2UwNWUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfZnVuY3MuYwpAQCAtNDQ0LDYgKzQ0NCw3IEBAIEdldFBHVmFyaWFibGVSZXN1 bHREZXNjKGNvbnN0IGNoYXIgKm5hbWUpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAo QXR0ck51bWJlcikgMSwgdmFybmFtZSwKIAkJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKIAl9CisJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJcmV0dXJuIHR1cGRlc2M7CiB9CiAKQEAgLTQ2 NSw2ICs0NjYsNyBAQCBTaG93R1VDQ29uZmlnT3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIERlc3RS ZWNlaXZlciAqZGVzdCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJ VHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgdmFybmFt ZSwKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNj KTsKIAogCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0g YmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsK QEAgLTQ5OSw2ICs1MDEsNyBAQCBTaG93QWxsR1VDQ29uZmlnKERlc3RSZWNlaXZlciAqZGVzdCkK IAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAiZGVzY3JpcHRpb24iLAogCQkJCQkJCSAgVEVYVE9JRCwg LTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJLyogcHJlcGFyZSBmb3Ig cHJvamVjdGlvbiBvZiB0dXBsZXMgKi8KIAl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRl c2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwpAQCAtOTM0LDYgKzkzNyw4IEBAIHNo b3dfYWxsX3NldHRpbmdzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMTcsICJwZW5kaW5nX3Jlc3RhcnQiLAogCQkJCQkJICAgQk9P TE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOworCiAJCS8qCiAJ CSAqIEdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0ZXIgdG8gcHJvZHVjZSB0 dXBsZXMgZnJvbSByYXcKIAkJICogQyBzdHJpbmdzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHVwZGVzYy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAppbmRleCBkNDZj ZGJmN2EzYy4uNTk1NDEzZGJiYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBk ZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaApAQCAtMTk1LDYgKzE5NSw3 IEBAIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURl c2MgdHVwZGVzYywgaW50IG5hdHRzKTsKIAogZXh0ZXJuIFR1cGxlRGVzYyBDcmVhdGVUdXBsZURl c2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKTsKIAorI2RlZmluZSBUdXBsZURlc2NGaW5h bGl6ZShkKSAoKHZvaWQpIDApCiAjZGVmaW5lIFR1cGxlRGVzY1NpemUoc3JjKSBcCiAJKG9mZnNl dG9mKHN0cnVjdCBUdXBsZURlc2NEYXRhLCBjb21wYWN0X2F0dHJzKSArIFwKIAkgKHNyYyktPm5h dHRzICogc2l6ZW9mKENvbXBhY3RBdHRyaWJ1dGUpICsgXApkaWZmIC0tZ2l0IGEvc3JjL3BsL3Bs cGdzcWwvc3JjL3BsX2NvbXAuYyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9jb21wLmMKaW5kZXgg N2Q2NDhjOTQxYzAuLmIyMTEyYzI5ZmNmIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfY29tcC5jCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9jb21wLmMKQEAgLTE5MTIsNiAr MTkxMiw4IEBAIGJ1aWxkX3Jvd19mcm9tX3ZhcnMoUExwZ1NRTF92YXJpYWJsZSAqKnZhcnMsIGlu dCBudW12YXJzKQogCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24ocm93LT5yb3d0dXBkZXNj LCBpICsgMSwgdHlwY29sbCk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUocm93LT5yb3d0dXBk ZXNjKTsKKwogCXJldHVybiByb3c7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYwppbmRleCA5 MDhiZDE4YTdjNy4uZmExNzE5YmYzYjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYworKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKQEAgLTIw NSw2ICsyMDUsNyBAQCB0ZXN0X2N1c3RvbV9zdGF0c19maXhlZF9yZXBvcnQoUEdfRlVOQ1RJT05f QVJHUykKIAkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgMiwgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1cGxlRGVz Yyh0dXBkZXNjKTsKIAogCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oc3RhdHMtPm51bWNhbGxz KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0 ZXN0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcHJlZHRlc3QvdGVzdF9wcmVkdGVzdC5jCmlu ZGV4IDY3OWE1ZGU0NTZkLi40OGNhMmE0ZWE3MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcHJlZHRlc3QvdGVzdF9wcmVkdGVzdC5jCkBAIC0yMzAsNiArMjMwLDcgQEAgdGVzdF9wcmVk dGVzdChQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICAic19yX2hvbGRzIiwgQk9PTE9JRCwgLTEs IDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgOCwKIAkJCQkJ ICAgIndfcl9ob2xkcyIsIEJPT0xPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBk ZXNjKTsKIAl0dXBkZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0g PSBCb29sR2V0RGF0dW0oc3Ryb25nX2ltcGxpZWRfYnkpOwotLSAKMi41MS4wCgo= --000000000000e3535d0648decd59 Content-Type: text/plain; charset="US-ASCII"; name="v5-0002-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Disposition: attachment; filename="v5-0002-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mknjz9441 RnJvbSAzMjI5ZjNjOTA1MTlmOWFkNDQxODIxYzJhODE5NDI5YWQzNGY5MDExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMi8y XSBQcmVjYWxjdWxhdGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmCgpUaGlzIGFsbG93 cyBjb2RlIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgdHVwbGUgZGVmb3JtIHJvdXRpbmVzIHdoaWNo CnNocmlua3MgZG93biB0aGUgY29kZSBhIGxpdHRsZSwgd2hpY2ggY2FuIG1ha2UgaXQgcnVuIG1v cmUgcXVpY2tseS4KVGhpcyBhbHNvIG1ha2VzIGEgZGVkaWNhdGVkIGRlZm9ybWVyIGxvb3AgdG8g ZGVmb3JtIHRoZSBwb3J0aW9uIG9mIHRoZQp0dXBsZSB3aGljaCBoYXMgYSBrbm93biBvZmZzZXQs IHdoaWNoIG1ha2VzIGRlZm9ybWluZyBtdWNoIGZhc3RlciB3aGVuCmEgbGVhZGluZyBzZXQgb2Yg dGhlIHRhYmxlJ3MgY29sdW1ucyBhcmUgbm9uLU5VTEwgdmFsdWVzIGFuZCBmaXhlZC13aWR0aAp0 eXBlcy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jICB8IDMzNCAr KysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVw bGUuYyB8IDM2NyArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyAgICB8ICAzNyArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyAgIHwgICAzIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAg ICAgIHwgMjgwICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1q aXRfZGVmb3JtLmMgIHwgICA2IC0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg ICAgIHwgIDEyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaCAgICAgIHwgIDE5 ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaXR1cC5oICAgICAgICAgICAgICB8ICAyMCArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaCAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy90dXBtYWNzLmggICAgICAgICAgIHwgIDY1ICsrKysrCiBzcmMvaW5jbHVkZS9leGVj dXRvci90dXB0YWJsZS5oICAgICAgICB8ICAgOSArLQogMTIgZmlsZXMgY2hhbmdlZCwgNTIyIGlu c2VydGlvbnMoKyksIDY0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFw dHVwbGUuYwppbmRleCAxMWJlYzIwZTgyZS4uNDJjY2UzZGNkZmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vaGVhcHR1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi9oZWFwdHVwbGUuYwpAQCAtNDk3LDIwICs0OTcsOCBAQCBoZWFwX2F0dGlzbnVsbChI ZWFwVHVwbGUgdHVwLCBpbnQgYXR0bnVtLCBUdXBsZURlc2MgdHVwbGVEZXNjKQogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJCW5vY2FjaGVnZXRhdHRyCiAgKgotICoJCVRoaXMgb25seSBnZXRzIGNh bGxlZCBmcm9tIGZhc3RnZXRhdHRyKCksIGluIGNhc2VzIHdoZXJlIHdlCi0gKgkJY2FuJ3QgdXNl IGEgY2FjaGVvZmZzZXQgYW5kIHRoZSB2YWx1ZSBpcyBub3QgbnVsbC4KLSAqCi0gKgkJVGhpcyBj YWNoZXMgYXR0cmlidXRlIG9mZnNldHMgaW4gdGhlIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgotICoK LSAqCQlBbiBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BlZWQgdGhpbmdzIHVwIHdvdWxkIGJlIHRvIGNh Y2hlIG9mZnNldHMKLSAqCQl3aXRoIHRoZSB0dXBsZSwgYnV0IHRoYXQgc2VlbXMgbW9yZSBkaWZm aWN1bHQgdW5sZXNzIHlvdSB0YWtlCi0gKgkJdGhlIHN0b3JhZ2UgaGl0IG9mIGFjdHVhbGx5IHB1 dHRpbmcgdGhvc2Ugb2Zmc2V0cyBpbnRvIHRoZQotICoJCXR1cGxlIHlvdSBzZW5kIHRvIGRpc2su ICBZdWNrLgotICoKLSAqCQlUaGlzIHNjaGVtZSB3aWxsIGJlIHNsaWdodGx5IHNsb3dlciB0aGFu IHRoYXQsIGJ1dCBzaG91bGQKLSAqCQlwZXJmb3JtIHdlbGwgZm9yIHF1ZXJpZXMgd2hpY2ggaGl0 IGxhcmdlICMncyBvZiB0dXBsZXMuICBBZnRlcgotICoJCXlvdSBjYWNoZSB0aGUgb2Zmc2V0cyBv bmNlLCBleGFtaW5pbmcgYWxsIHRoZSBvdGhlciB0dXBsZXMgdXNpbmcKLSAqCQl0aGUgc2FtZSBh dHRyaWJ1dGUgZGVzY3JpcHRvciB3aWxsIGdvIG11Y2ggcXVpY2tlci4gLWNpbSA1LzQvOTEKKyAq CQlUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZnJvbSBmYXN0Z2V0YXR0cigpLCBpbiBjYXNlcyB3aGVy ZSB0aGUKKyAqCQlhdHRjYWNoZW9mZiBpcyBub3Qgc2V0LgogICoKICAqCQlOT1RFOiBpZiB5b3Ug bmVlZCB0byBjaGFuZ2UgdGhpcyBjb2RlLCBzZWUgYWxzbyBoZWFwX2RlZm9ybV90dXBsZS4KICAq CQlBbHNvIHNlZSBub2NhY2hlX2luZGV4X2dldGF0dHIsIHdoaWNoIGlzIHRoZSBzYW1lIGNvZGUg Zm9yIGluZGV4CkBAIC01MjIsMTk0ICs1MTAsMTA0IEBAIG5vY2FjaGVnZXRhdHRyKEhlYXBUdXBs ZSB0dXAsCiAJCQkgICBpbnQgYXR0bnVtLAogCQkJICAgVHVwbGVEZXNjIHR1cGxlRGVzYykKIHsK KwlDb21wYWN0QXR0cmlidXRlICpjYXR0cjsKIAlIZWFwVHVwbGVIZWFkZXIgdGQgPSB0dXAtPnRf ZGF0YTsKIAljaGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIGRhdGEgcGFydCBvZiB0dXBsZSAqLwog CWJpdHM4CSAgICpicCA9IHRkLT50X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBs ZSAqLwotCWJvb2wJCXNsb3cgPSBmYWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAq LwogCWludAkJCW9mZjsJCQkvKiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAqLworCWludAkJ CXN0YXJ0QXR0cjsKKwlpbnQJCQlmaXJzdG51bGxhdHRyOworCWJvb2wJCWhhc251bGxzID0gSGVh cFR1cGxlSGFzTnVsbHModHVwKTsKIAotCS8qIC0tLS0tLS0tLS0tLS0tLS0KLQkgKgkgVGhyZWUg Y2FzZXM6Ci0JICoKLQkgKgkgMTogTm8gbnVsbHMgYW5kIG5vIHZhcmlhYmxlLXdpZHRoIGF0dHJp YnV0ZXMuCi0JICoJIDI6IEhhcyBhIG51bGwgb3IgYSB2YXItd2lkdGggQUZURVIgYXR0LgotCSAq CSAzOiBIYXMgbnVsbHMgb3IgdmFyLXdpZHRocyBCRUZPUkUgYXR0LgotCSAqIC0tLS0tLS0tLS0t LS0tLS0KLQkgKi8KKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5h bGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+PSAw KTsKIAorCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIE5VTExzIGJlZm9yZSB0aGUgcmVxdWlyZWQg YXR0bnVtLCB0aGVuIHdlIGNhbiBzdGFydCBhdAorCSAqIHRoZSBoaWdoZXN0IGF0dHJpYnV0ZSB3 aXRoIGEga25vd24gb2Zmc2V0LCBvciB0aGUgZmlyc3QgYXR0cmlidXRlIGlmCisJICogbm9uZSBo YXZlIGEgY2FjaGVkIG9mZnNldC4gIElmIHRoZSB0dXBsZSBoYXMgbm8gdmFyaWFibGUgd2lkdGgg dHlwZXMsCisJICogdGhlbiB3ZSBjYW4gdXNlIGEgc2xpZ2h0bHkgY2hlYXBlciBtZXRob2Qgb2Yg b2Zmc2V0IGNhbGN1bGF0aW9uLCBhcyB3ZQorCSAqIGp1c3QgbmVlZCB0byBhZGQgdGhlIGF0dGxl biB0byB0aGUgYWxpZ25lZCBvZmZzZXQgd2hlbiBza2lwcGluZyBvdmVyCisJICogY29sdW1ucy4g IFdoZW4gdGhlIHR1cGxlIGNvbnRhaW5zIHZhcmlhYmxlLXdpZHRoIHR5cGVzLCB3ZSBtdXN0IHVz ZQorCSAqIGF0dF9hZGRsZW5ndGhfcG9pbnRlcigpLCB3aGljaCBkb2VzIGEgYml0IG1vcmUgYnJh bmNoaW5nIGFuZCBpcworCSAqIHNsaWdodGx5IGxlc3MgZWZmaWNpZW50LgorCSAqLwogCWF0dG51 bS0tOwogCi0JaWYgKCFIZWFwVHVwbGVOb051bGxzKHR1cCkpCi0JewotCQkvKgotCQkgKiB0aGVy ZSdzIGEgbnVsbCBzb21ld2hlcmUgaW4gdGhlIHR1cGxlCi0JCSAqCi0JCSAqIGNoZWNrIHRvIHNl ZSBpZiBhbnkgcHJlY2VkaW5nIGJpdHMgYXJlIG51bGwuLi4KLQkJICovCi0JCWludAkJCWJ5dGUg PSBhdHRudW0gPj4gMzsKLQkJaW50CQkJZmluYWxiaXQgPSBhdHRudW0gJiAweDA3OwotCi0JCS8q IGNoZWNrIGZvciBudWxscyAiYmVmb3JlIiBmaW5hbCBiaXQgb2YgbGFzdCBieXRlICovCi0JCWlm ICgofmJwW2J5dGVdKSAmICgoMSA8PCBmaW5hbGJpdCkgLSAxKSkKLQkJCXNsb3cgPSB0cnVlOwot CQllbHNlCi0JCXsKLQkJCS8qIGNoZWNrIGZvciBudWxscyBpbiBhbnkgImVhcmxpZXIiIGJ5dGVz ICovCi0JCQlpbnQJCQlpOworCWlmIChoYXNudWxscykKKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0 X251bGxfYXR0cihicCwgYXR0bnVtKTsKKwllbHNlCisJCWZpcnN0bnVsbGF0dHIgPSBhdHRudW07 CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBieXRlOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGJwW2ldICE9 IDB4RkYpCi0JCQkJewotCQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ fQotCQl9CisJaWYgKHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyID4gMCkKKwl7CisJ CXN0YXJ0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciAtIDEsIGZp cnN0bnVsbGF0dHIpOworCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIHN0 YXJ0QXR0ciktPmF0dGNhY2hlb2ZmOworCX0KKwllbHNlCisJeworCQlzdGFydEF0dHIgPSAwOwor CQlvZmYgPSAwOwogCX0KIAogCXRwID0gKGNoYXIgKikgdGQgKyB0ZC0+dF9ob2ZmOwogCi0JaWYg KCFzbG93KQorCWlmIChoYXNudWxscykKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKKwkJ Zm9yIChpbnQgaSA9IHN0YXJ0QXR0cjsgaSA8IGF0dG51bTsgaSsrKQorCQl7CisJCQlDb21wYWN0 QXR0cmlidXRlICphdHQ7CiAKLQkJLyoKLQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGFyZSBu byBudWxscyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSB0YXJnZXQKLQkJICogYXR0cmlidXRlLiAg SWYgd2UgaGF2ZSBhIGNhY2hlZCBvZmZzZXQsIHdlIGNhbiB1c2UgaXQuCi0JCSAqLwotCQlhdHQg PSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7Ci0JCWlmIChhdHQtPmF0 dGNhY2hlb2ZmID49IDApCi0JCQlyZXR1cm4gZmV0Y2hhdHQoYXR0LCB0cCArIGF0dC0+YXR0Y2Fj aGVvZmYpOworCQkJaWYgKGF0dF9pc251bGwoaSwgYnApKQorCQkJCWNvbnRpbnVlOwogCi0JCS8q Ci0JCSAqIE90aGVyd2lzZSwgY2hlY2sgZm9yIG5vbi1maXhlZC1sZW5ndGggYXR0cnMgdXAgdG8g YW5kIGluY2x1ZGluZwotCQkgKiB0YXJnZXQuICBJZiB0aGVyZSBhcmVuJ3QgYW55LCBpdCdzIHNh ZmUgdG8gY2hlYXBseSBpbml0aWFsaXplIHRoZQotCQkgKiBjYWNoZWQgb2Zmc2V0cyBmb3IgdGhl c2UgYXR0cnMuCi0JCSAqLwotCQlpZiAoSGVhcFR1cGxlSGFzVmFyV2lkdGgodHVwKSkKLQkJewot CQkJaW50CQkJajsKKwkJCWF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7 CiAKLQkJCWZvciAoaiA9IDA7IGogPD0gYXR0bnVtOyBqKyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJ c2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KKwkJCW9mZiA9IGF0dF9wb2lu dGVyX2FsaWduYnkob2ZmLAorCQkJCQkJCQkJICBhdHQtPmF0dGFsaWduYnksCisJCQkJCQkJCQkg IGF0dC0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVu Z3RoX3BvaW50ZXIob2ZmLCBhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOwogCQl9CisJCWNhdHRyID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQlvZmYgPSBhdHRfcG9p bnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJ ICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkgIHRwICsgb2ZmKTsKIAl9Ci0KLQlpZiAoIXNsb3cp CisJZWxzZSBpZiAoIUhlYXBUdXBsZUhhc1ZhcldpZHRoKHR1cCkpCiAJewotCQlpbnQJCQluYXR0 cyA9IHR1cGxlRGVzYy0+bmF0dHM7Ci0JCWludAkJCWogPSAxOwotCi0JCS8qCi0JCSAqIElmIHdl IGdldCBoZXJlLCB3ZSBoYXZlIGEgdHVwbGUgd2l0aCBubyBudWxscyBvciB2YXItd2lkdGhzIHVw IHRvCi0JCSAqIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiB1 c2UgdGhlIGNhY2hlZCBvZmZzZXQKLQkJICogLi4uIG9ubHkgd2UgZG9uJ3QgaGF2ZSBpdCB5ZXQs IG9yIHdlJ2Qgbm90IGhhdmUgZ290IGhlcmUuICBTaW5jZQotCQkgKiBpdCdzIGNoZWFwIHRvIGNv bXB1dGUgb2Zmc2V0cyBmb3IgZml4ZWQtd2lkdGggY29sdW1ucywgd2UgdGFrZSB0aGUKLQkJICog b3Bwb3J0dW5pdHkgdG8gaW5pdGlhbGl6ZSB0aGUgY2FjaGVkIG9mZnNldHMgZm9yICphbGwqIHRo ZSBsZWFkaW5nCi0JCSAqIGZpeGVkLXdpZHRoIGNvbHVtbnMsIGluIGhvcGUgb2YgYXZvaWRpbmcg ZnV0dXJlIHZpc2l0cyB0byB0aGlzCi0JCSAqIHJvdXRpbmUuCi0JCSAqLwotCQlUdXBsZURlc2ND b21wYWN0QXR0cih0dXBsZURlc2MsIDApLT5hdHRjYWNoZW9mZiA9IDA7Ci0KLQkJLyogd2UgbWln aHQgaGF2ZSBzZXQgc29tZSBvZmZzZXRzIGluIHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwot CQl3aGlsZSAoaiA8IG5hdHRzICYmIFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaikt PmF0dGNhY2hlb2ZmID4gMCkKLQkJCWorKzsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0 cih0dXBsZURlc2MsIGogLSAxKS0+YXR0Y2FjaGVvZmYgKwotCQkJVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBqIC0gMSktPmF0dGxlbjsKLQotCQlmb3IgKDsgaiA8IG5hdHRzOyBqKysp CisJCWZvciAoaW50IGkgPSBzdGFydEF0dHI7IGkgPCBhdHRudW07IGkrKykKIAkJewotCQkJQ29t cGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKTsK LQotCQkJaWYgKGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJYnJlYWs7CisJCQlDb21wYWN0QXR0cmli dXRlICphdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCiAJCQlvZmYg PSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJYXR0LT5h dHRjYWNoZW9mZiA9IG9mZjsKLQogCQkJb2ZmICs9IGF0dC0+YXR0bGVuOwogCQl9Ci0KLQkJQXNz ZXJ0KGogPiBhdHRudW0pOwotCi0JCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz YywgYXR0bnVtKS0+YXR0Y2FjaGVvZmY7CisJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIo dHVwbGVEZXNjLCBhdHRudW0pOworCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0 dHItPmF0dGFsaWduYnkpOwogCX0KIAllbHNlCiAJewotCQlib29sCQl1c2VjYWNoZSA9IHRydWU7 Ci0JCWludAkJCWk7Ci0KLQkJLyoKLQkJICogTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRvIHdh bGsgdGhlIHR1cGxlIENBUkVGVUxMWS4gIEJ1dCB3ZSBzdGlsbAotCQkgKiBtaWdodCBiZSBhYmxl IHRvIGNhY2hlIHNvbWUgb2Zmc2V0cyBmb3IgbmV4dCB0aW1lLgotCQkgKgotCQkgKiBOb3RlIC0g VGhpcyBsb29wIGlzIGEgbGl0dGxlIHRyaWNreS4gIEZvciBlYWNoIG5vbi1udWxsIGF0dHJpYnV0 ZSwKLQkJICogd2UgaGF2ZSB0byBmaXJzdCBhY2NvdW50IGZvciBhbGlnbm1lbnQgcGFkZGluZyBi ZWZvcmUgdGhlIGF0dHIsCi0JCSAqIHRoZW4gYWR2YW5jZSBvdmVyIHRoZSBhdHRyIGJhc2VkIG9u IGl0cyBsZW5ndGguICBOdWxscyBoYXZlIG5vCi0JCSAqIHN0b3JhZ2UgYW5kIG5vIGFsaWdubWVu dCBwYWRkaW5nIGVpdGhlci4gIFdlIGNhbiB1c2Uvc2V0Ci0JCSAqIGF0dGNhY2hlb2ZmIHVudGls IHdlIHJlYWNoIGVpdGhlciBhIG51bGwgb3IgYSB2YXItd2lkdGggYXR0cmlidXRlLgotCQkgKi8K LQkJb2ZmID0gMDsKLQkJZm9yIChpID0gMDs7IGkrKykJCS8qIGxvb3AgZXhpdCBpcyBhdCAiYnJl YWsiICovCisJCWZvciAoaW50IGkgPSBzdGFydEF0dHI7IGkgPCBhdHRudW07IGkrKykKIAkJewog CQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNj LCBpKTsKIAotCQkJaWYgKEhlYXBUdXBsZUhhc051bGxzKHR1cCkgJiYgYXR0X2lzbnVsbChpLCBi cCkpCi0JCQl7Ci0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKLQkJCQljb250aW51ZTsJCS8qIHRoaXMg Y2Fubm90IGJlIHRoZSB0YXJnZXQgYXR0ICovCi0JCQl9Ci0KLQkJCS8qIElmIHdlIGtub3cgdGhl IG5leHQgb2Zmc2V0LCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLwotCQkJaWYgKHVzZWNhY2hlICYm IGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCQlvZmYgPSBhdHQtPmF0dGNhY2hlb2ZmOwotCQkJ ZWxzZSBpZiAoYXR0LT5hdHRsZW4gPT0gLTEpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBjYW4g b25seSBjYWNoZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJ CSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291 bGQgYmUKLQkJCQkgKiBubyBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4gdGhlIG9mZnNldCB3 aWxsIGJlIHZhbGlkIGZvcgotCQkJCSAqIGVpdGhlciBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2 YWx1ZS4KLQkJCQkgKi8KLQkJCQlpZiAodXNlY2FjaGUgJiYKLQkJCQkJb2ZmID09IGF0dF9ub21p bmFsX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpKQotCQkJCQlhdHQtPmF0dGNhY2hlb2Zm ID0gb2ZmOwotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnko b2ZmLCBhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCQkgIHRwICsgb2ZmKTsKLQkJCQkJ dXNlY2FjaGUgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogbm90 IHZhcmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCQlvZmYg PSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJCWlmICh1 c2VjYWNoZSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCX0KLQotCQkJaWYgKGkg PT0gYXR0bnVtKQotCQkJCWJyZWFrOwotCisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9m ZiwKKwkJCQkJCQkJCSAgYXR0LT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBhdHQtPmF0dGxlbiwK KwkJCQkJCQkJCSAgdHAgKyBvZmYpOwogCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9m ZiwgYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKIAotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0 bGVuIDw9IDApCi0JCQkJdXNlY2FjaGUgPSBmYWxzZTsKIAkJfQorCQljYXR0ciA9IFR1cGxlRGVz Y0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxp Z25ieShvZmYsCisJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCSAgY2F0dHIt PmF0dGxlbiwKKwkJCQkJCQkJICB0cCArIG9mZik7CiAJfQogCi0JcmV0dXJuIGZldGNoYXR0KFR1 cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKSwgdHAgKyBvZmYpOworCXJldHVy biBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBA IC0xMzQ3LDYgKzEyNDUsNyBAQCBoZWFwX2RlZm9ybV90dXBsZShIZWFwVHVwbGUgdHVwbGUsIFR1 cGxlRGVzYyB0dXBsZURlc2MsCiAJCQkJICBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwpCiB7 CiAJSGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CisJQ29tcGFjdEF0dHJpYnV0 ZSAqY2F0dHI7CiAJYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVwbGVIYXNOdWxscyh0dXBsZSk7CiAJ aW50CQkJdGRlc2NfbmF0dHMgPSB0dXBsZURlc2MtPm5hdHRzOwogCWludAkJCW5hdHRzOwkJCS8q IG51bWJlciBvZiBhdHRzIHRvIGV4dHJhY3QgKi8KQEAgLTEzNTQsNzAgKzEyNTMsOTEgQEAgaGVh cF9kZWZvcm1fdHVwbGUoSGVhcFR1cGxlIHR1cGxlLCBUdXBsZURlc2MgdHVwbGVEZXNjLAogCWNo YXIJICAgKnRwOwkJCQkvKiBwdHIgdG8gdHVwbGUgZGF0YSAqLwogCXVpbnQzMgkJb2ZmOwkJCS8q IG9mZnNldCBpbiB0dXBsZSBkYXRhICovCiAJYml0czgJICAgKmJwID0gdHVwLT50X2JpdHM7CS8q IHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3cgPSBmYWxzZTsJLyog Y2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVvZmY/ICovCisJaW50CQkJY2FjaGVvZmZhdHRyczsKKwlp bnQJCQlmaXJzdG51bGxhdHRyOwogCiAJbmF0dHMgPSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0 dXApOwogCisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUo KT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPj0gMCk7CisK IAkvKgogCSAqIEluIGluaGVyaXRhbmNlIHNpdHVhdGlvbnMsIGl0IGlzIHBvc3NpYmxlIHRoYXQg dGhlIGdpdmVuIHR1cGxlIGFjdHVhbGx5CiAJICogaGFzIG1vcmUgZmllbGRzIHRoYW4gdGhlIGNh bGxlciBpcyBleHBlY3RpbmcuICBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YKIAkgKiB0aGUgY2Fs bGVyJ3MgYXJyYXlzLgogCSAqLwogCW5hdHRzID0gTWluKG5hdHRzLCB0ZGVzY19uYXR0cyk7CisJ Y2FjaGVvZmZhdHRycyA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciwgbmF0 dHMpOworCisJaWYgKGhhc251bGxzKQorCXsKKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0X251bGxf YXR0cihicCwgbmF0dHMpOworCQljYWNoZW9mZmF0dHJzID0gTWluKGNhY2hlb2ZmYXR0cnMsIGZp cnN0bnVsbGF0dHIpOworCX0KKwllbHNlCisJCWZpcnN0bnVsbGF0dHIgPSBuYXR0czsKIAogCXRw ID0gKGNoYXIgKikgdHVwICsgdHVwLT50X2hvZmY7CisJYXR0bnVtID0gMDsKIAotCW9mZiA9IDA7 CisJaWYgKGNhY2hlb2ZmYXR0cnMgPiAwKQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJCS8qIEluIEFzc2VydCBlbmFibGVkIGJ1aWxkcywgdmVyaWZ5IGF0dGNhY2hlb2ZmIGlzIGNv cnJlY3QgKi8KKwkJb2ZmID0gMDsKKyNlbmRpZgorCQlkbworCQl7CisJCQljYXR0ciA9IFR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxp Z25ieSk7CisJCQlBc3NlcnQob2ZmID09IGNhdHRyLT5hdHRjYWNoZW9mZik7CisJCQlvZmYgKz0g Y2F0dHItPmF0dGxlbjsKKyNlbmRpZgogCi0JZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBuYXR0 czsgYXR0bnVtKyspCisJCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dCh0cCArIGNhdHRyLT5h dHRjYWNoZW9mZiwKKwkJCQkJCQkJCSAgIGNhdHRyLT5hdHRieXZhbCwKKwkJCQkJCQkJCSAgIGNh dHRyLT5hdHRsZW4pOworCQkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJfSB3aGlsZSAoKyth dHRudW0gPCBjYWNoZW9mZmF0dHJzKTsKKwkJb2ZmID0gY2F0dHItPmF0dGNhY2hlb2ZmICsgY2F0 dHItPmF0dGxlbjsKKwl9CisJZWxzZQorCQlvZmYgPSAwOworCisJZm9yICg7IGF0dG51bSA8IGZp cnN0bnVsbGF0dHI7IGF0dG51bSsrKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJY2F0dHIgPSBUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CiAKLQkJaWYgKGhhc251bGxzICYm IGF0dF9pc251bGwoYXR0bnVtLCBicCkpCi0JCXsKLQkJCXZhbHVlc1thdHRudW1dID0gKERhdHVt KSAwOwotCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOwotCQkJc2xvdyA9IHRydWU7CQkvKiBjYW4n dCB1c2UgYXR0Y2FjaGVvZmYgYW55bW9yZSAqLwotCQkJY29udGludWU7Ci0JCX0KKwkJb2ZmID0g YXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5LCBjYXR0ci0+YXR0bGVu LAorCQkJCQkJCQkgIHRwICsgb2ZmKTsKIAogCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQl2 YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiAKLQkJaWYgKCFzbG93 ICYmIHRoaXNhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlvZmYgPSB0aGlzYXR0LT5hdHRjYWNo ZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0JCQkvKgotCQkJ ICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBp ZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQg dGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUg b2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25lZCBvciB1bmFs aWduZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAmJgotCQkJCW9mZiA9PSBhdHRfbm9t aW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhpc2F0dC0+YXR0 Y2FjaGVvZmYgPSBvZmY7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxp Z25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCSAgdHAgKyBvZmYp OwotCQkJCXNsb3cgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHZh cmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCW9mZiA9IGF0 dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJb2ZmID0gYXR0 X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOworCX0KKwor CWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCisJeworCQlBc3NlcnQoaGFzbnVsbHMp OwogCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7CisJCWlm IChhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQl7CisJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1 bSkgMDsKKwkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJ dmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dCh0aGlzYXR0LCB0cCArIG9mZik7CisJCWNhdHRyID0g VHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQlvZmYgPSBhdHRfcG9p bnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksIGNhdHRyLT5hdHRsZW4sCisJCQkJ CQkJCSAgdHAgKyBvZmYpOwogCi0JCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIHRo aXNhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQl2 YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiAKLQkJaWYgKHRoaXNh dHQtPmF0dGxlbiA8PSAwKQotCQkJc2xvdyA9IHRydWU7CQkvKiBjYW4ndCB1c2UgYXR0Y2FjaGVv ZmYgYW55bW9yZSAqLworCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+ YXR0bGVuLCB0cCArIG9mZik7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vaW5kZXh0dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRl eHR1cGxlLmMKaW5kZXggZDdjOGM1M2ZkOGQuLjA4NGUwOTM3YTYwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL2luZGV4dHVwbGUuYwpAQCAtMjIzLDE4ICsyMjMsNiBAQCBpbmRleF9mb3JtX3R1 cGxlX2NvbnRleHQoVHVwbGVEZXNjIHR1cGxlRGVzY3JpcHRvciwKICAqCiAgKgkJVGhpcyBnZXRz IGNhbGxlZCBmcm9tIGluZGV4X2dldGF0dHIoKSBtYWNybywgYW5kIG9ubHkgaW4gY2FzZXMKICAq CQl3aGVyZSB3ZSBjYW4ndCB1c2UgY2FjaGVvZmZzZXQgYW5kIHRoZSB2YWx1ZSBpcyBub3QgbnVs bC4KLSAqCi0gKgkJVGhpcyBjYWNoZXMgYXR0cmlidXRlIG9mZnNldHMgaW4gdGhlIGF0dHJpYnV0 ZSBkZXNjcmlwdG9yLgotICoKLSAqCQlBbiBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BlZWQgdGhpbmdz IHVwIHdvdWxkIGJlIHRvIGNhY2hlIG9mZnNldHMKLSAqCQl3aXRoIHRoZSB0dXBsZSwgYnV0IHRo YXQgc2VlbXMgbW9yZSBkaWZmaWN1bHQgdW5sZXNzIHlvdSB0YWtlCi0gKgkJdGhlIHN0b3JhZ2Ug aGl0IG9mIGFjdHVhbGx5IHB1dHRpbmcgdGhvc2Ugb2Zmc2V0cyBpbnRvIHRoZQotICoJCXR1cGxl IHlvdSBzZW5kIHRvIGRpc2suICBZdWNrLgotICoKLSAqCQlUaGlzIHNjaGVtZSB3aWxsIGJlIHNs aWdodGx5IHNsb3dlciB0aGFuIHRoYXQsIGJ1dCBzaG91bGQKLSAqCQlwZXJmb3JtIHdlbGwgZm9y IHF1ZXJpZXMgd2hpY2ggaGl0IGxhcmdlICMncyBvZiB0dXBsZXMuICBBZnRlcgotICoJCXlvdSBj YWNoZSB0aGUgb2Zmc2V0cyBvbmNlLCBleGFtaW5pbmcgYWxsIHRoZSBvdGhlciB0dXBsZXMgdXNp bmcKLSAqCQl0aGUgc2FtZSBhdHRyaWJ1dGUgZGVzY3JpcHRvciB3aWxsIGdvIG11Y2ggcXVpY2tl ci4gLWNpbSA1LzQvOTEKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogRGF0dW0KQEAgLTI0Miwy MDUgKzIzMCwxMjkgQEAgbm9jYWNoZV9pbmRleF9nZXRhdHRyKEluZGV4VHVwbGUgdHVwLAogCQkJ CQkgIGludCBhdHRudW0sCiAJCQkJCSAgVHVwbGVEZXNjIHR1cGxlRGVzYykKIHsKKwlDb21wYWN0 QXR0cmlidXRlICpjYXR0cjsKIAljaGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIGRhdGEgcGFydCBv ZiB0dXBsZSAqLwogCWJpdHM4CSAgICpicCA9IE5VTEw7CQkvKiBwdHIgdG8gbnVsbCBiaXRtYXAg aW4gdHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGRvIHdlIGhhdmUgdG8gd2FsayBh dHRycz8gKi8KIAlpbnQJCQlkYXRhX29mZjsJCS8qIHR1cGxlIGRhdGEgb2Zmc2V0ICovCiAJaW50 CQkJb2ZmOwkJCS8qIGN1cnJlbnQgb2Zmc2V0IHdpdGhpbiBkYXRhICovCisJaW50CQkJc3RhcnRB dHRyOworCWludAkJCWZpcnN0bnVsbGF0dHI7CisJYm9vbAkJaGFzbnVsbHMgPSBJbmRleFR1cGxl SGFzTnVsbHModHVwKTsKKwlpbnQJCQlpOwogCi0JLyogLS0tLS0tLS0tLS0tLS0tLQotCSAqCSBU aHJlZSBjYXNlczoKLQkgKgotCSAqCSAxOiBObyBudWxscyBhbmQgbm8gdmFyaWFibGUtd2lkdGgg YXR0cmlidXRlcy4KLQkgKgkgMjogSGFzIGEgbnVsbCBvciBhIHZhci13aWR0aCBBRlRFUiBhdHQu Ci0JICoJIDM6IEhhcyBudWxscyBvciB2YXItd2lkdGhzIEJFRk9SRSBhdHQuCi0JICogLS0tLS0t LS0tLS0tLS0tLQotCSAqLwotCi0JZGF0YV9vZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldCh0 dXAtPnRfaW5mbyk7CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmlu YWxpemUoKT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPj0g MCk7CiAKIAlhdHRudW0tLTsKIAotCWlmIChJbmRleFR1cGxlSGFzTnVsbHModHVwKSkKLQl7Ci0J CS8qCi0JCSAqIHRoZXJlJ3MgYSBudWxsIHNvbWV3aGVyZSBpbiB0aGUgdHVwbGUKLQkJICoKLQkJ ICogY2hlY2sgdG8gc2VlIGlmIGRlc2lyZWQgYXR0IGlzIG51bGwKLQkJICovCisJLyoKKwkgKiBJ ZiB0aGVyZSBhcmUgbm8gTlVMTHMgYmVmb3JlIHRoZSByZXF1aXJlZCBhdHRudW0sIHRoZW4gd2Ug Y2FuIHN0YXJ0IGF0CisJICogdGhlIGhpZ2hlc3QgYXR0cmlidXRlIHdpdGggYSBrbm93biBvZmZz ZXQsIG9yIHRoZSBmaXJzdCBhdHRyaWJ1dGUgaWYKKwkgKiBub25lIGhhdmUgYSBjYWNoZWQgb2Zm c2V0LiAgSWYgdGhlIHR1cGxlIGhhcyBubyB2YXJpYWJsZSB3aWR0aCB0eXBlcywKKwkgKiB3aGlj aCBpcyBjb21tb24gd2l0aCBpbmRleGVzLCB0aGVuIHdlIGNhbiB1c2UgYSBzbGlnaHRseSBjaGVh cGVyIG1ldGhvZAorCSAqIG9mIG9mZnNldCBjYWxjdWxhdGlvbiwgYXMgd2UganVzdCBuZWVkIHRv IGFkZCB0aGUgYXR0bGVuIHRvIHRoZSBhbGlnbmVkCisJICogb2Zmc2V0IHdoZW4gc2tpcHBpbmcg b3ZlciBjb2x1bW5zLiAgV2hlbiB0aGUgdHVwbGUgY29udGFpbnMKKwkgKiB2YXJpYWJsZS13aWR0 aCB0eXBlcywgd2UgbXVzdCB1c2UgYXR0X2FkZGxlbmd0aF9wb2ludGVyKCksIHdoaWNoIGRvZXMg YQorCSAqIGJpdCBtb3JlIGJyYW5jaGluZyBhbmQgaXMgc2xpZ2h0bHkgbGVzcyBlZmZpY2llbnQu CisJICovCisJZGF0YV9vZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldCh0dXAtPnRfaW5mbyk7 CisJdHAgPSAoY2hhciAqKSB0dXAgKyBkYXRhX29mZjsKIAotCQkvKiBYWFggImtub3dzIiB0X2Jp dHMgYXJlIGp1c3QgYWZ0ZXIgZml4ZWQgdHVwbGUgaGVhZGVyISAqLworCS8qCisJICogRmluZCB0 aGUgZmlyc3QgTlVMTCBjb2x1bW4sIG9yIGlmIHRoZXJlJ3Mgbm9uZSBzZXQgdGhlIGZpcnN0IE5V TEwgdG8KKwkgKiBhdHRudW0gc28gdGhhdCB3ZSBjYW4gZm9yZWdvIE5VTEwgY2hlY2tpbmcgYWxs IHRoZSB3YXkgdG8gYXR0bnVtLgorCSAqLworCWlmIChoYXNudWxscykKKwl7CiAJCWJwID0gKGJp dHM4ICopICgoY2hhciAqKSB0dXAgKyBzaXplb2YoSW5kZXhUdXBsZURhdGEpKTsKLQotCQkvKgot CQkgKiBOb3cgY2hlY2sgdG8gc2VlIGlmIGFueSBwcmVjZWRpbmcgYml0cyBhcmUgbnVsbC4uLgot CQkgKi8KLQkJewotCQkJaW50CQkJYnl0ZSA9IGF0dG51bSA+PiAzOwotCQkJaW50CQkJZmluYWxi aXQgPSBhdHRudW0gJiAweDA3OwotCi0JCQkvKiBjaGVjayBmb3IgbnVsbHMgImJlZm9yZSIgZmlu YWwgYml0IG9mIGxhc3QgYnl0ZSAqLwotCQkJaWYgKCh+YnBbYnl0ZV0pICYgKCgxIDw8IGZpbmFs Yml0KSAtIDEpKQotCQkJCXNsb3cgPSB0cnVlOwotCQkJZWxzZQotCQkJewotCQkJCS8qIGNoZWNr IGZvciBudWxscyBpbiBhbnkgImVhcmxpZXIiIGJ5dGVzICovCi0JCQkJaW50CQkJaTsKLQotCQkJ CWZvciAoaSA9IDA7IGkgPCBieXRlOyBpKyspCi0JCQkJewotCQkJCQlpZiAoYnBbaV0gIT0gMHhG RikKLQkJCQkJewotCQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJ CX0KLQkJCX0KLQkJfQorCQlmaXJzdG51bGxhdHRyID0gZmlyc3RfbnVsbF9hdHRyKGJwLCBhdHRu dW0pOwogCX0KKwllbHNlCisJCWZpcnN0bnVsbGF0dHIgPSBhdHRudW07CiAKLQl0cCA9IChjaGFy ICopIHR1cCArIGRhdGFfb2ZmOwotCi0JaWYgKCFzbG93KQorCWlmICh0dXBsZURlc2MtPmZpcnN0 Tm9uQ2FjaGVkT2ZmQXR0ciA+IDApCiAJewotCQlDb21wYWN0QXR0cmlidXRlICphdHQ7Ci0KLQkJ LyoKLQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGFyZSBubyBudWxscyB1cCB0byBhbmQgaW5j bHVkaW5nIHRoZSB0YXJnZXQKLQkJICogYXR0cmlidXRlLiAgSWYgd2UgaGF2ZSBhIGNhY2hlZCBv ZmZzZXQsIHdlIGNhbiB1c2UgaXQuCi0JCSAqLwotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0 cih0dXBsZURlc2MsIGF0dG51bSk7Ci0JCWlmIChhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQly ZXR1cm4gZmV0Y2hhdHQoYXR0LCB0cCArIGF0dC0+YXR0Y2FjaGVvZmYpOwotCi0JCS8qCi0JCSAq IE90aGVyd2lzZSwgY2hlY2sgZm9yIG5vbi1maXhlZC1sZW5ndGggYXR0cnMgdXAgdG8gYW5kIGlu Y2x1ZGluZwotCQkgKiB0YXJnZXQuICBJZiB0aGVyZSBhcmVuJ3QgYW55LCBpdCdzIHNhZmUgdG8g Y2hlYXBseSBpbml0aWFsaXplIHRoZQotCQkgKiBjYWNoZWQgb2Zmc2V0cyBmb3IgdGhlc2UgYXR0 cnMuCi0JCSAqLwotCQlpZiAoSW5kZXhUdXBsZUhhc1ZhcndpZHRocyh0dXApKQotCQl7Ci0JCQlp bnQJCQlqOwotCi0JCQlmb3IgKGogPSAwOyBqIDw9IGF0dG51bTsgaisrKQotCQkJewotCQkJCWlm IChUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopLT5hdHRsZW4gPD0gMCkKLQkJCQl7 Ci0JCQkJCXNsb3cgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJc3Rh cnRBdHRyID0gTWluKHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyIC0gMSwgZmlyc3Ru dWxsYXR0cik7CisJCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgc3RhcnRB dHRyKS0+YXR0Y2FjaGVvZmY7CiAJfQotCi0JaWYgKCFzbG93KQorCWVsc2UKIAl7Ci0JCWludAkJ CW5hdHRzID0gdHVwbGVEZXNjLT5uYXR0czsKLQkJaW50CQkJaiA9IDE7Ci0KLQkJLyoKLQkJICog SWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYSB0dXBsZSB3aXRoIG5vIG51bGxzIG9yIHZhci13aWR0 aHMgdXAgdG8KLQkJICogYW5kIGluY2x1ZGluZyB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSwgc28gd2Ug Y2FuIHVzZSB0aGUgY2FjaGVkIG9mZnNldAotCQkgKiAuLi4gb25seSB3ZSBkb24ndCBoYXZlIGl0 IHlldCwgb3Igd2UnZCBub3QgaGF2ZSBnb3QgaGVyZS4gIFNpbmNlCi0JCSAqIGl0J3MgY2hlYXAg dG8gY29tcHV0ZSBvZmZzZXRzIGZvciBmaXhlZC13aWR0aCBjb2x1bW5zLCB3ZSB0YWtlIHRoZQot CQkgKiBvcHBvcnR1bml0eSB0byBpbml0aWFsaXplIHRoZSBjYWNoZWQgb2Zmc2V0cyBmb3IgKmFs bCogdGhlIGxlYWRpbmcKLQkJICogZml4ZWQtd2lkdGggY29sdW1ucywgaW4gaG9wZSBvZiBhdm9p ZGluZyBmdXR1cmUgdmlzaXRzIHRvIHRoaXMKLQkJICogcm91dGluZS4KLQkJICovCi0JCVR1cGxl RGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgMCktPmF0dGNhY2hlb2ZmID0gMDsKKwkJc3RhcnRB dHRyID0gMDsKKwkJb2ZmID0gMDsKKwl9CiAKLQkJLyogd2UgbWlnaHQgaGF2ZSBzZXQgc29tZSBv ZmZzZXRzIGluIHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3aGlsZSAoaiA8IG5hdHRz ICYmIFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGNhY2hlb2ZmID4gMCkK LQkJCWorKzsKKwkvKiBIYW5kbGUgdHVwbGVzIHdpdGggdmFyLXdpZHRoIGF0dHJpYnV0ZXMgKi8K KwlpZiAoSW5kZXhUdXBsZUhhc1ZhcndpZHRocyh0dXApKQorCXsKKwkJLyogQ2FsY3VsYXRlIHRo ZSBvZmZzZXQgdXAgdW50aWwgdGhlIGZpcnN0IE5VTEwgKi8KKwkJZm9yIChpID0gc3RhcnRBdHRy OyBpIDwgZmlyc3RudWxsYXR0cjsgaSsrKQorCQl7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBh Y3RBdHRyKHR1cGxlRGVzYywgaSk7CiAKLQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVw bGVEZXNjLCBqIC0gMSktPmF0dGNhY2hlb2ZmICsKLQkJCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgaiAtIDEpLT5hdHRsZW47CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9m ZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRs ZW4sCisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRl cihvZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKKwkJfQogCi0JCWZvciAoOyBqIDwgbmF0 dHM7IGorKykKKwkJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgZm9yIGFueSByZW1haW5pbmcgY29s dW1ucy4gKi8KKwkJZm9yICg7IGkgPCBhdHRudW07IGkrKykKIAkJewotCQkJQ29tcGFjdEF0dHJp YnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKTsKKwkJCUFzc2Vy dChoYXNudWxscyk7CiAKLQkJCWlmIChhdHQtPmF0dGxlbiA8PSAwKQotCQkJCWJyZWFrOworCQkJ aWYgKGF0dF9pc251bGwoaSwgYnApKQorCQkJCWNvbnRpbnVlOwogCi0JCQlvZmYgPSBhdHRfbm9t aW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCWNhdHRyID0gVHVwbGVEZXNj Q29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKIAotCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsK LQotCQkJb2ZmICs9IGF0dC0+YXR0bGVuOworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50 ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CiAJCX0KLQotCQlBc3NlcnQoaiA+IGF0 dG51bSk7Ci0KLQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0p LT5hdHRjYWNoZW9mZjsKIAl9CiAJZWxzZQogCXsKLQkJYm9vbAkJdXNlY2FjaGUgPSB0cnVlOwot CQlpbnQJCQlpOworCQkvKiBIYW5kbGUgdHVwbGVzIHdpdGggb25seSBmaXhlZC13aWR0aCBhdHRy aWJ1dGVzICovCiAKLQkJLyoKLQkJICogTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRvIHdhbGsg dGhlIHR1cGxlIENBUkVGVUxMWS4gIEJ1dCB3ZSBzdGlsbAotCQkgKiBtaWdodCBiZSBhYmxlIHRv IGNhY2hlIHNvbWUgb2Zmc2V0cyBmb3IgbmV4dCB0aW1lLgotCQkgKgotCQkgKiBOb3RlIC0gVGhp cyBsb29wIGlzIGEgbGl0dGxlIHRyaWNreS4gIEZvciBlYWNoIG5vbi1udWxsIGF0dHJpYnV0ZSwK LQkJICogd2UgaGF2ZSB0byBmaXJzdCBhY2NvdW50IGZvciBhbGlnbm1lbnQgcGFkZGluZyBiZWZv cmUgdGhlIGF0dHIsCi0JCSAqIHRoZW4gYWR2YW5jZSBvdmVyIHRoZSBhdHRyIGJhc2VkIG9uIGl0 cyBsZW5ndGguICBOdWxscyBoYXZlIG5vCi0JCSAqIHN0b3JhZ2UgYW5kIG5vIGFsaWdubWVudCBw YWRkaW5nIGVpdGhlci4gIFdlIGNhbiB1c2Uvc2V0Ci0JCSAqIGF0dGNhY2hlb2ZmIHVudGlsIHdl IHJlYWNoIGVpdGhlciBhIG51bGwgb3IgYSB2YXItd2lkdGggYXR0cmlidXRlLgotCQkgKi8KLQkJ b2ZmID0gMDsKLQkJZm9yIChpID0gMDs7IGkrKykJCS8qIGxvb3AgZXhpdCBpcyBhdCAiYnJlYWsi ICovCisJCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHVwIHVudGlsIHRoZSBmaXJzdCBOVUxMICov CisJCWZvciAoaSA9IHN0YXJ0QXR0cjsgaSA8IGZpcnN0bnVsbGF0dHI7IGkrKykKIAkJewotCQkJ Q29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBp KTsKLQotCQkJaWYgKEluZGV4VHVwbGVIYXNOdWxscyh0dXApICYmIGF0dF9pc251bGwoaSwgYnAp KQotCQkJewotCQkJCXVzZWNhY2hlID0gZmFsc2U7Ci0JCQkJY29udGludWU7CQkvKiB0aGlzIGNh bm5vdCBiZSB0aGUgdGFyZ2V0IGF0dCAqLwotCQkJfQotCi0JCQkvKiBJZiB3ZSBrbm93IHRoZSBu ZXh0IG9mZnNldCwgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KLQkJCWlmICh1c2VjYWNoZSAmJiBh dHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQkJb2ZmID0gYXR0LT5hdHRjYWNoZW9mZjsKLQkJCWVs c2UgaWYgKGF0dC0+YXR0bGVuID09IC0xKQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgY2FuIG9u bHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCQkg KiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0YWJseSBhbGlnbmVkLCBzbyB0aGF0IHRoZXJlIHdvdWxk IGJlCi0JCQkJICogbm8gcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2ls bCBiZSB2YWxpZCBmb3IKLQkJCQkgKiBlaXRoZXIgYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFs dWUuCi0JCQkJICovCi0JCQkJaWYgKHVzZWNhY2hlICYmCi0JCQkJCW9mZiA9PSBhdHRfbm9taW5h bF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9mZiA9 IG9mZjsKLQkJCQllbHNlCi0JCQkJewotCQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9m ZiwgYXR0LT5hdHRhbGlnbmJ5LCAtMSwKLQkJCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJCXVz ZWNhY2hlID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIG5vdCB2 YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQkJb2ZmID0g YXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSk7CisJCQljYXR0ciA9IFR1 cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CisKKwkJCUFzc2VydChjYXR0ci0+YXR0 bGVuID4gMCk7CisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAg Y2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJCQkg IHRwICsgb2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+YXR0bGVuOworCQl9CiAKLQkJCQlpZiAodXNl Y2FjaGUpCi0JCQkJCWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQl9CisJCS8qIENhbGN1bGF0 ZSB0aGUgb2Zmc2V0IGZvciBhbnkgcmVtYWluaW5nIGNvbHVtbnMuICovCisJCWZvciAoOyBpIDwg YXR0bnVtOyBpKyspCisJCXsKKwkJCUFzc2VydChoYXNudWxscyk7CiAKLQkJCWlmIChpID09IGF0 dG51bSkKLQkJCQlicmVhazsKKwkJCWlmIChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51 ZTsKIAotCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgYXR0LT5hdHRsZW4sIHRw ICsgb2ZmKTsKKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsK IAotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJdXNlY2FjaGUgPSBm YWxzZTsKKwkJCUFzc2VydChjYXR0ci0+YXR0bGVuID4gMCk7CisJCQlvZmYgPSBhdHRfcG9pbnRl cl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCQkg IGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+ YXR0bGVuOwogCQl9CiAJfQogCi0JcmV0dXJuIGZldGNoYXR0KFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgYXR0bnVtKSwgdHAgKyBvZmYpOworCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFj dEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2Zm LCBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkgIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsK KwlyZXR1cm4gZmV0Y2hhdHQoY2F0dHIsIHRwICsgb2ZmKTsKIH0KIAogLyoKQEAgLTQ4MCw2MyAr MzkyLDg2IEBAIGluZGV4X2RlZm9ybV90dXBsZV9pbnRlcm5hbChUdXBsZURlc2MgdHVwbGVEZXNj cmlwdG9yLAogCQkJCQkJCURhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJCQljaGFy ICp0cCwgYml0czggKmJwLCBpbnQgaGFzbnVsbHMpCiB7CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0 dHI7CiAJaW50CQkJbmF0dHMgPSB0dXBsZURlc2NyaXB0b3ItPm5hdHRzOyAvKiBudW1iZXIgb2Yg YXR0cyB0byBleHRyYWN0ICovCi0JaW50CQkJYXR0bnVtOworCWludAkJCWF0dG51bSA9IDA7CiAJ aW50CQkJb2ZmID0gMDsJCS8qIG9mZnNldCBpbiB0dXBsZSBkYXRhICovCi0JYm9vbAkJc2xvdyA9 IGZhbHNlOwkvKiBjYW4gd2UgdXNlL3NldCBhdHRjYWNoZW9mZj8gKi8KKwlpbnQJCQljYWNoZW9m ZmF0dHJzOworCWludAkJCWZpcnN0bnVsbGF0dHI7CiAKIAkvKiBBc3NlcnQgdG8gcHJvdGVjdCBj YWxsZXJzIHdobyBhbGxvY2F0ZSBmaXhlZC1zaXplIGFycmF5cyAqLwogCUFzc2VydChuYXR0cyA8 PSBJTkRFWF9NQVhfS0VZUyk7CiAKLQlmb3IgKGF0dG51bSA9IDA7IGF0dG51bSA8IG5hdHRzOyBh dHRudW0rKykKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6 ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2NyaXB0b3ItPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+ PSAwKTsKKworCWNhY2hlb2ZmYXR0cnMgPSBNaW4odHVwbGVEZXNjcmlwdG9yLT5maXJzdE5vbkNh Y2hlZE9mZkF0dHIsIG5hdHRzKTsKKworCWlmIChoYXNudWxscykKKwl7CisJCWZpcnN0bnVsbGF0 dHIgPSBmaXJzdF9udWxsX2F0dHIoYnAsIG5hdHRzKTsKKwkJY2FjaGVvZmZhdHRycyA9IE1pbihj YWNoZW9mZmF0dHJzLCBmaXJzdG51bGxhdHRyKTsKKwl9CisJZWxzZQorCQlmaXJzdG51bGxhdHRy ID0gbmF0dHM7CisKKwlpZiAoY2FjaGVvZmZhdHRycyA+IDApCiAJewotCQlDb21wYWN0QXR0cmli dXRlICp0aGlzYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjcmlwdG9yLCBhdHRu dW0pOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJLyogSW4gQXNzZXJ0IGVuYWJsZWQg YnVpbGRzLCB2ZXJpZnkgYXR0Y2FjaGVvZmYgaXMgY29ycmVjdCAqLworCQlvZmYgPSAwOworI2Vu ZGlmCiAKLQkJaWYgKGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCWRvCiAJ CXsKLQkJCXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAwOwotCQkJaXNudWxsW2F0dG51bV0gPSB0 cnVlOwotCQkJc2xvdyA9IHRydWU7CQkvKiBjYW4ndCB1c2UgYXR0Y2FjaGVvZmYgYW55bW9yZSAq LwotCQkJY29udGludWU7Ci0JCX0KKwkJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVw bGVEZXNjcmlwdG9yLCBhdHRudW0pOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJ b2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwkJCUFz c2VydChvZmYgPT0gY2F0dHItPmF0dGNhY2hlb2ZmKTsKKwkJCW9mZiArPSBjYXR0ci0+YXR0bGVu OworI2VuZGlmCisKKwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0KHRwICsgY2F0dHItPmF0 dGNhY2hlb2ZmLCBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkgICBjYXR0ci0+YXR0bGVuKTsK KwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCX0gd2hpbGUgKCsrYXR0bnVtIDwgY2FjaGVv ZmZhdHRycyk7CisKKwkJb2ZmID0gY2F0dHItPmF0dGNhY2hlb2ZmICsgY2F0dHItPmF0dGxlbjsK Kwl9CisKKwlmb3IgKDsgYXR0bnVtIDwgZmlyc3RudWxsYXR0cjsgYXR0bnVtKyspCisJeworCQlj YXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKwor CQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksIGNhdHRy LT5hdHRsZW4sCisJCQkJCQkJCSAgdHAgKyBvZmYpOwogCiAJCWlzbnVsbFthdHRudW1dID0gZmFs c2U7CisJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQoY2F0dHIsIHRwICsgb2ZmKTsKIAotCQlp ZiAoIXNsb3cgJiYgdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCW9mZiA9IHRoaXNhdHQt PmF0dGNhY2hlb2ZmOwotCQllbHNlIGlmICh0aGlzYXR0LT5hdHRsZW4gPT0gLTEpCi0JCXsKLQkJ CS8qCi0JCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0 cmlidXRlIGlmIHRoZQotCQkJICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwg c28gdGhhdCB0aGVyZSB3b3VsZCBiZSBubwotCQkJICogcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0 aGVuIHRoZSBvZmZzZXQgd2lsbCBiZSB2YWxpZCBmb3IgZWl0aGVyCi0JCQkgKiBhbiBhbGlnbmVk IG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCSAqLwotCQkJaWYgKCFzbG93ICYmCi0JCQkJb2ZmID09 IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQl0aGlz YXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCWVsc2UKLQkJCXsKLQkJCQlvZmYgPSBhdHRfcG9p bnRlcl9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJICB0 cCArIG9mZik7Ci0JCQkJc2xvdyA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkv KiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJ b2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnkpOworCQlv ZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7 CisJfQorCisJZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKKwl7CisJCUFzc2VydCho YXNudWxscyk7CiAKLQkJCWlmICghc2xvdykKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9m ZjsKKwkJaWYgKGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCXsKKwkJCXZhbHVlc1thdHRudW1d ID0gKERhdHVtKSAwOworCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOworCQkJY29udGludWU7CiAJ CX0KIAotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQsIHRwICsgb2ZmKTsKKwkJ Y2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2NyaXB0b3IsIGF0dG51bSk7CisJ CW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwgY2F0dHIt PmF0dGxlbiwKKwkJCQkJCQkJICB0cCArIG9mZik7CiAKLQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9w b2ludGVyKG9mZiwgdGhpc2F0dC0+YXR0bGVuLCB0cCArIG9mZik7CisJCWlzbnVsbFthdHRudW1d ID0gZmFsc2U7CisJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQoY2F0dHIsIHRwICsgb2ZmKTsK IAotCQlpZiAodGhpc2F0dC0+YXR0bGVuIDw9IDApCi0JCQlzbG93ID0gdHJ1ZTsJCS8qIGNhbid0 IHVzZSBhdHRjYWNoZW9mZiBhbnltb3JlICovCisJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRl cihvZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi90dXBkZXNjLmMKaW5kZXggZTk4ZGU4MDZhNzcuLjI1MzY0ZGI2MzBhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL3R1cGRlc2MuYwpAQCAtMjE0LDYgKzIxNCw5IEBAIENyZWF0ZVRlbXBsYXRl VHVwbGVEZXNjKGludCBuYXR0cykKIAlkZXNjLT50ZHR5cG1vZCA9IC0xOwogCWRlc2MtPnRkcmVm Y291bnQgPSAtMTsJCS8qIGFzc3VtZSBub3QgcmVmZXJlbmNlLWNvdW50ZWQgKi8KIAorCS8qIFRo aXMgd2lsbCBiZSBzZXQgdG8gdGhlIGNvcnJlY3QgdmFsdWUgYnkgVHVwbGVEZXNjRmluYWxpemUo KSAqLworCWRlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA9IC0xOworCiAJcmV0dXJuIGRlc2M7 CiB9CiAKQEAgLTQ3NCw2ICs0NzcsOSBAQCBUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyBkc3QsIFR1 cGxlRGVzYyBzcmMpCiAgKgkJZGVzY3JpcHRvciB0byBhbm90aGVyLgogICoKICAqICEhISBDb25z dHJhaW50cyBhbmQgZGVmYXVsdHMgYXJlIG5vdCBjb3BpZWQgISEhCisgKgorICogVGhlIGNhbGxl ciBtdXN0IHRha2UgY2FyZSBvZiBjYWxsaW5nIFR1cGxlRGVzY0ZpbmFsaXplKCkgb24gb25jZSBh bGwKKyAqIFR1cGxlRGVzYyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLgogICovCiB2b2lkCiBUdXBs ZURlc2NDb3B5RW50cnkoVHVwbGVEZXNjIGRzdCwgQXR0ck51bWJlciBkc3RBdHRubywKQEAgLTUw Niw2ICs1MTIsMzcgQEAgVHVwbGVEZXNjQ29weUVudHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1i ZXIgZHN0QXR0bm8sCiAJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUoZHN0LCBkc3RBdHRubyAt IDEpOwogfQogCisvKgorICogVHVwbGVEZXNjRmluYWxpemUKKyAqCQlGaW5hbGl6ZSB0aGUgZ2l2 ZW4gVHVwbGVEZXNjLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUKKyAqCQlhdHRyaWJ1 dGVzIGFycmF5cyBoYXZlIGJlZW4gcG9wdWxhdGVkIG9yIGFkanVzdGVkIGJ5IGFueSBjb2RlLgor ICoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKCkg YW5kIGJlZm9yZQorICogQmxlc3NUdXBsZURlc2MoKS4KKyAqLwordm9pZAorVHVwbGVEZXNjRmlu YWxpemUoVHVwbGVEZXNjIHR1cGRlc2MpCit7CisJaW50CQkJZmlyc3ROb25DYWNoZWRPZmZBdHRy ID0gMDsKKwlpbnQJCQlvZmZwID0gMDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+ bmF0dHM7IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyID0gVHVwbGVEZXNjQ29t cGFjdEF0dHIodHVwZGVzYywgaSk7CisKKwkJaWYgKGNhdHRyLT5hdHRsZW4gPD0gMCkKKwkJCWJy ZWFrOworCisJCW9mZnAgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZnAsIGNhdHRyLT5hdHRhbGln bmJ5KTsKKwkJY2F0dHItPmF0dGNhY2hlb2ZmID0gb2ZmcDsKKworCQlvZmZwICs9IGNhdHRyLT5h dHRsZW47CisJCWZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA9IGkgKyAxOworCX0KKworCXR1cGRlc2Mt PmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA9IGZpcnN0Tm9uQ2FjaGVkT2ZmQXR0cjsKK30KKwogLyoK ICAqIEZyZWUgYSBUdXBsZURlc2MgaW5jbHVkaW5nIGFsbCBzdWJzdHJ1Y3R1cmUKICAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IGIyNDZlODEyN2RiLi5hNDY5NGJkODA2 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtMzM1LDkgKzMzNSw2IEBA IGdldFNwR2lzdFR1cGxlRGVzYyhSZWxhdGlvbiBpbmRleCwgU3BHaXN0VHlwZURlc2MgKmtleVR5 cGUpCiAJCS8qIFdlIHNob3VsZG4ndCBuZWVkIHRvIGJvdGhlciB3aXRoIG1ha2luZyB0aGVzZSB2 YWxpZDogKi8KIAkJYXR0LT5hdHRjb21wcmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhv ZDsKIAkJYXR0LT5hdHRjb2xsYXRpb24gPSBJbnZhbGlkT2lkOwotCQkvKiBJbiBjYXNlIHdlIGNo YW5nZWQgdHlwbGVuLCB3ZSdkIGJldHRlciByZXNldCBmb2xsb3dpbmcgb2Zmc2V0cyAqLwotCQlm b3IgKGludCBpID0gc3BnRmlyc3RJbmNsdWRlQ29sdW1uOyBpIDwgb3V0VHVwRGVzYy0+bmF0dHM7 IGkrKykKLQkJCVR1cGxlRGVzY0NvbXBhY3RBdHRyKG91dFR1cERlc2MsIGkpLT5hdHRjYWNoZW9m ZiA9IC0xOwogCiAJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKG91dFR1cERlc2MsIHNwZ0tl eUNvbHVtbik7CiAJCVR1cGxlRGVzY0ZpbmFsaXplKG91dFR1cERlc2MpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1R1cGxlcy5jCmluZGV4IGU2YWI1MWU2NDA0Li44OWYxOGJlNWQ4MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNUdXBsZXMuYwpAQCAtOTkyLDExOCArOTkyLDYgQEAgdHRzX2J1ZmZlcl9oZWFwX3N0 b3JlX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsCiAJfQogfQog Ci0vKgotICogc2xvdF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbAotICoJCUFuIGFsd2F5cyBp bmxpbmUgaGVscGVyIGZ1bmN0aW9uIGZvciB1c2UgaW4gc2xvdF9kZWZvcm1faGVhcF90dXBsZSB0 bwotICoJCWFsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHNwZWNpYWxpemVkIHZlcnNpb25zIG9m IHRoaXMgZnVuY3Rpb24gZm9yCi0gKgkJdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgInNsb3ciIGFu ZCAiaGFzbnVsbHMiLiAgRm9yIGV4YW1wbGUsIGlmIGEKLSAqCQlnaXZlbiB0dXBsZSBoYXMgbm8g bnVsbHMsIHRoZW4gd2UgbmVlZG4ndCBjaGVjayAiaGFzbnVsbHMiIGZvciBldmVyeQotICoJCWF0 dHJpYnV0ZSB0aGF0IHdlJ3JlIGRlZm9ybWluZy4gIFRoZSBjYWxsZXIgY2FuIGp1c3QgY2FsbCB0 aGlzCi0gKgkJZnVuY3Rpb24gd2l0aCBoYXNudWxscyBzZXQgdG8gY29uc3RhbnQtZmFsc2UgYW5k IGhhdmUgdGhlIGNvbXBpbGVyCi0gKgkJcmVtb3ZlIHRoZSBjb25zdGFudC1mYWxzZSBicmFuY2hl cyBhbmQgZW1pdCBtb3JlIG9wdGltYWwgY29kZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBuZXh0IGF0 dG51bSB0byBkZWZvcm0sIHdoaWNoIGNhbiBiZSBlcXVhbCB0byBuYXR0cyB3aGVuIHRoZQotICog ZnVuY3Rpb24gbWFuYWdlcyB0byBkZWZvcm0gYWxsIHJlcXVlc3RlZCBhdHRyaWJ1dGVzLiAgKm9m ZnAgaXMgYW4gaW5wdXQgYW5kCi0gKiBvdXRwdXQgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBieXRl IG9mZnNldCB3aXRoaW4gdGhlIHR1cGxlIHRvIHN0YXJ0IGRlZm9ybWluZwotICogZnJvbSB3aGlj aCwgb24gcmV0dXJuLCBnZXRzIHNldCB0byB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBuZXh0IGF0dHJp YnV0ZQotICogc2hvdWxkIGJlIGRlZm9ybWVkIGZyb20uICAqc2xvd3AgaXMgc2V0IHRvIHRydWUg d2hlbiBzdWJzZXF1ZW50IGRlZm9ybWluZwotICogb2YgdGhpcyB0dXBsZSBtdXN0IHVzZSBhIHZl cnNpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoICJzbG93IiBwYXNzZWQgYXMKLSAqIHRydWUuCi0g KgotICogQ2FsbGVycyBjYW5ub3QgYXNzdW1lIHdoZW4gd2UgcmV0dXJuICJhdHRudW0iIChpLmUu IGFsbCByZXF1ZXN0ZWQKLSAqIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGRlZm9ybWVkKSB0aGF0IHNs b3cgbW9kZSBpc24ndCByZXF1aXJlZCBmb3IgYW55Ci0gKiBhZGRpdGlvbmFsIGRlZm9ybWluZyBh cyB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlIGNhdXNlZCBhIHN3aXRjaCB0bwotICogc2xv dyBtb2RlLgotICovCi1zdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgaW50Ci1zbG90 X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVw bGUgdHVwbGUsCi0JCQkJCQkJCWludCBhdHRudW0sIGludCBuYXR0cywgYm9vbCBzbG93LAotCQkJ CQkJCQlib29sIGhhc251bGxzLCB1aW50MzIgKm9mZnAsIGJvb2wgKnNsb3dwKQotewotCVR1cGxl RGVzYwl0dXBsZURlc2MgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOwotCURhdHVtCSAgICp2 YWx1ZXMgPSBzbG90LT50dHNfdmFsdWVzOwotCWJvb2wJICAgKmlzbnVsbCA9IHNsb3QtPnR0c19p c251bGw7Ci0JSGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7Ci0JY2hhcgkgICAq dHA7CQkJCS8qIHB0ciB0byB0dXBsZSBkYXRhICovCi0JYml0czgJICAgKmJwID0gdHVwLT50X2Jp dHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3duZXh0ID0g ZmFsc2U7Ci0KLQl0cCA9IChjaGFyICopIHR1cCArIHR1cC0+dF9ob2ZmOwotCi0JZm9yICg7IGF0 dG51bSA8IG5hdHRzOyBhdHRudW0rKykKLQl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQg PSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7Ci0KLQkJaWYgKGhhc251 bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCi0JCXsKLQkJCXZhbHVlc1thdHRudW1dID0g KERhdHVtKSAwOwotCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOwotCQkJaWYgKCFzbG93KQotCQkJ ewotCQkJCSpzbG93cCA9IHRydWU7Ci0JCQkJcmV0dXJuIGF0dG51bSArIDE7Ci0JCQl9Ci0JCQll bHNlCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOwotCi0J CS8qIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoaXMgYXR0cmlidXRlICovCi0JCWlmICghc2xv dyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJKm9mZnAgPSB0aGlzYXR0LT5hdHRj YWNoZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0JCQkvKgot CQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0 ZSBpZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRo YXQgdGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0 aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25lZCBvciB1 bmFsaWduZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAmJiAqb2ZmcCA9PSBhdHRfbm9t aW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQl0aGlzYXR0LT5h dHRjYWNoZW9mZiA9ICpvZmZwOwotCQkJZWxzZQotCQkJewotCQkJCSpvZmZwID0gYXR0X3BvaW50 ZXJfYWxpZ25ieSgqb2ZmcCwKLQkJCQkJCQkJCQkJdGhpc2F0dC0+YXR0YWxpZ25ieSwKLQkJCQkJ CQkJCQkJLTEsCi0JCQkJCQkJCQkJCXRwICsgKm9mZnApOwotCi0JCQkJaWYgKCFzbG93KQotCQkJ CQlzbG93bmV4dCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBub3QgdmFy bGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJKm9mZnAgPSBh dHRfbm9taW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJaWYg KCFzbG93KQotCQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gKm9mZnA7Ci0JCX0KLQotCQl2YWx1 ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQsIHRwICsgKm9mZnApOwotCi0JCSpvZmZwID0g YXR0X2FkZGxlbmd0aF9wb2ludGVyKCpvZmZwLCB0aGlzYXR0LT5hdHRsZW4sIHRwICsgKm9mZnAp OwotCi0JCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHNsb3cgbW9kZSAqLwotCQlp ZiAoIXNsb3cpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSdyZSB1bmFibGUgdG8gZGVmb3JtIGFueSBm dXJ0aGVyIGlmIHRoZSBhYm92ZSBjb2RlIHNldAotCQkJICogJ3Nsb3duZXh0Jywgb3IgaWYgdGhp cyBpc24ndCBhIGZpeGVkLXdpZHRoIGF0dHJpYnV0ZS4KLQkJCSAqLwotCQkJaWYgKHNsb3duZXh0 IHx8IHRoaXNhdHQtPmF0dGxlbiA8PSAwKQotCQkJewotCQkJCSpzbG93cCA9IHRydWU7Ci0JCQkJ cmV0dXJuIGF0dG51bSArIDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gbmF0dHM7Ci19Ci0K IC8qCiAgKiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlCiAgKgkJR2l2ZW4gYSBUdXBsZVRhYmxlU2xv dCwgZXh0cmFjdCBkYXRhIGZyb20gdGhlIHNsb3QncyBwaHlzaWNhbCB0dXBsZQpAQCAtMTEyMiw3 OCArMTAxMCwxNDAgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKIHNs b3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBs ZSwgdWludDMyICpvZmZwLAogCQkJCQkgICBpbnQgbmF0dHMpCiB7CisJQ29tcGFjdEF0dHJpYnV0 ZSAqY2F0dHI7CisJVHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0 b3I7CiAJYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVwbGVIYXNOdWxscyh0dXBsZSk7CisJSGVhcFR1 cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CisJYml0czgJICAgKmJwOwkJCQkvKiBwdHIg dG8gbnVsbCBiaXRtYXAgaW4gdHVwbGUgKi8KIAlpbnQJCQlhdHRudW07CisJaW50CQkJZmlyc3RO b25DYWNoZU9mZnNldEF0dHI7CisJaW50CQkJZmlyc3ROdWxsQXR0cjsKKwlEYXR1bQkgICAqdmFs dWVzOworCWJvb2wJICAgKmlzbnVsbDsKKwljaGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIHR1cGxl IGRhdGEgKi8KIAl1aW50MzIJCW9mZjsJCQkvKiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwotCWJv b2wJCXNsb3c7CQkJLyogY2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVvZmY/ICovCisKKwkvKiBEaWQg c29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0 dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+PSAwKTsKIAogCS8qIFdlIGNhbiBvbmx5 IGZldGNoIGFzIG1hbnkgYXR0cmlidXRlcyBhcyB0aGUgdHVwbGUgaGFzLiAqLwotCW5hdHRzID0g TWluKEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpLCBuYXR0cyk7CisJbmF0 dHMgPSBNaW4oSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwKSwgbmF0dHMpOworCWF0dG51bSA9 IHNsb3QtPnR0c19udmFsaWQ7CisJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPSBNaW4odHVwbGVE ZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIsIG5hdHRzKTsKKworCWlmIChoYXNudWxscykKKwl7 CisJCWJwID0gdHVwLT50X2JpdHM7CisJCWZpcnN0TnVsbEF0dHIgPSBmaXJzdF9udWxsX2F0dHIo YnAsIG5hdHRzKTsKKwkJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIgPSBNaW4oZmlyc3ROb25DYWNo ZU9mZnNldEF0dHIsIGZpcnN0TnVsbEF0dHIpOworCX0KKwllbHNlCisJeworCQlicCA9IE5VTEw7 CisJCWZpcnN0TnVsbEF0dHIgPSBuYXR0czsKKwl9CisKKwl2YWx1ZXMgPSBzbG90LT50dHNfdmFs dWVzOworCWlzbnVsbCA9IHNsb3QtPnR0c19pc251bGw7CisJdHAgPSAoY2hhciAqKSB0dXAgKyB0 dXAtPnRfaG9mZjsKIAogCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgZmlyc3QgY2FsbCBmb3Ig dGhpcyB0dXBsZSwgYW5kIGluaXRpYWxpemUgb3IgcmVzdG9yZQotCSAqIGxvb3Agc3RhdGUuCisJ ICogSGFuZGxlIHRoZSBwb3J0aW9uIG9mIHRoZSB0dXBsZSB0aGF0IHdlIGhhdmUgY2FjaGVkIHRo ZSBvZmZzZXQgZm9yIHVwCisJICogdG8gdGhlIGZpcnN0IE5VTEwgYXR0cmlidXRlLiAgVGhlIG9m ZnNldCBpcyBlZmZlY3RpdmVseSBmaXhlZCBmb3IgdGhlc2UKKwkgKiBzbyB3ZSBjYW4gdXNlIHRo ZSBDb21wYWN0QXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYuCiAJICovCi0JYXR0bnVtID0gc2xvdC0+ dHRzX252YWxpZDsKLQlpZiAoYXR0bnVtID09IDApCisJaWYgKGF0dG51bSA8IGZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyKQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCWludAkJCW9m ZmNoZWNrOworCisJCS8qIEluIEFzc2VydCBlbmFibGVkIGJ1aWxkcywgdmVyaWZ5IGF0dGNhY2hl b2ZmIGlzIGNvcnJlY3QgKi8KKwkJaWYgKGF0dG51bSA9PSAwKQorCQkJb2ZmY2hlY2sgPSAwOwor CQllbHNlCisJCQlvZmZjaGVjayA9ICpvZmZwOworI2VuZGlmCisJCWRvCisJCXsKKwkJCWNhdHRy ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOworCisjaWZkZWYgVVNF X0FTU0VSVF9DSEVDS0lORworCQkJb2ZmY2hlY2sgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZmNo ZWNrLCBjYXR0ci0+YXR0YWxpZ25ieSk7CisJCQlBc3NlcnQob2ZmY2hlY2sgPT0gY2F0dHItPmF0 dGNhY2hlb2ZmKTsKKwkJCW9mZmNoZWNrICs9IGNhdHRyLT5hdHRsZW47CisjZW5kaWYKKworCQkJ dmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBjYXR0ci0+YXR0Y2FjaGVvZmYp OworCQkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJfSB3aGlsZSAoKythdHRudW0gPCBmaXJz dE5vbkNhY2hlT2Zmc2V0QXR0cik7CisKKwkJLyoKKwkJICogUG9pbnQgdGhlIG9mZnNldCBhZnRl ciB0aGUgZW5kIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSB3aXRoIGEgY2FjaGVkCisJCSAqIG9mZnNl dC4gIFdlIGV4cGVjdCB0aGUgZmluYWwgY2FjaGVkIG9mZnNldCBhdHRyaWJ1dGUgdG8gaGF2ZSBh CisJCSAqIGZpeGVkIHdpZHRoLCBzbyBqdXN0IGFkZCB0aGUgYXR0bGVuIHRvIHRoZSBhdHRjYWNo ZW9mZgorCQkgKi8KKwkJQXNzZXJ0KGNhdHRyLT5hdHRsZW4gPiAwKTsKKwkJb2ZmID0gY2F0dHIt PmF0dGNhY2hlb2ZmICsgY2F0dHItPmF0dGxlbjsKKwl9CisJZWxzZSBpZiAoYXR0bnVtID09IDAp CiAJewogCQkvKiBTdGFydCBmcm9tIHRoZSBmaXJzdCBhdHRyaWJ1dGUgKi8KIAkJb2ZmID0gMDsK LQkJc2xvdyA9IGZhbHNlOwogCX0KIAllbHNlCiAJewogCQkvKiBSZXN0b3JlIHN0YXRlIGZyb20g cHJldmlvdXMgZXhlY3V0aW9uICovCiAJCW9mZiA9ICpvZmZwOwotCQlzbG93ID0gVFRTX1NMT1co c2xvdCk7CiAJfQogCiAJLyoKLQkgKiBJZiAnc2xvdycgaXNuJ3Qgc2V0LCB0cnkgZGVmb3JtaW5n IHVzaW5nIGRlZm9ybWluZyBjb2RlIHRoYXQgZG9lcyBub3QKLQkgKiBjb250YWluIGFueSBvZiB0 aGUgZXh0cmEgY2hlY2tzIHJlcXVpcmVkIGZvciBub24tZml4ZWQgb2Zmc2V0Ci0JICogZGVmb3Jt aW5nLiAgRHVyaW5nIGRlZm9ybWluZywgaWYgb3Igd2hlbiB3ZSBmaW5kIGEgTlVMTCBvciBhIHZh cmlhYmxlCi0JICogbGVuZ3RoIGF0dHJpYnV0ZSwgd2UnbGwgc3dpdGNoIHRvIGEgZGVmb3JtaW5n IG1ldGhvZCB3aGljaCBpbmNsdWRlcyB0aGUKLQkgKiBleHRyYSBjb2RlIHJlcXVpcmVkIGZvciBu b24tZml4ZWQgb2Zmc2V0IGRlZm9ybWluZywgYS5rLmEgc2xvdyBtb2RlLgotCSAqIEJlY2F1c2Ug dGhpcyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCwgd2UgaW5saW5lCi0JICogc2xvdF9kZWZvcm1f aGVhcF90dXBsZV9pbnRlcm5hbCBwYXNzaW5nIHRoZSAnc2xvdycgYW5kICdoYXNudWxsJwotCSAq IHBhcmFtZXRlcnMgYXMgY29uc3RhbnRzIHRvIGFsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHNw ZWNpYWxpemVkIGNvZGUKLQkgKiB3aXRoIHRoZSBrbm93bi1jb25zdCBmYWxzZSBjb21wYXJpc29u cyBhbmQgc3Vic2VxdWVudCBicmFuY2hlcyByZW1vdmVkLgorCSAqIEhhbmRsZSBhbnkgcG9ydGlv biBvZiB0aGUgdHVwbGUgdGhhdCBkb2Vzbid0IGhhdmUgYSBmaXhlZCBvZmZzZXQgdXAKKwkgKiB1 bnRpbCB0aGUgZmlyc3QgTlVMTCBhdHRyaWJ1dGUuICBUaGlzIGxvb3BzIG9ubHkgZGlmZmVycyBm cm9tIHRoZSBvbmUKKwkgKiBhZnRlciBpdCBieSB0aGUgTlVMTCBjaGVja3MuCiAJICovCi0JaWYg KCFzbG93KQorCWZvciAoOyBhdHRudW0gPCBmaXJzdE51bGxBdHRyOyBhdHRudW0rKykKIAl7Ci0J CS8qIFR1cGxlIHdpdGhvdXQgYW55IE5VTExzPyBXZSBjYW4gc2tpcCBkb2luZyBhbnkgTlVMTCBj aGVja2luZyAqLwotCQlpZiAoIWhhc251bGxzKQotCQkJYXR0bnVtID0gc2xvdF9kZWZvcm1faGVh cF90dXBsZV9pbnRlcm5hbChzbG90LAotCQkJCQkJCQkJCQkJCSB0dXBsZSwKLQkJCQkJCQkJCQkJ CQkgYXR0bnVtLAotCQkJCQkJCQkJCQkJCSBuYXR0cywKLQkJCQkJCQkJCQkJCQkgZmFsc2UsIC8q IHNsb3cgKi8KLQkJCQkJCQkJCQkJCQkgZmFsc2UsIC8qIGhhc251bGxzICovCi0JCQkJCQkJCQkJ CQkJICZvZmYsCi0JCQkJCQkJCQkJCQkJICZzbG93KTsKLQkJZWxzZQotCQkJYXR0bnVtID0gc2xv dF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbChzbG90LAotCQkJCQkJCQkJCQkJCSB0dXBsZSwK LQkJCQkJCQkJCQkJCQkgYXR0bnVtLAotCQkJCQkJCQkJCQkJCSBuYXR0cywKLQkJCQkJCQkJCQkJ CQkgZmFsc2UsIC8qIHNsb3cgKi8KLQkJCQkJCQkJCQkJCQkgdHJ1ZSwJLyogaGFzbnVsbHMgKi8K LQkJCQkJCQkJCQkJCQkgJm9mZiwKLQkJCQkJCQkJCQkJCQkgJnNsb3cpOworCQljYXR0ciA9IFR1 cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKworCQkvKiBhbGlnbiB0aGUg b2Zmc2V0IGZvciB0aGlzIGF0dHJpYnV0ZSAqLworCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5 KG9mZiwKKwkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLAorCQkJCQkJCQkgIHRwICsgb2ZmKTsKKworCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0 KGNhdHRyLCB0cCArIG9mZik7CisJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisKKwkJLyogbW92 ZSB0aGUgb2Zmc2V0IGJleW9uZCB0aGlzIGF0dHJpYnV0ZSAqLworCQlvZmYgPSBhdHRfYWRkbGVu Z3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CiAJfQogCi0JLyogSWYg dGhlcmUncyBzdGlsbCB3b3JrIHRvIGRvIHRoZW4gd2UgbXVzdCBiZSBpbiBzbG93IG1vZGUgKi8K LQlpZiAoYXR0bnVtIDwgbmF0dHMpCisJLyoKKwkgKiBOb3cgaGFuZGxlIGFueSByZW1haW5pbmcg dHVwbGVzLCB0aGlzIHRpbWUgaW5jbHVkZSBOVUxMIGNoZWNrcyBhcyB3ZSdyZQorCSAqIG5vdyBh dCB0aGUgZmlyc3QgTlVMTCBhdHRyaWJ1dGUuCisJICovCisJZm9yICg7IGF0dG51bSA8IG5hdHRz OyBhdHRudW0rKykKIAl7Ci0JCS8qIFhYWCBpcyBpdCB3b3J0aCBhZGRpbmcgYSBzZXBhcmF0ZSBj YWxsIHdoZW4gaGFzbnVsbHMgaXMgZmFsc2U/ICovCi0JCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hl YXBfdHVwbGVfaW50ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCSB0dXBsZSwKLQkJCQkJCQkJCQkJ CSBhdHRudW0sCi0JCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkgdHJ1ZSwJLyogc2xv dyAqLwotCQkJCQkJCQkJCQkJIGhhc251bGxzLAotCQkJCQkJCQkJCQkJICZvZmYsCi0JCQkJCQkJ CQkJCQkgJnNsb3cpOworCQlpZiAoYXR0X2lzbnVsbChhdHRudW0sIGJwKSkKKwkJeworCQkJdmFs dWVzW2F0dG51bV0gPSAoRGF0dW0pIDA7CisJCQlpc251bGxbYXR0bnVtXSA9IHRydWU7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNj LCBhdHRudW0pOworCisJCS8qIGFsaWduIHRoZSBvZmZzZXQgZm9yIHRoaXMgYXR0cmlidXRlICov CisJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAorCQkJCQkJCQkgIGNhdHRyLT5hdHRh bGlnbmJ5LAorCQkJCQkJCQkgIGNhdHRyLT5hdHRsZW4sCisJCQkJCQkJCSAgdHAgKyBvZmYpOwor CisJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQoY2F0dHIsIHRwICsgb2ZmKTsKKwkJaXNudWxs W2F0dG51bV0gPSBmYWxzZTsKKworCQkvKiBtb3ZlIHRoZSBvZmZzZXQgYmV5b25kIHRoaXMgYXR0 cmlidXRlICovCisJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGNhdHRyLT5hdHRs ZW4sIHRwICsgb2ZmKTsKIAl9CiAKIAkvKgpAQCAtMTIwMSwxMCArMTE1MSw2IEBAIHNsb3RfZGVm b3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEhlYXBUdXBsZSB0dXBsZSwgdWlu dDMyICpvZmZwLAogCSAqLwogCXNsb3QtPnR0c19udmFsaWQgPSBhdHRudW07CiAJKm9mZnAgPSBv ZmY7Ci0JaWYgKHNsb3cpCi0JCXNsb3QtPnR0c19mbGFncyB8PSBUVFNfRkxBR19TTE9XOwotCWVs c2UKLQkJc2xvdC0+dHRzX2ZsYWdzICY9IH5UVFNfRkxBR19TTE9XOwogfQogCiBjb25zdCBUdXBs ZVRhYmxlU2xvdE9wcyBUVFNPcHNWaXJ0dWFsID0gewpAQCAtMjI1OSwxMCArMjIwNSwxNiBAQCBF eGVjVHlwZVNldENvbE5hbWVzKFR1cGxlRGVzYyB0eXBlSW5mbywgTGlzdCAqbmFtZXNMaXN0KQog ICogVGhpcyBoYXBwZW5zICJmb3IgZnJlZSIgaWYgdGhlIHR1cGRlc2MgY2FtZSBmcm9tIGEgcmVs Y2FjaGUgZW50cnksIGJ1dAogICogbm90IGlmIHdlIGhhdmUgbWFudWZhY3R1cmVkIGEgdHVwZGVz YyBmb3IgYSB0cmFuc2llbnQgUkVDT1JEIGRhdGF0eXBlLgogICogSW4gdGhhdCBjYXNlIHdlIGhh dmUgdG8gbm90aWZ5IHR5cGNhY2hlLmMgb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdHlwZS4KKyAq CisgKiBUdXBsZURlc2NGaW5hbGl6ZSgpIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBUdXBsZURlc2Mg YmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCiAgKi8KIFR1cGxlRGVzYwogQmxlc3NU dXBsZURlc2MoVHVwbGVEZXNjIHR1cGRlc2MpCiB7CisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRv IGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQodHVwZGVzYy0+Zmlyc3ROb25D YWNoZWRPZmZBdHRyID49IDApOworCiAJaWYgKHR1cGRlc2MtPnRkdHlwZWlkID09IFJFQ09SRE9J RCAmJgogCQl0dXBkZXNjLT50ZHR5cG1vZCA8IDApCiAJCWFzc2lnbl9yZWNvcmRfdHlwZV90eXBt b2QodHVwZGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2Rl Zm9ybS5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYwppbmRleCAzZWIw ODdlYjU2Yi4uMTI1MjFlM2U0NmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xs dm1qaXRfZGVmb3JtLmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0u YwpAQCAtNjIsNyArNjIsNiBAQCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0ICpj b250ZXh0LCBUdXBsZURlc2MgZGVzYywKIAlMTFZNVmFsdWVSZWYgdl90dHNfdmFsdWVzOwogCUxM Vk1WYWx1ZVJlZiB2X3R0c19udWxsczsKIAlMTFZNVmFsdWVSZWYgdl9zbG90b2ZmcDsKLQlMTFZN VmFsdWVSZWYgdl9mbGFnc3A7CiAJTExWTVZhbHVlUmVmIHZfbnZhbGlkcDsKIAlMTFZNVmFsdWVS ZWYgdl9udmFsaWQ7CiAJTExWTVZhbHVlUmVmIHZfbWF4YXR0OwpAQCAtMTc4LDcgKzE3Nyw2IEBA IHNsb3RfY29tcGlsZV9kZWZvcm0oTExWTUppdENvbnRleHQgKmNvbnRleHQsIFR1cGxlRGVzYyBk ZXNjLAogCXZfdHRzX251bGxzID0KIAkJbF9sb2FkX3N0cnVjdF9nZXAoYiwgU3RydWN0VHVwbGVU YWJsZVNsb3QsIHZfc2xvdCwgRklFTEROT19UVVBMRVRBQkxFU0xPVF9JU05VTEwsCiAJCQkJCQkg ICJ0dHNfSVNOVUxMIik7Ci0Jdl9mbGFnc3AgPSBsX3N0cnVjdF9nZXAoYiwgU3RydWN0VHVwbGVU YWJsZVNsb3QsIHZfc2xvdCwgRklFTEROT19UVVBMRVRBQkxFU0xPVF9GTEFHUywgIiIpOwogCXZf bnZhbGlkcCA9IGxfc3RydWN0X2dlcChiLCBTdHJ1Y3RUdXBsZVRhYmxlU2xvdCwgdl9zbG90LCBG SUVMRE5PX1RVUExFVEFCTEVTTE9UX05WQUxJRCwgIiIpOwogCiAJaWYgKG9wcyA9PSAmVFRTT3Bz SGVhcFR1cGxlIHx8IG9wcyA9PSAmVFRTT3BzQnVmZmVySGVhcFR1cGxlKQpAQCAtNzQ3LDE0ICs3 NDUsMTAgQEAgc2xvdF9jb21waWxlX2RlZm9ybShMTFZNSml0Q29udGV4dCAqY29udGV4dCwgVHVw bGVEZXNjIGRlc2MsCiAKIAl7CiAJCUxMVk1WYWx1ZVJlZiB2X29mZiA9IGxfbG9hZChiLCBUeXBl U2l6ZVQsIHZfb2ZmcCwgIiIpOwotCQlMTFZNVmFsdWVSZWYgdl9mbGFnczsKIAogCQlMTFZNQnVp bGRTdG9yZShiLCBsX2ludDE2X2NvbnN0KGxjLCBuYXR0cyksIHZfbnZhbGlkcCk7CiAJCXZfb2Zm ID0gTExWTUJ1aWxkVHJ1bmMoYiwgdl9vZmYsIExMVk1JbnQzMlR5cGVJbkNvbnRleHQobGMpLCAi Iik7CiAJCUxMVk1CdWlsZFN0b3JlKGIsIHZfb2ZmLCB2X3Nsb3RvZmZwKTsKLQkJdl9mbGFncyA9 IGxfbG9hZChiLCBMTFZNSW50MTZUeXBlSW5Db250ZXh0KGxjKSwgdl9mbGFnc3AsICJ0dHNfZmxh Z3MiKTsKLQkJdl9mbGFncyA9IExMVk1CdWlsZE9yKGIsIHZfZmxhZ3MsIGxfaW50MTZfY29uc3Qo bGMsIFRUU19GTEFHX1NMT1cpLCAiIik7Ci0JCUxMVk1CdWlsZFN0b3JlKGIsIHZfZmxhZ3MsIHZf ZmxhZ3NwKTsKIAkJTExWTUJ1aWxkUmV0Vm9pZChiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jCmluZGV4IDc3MGVkYjM0ZTA4Li45OThiZTI0YWM0MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCkBAIC02NjYsMTQgKzY2Niw2IEBAIFJlbGF0aW9uQnVpbGRUdXBsZURl c2MoUmVsYXRpb24gcmVsYXRpb24pCiAJCWVsb2coRVJST1IsICJwZ19hdHRyaWJ1dGUgY2F0YWxv ZyBpcyBtaXNzaW5nICVkIGF0dHJpYnV0ZShzKSBmb3IgcmVsYXRpb24gT0lEICV1IiwKIAkJCSBu ZWVkLCBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSk7CiAKLQkvKgotCSAqIFdlIGNhbiBlYXNp bHkgc2V0IHRoZSBhdHRjYWNoZW9mZiB2YWx1ZSBmb3IgdGhlIGZpcnN0IGF0dHJpYnV0ZTogaXQK LQkgKiBtdXN0IGJlIHplcm8uICBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIHNwZWNpYWwg Y2FzZXMgZm9yIGF0dG51bT0xCi0JICogdGhhdCB1c2VkIHRvIGV4aXN0IGluIGZhc3RnZXRhdHRy KCkgYW5kIGluZGV4X2dldGF0dHIoKS4KLQkgKi8KLQlpZiAoUmVsYXRpb25HZXROdW1iZXJPZkF0 dHJpYnV0ZXMocmVsYXRpb24pID4gMCkKLQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIocmVsYXRpb24t PnJkX2F0dCwgMCktPmF0dGNhY2hlb2ZmID0gMDsKLQogCS8qCiAJICogU2V0IHVwIGNvbnN0cmFp bnQvZGVmYXVsdCBpbmZvCiAJICovCkBAIC0xOTg1LDggKzE5NzcsNiBAQCBmb3JtcmRlc2MoY29u c3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQgcmVsYXRpb25SZWx0eXBlLAogCQlwb3B1bGF0ZV9j b21wYWN0X2F0dHJpYnV0ZShyZWxhdGlvbi0+cmRfYXR0LCBpKTsKIAl9CiAKLQkvKiBpbml0aWFs aXplIGZpcnN0IGF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmLCBjZiBSZWxhdGlvbkJ1aWxkVHVwbGVE ZXNjICovCi0JVHVwbGVEZXNjQ29tcGFjdEF0dHIocmVsYXRpb24tPnJkX2F0dCwgMCktPmF0dGNh Y2hlb2ZmID0gMDsKIAlUdXBsZURlc2NGaW5hbGl6ZShyZWxhdGlvbi0+cmRfYXR0KTsKIAogCS8q IG1hcmsgbm90LW51bGwgc3RhdHVzICovCkBAIC00NDQ2LDggKzQ0MzYsNiBAQCBCdWlsZEhhcmRj b2RlZERlc2NyaXB0b3IoaW50IG5hdHRzLCBjb25zdCBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgKmF0 dHJzKQogCQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShyZXN1bHQsIGkpOwogCX0KIAotCS8q IGluaXRpYWxpemUgZmlyc3QgYXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVp bGRUdXBsZURlc2MgKi8KLQlUdXBsZURlc2NDb21wYWN0QXR0cihyZXN1bHQsIDApLT5hdHRjYWNo ZW9mZiA9IDA7CiAJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0KTsKIAogCS8qIE5vdGU6IHdlIGRv bid0IGJvdGhlciB0byBzZXQgdXAgYSBUdXBsZUNvbnN0ciBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2h0 dXBfZGV0YWlscy5oCmluZGV4IGQ0MDY4MjVmZjIyLi45NGI0Mjc5YjdmMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9odHVwX2RldGFpbHMuaApAQCAtODY1LDIwICs4NjUsMTcgQEAgZXh0ZXJuIE1pbmltYWxUdXBs ZSBtaW5pbWFsX2V4cGFuZF90dXBsZShIZWFwVHVwbGUgc291cmNlVHVwbGUsIFR1cGxlRGVzYyB0 dXBsZUQKIHN0YXRpYyBpbmxpbmUgRGF0dW0KIGZhc3RnZXRhdHRyKEhlYXBUdXBsZSB0dXAsIGlu dCBhdHRudW0sIFR1cGxlRGVzYyB0dXBsZURlc2MsIGJvb2wgKmlzbnVsbCkKIHsKLQlBc3NlcnQo YXR0bnVtID4gMCk7CisJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBhdHRudW0gLSAxKTsKIAorCUFzc2VydChhdHRudW0gPiAwKTsKIAkqaXNu dWxsID0gZmFsc2U7Ci0JaWYgKEhlYXBUdXBsZU5vTnVsbHModHVwKSkKLQl7Ci0JCUNvbXBhY3RB dHRyaWJ1dGUgKmF0dDsKIAotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2Ms IGF0dG51bSAtIDEpOwotCQlpZiAoYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJcmV0dXJuIGZl dGNoYXR0KGF0dCwgKGNoYXIgKikgdHVwLT50X2RhdGEgKyB0dXAtPnRfZGF0YS0+dF9ob2ZmICsK LQkJCQkJCQlhdHQtPmF0dGNhY2hlb2ZmKTsKLQkJZWxzZQotCQkJcmV0dXJuIG5vY2FjaGVnZXRh dHRyKHR1cCwgYXR0bnVtLCB0dXBsZURlc2MpOwotCX0KKwlpZiAoYXR0LT5hdHRjYWNoZW9mZiA+ PSAwICYmICFIZWFwVHVwbGVIYXNOdWxscyh0dXApKQorCQlyZXR1cm4gZmV0Y2hhdHQoYXR0LCAo Y2hhciAqKSB0dXAtPnRfZGF0YSArIHR1cC0+dF9kYXRhLT50X2hvZmYgKworCQkJCQkJYXR0LT5h dHRjYWNoZW9mZik7CisKKwlpZiAoSGVhcFR1cGxlTm9OdWxscyh0dXApKQorCQlyZXR1cm4gbm9j YWNoZWdldGF0dHIodHVwLCBhdHRudW0sIHR1cGxlRGVzYyk7CiAJZWxzZQogCXsKIAkJaWYgKGF0 dF9pc251bGwoYXR0bnVtIC0gMSwgdHVwLT50X2RhdGEtPnRfYml0cykpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaXR1cC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaAppbmRl eCA1N2U0ZGFhZmIwZC4uZTRiYjI3YjdlNTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9pdHVwLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaApAQCAtMTMxLDI0ICsxMzEs MjAgQEAgSW5kZXhJbmZvRmluZERhdGFPZmZzZXQodW5zaWduZWQgc2hvcnQgdF9pbmZvKQogc3Rh dGljIGlubGluZSBEYXR1bQogaW5kZXhfZ2V0YXR0cihJbmRleFR1cGxlIHR1cCwgaW50IGF0dG51 bSwgVHVwbGVEZXNjIHR1cGxlRGVzYywgYm9vbCAqaXNudWxsKQogeworCUNvbXBhY3RBdHRyaWJ1 dGUgKmF0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSAtIDEpOwor CiAJQXNzZXJ0KGlzbnVsbCk7CiAJQXNzZXJ0KGF0dG51bSA+IDApOwogCiAJKmlzbnVsbCA9IGZh bHNlOwogCi0JaWYgKCFJbmRleFR1cGxlSGFzTnVsbHModHVwKSkKLQl7Ci0JCUNvbXBhY3RBdHRy aWJ1dGUgKmF0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSAtIDEp OworCWlmIChhdHRyLT5hdHRjYWNoZW9mZiA+PSAwICYmICFJbmRleFR1cGxlSGFzTnVsbHModHVw KSkKKwkJcmV0dXJuIGZldGNoYXR0KGF0dHIsCisJCQkJCQkoY2hhciAqKSB0dXAgKyBJbmRleElu Zm9GaW5kRGF0YU9mZnNldCh0dXAtPnRfaW5mbykgKworCQkJCQkJYXR0ci0+YXR0Y2FjaGVvZmYp OwogCi0JCWlmIChhdHRyLT5hdHRjYWNoZW9mZiA+PSAwKQotCQl7Ci0JCQlyZXR1cm4gZmV0Y2hh dHQoYXR0ciwKLQkJCQkJCQkoY2hhciAqKSB0dXAgKyBJbmRleEluZm9GaW5kRGF0YU9mZnNldCh0 dXAtPnRfaW5mbykgKwotCQkJCQkJCWF0dHItPmF0dGNhY2hlb2ZmKTsKLQkJfQotCQllbHNlCi0J CQlyZXR1cm4gbm9jYWNoZV9pbmRleF9nZXRhdHRyKHR1cCwgYXR0bnVtLCB0dXBsZURlc2MpOwot CX0KKwlpZiAoIUluZGV4VHVwbGVIYXNOdWxscyh0dXApKQorCQlyZXR1cm4gbm9jYWNoZV9pbmRl eF9nZXRhdHRyKHR1cCwgYXR0bnVtLCB0dXBsZURlc2MpOwogCWVsc2UKIAl7CiAJCWlmIChhdHRf aXNudWxsKGF0dG51bSAtIDEsIChiaXRzOCAqKSB0dXAgKyBzaXplb2YoSW5kZXhUdXBsZURhdGEp KSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdHVwZGVzYy5oCmluZGV4IDU5NTQxM2RiYmM1Li45OWQ5MDE3ZDFhNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdHVwZGVzYy5oCkBAIC0xMzEsNiArMTMxLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbXBhY3RB dHRyaWJ1dGUKICAqIEFueSBjb2RlIG1ha2luZyBjaGFuZ2VzIG1hbnVhbGx5IHRvIGFuZCBmaWVs ZHMgaW4gdGhlIEZvcm1EYXRhX3BnX2F0dHJpYnV0ZQogICogYXJyYXkgbXVzdCBzdWJzZXF1ZW50 bHkgY2FsbCBwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZSgpIHRvIGZsdXNoIHRoZQogICogY2hh bmdlcyBvdXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgJ2NvbXBhY3RfYXR0cnMnIGVsZW1lbnQuCisg KgorICogZmlyc3ROb25DYWNoZWRPZmZBdHRyIHN0b3JlcyB0aGUgaW5kZXggaW50byB0aGUgY29t cGFjdF9hdHRycyBhcnJheSBmb3IgdGhlCisgKiBmaXJzdCBhdHRyaWJ1dGUgdGhhdCB3ZSBkb24n dCBoYXZlIGEga25vd24gYXR0Y2FjaGVvZmYgZm9yLgorICoKKyAqIE9uY2UgYSBUdXBsZURlc2Mg aGFzIGJlZW4gcG9wdWxhdGVkLCBiZWZvcmUgaXQgaXMgdXNlZCBmb3IgYW55IHB1cnBvc2UKKyAq IFR1cGxlRGVzY0ZpbmFsaXplKCkgbXVzdCBiZSBjYWxsZWQgb24gaXQuCiAgKi8KIHR5cGVkZWYg c3RydWN0IFR1cGxlRGVzY0RhdGEKIHsKQEAgLTEzOCw2ICsxNDQsOCBAQCB0eXBlZGVmIHN0cnVj dCBUdXBsZURlc2NEYXRhCiAJT2lkCQkJdGR0eXBlaWQ7CQkvKiBjb21wb3NpdGUgdHlwZSBJRCBm b3IgdHVwbGUgdHlwZSAqLwogCWludDMyCQl0ZHR5cG1vZDsJCS8qIHR5cG1vZCBmb3IgdHVwbGUg dHlwZSAqLwogCWludAkJCXRkcmVmY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQsIG9yIC0xIGlm IG5vdCBjb3VudGluZyAqLworCWludAkJCWZpcnN0Tm9uQ2FjaGVkT2ZmQXR0cjsJLyogaW5kZXgg b2YgdGhlIGZpcnN0IGF0dCB3aXRob3V0IGFuCisJCQkJCQkJCQkJICogYXR0Y2FjaGVvZmYgKi8K IAlUdXBsZUNvbnN0ciAqY29uc3RyOwkJLyogY29uc3RyYWludHMsIG9yIE5VTEwgaWYgbm9uZSAq LwogCS8qIGNvbXBhY3RfYXR0cnNbTl0gaXMgdGhlIGNvbXBhY3QgbWV0YWRhdGEgb2YgQXR0cmli dXRlIE51bWJlciBOKzEgKi8KIAlDb21wYWN0QXR0cmlidXRlIGNvbXBhY3RfYXR0cnNbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKQEAgLTE5NSw3ICsyMDMsNiBAQCBleHRlcm4gVHVwbGVEZXNjIENy ZWF0ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVwbGVEZXNjIHR1cGRlc2MsIGludCBuYXR0cyk7 CiAKIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVEZXNjQ29weUNvbnN0cihUdXBsZURlc2Mg dHVwZGVzYyk7CiAKLSNkZWZpbmUgVHVwbGVEZXNjRmluYWxpemUoZCkgKCh2b2lkKSAwKQogI2Rl ZmluZSBUdXBsZURlc2NTaXplKHNyYykgXAogCShvZmZzZXRvZihzdHJ1Y3QgVHVwbGVEZXNjRGF0 YSwgY29tcGFjdF9hdHRycykgKyBcCiAJIChzcmMpLT5uYXR0cyAqIHNpemVvZihDb21wYWN0QXR0 cmlidXRlKSArIFwKQEAgLTIwNiw2ICsyMTMsNyBAQCBleHRlcm4gdm9pZCBUdXBsZURlc2NDb3B5 KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpOwogZXh0ZXJuIHZvaWQgVHVwbGVEZXNjQ29w eUVudHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJCQkJCQkJICAgVHVw bGVEZXNjIHNyYywgQXR0ck51bWJlciBzcmNBdHRubyk7CiAKK2V4dGVybiB2b2lkIFR1cGxlRGVz Y0ZpbmFsaXplKFR1cGxlRGVzYyB0dXBkZXNjKTsKIGV4dGVybiB2b2lkIEZyZWVUdXBsZURlc2Mo VHVwbGVEZXNjIHR1cGRlc2MpOwogCiBleHRlcm4gdm9pZCBJbmNyVHVwbGVEZXNjUmVmQ291bnQo VHVwbGVEZXNjIHR1cGRlc2MpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1h Y3MuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgKaW5kZXggZTZkZjgyNjQ3NTAuLmZj YWY2YWQxNDlmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBtYWNzLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUg VFVQTUFDU19ICiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgkvKiBmb3IgVFlQQUxJ R04gbWFjcm9zICovCisjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgogCiAKIC8qCkBAIC02 OSw2ICs3MCw3MCBAQCBmZXRjaF9hdHQoY29uc3Qgdm9pZCAqVCwgYm9vbCBhdHRieXZhbCwgaW50 IGF0dGxlbikKIAllbHNlCiAJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oVCk7CiB9CisKKy8qCisg KiBmaXJzdF9udWxsX2F0dHIKKyAqCQlJbnNwZWN0IGEgTlVMTCBiaXRtYXNrIGZyb20gYSB0dXBs ZSBhbmQgcmV0dXJuIHRoZSAwLWJhc2VkIGF0dG51bSBvZiB0aGUKKyAqCQlmaXJzdCBOVUxMIGF0 dHJpYnV0ZS4gIFJldHVybnMgbmF0dHMgaWYgbm8gTlVMTHMgd2VyZSBmb3VuZC4KKyAqCisgKiBX ZSBleHBlY3QgdGhhdCAnYml0cycgY29udGFpbnMgYXQgbGVhc3Qgb25lIDAgYml0IHNvbWV3aGVy ZSBpbiB0aGUgbWFzaywKKyAqIG5vdCBuZWNlc3NhcmlseSA8IG5hdHRzLgorICovCitzdGF0aWMg aW5saW5lIGludAorZmlyc3RfbnVsbF9hdHRyKGNvbnN0IGJpdHM4ICpiaXRzLCBpbnQgbmF0dHMp Cit7CisJaW50CQkJbGFzdEJ5dGUgPSBuYXR0cyA+PiAzOworCXVpbnQ4CQltYXNrOworCWludAkJ CXJlcyA9IG5hdHRzOworCXVpbnQ4CQlieXRlOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCWludAkJCWZpcnN0bnVsbF9jaGVjayA9IG5hdHRzOworCisJLyogRG8gaXQgdGhlIHNsb3cg d2F5IGFuZCBjaGVjayB3ZSBnZXQgdGhlIHNhbWUgYW5zd2VyLiAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgbmF0dHM7IGkrKykKKwl7CisJCWlmIChhdHRfaXNudWxsKGksIGJpdHMpKQorCQl7CisJ CQlmaXJzdG51bGxfY2hlY2sgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKworCS8q IFByb2Nlc3MgYWxsIGJ5dGVzIHVwIHRvIGp1c3QgYmVmb3JlIHRoZSBieXRlIGZvciB0aGUgbmF0 dHMgaW5kZXggKi8KKwlmb3IgKGludCBieXRlbnVtID0gMDsgYnl0ZW51bSA8IGxhc3RCeXRlOyBi eXRlbnVtKyspCisJeworCQlpZiAoYml0c1tieXRlbnVtXSAhPSAweEZGKQorCQl7CisJCQlieXRl ID0gfmJpdHNbYnl0ZW51bV07CisJCQlyZXMgPSBieXRlbnVtIDw8IDM7CisJCQlyZXMgKz0gcGdf cmlnaHRtb3N0X29uZV9wb3NbYnl0ZV07CisKKwkJCUFzc2VydChyZXMgPT0gZmlyc3RudWxsX2No ZWNrKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhIG1hc2sg d2l0aCBhbGwgYml0cyBiZXlvbmQgbmF0dHMncyBiaXQgc2V0IHRvIG9mZi4gIFRoaXMKKwkgKiBh c3N1bWVzIHRoZSBjb2RlIGFib3ZlIHdpbGwgaGF2ZSBmb3VuZCBhIDAtYml0IGJlZm9yZSB3ZSBy dW4gb2ZmIHRoZQorCSAqIGVuZCBvZiB0aGUgYml0cyBhcnJheS4gIFR1cGxlcyB3aXRob3V0IGFu eSBOVUxMcyB3b24ndCBoYXZlIGEgYml0bWFzaworCSAqIHRvIG1hcmsgTlVMTHMuCisJICovCisJ bWFzayA9IDB4RkYgJiAoKCgodWludDgpIDEpIDw8IChuYXR0cyAmIDcpKSAtIDEpOworCWJ5dGUg PSAofmJpdHNbbGFzdEJ5dGVdKSAmIG1hc2s7CisKKwlpZiAoYnl0ZSAhPSAwKQorCXsKKwkJcmVz ID0gbGFzdEJ5dGUgPDwgMzsKKwkJcmVzICs9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zW2J5dGVdOwor CX0KKworCUFzc2VydChyZXMgPT0gZmlyc3RudWxsX2NoZWNrKTsKKworCXJldHVybiByZXM7Cit9 CiAjZW5kaWYJCQkJCQkJLyogRlJPTlRFTkQgKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5o CmluZGV4IGEyZGZkNzA3ZTc4Li4zNjNjNWYzMzY5NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5o CkBAIC04NCw5ICs4NCw2IEBACiAgKiB0dHNfdmFsdWVzL3R0c19pc251bGwgYXJlIGFsbG9jYXRl ZCBlaXRoZXIgd2hlbiB0aGUgc2xvdCBpcyBjcmVhdGVkICh3aGVuCiAgKiB0aGUgZGVzY3JpcHRv ciBpcyBwcm92aWRlZCksIG9yIHdoZW4gYSBkZXNjcmlwdG9yIGlzIGFzc2lnbmVkIHRvIHRoZSBz bG90OwogICogdGhleSBhcmUgb2YgbGVuZ3RoIGVxdWFsIHRvIHRoZSBkZXNjcmlwdG9yJ3MgbmF0 dHMuCi0gKgotICogVGhlIFRUU19GTEFHX1NMT1cgZmxhZyBpcyBzYXZlZCBzdGF0ZSBmb3IKLSAq IHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUsIGFuZCBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgYW55 IG90aGVyIGNvZGUuCiAgKi0tLS0tLS0tLS0KICAqLwogCkBAIC05OCwxMiArOTUsOCBAQAogI2Rl ZmluZQkJCVRUU19GTEFHX1NIT1VMREZSRUUJCSgxIDw8IDIpCiAjZGVmaW5lIFRUU19TSE9VTERG UkVFKHNsb3QpICgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19TSE9VTERGUkVFKSAhPSAw KQogCi0vKiBzYXZlZCBzdGF0ZSBmb3Igc2xvdF9kZWZvcm1faGVhcF90dXBsZSAqLwotI2RlZmlu ZQkJCVRUU19GTEFHX1NMT1cJCSgxIDw8IDMpCi0jZGVmaW5lIFRUU19TTE9XKHNsb3QpICgoKHNs b3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19TTE9XKSAhPSAwKQotCiAvKiBmaXhlZCB0dXBsZSBk ZXNjcmlwdG9yICovCi0jZGVmaW5lCQkJVFRTX0ZMQUdfRklYRUQJCSgxIDw8IDQpCisjZGVmaW5l CQkJVFRTX0ZMQUdfRklYRUQJCSgxIDw8IDQpCS8qIFhYWCBjaGFuZ2UgdG8gIzM/ICovCiAjZGVm aW5lIFRUU19GSVhFRChzbG90KSAoKChzbG90KS0+dHRzX2ZsYWdzICYgVFRTX0ZMQUdfRklYRUQp ICE9IDApCiAKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdE9wczsKLS0gCjIuNTEuMAoK --000000000000e3535d0648decd59--