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 1wSVsg-003EEi-2n for pgsql-hackers@arkaria.postgresql.org; Thu, 28 May 2026 08:14:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wSVsc-00BKMc-0t for pgsql-hackers@arkaria.postgresql.org; Thu, 28 May 2026 08:14:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wSVsb-00BKMT-1N for pgsql-hackers@lists.postgresql.org; Thu, 28 May 2026 08:14:14 +0000 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wSVsZ-000000018cM-2TzE for pgsql-hackers@postgresql.org; Thu, 28 May 2026 08:14:13 +0000 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-c8561fcb680so214504a12.3 for ; Thu, 28 May 2026 01:14:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779956051; cv=none; d=google.com; s=arc-20240605; b=DGDRGOOAj+2xYhJGeh9rzu+e+3jPCeX2d6LGi3vhj8qTNTz/nsuQuILs9Jt+M365+j 7CDRKEwlqXfSR55i6sJhEjdxT8B8mB8bvplx+xBjcdwmwjqW6BFXYsDUzSRObqvmVA29 GaiueBC8L3Y0NBl5jQlgTF9afV4jGXTyLgGmENUV/V2i5oVanqKtvtMUo5yLJapff0a0 365yusbphulCgLMQ4bfFzbYfRNaDGSRTkhtXpdZCXuxS4c8s1jeOcxo/HBT3z+GUdrj8 WwOw/O/vKw2xH26s/z8kHDq5/V4uo786wCxT3YZ9n5XJQeB503OP/Tm1veVn0aa/T+kA 3nhA== 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=ukUktAB5RO2yvavO4gdriPiNxSThh8w4oMGMgmN0Ax8=; fh=u6JtyUGfXDTgd3Htmjy4rOl9vt716nsuVnZXCHyB81w=; b=PAdUwA9qOa+4IBBWnhwYCo3CB4xIAAkvaIulNnR/r5i+A/8SbnGZT9+0iCXJrPZrMB tUib5sYCgBBdugWDf4WAvxWWGakFSnj3UVRKjG2heqIkMtXtIQaVxJesZEvpdntVc1K+ d0T/Nhx9dQDzfCFw/C5aoesAusY+H/9Nn49EEyZCcrukHKGq0D+7T9c9N/3rc1tfRVVv slgHF3TBL7XFehLkpZP8lslhE17UZXAbcvh5EWUt9k0NI867cS00anRYCQx0SGkLa38c Fy6Lh7M0t9/xthhYD/dxC/iIhnt4aubZeAKW5xb/K3im+zbl40Px94YMf/EijwqGNIIq GQ+g==; 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=1779956051; x=1780560851; 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=ukUktAB5RO2yvavO4gdriPiNxSThh8w4oMGMgmN0Ax8=; b=fcTEJ4cGVHREyLI5bJAiNHAjgQ3XCqzDFD4yXRpZLlI1wgYTWdYuYGEfwJww3DP8TL 4dv7KS55hwbCGomsAG4vhHLIha1aNO+te14TvJwLsdkzgCpmYKZolv6DXsLfcx42d4d8 rm39RueMurGZ2m0Ra5LQDwU/WNJplJlctk0WB/cGKqA7wKUfujJJdUbCUoyrogSyNMQO SLP43sokw1M55Eg1woD24y1bCXTiOpvri7YQcWriMkxE7V6qZ9iv4ETGeA9Darnxi974 YoPQtgKhJY883FIIxRukavLT9KYgRIrZzEMmcbuYElPSjbEzXg0+J/FLbDfnPHqNRbKL lN0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779956051; x=1780560851; 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=ukUktAB5RO2yvavO4gdriPiNxSThh8w4oMGMgmN0Ax8=; b=OWpMWC/yB1kfQ8PinWZNMCMwarmV3Bw/4pcvVD0x9n1QqcQptLSH0inuY7TuADEKvO UEauWxYaXW3JdficeePC6Qq6oyyfplyTixjq05i6lsH991N7Bwc7i4FwVdWcQXVeDb+w 93xF6Uj+zBaTpUtgy7YFZfPGXq7LWj/EomrmhcFGQ9Cn/ofq1CfOE0TOIN8b9WdScANH i+Ss9Wj2nERx+4WZdl8ls2bzuSGy9fSenFs0WJ3bgE03vkguHbHByAy2BDg10lLs7btH zGZau8cjvU9DrQ+7KaciG4ZG7Yd6sKKvNNHyr7kTN3hlgjiJpHFeBV/YyuXVeaBm4CpB O2uw== X-Forwarded-Encrypted: i=1; AFNElJ8FXbJJge5/sZgC21r/jypxEDlOZcLpWHYAmoHtqD6jm7Tui3UFY6J+VX6ZDuCoaDkv9Xr7pwiVuxvuTOAw@postgresql.org X-Gm-Message-State: AOJu0YxUF7S2QCeyI16Xk9lo5UcoQ6+XGDkuA9PH9Lk/+v+BnjfCm9Lt IO6kPxpc459K2eMcbtVeP4W2jkSiPBFrEJ7vEAy5w905pwCY4H2SYwUxsyh0W6JC+bnn43nkKWr 87xIFZfq3G5rOLWnM/sLwnEdUeU9yPkI= X-Gm-Gg: Acq92OGy2TofBtjYQ2A5ArChH5xG4MGb7Exwk4dom+RJOoo9nTs29jz/uVmhNNTnKoc 9KbtqpoEV+TTerGSs8Ricm+NJNzB+tgsE1xV9PbP6m/Kq/OlDpKQ+TLa6kddamizrXXwu8vAWre +b1dG6FtH2xPvDXU+bLfVq8nsx45ZX8q5NLybVcNTFRMCRC1CP0GQtOsQCndJT4oFOZFPR92Hfq n8oEPU1RibRovJgPPMfDS+TwmmhZxO6r3TFVldUZwO5fT2iXQA+MY/0j0qohBl2cqDhcztjjc6O vrMzTr0KHbfnztDAiMasXu76hvTVLtrHwugN/guxgl6tigpzcLy8xhZCfJvJQQuZr7MIh6KaC6k = X-Received: by 2002:a05:6a20:a123:b0:3a0:bc61:62e6 with SMTP id adf61e73a8af0-3b328caba1bmr28827562637.8.1779956050515; Thu, 28 May 2026 01:14:10 -0700 (PDT) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> <605328.1747710381@sss.pgh.pa.us> <691261.1747755511@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Thu, 28 May 2026 17:13:53 +0900 X-Gm-Features: AVHnY4IdyaXkUVVCFuXFQy4vYj6ce1FejRHrPVaNP9aNxZr8gAXs7Pg3Ef7kyL0 Message-ID: Subject: Re: generic plans and "initial" pruning To: Thom Brown Cc: Chao Li , Tom Lane , Tender Wang , Alexander Lakhin , Tomas Vondra , Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001b9d1a0652dc505c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001b9d1a0652dc505c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Thom, On Wed, May 27, 2026 at 9:03=E2=80=AFPM Thom Brown wrote: > > On Sat, 4 Apr 2026 at 13:11, Amit Langote wrote= : > > > > Attached is a redesigned version. While working on the previous > > design, I grew increasingly uncomfortable with CachedPlanPrepData -- > > it was smuggling executor state out of GetCachedPlan() through an > > out-parameter, which papered over the real problem: GetCachedPlan() > > was doing too much. The main change in this version is architectural: > > GetCachedPlan() no longer acquires execution locks. Callers now own > > that responsibility, which is natural because each call site iterates > > stmt_list differently and manages execution state in its own way -- > > and it lets them choose between conservative lock-all and > > pruning-aware locking where appropriate. > > > > Non-portal call sites remain on the conservative path for now. > > _SPI_execute_plan requires care around snapshot setup, which happens > > after plan fetch rather than before. SQL functions have a different > > issue: init_execution_state() fetches the plan while postquel_start() > > handles execution, with execution_state containers in between, making > > it harder to thread a prepped QueryDesc through. The portal path and > > EXPLAIN EXECUTE cover the most common > > prepared-statement-with-partitions workloads; the remaining sites can > > be converted incrementally. > > > > This is now starting to feel closer to what Tom suggested back in > > January 2023 [1], where he proposed getting rid of > > AcquireExecutorLocks() inside GetCachedPlan() entirely and pushing > > lock acquisition out to callers. He noted that "we'd be pushing the > > responsibility for looping back and re-planning out to fairly > > high-level calling code" and that "we'd definitely be changing some > > fundamental APIs." That is the direction I came around to over the > > last couple of weeks while wrestling with CachedPlanPrepData. The > > reverted approach also tried to follow Tom's direction but moved > > locking into ExecutorStart(), which forced it to handle plan > > invalidation from inside the executor by mutating the CachedPlan > > in-place. This version moves locking out to the callers instead, so > > the executor and plan cache never reach into each other. > > > > The series is now four patches: > > > > 0001: Move execution lock acquisition out of GetCachedPlan(). Adds > > AcquireExecutorLocks() as a caller-facing function with validity check > > and retry. Adds PortalLockCachedPlan() in pquery.c to centralize the > > portal retry logic. All callers are converted. No behavioral change. > > > > 0002: Refactor executor's initial partition pruning setup. Cleanup > > only, no behavioral change. > > > > 0003: Introduce ExecutorPrep() and refactor executor startup. Factors > > range table init, permission checks, and initial pruning out of > > InitPlan(). Scaffolding for 0004; all callers still go through the > > normal ExecutorStart() path. > > > > 0004: Use pruning-aware locking for single-statement cached plans. > > Adds ExecutorPrepAndLock() which locks unprunable relations, runs > > ExecutorPrep() to determine surviving partitions, then locks only > > those. Extends PortalLockCachedPlan() with a pruning-aware path for > > eligible plans. Multi-statement CachedPlans (from rule rewriting) > > always use conservative locking. In principle, this could be relaxed > > if the planner can prove that no pruning expression reads state > > modified by an earlier statement, but that is left for a future patch. > > Includes regression tests. > > > > In case it's not clear, I'm not targeting v19 at this point. I'd like > > to get this into v20 CF1 and would welcome review from anyone > > interested. > > After not having looked at this in close to 2 years, I thought I'd > give it another look. Thanks for taking a look. > Not found any user-facing issues, and I'm liking > seeing so few locks in pg_locks. I can see that with pruning disabled, > the fallback works, pruning-aware locking is working via SPI through > plpgsql, running ALTER between executions and also invalidating > indexes force replans, and it's looking good. > > But I also think there might be a bug in patch 0001, but I'd > appreciate checking my reasoning because I'm not fully confident I've > been diligent enough. > > When PortalStart() opens a SELECT cursor that's backed by a cached > plan, it does roughly the following. It builds a queryDesc (an > executor-side struct), one of whose fields is a pointer into the plan > tree inside the portal's cached plan. Then it calls > PortalLockCachedPlan() to acquire the necessary locks, and finally > hands the queryDesc over to the executor. > > My worry is about what happens if the cached plan turns out to be > stale, for instance because someone ran DDL on a referenced table. In > that case PortalLockCachedPlan() throws the old plan away (via > ReleaseCachedPlan) and fetches a freshly-built replacement, updtating > the portal's own pointers to match. But the queryDesc from earlier > isn't touched. Its plan pointer still references the old, now-released > plan. From what I can see, once that old plan's last reference is > dropped its memory can be freed, which would leave the executor > reading from freed memory in the next step. > > The bit I'm least sure about is whether the old plan's memory really > does get reclaimed straight away when its refcount hits zero. If > something keeps it alive longer then this isn't a bug, or at least not > as bad as I'm making out. I had a look but couldn't convince myself > either way from the code alone. To actually hit this you'd need a > cursor on a cached plan, plus an invalidation arriving in the small > window between the portal being set up and the cursor being opened. > The race condition is brief, and I've not been able to hit it in > testing. > > The thing that got me thinking this is real: patch 0004 modifies > PortalLockCachedPlan() so that whenever it replans, it also rebuilds > the queryDesc. That's pretty much the fix I'd expect for this, which > makes me suspect somebody hit it at some point. But 0004 only applies > that fix on the new pruning-aware code path, and it was mentioned in > the thread that 0001 to 0003 might land before 0004. If so, master > would carry the bug in the gap between the two. > > I suspect a way to deal with it would be to move the CreateQueryDesc > call in the SELECT case to after PortalLockCachedPlan() returns, which > is what the other portal strategies already seem to do. Alternatively, > you could bring 0004's changes in this area into 0001 and have > PortalLockCachedPlan() always rebuild the queryDesc when it replans. > > If I've got this wrong and there's some lifetime mechanism I missed > that keeps the old plan's memory alive, then it's a non-issue and I'm > misreading the code. If I have got it wrong, could you please add > comments to make what is going on clearer? It's a real bug. You're right that if PortalLockCachedPlan() replans, the QueryDesc created before the call still points at the old PlannedStmt from the released plan. And yes, 0004 happens to fix it by rebuilding the QueryDesc inside PortalLockCachedPlan(), but 0001 through 0003 are broken on their own. Attached is an updated set with the fix: CreateQueryDesc now runs after PortalLockCachedPlan() returns, as you suggested. That said, I'll probably focus first on settling the plancache refactoring that spun off from this thread [1], and then start a new thread for the pruning-aware locking work on top of it, incorporating parts of this series. --=20 Thanks, Amit Langote [1] https://www.postgresql.org/message-id/CA%2BHiwqE1ntHy2h9zJ9v3MwAkoGAveS= ERcHWkDTTZnP0kxWqbKQ%40mail.gmail.com --0000000000001b9d1a0652dc505c Content-Type: application/octet-stream; name="v12-0001-Move-execution-lock-acquisition-out-of-GetCached.patch" Content-Disposition: attachment; filename="v12-0001-Move-execution-lock-acquisition-out-of-GetCached.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpp7o0fl3 RnJvbSBhMzIxNDU4MGYyY2UxOTgzYTExMWFmMDdjY2IwOTJiYTAzYzgxMmM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgNCBBcHIgMjAyNiAxODozODozNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEy IDEvNF0gTW92ZSBleGVjdXRpb24gbG9jayBhY3F1aXNpdGlvbiBvdXQgb2YKIEdldENhY2hlZFBs YW4oKQoKR2V0Q2FjaGVkUGxhbigpIHByZXZpb3VzbHkgYWNxdWlyZWQgZXhlY3V0aW9uIGxvY2tz IG9uIGFsbCBwbGFuCnJlbGF0aW9ucyBhcyBwYXJ0IG9mIGNhY2hlZCBwbGFuIHZhbGlkYXRpb24u ICBNb3ZlIHRoaXMKcmVzcG9uc2liaWxpdHkgdG8gY2FsbGVycywgbWFraW5nIEdldENhY2hlZFBs YW4oKSByZXR1cm4gYSB2YWxpZApwbGFuIHdpdGhvdXQgaG9sZGluZyBleGVjdXRpb24gbG9ja3Mu CgpBZGQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBhcyB0aGUgY2FsbGVyLWZhY2luZyBmdW5jdGlv bjogaXQgbG9ja3MKYWxsIHJlbGF0aW9ucyBpbiB0aGUgcGxhbiwgY2hlY2tzIHRoYXQgdGhlIHBs YW4gaXMgc3RpbGwgdmFsaWQKYWZ0ZXJ3YXJkLCBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCB3YXMg aW52YWxpZGF0ZWQgc28gdGhlIGNhbGxlcgpjYW4gcmV0cnkgd2l0aCBhIGZyZXNoIHBsYW4uCgpG b3IgcG9ydGFsLWJhY2tlZCBjYWxsZXJzLCBhZGQgUG9ydGFsTG9ja0NhY2hlZFBsYW4oKSBpbiBw cXVlcnkuYwp3aGljaCB3cmFwcyB0aGUgbG9jay1jaGVjay1yZXRyeSBsb29wIGFuZCBoYW5kbGVz IHRoZSBjYXNlIHdoZXJlCnJlcGxhbm5pbmcgY2hhbmdlcyB0aGUgcG9ydGFsIHN0cmF0ZWd5LiAg U3RvcmUgdGhlIENhY2hlZFBsYW5Tb3VyY2UKcG9pbnRlciBpbiBQb3J0YWxEYXRhIHNvIHJldHJ5 IGNhbiBjYWxsIEdldENhY2hlZFBsYW4oKSB3aXRob3V0CnRoZSBjYWxsZXIgdGhyZWFkaW5nIGl0 IHRocm91Z2guCgpBZGp1c3QgYWxsIG5vbi1wb3J0YWwgR2V0Q2FjaGVkUGxhbigpIGNhbGxlcnMg KFNQSSwgRVhQTEFJTgpFWEVDVVRFLCBTUUwgZnVuY3Rpb25zKSB0byBjYWxsIEFjcXVpcmVFeGVj dXRvckxvY2tzKCkgZXhwbGljaXRseQphZnRlciBmZXRjaGluZyB0aGUgcGxhbi4KCk5vIGJlaGF2 aW9yYWwgY2hhbmdlLiAgVGhpcyBzZXBhcmF0ZXMgcGxhbiByZXRyaWV2YWwgZnJvbSBleGVjdXRp b24Kc2V0dXAsIGFsbG93aW5nIGEgbGF0ZXIgY29tbWl0IHRvIHN1YnN0aXR1dGUgcHJ1bmluZy1h d2FyZSBsb2NraW5nCmZvciBlbGlnaWJsZSBwbGFucy4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9wb3J0YWxjbWRzLmMgICB8ICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAg ICAgIHwgMTQgKysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyAgICB8IDE0 ICsrKystLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgfCAyMiArKysrKysr LS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgIHwgIDIgKwogc3JjL2JhY2tl bmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAgfCA3MCArKysrKysrKysrKysrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgfCA0NCArKysrKysrKysr KysrLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMgIHwgIDcgKysrCiBz cmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0 aWxzL3BvcnRhbC5oICAgICAgICAgIHwgIDMgKysKIDEwIGZpbGVzIGNoYW5nZWQsIDE1NyBpbnNl cnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKaW5k ZXggMDFlZmFjMzMxOWUuLmNmNWRlZWM0OTQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j CkBAIC0xMTgsNiArMTE4LDcgQEAgUGVyZm9ybUN1cnNvck9wZW4oUGFyc2VTdGF0ZSAqcHN0YXRl LCBEZWNsYXJlQ3Vyc29yU3RtdCAqY3N0bXQsIFBhcmFtTGlzdEluZm8gcGEKIAkJCQkJICBxdWVy eVN0cmluZywKIAkJCQkJICBDTURUQUdfU0VMRUNULAkvKiBjdXJzb3IncyBxdWVyeSBpcyBhbHdh eXMgYSBTRUxFQ1QgKi8KIAkJCQkJICBsaXN0X21ha2UxKHBsYW4pLAorCQkJCQkgIE5VTEwsCiAJ CQkJCSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwppbmRleCA4 NzZhYWQyMTAwYS4uMDNkN2E5OGZjNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTIwNyw2 ICsyMDcsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHF1ZXJ5 X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBw bGFuX2xpc3QsCisJCQkJCSAgZW50cnktPnBsYW5zb3VyY2UsCiAJCQkJCSAgY3BsYW4pOwogCiAJ LyoKQEAgLTYzMiw4ICs2MzMsMTcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAq ZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJfQogCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGFjcXVpcmUgYSB0cmFuc2llbnQgcmVmY291bnQgKi8KLQlj cGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCi0JCQkJCQkg IEN1cnJlbnRSZXNvdXJjZU93bmVyLCBwc3RhdGUtPnBfcXVlcnlFbnYpOworCWZvciAoOzspCisJ eworCQljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCisJ CQkJCQkJICBDdXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkgIHBzdGF0ZS0+cF9xdWVyeUVu dik7CisJCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisKKwkJaWYgKEFjcXVpcmVFeGVj dXRvckxvY2tzKGNwbGFuKSkKKwkJCWJyZWFrOworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwg Q3VycmVudFJlc291cmNlT3duZXIpOworCX0KIAogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGxh bmR1cmF0aW9uKTsKIAlJTlNUUl9USU1FX1NVQlRSQUNUKHBsYW5kdXJhdGlvbiwgcGxhbnN0YXJ0 KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggODgxMDkzNDg4MTcuLjJhZmI4MTRhNDM1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpAQCAtNjU0LDYgKzY1NCw3IEBAIHN0YXRpYyBi b29sCiBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIHsK IAlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOworCUNhY2hlZFBsYW4gKmNwbGFuOwogCWV4 ZWN1dGlvbl9zdGF0ZSAqcHJldmVzID0gTlVMTDsKIAlleGVjdXRpb25fc3RhdGUgKmxhc3R0YWdl cyA9IE5VTEw7CiAJaW50CQkJbnN0bXRzOwpAQCAtNjk2LDEwICs2OTcsMTUgQEAgaW5pdF9leGVj dXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJICogQ3VycmVudFJlc291 cmNlT3duZXIgd2lsbCBiZSB0aGUgc2FtZSB3aGVuIFNodXRkb3duU1FMRnVuY3Rpb24gcnVucy4p CiAJICovCiAJZmNhY2hlLT5jb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKLQlmY2FjaGUt PmNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLAotCQkJCQkJCQkgIGZjYWNoZS0+cGFy YW1MSSwKLQkJCQkJCQkJICBmY2FjaGUtPmNvd25lciwKLQkJCQkJCQkJICBOVUxMKTsKKwlmb3Ig KDs7KQorCXsKKwkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIGZjYWNoZS0+cGFy YW1MSSwKKwkJCQkJCQkgIGZjYWNoZS0+Y293bmVyLCBOVUxMKTsKKwkJaWYgKEFjcXVpcmVFeGVj dXRvckxvY2tzKGNwbGFuKSkKKwkJCWJyZWFrOworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwg ZmNhY2hlLT5jb3duZXIpOworCX0KKwlmY2FjaGUtPmNwbGFuID0gY3BsYW47CiAKIAkvKgogCSAq IElmIG5lY2Vzc2FyeSwgbWFrZSBlc2FycmF5W10gYmlnZ2VyIHRvIGhvbGQgdGhlIG5lZWRlZCBz dGF0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggNTJmM2IxMTMwMWMuLjI2OGNkMTBiZGU4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYwpAQCAtMTY4Niw2ICsxNjg2LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNv bnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJ CQkJCSAgcGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBzdG10X2xpc3QsCisJCQkJCSAg cGxhbnNvdXJjZSwKIAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtMjEwNiw2ICsyMTA3LDE2IEBA IFNQSV9wbGFuX2dldF9jYWNoZWRfcGxhbihTUElQbGFuUHRyIHBsYW4pCiAJCQkJCQkgIF9TUElf Y3VycmVudC0+cXVlcnlFbnYpOwogCUFzc2VydChjcGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7 CiAKKwlpZiAoIUFjcXVpcmVFeGVjdXRvckxvY2tzKGNwbGFuKSkKKwl7CisJCS8qIFBsYW4gaW52 YWxpZGF0ZWQgZHVyaW5nIGxvY2tpbmc7IGdldCBhIGZyZXNoIG9uZS4gKi8KKwkJUmVsZWFzZUNh Y2hlZFBsYW4oY3BsYW4sCisJCQkJCQkgIHBsYW4tPnNhdmVkID8gQ3VycmVudFJlc291cmNlT3du ZXIgOiBOVUxMKTsKKwkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIE5VTEwsCisJ CQkJCQkJICBwbGFuLT5zYXZlZCA/IEN1cnJlbnRSZXNvdXJjZU93bmVyIDogTlVMTCwKKwkJCQkJ CQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOworCX0KKwogCS8qIFBvcCB0aGUgZXJyb3IgY29u dGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcGllcnJjb250ZXh0LnByZXZp b3VzOwogCkBAIC0yNTc0LDkgKzI1ODUsMTQgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0 ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJICogUmVwbGFuIGlm IG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50LiAgSWYgaXQncyBhIHNhdmVkCiAJ CSAqIHBsYW4sIHRoZSByZWZjb3VudCBtdXN0IGJlIGJhY2tlZCBieSB0aGUgcGxhbl9vd25lci4K IAkJICovCi0JCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJh bXMsCi0JCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKLQorCQlm b3IgKDs7KQorCQl7CisJCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9u cy0+cGFyYW1zLAorCQkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYp OworCQkJaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKGNwbGFuKSkKKwkJCQlicmVhazsKKwkJCVJl bGVhc2VDYWNoZWRQbGFuKGNwbGFuLCBwbGFuX293bmVyKTsKKwkJfQogCQlzdG10X2xpc3QgPSBj cGxhbi0+c3RtdF9saXN0OwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggZGJlZjczNGE5M2Yu LjI5MjlmMTU4MzM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMjQzLDYgKzEyNDMsNyBAQCBleGVj X3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCQkJCQkgIHF1ZXJ5X3N0 cmluZywKIAkJCQkJCSAgY29tbWFuZFRhZywKIAkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJ CSAgTlVMTCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoKQEAgLTIwNDIsNiArMjA0Myw3IEBAIGV4 ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9z dHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0 LAorCQkJCQkgIHBzcmMsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogUG9ydGFsIGlzIGRlZmluZWQs IHNldCB0aGUgcGxhbiBJRCBiYXNlZCBvbiBpdHMgY29udGVudHMuICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRl eCBlZTczMTAwMDgyMC4uNDY5OWI1M2NhYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3Av cHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwpAQCAtNTksNiArNTksNyBA QCBzdGF0aWMgdWludDY0IERvUG9ydGFsUnVuRmV0Y2goUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkg ICBsb25nIGNvdW50LAogCQkJCQkJCSAgIERlc3RSZWNlaXZlciAqZGVzdCk7CiBzdGF0aWMgdm9p ZCBEb1BvcnRhbFJld2luZChQb3J0YWwgcG9ydGFsKTsKK3N0YXRpYyBib29sIFBvcnRhbExvY2tD YWNoZWRQbGFuKFBvcnRhbCBwb3J0YWwpOwogCiAKIC8qCkBAIC00NjMsNiArNDY0LDggQEAgUG9y dGFsU3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCSAqLwogCQlw b3J0YWwtPnN0cmF0ZWd5ID0gQ2hvb3NlUG9ydGFsU3RyYXRlZ3kocG9ydGFsLT5zdG10cyk7CiAK K3Jlc3RhcnQ6CisKIAkJLyoKIAkJICogRmlyZSBoZXIgdXAgYWNjb3JkaW5nIHRvIHRoZSBzdHJh dGVneQogCQkgKi8KQEAgLTQ4NSw2ICs0ODgsMjEgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRh bCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJICogbm9uLWRlZmF1bHQgbmVzdGluZyBsZXZl bCBmb3IgdGhlIHNuYXBzaG90LgogCQkJCSAqLwogCisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgcG9y dGFsIGlzIGJhY2tlZCBieSBhIGNhY2hlZCBwbGFuLCBhY3F1aXJlIGV4ZWN1dGlvbgorCQkJCSAq IGxvY2tzIHZpYSBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpLiAgSWYgdGhlIHBsYW4gaXMKKwkJCQkg KiBpbnZhbGlkYXRlZCBkdXJpbmcgbG9ja2luZywgaXQgcmVwbGFucyBhbmQgbWF5IGNoYW5nZSB0 aGUKKwkJCQkgKiBwb3J0YWwgc3RyYXRlZ3ksIHJlcXVpcmluZyB1cyB0byByZXN0YXJ0IFBvcnRh bFN0YXJ0KCkuCisJCQkJICovCisJCQkJaWYgKHBvcnRhbC0+Y3BsYW4pCisJCQkJeworCQkJCQlp ZiAoUG9ydGFsTG9ja0NhY2hlZFBsYW4ocG9ydGFsKSkKKwkJCQkJeworCQkJCQkJUG9wQWN0aXZl U25hcHNob3QoKTsKKwkJCQkJCWdvdG8gcmVzdGFydDsKKwkJCQkJfQorCQkJCX0KKwogCQkJCS8q CiAJCQkJICogQ3JlYXRlIFF1ZXJ5RGVzYyBpbiBwb3J0YWwncyBjb250ZXh0OyBmb3IgdGhlIG1v bWVudCwgc2V0CiAJCQkJICogdGhlIGRlc3RpbmF0aW9uIHRvIERlc3ROb25lLgpAQCAtNTM1LDYg KzU1MywxMSBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFt cywKIAogCQkJY2FzZSBQT1JUQUxfT05FX1JFVFVSTklORzoKIAkJCWNhc2UgUE9SVEFMX09ORV9N T0RfV0lUSDoKKwkJCQlpZiAocG9ydGFsLT5jcGxhbikKKwkJCQl7CisJCQkJCWlmIChQb3J0YWxM b2NrQ2FjaGVkUGxhbihwb3J0YWwpKQorCQkJCQkJZ290byByZXN0YXJ0OworCQkJCX0KIAogCQkJ CS8qCiAJCQkJICogV2UgZG9uJ3Qgc3RhcnQgdGhlIGV4ZWN1dG9yIHVudGlsIHdlIGFyZSB0b2xk IHRvIHJ1biB0aGUKQEAgLTU3OCw3ICs2MDEsMjAgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRh bCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUE9SVEFMX01V TFRJX1FVRVJZOgotCQkJCS8qIE5lZWQgZG8gbm90aGluZyBub3cgKi8KKworCQkJCS8qCisJCQkJ ICogR2V0Q2FjaGVkUGxhbigpIG5vIGxvbmdlciBhY3F1aXJlcyBleGVjdXRpb24gbG9ja3MsIHNv IHdlCisJCQkJICogbXVzdCBkbyBpdCBoZXJlLiAgTXVsdGktc3RhdGVtZW50IHBsYW5zIGFsd2F5 cyB1c2UKKwkJCQkgKiBjb25zZXJ2YXRpdmUgbG9ja2luZyAoYWxsIHBhcnRpdGlvbnMgbG9ja2Vk KTsgcHJ1bmluZy1hd2FyZQorCQkJCSAqIGxvY2tpbmcgaXMgbm90IGZlYXNpYmxlIGJlY2F1c2Ug UG9ydGFsUnVuTXVsdGkoKSBleGVjdXRlcworCQkJCSAqIHN0YXRlbWVudHMgc2VxdWVudGlhbGx5 IHdpdGggQ0NJIGJldHdlZW4gdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAocG9ydGFsLT5jcGxhbikK KwkJCQl7CisJCQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxhbihwb3J0YWwpKQorCQkJCQkJZ290 byByZXN0YXJ0OworCQkJCX0KKwogCQkJCXBvcnRhbC0+dHVwRGVzYyA9IE5VTEw7CiAJCQkJYnJl YWs7CiAJCX0KQEAgLTE3ODYsMyArMTgyMiwzNSBAQCBFbnN1cmVQb3J0YWxTbmFwc2hvdEV4aXN0 cyh2b2lkKQogCS8qIFB1c2hBY3RpdmVTbmFwc2hvdFdpdGhMZXZlbCBtaWdodCBoYXZlIGNvcGll ZCB0aGUgc25hcHNob3QgKi8KIAlwb3J0YWwtPnBvcnRhbFNuYXBzaG90ID0gR2V0QWN0aXZlU25h cHNob3QoKTsKIH0KKworLyoKKyAqIFBvcnRhbExvY2tDYWNoZWRQbGFuCisgKgkJQWNxdWlyZSBl eGVjdXRpb24gbG9ja3MgZm9yIGEgY2FjaGVkLXBsYW4tYmFja2VkIHBvcnRhbCwKKyAqCQlyZXRy eWluZyB3aXRoIGEgZnJlc2ggcGxhbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgaW52YWxpZGF0ZWQu CisgKgorICogUmV0dXJucyB0cnVlIGlmIHJlcGxhbm5pbmcgY2hhbmdlZCBwb3J0YWwtPnN0cmF0 ZWd5LCBtZWFuaW5nIHRoZQorICogY2FsbGVyIG11c3QgcmVkaXNwYXRjaC4gIFJldHVybnMgZmFs c2Ugb25jZSBsb2NrcyBhcmUgaGVsZC4KKyAqLworc3RhdGljIGJvb2wKK1BvcnRhbExvY2tDYWNo ZWRQbGFuKFBvcnRhbCBwb3J0YWwpCit7CisJUG9ydGFsU3RyYXRlZ3kgc3RhcnRfc3RyYXRlZ3kg PSBwb3J0YWwtPnN0cmF0ZWd5OworCisJaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKHBvcnRhbC0+ Y3BsYW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBSZXBsYW4uICBMb2NrcyB3aWxsIGJlIHRh a2VuIGZyZXNobHkuICovCisJUmVsZWFzZUNhY2hlZFBsYW4ocG9ydGFsLT5jcGxhbiwgcG9ydGFs LT5yZXNvd25lcik7CisJcG9ydGFsLT5jcGxhbiA9IE5VTEw7CisJcG9ydGFsLT5zdG10cyA9IE5J TDsKKwlwb3J0YWwtPmNwbGFuID0gR2V0Q2FjaGVkUGxhbihwb3J0YWwtPnBsYW5zb3VyY2UsCisJ CQkJCQkJCSAgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCisJCQkJCQkJCSAgcG9ydGFsLT5yZXNvd25l ciwKKwkJCQkJCQkJICBwb3J0YWwtPnF1ZXJ5RW52KTsKKwlwb3J0YWwtPnN0bXRzID0gcG9ydGFs LT5jcGxhbi0+c3RtdF9saXN0OworCXBvcnRhbC0+c3RyYXRlZ3kgPSBDaG9vc2VQb3J0YWxTdHJh dGVneShwb3J0YWwtPnN0bXRzKTsKKwlpZiAocG9ydGFsLT5zdHJhdGVneSAhPSBzdGFydF9zdHJh dGVneSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCmluZGV4IDY5OGU3YzFhYTIyLi5mN2ZlMzY2ODU5YyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgYm9vbCBj aG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkg ICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5f Y29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVl cnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRpYyB2b2lkIEFj cXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKK3N0YXRp YyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzSW50KExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1 aXJlKTsKIHN0YXRpYyB2b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBi b29sIGFjcXVpcmUpOwogc3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNl dHJlZSwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpu b2RlLCBib29sICphY3F1aXJlKTsKQEAgLTk0NSw4ICs5NDUsOSBAQCBSZXZhbGlkYXRlQ2FjaGVk UXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqIENhbGxlciBtdXN0IGhhdmUg YWxyZWFkeSBjYWxsZWQgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5IHRvIHZlcmlmeSB0aGF0IHRoZQog ICogcXVlcnl0cmVlIGlzIHVwIHRvIGRhdGUuCiAgKgotICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3 ZSBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgotICogKFdl IG11c3QgZG8gdGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24t ZnJlZS4pCisgKiBPbiBhICJ0cnVlIiByZXR1cm4sIHRoZSBnZW5lcmljIHBsYW4gbWF5IGJlIHJl dXNlZCBhcyBhIHZhbGlkIGNhY2hlZAorICogcGxhbi4gIEFueSBleGVjdXRpb24tdGltZSBzZXR1 cCwgaW5jbHVkaW5nIGxvY2sgYWNxdWlzaXRpb24sIGlzIHRoZQorICogY2FsbGVyJ3MgcmVzcG9u c2liaWxpdHkuCiAgKi8KIHN0YXRpYyBib29sCiBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSkKQEAgLTk4Myw4ICs5ODQsNiBAQCBDaGVja0NhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJICovCiAJCUFzc2VydChwbGFuLT5yZWZjb3Vu dCA+IDApOwogCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgdHJ1ZSk7 Ci0KIAkJLyoKIAkJICogSWYgcGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJh bnNhY3Rpb25YbWluIGhhcwogCQkgKiBhZHZhbmNlZCwgYW5kIGlmIHNvIGludmFsaWRhdGUgaXQu CkBAIC0xMDAzLDkgKzEwMDIsNiBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSkKIAkJCS8qIFN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgbG9ja2VkIHRo ZSBxdWVyeS4gKi8KIAkJCXJldHVybiB0cnVlOwogCQl9Ci0KLQkJLyogT29wcywgdGhlIHJhY2Ug Y2FzZSBoYXBwZW5lZC4gIFJlbGVhc2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1 dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBmYWxzZSk7CiAJfQogCiAJLyoKQEAgLTEyODIsOCAr MTI3OCwxMSBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVk ZV9wbGFubmVyKQogICogcGxhbiBvciBhIGN1c3RvbSBwbGFuIGZvciB0aGUgZ2l2ZW4gcGFyYW1l dGVyczogdGhlIGNhbGxlciBkb2VzIG5vdCBrbm93CiAgKiB3aGljaCBpdCB3aWxsIGdldC4KICAq Ci0gKiBPbiByZXR1cm4sIHRoZSBwbGFuIGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHN1ZmZpY2llbnQg bG9ja3MgdG8gYmVnaW4KLSAqIGV4ZWN1dGlvbi4KKyAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMg dmFsaWQgYnV0IG5vIGV4ZWN1dGlvbiBsb2NrcyBhcmUgaGVsZC4KKyAqIFRoZSBjYWxsZXIgbXVz dCBjYWxsIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgYmVmb3JlIGV4ZWN1dGluZy4KKyAqIEZvciBm cmVzaGx5IGJ1aWx0IHBsYW5zIChjdXN0b20gb3IgbmV3IGdlbmVyaWMpLCB0aGUgcGxhbm5lcgor ICogYWxyZWFkeSBob2xkcyB0aGUgbmVlZGVkIGxvY2tzLCBzbyBBY3F1aXJlRXhlY3V0b3JMb2Nr cygpIGlzCisgKiByZWR1bmRhbnQgYnV0IGhhcm1sZXNzLgogICoKICAqIE9uIHJldHVybiwgdGhl IHJlZmNvdW50IG9mIHRoZSBwbGFuIGhhcyBiZWVuIGluY3JlbWVudGVkOyBhIGxhdGVyCiAgKiBS ZWxlYXNlQ2FjaGVkUGxhbigpIGNhbGwgaXMgZXhwZWN0ZWQuICBJZiAib3duZXIiIGlzIG5vdCBO VUxMIHRoZW4KQEAgLTE5MDYsOSArMTkwNSwxMSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChM aXN0ICpzdG10cykKIC8qCiAgKiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBu ZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZCBwbGFuOwogICogb3IgcmVsZWFzZSB0aGVt IGlmIGFjcXVpcmUgaXMgZmFsc2UuCisgKgorICogVGhpcyBsb2NrcyBhbGwgcmVsYXRpb25zIGlu IGEgZ2l2ZW4gUGxhbm5lZFN0bXQncyByYW5nZSB0YWJsZS4KICAqLwogc3RhdGljIHZvaWQKLUFj cXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQorQWNxdWly ZUV4ZWN1dG9yTG9ja3NJbnQoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiB7CiAJTGlz dENlbGwgICAqbGMxOwogCkBAIC0xOTU1LDYgKzE5NTYsMjcgQEAgQWNxdWlyZUV4ZWN1dG9yTG9j a3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJfQogfQogCisvKgorICogQWNxdWly ZUV4ZWN1dG9yTG9ja3MKKyAqCQlBY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbiBhbGwgcmVsYXRp b25zIGluIGEgY2FjaGVkIHBsYW4uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwbGFuIGlz IHN0aWxsIHZhbGlkIGFmdGVyIGxvY2tpbmcuICBSZXR1cm5zCisgKiBmYWxzZSBpZiB0aGUgcGxh biB3YXMgaW52YWxpZGF0ZWQgd2hpbGUgbG9ja3Mgd2VyZSBiZWluZyBhY3F1aXJlZCwKKyAqIGlu IHdoaWNoIGNhc2UgdGhlIGxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBhbmQgdGhlIGNhbGxlciBz aG91bGQKKyAqIGRpc2NhcmQgdGhpcyBwbGFuIGFuZCByZXRyeSB3aXRoIGEgZnJlc2ggb25lIGZy b20gR2V0Q2FjaGVkUGxhbigpLgorICovCitib29sCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhDYWNo ZWRQbGFuICpjcGxhbikKK3sKKwlBY3F1aXJlRXhlY3V0b3JMb2Nrc0ludChjcGxhbi0+c3RtdF9s aXN0LCB0cnVlKTsKKwlpZiAoIWNwbGFuLT5pc192YWxpZCkKKwl7CisJCUFjcXVpcmVFeGVjdXRv ckxvY2tzSW50KGNwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEFjcXVpcmVQbGFubmVyTG9ja3M6IGFjcXVpcmUg bG9ja3MgbmVlZGVkIGZvciBwbGFubmluZyBvZiBhIHF1ZXJ5dHJlZSBsaXN0OwogICogb3IgcmVs ZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0u YwppbmRleCA0OTNmOWIwZWUxOS4uNjEzZjNiZTMwYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0 YWxtZW0uYwpAQCAtMjcyLDYgKzI3MiwxMCBAQCBDcmVhdGVOZXdQb3J0YWwodm9pZCkKICAqIHRo ZSBwYXNzZWQgcGxhbiB0cmVlcyBoYXZlIGFkZXF1YXRlIGxpZmV0aW1lLiAgVHlwaWNhbGx5IHRo aXMgaXMgZG9uZSBieQogICogY29weWluZyB0aGVtIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQu CiAgKgorICogSWYgcGxhbnNvdXJjZSBpcyBwcm92aWRlZCwgaXQgaXMgdGhlIENhY2hlZFBsYW5T b3VyY2UgdGhhdCBwcm9kdWNlZAorICogY3BsYW4uICBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpIHVz ZXMgaXQgdG8gZmV0Y2ggYSBmcmVzaCBwbGFuIGlmIHRoZQorICogY3VycmVudCBvbmUgaXMgaW52 YWxpZGF0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBsb2NrIGFjcXVpc2l0aW9uLgorICoKICAqIFRoZSBj YWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkIHBy ZXBTdG10TmFtZQogICogKGlmIG5vdCBOVUxMKSBhbmQgc291cmNlVGV4dCBoYXZlIGFkZXF1YXRl IGxpZmV0aW1lLgogICoKQEAgLTI4Niw2ICsyOTAsNyBAQCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0 YWwgcG9ydGFsLAogCQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkgIENvbW1hbmRU YWcgY29tbWFuZFRhZywKIAkJCQkgIExpc3QgKnN0bXRzLAorCQkJCSAgQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSwKIAkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKQogewogCUFzc2VydChQb3J0 YWxJc1ZhbGlkKHBvcnRhbCkpOwpAQCAtMjk5LDYgKzMwNCw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5 KFBvcnRhbCBwb3J0YWwsCiAJcG9ydGFsLT5jb21tYW5kVGFnID0gY29tbWFuZFRhZzsKIAlTZXRR dWVyeUNvbXBsZXRpb24oJnBvcnRhbC0+cWMsIGNvbW1hbmRUYWcsIDApOwogCXBvcnRhbC0+c3Rt dHMgPSBzdG10czsKKwlwb3J0YWwtPnBsYW5zb3VyY2UgPSBwbGFuc291cmNlOwogCXBvcnRhbC0+ Y3BsYW4gPSBjcGxhbjsKIAlwb3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQpAQCAt NTE3LDYgKzUyMyw3IEBAIFBvcnRhbERyb3AoUG9ydGFsIHBvcnRhbCwgYm9vbCBpc1RvcENvbW1p dCkKIAogCS8qIGRyb3AgY2FjaGVkIHBsYW4gcmVmZXJlbmNlLCBpZiBhbnkgKi8KIAlQb3J0YWxS ZWxlYXNlQ2FjaGVkUGxhbihwb3J0YWwpOworCXBvcnRhbC0+cGxhbnNvdXJjZSA9IE5VTEw7CiAK IAkvKgogCSAqIElmIHBvcnRhbCBoYXMgYSBzbmFwc2hvdCBwcm90ZWN0aW5nIGl0cyBkYXRhLCBy ZWxlYXNlIHRoYXQuICBUaGlzIG5lZWRzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmluZGV4IDdhNGE4NWM4 MDM4Li5lMGZjNDAzZTcxNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hl LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTI0MSw2ICsyNDEsNyBA QCBleHRlcm4gQ2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCQkJCQkJIFJl c291cmNlT3duZXIgb3duZXIsCiAJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7 CitleHRlcm4gYm9vbCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhDYWNoZWRQbGFuICpjcGxhbik7CiBl eHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBSZXNvdXJjZU93 bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlkaXR5 Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKaW5kZXggYTdi ZWRiMTJjMTguLjNhZjUzNTM2MmNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0 YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTM3LDYgKzEzNyw4IEBA IHR5cGVkZWYgc3RydWN0IFBvcnRhbERhdGEKIAlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CQkvKiBj b21tYW5kIHRhZyBmb3Igb3JpZ2luYWwgcXVlcnkgKi8KIAlRdWVyeUNvbXBsZXRpb24gcWM7CQkJ LyogY29tbWFuZCBjb21wbGV0aW9uIGRhdGEgZm9yIGV4ZWN1dGVkIHF1ZXJ5ICovCiAJTGlzdAkg ICAqc3RtdHM7CQkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KKwlDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlOwkvKiBDYWNoZWRQbGFuU291cmNlLCBmb3IgcmVwbGFubmluZyBvbgorCQkJ CQkJCQkJICogaW52YWxpZGF0aW9uICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyogQ2FjaGVk UGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBh cmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KQEAgLTI0MCw2ICsyNDIsNyBAQCBl eHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAogCQkJCQkJCSAgY29u c3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJ CQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJCSAgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9y dGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVh dGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7Ci0tIAoyLjQ3LjMKCg== --0000000000001b9d1a0652dc505c Content-Type: application/octet-stream; name="v12-0002-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Disposition: attachment; filename="v12-0002-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpp7o0ff2 RnJvbSAyOWU1YWQxMTNmNjk3NGE5NGZiY2Y5ODRiNDNmYTNlZDg2ZjU3NjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTY6MDY6MzggKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MiAyLzRdIFJlZmFjdG9yIGV4ZWN1dG9yJ3MgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyBzZXR1 cAoKU2ltcGxpZnkgaGFuZGxpbmcgb2YgdW5wcnVuZWQgcmVsaWRzIGJ5IG1vdmluZyByZXNwb25z aWJpbGl0eQpmb3IgcmVjb3JkaW5nIHRoZW0gaW4gRVN0YXRlIGludG8gQ3JlYXRlUGFydGl0aW9u UHJ1bmVTdGF0ZSgpLAphdm9pZGluZyB0aGUgbmVlZCB0byBwYXNzIGFsbF9sZWFmcGFydF9ydGlz IGFzIGFuIG91dCBwYXJhbWV0ZXIuCgpBbHNvIG1vdmUgdGhlIHNldHRpbmcgb2YgZWN4dF9wYXJh bV9leGVjX3ZhbHMgZnJvbQpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpIHRvIEluaXRF eGVjUGFydGl0aW9uUHJ1bmVDb250ZXh0cygpLAp0byBhbGxvdyB0aGUgZm9ybWVyIHRvIGJlIGNh bGxlZCBiZWZvcmUgUEFSQU1fRVhFQyBwYXJhbWV0ZXJzIGFyZQpzZXQgdXAuICBBIGxhdGVyIGNv bW1pdCBuZWVkcyB0aGlzIHdoZW4gcnVubmluZyBwcnVuaW5nIHN0YXRlIHNldHVwCm91dHNpZGUg b2YgSW5pdFBsYW4oKS4KCk5vIGJlaGF2aW9yYWwgY2hhbmdlLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyB8IDcwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggZDk2ZDRmOTk0N2IuLjJhM2FmMDA2Zjc3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODUsOCArMTg1LDcgQEAg c3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlv biByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9z LCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFy dGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsK IHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKEVT dGF0ZSAqZXN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCi0JCQkJCQkJCQkJCQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcyk7CisJCQkJ CQkJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBJ bml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwK IAkJCQkJCQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJCSAgUGFydGl0aW9uRGVz YyBwYXJ0ZGVzYywKQEAgLTE5NzgsNyArMTk3Nyw3IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9z X3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKiBlc3RhdGUtPmVz X3BhcnRfcHJ1bmVfaW5mb3MuIEZvciBlYWNoIGVudHJ5LCBpdCBjcmVhdGVzIGEgUGFydGl0aW9u UHJ1bmVTdGF0ZQogICogYW5kIGFkZHMgaXQgdG8gZXNfcGFydF9wcnVuZV9zdGF0ZXMuICBFeGVj SW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCkgYWNjZXNzZXMKICAqIHRoZXNlIHN0YXRlcyB0aHJv dWdoIHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBpbiBlc19wYXJ0X3BydW5lX3N0YXRlcyBh bmQKLSAqIGFzc2lnbiBlYWNoIHN0YXRlIHRvIHRoZSBwYXJlbnQgbm9kZSdzIFBsYW5TdGF0ZSwg ZnJvbSB3aGVyZSBpdCB3aWxsIGJlIHVzZWQKKyAqIGFzc2lnbnMgZWFjaCBzdGF0ZSB0byB0aGUg cGFyZW50IG5vZGUncyBQbGFuU3RhdGUsIGZyb20gd2hlcmUgaXQgd2lsbCBiZSB1c2VkCiAgKiBm b3IgImV4ZWMiIHBydW5pbmcuCiAgKgogICogSWYgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGV4aXN0 IGZvciBhIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSwgdGhpcyBmdW5jdGlvbgpAQCAtMTk5Niwy OSArMTk5NSwzMSBAQCBFeGVjRG9Jbml0aWFsUHJ1bmluZyhFU3RhdGUgKmVzdGF0ZSkKIHsKIAlM aXN0Q2VsbCAgICpsYzsKIAorCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9 PSBOVUxMKTsKIAlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MpCiAJewog CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBy dW5lSW5mbywgbGMpOwogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCQlCaXRt YXBzZXQgICp2YWxpZHN1YnBsYW5zID0gTlVMTDsKLQkJQml0bWFwc2V0ICAqYWxsX2xlYWZwYXJ0 X3J0aXMgPSBOVUxMOwogCQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5fcnRpcyA9IE5VTEw7CiAK IAkJLyogQ3JlYXRlIGFuZCBzYXZlIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlLiAqLwotCQlwcnVu ZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShlc3RhdGUsIHBydW5laW5mbywKLQkJ CQkJCQkJCQkJICAgJmFsbF9sZWFmcGFydF9ydGlzKTsKKwkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGUoZXN0YXRlLCBwcnVuZWluZm8pOwogCQllc3RhdGUtPmVzX3BhcnRf cHJ1bmVfc3RhdGVzID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAogCQkJ CQkJCQkJCQkgICBwcnVuZXN0YXRlKTsKIAogCQkvKgogCQkgKiBQZXJmb3JtIGluaXRpYWwgcHJ1 bmluZyBzdGVwcywgaWYgYW55LCBhbmQgc2F2ZSB0aGUgcmVzdWx0Ci0JCSAqIGJpdG1hcHNldCBv ciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuCisJCSAqIGJpdG1hcHNl dCBvciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuICBSVCBpbmRleGVz CisJCSAqIG9mIHN1cnZpdmluZyBwYXJ0aXRpb25zIHdvdWxkIGJlIGFkZGVkIHRvIHZhbGlkc3Vi cGxhbl9ydGlzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2hlbiBkb19pbml0aWFsX3BydW5lIGlz IGZhbHNlLAorCQkgKiBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCkgd291bGQgaGF2ZSBhbHJl YWR5IGFkZGVkIHRoZSBSVCBpbmRleGVzCisJCSAqIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgdG8g ZXNfdW5wcnVuZWRfcmVsaWRzIGRpcmVjdGx5LgogCQkgKi8KIAkJaWYgKHBydW5lc3RhdGUtPmRv X2luaXRpYWxfcHJ1bmUpCiAJCQl2YWxpZHN1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKHBydW5lc3RhdGUsIHRydWUsCiAJCQkJCQkJCQkJCQkJICZ2YWxpZHN1YnBsYW5fcnRpcyk7 Ci0JCWVsc2UKLQkJCXZhbGlkc3VicGxhbl9ydGlzID0gYWxsX2xlYWZwYXJ0X3J0aXM7CiAKIAkJ ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoZXN0YXRlLT5lc191 bnBydW5lZF9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJIHZhbGlkc3VicGxhbl9ydGlzKTsKQEAgLTIx MzYsMTQgKzIxMzcsMTIgQEAgRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3RhdGUuCiAgKgogICogSWYg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGFyZSB0byBiZSBza2lwcGVkIChlLmcuLCBkdXJpbmcgRVhQ TEFJTgotICogKEdFTkVSSUNfUExBTikpLCAqYWxsX2xlYWZwYXJ0X3J0aXMgd2lsbCBiZSBwb3B1 bGF0ZWQgd2l0aCB0aGUgUlQgaW5kZXhlcyBvZgotICogYWxsIGxlYWYgcGFydGl0aW9ucyB3aG9z ZSBzY2FubmluZyBzdWJub2RlIGlzIGluY2x1ZGVkIGluIHRoZSBwYXJlbnQgcGxhbgotICogbm9k ZSdzIGxpc3Qgb2YgY2hpbGQgcGxhbnMuIFRoZSBjYWxsZXIgbXVzdCBhZGQgdGhlc2UgUlQgaW5k ZXhlcyB0bwotICogZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMuCisgKiAoR0VORVJJQ19QTEFO KSksIHRoZSBSVCBpbmRleGVzIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgd2hvc2Ugc2Nhbm5pbmcK KyAqIHN1Ym5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBsaXN0IG9m IGNoaWxkIHBsYW5zIGFyZQorICogYWRkZWQgdG8gZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMu CiAgKi8KIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICoKLUNyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAotCQkJ CQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcykKK0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewog CVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNo aWVzOwpAQCAtMjM3Nyw4ICsyMzc2LDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShFU3Rh dGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkJCQkJCQkJ ICAgcGluZm8tPmV4ZWNwYXJhbWlkcyk7CiAKIAkJCS8qCi0JCQkgKiBSZXR1cm4gYWxsIGxlYWYg cGFydGl0aW9uIGluZGV4ZXMgaWYgd2UncmUgc2tpcHBpbmcgcHJ1bmluZyBpbgotCQkJICogdGhl IEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KKwkJCSAqIEFkZCBhbGwgbGVhZiBwYXJ0aXRp b24gaW5kZXhlcyB0byBlc191bnBydW5lZF9yZWxpZHMgaWYgd2UncmUKKwkJCSAqIHNraXBwaW5n IHBydW5pbmcgaW4gdGhlIEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KIAkJCSAqLwogCQkJ aWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgJiYgIXBydW5lc3RhdGUtPmRvX2luaXRp YWxfcHJ1bmUpCiAJCQl7CkBAIC0yMzkwLDkgKzIzODksMjggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJ CQkJCUluZGV4CQlydGluZGV4ID0gcHBydW5lLT5sZWFmcGFydF9ydGlfbWFwW3BhcnRfaW5kZXhd OwogCiAJCQkJCWlmIChydGluZGV4KQotCQkJCQkJKmFsbF9sZWFmcGFydF9ydGlzID0gYm1zX2Fk ZF9tZW1iZXIoKmFsbF9sZWFmcGFydF9ydGlzLAotCQkJCQkJCQkJCQkJCQkJcnRpbmRleCk7CisJ CQkJCQllc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIo ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMsIHJ0aW5kZXgpOworCQkJCX0KKwkJCX0KKwkJCWVs c2UgaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPT0gTklMKQorCQkJeworCQkJCS8q CisJCQkJICogQWxsIHBhcnRpdGlvbnMgYmV0dGVyIGJlIHByZXNlbnQgaW4gZXNfdW5wcnVuZWRf cmVsaWRzIHdoZW4KKwkJCQkgKiBub25lIGFyZSBpbml0aWFsbHkgcHJ1bmFibGUuCisJCQkJICov CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJCWludAkJCXBhcnRfaW5kZXggPSAtMTsK KworCQkJCXdoaWxlICgocGFydF9pbmRleCA9IGJtc19uZXh0X21lbWJlcihwcHJ1bmUtPnByZXNl bnRfcGFydHMsCisJCQkJCQkJCQkJCQkJIHBhcnRfaW5kZXgpKSA+PSAwKQorCQkJCXsKKwkJCQkJ SW5kZXgJCXJ0aW5kZXggPSBwcHJ1bmUtPmxlYWZwYXJ0X3J0aV9tYXBbcGFydF9pbmRleF07CisK KwkJCQkJaWYgKHJ0aW5kZXgpCisJCQkJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihydGluZGV4LCBl c3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcykpOwogCQkJCX0KKyNlbmRpZgogCQkJfQogCiAJCQlq Kys7CkBAIC0yNDkwLDkgKzI1MDgsMTAgQEAgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4dChQYXJ0 aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKgkJSW5pdGlhbGl6ZSBleGVjIHBydW5pbmcg Y29udGV4dHMgZGVmZXJyZWQgYnkgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpCiAgKgogICog VGhpcyBmdW5jdGlvbiBmaW5hbGl6ZXMgZXhlYyBwcnVuaW5nIHNldHVwIGZvciBhIFBhcnRpdGlv blBydW5lU3RhdGUgYnkKLSAqIGluaXRpYWxpemluZyBjb250ZXh0cyBmb3IgcHJ1bmluZyBzdGVw cyB0aGF0IHJlcXVpcmUgdGhlIHBhcmVudCBwbGFuJ3MKLSAqIFBsYW5TdGF0ZS4gSXQgaXRlcmF0 ZXMgb3ZlciBQYXJ0aXRpb25QcnVuaW5nRGF0YSBlbnRyaWVzIGFuZCBzZXRzIHVwIHRoZQotICog bmVjZXNzYXJ5IGV4ZWN1dGlvbiBjb250ZXh0cyBmb3IgcHJ1bmluZyBkdXJpbmcgcXVlcnkgZXhl Y3V0aW9uLgorICogaW5pdGlhbGl6aW5nIGNvbnRleHRzIGZvciBwcnVuaW5nIHN0ZXBzIHRoYXQg cmVxdWlyZSBQQVJBTV9FWEVDIHBhcmFtZXRlcnMKKyAqIGFuZCB0aGUgcGFyZW50IHBsYW4ncyBQ bGFuU3RhdGUuIEl0IGl0ZXJhdGVzIG92ZXIgUGFydGl0aW9uUHJ1bmluZ0RhdGEKKyAqIGVudHJp ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBleGVjdXRpb24gY29udGV4dHMgZm9yIHBydW5p bmcgZHVyaW5nCisgKiBxdWVyeSBleGVjdXRpb24uCiAgKgogICogQWxzbyBmaXggdGhlIG1hcHBp bmcgb2YgcGFydGl0aW9uIGluZGV4ZXMgdG8gc3VicGxhbiBpbmRleGVzIGNvbnRhaW5lZCBpbgog ICogcHJ1bmVzdGF0ZSBieSBjb25zaWRlcmluZyB0aGUgbmV3IGxpc3Qgb2Ygc3VicGxhbnMgdGhh dCBzdXJ2aXZlZCBpbml0aWFsCkBAIC0yNTIwLDkgKzI1MzksMTYgQEAgSW5pdEV4ZWNQYXJ0aXRp b25QcnVuZUNvbnRleHRzKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJYm9vbAkJ Zml4X3N1YnBsYW5fbWFwID0gZmFsc2U7CiAKIAlBc3NlcnQocHJ1bmVzdGF0ZS0+ZG9fZXhlY19w cnVuZSk7CisJQXNzZXJ0KHBydW5lc3RhdGUtPmVjb250ZXh0KTsKIAlBc3NlcnQocGFyZW50X3Bs YW4gIT0gTlVMTCk7CiAJZXN0YXRlID0gcGFyZW50X3BsYW4tPnN0YXRlOwogCisJLyoKKwkgKiBU aGVzZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoKSBpcworCSAqIGNhbGxlZC4KKwkgKi8KKwlwcnVuZXN0YXRlLT5lY29udGV4dC0+ZWN4 dF9wYXJhbV9leGVjX3ZhbHMgPSBlc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFsczsKKwogCS8qCiAJ ICogTm8gbmVlZCB0byBmaXggc3VicGxhbnMgbWFwcyBpZiBpbml0aWFsIHBydW5pbmcgZGlkbid0 IGVsaW1pbmF0ZSBhbnkKIAkgKiBzdWJwbGFucy4KLS0gCjIuNDcuMwoK --0000000000001b9d1a0652dc505c Content-Type: application/octet-stream; name="v12-0003-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Disposition: attachment; filename="v12-0003-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpp7o0f91 RnJvbSAwNWM5MjM0NmUyYmVjNGM4ZWM5YTdjZjQ1ZWM1NzJjMTVkNjQ0ODFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMTY6MDg6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MiAzLzRdIEludHJvZHVjZSBFeGVjdXRvclByZXAgYW5kIHJlZmFjdG9yIGV4ZWN1dG9yIHN0YXJ0 dXAKCk1vdmUgcGVybWlzc2lvbiBjaGVja3MsIHJhbmdlIHRhYmxlIGluaXRpYWxpemF0aW9uLCBh bmQgaW5pdGlhbApwYXJ0aXRpb24gcHJ1bmluZyBvdXQgb2YgSW5pdFBsYW4oKSBpbnRvIGEgbmV3 IEV4ZWN1dG9yUHJlcCgpCmhlbHBlci4KCkV4ZWN1dG9yU3RhcnQoKSBpbnZva2VzIEV4ZWN1dG9y UHJlcCgpIHdoZW4gUXVlcnlEZXNjLT5lc3RhdGUgaXMKTlVMTCwga2VlcGluZyBjdXJyZW50IGJl aGF2aW9yIHVuY2hhbmdlZC4gIElmIFF1ZXJ5RGVzYy0+ZXN0YXRlIGlzCmFscmVhZHkgc2V0LCBF eGVjdXRvclN0YXJ0KCkgcmV1c2VzIGl0LgoKVGhpcyBpcyBwcmVwYXJhdG9yeSByZWZhY3Rvcmlu ZyBvbmx5LiAgTm8gY2FsbGVyIG91dHNpZGUgdGhlCmV4ZWN1dG9yIHN1cHBsaWVzIGEgcHJlYnVp bHQgRVN0YXRlIGluIHRoaXMgY29tbWl0LgoKSW4gYXNzZXJ0IGJ1aWxkcywgdmVyaWZ5IHRoYXQg dGhlIGV4cGVjdGVkIHJlbGF0aW9uIGxvY2tzIGFyZSBoZWxkCndoZW4gZW50ZXJpbmcgRXhlY3V0 b3JTdGFydCgpLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSAgICAgfCAgMTAgKyst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIHwgMTUyICsrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIHwgICAyICst CiAzIGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgYi9zcmMvYmFja2VuZC9leGVj dXRvci9SRUFETUUKaW5kZXggNTRmNDc4MmYzMWIuLjg5MGJjM2Q5MzMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVB RE1FCkBAIC0yOTEsMTEgKzI5MSwxNyBAQCBRdWVyeSBQcm9jZXNzaW5nIENvbnRyb2wgRmxvdwog CiBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRyb2wgZmxvdyBmb3IgZnVsbCBxdWVyeSBwcm9jZXNz aW5nOgogCisgICAgRXhlY3V0b3JQcmVwCisJCU1heSBiZSBydW4gYmVmb3JlIEV4ZWN1dG9yU3Rh cnQsIG9yIGltcGxpY2l0bHkgZnJvbSBFeGVjdXRvclN0YXJ0CisJCWlmIG5vdCBkb25lIGVhcmxp ZXIuICBDcmVhdGVzIHRoZSBFU3RhdGUgaW4gUXVlcnlEZXNjLCBwZXJmb3JtcworCQlyYW5nZSB0 YWJsZSBpbml0aWFsaXphdGlvbiwgcGVybWlzc2lvbiBjaGVja3MsIGFuZCBpbml0aWFsCisJCXBh cnRpdGlvbiBwcnVuaW5nLgorCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0Ci0J CUNyZWF0ZUV4ZWN1dG9yU3RhdGUKLQkJCWNyZWF0ZXMgcGVyLXF1ZXJ5IGNvbnRleHQKKwkJRXhl Y3V0b3JQcmVwIChpZiBRdWVyeURlc2MuZXN0YXRlIGlzIE5VTEwpCisJCQljcmVhdGVzIEVTdGF0 ZSBhbmQgcGVyLXF1ZXJ5IGNvbnRleHQKIAkJc3dpdGNoIHRvIHBlci1xdWVyeSBjb250ZXh0IHRv IHJ1biBFeGVjSW5pdE5vZGUKIAkJQWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeQogCQlFeGVjSW5pdE5v ZGUgLS0tIHJlY3Vyc2l2ZWx5IHNjYW5zIHBsYW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK aW5kZXggNGIzMGY3Njg2ODAuLjJiOTM5N2I3MmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK QEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5j bHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKQEAg LTc2LDYgKzc3LDcgQEAgRXhlY3V0b3JFbmRfaG9va190eXBlIEV4ZWN1dG9yRW5kX2hvb2sgPSBO VUxMOwogRXhlY3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBFeGVjdXRvckNoZWNrUGVybXNfaG9v ayA9IE5VTEw7CiAKIC8qIGRlY2xzIGZvciBsb2NhbCByb3V0aW5lcyBvbmx5IHVzZWQgd2l0aGlu IHRoaXMgbW9kdWxlICovCitzdGF0aWMgdm9pZCBFeGVjdXRvclByZXAoUXVlcnlEZXNjICpxdWVy eURlc2MsIFJlc291cmNlT3duZXIgb3duZXIsIGludCBlZmxhZ3MpOwogc3RhdGljIHZvaWQgSW5p dFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogc3RhdGljIHZvaWQgQ2hl Y2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24gcmVsLCBSb3dNYXJrVHlwZSBtYXJrVHlwZSk7CiBz dGF0aWMgdm9pZCBFeGVjUG9zdHByb2Nlc3NQbGFuKEVTdGF0ZSAqZXN0YXRlKTsKQEAgLTE0Nyw3 ICsxNDksNiBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKQogCiAJLyogc2FuaXR5IGNoZWNrczogcXVlcnlEZXNjIG11c3Qgbm90IGJlIHN0 YXJ0ZWQgYWxyZWFkeSAqLwogCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7Ci0JQXNzZXJ0KHF1 ZXJ5RGVzYy0+ZXN0YXRlID09IE5VTEwpOwogCiAJLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBx dWVyeSdzIHNuYXBzaG90IGlzIGFjdGl2ZSAqLwogCUFzc2VydChHZXRBY3RpdmVTbmFwc2hvdCgp ID09IHF1ZXJ5RGVzYy0+c25hcHNob3QpOwpAQCAtMTczLDkgKzE3NCw2NyBAQCBzdGFuZGFyZF9F eGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCiAJLyoKIAkg KiBCdWlsZCBFU3RhdGUsIHN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dCBmb3Ig c3RhcnR1cC4KLQkgKi8KLQllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7Ci0JcXVlcnlE ZXNjLT5lc3RhdGUgPSBlc3RhdGU7CisJICoKKwkgKiBJZiBFeGVjdXRvclByZXAoKSByYW4gZWFy bGllciAoZS5nLiwgdG8gZG8gaW5pdGlhbCBwcnVuaW5nIGR1cmluZyBwbGFuCisJICogdmFsaWRp dHkgY2hlY2tpbmcpLCByZXVzZSBpdHMgRVN0YXRlIHRvIGF2b2lkIHJlZG9pbmcgcmFuZ2UgdGFi bGUgc2V0dXAKKwkgKiBhbmQgcHJ1bmluZy4gT3RoZXJ3aXNlLCBjcmVhdGUgYSBmcmVzaCBFU3Rh dGUgYXMgdXN1YWwuCisJICoKKwkgKiBJbiBhc3NlcnQgYnVpbGRzLCB2ZXJpZnkgdGhhdCB0aGUg ZXhwZWN0ZWQgbG9ja3MgYXJlIGhlbGQuICBXaGVuIG5vCisJICogcHJlcCBFU3RhdGUgd2FzIHBy b3ZpZGVkLCBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHNob3VsZCBoYXZlIGxvY2tlZAorCSAqIGV2 ZXJ5IHJlbGF0aW9uIGluIHRoZSBwbGFuLiAgV2hlbiBvbmUgd2FzIHByb3ZpZGVkLCBwcnVuaW5n LWF3YXJlCisJICogbG9ja2luZyBzaG91bGQgaGF2ZSBsb2NrZWQgYXQgbGVhc3QgdGhlIHVucHJ1 bmVkIHJlbGF0aW9ucy4gIEJvdGgKKwkgKiBjaGVja3MgYXJlIHNraXBwZWQgaW4gcGFyYWxsZWwg d29ya2Vycywgd2hpY2ggYWNxdWlyZSByZWxhdGlvbiBsb2NrcworCSAqIGxhemlseSBpbiBFeGVj R2V0UmFuZ2VUYWJsZVJlbGF0aW9uKCkuCisJICovCisJaWYgKHF1ZXJ5RGVzYy0+ZXN0YXRlID09 IE5VTEwpCisJeworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJaWYgKCFJc1BhcmFsbGVs V29ya2VyKCkpCisJCXsKKwkJCUxpc3RDZWxsICAgKmxjOworCisJCQlmb3JlYWNoKGxjLCBxdWVy eURlc2MtPnBsYW5uZWRzdG10LT5ydGFibGUpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gbGZpcnN0X25vZGUoUmFuZ2VUYmxFbnRyeSwgbGMpOworCisJCQkJaWYgKHJ0ZS0+cnRla2lu ZCA9PSBSVEVfUkVMQVRJT04gfHwKKwkJCQkJKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkg JiYgcnRlLT5yZWxpZCAhPSBJbnZhbGlkT2lkKSkKKwkJCQkJQXNzZXJ0KENoZWNrUmVsYXRpb25P aWRMb2NrZWRCeU1lKHJ0ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkJICBydGUtPnJlbGxvY2ttb2Rl LAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSkpOworCQkJfQorCQl9CisjZW5kaWYKKwkJRXhlY3V0b3JQ cmVwKHF1ZXJ5RGVzYywgQ3VycmVudFJlc291cmNlT3duZXIsIGVmbGFncyk7CisJfQorI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwllbHNlCisJeworCQkvKgorCQkgKiBBIHByZXAgRVN0YXRl IHdhcyBwcm92aWRlZCwgbWVhbmluZyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgc2hvdWxkCisJCSAq IGhhdmUgbG9ja2VkIGF0IGxlYXN0IHRoZSB1bnBydW5lZCByZWxhdGlvbnMuCisJCSAqLworCQlp ZiAoIUlzUGFyYWxsZWxXb3JrZXIoKSkKKwkJeworCQkJaW50CQkJcnRpbmRleCA9IC0xOworCisJ CQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIocXVlcnlEZXNjLT5lc3RhdGUtPmVz X3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJCQkJICBydGluZGV4KSkgPj0gMCkKKwkJCXsKKwkJ CQlSYW5nZVRibEVudHJ5ICpydGUgPSBleGVjX3J0X2ZldGNoKHJ0aW5kZXgsIHF1ZXJ5RGVzYy0+ ZXN0YXRlKTsKKworCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8CisJ CQkJCSAgIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmCisJCQkJCQlydGUtPnJlbGlk ICE9IEludmFsaWRPaWQpKTsKKwkJCQlBc3NlcnQoQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUo cnRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSAgcnRlLT5yZWxsb2NrbW9kZSwgdHJ1ZSkpOworCQkJ fQorCQl9CisJfQorI2VuZGlmCisKKwllc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKKwlBc3Nl cnQoZXN0YXRlKTsKIAogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRl LT5lc19xdWVyeV9jeHQpOwogCkBAIC0yNzQsNiArMzMzLDY0IEBAIHN0YW5kYXJkX0V4ZWN1dG9y U3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwogfQogCisvKgorICogRXhlY3V0b3JQcmVwCisgKgorICogQnVp bGQgdGhlIGluaXRpYWwgZXhlY3V0b3Igc3RhdGUgZm9yIHF1ZXJ5RGVzYyBiZWZvcmUgRXhlY3V0 b3JTdGFydCgpLgorICoKKyAqIFRoaXMgY3JlYXRlcyB0aGUgRVN0YXRlIGFuZCBwZXJmb3JtcyB0 aGUgc3Vic2V0IG9mIGV4ZWN1dG9yIHN0YXJ0dXAgdGhhdAorICogZG9lcyBub3QgcmVxdWlyZSBw bGFuLXRyZWUgaW5pdGlhbGl6YXRpb24sIGFsbG93aW5nIHRoYXQgd29yayB0byBiZSByZXVzZWQK KyAqIGJ5IGNhbGxlcnMgdGhhdCBuZWVkIGV4ZWN1dG9yIHN0YXRlIGJlZm9yZSBFeGVjdXRvclN0 YXJ0KCk6CisgKgorICogLSBpbml0aWFsaXplIHRoZSByYW5nZSB0YWJsZQorICogLSBwZXJmb3Jt IHBlcm1pc3Npb24gY2hlY2tzCisgKiAtIHBlcmZvcm0gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmlu ZworICoKKyAqIE9uIHN1Y2Nlc3MsIHF1ZXJ5RGVzYy0+ZXN0YXRlIGlzIHNldCBhbmQgY2FuIGxh dGVyIGJlIHJldXNlZCBieQorICogRXhlY3V0b3JTdGFydCgpIGluc3RlYWQgb2YgcmVidWlsZGlu ZyB0aGUgc2FtZSBzdGF0ZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBxdWVyeURl c2MtPnNuYXBzaG90IGlzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWN1dG9yUHJlcChR dWVyeURlc2MgKnF1ZXJ5RGVzYywgUmVzb3VyY2VPd25lciBvd25lciwgaW50IGVmbGFncykKK3sK KwlSZXNvdXJjZU93bmVyIG9sZG93bmVyOworCUVTdGF0ZQkgICAqZXN0YXRlOworCVBsYW5uZWRT dG10ICpwc3RtdDsKKworCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7CisKKwlpZiAocXVlcnlE ZXNjLT5vcGVyYXRpb24gPT0gQ01EX1VUSUxJVFkpCisJCXJldHVybjsKKworCUFzc2VydChBY3Rp dmVTbmFwc2hvdFNldCgpKTsKKwlBc3NlcnQoR2V0QWN0aXZlU25hcHNob3QoKSA9PSBxdWVyeURl c2MtPnNuYXBzaG90KTsKKwlBc3NlcnQocXVlcnlEZXNjLT5lc3RhdGUgPT0gTlVMTCk7CisKKwlw c3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisKKwllc3RhdGUgPSBDcmVhdGVFeGVjdXRv clN0YXRlKCk7CisJcXVlcnlEZXNjLT5lc3RhdGUgPSBlc3RhdGU7CisKKwllc3RhdGUtPmVzX3Bs YW5uZWRzdG10ID0gcHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0gcHN0bXQt PnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZvID0gcXVlcnlEZXNj LT5wYXJhbXM7CisJZXN0YXRlLT5lc19xdWVyeUVudiA9IHF1ZXJ5RGVzYy0+cXVlcnlFbnY7CisJ ZXN0YXRlLT5lc190b3BfZWZsYWdzID0gZWZsYWdzOworCisJRXhlY0NoZWNrUGVybWlzc2lvbnMo cHN0bXQtPnJ0YWJsZSwgcHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7CisKKwlFeGVjSW5pdFJhbmdl VGFibGUoZXN0YXRlLCBwc3RtdC0+cnRhYmxlLCBwc3RtdC0+cGVybUluZm9zLAorCQkJCQkgICBi bXNfY29weShwc3RtdC0+dW5wcnVuYWJsZVJlbGlkcykpOworCisJb2xkb3duZXIgPSBDdXJyZW50 UmVzb3VyY2VPd25lcjsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IG93bmVyOworCisJRXhlY0Rv SW5pdGlhbFBydW5pbmcoZXN0YXRlKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3du ZXI7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjdXRvclJ1bgogICoKQEAgLTg0OSwzNyArOTY2 LDE0IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCUNtZFR5 cGUJCW9wZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5u ZWRzdG10LT5wbGFuVHJlZTsKLQlMaXN0CSAgICpyYW5nZVRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0 YWJsZTsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOwogCVBsYW5TdGF0 ZSAgKnBsYW5zdGF0ZTsKIAlUdXBsZURlc2MJdHVwVHlwZTsKIAlMaXN0Q2VsbCAgICpsOwogCWlu dAkJCWk7CiAKLQkvKgotCSAqIERvIHBlcm1pc3Npb25zIGNoZWNrcwotCSAqLwotCUV4ZWNDaGVj a1Blcm1pc3Npb25zKHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsIHRydWUpOwot Ci0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlCi0JICovCi0J RXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSwgcGxhbm5lZHN0bXQtPnBlcm1J bmZvcywKLQkJCQkJICAgYm1zX2NvcHkocGxhbm5lZHN0bXQtPnVucHJ1bmFibGVSZWxpZHMpKTsK LQotCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKLQllc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfaW5mb3MgPSBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3M7Ci0KLQkvKgotCSAq IFBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIgcHJ1bmluZyB0byBpZGVudGlmeSB3aGljaCBjaGls ZCBzdWJwbGFucywKLQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGlsZHJlbiBvZiBwbGFuIG5v ZGVzIHRoYXQgY29udGFpbgotCSAqIFBhcnRpdGlvblBydW5lSW5mbyBzdWNoIGFzIEFwcGVuZCwg d2lsbCBub3QgYmUgZXhlY3V0ZWQuIFRoZSByZXN1bHRzLAotCSAqIHdoaWNoIGFyZSBiaXRtYXBz ZXRzIG9mIGluZGV4ZXMgb2YgdGhlIGNoaWxkIHN1YnBsYW5zIHRoYXQgd2lsbCBiZQotCSAqIGV4 ZWN1dGVkLCBhcmUgc2F2ZWQgaW4gZXNfcGFydF9wcnVuZV9yZXN1bHRzLiAgVGhlc2UgcmVzdWx0 cyBjb3JyZXNwb25kCi0JICogdG8gZWFjaCBQYXJ0aXRpb25QcnVuZUluZm8gZW50cnksIGFuZCB0 aGUgZXNfcGFydF9wcnVuZV9yZXN1bHRzIGxpc3QgaXMKLQkgKiBwYXJhbGxlbCB0byBlc19wYXJ0 X3BydW5lX2luZm9zLgotCSAqLwotCUV4ZWNEb0luaXRpYWxQcnVuaW5nKGVzdGF0ZSk7CisJLyog RXhlY3V0b3JQcmVwKCkgbXVzdCBoYXZlIGJlZW4gZG9uZS4gKi8KKwlBc3NlcnQocXVlcnlEZXNj LT5lc3RhdGUpOwogCiAJLyoKIAkgKiBOZXh0LCBidWlsZCB0aGUgRXhlY1Jvd01hcmsgYXJyYXkg ZnJvbSB0aGUgUGxhblJvd01hcmsocyksIGlmIGFueS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCmlu ZGV4IDM3YzI1NzZlNGJjLi5hZWE1ZWM4ZWEwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCkBA IC00NSw3ICs0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCWludAkJCXF1ZXJ5X2lu c3RyX29wdGlvbnM7CS8qIE9SIG9mIEluc3RydW1lbnRPcHRpb24gZmxhZ3MgZm9yCiAJCQkJCQkJ CQkJICogcXVlcnlfaW5zdHIgKi8KIAotCS8qIFRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IEV4ZWN1 dG9yU3RhcnQgKi8KKwkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBieSBFeGVjdXRvclN0YXJ0IG9y IEV4ZWN1dG9yUHJlcCAqLwogCVR1cGxlRGVzYwl0dXBEZXNjOwkJLyogZGVzY3JpcHRvciBmb3Ig cmVzdWx0IHR1cGxlcyAqLwogCUVTdGF0ZQkgICAqZXN0YXRlOwkJCS8qIGV4ZWN1dG9yJ3MgcXVl cnktd2lkZSBzdGF0ZSAqLwogCVBsYW5TdGF0ZSAgKnBsYW5zdGF0ZTsJCS8qIHRyZWUgb2YgcGVy LXBsYW4tbm9kZSBzdGF0ZSAqLwotLSAKMi40Ny4zCgo= --0000000000001b9d1a0652dc505c Content-Type: application/octet-stream; name="v12-0004-Use-pruning-aware-locking-for-single-statement-c.patch" Content-Disposition: attachment; filename="v12-0004-Use-pruning-aware-locking-for-single-statement-c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpp7o0ew0 RnJvbSBjNjhkNWRlODQ4NTcyZGVmYmI1ODYyNWQ5MTVmMzMyMzI0NTI5NGQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgNCBBcHIgMjAyNiAyMDo0MzoxNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEy IDQvNF0gVXNlIHBydW5pbmctYXdhcmUgbG9ja2luZyBmb3Igc2luZ2xlLXN0YXRlbWVudCBjYWNo ZWQKIHBsYW5zCgpGb3Igc2luZ2xlLXN0YXRlbWVudCByZXVzZWQgZ2VuZXJpYyBwbGFucywgcGVy Zm9ybSBpbml0aWFsIHBhcnRpdGlvbgpwcnVuaW5nIGJlZm9yZSBhY3F1aXJpbmcgZXhlY3V0aW9u IGxvY2tzLCB0aGVuIGxvY2sgb25seSB0aGUKc3Vydml2aW5nIHBhcnRpdGlvbnMuCgpBZGQgRXhl Y3V0b3JQcmVwQW5kTG9jaygpIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgcHJ1bmluZy1hd2FyZSBs b2NrCnNlcXVlbmNlOiBsb2NrIHVucHJ1bmFibGUgcmVsYXRpb25zLCBjYWxsIEV4ZWN1dG9yUHJl cCgpIHRvIHJ1bgppbml0aWFsIHBydW5pbmcsIHRoZW4gbG9jayBzdXJ2aXZvcnMuICBQbGFuIHZh bGlkaXR5IGlzIGNoZWNrZWQKYWZ0ZXIgZWFjaCBzdGVwOyBFeGVjdXRvclByZXBDbGVhbnVwKCkg aGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKcGxhbiBpcyBpbnZhbGlkYXRlZCBiZXR3ZWVuIHBy ZXAgYW5kIGV4ZWN1dGlvbi4KCkV4dGVuZCBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpIHRvIHVzZSB0 aGUgcHJ1bmluZy1hd2FyZSBwYXRoIGZvcgplbGlnaWJsZSBwbGFucyAoc2luZ2xlLXN0YXRlbWVu dCByZXVzZWQgZ2VuZXJpYywgbm9uLXV0aWxpdHkpLgpBbGwgb3RoZXIgY2FzZXMgY29udGludWUg dXNpbmcgdGhlIGNvbnNlcnZhdGl2ZSBsb2NrLWFsbCBwYXRoCmZyb20gdGhlIHByZXZpb3VzIGNv bW1pdC4KClRyYWNrIGZpcnN0UmVzdWx0UmVscyBpbiBQbGFubmVyR2xvYmFsIGFuZCBQbGFubmVk U3RtdCBzbyB0aGV5CmFyZSBsb2NrZWQgZXZlbiBpZiBwcnVuZWQsIHByZXNlcnZpbmcgRXhlY0lu aXRNb2RpZnlUYWJsZSgpCmFzc3VtcHRpb25zIGFib3V0IHRoZSBmaXJzdCByZXN1bHQgcmVsYXRp b24gYmVpbmcgYXZhaWxhYmxlLgoKTXVsdGktc3RhdGVtZW50IENhY2hlZFBsYW5zIChmcm9tIHJ1 bGUgcmV3cml0aW5nKSBhbHdheXMgdXNlCmNvbnNlcnZhdGl2ZSBsb2NraW5nLCBzaW5jZSBQb3J0 YWxSdW5NdWx0aSgpIGV4ZWN1dGVzIHN0YXRlbWVudHMKc2VxdWVudGlhbGx5IHdpdGggQ0NJIGJl dHdlZW4gdGhlbSBhbmQgbGF0ZXIgc3RhdGVtZW50cycgcHJ1bmluZwpleHByZXNzaW9ucyBtYXkg ZGVwZW5kIG9uIGVhcmxpZXIgb25lcycgZWZmZWN0cy4gIEluIHByaW5jaXBsZSwKdGhpcyBjb3Vs ZCBiZSByZWxheGVkIGlmIHRoZSBwbGFubmVyIGNhbiBwcm92ZSB0aGF0IG5vIHBydW5pbmcKZXhw cmVzc2lvbiByZWFkcyBzdGF0ZSBtb2RpZmllZCBieSBhbiBlYXJsaWVyIHN0YXRlbWVudCwgYnV0 IHRoYXQKaXMgbGVmdCBmb3IgYSBmdXR1cmUgcGF0Y2guCgpSZWdyZXNzaW9uIHRlc3RzIGFyZSBp bmNsdWRlZCB0byB2ZXJpZnk6CgotIE9ubHkgc3Vydml2aW5nIHBhcnRpdGlvbnMgYXJlIGxvY2tl ZCB3aGVuIHBydW5pbmcgaXMgZW5hYmxlZCwgYW5kCiAgYWxsIHBhcnRpdGlvbnMgYXJlIGxvY2tl ZCB3aGVuIGl0IGlzIGRpc2FibGVkIChwZ19sb2NrcyBpbnNwZWN0aW9uKS4KLSBNdWx0aXBsZSBN b2RpZnlUYWJsZSBub2RlcyAodmlhIHdyaXRhYmxlIENURXMpIGhhbmRsZSB0aGUgY2FzZSB3aGVy ZQogIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1bmVkLCBleGVyY2lzaW5nIGZpcnN0UmVz dWx0UmVscy4KLSBQbGFuIGludmFsaWRhdGlvbiBkdXJpbmcgcHJ1bmluZy1hd2FyZSBsb2NrIHNl dHVwIChEREwgdHJpZ2dlcmVkIGJ5CiAgYSBwcnVuaW5nIGV4cHJlc3Npb24pIGRpc2NhcmRzIHRo ZSBwcmVwIHN0YXRlIGFuZCByZXBsYW5zIGNsZWFubHkuCi0gTXVsdGktc3RhdGVtZW50IENhY2hl ZFBsYW5zIChmcm9tIHJ1bGUgcmV3cml0aW5nKSBmYWxsIGJhY2sgdG8KICBsb2NraW5nIGFsbCBw YXJ0aXRpb25zLCBhdm9pZGluZyBzdGFsZSBwcnVuaW5nIHJlc3VsdHMuCgpOb3RlIGZvciBleHRl bnNpb24gYXV0aG9yczogY29kZSB0aGF0IGFjY2Vzc2VzIHBhcnRpdGlvbiByZWxhdGlvbnMKdGhy b3VnaCBFU3RhdGUgbXVzdCBjaGVjayB0aGF0IHRoZSBSVCBpbmRleCBpcyBhIG1lbWJlciBvZgpl c191bnBydW5lZF9yZWxpZHMgYmVmb3JlIG9wZW5pbmcgdGhlIHJlbGF0aW9uLiAgUHJldmlvdXNs eSB0aGlzCndhcyBhbiBvcHRpbWl6YXRpb247IGl0IGlzIG5vdyBhIGNvcnJlY3RuZXNzIHJlcXVp cmVtZW50LCBiZWNhdXNlCnBydW5lZCBwYXJ0aXRpb25zIG1heSBub3QgYmUgbG9ja2VkLgotLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICA0NSArKyst LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jICAgICAgICAgICAgICAgIHwgIDMwICsr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgMTQyICsr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAg ICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAg fCAgMTggKysKIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgICAgICAgICAgICAgICAgICAgICB8 ICA3NiArKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgICAgICAg ICAgIHwgIDE2ICsrCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAgICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAg ICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgICAgIHwg IDEwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgfCAxODQg KysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5v dXQgICAgICAgfCAgNjMgKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1 bmUuc3FsICAgICAgfCAxMTYgKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5j YWNoZS5zcWwgICAgICAgICAgICB8ICA1MiArKysrKwogMTcgZmlsZXMgY2hhbmdlZCwgNzMxIGlu c2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAx MTJjMTdiMGQ2NC4uYzUyNTRmMGY5MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM3Nyw3 ICszNzcsOCBAQCBzdGFuZGFyZF9FeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vy c29yT3B0aW9ucywKIAkvKiBydW4gaXQgKGlmIG5lZWRlZCkgYW5kIHByb2R1Y2Ugb3V0cHV0ICov CiAJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1 ZXJ5RW52LAogCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6 IE5VTEwpLAotCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVMTCk7CisJCQkJ ICAgZXMtPm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMLAorCQkJCSAgIE5VTEwpOwogfQog CiAvKgpAQCAtNTAxLDcgKzUwMiw4IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCSAgIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSAgIFF1ZXJ5RW52 aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCiAJCQkg ICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCi0JCQkgICBjb25zdCBNZW1vcnlDb250ZXh0 Q291bnRlcnMgKm1lbV9jb3VudGVycykKKwkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVy cyAqbWVtX2NvdW50ZXJzLAorCQkJICAgUXVlcnlEZXNjICpwcmVwX3FkKQogewogCURlc3RSZWNl aXZlciAqZGVzdDsKIAlRdWVyeURlc2MgICpxdWVyeURlc2M7CkBAIC01MzIsMTMgKzUzNCw2IEBA IEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKIAkgKi8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0 dGltZSk7CiAKLQkvKgotCSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5k IElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5IHNlZXMKLQkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91 c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCi0JICovCi0JUHVzaENvcGllZFNuYXBzaG90KEdldEFjdGl2 ZVNuYXBzaG90KCkpOwotCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7Ci0KIAkvKgog CSAqIFdlIGRpc2NhcmQgdGhlIG91dHB1dCBpZiB3ZSBoYXZlIG5vIHVzZSBmb3IgaXQuICBJZiB3 ZSdyZSBleHBsYWluaW5nCiAJICogQ1JFQVRFIFRBQkxFIEFTLCB3ZSdkIGJldHRlciB1c2UgdGhl IGFwcHJvcHJpYXRlIHR1cGxlIHJlY2VpdmVyLCB3aGlsZQpAQCAtNTU0LDEwICs1NDksMzQgQEAg RXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRv LCBFeHBsYWluU3RhdGUgKmVzLAogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKLQkv KiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0 ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgcXVlcnlTdHJpbmcsCi0JCQkJCQkJCUdldEFjdGl2ZVNu YXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVu diwgaW5zdHJ1bWVudF9vcHRpb24pOworCS8qCisJICogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0 aGUgcXVlcnksIG9yIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZQorCSAqIGNhbGxlci4gIFdo ZW4gcmV1c2luZyBhIHByZXAgUXVlcnlEZXNjLCBpdHMgc25hcHNob3Qgd2FzIHNldCBhdAorCSAq IGNyZWF0aW9uIHRpbWU7IHdlIHB1c2ggaXQgYXMgYWN0aXZlIGZvciBFeGVjdXRvclN0YXJ0IGFu ZCBvdmVycmlkZSB0aGUKKwkgKiBkZXN0aW5hdGlvbiBhbmQgaW5zdHJ1bWVudCBvcHRpb25zLCB3 aGljaCB3ZXJlIG5vdCBrbm93biB3aGVuIHRoZQorCSAqIGNhbGxlciBjcmVhdGVkIGl0LgorCSAq LworCWlmIChwcmVwX3FkKQorCXsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldEFjdGl2ZVNuYXBz aG90KCkpOworCQlxdWVyeURlc2MgPSBwcmVwX3FkOworCQlBc3NlcnQocXVlcnlEZXNjLT5kZXN0 ID09IE5vbmVfUmVjZWl2ZXIpOworCQlxdWVyeURlc2MtPmRlc3QgPSBkZXN0OworCQlxdWVyeURl c2MtPmluc3RydW1lbnRfb3B0aW9ucyA9IGluc3RydW1lbnRfb3B0aW9uOworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0ZWQgY29tbWFuZCBJRCB0 byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCisJCSAqIHJlc3VsdHMgb2YgYW55IHByZXZpb3VzbHkg ZXhlY3V0ZWQgcXVlcmllcy4KKwkJICovCisJCVB1c2hDb3BpZWRTbmFwc2hvdChHZXRBY3RpdmVT bmFwc2hvdCgpKTsKKwkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKKwkJcXVlcnlE ZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmluZywKKwkJCQkJCQkJ CUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKKwkJCQkJCQkJCWRlc3QsIHBh cmFtcywgcXVlcnlFbnYsCisJCQkJCQkJCQlpbnN0cnVtZW50X29wdGlvbik7CisJfQogCiAJLyog U2VsZWN0IGV4ZWN1dGlvbiBvcHRpb25zICovCiAJaWYgKGVzLT5hbmFseXplKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jCmluZGV4IDAzZDdhOThmYzU4Li4zYmJiYzA1MjE0OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3By ZXBhcmUuYwpAQCAtNTg4LDYgKzU4OCw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0 bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCU1lbW9y eUNvbnRleHRDb3VudGVycyBtZW1fY291bnRlcnM7CiAJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N0 eCA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBzYXZlZF9jdHggPSBOVUxMOworCVF1ZXJ5RGVzYyAg KnByZXBfcWQgPSBOVUxMOwogCiAJaWYgKGVzLT5tZW1vcnkpCiAJewpAQCAtNjQwLDggKzY0MSwz MSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVz ZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCQkJCQkgIHBzdGF0ZS0+cF9xdWVyeUVudik7 CiAJCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKLQkJaWYgKEFjcXVpcmVFeGVjdXRv ckxvY2tzKGNwbGFuKSkKKwkJaWYgKCFDYWNoZWRQbGFuQ2FuUHJlcChjcGxhbiwgZW50cnktPnBs YW5zb3VyY2UpKQorCQl7CisJCQlpZiAoQWNxdWlyZUV4ZWN1dG9yTG9ja3MoY3BsYW4pKQorCQkJ CWJyZWFrOworCQkJUmVsZWFzZUNhY2hlZFBsYW4oY3BsYW4sIEN1cnJlbnRSZXNvdXJjZU93bmVy KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJlcF9xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhsaW5p dGlhbF9ub2RlKFBsYW5uZWRTdG10LCBwbGFuX2xpc3QpLAorCQkJCQkJCQkgIHF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkJICBHZXRBY3RpdmVTbmFwc2hvdCgpLAorCQkJCQkJCQkgIEludmFsaWRTbmFw c2hvdCwKKwkJCQkJCQkJICBOb25lX1JlY2VpdmVyLAkvKiBFeHBsYWluT25lUGxhbiB3aWxsIGZp eCAqLworCQkJCQkJCQkgIHBhcmFtTEksCisJCQkJCQkJCSAgcHN0YXRlLT5wX3F1ZXJ5RW52LAor CQkJCQkJCQkgIDAgLyogRXhwbGFpbk9uZVBsYW4gd2lsbCBmaXggKi8gKTsKKwkJaWYgKEV4ZWN1 dG9yUHJlcEFuZExvY2socHJlcF9xZCwKKwkJCQkJCQkJQ3VycmVudFJlc291cmNlT3duZXIsCisJ CQkJCQkJCWVzLT5nZW5lcmljID8gRVhFQ19GTEFHX0VYUExBSU5fR0VORVJJQyA6IDAsCisJCQkJ CQkJCSZjcGxhbi0+aXNfdmFsaWQpKQogCQkJYnJlYWs7CisKKwkJLyogVHJ5IGFnYWluLiAqLwor CQlFeGVjdXRvclByZXBDbGVhbnVwKHByZXBfcWQpOworCQlGcmVlUXVlcnlEZXNjKHByZXBfcWQp OwogCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwgQ3VycmVudFJlc291cmNlT3duZXIpOwogCX0K IApAQCAtNjY0LDYgKzY4OCw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4 ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCXBsYW5fbGlzdCA9 IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAkvKiBFeHBsYWluIGVhY2ggcXVlcnkgKi8KKwlBc3NlcnQo cHJlcF9xZCA9PSBOVUxMIHx8IGxpc3RfbGVuZ3RoKHBsYW5fbGlzdCkgPT0gMSk7CiAJZm9yZWFj aChwLCBwbGFuX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQ bGFubmVkU3RtdCwgcCk7CkBAIC02NzEsNyArNjk2LDggQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShF eGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMs CiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpCiAJCQlFeHBsYWluT25l UGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwgcHN0YXRlLT5wX3F1 ZXJ5RW52LAogCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdl IDogTlVMTCksCi0JCQkJCQkgICBlcy0+bWVtb3J5ID8gJm1lbV9jb3VudGVycyA6IE5VTEwpOwor CQkJCQkJICAgZXMtPm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMLAorCQkJCQkJICAgcHJl cF9xZCk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBzdG10LT51dGlsaXR5U3RtdCwg aW50bywgZXMsIHBzdGF0ZSwgcGFyYW1MSSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4 IDJiOTM5N2I3MmYzLi4xZTgxMzc3Y2ZkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0z MzMsNiArMzMzLDEyNCBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjLCBpbnQgZWZsYWdzKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIH0K IAorLyoKKyAqIExvY2tSYW5nZVRhYmxlUmVsaWRzCisgKiAJCUFjcXVpcmUgb3IgcmVsZWFzZSBs b2NrcyBvbiB0aGUgc3BlY2lmaWVkIHJlbGlkcywgd2hpY2ggcmVmZXJlbmNlCisgKiAJCWVudHJp ZXMgaW4gdGhlIHByb3ZpZGVkIHJhbmdlIHRhYmxlLgorICoKKyAqIEhlbHBlciBmb3IgQWNxdWly ZUV4ZWN1dG9yTG9ja3NVbnBydW5lZCgpLgorICovCitzdGF0aWMgdm9pZAorTG9ja1JhbmdlVGFi bGVSZWxpZHMoTGlzdCAqcnRhYmxlLCBCaXRtYXBzZXQgKnJlbGlkcywgYm9vbCBhY3F1aXJlKQor eworCWludAkJCXJ0aW5kZXggPSAtMTsKKworCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21l bWJlcihyZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0g bGlzdF9udGhfbm9kZShSYW5nZVRibEVudHJ5LCBydGFibGUsIHJ0aW5kZXggLSAxKTsKKworCQlB c3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJICAgKHJ0ZS0+cnRla2lu ZCA9PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSkpOworCisJCS8qCisJ CSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9u IE9JRC4gTm90ZQorCQkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBvcGVuIHRoZSBy ZWwsIGFuZCBoZW5jZSB3aWxsIG5vdCBmYWlsCisJCSAqIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVu dGlyZWx5IC0tLSB3ZSdsbCBqdXN0IHRyYW5zaWVudGx5IGFjcXVpcmUgYQorCQkgKiBub24tY29u ZmxpY3RpbmcgbG9jay4KKwkJICovCisJCWlmIChhY3F1aXJlKQorCQkJTG9ja1JlbGF0aW9uT2lk KHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQllbHNlCisJCQlVbmxvY2tSZWxhdGlv bk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwl9Cit9CisKKy8qCisgKiBBY3F1 aXJlRXhlY3V0b3JMb2Nrc1ByZXBhcmVkCisgKgorICogQWNxdWlyZSBvciByZWxlYXNlIGV4ZWN1 dGlvbiBsb2NrcyB1c2luZyBwcnVuaW5nIHJlc3VsdHMgYWxyZWFkeSBjb21wdXRlZAorICogYnkg RXhlY3V0b3JQcmVwKCkgYW5kIHN0b3JlZCBpbiBxdWVyeURlc2MtPmVzdGF0ZS4KKyAqCisgKiBU aGlzIGlzIGludGVuZGVkIGZvciBzaW5nbGUtc3RhdGVtZW50IHJldXNlZCBnZW5lcmljLXBsYW4g cGF0aHMgdGhhdAorICogY2hvb3NlIHBydW5pbmctYXdhcmUgbG9ja2luZyBpbnN0ZWFkIG9mIHRo ZSBjb25zZXJ2YXRpdmUKKyAqIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgcGF0aC4KKyAqLworc3Rh dGljIHZvaWQKK0FjcXVpcmVFeGVjdXRvckxvY2tzUHJlcGFyZWQoUXVlcnlEZXNjICpxdWVyeURl c2MsIGJvb2wgYWNxdWlyZSkKK3sKKwlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVyeURl c2MtPnBsYW5uZWRzdG10OworCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7 CisJQml0bWFwc2V0ICAqbG9ja19yZWxpZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlBc3NlcnQo cXVlcnlEZXNjICE9IE5VTEwpOworCUFzc2VydChlc3RhdGUgIT0gTlVMTCk7CisJQXNzZXJ0KHBs YW5uZWRzdG10ICE9IE5VTEwpOworCUFzc2VydChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgIT0g Q01EX1VUSUxJVFkpOworCisJbG9ja19yZWxpZHMgPSBibXNfZGlmZmVyZW5jZShlc3RhdGUtPmVz X3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJIHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRz KTsKKworCS8qCisJICogS2VlcCB0aGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uIG9mIGVhY2ggTW9k aWZ5VGFibGUgbG9ja2VkIGV2ZW4gaWYKKwkgKiBwcnVuaW5nIHJlbW92ZWQgYWxsIHRhcmdldCBw YXJ0aXRpb25zLiAgRXhlY0luaXRNb2RpZnlUYWJsZSgpIHJlbGllcyBvbgorCSAqIG9uZSBzdWNo IHJlbGF0aW9uIHJlbWFpbmluZyBhdmFpbGFibGUuCisJICovCisJZm9yZWFjaChsYywgcGxhbm5l ZHN0bXQtPmZpcnN0UmVzdWx0UmVscykKKwl7CisJCUluZGV4CQlydGkgPSBsZmlyc3RfaW50KGxj KTsKKworCQlsb2NrX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGxvY2tfcmVsaWRzLCBydGkpOwor CX0KKworCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBsYW5uZWRzdG10LT5ydGFibGUsIGxvY2tfcmVs aWRzLCBhY3F1aXJlKTsKKworCWJtc19mcmVlKGxvY2tfcmVsaWRzKTsKKworfQorCisvKgorICog RXhlY3V0b3JQcmVwQW5kTG9jaworICoJCVBlcmZvcm0gcHJ1bmluZy1hd2FyZSBsb2NraW5nIGZv ciBhIHNpbmdsZSBQbGFubmVkU3RtdC4KKyAqCisgKiBMb2NrcyB1bnBydW5hYmxlIHJlbGF0aW9u cyBmaXJzdCwgdGhlbiBydW5zIEV4ZWN1dG9yUHJlcCgpIHRvCisgKiBkZXRlcm1pbmUgd2hpY2gg cGFydGl0aW9ucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmluZywgdGhlbiBsb2NrcworICogb25seSB0 aG9zZSBzdXJ2aXZvcnMuICBDaGVja3MgKmlzX3ZhbGlkIGFmdGVyIGVhY2ggbG9ja2luZyBzdGVw CisgKiB0byBkZXRlY3QgcGxhbiBpbnZhbGlkYXRpb24gKGUuZy4sIGZyb20gY29uY3VycmVudCBE REwgb3IgRERMCisgKiB0cmlnZ2VyZWQgYnkgYSBwcnVuaW5nIGV4cHJlc3Npb24pLgorICoKKyAq IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhbiBpcyBzdGlsbCB2YWxpZCBhbmQgYWxsIG5lZWRlZCBs b2NrcyBhcmUKKyAqIGhlbGQuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwbGFuIHdhcyBpbnZhbGlk YXRlZCBhdCBhbnkgcG9pbnQsIGluCisgKiB3aGljaCBjYXNlIGFsbCBhY3F1aXJlZCBsb2NrcyBo YXZlIGJlZW4gcmVsZWFzZWQgYW5kIHRoZSBjYWxsZXIKKyAqIHNob3VsZCBkaXNjYXJkIHRoZSBR dWVyeURlc2MgYW5kIHJldHJ5IHdpdGggYSBmcmVzaCBwbGFuLgorICovCitib29sCitFeGVjdXRv clByZXBBbmRMb2NrKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBSZXNvdXJjZU93bmVyIG93bmVyLAor CQkJCQlpbnQgZWZsYWdzLCBib29sICppc192YWxpZCkKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQg PSBxdWVyeURlc2MtPnBsYW5uZWRzdG10OworCisJLyogTG9jayB1bnBydW5hYmxlIHJlbHMgYmVm b3JlIHBydW5pbmcgY2FuIGFjY2VzcyB0aGVtLiAqLworCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBz dG10LT5ydGFibGUsIHBzdG10LT51bnBydW5hYmxlUmVsaWRzLCB0cnVlKTsKKwlpZiAoISppc192 YWxpZCkKKwl7CisJCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBzdG10LT5ydGFibGUsIHBzdG10LT51 bnBydW5hYmxlUmVsaWRzLCBmYWxzZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBSdW4g cHJ1bmluZyBhbmQgbG9jayBzdXJ2aXZvcnMuICovCisJRXhlY3V0b3JQcmVwKHF1ZXJ5RGVzYywg b3duZXIsIGVmbGFncyk7CisJQWNxdWlyZUV4ZWN1dG9yTG9ja3NQcmVwYXJlZChxdWVyeURlc2Ms IHRydWUpOworCWlmICghKmlzX3ZhbGlkKQorCXsKKwkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NQcmVw YXJlZChxdWVyeURlc2MsIGZhbHNlKTsKKwkJTG9ja1JhbmdlVGFibGVSZWxpZHMocHN0bXQtPnJ0 YWJsZSwgcHN0bXQtPnVucHJ1bmFibGVSZWxpZHMsIGZhbHNlKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogRXhlY3V0b3JQcmVwCiAgKgpAQCAtMzkx LDYgKzUwOSwzMCBAQCBFeGVjdXRvclByZXAoUXVlcnlEZXNjICpxdWVyeURlc2MsIFJlc291cmNl T3duZXIgb3duZXIsIGludCBlZmxhZ3MpCiAJQ3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25l cjsKIH0KIAorLyoKKyAqIEV4ZWN1dG9yUHJlcENsZWFudXAKKyAqCQlDbGVhbiB1cCBhbiBFU3Rh dGUgdGhhdCB3YXMgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKSBidXQgbmV2ZXIKKyAqCQlwYXNz ZWQgdG8gRXhlY3V0b3JTdGFydCgpLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHBsYW4gaXMKKyAq CQlpbnZhbGlkYXRlZCBiZXR3ZWVuIHByZXAgYW5kIGV4ZWN1dGlvbiwgYW5kIHRoZSBjYWxsZXIg bXVzdAorICoJCWRpc2NhcmQgdGhlIHByZXBwZWQgc3RhdGUgYmVmb3JlIHJldHJ5aW5nIHdpdGgg YSBmcmVzaCBwbGFuLgorICoKKyAqIFVubGlrZSBFeGVjdXRvckVuZCgpLCB0aGlzIGRvZXMgbm90 IGV4cGVjdCBhIGZ1bGx5IGluaXRpYWxpemVkCisgKiBwbGFuIHN0YXRlIHRyZWUgLS0gb25seSB0 aGUgcmFuZ2UgdGFibGUgcmVsYXRpb25zIGFuZCB0aGUKKyAqIEVTdGF0ZSBpdHNlbGYgbmVlZCB0 byBiZSBmcmVlZC4KKyAqLwordm9pZAorRXhlY3V0b3JQcmVwQ2xlYW51cChRdWVyeURlc2MgKnF1 ZXJ5RGVzYykKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOworCisJ aWYgKGVzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlFeGVjQ2xvc2VSYW5nZVRhYmxlUmVs YXRpb25zKGVzdGF0ZSk7CisJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwlxdWVyeURlc2Mt PmVzdGF0ZSA9IE5VTEw7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjdXRvclJ1bgogICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggNDc4Y2IwMTc4M2MuLjM1MDA5 NmJmYmU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtNTEzMyw4 ICs1MTMzLDggQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogYXMgYSByZWZlcmVuY2UgZm9yIGJ1aWxkaW5nIHRo ZSBSZXN1bHRSZWxJbmZvIG9mIHRoZSB0YXJnZXQgcGFydGl0aW9uLgogCSAqIEluIGVpdGhlciBj YXNlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCByZXN1bHQgcmVsYXRpb24gaXMga2VwdCwgc28g d2UKIAkgKiBqdXN0IGtlZXAgdGhlIGZpcnN0IG9uZSwgaWYgYWxsIG90aGVycyBoYXZlIGJlZW4g cHJ1bmVkLiAgU2VlIGFsc28sCi0JICogRXhlY0RvSW5pdGlhbFBydW5pbmcoKSwgd2hpY2ggZW5z dXJlcyB0aGF0IHRoaXMgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCi0JICogaGFzIGJlZW4gbG9ja2Vk LgorCSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzVW5wcnVuZWQoKSwgd2hpY2ggZW5zdXJlcyB0aGF0 IHRoaXMgZmlyc3QgcmVzdWx0CisJICogcmVsYXRpb24gaGFzIGJlZW4gbG9ja2VkLgogCSAqLwog CWkgPSAwOwogCWZvcmVhY2gobCwgbm9kZS0+cmVzdWx0UmVsYXRpb25zKQpAQCAtNTE0OCw2ICs1 MTQ4LDcgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCQkvKiBhbGwgcmVzdWx0IHJlbGF0aW9ucyBwcnVuZWQ7IGtl ZXAgdGhlIGZpcnN0IG9uZSAqLwogCQkJa2VlcF9yZWwgPSB0cnVlOwogCQkJcnRpID0gbGluaXRp YWxfaW50KG5vZGUtPnJlc3VsdFJlbGF0aW9ucyk7CisJCQlBc3NlcnQobGlzdF9tZW1iZXJfaW50 KGVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQtPmZpcnN0UmVzdWx0UmVscywgcnRpKSk7CiAJCQlpID0g MDsKIAkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggZjQ2ODllN2M5 ZjguLjRjZGRhYzdmMmZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC02 NzUsNiArNjc1LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJCQkJCQkJCQkJCSAgZ2xvYi0+cHJ1 bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVwZXJtaW5m b3M7CiAJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKKwlyZXN1bHQtPmZp cnN0UmVzdWx0UmVscyA9IGdsb2ItPmZpcnN0UmVzdWx0UmVsczsKIAlyZXN1bHQtPmFwcGVuZFJl bGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5zID0gZ2xv Yi0+c3VicGxhbnM7CiAJcmVzdWx0LT5yZXdpbmRQbGFuSURzID0gZ2xvYi0+cmV3aW5kUGxhbklE czsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCBmZjBlODc1ZjJhMi4uNmVl NTFmMDY5MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTM4NCw2ICsz ODQsMjQgQEAgc2V0X3BsYW5fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh bikKIAkJfQogCX0KIAorCS8qCisJICogUmVjb3JkIHRoZSBmaXJzdCByZXN1bHQgcmVsYXRpb24g aWYgaXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIGluaXRpYWxseQorCSAqIHBydW5hYmxlIHJlbGF0 aW9ucy4gIFdlIHVzZSBibXNfbmV4dF9tZW1iZXIoKSB0byBnZXQgdGhlCisJICogbG93ZXN0LW51 bWJlcmVkIGxlYWYgcmVzdWx0IHJlbCwgd2hpY2ggbWF0Y2hlcworCSAqIGxpbml0aWFsX2ludChN b2RpZnlUYWJsZS5yZXN1bHRSZWxhdGlvbnMpIGJlY2F1c2UgcGFydGl0aW9uIGV4cGFuc2lvbgor CSAqIHByZXNlcnZlcyBSVCBpbmRleCBvcmRlci4gIEV4ZWNJbml0TW9kaWZ5VGFibGUoKSBhc3Nl cnRzIHRoYXQgdGhlCisJICogcmVjb3JkZWQgaW5kZXggbWF0Y2hlcyB3aGF0IGl0IGFjdHVhbGx5 IG5lZWRzLgorCSAqLworCWlmIChyb290LT5sZWFmX3Jlc3VsdF9yZWxpZHMpCisJeworCQlJbmRl eAkJZmlyc3RSZXN1bHRSZWwgPSBibXNfbmV4dF9tZW1iZXIocm9vdC0+bGVhZl9yZXN1bHRfcmVs aWRzLCAtMSk7CisKKwkJZmlyc3RSZXN1bHRSZWwgKz0gcnRvZmZzZXQ7CisJCWlmIChibXNfaXNf bWVtYmVyKGZpcnN0UmVzdWx0UmVsLCByb290LT5nbG9iLT5wcnVuYWJsZVJlbGlkcykpCisJCQly b290LT5nbG9iLT5maXJzdFJlc3VsdFJlbHMgPQorCQkJCWxhcHBlbmRfaW50KHJvb3QtPmdsb2It PmZpcnN0UmVzdWx0UmVscywgZmlyc3RSZXN1bHRSZWwpOworCX0KKwogCXJldHVybiByZXN1bHQ7 CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgYi9zcmMvYmFja2Vu ZC90Y29wL3BxdWVyeS5jCmluZGV4IDQ2OTliNTNjYWI3Li41M2M1MGFiMGZjZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVy eS5jCkBAIC01OSw3ICs1OSw5IEBAIHN0YXRpYyB1aW50NjQgRG9Qb3J0YWxSdW5GZXRjaChQb3J0 YWwgcG9ydGFsLAogCQkJCQkJCSAgIGxvbmcgY291bnQsCiAJCQkJCQkJICAgRGVzdFJlY2VpdmVy ICpkZXN0KTsKIHN0YXRpYyB2b2lkIERvUG9ydGFsUmV3aW5kKFBvcnRhbCBwb3J0YWwpOwotc3Rh dGljIGJvb2wgUG9ydGFsTG9ja0NhY2hlZFBsYW4oUG9ydGFsIHBvcnRhbCk7CitzdGF0aWMgYm9v bCBQb3J0YWxMb2NrQ2FjaGVkUGxhbihQb3J0YWwgcG9ydGFsLCBib29sIGRvX3ByZXAsCisJCQkJ CQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJIFF1ZXJ5RGVzYyAqKnF1ZXJ5RGVz Y19wKTsKIAogCiAvKgpAQCAtNDg4LDIxICs0OTAsNiBAQCByZXN0YXJ0OgogCQkJCSAqIG5vbi1k ZWZhdWx0IG5lc3RpbmcgbGV2ZWwgZm9yIHRoZSBzbmFwc2hvdC4KIAkJCQkgKi8KIAotCQkJCS8q Ci0JCQkJICogSWYgdGhlIHBvcnRhbCBpcyBiYWNrZWQgYnkgYSBjYWNoZWQgcGxhbiwgYWNxdWly ZSBleGVjdXRpb24KLQkJCQkgKiBsb2NrcyB2aWEgUG9ydGFsTG9ja0NhY2hlZFBsYW4oKS4gIElm IHRoZSBwbGFuIGlzCi0JCQkJICogaW52YWxpZGF0ZWQgZHVyaW5nIGxvY2tpbmcsIGl0IHJlcGxh bnMgYW5kIG1heSBjaGFuZ2UgdGhlCi0JCQkJICogcG9ydGFsIHN0cmF0ZWd5LCByZXF1aXJpbmcg dXMgdG8gcmVzdGFydCBQb3J0YWxTdGFydCgpLgotCQkJCSAqLwotCQkJCWlmIChwb3J0YWwtPmNw bGFuKQotCQkJCXsKLQkJCQkJaWYgKFBvcnRhbExvY2tDYWNoZWRQbGFuKHBvcnRhbCkpCi0JCQkJ CXsKLQkJCQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0JCQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCQkJ CX0KLQkJCQl9Ci0KIAkJCQkvKgogCQkJCSAqIENyZWF0ZSBRdWVyeURlc2MgaW4gcG9ydGFsJ3Mg Y29udGV4dDsgZm9yIHRoZSBtb21lbnQsIHNldAogCQkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBE ZXN0Tm9uZS4KQEAgLTUxNiw2ICs1MDMsMjYgQEAgcmVzdGFydDoKIAkJCQkJCQkJCQkJcG9ydGFs LT5xdWVyeUVudiwKIAkJCQkJCQkJCQkJMCk7CiAKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBwb3J0 YWwgaXMgYmFja2VkIGJ5IGEgY2FjaGVkIHBsYW4sIGFjcXVpcmUgZXhlY3V0aW9uCisJCQkJICog bG9ja3MgdmlhIFBvcnRhbExvY2tDYWNoZWRQbGFuKCkuICBGb3IgZWxpZ2libGUgcGxhbnMKKwkJ CQkgKiAoc2luZ2xlLXN0YXRlbWVudCByZXVzZWQgZ2VuZXJpYyksIHRoaXMgcGVyZm9ybXMKKwkJ CQkgKiBwcnVuaW5nLWF3YXJlIGxvY2tpbmc6IGl0IHJ1bnMgRXhlY3V0b3JQcmVwKCkgb24gdGhl CisJCQkJICogUXVlcnlEZXNjIHRvIGRldGVybWluZSB3aGljaCBwYXJ0aXRpb25zIHN1cnZpdmUg aW5pdGlhbAorCQkJCSAqIHBydW5pbmcsIHRoZW4gbG9ja3Mgb25seSB0aG9zZS4gIElmIHRoZSBw bGFuIGlzIGludmFsaWRhdGVkCisJCQkJICogZHVyaW5nIHRoaXMgcHJvY2VzcywgaXQgcmVwbGFu cyBhbmQgcmVidWlsZHMgdGhlIFF1ZXJ5RGVzYy4KKwkJCQkgKiBJZiByZXBsYW5uaW5nIGNoYW5n ZXMgdGhlIHBvcnRhbCBzdHJhdGVneSwgd2UgbXVzdCByZXN0YXJ0CisJCQkJICogUG9ydGFsU3Rh cnQoKSB0byByZWRpc3BhdGNoLgorCQkJCSAqLworCQkJCWlmIChwb3J0YWwtPmNwbGFuKQorCQkJ CXsKKwkJCQkJaWYgKFBvcnRhbExvY2tDYWNoZWRQbGFuKHBvcnRhbCwgdHJ1ZSwgcGFyYW1zLCAm cXVlcnlEZXNjKSkKKwkJCQkJeworCQkJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJCQkJCWdv dG8gcmVzdGFydDsKKwkJCQkJfQorCQkJCX0KKwogCQkJCS8qCiAJCQkJICogSWYgaXQncyBhIHNj cm9sbGFibGUgY3Vyc29yLCBleGVjdXRvciBuZWVkcyB0byBzdXBwb3J0CiAJCQkJICogUkVXSU5E IGFuZCBiYWNrd2FyZHMgc2NhbiwgYXMgd2VsbCBhcyB3aGF0ZXZlciB0aGUgY2FsbGVyCkBAIC01 NTUsNyArNTYyLDcgQEAgcmVzdGFydDoKIAkJCWNhc2UgUE9SVEFMX09ORV9NT0RfV0lUSDoKIAkJ CQlpZiAocG9ydGFsLT5jcGxhbikKIAkJCQl7Ci0JCQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxh bihwb3J0YWwpKQorCQkJCQlpZiAoUG9ydGFsTG9ja0NhY2hlZFBsYW4ocG9ydGFsLCBmYWxzZSwg TlVMTCwgTlVMTCkpCiAJCQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQkJfQogCkBAIC02MTEsNyArNjE4 LDcgQEAgcmVzdGFydDoKIAkJCQkgKi8KIAkJCQlpZiAocG9ydGFsLT5jcGxhbikKIAkJCQl7Ci0J CQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxhbihwb3J0YWwpKQorCQkJCQlpZiAoUG9ydGFsTG9j a0NhY2hlZFBsYW4ocG9ydGFsLCBmYWxzZSwgTlVMTCwgTlVMTCkpCiAJCQkJCQlnb3RvIHJlc3Rh cnQ7CiAJCQkJfQogCkBAIC0xODI4LDE1ICsxODM1LDMyIEBAIEVuc3VyZVBvcnRhbFNuYXBzaG90 RXhpc3RzKHZvaWQpCiAgKgkJQWNxdWlyZSBleGVjdXRpb24gbG9ja3MgZm9yIGEgY2FjaGVkLXBs YW4tYmFja2VkIHBvcnRhbCwKICAqCQlyZXRyeWluZyB3aXRoIGEgZnJlc2ggcGxhbiBpZiB0aGUg Y3VycmVudCBvbmUgaXMgaW52YWxpZGF0ZWQuCiAgKgorICogSWYgZG9fcHJlcCBpcyB0cnVlIGFu ZCB0aGUgcGxhbiBpcyBlbGlnaWJsZSAoc2luZ2xlLXN0YXRlbWVudCByZXVzZWQKKyAqIGdlbmVy aWMgcGxhbiksIHBlcmZvcm1zIHBydW5pbmctYXdhcmUgbG9ja2luZyB2aWEgRXhlY3V0b3JQcmVw KCkgYW5kCisgKiBwb3B1bGF0ZXMgcG9ydGFsLT5xdWVyeURlc2Mgd2l0aCB0aGUgcHJlcHBlZCBR dWVyeURlc2MuICBPdGhlcndpc2UKKyAqIGZhbGxzIGJhY2sgdG8gbG9ja2luZyBhbGwgcmVsYXRp b25zIGluIHRoZSBwbGFuLgorICoKICAqIFJldHVybnMgdHJ1ZSBpZiByZXBsYW5uaW5nIGNoYW5n ZWQgcG9ydGFsLT5zdHJhdGVneSwgbWVhbmluZyB0aGUKLSAqIGNhbGxlciBtdXN0IHJlZGlzcGF0 Y2guICBSZXR1cm5zIGZhbHNlIG9uY2UgbG9ja3MgYXJlIGhlbGQuCisgKiBjYWxsZXIgbXVzdCBy ZWRpc3BhdGNoLiAgUmV0dXJucyBmYWxzZSBvbmNlIGxvY2tzIGFyZSBoZWxkIGFuZCB0aGUKKyAq IHBsYW4gaXMgdmFsaWQgZm9yIGV4ZWN1dGlvbi4KICAqLwogc3RhdGljIGJvb2wKLVBvcnRhbExv Y2tDYWNoZWRQbGFuKFBvcnRhbCBwb3J0YWwpCitQb3J0YWxMb2NrQ2FjaGVkUGxhbihQb3J0YWwg cG9ydGFsLCBib29sIGRvX3ByZXAsCisJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJ IFF1ZXJ5RGVzYyAqKnByZXBfcWQpCiB7CiAJUG9ydGFsU3RyYXRlZ3kgc3RhcnRfc3RyYXRlZ3kg PSBwb3J0YWwtPnN0cmF0ZWd5OwogCi0JaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKHBvcnRhbC0+ Y3BsYW4pKQorCWlmIChkb19wcmVwICYmIENhY2hlZFBsYW5DYW5QcmVwKHBvcnRhbC0+Y3BsYW4s IHBvcnRhbC0+cGxhbnNvdXJjZSkpCisJeworCQlBc3NlcnQocHJlcF9xZCk7CisJCWlmIChFeGVj dXRvclByZXBBbmRMb2NrKCpwcmVwX3FkLCBwb3J0YWwtPnJlc293bmVyLCAwLAorCQkJCQkJCQkm cG9ydGFsLT5jcGxhbi0+aXNfdmFsaWQpKQorCQkJcmV0dXJuIGZhbHNlOworCQlFeGVjdXRvclBy ZXBDbGVhbnVwKCpwcmVwX3FkKTsKKwkJRnJlZVF1ZXJ5RGVzYygqcHJlcF9xZCk7CisJfQorCWVs c2UgaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKHBvcnRhbC0+Y3BsYW4pKQogCQlyZXR1cm4gZmFs c2U7CiAKIAkvKiBSZXBsYW4uICBMb2NrcyB3aWxsIGJlIHRha2VuIGZyZXNobHkuICovCkBAIC0x ODUyLDUgKzE4NzYsMTUgQEAgUG9ydGFsTG9ja0NhY2hlZFBsYW4oUG9ydGFsIHBvcnRhbCkKIAlp ZiAocG9ydGFsLT5zdHJhdGVneSAhPSBzdGFydF9zdHJhdGVneSkKIAkJcmV0dXJuIHRydWU7CiAK KwlpZiAocHJlcF9xZCkKKwl7CisJCUFzc2VydChsaXN0X2xlbmd0aChwb3J0YWwtPnN0bXRzKSA9 PSAxKTsKKwkJKnByZXBfcWQgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFubmVk U3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCSAgIHBvcnRhbC0+c291cmNlVGV4dCwKKwkJ CQkJCQkJICAgR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAorCQkJCQkJCQkg ICBOb25lX1JlY2VpdmVyLCBwYXJhbXMsCisJCQkJCQkJCSAgIHBvcnRhbC0+cXVlcnlFbnYsIDAp OworCX0KKwogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMK aW5kZXggZjdmZTM2Njg1OWMuLmZjYTJmODQwODFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYwpAQCAtMTk3Nyw2ICsxOTc3LDIyIEBAIEFjcXVpcmVFeGVjdXRvckxvY2tzKENhY2hl ZFBsYW4gKmNwbGFuKQogCXJldHVybiB0cnVlOwogfQogCisvKgorICogQ2FjaGVkUGxhbkNhblBy ZXAKKyAqCQlDaGVjayB3aGV0aGVyIGEgY2FjaGVkIHBsYW4gaXMgZWxpZ2libGUgZm9yIHBydW5p bmctYXdhcmUgbG9ja2luZworICoJCXZpYSBFeGVjdXRvclByZXBBbmRMb2NrKCkuCisgKgorICog T25seSBzaW5nbGUtc3RhdGVtZW50IHJldXNlZCBnZW5lcmljIHBsYW5zIHdpdGggYSBub24tdXRp bGl0eSBjb21tYW5kCisgKiBxdWFsaWZ5LgorICovCitib29sCitDYWNoZWRQbGFuQ2FuUHJlcChD YWNoZWRQbGFuICpjcGxhbiwgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK3sKKwlyZXR1 cm4gKGNwbGFuID09IHBsYW5zb3VyY2UtPmdwbGFuICYmCisJCQlsaXN0X2xlbmd0aChjcGxhbi0+ c3RtdF9saXN0KSA9PSAxICYmCisJCQlsaW5pdGlhbF9ub2RlKFBsYW5uZWRTdG10LCBjcGxhbi0+ c3RtdF9saXN0KS0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpOworfQorCiAvKgogICogQWNx dWlyZVBsYW5uZXJMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIHBsYW5uaW5nIG9mIGEg cXVlcnl0cmVlIGxpc3Q7CiAgKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA0NzJlMTQxYmJhMy4uM2EwMzM1NWU2YjYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluLmgKQEAgLTY5LDcgKzY5LDggQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9u ZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJ ICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJ CQkJICAgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAogCQkJCQkJICAgY29uc3QgQnVm ZmVyVXNhZ2UgKmJ1ZnVzYWdlLAotCQkJCQkJICAgY29uc3QgTWVtb3J5Q29udGV4dENvdW50ZXJz ICptZW1fY291bnRlcnMpOworCQkJCQkJICAgY29uc3QgTWVtb3J5Q29udGV4dENvdW50ZXJzICpt ZW1fY291bnRlcnMsCisJCQkJCQkgICBRdWVyeURlc2MgKnByZXBfcWQpOwogCiBleHRlcm4gdm9p ZCBFeHBsYWluUHJpbnRQbGFuKEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNj KTsKIGV4dGVybiB2b2lkIEV4cGxhaW5QcmludFRyaWdnZXJzKEV4cGxhaW5TdGF0ZSAqZXMsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCAzM2JiZGJmZWZmYi4uMDkzYmU5YmQyNGIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIm5vZGVzL2xv Y2tvcHRpb25zLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKIAogCiAvKgpAQCAt MjM1LDYgKzIzNiw5IEBAIEV4ZWNHZXRKdW5rQXR0cmlidXRlKFR1cGxlVGFibGVTbG90ICpzbG90 LCBBdHRyTnVtYmVyIGF0dG5vLCBib29sICppc051bGwpCiAgKi8KIGV4dGVybiB2b2lkIEV4ZWN1 dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQg c3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7 CitleHRlcm4gYm9vbCBFeGVjdXRvclByZXBBbmRMb2NrKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBS ZXNvdXJjZU93bmVyIG93bmVyLAorCQkJCQkJCQlpbnQgZWZsYWdzLCBib29sICppc192YWxpZCk7 CitleHRlcm4gdm9pZCBFeGVjdXRvclByZXBDbGVhbnVwKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsK IGV4dGVybiB2b2lkIEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQkJCQkJU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sIHVpbnQ2NCBjb3VudCk7CiBleHRlcm4gdm9pZCBzdGFuZGFy ZF9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5k ZXggMjdhMmM2ODE1YjcuLmE1ZDAwNjMzYjRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjE3 LDYgKzIxNyw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiAiZmxhdCIgbGlz dCBvZiBpbnRlZ2VyIFJUIGluZGV4ZXMgKi8KIAlMaXN0CSAgICpyZXN1bHRSZWxhdGlvbnM7CiAK KwkvKiAiZmxhdCIgbGlzdCBvZiBpbnRlZ2VyIFJUIGluZGV4ZXMgKG9uZSBwZXIgTW9kaWZ5VGFi bGUgbm9kZSkgKi8KKwlMaXN0CSAgICpmaXJzdFJlc3VsdFJlbHM7CisKIAkvKiAiZmxhdCIgbGlz dCBvZiBBcHBlbmRSZWxJbmZvcyAqLwogCUxpc3QJICAgKmFwcGVuZFJlbGF0aW9uczsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAxNGExZGZlZDJiOS4uN2Y2ZjdjZGE3ODEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0xMjAsNiArMTIwLDE2IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10 CiAJLyogUlQgaW5kZXhlcyBvZiByZWxhdGlvbnMgdGFyZ2V0ZWQgYnkgSU5TRVJUL1VQREFURS9E RUxFVEUvTUVSR0UgKi8KIAlCaXRtYXBzZXQgICpyZXN1bHRSZWxhdGlvblJlbGlkczsKIAorCS8q CisJICogcnRhYmxlIGluZGV4ZXMgb2YgZmlyc3QgdGFyZ2V0IHJlbGF0aW9uIGluIGVhY2ggTW9k aWZ5VGFibGUgbm9kZSBpbiB0aGUKKwkgKiBwbGFuIGZvciBJTlNFUlQvVVBEQVRFL0RFTEVURS9N RVJHRS4gIE5JTCBpZiByZXN1bHRSZWxhdGlvbnMgaXMgTklMLgorCSAqCisJICogVGhlc2UgYXJl IHVzZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3NVbnBydW5lZCgpIHRvIGVuc3VyZSB0aGF0IHRo ZQorCSAqIGZpcnN0IHJlc3VsdCByZWwgZm9yIGVhY2ggTW9kaWZ5VGFibGUgcmVtYWlucyBsb2Nr ZWQgZXZlbiBpZiBwcnVuZWQ7CisJICogc2VlIEV4ZWNJbml0TW9kaWZ5VGFibGUoKSBmb3IgdGhl IGV4ZWN1dG9yIHNpZGUgYXNzdW1wdGlvbnMuCisJICovCisJTGlzdAkgICAqZmlyc3RSZXN1bHRS ZWxzOworCiAJLyogbGlzdCBvZiBBcHBlbmRSZWxJbmZvIG5vZGVzICovCiAJTGlzdAkgICAqYXBw ZW5kUmVsYXRpb25zOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmluZGV4IGUwZmM0MDNlNzE3Li4yOTQx ZDNhMzAxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTI1NCw0ICsyNTQsNiBAQCBleHRlcm4g Ym9vbCBDYWNoZWRQbGFuSXNTaW1wbHlWYWxpZChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogZXh0ZXJuIENhY2hlZEV4cHJlc3Npb24gKkdldENhY2hlZEV4cHJlc3Npb24oTm9kZSAqZXhw cik7CiBleHRlcm4gdm9pZCBGcmVlQ2FjaGVkRXhwcmVzc2lvbihDYWNoZWRFeHByZXNzaW9uICpj ZXhwcik7CiAKK2V4dGVybiBib29sIENhY2hlZFBsYW5DYW5QcmVwKENhY2hlZFBsYW4gKmNwbGFu LCBDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5D QUNIRV9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlv bl9wcnVuZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5v dXQKaW5kZXggODQ5MDQ5ZjljNTEuLmVjNzM4NjY0ODZlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CkBAIC00OTU2LDMgKzQ5NTYsMTg3IEBAIHNl bGVjdCAqIGZyb20gKHNlbGVjdCBhLCBiIGZyb20gcGh2X2Jvb2xwYXJ0KSB0CiAoMiByb3dzKQog CiBkcm9wIHRhYmxlIHBodl9ib29scGFydDsKKy0tCistLSBWZXJpZnkgdGhhdCBwcnVuaW5nLWF3 YXJlIGxvY2tpbmcgc2tpcHMgcHJ1bmVkIHBhcnRpdGlvbnMKKy0tIHdoZW4gcmV1c2luZyBhIGdl bmVyaWMgY2FjaGVkIHBsYW4uCistLQorc2V0IHBsYW5fY2FjaGVfbW9kZSB0byBmb3JjZV9nZW5l cmljX3BsYW47CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkg bGlzdCAoYSk7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AxIHBhcnRpdGlvbiBvZiBwcnVuZWxv Y2tfcCBmb3IgdmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBwcnVuZWxvY2tfcDIgcGFydGl0 aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHBydW5l bG9ja19wMyBwYXJ0aXRpb24gb2YgcHJ1bmVsb2NrX3AgZm9yIHZhbHVlcyBpbiAoMyk7CitwcmVw YXJlIHBydW5lbG9ja19xIChpbnQpIGFzIHNlbGVjdCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUg YSA9ICQxOworLS0gRm9yY2UgZ2VuZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBv ZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQXBwZW5kCisgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAtPiAgU2VxIFNj YW4gb24gcHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAk MSkKKyg0IHJvd3MpCisKKy0tIEV4ZWN1dGUgYW5kIGNoZWNrIHdoaWNoIGNoaWxkIHBhcnRpdGlv bnMgYXJlIGxvY2tlZAorYmVnaW47CitleGVjdXRlIHBydW5lbG9ja19xKDEpOworIGEgCistLS0K KygwIHJvd3MpCisKK3NlbGVjdCBjLnJlbG5hbWUKKyAgZnJvbSBwZ19sb2NrcyBsCisgIGpvaW4g cGdfY2xhc3MgYyBvbiBjLm9pZCA9IGwucmVsYXRpb24KKyB3aGVyZSBsLnBpZCA9IHBnX2JhY2tl bmRfcGlkKCkKKyAgIGFuZCBjLnJlbG5hbWUgbGlrZSAncHJ1bmVsb2NrX3BfJworIG9yZGVyIGJ5 IGMucmVsbmFtZTsKKyAgIHJlbG5hbWUgICAgCistLS0tLS0tLS0tLS0tLQorIHBydW5lbG9ja19w MQorKDEgcm93KQorCitjb21taXQ7CitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworLS0gVHVybiBw cnVuaW5nIG9mZgorc2V0IGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyB0byBvZmY7CitwcmVwYXJl IHBydW5lbG9ja19xIChpbnQpIGFzIHNlbGVjdCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUgYSA9 ICQxOworLS0gRm9yY2UgZ2VuZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYp IGV4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AxIHBydW5lbG9j a19wXzEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwcnVu ZWxvY2tfcDIgcHJ1bmVsb2NrX3BfMgorICAgICAgICAgRmlsdGVyOiAoYSA9ICQxKQorICAgLT4g IFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMyBwcnVuZWxvY2tfcF8zCisgICAgICAgICBGaWx0ZXI6 IChhID0gJDEpCisoNyByb3dzKQorCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBw YXJ0aXRpb25zIGFyZSBsb2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKyBh IAorLS0tCisoMCByb3dzKQorCitzZWxlY3QgYy5yZWxuYW1lCisgIGZyb20gcGdfbG9ja3MgbAor ICBqb2luIHBnX2NsYXNzIGMgb24gYy5vaWQgPSBsLnJlbGF0aW9uCisgd2hlcmUgbC5waWQgPSBw Z19iYWNrZW5kX3BpZCgpCisgICBhbmQgYy5yZWxuYW1lIGxpa2UgJ3BydW5lbG9ja19wXycKKyBv cmRlciBieSBjLnJlbG5hbWU7CisgICByZWxuYW1lICAgIAorLS0tLS0tLS0tLS0tLS0KKyBwcnVu ZWxvY2tfcDEKKyBwcnVuZWxvY2tfcDIKKyBwcnVuZWxvY2tfcDMKKygzIHJvd3MpCisKK2NvbW1p dDsKK2RlYWxsb2NhdGUgcHJ1bmVsb2NrX3E7CityZXNldCBlbmFibGVfcGFydGl0aW9uX3BydW5p bmc7CistLQorLS0gVmVyaWZ5IGZpcnN0UmVzdWx0UmVscyBoYW5kbGluZyB3aXRoIG11bHRpcGxl IE1vZGlmeVRhYmxlIG5vZGVzCistLSAod3JpdGFibGUgQ1RFcykgdGFyZ2V0aW5nIGEgcGFydGl0 aW9uZWQgdGFibGUuICBXaGVuIGEgcHJ1bmluZworLS0gcGFyYW1ldGVyIG1hdGNoZXMgbm8gcGFy dGl0aW9uLCBhbGwgcmVzdWx0IHJlbGF0aW9ucyBhcmUgcHJ1bmVkCistLSBhbmQgdGhlIGV4ZWN1 dG9yIG11c3Qgc3RpbGwgZmluZCBhIHVzYWJsZSBmaXJzdCByZXN1bHQgcmVsYXRpb24KKy0tIGZv ciBlYWNoIE1vZGlmeVRhYmxlIG5vZGUuCistLQorcHJlcGFyZSBwcnVuZWxvY2tfbXRfcSAoaW50 LCBpbnQpIGFzCisgIHdpdGggdXBkMSBhcyAodXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSks CisgICAgICAgdXBkMiBhcyAodXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSB3aGVyZSBhID0g JDIpCisgIHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUgYSA9ICQxOworLS0gRm9y Y2UgZ2VuZXJpYyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1 bmVsb2NrX210X3EoMSwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcAorICAg VXBkYXRlIG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF8xCisgICBDVEUgdXBkMQorICAgICAt PiAgVXBkYXRlIG9uIHBydW5lbG9ja19wIHBydW5lbG9ja19wXzMKKyAgICAgICAgICAgVXBkYXRl IG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF80CisgICAgICAgICAgIFVwZGF0ZSBvbiBwcnVu ZWxvY2tfcDIgcHJ1bmVsb2NrX3BfNQorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3Az IHBydW5lbG9ja19wXzYKKyAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzQKKyAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF81CisgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNgorICAgQ1RF IHVwZDIKKyAgICAgLT4gIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF83CisgICAg ICAgICAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfOAorICAgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDIKKyAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF84CisgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSAkMikKKyAgIC0+ICBBcHBlbmQKKyAgICAg ICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDIKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxv Y2tfcDEgcHJ1bmVsb2NrX3BfMQorICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9ICQxKQorKDIy IHJvd3MpCisKKy0tIEFsbCBwYXJ0aXRpb25zIHBydW5lZDogdmFsdWUgNCBtYXRjaGVzIG5vIHBh cnRpdGlvbiwgc28gZWFjaAorLS0gTW9kaWZ5VGFibGUgbXVzdCBzdGlsbCBpbml0aWFsaXplIGNv cnJlY3RseSB3aXRoIG5vIG1hdGNoaW5nCistLSByZXN1bHQgcmVsYXRpb25zLgorZXhwbGFpbiAo Y29zdHMgb2ZmKSBleGVjdXRlIHBydW5lbG9ja19tdF9xKDQsIDUpOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRh dGUgb24gcHJ1bmVsb2NrX3AKKyAgIENURSB1cGQxCisgICAgIC0+ICBVcGRhdGUgb24gcHJ1bmVs b2NrX3AgcHJ1bmVsb2NrX3BfMgorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AxIHBy dW5lbG9ja19wXzMKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tf cF80CisgICAgICAgICAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNQorICAg ICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVu ZWxvY2tfcDEgcHJ1bmVsb2NrX3BfMworICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzQKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydW5lbG9ja19wMyBwcnVuZWxvY2tfcF81CisgICBDVEUgdXBkMgorICAgICAtPiAgVXBk YXRlIG9uIHBydW5lbG9ja19wIHBydW5lbG9ja19wXzYKKyAgICAgICAgICAgLT4gIEFwcGVuZAor ICAgICAgICAgICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAzCisgICAtPiAgQXBwZW5kCisgICAg ICAgICBTdWJwbGFucyBSZW1vdmVkOiAzCisoMTYgcm93cykKKworZGVhbGxvY2F0ZSBwcnVuZWxv Y2tfbXRfcTsKK2Ryb3AgdGFibGUgcHJ1bmVsb2NrX3A7CistLQorLS0gVmVyaWZ5IHRoYXQgcHJ1 bmluZy1hd2FyZSBsb2NraW5nIGZhbGxzIGJhY2sgdG8gbG9ja2luZyBhbGwKKy0tIHBhcnRpdGlv bnMgZm9yIG11bHRpLXN0YXRlbWVudCBDYWNoZWRQbGFucy4gIFJ1bGUgcmV3cml0aW5nIGNhbgor LS0gZXhwYW5kIGEgc2luZ2xlIHN0YXRlbWVudCBpbnRvIG11bHRpcGxlIFBsYW5uZWRTdG10cywg YW5kIGxhdGVyCistLSBzdGF0ZW1lbnRzIG11c3Qgbm90IGhhdmUgdGhlaXIgcHJ1bmluZyBldmFs dWF0ZWQgYmVmb3JlIGVhcmxpZXIKKy0tIG9uZXMgaGF2ZSBleGVjdXRlZCwgc2luY2UgQ0NJIGJl dHdlZW4gc3RhdGVtZW50cyBjYW4gY2hhbmdlIHdoYXQKKy0tIHBydW5pbmcgZXhwcmVzc2lvbnMg c2VlLgorLS0KK2NyZWF0ZSB0YWJsZSBwcnVuZV9jb25maWcgKHZhbCBpbnQpOworaW5zZXJ0IGlu dG8gcHJ1bmVfY29uZmlnIHZhbHVlcyAoMSk7CitjcmVhdGUgdGFibGUgbXVsdGlzdG10X3B0IChh IGludCwgYiBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBtdWx0aXN0 bXRfcHRfMSBwYXJ0aXRpb24gb2YgbXVsdGlzdG10X3B0IGZvciB2YWx1ZXMgaW4gKDEpOworY3Jl YXRlIHRhYmxlIG11bHRpc3RtdF9wdF8yIHBhcnRpdGlvbiBvZiBtdWx0aXN0bXRfcHQgZm9yIHZh bHVlcyBpbiAoMik7CitpbnNlcnQgaW50byBtdWx0aXN0bXRfcHQgdmFsdWVzICgxLCAwKSwgKDIs IDApOworY3JlYXRlIGZ1bmN0aW9uIGdldF9wcnVuZV92YWwoKSByZXR1cm5zIGludCBhcyAkJAor ICBzZWxlY3QgdmFsIGZyb20gcHJ1bmVfY29uZmlnOworJCQgbGFuZ3VhZ2Ugc3FsIHN0YWJsZTsK K2NyZWF0ZSBydWxlIGNvbmZpZ191cGRfcnVsZSBhcyBvbiB1cGRhdGUgdG8gbXVsdGlzdG10X3B0 CisgIGRvIGFsc28gdXBkYXRlIHBydW5lX2NvbmZpZyBzZXQgdmFsID0gMjsKK3NldCBwbGFuX2Nh Y2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFuOworcHJlcGFyZSBtdWx0aV9xIGFzIHVwZGF0 ZSBtdWx0aXN0bXRfcHQgc2V0IGIgPSBiICsgMSB3aGVyZSBhID0gZ2V0X3BydW5lX3ZhbCgpOwor LS0gZmlyc3QgZXhlY3V0ZSBjcmVhdGVzIHRoZSBnZW5lcmljIHBsYW4KK2V4ZWN1dGUgbXVsdGlf cTsKKy0tIHJlc2V0IGZvciB0aGUgcmVhbCB0ZXN0Cit1cGRhdGUgcHJ1bmVfY29uZmlnIHNldCB2 YWwgPSAxOwordXBkYXRlIG11bHRpc3RtdF9wdCBzZXQgYiA9IDA7CistLSBzZWNvbmQgZXhlY3V0 ZSByZXVzZXMgdGhlIHBsYW47IHBydW5pbmctYXdhcmUgbG9ja2luZyBraWNrcyBpbgorZXhlY3V0 ZSBtdWx0aV9xOworc2VsZWN0ICogZnJvbSBtdWx0aXN0bXRfcHQgb3JkZXIgYnkgYTsKKyBhIHwg YiAKKy0tLSstLS0KKyAxIHwgMAorIDIgfCAxCisoMiByb3dzKQorCitkZWFsbG9jYXRlIG11bHRp X3E7Citkcm9wIHJ1bGUgY29uZmlnX3VwZF9ydWxlIG9uIG11bHRpc3RtdF9wdDsKK2Ryb3AgZnVu Y3Rpb24gZ2V0X3BydW5lX3ZhbDsKK2Ryb3AgdGFibGUgbXVsdGlzdG10X3B0LCBwcnVuZV9jb25m aWc7CityZXNldCBwbGFuX2NhY2hlX21vZGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5j YWNoZS5vdXQKaW5kZXggZDU4NTM0Y2ExY2QuLjU0MDc3Mjk0ZGNlIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CkBAIC00MDIsMyArNDAyLDY2IEBAIHNlbGVjdCBuYW1l LCBnZW5lcmljX3BsYW5zLCBjdXN0b21fcGxhbnMgZnJvbSBwZ19wcmVwYXJlZF9zdGF0ZW1lbnRz CiAoMSByb3cpCiAKIGRyb3AgdGFibGUgdGVzdF9tb2RlOworLS0gVGhpcyBleGVyY2lzZXMgdGhl IENhY2hlZFBsYW5QcmVwQ2xlYW51cCgpIHBhdGgsIHdoaWNoIG11c3QgZnJlZQorLS0gdGhlIEVT dGF0ZSBjcmVhdGVkIGJ5IEV4ZWN1dG9yUHJlcCgpIHdoZW4gdGhlIHBsYW4gaXMgaW52YWxpZGF0 ZWQKKy0tIGJlZm9yZSBleGVjdXRpb24gYmVnaW5zLiAgVGhlIHBydW5pbmcgZXhwcmVzc2lvbiB1 c2VzIGEgc3RhYmxlIFNRTAorLS0gZnVuY3Rpb24gdGhhdCBjYWxscyBhIHZvbGF0aWxlIHBscGdz cWwgZnVuY3Rpb24uICBUaGF0IGZ1bmN0aW9uCistLSBwZXJmb3JtcyBEREwgb24gYSBwYXJ0aXRp b24gd2hlbiBhIHNlcGFyYXRlICJzaWduYWwiIHRhYmxlIHNheXMgdG8KKy0tIGRvIHNvLiAgVGhl IHNlY29uZCBFWEVDVVRFIHNob3VsZCByZXBsYW4gY2xlYW5seSBhZnRlciB0aGUgRERMLgorc2V0 IHBsYW5fY2FjaGVfbW9kZSB0byBmb3JjZV9nZW5lcmljX3BsYW47CitjcmVhdGUgdGFibGUgaW52 YWxfZHVyaW5nX3BydW5pbmdfcCAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0 ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSBwYXJ0aXRpb24gb2YgaW52YWxfZHVyaW5n X3BydW5pbmdfcCBmb3IgdmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdf cHJ1bmluZ19wMiBwYXJ0aXRpb24gb2YgaW52YWxfZHVyaW5nX3BydW5pbmdfcCBmb3IgdmFsdWVz IGluICgyKTsKK2luc2VydCBpbnRvIGludmFsX2R1cmluZ19wcnVuaW5nX3AgdmFsdWVzICgxKSwg KDIpOworY3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCAoY3JlYXRlX2lk eCBib29sIG5vdCBudWxsKTsKK2luc2VydCBpbnRvIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25h bCB2YWx1ZXMgKGZhbHNlKTsKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGludmFsaWRhdGVf cGxhbmNhY2hlX2Z1bmMoKSByZXR1cm5zIGludAorYXMgJCQKK2RlY2xhcmUKKwljcmVhdGVfaW5k ZXggYm9vbDsKK2JlZ2luCisJLS0gUGVyZm9ybSBEREwgb24gYSBwYXJ0aXRpb24gaWYgYXNrZWQg dG8KKwlzZWxlY3QgY3JlYXRlX2lkeCBpbnRvIGNyZWF0ZV9pbmRleCBmcm9tIGludmFsX2R1cmlu Z19wcnVuaW5nX3NpZ25hbCBmb3IgdXBkYXRlOworCWlmIGNyZWF0ZV9pbmRleCA9IHRydWUgdGhl bgorCQlyYWlzZSBub3RpY2UgJ2NyZWF0aW5nIGluZGV4IG9uIHBhcnRpdGlvbiBpbnZhbF9kdXJp bmdfcHJ1bmluZ19wMSc7CisJCWNyZWF0ZSBpbmRleCBvbiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19w MSAoYSk7CisJCXVwZGF0ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgc2V0IGNyZWF0ZV9p ZHggPSBmYWxzZTsKKwllbmQgaWY7CisJLS0gdmFsdWUgdGhhdCBwcnVuaW5nIHdpbGwgbWF0Y2gg YWdhaW5zdCBwYXJ0aXRpb24gYm91bmRzCisJcmV0dXJuIDE7CitlbmQ7CiskJCBsYW5ndWFnZSBw bHBnc3FsIHZvbGF0aWxlOworY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3RhYmxlX3BydW5p bmdfdmFsKCkgcmV0dXJucyBpbnQgYXMgJCQKKwlzZWxlY3QgaW52YWxpZGF0ZV9wbGFuY2FjaGVf ZnVuYygpOworJCQgbGFuZ3VhZ2Ugc3FsIHN0YWJsZTsKK3ByZXBhcmUgaW52YWxfZHVyaW5nX3By dW5pbmdfcSBhcyBzZWxlY3QgKiBmcm9tIGludmFsX2R1cmluZ19wcnVuaW5nX3Agd2hlcmUgYSA9 IHN0YWJsZV9wcnVuaW5nX3ZhbCgpOworLS0gQnVpbGQgYSBnZW5lcmljIHBsYW4gYW5kIHJ1biBw cnVuaW5nIG9uY2UsIGJ1dCBkb24ndCBzZXQgdGhlIHNpZ25hbAorLS0gZm9yIGludmFsaWRhdGVf cGxhbmNhY2hlX2Z1bmMoKSB0byBwZXJmb3JtIHRoZSBEREwuCitleHBsYWluICh2ZXJib3NlLCBj b3N0cyBvZmYpIGV4ZWN1dGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICBTdWJwbGFucyBSZW1vdmVkOiAx CisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmludmFsX2R1cmluZ19wcnVuaW5nX3AxIGludmFs X2R1cmluZ19wcnVuaW5nX3BfMQorICAgICAgICAgT3V0cHV0OiBpbnZhbF9kdXJpbmdfcHJ1bmlu Z19wXzEuYQorICAgICAgICAgRmlsdGVyOiAoaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEgPSBz dGFibGVfcHJ1bmluZ192YWwoKSkKKyg1IHJvd3MpCisKKy0tIFJldXNlIHRoZSBnZW5lcmljIHBs YW4uICBNYWtlIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1bmMoKSBwZXJmb3JtIERETAorLS0gZHVy aW5nIHRoaXMgZXhlY3V0aW9uLCB3aGljaCBzaG91bGQgZm9yY2UgcmVwbGFubmluZyB3aXRob3V0 IGVycm9ycy4KK3VwZGF0ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgc2V0IGNyZWF0ZV9p ZHggPSB0cnVlOworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFsX2R1 cmluZ19wcnVuaW5nX3E7CitOT1RJQ0U6ICBjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52 YWxfZHVyaW5nX3BydW5pbmdfcDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQXBwZW5kCisgICBTdWJwbGFucyBSZW1vdmVkOiAxCisgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmludmFsX2R1cmluZ19wcnVuaW5nX3AxIGludmFsX2R1cmluZ19wcnVuaW5nX3BfMQor ICAgICAgICAgT3V0cHV0OiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wXzEuYQorICAgICAgICAgRmls dGVyOiAoaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEgPSBzdGFibGVfcHJ1bmluZ192YWwoKSkK Kyg1IHJvd3MpCisKK2RlYWxsb2NhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKK2Ryb3AgdGFi bGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcCwgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsOwor ZHJvcCBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jLCBzdGFibGVfcHJ1bmluZ192 YWw7CityZXNldCBwbGFuX2NhY2hlX21vZGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9u X3BydW5lLnNxbAppbmRleCAzNTlhOTIwODA1Ni4uYTk4ODQ0ZDE0ZjggMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbApAQCAtMTUxOCwzICsxNTE4LDExOSBAQCBzZWxl Y3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9ib29scGFydCkgdAogICBncm91cCBieSBn cm91cGluZyBzZXRzIChhLCBiKTsKIAogZHJvcCB0YWJsZSBwaHZfYm9vbHBhcnQ7CisKKy0tCist LSBWZXJpZnkgdGhhdCBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgc2tpcHMgcHJ1bmVkIHBhcnRpdGlv bnMKKy0tIHdoZW4gcmV1c2luZyBhIGdlbmVyaWMgY2FjaGVkIHBsYW4uCistLQorc2V0IHBsYW5f Y2FjaGVfbW9kZSB0byBmb3JjZV9nZW5lcmljX3BsYW47CisKK2NyZWF0ZSB0YWJsZSBwcnVuZWxv Y2tfcCAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBwcnVuZWxv Y2tfcDEgcGFydGl0aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDEpOworY3JlYXRl IHRhYmxlIHBydW5lbG9ja19wMiBwYXJ0aXRpb24gb2YgcHJ1bmVsb2NrX3AgZm9yIHZhbHVlcyBp biAoMik7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AzIHBhcnRpdGlvbiBvZiBwcnVuZWxvY2tf cCBmb3IgdmFsdWVzIGluICgzKTsKKworcHJlcGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBzZWxl Y3QgKiBmcm9tIHBydW5lbG9ja19wIHdoZXJlIGEgPSAkMTsKKworLS0gRm9yY2UgZ2VuZXJpYyBw bGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7 CisKKy0tIEV4ZWN1dGUgYW5kIGNoZWNrIHdoaWNoIGNoaWxkIHBhcnRpdGlvbnMgYXJlIGxvY2tl ZAorYmVnaW47CitleGVjdXRlIHBydW5lbG9ja19xKDEpOworCitzZWxlY3QgYy5yZWxuYW1lCisg IGZyb20gcGdfbG9ja3MgbAorICBqb2luIHBnX2NsYXNzIGMgb24gYy5vaWQgPSBsLnJlbGF0aW9u Cisgd2hlcmUgbC5waWQgPSBwZ19iYWNrZW5kX3BpZCgpCisgICBhbmQgYy5yZWxuYW1lIGxpa2Ug J3BydW5lbG9ja19wXycKKyBvcmRlciBieSBjLnJlbG5hbWU7Citjb21taXQ7CisKK2RlYWxsb2Nh dGUgcHJ1bmVsb2NrX3E7CisKKy0tIFR1cm4gcHJ1bmluZyBvZmYKK3NldCBlbmFibGVfcGFydGl0 aW9uX3BydW5pbmcgdG8gb2ZmOworCitwcmVwYXJlIHBydW5lbG9ja19xIChpbnQpIGFzIHNlbGVj dCAqIGZyb20gcHJ1bmVsb2NrX3Agd2hlcmUgYSA9ICQxOworCistLSBGb3JjZSBnZW5lcmljIHBs YW4gY3JlYXRpb24KK2V4cGxhaW4gKGNvc3RzIG9mZikgZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsK KworLS0gRXhlY3V0ZSBhbmQgY2hlY2sgd2hpY2ggY2hpbGQgcGFydGl0aW9ucyBhcmUgbG9ja2Vk CitiZWdpbjsKK2V4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7CisKK3NlbGVjdCBjLnJlbG5hbWUKKyAg ZnJvbSBwZ19sb2NrcyBsCisgIGpvaW4gcGdfY2xhc3MgYyBvbiBjLm9pZCA9IGwucmVsYXRpb24K KyB3aGVyZSBsLnBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKyAgIGFuZCBjLnJlbG5hbWUgbGlrZSAn cHJ1bmVsb2NrX3BfJworIG9yZGVyIGJ5IGMucmVsbmFtZTsKK2NvbW1pdDsKKworZGVhbGxvY2F0 ZSBwcnVuZWxvY2tfcTsKK3Jlc2V0IGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZzsKKworLS0KKy0t IFZlcmlmeSBmaXJzdFJlc3VsdFJlbHMgaGFuZGxpbmcgd2l0aCBtdWx0aXBsZSBNb2RpZnlUYWJs ZSBub2RlcworLS0gKHdyaXRhYmxlIENURXMpIHRhcmdldGluZyBhIHBhcnRpdGlvbmVkIHRhYmxl LiAgV2hlbiBhIHBydW5pbmcKKy0tIHBhcmFtZXRlciBtYXRjaGVzIG5vIHBhcnRpdGlvbiwgYWxs IHJlc3VsdCByZWxhdGlvbnMgYXJlIHBydW5lZAorLS0gYW5kIHRoZSBleGVjdXRvciBtdXN0IHN0 aWxsIGZpbmQgYSB1c2FibGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCistLSBmb3IgZWFjaCBNb2Rp ZnlUYWJsZSBub2RlLgorLS0KK3ByZXBhcmUgcHJ1bmVsb2NrX210X3EgKGludCwgaW50KSBhcwor ICB3aXRoIHVwZDEgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEpLAorICAgICAgIHVw ZDIgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUgYSA9ICQyKQorICB1cGRh dGUgcHJ1bmVsb2NrX3Agc2V0IGEgPSBhIHdoZXJlIGEgPSAkMTsKKworLS0gRm9yY2UgZ2VuZXJp YyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX210 X3EoMSwgMik7CisKKy0tIEFsbCBwYXJ0aXRpb25zIHBydW5lZDogdmFsdWUgNCBtYXRjaGVzIG5v IHBhcnRpdGlvbiwgc28gZWFjaAorLS0gTW9kaWZ5VGFibGUgbXVzdCBzdGlsbCBpbml0aWFsaXpl IGNvcnJlY3RseSB3aXRoIG5vIG1hdGNoaW5nCistLSByZXN1bHQgcmVsYXRpb25zLgorZXhwbGFp biAoY29zdHMgb2ZmKSBleGVjdXRlIHBydW5lbG9ja19tdF9xKDQsIDUpOworCitkZWFsbG9jYXRl IHBydW5lbG9ja19tdF9xOworZHJvcCB0YWJsZSBwcnVuZWxvY2tfcDsKKworLS0KKy0tIFZlcmlm eSB0aGF0IHBydW5pbmctYXdhcmUgbG9ja2luZyBmYWxscyBiYWNrIHRvIGxvY2tpbmcgYWxsCist LSBwYXJ0aXRpb25zIGZvciBtdWx0aS1zdGF0ZW1lbnQgQ2FjaGVkUGxhbnMuICBSdWxlIHJld3Jp dGluZyBjYW4KKy0tIGV4cGFuZCBhIHNpbmdsZSBzdGF0ZW1lbnQgaW50byBtdWx0aXBsZSBQbGFu bmVkU3RtdHMsIGFuZCBsYXRlcgorLS0gc3RhdGVtZW50cyBtdXN0IG5vdCBoYXZlIHRoZWlyIHBy dW5pbmcgZXZhbHVhdGVkIGJlZm9yZSBlYXJsaWVyCistLSBvbmVzIGhhdmUgZXhlY3V0ZWQsIHNp bmNlIENDSSBiZXR3ZWVuIHN0YXRlbWVudHMgY2FuIGNoYW5nZSB3aGF0CistLSBwcnVuaW5nIGV4 cHJlc3Npb25zIHNlZS4KKy0tCitjcmVhdGUgdGFibGUgcHJ1bmVfY29uZmlnICh2YWwgaW50KTsK K2luc2VydCBpbnRvIHBydW5lX2NvbmZpZyB2YWx1ZXMgKDEpOworCitjcmVhdGUgdGFibGUgbXVs dGlzdG10X3B0IChhIGludCwgYiBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0 YWJsZSBtdWx0aXN0bXRfcHRfMSBwYXJ0aXRpb24gb2YgbXVsdGlzdG10X3B0IGZvciB2YWx1ZXMg aW4gKDEpOworY3JlYXRlIHRhYmxlIG11bHRpc3RtdF9wdF8yIHBhcnRpdGlvbiBvZiBtdWx0aXN0 bXRfcHQgZm9yIHZhbHVlcyBpbiAoMik7CitpbnNlcnQgaW50byBtdWx0aXN0bXRfcHQgdmFsdWVz ICgxLCAwKSwgKDIsIDApOworCitjcmVhdGUgZnVuY3Rpb24gZ2V0X3BydW5lX3ZhbCgpIHJldHVy bnMgaW50IGFzICQkCisgIHNlbGVjdCB2YWwgZnJvbSBwcnVuZV9jb25maWc7CiskJCBsYW5ndWFn ZSBzcWwgc3RhYmxlOworCitjcmVhdGUgcnVsZSBjb25maWdfdXBkX3J1bGUgYXMgb24gdXBkYXRl IHRvIG11bHRpc3RtdF9wdAorICBkbyBhbHNvIHVwZGF0ZSBwcnVuZV9jb25maWcgc2V0IHZhbCA9 IDI7CisKK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFuOworcHJlcGFy ZSBtdWx0aV9xIGFzIHVwZGF0ZSBtdWx0aXN0bXRfcHQgc2V0IGIgPSBiICsgMSB3aGVyZSBhID0g Z2V0X3BydW5lX3ZhbCgpOworLS0gZmlyc3QgZXhlY3V0ZSBjcmVhdGVzIHRoZSBnZW5lcmljIHBs YW4KK2V4ZWN1dGUgbXVsdGlfcTsKKy0tIHJlc2V0IGZvciB0aGUgcmVhbCB0ZXN0Cit1cGRhdGUg cHJ1bmVfY29uZmlnIHNldCB2YWwgPSAxOwordXBkYXRlIG11bHRpc3RtdF9wdCBzZXQgYiA9IDA7 CistLSBzZWNvbmQgZXhlY3V0ZSByZXVzZXMgdGhlIHBsYW47IHBydW5pbmctYXdhcmUgbG9ja2lu ZyBraWNrcyBpbgorZXhlY3V0ZSBtdWx0aV9xOworc2VsZWN0ICogZnJvbSBtdWx0aXN0bXRfcHQg b3JkZXIgYnkgYTsKKworZGVhbGxvY2F0ZSBtdWx0aV9xOworZHJvcCBydWxlIGNvbmZpZ191cGRf cnVsZSBvbiBtdWx0aXN0bXRfcHQ7Citkcm9wIGZ1bmN0aW9uIGdldF9wcnVuZV92YWw7Citkcm9w IHRhYmxlIG11bHRpc3RtdF9wdCwgcHJ1bmVfY29uZmlnOworcmVzZXQgcGxhbl9jYWNoZV9tb2Rl OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwKaW5kZXggYWVkMzg4ZDAzYTEuLjkwYjZjNWY4 MmJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwKQEAgLTIyOCwzICsyMjgsNTUgQEAg c2VsZWN0IG5hbWUsIGdlbmVyaWNfcGxhbnMsIGN1c3RvbV9wbGFucyBmcm9tIHBnX3ByZXBhcmVk X3N0YXRlbWVudHMKICAgd2hlcmUgIG5hbWUgPSAndGVzdF9tb2RlX3BwJzsKIAogZHJvcCB0YWJs ZSB0ZXN0X21vZGU7CisKKy0tIFRoaXMgZXhlcmNpc2VzIHRoZSBDYWNoZWRQbGFuUHJlcENsZWFu dXAoKSBwYXRoLCB3aGljaCBtdXN0IGZyZWUKKy0tIHRoZSBFU3RhdGUgY3JlYXRlZCBieSBFeGVj dXRvclByZXAoKSB3aGVuIHRoZSBwbGFuIGlzIGludmFsaWRhdGVkCistLSBiZWZvcmUgZXhlY3V0 aW9uIGJlZ2lucy4gIFRoZSBwcnVuaW5nIGV4cHJlc3Npb24gdXNlcyBhIHN0YWJsZSBTUUwKKy0t IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYSB2b2xhdGlsZSBwbHBnc3FsIGZ1bmN0aW9uLiAgVGhhdCBm dW5jdGlvbgorLS0gcGVyZm9ybXMgRERMIG9uIGEgcGFydGl0aW9uIHdoZW4gYSBzZXBhcmF0ZSAi c2lnbmFsIiB0YWJsZSBzYXlzIHRvCistLSBkbyBzby4gIFRoZSBzZWNvbmQgRVhFQ1VURSBzaG91 bGQgcmVwbGFuIGNsZWFubHkgYWZ0ZXIgdGhlIERETC4KK3NldCBwbGFuX2NhY2hlX21vZGUgdG8g Zm9yY2VfZ2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3Ag KGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVyaW5n X3BydW5pbmdfcDEgcGFydGl0aW9uIG9mIGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVl cyBpbiAoMSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcDIgcGFydGl0aW9u IG9mIGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVlcyBpbiAoMik7CitpbnNlcnQgaW50 byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHZhbHVlcyAoMSksICgyKTsKKworY3JlYXRlIHRhYmxl IGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCAoY3JlYXRlX2lkeCBib29sIG5vdCBudWxsKTsK K2luc2VydCBpbnRvIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCB2YWx1ZXMgKGZhbHNlKTsK K2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1bmMoKSBy ZXR1cm5zIGludAorYXMgJCQKK2RlY2xhcmUKKwljcmVhdGVfaW5kZXggYm9vbDsKK2JlZ2luCisJ LS0gUGVyZm9ybSBEREwgb24gYSBwYXJ0aXRpb24gaWYgYXNrZWQgdG8KKwlzZWxlY3QgY3JlYXRl X2lkeCBpbnRvIGNyZWF0ZV9pbmRleCBmcm9tIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCBm b3IgdXBkYXRlOworCWlmIGNyZWF0ZV9pbmRleCA9IHRydWUgdGhlbgorCQlyYWlzZSBub3RpY2Ug J2NyZWF0aW5nIGluZGV4IG9uIHBhcnRpdGlvbiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSc7CisJ CWNyZWF0ZSBpbmRleCBvbiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSAoYSk7CisJCXVwZGF0ZSBp bnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgc2V0IGNyZWF0ZV9pZHggPSBmYWxzZTsKKwllbmQg aWY7CisJLS0gdmFsdWUgdGhhdCBwcnVuaW5nIHdpbGwgbWF0Y2ggYWdhaW5zdCBwYXJ0aXRpb24g Ym91bmRzCisJcmV0dXJuIDE7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsIHZvbGF0aWxlOwor CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBzdGFibGVfcHJ1bmluZ192YWwoKSByZXR1cm5z IGludCBhcyAkJAorCXNlbGVjdCBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCk7CiskJCBsYW5n dWFnZSBzcWwgc3RhYmxlOworCitwcmVwYXJlIGludmFsX2R1cmluZ19wcnVuaW5nX3EgYXMgc2Vs ZWN0ICogZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHdoZXJlIGEgPSBzdGFibGVfcHJ1bmlu Z192YWwoKTsKKworLS0gQnVpbGQgYSBnZW5lcmljIHBsYW4gYW5kIHJ1biBwcnVuaW5nIG9uY2Us IGJ1dCBkb24ndCBzZXQgdGhlIHNpZ25hbAorLS0gZm9yIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1 bmMoKSB0byBwZXJmb3JtIHRoZSBEREwuCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpIGV4 ZWN1dGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsKKworLS0gUmV1c2UgdGhlIGdlbmVyaWMgcGxh bi4gIE1ha2UgaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVuYygpIHBlcmZvcm0gRERMCistLSBkdXJp bmcgdGhpcyBleGVjdXRpb24sIHdoaWNoIHNob3VsZCBmb3JjZSByZXBsYW5uaW5nIHdpdGhvdXQg ZXJyb3JzLgordXBkYXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25hbCBzZXQgY3JlYXRlX2lk eCA9IHRydWU7CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpIGV4ZWN1dGUgaW52YWxfZHVy aW5nX3BydW5pbmdfcTsKKworZGVhbGxvY2F0ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19xOworZHJv cCB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wLCBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWdu YWw7Citkcm9wIGZ1bmN0aW9uIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1bmMsIHN0YWJsZV9wcnVu aW5nX3ZhbDsKKworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwotLSAKMi40Ny4zCgo= --0000000000001b9d1a0652dc505c--