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 1wXHsA-003Avn-29 for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Jun 2026 12:17:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wXHs9-00BEkU-1Q for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Jun 2026 12:17:29 +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 1wXHs9-00BEkF-0E for pgsql-hackers@lists.postgresql.org; Wed, 10 Jun 2026 12:17:29 +0000 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wXHs6-00000002KKY-1TSV for pgsql-hackers@postgresql.org; Wed, 10 Jun 2026 12:17:28 +0000 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-36bd175fdbaso4060048a91.0 for ; Wed, 10 Jun 2026 05:17:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781093844; cv=none; d=google.com; s=arc-20240605; b=Mr0MLvt0tWNDPu9EV1f5F90F9fNiOcuEPKNR8K+T/Nmx4vbFGg3XEJaGKsR0ZToYNp h+2fQ3212HQ7smGqPI/4Gw/m2kkxE7/7qNM2wHegUwbDoOPJBTl355Jw87o02GwfqPc/ Fjtsrdx9iiWDvKDcl7/+t9kTL2aBZnKpHhC98IcTb5K6IG5mmR2rk0w469uFpvwxiolk 3cH6fWqN9kCU9zEq/hc5QN+qE4ze5hGqlkN32PYQ3rJQHTos2pMKGJ1oO14lZU/coVe2 RQMkMyEELQLiCNrj2tFac5NIlodr6PUVhe3CbaCW6yVNtUE4gO3x+efn27+ldPfqp/bT WG7g== 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=rHOZBwGAq0BhPZIbqO7LY1Xl1dmK8LHCfJvGIl9q1yA=; fh=LVUg3nBuWG7YFqWqGD5izyurOECzqUsB3NQGBRsQVnU=; b=IcQDK5YWB1zKBzd6bHc58iAt3J+Nq8/N+GzQ8FfD+HbGs1PIvZqoNxoz+TNsfY4XgV KF5kmsuO8fcTuc8zmklDp0FLVI4L9ciVw1WmDyzIB/HT5c3+rIFnTcppUpxHaERIWPcZ /MZQfKLkWh+aTD5mKmvaNKqc13sYEVw9Fh80IpX9ctazpChHFqjL2JsR0v32ZZbqcOmt Ck4SEZfgkuhD4ZIbi09j31odfSEk84oDbZWJWKuthOde19Oeo0Mf4mdwbBeqHH6pVHPU rOX9+JVe8fe7Nyv062LY67DPRfNixYblb2xmFYA6tZTuliN61F0MJKvCp4sxCEwUw1ao XGDw==; darn=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=20251104; t=1781093844; x=1781698644; darn=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=rHOZBwGAq0BhPZIbqO7LY1Xl1dmK8LHCfJvGIl9q1yA=; b=bTDzvcyDjlTIyopETJFNjgJOo36Tss+ZLovsm0tYu3MV+okPWEQdS2Qj5GqmUF5Vjf XNwJeLg4ly2QvNFfhzZiFw8UYSEwCKp5Uwr/jl6Z7pLeWoL8/ECf2ZO5gtgGJv06IioL UqDV40shxB2v9ra1taYGwKciQXDP0ppS2KtTJkhGfJGvW6y4KsAY0lkvBclwi17yppgq bitJYpCH5lICD5jHQeVmS97Fs/Q9jEZAR4aZ5pMFYLXN/ugAmxuiERiHca1Duy4D24p7 l7bfYPwQNJIEE605fsyrrj57xR4OCrmCRFlHFnG/vKjUXdYH/ZwSwm8Wn5ZN3bVIjhZ2 /EGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781093844; x=1781698644; 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=rHOZBwGAq0BhPZIbqO7LY1Xl1dmK8LHCfJvGIl9q1yA=; b=kgA//ntwYyTfbZDvv83ToUxmmfUkRd3I/vXGk1DRWNvH8Lm4k3Mj3hK9NYh+OHinvK FLfp+T0jKogwQuXjQy3Sj1uNfOgTc1uBxvcDHEswjkX76bussIZYU2b/cQV8508mi6dn jxzOzvo21hVCFEsnvGIeaZJ4t6e9BzHBdezSpw61IRlVampDUWVo7r2w3axpKblEJocS fOPvCHXt/eVMu+fHK58t0bkMr7aZKCyiSYxAXNd5EDQbqI22i+HRxXnIdZl7Thxq9d+Y BExY4r2xGfoi8/NGf7gXqYx8myLT7r99X0xVcWzTEGTnRKn3PQlTCkEEvRJM1pzVbUMk s+OQ== X-Forwarded-Encrypted: i=1; AFNElJ+fuwkbc3HjAEdjD6u78Sm0HQkfE+RZu5FdKhalOhGyb866G4EAmFTtTttps8snRz5n3iPK8JH9lQMGg8qI@postgresql.org X-Gm-Message-State: AOJu0YxyndEUPhCakIdWTRj83UobJug9C+RQBSfPVfwt5dNXU/ZTGwfA JK0/LaJKyb7DYYWcQ+47EgDUlvMlkTEFSoI5je0E9oQTA65oEVMxd7wrk/V2xfjiSRCcYMq59rE ijUKnN2VHXVqX2oSX1RaUOmmZWZiMz5U= X-Gm-Gg: Acq92OF0oPpbx03DqletjigrwsyiiJ91oyjGapG6gn8b4bdwdMeGZEHx3nPR8Gi65dg u5rnNuy4cdTTW1g+qSCJcOW2sZIPUEBg4u0pneBNTg2vxDkSf0OwK+VD7ItF6zuy6c/f5ex9gRd iAyIECei2qNJS2EFetGfWqIubh6yx21K3696fsnjT3sXdP1MbUYDWeFN7xV1qquxDUCPLEKhVNn eSeX7kY+RG+ZrtxfWLgghPREX8lfpgdPUW98fOH369Ib7ZTKTATkVtVofI5h8Dkc+1VXjduxQBh yL+IRusKpc5qwAYm6MJ3h413kcRTH7j8ZSr8oGsZv9A5hjqGkgGWMO1uEQqmPkZJKrgV/u1U/zD 2/lEHI+6crw== X-Received: by 2002:a17:90b:570e:b0:36d:dfe4:387c with SMTP id 98e67ed59e1d1-370eed08b30mr26774178a91.10.1781093844151; Wed, 10 Jun 2026 05:17:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Amit Langote Date: Wed, 10 Jun 2026 21:17:07 +0900 X-Gm-Features: AVVi8Cdia4-t1TqAXZrZwhaycgRs5O7zbeWFBbC6QOiztGcGCRTiNfSMaO2abbc Message-ID: Subject: Re: PG19 FK fast path: OOB write and missed FK checks during batched To: Ayush Tiwari Cc: Nikolay Samokhvalov , pgsql-hackers mailing list , Andrey Borodin , Kirk Wolak Content-Type: multipart/mixed; boundary="000000000000e48e190653e53908" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e48e190653e53908 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Ayush, Thanks for the review. On Wed, Jun 10, 2026 at 7:09=E2=80=AFPM Ayush Tiwari wrote: > On Wed, 10 Jun 2026 at 14:02, Amit Langote wrot= e >> Thanks for checking. I will review them a bit more closely before >> committing by Friday. Other reviews are welcome. > > Thanks for the patch! > > I read through v1-0001 and v1-0002 and tried them locally. I had a couple= of > things I wanted to ask about. > > 1. The per-entry "flushing" flag and test coverage. If I'm reading the t= wo > patches together correctly, with both applied the 64-row re-entry test in= 0001 > reaches the flush through ri_FastPathEndBatch(), where 0002's cache-wide > ri_fastpath_flushing guard already routes the re-entrant check to the per= -row > path before it gets back into ri_FastPathBatchAdd(). Does that mean the > per-entry flag from 0001 isn't really exercised by that test once 0002 is= in? > As far as I can tell you'd need the flush to fire from ri_FastPathBatchAd= d() > itself (a 65th row) to reach it. I tried a 65-row variant (same FK, re-e= ntrant > DML from the cast during the full-batch flush), including a case where th= e > re-entrant row was an orphan, and it seemed to do the right thing; the > per-row fallback still raised the violation. Would it be worth switching= the > test to 65 rows, or adding that variant, so the per-entry guard is covere= d too? > Or am I missing a path where the committed test already hits it? You're right. With 0002 applied, the 64-row test reaches the flush through ri_FastPathEndBatch(), where the cache-wide ri_fastpath_flushing guard catches the re-entry before it returns to ri_FastPathBatchAdd(), so the per-entry flag is no longer exercised by that test. To hit the per-entry flag the flush has to fire from ri_FastPathBatchAdd() itself, which the 64-row case no longer does once the add and flush are reordered. Rather than bump the test to 65 rows, I'd prefer to keep the flush firing from ri_FastPathBatchAdd() at 64 by not reordering the add and flush, and prevent the OOB write by bounds-checking the write instead, as done in the attached updated 0001. A re-entrant add then can't overrun the array regardless of the flag, the per-entry flushing guard still routes the re-entry to the per-row path, and a 64-row statement flushes from ri_FastPathBatchAdd() on the 64th row, so the existing test exercises the per-entry guard. > 2. Resetting ri_fastpath_flushing. I noticed it's cleared only in the > PG_FINALLY of ri_FastPathEndBatch(), which does seem to cover the cases I= could > think of. Since ri_FastPathXactCallback already NULLs ri_fastpath_cache = and > clears ri_fastpath_callback_registered at transaction end, I wondered whe= ther > it might be worth clearing ri_fastpath_flushing there too, just as cheap > insurance against some future path that leaves it set across transactions > though maybe that's unnecessary given the PG_FINALLY. Agreed, it's cheap and matches the existing resets there, so I've added it to ri_FastPathXactCallback() in v2-0002. > Other than the above queries, the patch looks good to me. Updated patches attached. --=20 Thanks, Amit Langote --000000000000e48e190653e53908 Content-Type: application/octet-stream; name="v2-0001-Fix-out-of-bounds-write-in-RI-fast-path-batch-on-.patch" Content-Disposition: attachment; filename="v2-0001-Fix-out-of-bounds-write-in-RI-fast-path-batch-on-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq8176xv1 RnJvbSBmMjk3OWVkYjkzOWQzN2U4MWQ4MTQ0ZDE4MzI4YWFmY2NlYjUwMWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMTAgSnVuIDIwMjYgMjE6MDc6MDkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDEvMl0gRml4IG91dC1vZi1ib3VuZHMgd3JpdGUgaW4gUkkgZmFzdC1wYXRoIGJhdGNoIG9uCiBy ZS1lbnRyeQoKVGhlIEZLIGZhc3QtcGF0aCBiYXRjaGluZyBhZGRlZCBpbiBiN2IyN2ViNDFhNSB3 cm90ZSB0aGUgaW5jb21pbmcgcm93CmludG8gdGhlIGJhdGNoIGFycmF5IGJlZm9yZSBjaGVja2lu ZyB3aGV0aGVyIHRoZSBhcnJheSB3YXMgZnVsbDoKCiAgICBmcGVudHJ5LT5iYXRjaFtmcGVudHJ5 LT5iYXRjaF9jb3VudF0gPSBFeGVjQ29weVNsb3RIZWFwVHVwbGUobmV3c2xvdCk7CiAgICBmcGVu dHJ5LT5iYXRjaF9jb3VudCsrOwogICAgaWYgKGZwZW50cnktPmJhdGNoX2NvdW50ID49IFJJX0ZB U1RQQVRIX0JBVENIX1NJWkUpCiAgICAgICAgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKGZwZW50cnks IGZrX3JlbCwgcmlpbmZvKTsKCmJhdGNoX2NvdW50IGlzIHJlc2V0IHRvIHplcm8gb25seSBhdCB0 aGUgZW5kIG9mIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgpLApzbyBpdCByZW1haW5zIGF0IFJJX0ZB U1RQQVRIX0JBVENIX1NJWkUgdGhyb3VnaG91dCBhIGZ1bGwtYmF0Y2ggZmx1c2guCkEgZmx1c2gg cnVucyB1c2VyLWRlZmluZWQgY2FzdCBmdW5jdGlvbnMgYW5kIGVxdWFsaXR5IG9wZXJhdG9yczsg aWYgdGhhdAp1c2VyIGNvZGUgcGVyZm9ybXMgRE1MIG9uIHRoZSBzYW1lIEZLIHRhYmxlLCByaV9G YXN0UGF0aEJhdGNoQWRkKCkKcmUtZW50ZXJzIHdpdGggYmF0Y2hfY291bnQgPT0gUklfRkFTVFBB VEhfQkFUQ0hfU0laRSBhbmQgd3JpdGVzIG9uZSBwYXN0CnRoZSBlbmQgb2YgdGhlIGFycmF5LCBj b3JydXB0aW5nIHRoZSBhZGphY2VudCBiYXRjaF9jb3VudCBmaWVsZC4gIFRoaXMKaXMgcmVhY2hh YmxlIGJ5IGFuIHVucHJpdmlsZWdlZCB0YWJsZSBvd25lciB2aWEgYW4gaW1wbGljaXQgY2FzdCB3 aXRoIGEKUEwvcGdTUUwgZnVuY3Rpb24gYW5kIGNhdXNlcyBhIFNJR1NFR1YgaW4gYXNzZXJ0LWVu YWJsZWQgYnVpbGRzLgoKRml4IGJ5IGJvdW5kcy1jaGVja2luZyB0aGUgd3JpdGUgaW50byB0aGUg YmF0Y2ggYXJyYXkgc28gYSByZS1lbnRyYW50CmFkZCBjYW4gbmV2ZXIgd3JpdGUgcGFzdCB0aGUg ZW5kLCBhbmQgYnkgYWRkaW5nIGEgImZsdXNoaW5nIiBmbGFnIHRvClJJX0Zhc3RQYXRoRW50cnkg dGhhdCByb3V0ZXMgcmUtZW50cmFudCByaV9GYXN0UGF0aEJhdGNoQWRkKCkgY2FsbHMgb24KYSBi dXN5IGVudHJ5IHRvIHRoZSBwZXItcm93IHBhdGggKHJpX0Zhc3RQYXRoQ2hlY2spIGluc3RlYWQg b2YgdG91Y2hpbmcKdGhlIG1pZC1mbHVzaCBiYXRjaCBhcnJheS4gIFRoZSBmbGFnIGlzIHNldCBh cm91bmQgdGhlIHByb2JlIGluCnJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgpIGFuZCBjbGVhcmVkIGlu IGEgUEdfRklOQUxMWSwgd2hpY2ggYWxzbyByZXNldHMKYmF0Y2hfY291bnQsIHNvIHRoZSBlbnRy eSBpcyBsZWZ0IGVtcHR5IGFuZCByZXVzYWJsZSBpZiBhIGZsdXNoIGVycm9yCihpbmNsdWRpbmcg YSByZXBvcnRlZCBGSyB2aW9sYXRpb24pIGlzIGNhdWdodCBieSBhIHNhdmVwb2ludC4KCkFkZCBy ZWdyZXNzaW9uIHRlc3RzIGZvciBib3RoIHRoZSByZS1lbnRyYW50IGZsdXNoIGFuZCByZXVzZSBv ZiBhbiBlbnRyeQphZnRlciBhIGZsdXNoIGVycm9yIGNhdWdodCBieSBhIHNhdmVwb2ludC4KClJl cG9ydGVkLWJ5OiBOaWtvbGF5IFNhbW9raHZhbG92IDxuaWtAcG9zdGdyZXMuYWk+ClJldmlld2Vk LWJ5OiBOaWtvbGF5IFNhbW9raHZhbG92IDxuaWtAcG9zdGdyZXMuYWk+ClJldmlld2VkLWJ5OiBB eXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQU01MjdkOWV4UkNkV3JoSk9uQXhrX3ZBQ2c3c3JfeVBvYUpwXyt1 Q0ZZMHFQOHY9YXdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlf dHJpZ2dlcnMuYyAgICAgICB8IDcwICsrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCB8IDU2ICsrKysrKysrKysrKysrKysrKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsICAgICAgfCA0NiArKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTU1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggZGM4OWM2ODYzOTQuLjZkMGQ0 MjA0ODg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMjQ5LDYgKzI0OSwx MiBAQCB0eXBlZGVmIHN0cnVjdCBSSV9GYXN0UGF0aEVudHJ5CiAJICovCiAJSGVhcFR1cGxlCWJh dGNoW1JJX0ZBU1RQQVRIX0JBVENIX1NJWkVdOwogCWludAkJCWJhdGNoX2NvdW50OworCisJLyoK KwkgKiB0cnVlIHdoaWxlIHRoaXMgZW50cnkncyBiYXRjaCBpcyBiZWluZyBmbHVzaGVkOyBndWFy ZHMgYWdhaW5zdAorCSAqIHJlLWVudHJhbnQgcmlfRmFzdFBhdGhCYXRjaEFkZCBmcm9tIHVzZXIg Y29kZSBydW4gZHVyaW5nIHRoZSBmbHVzaC4KKwkgKi8KKwlib29sCQlmbHVzaGluZzsKIH0gUklf RmFzdFBhdGhFbnRyeTsKIAogLyoKQEAgLTI4NjAsMTUgKzI4NjYsMzEgQEAgcmlfRmFzdFBhdGhC YXRjaEFkZChSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQlSZWxhdGlvbiBma19yZWws IFR1cGxlVGFibGVTbG90ICpuZXdzbG90KQogewogCVJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnkg PSByaV9GYXN0UGF0aEdldEVudHJ5KHJpaW5mbywgZmtfcmVsKTsKLQlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKIAotCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9j eHQpOwotCWZwZW50cnktPmJhdGNoW2ZwZW50cnktPmJhdGNoX2NvdW50XSA9Ci0JCUV4ZWNDb3B5 U2xvdEhlYXBUdXBsZShuZXdzbG90KTsKLQlmcGVudHJ5LT5iYXRjaF9jb3VudCsrOwotCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCS8qCisJICogSWYgdGhpcyBlbnRyeSBpcyBhbHJl YWR5IGJlaW5nIGZsdXNoZWQsIGEgY2FzdCBmdW5jdGlvbiBvciBhbiBvcGVyYXRvcgorCSAqIGlu dm9rZWQgZHVyaW5nIHRoZSBmbHVzaCBoYXMgcmUtZW50ZXJlZCB3aXRoIERNTCBvbiB0aGUgc2Ft ZSBGSy4gIEZhbGwKKwkgKiBiYWNrIHRvIHRoZSBwZXItcm93IHBhdGggcmF0aGVyIHRoYW4gdG91 Y2hpbmcgdGhlIGJhdGNoIGFycmF5LCB3aGljaCBpcworCSAqIG1pZC1mbHVzaC4KKwkgKi8KKwlp ZiAoZnBlbnRyeS0+Zmx1c2hpbmcpCisJeworCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtf cmVsLCBuZXdzbG90KTsKKwkJcmV0dXJuOworCX0KKworCS8qIEJ1ZmZlciB0aGUgcm93IGlmIHRo ZXJlIGlzIHJvb207IG90aGVyd2lzZSBpdCBpcyBmbHVzaGVkIGJlbG93LiAqLworCWlmIChmcGVu dHJ5LT5iYXRjaF9jb3VudCA8IFJJX0ZBU1RQQVRIX0JBVENIX1NJWkUpCisJeworCQlNZW1vcnlD b250ZXh0IG9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQp OworCQlmcGVudHJ5LT5iYXRjaFtmcGVudHJ5LT5iYXRjaF9jb3VudF0gPQorCQkJRXhlY0NvcHlT bG90SGVhcFR1cGxlKG5ld3Nsb3QpOworCQlmcGVudHJ5LT5iYXRjaF9jb3VudCsrOworCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9CiAKLQlpZiAoZnBlbnRyeS0+YmF0Y2hfY291 bnQgPj0gUklfRkFTVFBBVEhfQkFUQ0hfU0laRSkKKwkvKiBGbHVzaCBhcyBzb29uIGFzIHRoZSBi YXRjaCBpcyBmdWxsLiAqLworCWlmIChmcGVudHJ5LT5iYXRjaF9jb3VudCA9PSBSSV9GQVNUUEFU SF9CQVRDSF9TSVpFKQogCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZnBlbnRyeSwgZmtfcmVsLCBy aWluZm8pOwogfQogCkBAIC0yOTQ0LDEzICsyOTY2LDMwIEBAIHJpX0Zhc3RQYXRoQmF0Y2hGbHVz aChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwsCiAJfQogCUFzc2Vy dChyaWluZm8tPmZwbWV0YSk7CiAKLQkvKiBTa2lwIGFycmF5IG92ZXJoZWFkIGZvciBzaW5nbGUt cm93IGJhdGNoZXMuICovCi0JaWYgKHJpaW5mby0+bmtleXMgPT0gMSAmJiBmcGVudHJ5LT5iYXRj aF9jb3VudCA+IDEpCi0JCXZpb2xhdGlvbl9pbmRleCA9IHJpX0Zhc3RQYXRoRmx1c2hBcnJheShm cGVudHJ5LCBma19zbG90LCByaWluZm8sCi0JCQkJCQkJCQkJCQlma19yZWwsIHNuYXBzaG90LCBz Y2FuZGVzYyk7Ci0JZWxzZQotCQl2aW9sYXRpb25faW5kZXggPSByaV9GYXN0UGF0aEZsdXNoTG9v cChmcGVudHJ5LCBma19zbG90LCByaWluZm8sCi0JCQkJCQkJCQkJCSAgIGZrX3JlbCwgc25hcHNo b3QsIHNjYW5kZXNjKTsKKwkvKgorCSAqIFRoZSBwcm9iZSBydW5zIHVzZXItZGVmaW5lZCBjYXN0 IGFuZCBlcXVhbGl0eSBmdW5jdGlvbnMuICBTZXQgdGhlCisJICogZmx1c2hpbmcgZmxhZyBhcm91 bmQgaXQgc28gYSByZS1lbnRyYW50IHJpX0Zhc3RQYXRoQmF0Y2hBZGQgb24gdGhpcworCSAqIGVu dHJ5IHRha2VzIHRoZSBwZXItcm93IHBhdGgsIGFuZCBjbGVhciBpdCBldmVuIG9uIGVycm9yIHNv IHRoZSBlbnRyeQorCSAqIGlzIHJldXNhYmxlIGlmIHRoZSBlcnJvciBpcyBjYXVnaHQgYnkgYSBz YXZlcG9pbnQuCisJICovCisJQXNzZXJ0KCFmcGVudHJ5LT5mbHVzaGluZyk7CisJZnBlbnRyeS0+ Zmx1c2hpbmcgPSB0cnVlOworCVBHX1RSWSgpOworCXsKKwkJLyogU2tpcCBhcnJheSBvdmVyaGVh ZCBmb3Igc2luZ2xlLXJvdyBiYXRjaGVzLiAqLworCQlpZiAocmlpbmZvLT5ua2V5cyA9PSAxICYm IGZwZW50cnktPmJhdGNoX2NvdW50ID4gMSkKKwkJCXZpb2xhdGlvbl9pbmRleCA9IHJpX0Zhc3RQ YXRoRmx1c2hBcnJheShmcGVudHJ5LCBma19zbG90LCByaWluZm8sCisJCQkJCQkJCQkJCQkJZmtf cmVsLCBzbmFwc2hvdCwgc2NhbmRlc2MpOworCQllbHNlCisJCQl2aW9sYXRpb25faW5kZXggPSBy aV9GYXN0UGF0aEZsdXNoTG9vcChmcGVudHJ5LCBma19zbG90LCByaWluZm8sCisJCQkJCQkJCQkJ CQkgICBma19yZWwsIHNuYXBzaG90LCBzY2FuZGVzYyk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7 CisJCWZwZW50cnktPmZsdXNoaW5nID0gZmFsc2U7CisJCWZwZW50cnktPmJhdGNoX2NvdW50ID0g MDsKKwl9CisJUEdfRU5EX1RSWSgpOwogCiAJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlZF91 c2VyaWQsIHNhdmVkX3NlY19jb250ZXh0KTsKIAlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3Qp OwpAQCAtMjk2Niw5ICszMDA1LDYgQEAgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRo RW50cnkgKmZwZW50cnksIFJlbGF0aW9uIGZrX3JlbCwKIAogCU1lbW9yeUNvbnRleHRSZXNldChm cGVudHJ5LT5mbHVzaF9jeHQpOwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwotCi0J LyogUmVzZXQuICovCi0JZnBlbnRyeS0+YmF0Y2hfY291bnQgPSAwOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dAppbmRleCA4YjNiMjY4ZGUwZi4uZTA4 ZGZmOTlmMDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9r ZXkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CkBA IC0zNzEyLDMgKzM3MTIsNTkgQEAgSU5TRVJUIElOVE8gZnBfcGtfZHVwIFZBTFVFUyAoMSk7CiBD UkVBVEUgVEFCTEUgZnBfZmtfZHVwIChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2R1cCk7CiBJTlNF UlQgSU5UTyBmcF9ma19kdXAgU0VMRUNUIDEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsK IERST1AgVEFCTEUgZnBfZmtfZHVwLCBmcF9wa19kdXA7CistLSBSZS1lbnRyYW50IEZLIGZhc3Qt cGF0aDogRE1MIG9uIHRoZSBzYW1lIEZLIHRhYmxlIGZyb20gYSBjYXN0IGZ1bmN0aW9uCistLSBk dXJpbmcgYSBmdWxsLWJhdGNoIGZsdXNoIG11c3Qgbm90IGNvcnJ1cHQgdGhlIGJhdGNoIGFycmF5 LgorQ1JFQVRFIFRBQkxFIGZwX3JlZW50cnlfcGsgKGlkIGludCBQUklNQVJZIEtFWSk7CitJTlNF UlQgSU5UTyBmcF9yZWVudHJ5X3BrIFZBTFVFUyAoMSksICgyKTsKK0NSRUFURSBUWVBFIGZwX3Zj aCBBUyAodiBpbnQpOworQ1JFQVRFIEZVTkNUSU9OIGZwX3ZjYXN0KGZwX3ZjaCkgUkVUVVJOUyBp bnQgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKyAgICBJRiAkMS52ID0gMSBUSEVOCisg ICAgICAgIElOU0VSVCBJTlRPIGZwX3JlZW50cnlfZmsgVkFMVUVTIChyb3coMik6OmZwX3ZjaCk7 CisgICAgRU5EIElGOworICAgIFJFVFVSTiAkMS52OworRU5EJCQ7CitDUkVBVEUgQ0FTVCAoZnBf dmNoIEFTIGludCkgV0lUSCBGVU5DVElPTiBmcF92Y2FzdChmcF92Y2gpIEFTIElNUExJQ0lUOwor Q1JFQVRFIFRBQkxFIGZwX3JlZW50cnlfZmsgKGEgZnBfdmNoCisgICAgUkVGRVJFTkNFUyBmcF9y ZWVudHJ5X3BrIChpZCkpOworLS0gRmlsbCBleGFjdGx5IG9uZSBiYXRjaCBzbyB0aGUgZmx1c2gg ZmlyZXM7IHRoZSBjYXN0IHJlLWVudGVycyB3aXRoIERNTAorLS0gb24gdGhlIHNhbWUgRksgYW5k IG11c3QgdGFrZSB0aGUgcGVyLXJvdyBwYXRoLgorSU5TRVJUIElOVE8gZnBfcmVlbnRyeV9mayBT RUxFQ1Qgcm93KDEpOjpmcF92Y2ggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNjQpOworU0VMRUNU IGEsIGNvdW50KCopIEZST00gZnBfcmVlbnRyeV9mayBHUk9VUCBCWSBhIE9SREVSIEJZIGE7Cisg IGEgIHwgY291bnQgCistLS0tLSstLS0tLS0tCisgKDEpIHwgICAgNjQKKyAoMikgfCAgICA2NAor KDIgcm93cykKKworRFJPUCBUQUJMRSBmcF9yZWVudHJ5X2ZrLCBmcF9yZWVudHJ5X3BrOworRFJP UCBDQVNUIChmcF92Y2ggQVMgaW50KTsKK0RST1AgRlVOQ1RJT04gZnBfdmNhc3QoZnBfdmNoKTsK K0RST1AgVFlQRSBmcF92Y2g7CistLSBGbHVzaCBlcnJvciBjYXVnaHQgYnkgYSBzYXZlcG9pbnQg bXVzdCBsZWF2ZSB0aGUgZW50cnkgZW1wdHkgYW5kIHJldXNhYmxlLgorQ1JFQVRFIFRBQkxFIGZw X3JlZW50cnlfcGsyIChpZCBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcmVlbnRy eV9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9yZWVudHJ5X2ZrMiAoYSBpbnQgUkVG RVJFTkNFUyBmcF9yZWVudHJ5X3BrMiAoaWQpKTsKK0RPICQkCitCRUdJTgorICAgIC0tIEEgYmF0 Y2ggY29udGFpbmluZyBhIHZpb2xhdGluZyByb3c7IHRoZSBmbHVzaCByZXBvcnRzIHRoZSB2aW9s YXRpb24uCisgICAgQkVHSU4KKyAgICAgICAgSU5TRVJUIElOVE8gZnBfcmVlbnRyeV9mazIgU0VM RUNUIENBU0UgV0hFTiBnID0gMzIgVEhFTiA5OTkgRUxTRSAxIEVORAorICAgICAgICAgICAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgNjQpIGc7CisgICAgRVhDRVBUSU9OIFdIRU4gZm9yZWlnbl9r ZXlfdmlvbGF0aW9uIFRIRU4KKyAgICAgICAgUkFJU0UgTk9USUNFICdjYXVnaHQgZmsgdmlvbGF0 aW9uJzsKKyAgICBFTkQ7CisKKyAgICAtLSBSZXVzZSB0aGUgc2FtZSBGSyB3aXRoIGEgZnVsbCBi YXRjaCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gIFRoZQorICAgIC0tIGVudHJ5IG11c3QgYmUg ZW1wdHkgYWZ0ZXIgdGhlIGNhdWdodCB2aW9sYXRpb246IG5vIHN0YWxlIHJvd3MgZnJvbSB0aGUK KyAgICAtLSByb2xsZWQtYmFjayBiYXRjaCAoaW4gcGFydGljdWxhciBubyA5OTkpLCBhbmQgbm8g YXJyYXkgb3ZlcmZsb3cuCisgICAgSU5TRVJUIElOVE8gZnBfcmVlbnRyeV9mazIgU0VMRUNUIDEg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNjQpOworRU5EJCQ7CitOT1RJQ0U6ICBjYXVnaHQgZmsg dmlvbGF0aW9uCitTRUxFQ1QgY291bnQoKiksIG1heChhKSBGUk9NIGZwX3JlZW50cnlfZmsyOyAg LS0gNjQgcm93cywgbWF4IDEKKyBjb3VudCB8IG1heCAKKy0tLS0tLS0rLS0tLS0KKyAgICA2NCB8 ICAgMQorKDEgcm93KQorCitEUk9QIFRBQkxFIGZwX3JlZW50cnlfZmsyLCBmcF9yZWVudHJ5X3Br MjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAppbmRleCA3ZWI4NmIxODhmMC4uODcz ODExOTRmNDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKQEAgLTI2ODAsMyAr MjY4MCw0OSBAQCBJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVTICgxKTsKIENSRUFURSBUQUJM RSBmcF9ma19kdXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVwKTsKIElOU0VSVCBJTlRPIGZw X2ZrX2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOwogRFJPUCBUQUJM RSBmcF9ma19kdXAsIGZwX3BrX2R1cDsKKworLS0gUmUtZW50cmFudCBGSyBmYXN0LXBhdGg6IERN TCBvbiB0aGUgc2FtZSBGSyB0YWJsZSBmcm9tIGEgY2FzdCBmdW5jdGlvbgorLS0gZHVyaW5nIGEg ZnVsbC1iYXRjaCBmbHVzaCBtdXN0IG5vdCBjb3JydXB0IHRoZSBiYXRjaCBhcnJheS4KK0NSRUFU RSBUQUJMRSBmcF9yZWVudHJ5X3BrIChpZCBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8g ZnBfcmVlbnRyeV9wayBWQUxVRVMgKDEpLCAoMik7CitDUkVBVEUgVFlQRSBmcF92Y2ggQVMgKHYg aW50KTsKK0NSRUFURSBGVU5DVElPTiBmcF92Y2FzdChmcF92Y2gpIFJFVFVSTlMgaW50IExBTkdV QUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisgICAgSUYgJDEudiA9IDEgVEhFTgorICAgICAgICBJ TlNFUlQgSU5UTyBmcF9yZWVudHJ5X2ZrIFZBTFVFUyAocm93KDIpOjpmcF92Y2gpOworICAgIEVO RCBJRjsKKyAgICBSRVRVUk4gJDEudjsKK0VORCQkOworQ1JFQVRFIENBU1QgKGZwX3ZjaCBBUyBp bnQpIFdJVEggRlVOQ1RJT04gZnBfdmNhc3QoZnBfdmNoKSBBUyBJTVBMSUNJVDsKK0NSRUFURSBU QUJMRSBmcF9yZWVudHJ5X2ZrIChhIGZwX3ZjaAorICAgIFJFRkVSRU5DRVMgZnBfcmVlbnRyeV9w ayAoaWQpKTsKKy0tIEZpbGwgZXhhY3RseSBvbmUgYmF0Y2ggc28gdGhlIGZsdXNoIGZpcmVzOyB0 aGUgY2FzdCByZS1lbnRlcnMgd2l0aCBETUwKKy0tIG9uIHRoZSBzYW1lIEZLIGFuZCBtdXN0IHRh a2UgdGhlIHBlci1yb3cgcGF0aC4KK0lOU0VSVCBJTlRPIGZwX3JlZW50cnlfZmsgU0VMRUNUIHJv dygxKTo6ZnBfdmNoIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDY0KTsKK1NFTEVDVCBhLCBjb3Vu dCgqKSBGUk9NIGZwX3JlZW50cnlfZmsgR1JPVVAgQlkgYSBPUkRFUiBCWSBhOworRFJPUCBUQUJM RSBmcF9yZWVudHJ5X2ZrLCBmcF9yZWVudHJ5X3BrOworRFJPUCBDQVNUIChmcF92Y2ggQVMgaW50 KTsKK0RST1AgRlVOQ1RJT04gZnBfdmNhc3QoZnBfdmNoKTsKK0RST1AgVFlQRSBmcF92Y2g7CisK Ky0tIEZsdXNoIGVycm9yIGNhdWdodCBieSBhIHNhdmVwb2ludCBtdXN0IGxlYXZlIHRoZSBlbnRy eSBlbXB0eSBhbmQgcmV1c2FibGUuCitDUkVBVEUgVEFCTEUgZnBfcmVlbnRyeV9wazIgKGlkIGlu dCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9yZWVudHJ5X3BrMiBWQUxVRVMgKDEpOwor Q1JFQVRFIFRBQkxFIGZwX3JlZW50cnlfZmsyIChhIGludCBSRUZFUkVOQ0VTIGZwX3JlZW50cnlf cGsyIChpZCkpOworRE8gJCQKK0JFR0lOCisgICAgLS0gQSBiYXRjaCBjb250YWluaW5nIGEgdmlv bGF0aW5nIHJvdzsgdGhlIGZsdXNoIHJlcG9ydHMgdGhlIHZpb2xhdGlvbi4KKyAgICBCRUdJTgor ICAgICAgICBJTlNFUlQgSU5UTyBmcF9yZWVudHJ5X2ZrMiBTRUxFQ1QgQ0FTRSBXSEVOIGcgPSAz MiBUSEVOIDk5OSBFTFNFIDEgRU5ECisgICAgICAgICAgICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCA2NCkgZzsKKyAgICBFWENFUFRJT04gV0hFTiBmb3JlaWduX2tleV92aW9sYXRpb24gVEhFTgor ICAgICAgICBSQUlTRSBOT1RJQ0UgJ2NhdWdodCBmayB2aW9sYXRpb24nOworICAgIEVORDsKKwor ICAgIC0tIFJldXNlIHRoZSBzYW1lIEZLIHdpdGggYSBmdWxsIGJhdGNoIGluIHRoZSBzYW1lIHRy YW5zYWN0aW9uLiAgVGhlCisgICAgLS0gZW50cnkgbXVzdCBiZSBlbXB0eSBhZnRlciB0aGUgY2F1 Z2h0IHZpb2xhdGlvbjogbm8gc3RhbGUgcm93cyBmcm9tIHRoZQorICAgIC0tIHJvbGxlZC1iYWNr IGJhdGNoIChpbiBwYXJ0aWN1bGFyIG5vIDk5OSksIGFuZCBubyBhcnJheSBvdmVyZmxvdy4KKyAg ICBJTlNFUlQgSU5UTyBmcF9yZWVudHJ5X2ZrMiBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCA2NCk7CitFTkQkJDsKK1NFTEVDVCBjb3VudCgqKSwgbWF4KGEpIEZST00gZnBfcmVlbnRy eV9mazI7ICAtLSA2NCByb3dzLCBtYXggMQorRFJPUCBUQUJMRSBmcF9yZWVudHJ5X2ZrMiwgZnBf cmVlbnRyeV9wazI7Ci0tIAoyLjQ3LjMKCg== --000000000000e48e190653e53908 Content-Type: application/octet-stream; name="v2-0002-Confine-RI-fast-path-batching-to-the-top-transact.patch" Content-Disposition: attachment; filename="v2-0002-Confine-RI-fast-path-batching-to-the-top-transact.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq8176xk0 RnJvbSBkZDg3YTJlNDVmMmYyZGJkY2NkNGQ2NWNiZDkwMjU2YjdmNzJlMjc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMTAgSnVuIDIwMjYgMjE6MTE6MTAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy IDIvMl0gQ29uZmluZSBSSSBmYXN0LXBhdGggYmF0Y2hpbmcgdG8gdGhlIHRvcCB0cmFuc2FjdGlv bgogbGV2ZWwKClRoZSBGSyBmYXN0LXBhdGggYmF0Y2hpbmcgYWRkZWQgaW4gYjdiMjdlYjQxYTUg YnVmZmVycyByb3dzIGluIGEKdHJhbnNhY3Rpb24tbGl2ZWQgY2FjaGUgKHJpX2Zhc3RwYXRoX2Nh Y2hlKSBrZXllZCBieSBjb25zdHJhaW50IE9JRC4KUnVubmluZyB1c2VyLWRlZmluZWQgY2FzdCBh bmQgZXF1YWxpdHkgZnVuY3Rpb25zIGR1cmluZyBhIGJhdGNoIGZsdXNoLAp0b2dldGhlciB3aXRo IHRoZSBjYWNoZSdzIGxpZmV0aW1lIGFuZCBpdGVyYXRpb24sIGV4cG9zZWQgdHdvIGRlZmVjdHMK cmVhY2hhYmxlIGJ5IGFuIHVucHJpdmlsZWdlZCB0YWJsZSBvd25lci4KCkZpcnN0LCBvbiBzdWJ0 cmFuc2FjdGlvbiBhYm9ydCByaV9GYXN0UGF0aFN1YlhhY3RDYWxsYmFjayBkaXNjYXJkZWQgdGhl CmVudGlyZSBjYWNoZS4gIEFuIGVudHJ5J3MgYmF0Y2ggaG9sZHMgcm93cyBidWZmZXJlZCBieSB0 aGUgZW5jbG9zaW5nCnRyYW5zYWN0aW9uLCBub3QganVzdCB0aGUgYWJvcnRpbmcgc3VieGFjdCAt LSB0aGUgY2FjaGUgaXMga2V5ZWQgYnkKY29uc3RyYWludCwgc28gYSBzaW5nbGUgZW50cnkgY2Fu IG1peCByb3dzIGZyb20gbXVsdGlwbGUgc3VieGFjdCBsZXZlbHMuCkFuIGludGVybmFsIHN1Ynhh Y3QgYWJvcnQgZHVyaW5nIGFmdGVyLXRyaWdnZXIgZmlyaW5nIChlLmcuIGEgUEwvcGdTUUwKQkVH SU4gLi4uIEVYQ0VQVElPTiBibG9jaykgdGhlcmVmb3JlIGRyb3BwZWQgYnVmZmVyZWQgcm93cyBv ZiB0aGUgb3V0ZXIKdHJhbnNhY3Rpb24gd2l0aG91dCBydW5uaW5nIHRoZWlyIEZLIGNoZWNrcywg bGV0dGluZyBvcnBoYW4gcm93cyBjb21taXQKYmVoaW5kIGEgY29uc3RyYWludCB0aGF0IHN0aWxs IHJlcG9ydGVkIGl0c2VsZiB2YWxpZC4gIFRoZSBkaXNjYXJkIGFsc28KbGVmdCByZWxhdGlvbnMg b3BlbmVkIGJ5IHRoZSBiYXRjaCB1bmNsb3NlZCwgcHJvZHVjaW5nICJyZXNvdXJjZSB3YXMgbm90 CmNsb3NlZCIgd2FybmluZ3MuCgpTZWNvbmQsIHJpX0Zhc3RQYXRoRW5kQmF0Y2ggZmx1c2hlcyBi eSBpdGVyYXRpbmcgdGhlIGNhY2hlIHdpdGgKaGFzaF9zZXFfc2VhcmNoLiAgSWYgZmx1c2gtdGlt ZSB1c2VyIGNvZGUgaW5zZXJ0cyBpbnRvIGEgZGlmZmVyZW50CmZhc3QtcGF0aCBGSyB0YWJsZSwg YSBuZXcgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGNhY2hlIG1pZC1zY2FuOyBpdCBtYXkKbGFuZCBp biBhIGJ1Y2tldCB0aGUgc2NhbiBoYXMgYWxyZWFkeSBwYXNzZWQgYW5kIG5ldmVyIGJlIHJlYWNo ZWQsIGFuZApyaV9GYXN0UGF0aFRlYXJkb3duIHRoZW4gZGVzdHJveXMgdGhlIGNhY2hlIHdpdGhv dXQgZmx1c2hpbmcgaXQsCnNpbGVudGx5IGRyb3BwaW5nIHRoYXQgY2hlY2suCgpDbGVhbmx5IHVu d2luZGluZyB0aGUgY2FjaGUgb24gc3VieGFjdCBhYm9ydCB3b3VsZCByZXF1aXJlIHRyYWNraW5n IHRoZQpvcmlnaW5hdGluZyBzdWJ4YWN0IG9mIGVhY2ggYnVmZmVyZWQgcm93LCBzaW5jZSByb3dz IGZyb20gZGlmZmVyZW50CmxldmVscyBzaGFyZSBhbiBlbnRyeSAodGhlIGNhY2hlIGlzIGtleWVk IGJ5IGNvbnN0cmFpbnQpIGFuZCBkZWZlcnJlZApjb25zdHJhaW50cyBjYW5ub3QgYmUgZmx1c2hl ZCBlYXJseSBhdCBhIHN1YnhhY3QgYm91bmRhcnkuICBSYXRoZXIgdGhhbgphZGQgdGhhdCBib29r a2VlcGluZywgY29uZmluZSBiYXRjaGluZyB0byB0aGUgdG9wIHRyYW5zYWN0aW9uIGxldmVsOiBp bgpSSV9GS2V5X2NoZWNrLCB3aGVuIEdldEN1cnJlbnRUcmFuc2FjdGlvbk5lc3RMZXZlbCgpID4g MSwgdXNlIHRoZQpwZXItcm93IGZhc3QgcGF0aCAocmlfRmFzdFBhdGhDaGVjaykgaW5zdGVhZCBv ZiBidWZmZXJpbmcuICBSb3dzIGNoZWNrZWQKaW5zaWRlIGEgc3VidHJhbnNhY3Rpb24gYXJlIHRo ZW4gdmVyaWZpZWQgaW1tZWRpYXRlbHkgYW5kIHJvbGwgYmFjawpjbGVhbmx5IHdpdGggdGhlaXIg c3VidHJhbnNhY3Rpb24sIGFuZCB0aGUgY2FjaGUgb25seSBldmVyIGhvbGRzCnRvcC1sZXZlbCBy b3dzLiAgV2l0aCB0aGUgY2FjaGUgY29uZmluZWQgdG8gdGhlIHRvcCBsZXZlbCwgYQpzdWJ0cmFu c2FjdGlvbiBhYm9ydCBoYXMgbm90aGluZyBvZiBpdHMgb3duIHRvIGRpc2NhcmQsIHNvCnJpX0Zh c3RQYXRoU3ViWGFjdENhbGxiYWNrIGlzIHJlbW92ZWQgYWxvbmcgd2l0aCBpdHMgcmVnaXN0cmF0 aW9uLgoKRm9yIHRoZSBzZWNvbmQgZGVmZWN0LCBhZGQgYSBjYWNoZS13aWRlIGZsYWcgKHJpX2Zh c3RwYXRoX2ZsdXNoaW5nKSBzZXQKd2hpbGUgcmlfRmFzdFBhdGhFbmRCYXRjaCBpdGVyYXRlcyB0 aGUgY2FjaGUuICBBIHJlLWVudHJhbnQgRksgY2hlY2sKYXJyaXZpbmcgd2hpbGUgdGhlIGZsYWcg aXMgc2V0IHRha2VzIHRoZSBwZXItcm93IHBhdGggcmF0aGVyIHRoYW4gYWRkaW5nCmFuIGVudHJ5 IHRvIHRoZSBjYWNoZSBiZWluZyBzY2FubmVkLCBzbyBubyBlbnRyeSBjYW4gYmUgbWlzc2VkIGFu ZCB0b3JuCmRvd24gdW5mbHVzaGVkLiAgVGhlIGZsYWcgaXMgY2xlYXJlZCBpbiBhIFBHX0ZJTkFM TFkgc28gYSBmbHVzaCB0aGF0CnRocm93cyAoYSByZXBvcnRlZCB2aW9sYXRpb24gb3IgYW4gZXJy b3IgZnJvbSB1c2VyIGNvZGUpIGRvZXMgbm90IGxlYXZlCml0IHN0dWNrLiAgQXMgZGVmZW5zaXZl IGluc3VyYW5jZSBpdCBpcyBhbHNvIGNsZWFyZWQgaW4KcmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2so KSBhdCB0cmFuc2FjdGlvbiBlbmQuCgpUaGUgcGVyLXJvdyBmYXN0IHBhdGggc3RpbGwgYnlwYXNz ZXMgU1BJIGFuZCBzdGF5cyB3ZWxsIGFoZWFkIG9mIHRoZQpwcmUtMTkgU1BJLWJhc2VkIGNoZWNr LiAgQSBmdWxsZXIgZml4IHRoYXQgcHJlc2VydmVzIGJhdGNoaW5nIGFjcm9zcwpzdWJ0cmFuc2Fj dGlvbnMgLS0gd2hldGhlciBieSB0cmFja2luZyB0aGUgb3JpZ2luYXRpbmcgc3VieGFjdCBvZiBl YWNoCmJ1ZmZlcmVkIHJvdyBvciBieSBwZXItc3VieGFjdCBjYWNoZSBzdGFja3MgbWVyZ2VkIGlu dG8gdGhlIHBhcmVudCBvbgpjb21taXQgLS0gaXMgbGVmdCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4K ClRoZSBzdWJ0cmFuc2FjdGlvbi1hYm9ydCBjYXNlIGlzIGNvdmVyZWQgYnkgYSBuZXcgcmVncmVz c2lvbiB0ZXN0LiAgVGhlCm1pZC1zY2FuIGNyb3NzLXRhYmxlIGNhc2UgZGVwZW5kcyBvbiBoYXNo IGJ1Y2tldCBwbGFjZW1lbnQgYW5kIHNvIGlzIG5vdApyZWxpYWJseSByZXByb2R1Y2libGUgaW4g YSBwb3J0YWJsZSB0ZXN0LCBidXQgdGhlIGZsYWcgcHJldmVudHMgaXQgYnkKY29uc3RydWN0aW9u LgoKUmVwb3J0ZWQtYnk6IE5pa29sYXkgU2Ftb2todmFsb3YgPG5pa0Bwb3N0Z3Jlcy5haT4KUmV2 aWV3ZWQtYnk6IE5pa29sYXkgU2Ftb2todmFsb3YgPG5pa0Bwb3N0Z3Jlcy5haT4KUmV2aWV3ZWQt Ynk6IEF5dXNoIFRpd2FyaSA8YXl1c2h0aXdhcmkuc2xnMDFAZ21haWwuY29tPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBTTUyN2Q5ZXhSQ2RXcmhKT25BeGtfdkFDZzdzcl95UG9h SnBfK3VDRlkwcVA4dj1hd0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jICAgICAgIHwgODIgKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0IHwgMjQgKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsICAgICAgfCAyMyArKysrKysrCiAzIGZpbGVz IGNoYW5nZWQsIDEwMyBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IDZkMGQ0MjA0ODg2Li42YWQ1MjFmYmEzNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI2Nyw2ICsyNjcsNyBAQCBzdGF0aWMgZGNs aXN0X2hlYWQgcmlfY29uc3RyYWludF9jYWNoZV92YWxpZF9saXN0OwogCiBzdGF0aWMgSFRBQiAq cmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOwogc3RhdGljIGJvb2wgcmlfZmFzdHBhdGhfY2FsbGJh Y2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgcmlfZmFzdHBhdGhfZmx1c2hpbmcg PSBmYWxzZTsKIAogLyoKICAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTQ2OSwxNCAr NDcwLDMxIEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCSAqLwogCWlm IChyaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKHJpaW5mbykpCiAJewotCQlpZiAoQWZ0ZXJUcmln Z2VySXNBY3RpdmUoKSkKKwkJaWYgKEFmdGVyVHJpZ2dlcklzQWN0aXZlKCkgJiYKKwkJCUdldEN1 cnJlbnRUcmFuc2FjdGlvbk5lc3RMZXZlbCgpID09IDEgJiYKKwkJCSFyaV9mYXN0cGF0aF9mbHVz aGluZykKIAkJewogCQkJLyogQmF0Y2hlZCBwYXRoOiBidWZmZXIgYW5kIHByb2JlIGluIGdyb3Vw cyAqLwogCQkJcmlfRmFzdFBhdGhCYXRjaEFkZChyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CiAJ CX0KIAkJZWxzZQogCQl7Ci0JCQkvKiBBTFRFUiBUQUJMRSB2YWxpZGF0aW9uOiBwZXItcm93LCBu byBjYWNoZSAqLworCQkJLyoKKwkJCSAqIFBlci1yb3cgcGF0aCwgdXNlZCB3aGVuIGJhdGNoaW5n IGlzIG5vdCBzYWZlIG9yIG5vdAorCQkJICogYXBwbGljYWJsZToKKwkJCSAqCisJCQkgKiAtIEFM VEVSIFRBQkxFIHZhbGlkYXRpb24sIHdoZXJlIG5vIGFmdGVyLXRyaWdnZXIgZmlyaW5nIGlzCisJ CQkgKiAgIGFjdGl2ZTsKKwkJCSAqCisJCQkgKiAtIGFueSBGSyBjaGVjayBpbnNpZGUgYSBzdWJ0 cmFuc2FjdGlvbiwgc2luY2UgdGhlIGJhdGNoIGNhY2hlCisJCQkgKiAgIGlzIGNvbmZpbmVkIHRv IHRoZSB0b3AgdHJhbnNhY3Rpb24gbGV2ZWwgKGl0IGNhbm5vdCBiZQorCQkJICogICBjbGVhbmx5 IHVud291bmQgb24gc3VieGFjdCBhYm9ydCk7CisJCQkgKgorCQkJICogLSBhIHJlLWVudHJhbnQg Y2hlY2sgZnJvbSB1c2VyIGNhc3Qvb3BlcmF0b3IgY29kZSBydW5uaW5nCisJCQkgKiAgIGR1cmlu ZyBhIGJhdGNoIGZsdXNoLCBzaW5jZSBhZGRpbmcgYSBjYWNoZSBlbnRyeSB3aGlsZQorCQkJICog ICByaV9GYXN0UGF0aEVuZEJhdGNoIGlzIGl0ZXJhdGluZyB0aGUgY2FjaGUgY291bGQgbGVhdmUg aXQKKwkJCSAqICAgdW5mbHVzaGVkLgorCQkJICovCiAJCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5m bywgZmtfcmVsLCBuZXdzbG90KTsKIAkJfQogCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OwpAQCAtNDE3NCwxOSArNDE5Miw0MSBAQCByaV9GYXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZykK IAlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JLyogRmx1c2gg YW55IHBhcnRpYWwgYmF0Y2hlcyAtLSBjYW4gdGhyb3cgRVJST1IgKi8KLQloYXNoX3NlcV9pbml0 KCZzdGF0dXMsIHJpX2Zhc3RwYXRoX2NhY2hlKTsKLQl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFf c2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCS8qCisJICogU2V0IGEgZmxhZyBmb3IgdGhlIGR1 cmF0aW9uIG9mIHRoZSBzY2FuIHNvIHRoYXQgYW55IEZLIGNoZWNrIHRyaWdnZXJlZAorCSAqIGJ5 IHVzZXIgY2FzdCBvciBvcGVyYXRvciBjb2RlIGR1cmluZyBhIGZsdXNoIHRha2VzIHRoZSBwZXIt cm93IHBhdGgKKwkgKiBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBlbnRyeSB0byB0aGUgY2FjaGUg d2UgYXJlIGl0ZXJhdGluZy4gIEEgbmV3CisJICogZW50cnkgY291bGQgbGFuZCBpbiBhbiBhbHJl YWR5LXNjYW5uZWQgYnVja2V0IGFuZCB0aGVuIGJlIHRvcm4gZG93bgorCSAqIHVuZmx1c2hlZCBi ZWxvdy4KKwkgKgorCSAqIFRoZSBmbHVzaCBjYW4gdGhyb3cgRVJST1IgKGEgcmVwb3J0ZWQgY29u c3RyYWludCB2aW9sYXRpb24sIG9yIGFuIGVycm9yCisJICogZnJvbSB0aGUgdXNlciBjb2RlIGl0 IHJ1bnMpLiAgSW4gdGhhdCBjYXNlIHJpX0Zhc3RQYXRoVGVhcmRvd24gYmVsb3cgaXMKKwkgKiBz a2lwcGVkOyB0aGUgUmVzb3VyY2VPd25lciBhbmQgdGhlIHRyYW5zYWN0aW9uLWVuZCBjYWxsYmFj ayBoYW5kbGUKKwkgKiByZXNvdXJjZSBjbGVhbnVwIG9uIHRoZSBhYm9ydCBwYXRoLiAgVGhlIFBH X0ZJTkFMTFkgb25seSByZXNldHMgdGhlCisJICogZmxhZyBhbmQgZGVsaWJlcmF0ZWx5IGRvZXMg bm90IGF0dGVtcHQgdGVhcmRvd24uCisJICovCisJQXNzZXJ0KCFyaV9mYXN0cGF0aF9mbHVzaGlu Zyk7CisJcmlfZmFzdHBhdGhfZmx1c2hpbmcgPSB0cnVlOworCVBHX1RSWSgpOwogCXsKLQkJaWYg KGVudHJ5LT5iYXRjaF9jb3VudCA+IDApCisJCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgcmlfZmFz dHBhdGhfY2FjaGUpOworCQl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMp KSAhPSBOVUxMKQogCQl7Ci0JCQlSZWxhdGlvbglma19yZWwgPSB0YWJsZV9vcGVuKGVudHJ5LT5m a19yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKLQkJCVJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8g PSByaV9Mb2FkQ29uc3RyYWludEluZm8oZW50cnktPmNvbm9pZCk7CisJCQlpZiAoZW50cnktPmJh dGNoX2NvdW50ID4gMCkKKwkJCXsKKwkJCQlSZWxhdGlvbglma19yZWwgPSB0YWJsZV9vcGVuKGVu dHJ5LT5ma19yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlSSV9Db25zdHJhaW50SW5mbyAq cmlpbmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZvKGVudHJ5LT5jb25vaWQpOwogCi0JCQlyaV9G YXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3JlbCwgcmlpbmZvKTsKLQkJCXRhYmxlX2Nsb3Nl KGZrX3JlbCwgTm9Mb2NrKTsKKwkJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3Jl bCwgcmlpbmZvKTsKKwkJCQl0YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCQl9CiAJCX0K IAl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJcmlfZmFzdHBhdGhfZmx1c2hpbmcgPSBmYWxzZTsK Kwl9CisJUEdfRU5EX1RSWSgpOwogCiAJcmlfRmFzdFBhdGhUZWFyZG93bigpOwogfQpAQCAtNDIz OCwyMiArNDI3OCwxMyBAQCByaV9GYXN0UGF0aFhhY3RDYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQs IHZvaWQgKmFyZykKIAkgKi8KIAlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CiAJcmlfZmFzdHBh dGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOwotfQogCi1zdGF0aWMgdm9pZAotcmlfRmFz dFBhdGhTdWJYYWN0Q2FsbGJhY2soU3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklk IG15U3ViaWQsCi0JCQkJCQkgICBTdWJUcmFuc2FjdGlvbklkIHBhcmVudFN1YmlkLCB2b2lkICph cmcpCi17Ci0JaWYgKGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRfQUJPUlRfU1VCKQotCXsKLQkJLyoK LQkJICogUmVzb3VyY2VPd25lciBhbHJlYWR5IHJlbGVhc2VkIHJlbGF0aW9ucy4gIE5VTEwgdGhl IHN0YXRpYyBwb2ludGVycwotCQkgKiBzbyB0aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxs YmFjayBiZWNvbWVzIGEgbm8tb3AgZm9yIHRoZSByZXN0Ci0JCSAqIG9mIHRoaXMgdHJhbnNhY3Rp b24uCi0JCSAqLwotCQlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7Ci0JCXJpX2Zhc3RwYXRoX2Nh bGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKLQl9CisJLyoKKwkgKiBBbHNvIGNsZWFyIHRoZSBp bi1mbHVzaCBmbGFnLiAgcmlfRmFzdFBhdGhFbmRCYXRjaCgpIGFscmVhZHkgY2xlYXJzIGl0CisJ ICogdmlhIFBHX0ZJTkFMTFksIHNvIHRoaXMgaXMganVzdCBkZWZlbnNpdmU6IGl0IGtlZXBzIGEg c3RhbGUgZmxhZyBmcm9tCisJICogc3Vydml2aW5nIGludG8gdGhlIG5leHQgdHJhbnNhY3Rpb24g c2hvdWxkIGFueSBmdXR1cmUgcGF0aCBsZWF2ZSBpdCBzZXQuCisJICovCisJcmlfZmFzdHBhdGhf Zmx1c2hpbmcgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTQyODAsNyArNDMxMSw2IEBAIHJpX0Zhc3RQ YXRoR2V0RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtf cmVsKQogCQlpZiAoIXJpX2Zhc3RwYXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCkKIAkJewog CQkJUmVnaXN0ZXJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2ssIE5VTEwpOwot CQkJUmVnaXN0ZXJTdWJYYWN0Q2FsbGJhY2socmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2ssIE5V TEwpOwogCQkJcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKIAkJ fQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IGUwOGRm Zjk5ZjAzLi5lMTU2MzE0NGQ0YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9mb3JlaWduX2tleS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWdu X2tleS5vdXQKQEAgLTM3NjgsMyArMzc2OCwyNyBAQCBTRUxFQ1QgY291bnQoKiksIG1heChhKSBG Uk9NIGZwX3JlZW50cnlfZmsyOyAgLS0gNjQgcm93cywgbWF4IDEKICgxIHJvdykKIAogRFJPUCBU QUJMRSBmcF9yZWVudHJ5X2ZrMiwgZnBfcmVlbnRyeV9wazI7CistLSBTdWJ0cmFuc2FjdGlvbiBh Ym9ydCBkdXJpbmcgYWZ0ZXItdHJpZ2dlciBmaXJpbmcgbXVzdCBub3QgZHJvcCBGSyBjaGVja3MK Ky0tIGZvciByb3dzIGJ1ZmZlcmVkIGVhcmxpZXIgaW4gdGhlIHNhbWUgc3RhdGVtZW50LiAgQmF0 Y2hpbmcgaXMgY29uZmluZWQgdG8KKy0tIHRoZSB0b3AgdHJhbnNhY3Rpb24gbGV2ZWwgYW5kIHRo ZSBidWZmZXJlZCBiYXRjaCBpcyBubyBsb25nZXIgZGlzY2FyZGVkIG9uCistLSBzdWJ4YWN0IGFi b3J0LCBzbyB0aGUgdmlvbGF0aW5nIHJvd3MgYXJlIGRldGVjdGVkLgorQ1JFQVRFIFRBQkxFIGZw X3N1YnhhY3RfcGsgKGlkIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9zdWJ4YWN0 X3BrIFNFTEVDVCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBnOworQ1JFQVRFIFRBQkxF IGZwX3N1YnhhY3RfZmsgKGEgaW50LCB0YWcgdGV4dCk7CitBTFRFUiBUQUJMRSBmcF9zdWJ4YWN0 X2ZrIEFERCBDT05TVFJBSU5UIGZwX3N1YnhhY3RfZmtfZmtleQorICAgIEZPUkVJR04gS0VZIChh KSBSRUZFUkVOQ0VTIGZwX3N1YnhhY3RfcGsgKGlkKTsKK0NSRUFURSBGVU5DVElPTiBmcF9hYm9y dF9zdWJ4YWN0KCkgUkVUVVJOUyB0cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lO CisgICAgSUYgTkVXLnRhZyA9ICdib29tJyBUSEVOCisgICAgICAgIEJFR0lOIFBFUkZPUk0gMS8w OyBFWENFUFRJT04gV0hFTiBkaXZpc2lvbl9ieV96ZXJvIFRIRU4gTlVMTDsgRU5EOworICAgIEVO RCBJRjsKKyAgICBSRVRVUk4gTkVXOworRU5EJCQ7CitDUkVBVEUgVFJJR0dFUiBmcF9zdWJ4YWN0 X3RyZyBBRlRFUiBJTlNFUlQgT04gZnBfc3VieGFjdF9maworICAgIEZPUiBFQUNIIFJPVyBFWEVD VVRFIEZVTkNUSU9OIGZwX2Fib3J0X3N1YnhhY3QoKTsKK0lOU0VSVCBJTlRPIGZwX3N1YnhhY3Rf ZmsgVkFMVUVTICg5OTksICdiYWQnKSwgKDAsICdib29tJyksICgxLCAnb2snKTsKK0VSUk9SOiAg aW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfc3VieGFjdF9mayIgdmlvbGF0ZXMgZm9yZWln biBrZXkgY29uc3RyYWludCAiZnBfc3VieGFjdF9ma19ma2V5IgorREVUQUlMOiAgS2V5IChhKT0o OTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfc3VieGFjdF9wayIuCitEUk9QIFRSSUdH RVIgZnBfc3VieGFjdF90cmcgT04gZnBfc3VieGFjdF9mazsKK0RST1AgRlVOQ1RJT04gZnBfYWJv cnRfc3VieGFjdCgpOworRFJPUCBUQUJMRSBmcF9zdWJ4YWN0X2ZrLCBmcF9zdWJ4YWN0X3BrOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCmluZGV4IDg3MzgxMTk0ZjQxLi5hYmViODU5 NjViOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbApAQCAtMjcyNiwzICsyNzI2 LDI2IEBAIEJFR0lOCiBFTkQkJDsKIFNFTEVDVCBjb3VudCgqKSwgbWF4KGEpIEZST00gZnBfcmVl bnRyeV9mazI7ICAtLSA2NCByb3dzLCBtYXggMQogRFJPUCBUQUJMRSBmcF9yZWVudHJ5X2ZrMiwg ZnBfcmVlbnRyeV9wazI7CisKKy0tIFN1YnRyYW5zYWN0aW9uIGFib3J0IGR1cmluZyBhZnRlci10 cmlnZ2VyIGZpcmluZyBtdXN0IG5vdCBkcm9wIEZLIGNoZWNrcworLS0gZm9yIHJvd3MgYnVmZmVy ZWQgZWFybGllciBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQuICBCYXRjaGluZyBpcyBjb25maW5lZCB0 bworLS0gdGhlIHRvcCB0cmFuc2FjdGlvbiBsZXZlbCBhbmQgdGhlIGJ1ZmZlcmVkIGJhdGNoIGlz IG5vIGxvbmdlciBkaXNjYXJkZWQgb24KKy0tIHN1YnhhY3QgYWJvcnQsIHNvIHRoZSB2aW9sYXRp bmcgcm93cyBhcmUgZGV0ZWN0ZWQuCitDUkVBVEUgVEFCTEUgZnBfc3VieGFjdF9wayAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3N1YnhhY3RfcGsgU0VMRUNUIGcgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGc7CitDUkVBVEUgVEFCTEUgZnBfc3VieGFjdF9mayAoYSBp bnQsIHRhZyB0ZXh0KTsKK0FMVEVSIFRBQkxFIGZwX3N1YnhhY3RfZmsgQUREIENPTlNUUkFJTlQg ZnBfc3VieGFjdF9ma19ma2V5CisgICAgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfc3Vi eGFjdF9wayAoaWQpOworQ1JFQVRFIEZVTkNUSU9OIGZwX2Fib3J0X3N1YnhhY3QoKSBSRVRVUk5T IHRyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKyAgICBJRiBORVcudGFnID0g J2Jvb20nIFRIRU4KKyAgICAgICAgQkVHSU4gUEVSRk9STSAxLzA7IEVYQ0VQVElPTiBXSEVOIGRp dmlzaW9uX2J5X3plcm8gVEhFTiBOVUxMOyBFTkQ7CisgICAgRU5EIElGOworICAgIFJFVFVSTiBO RVc7CitFTkQkJDsKK0NSRUFURSBUUklHR0VSIGZwX3N1YnhhY3RfdHJnIEFGVEVSIElOU0VSVCBP TiBmcF9zdWJ4YWN0X2ZrCisgICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBfYWJv cnRfc3VieGFjdCgpOworSU5TRVJUIElOVE8gZnBfc3VieGFjdF9mayBWQUxVRVMgKDk5OSwgJ2Jh ZCcpLCAoMCwgJ2Jvb20nKSwgKDEsICdvaycpOworRFJPUCBUUklHR0VSIGZwX3N1YnhhY3RfdHJn IE9OIGZwX3N1YnhhY3RfZms7CitEUk9QIEZVTkNUSU9OIGZwX2Fib3J0X3N1YnhhY3QoKTsKK0RS T1AgVEFCTEUgZnBfc3VieGFjdF9maywgZnBfc3VieGFjdF9wazsKLS0gCjIuNDcuMwoK --000000000000e48e190653e53908--