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 1wRcQT-002WOn-0R for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 21:01:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRcQP-0022qK-2p for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 21:01:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRcQP-0022qC-1C for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 21:01:26 +0000 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRcQN-00000001PYL-13dO for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 21:01:25 +0000 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-43b4bf2e691so3103701fac.3 for ; Mon, 25 May 2026 14:01:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779742881; cv=none; d=google.com; s=arc-20240605; b=eIa36B1BWSKKFTwJmLUMFJQTspyzRA+/333+UI6Rp8n2NYy1ebkSblzIFSdAAaXAsO 6WXggJvM/mDFOSOTkpk307Vy9rA3cW+Y/MIJZK+fLHJG1OAirrT/Eo8swivwWtNqUk96 COchRvB/LcTR0CUOxBThZJCu4O6ECdRf2i7THqjUEdRmzyV49wXxIzee5EqKGQ/fJSAc gik4SkYto7e7AjsMO11r9lSzZ9bX7T1R4hAOMylsuDGl62kQUW2itp1TFEjsAgilYVrW 73c1oKnHbOpk+Jo3+MjoVKdRrzKUL7h7Cx9tzz6qI02Rtzo11FbF1gGmqPy4XTTwek23 PCQA== 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=9zunlxiwlZZQaFsP3mtx6a/weefn2V16xM/uvnpQBjA=; fh=rogo4hKOFQ3mW6HgHxx+VvO3ZmsLemvuIpLbGZZvkiI=; b=PWHpVpJpdMj6jtZjHE/WmFZqN/hX7CSb4xjRVEYais0GG+HjbNokDrEWD9BITcOftV 4/cJeLXCCB+k/r0ikEyClk1ICmb0lC5Uvv7DZzef+bNZ4xUgvM/CUjrjU0Pc3FU64yBT aG3bNhvdjUY7YTgt8q3O1ZMK9tJlJmOpYjgu00Ps9E8/HFqm+0hLOmmJkgIRJgaxk0lc vcMR5ZExajQoLf+n/6j9Z/f6dgkiFrixmSTXZYnb2rtxiult52y5ZKma+lLCUu71xiOZ c5mikJSqcoJKq25rAs+5hwToNb3WKT/2OdDDw7UOEc7/qhDW8hKIlnBR77NZ5F227PTc 2KJQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779742881; x=1780347681; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9zunlxiwlZZQaFsP3mtx6a/weefn2V16xM/uvnpQBjA=; b=d4SpBGMKzyMQxwfhODfmK9zgSLoJFFVEYexJ3heEkZ5QE3xO9tYc1lJ/wUrnMr7O+I ySIuQGHbFdBrurEqGldwGSt5j4FPGc0A20k0FUh2fLN/hm7edQxPjVc/ULIIv4JYEVZ4 /364BpAISb/we9OcvDUKj4CZtHzy4Z06eUu/3zPNXu3MenXkj2DqcMip/UbjK3dRbxGm T9Y48eY+7pbXDrJ8bpTy4+VAGrXiy+O97XoEuB5SvddS4HtRHcmneYhltklDhZG1f0jF UdLoHqprIAqAQmryqRnWilh1bK6/gWSwc/aG0rOheaZt6GmNfItSdhoiZWUxPNbneScE h38A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779742881; x=1780347681; 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=9zunlxiwlZZQaFsP3mtx6a/weefn2V16xM/uvnpQBjA=; b=jPsMhYCb055TLt/R3W4T7hta74r1zPTPQAIemhpuKJCD2ZTEqdeKWtCE6n9et0xylh aXUaihPq2LE8BKfC6l0mnAruWF7Z20txPUcDWx8Xh1xGwGOQ34xB5fm+tUWxNA5BlI/y tgeQqiXCOpIHxsyNAAi7Awm0EUUyDBsaRMkdGT/8t9CgVjzC5AcDN3fEJZcuaYjb6ZPg 2uGcnUphcpsghBwPcb72qiMDaswxFIkc+97KCkB/0n9n/h+URUXhckjW2TgCu3IvM5pI wzGBJVSfB0F4WblTkH35Uvlcfh/2YLQRmLkB4GibQ759cq13xUI+vpKOUiH7xbwmcrIe uaAQ== X-Forwarded-Encrypted: i=1; AFNElJ80RZ+N0ryz/MG867MXaGI38zqvQW+eq76mZDYHESd5wNBpYRIWxeWSEupzq3tp3Hwj55gg4aCmwzVAFwPU@lists.postgresql.org X-Gm-Message-State: AOJu0Yy6dRnP79HO23J8Xx0sLM2Vn/Z2m/DMDdp48iufuXm2XvqV/6O8 p7z6PA9AoJseG1EmkP6aZRjGJB06buQRziLPVq+B1twu9a6vM8YkMmDyK+SAXB5dK+VmGg9nMqg 6L0RfHnQBIfytd+vcAA6skkVNBmtRq/M= X-Gm-Gg: Acq92OECf3+XIA60oTMZ8n+0HBFJQGIZDSzDTDe7EbsGf3CSNHPw2t4xpQQ6iPkfxfD gIq/TIvnY0/k09IE5HxGg3PR/Lrne7w9RsksztjwNZv3pbqImGaiVjI1WlFHuxzyOXdsosSRbXj Vf/layNvqlLWwYW/ZG4d5OUWaO8JoEMDznFmrgQiT0PTqppOtcuAdlLuBgc809cbrm/yGz+FCiB CbM9a/zqlwpTEmGcaiEp8oya2ZGSrCzcjuto9IuAXmwXG0lQi98DWtEE2oNaVLDy6ad5F+LdbHY wGpLY/zdcQ== X-Received: by 2002:a05:6808:238c:b0:482:763e:7107 with SMTP id 5614622812f47-4854a24384cmr9040222b6e.25.1779742880651; Mon, 25 May 2026 14:01:20 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Tue, 26 May 2026 06:01:08 +0900 X-Gm-Features: AVHnY4JGmz4ck8ydTdjQPK01p_W40_05xJAm2bUX-g2NVpe-BBqoJhCippJHR7Q Message-ID: Subject: Re: Remove inner joins based on foreign keys To: Alexandra Wang Cc: Tender Wang , David Rowley , Pg Hackers , Robert Haas , Tom Lane , Paul A Jungwirth , Ashutosh Bapat Content-Type: multipart/mixed; boundary="000000000000317fab0652aaae20" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000317fab0652aaae20 Content-Type: text/plain; charset="UTF-8" (CC'ing folks who discussed this with me at PGConf.dev last week; thanks again for the conversations.) After several discussions at PGConf.dev last week, there are concerns with the lock-based predicate this thread has been converging on. I'd like to lay out the underlying issue and the available approaches in detail on-list, so the wider community can weigh in before we go further. I'm not advocating any particular option here. My goal in this email is to make sure everyone evaluating the patch is starting from the same picture. 1. The trigger gap, demonstrated -------------------------------- On master, no patch applied: CREATE TABLE users (id int PRIMARY KEY, name text); CREATE TABLE orders (id int PRIMARY KEY, user_id int REFERENCES users(id) ON DELETE CASCADE); INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob'); INSERT INTO orders VALUES (10, 1), (11, 1), (20, 2); CREATE FUNCTION show_gap() RETURNS void LANGUAGE plpgsql AS $$ DECLARE u_rows text; o_rows text; BEGIN SELECT string_agg(format('%s (id=%s)', name, id), ', ' ORDER BY id) INTO u_rows FROM users; SELECT string_agg(format('(id=%s, user_id=%s)', id, user_id), ', ' ORDER BY id) INTO o_rows FROM orders; RAISE NOTICE 'users: %', u_rows; RAISE NOTICE 'orders: %', o_rows; END $$; DELETE FROM users WHERE id = 1 RETURNING show_gap(); NOTICE: users: Bob (id=2) NOTICE: orders: (id=10, user_id=1), (id=11, user_id=1), (id=20, user_id=2) show_gap() runs inside the DELETE's RETURNING clause, after Alice has been removed from users but before the cascade trigger has deleted her orders. In show_gap()'s snapshot, Alice is gone, but her two orders (10 and 11) are still there, pointing at a user_id that no longer exists. The FK invariant is locally false. Why this happens: FK constraints are enforced by AFTER ROW triggers that fire at end of statement, after RETURNING evaluation. Between when the DELETE modifies the heap and when the cascade trigger fires, the heap is transiently inconsistent. Any user code that runs in that window with a fresh snapshot observes the inconsistency. In the demo above, plpgsql's SPI call takes such a snapshot. For the FK-based inner-join-removal optimization, this matters because the rewrite from 'child JOIN parent ON c.fk = p.id' to 'child WHERE c.fk IS NOT NULL' assumes the FK invariant holds for the executing snapshot. In show_gap()'s snapshot it doesn't, and the rewrite would return Alice's orders (10 and 11) as if Alice were still present, when the joined form correctly excludes them. 2. Approaches ------------- What PG promises about FK constraints today is what the SQL standard requires: INITIALLY IMMEDIATE constraints are satisfied at end-of- statement, INITIALLY DEFERRED at commit. Neither the standard nor the PG docs explicitly promise that the FK invariant holds for every snapshot a query inside the database can use. The optimization proposed in this thread needs the stronger property: it rewrites a join on the assumption that every visible child row with non-null FK has a corresponding visible parent in the same snapshot. The trigger gap is where that stronger property fails. The approaches I have considered are listed below, with (B) being the predicate currently in the v4 patch. (A) Drop the optimization. Don't pursue FK-based inner-join removal, or any other optimization whose correctness depends on the FK invariant. (B) Lock-based predicate. inner_join_is_removable() and choose_custom_plan() consult CheckRelationOidLockedByMe(RowExclusiveLock) for the FK rels; skip the rewrite if held. RowExclusiveLock is xact-scoped and exceeds the lifetime of any in-xact snapshot, so the lock being present is sufficient to block the optimization in any context where a gap-bearing snapshot might exist. Pros: No new infrastructure. Predicate is local to two functions. CheckRelationOidLockedByMe() is a cheap local hash lookup. Correct against every gap-bearing snapshot path. Cons: Xact-scoped, therefore pessimistic. Once a DML on either FK rel runs in a transaction, the rewrite is suppressed for the rest of that transaction, even when subsequent statements take fresh snapshots that the FK invariant *does* hold for. For cached plans that previously used FK removal, this also produces a planner-replan storm: choose_custom_plan trips on every consultation in the writing xact and replans each time. (C) Snapshot-anchored predicate. Add a "captured during a gap window" bit to SnapshotData, populated in CopySnapshot when AfterTriggerPendingOnAnyRel() returns true at capture time. inner_join_is_removable() and choose_custom_plan() consult the bit on the active snapshot. Pros: Precise. Only snapshots actually captured inside a gap suppress the optimization. Sequential DML-then-SELECT in the same xact keeps the rewrite. Eliminates the replan storm and most of the plan-shape cliff that (B) introduces. Cons: SnapshotData, one of PG's most foundational abstractions, gains a field that encodes trigger-subsystem state. Every future reader of snapshot.h has to learn what the gap is. (D) Close the gap. Make the FK invariant hold for every in-xact snapshot. Either by enforcing RI synchronously inside the DML rather than via AFTER ROW triggers, or by arranging that the deleted parent tuple and the trigger's modifications to children become visible atomically. Pros: Strengthens what PG promises about constraints. Benefits any future optimization that needs the FK invariant. No gating predicate is needed in the planner or plan cache. Cons: Invasive and difficult. (E) Apply the optimization without gap handling, and document the corner cases. Skip the predicate entirely. The optimization fires whenever the FK constraint structurally permits it. Queries that execute against a gap-bearing snapshot can return wrong results, documented as a known limitation. Pros: Smallest patch. Writing a join query that runs during a trigger gap is unusual in practice for most user code. Cons: Can have wrong results. (F) Something else. 3. On splitting the patch ------------------------- Independently of which option above wins, I'd like to separate the patch into two parts so the optimization mechanics and the gap-handling can be reviewed independently (see v5 patches): Part 1. The structural inner-join-removal logic, assuming the FK invariant holds. Part 2. Whatever gap-handling we converge on from section 2 above. If (A) wins, Part 2 is replaced by dropping Part 1 entirely. Part 1 alone would be unsafe to commit by itself; the value of the split is reviewing-order, not commit-order. (Attached v5 is the split version of v4, plus addressing Alex's two comments. 0002 is still the lock-based predicate from v4, posted as the concrete reference for option (B); it can be swapped for whichever approach the gap-handling discussion settles on.) I'd like input on which of the approaches in section 2 people would be willing to live with. Pointers to prior discussion I haven't found, or design considerations I've missed, are also welcome. - Richard --000000000000317fab0652aaae20 Content-Type: application/octet-stream; name="v5-0001-Remove-inner-joins-based-on-foreign-keys.patch" Content-Disposition: attachment; filename="v5-0001-Remove-inner-joins-based-on-foreign-keys.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mplooblt0 RnJvbSA3ZWUzYmU4Nzc4NDI2M2M1NzM5NDM2NTc0NzI1NGI4YjU4MGU5ZDc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxMSBNYXIgMjAyNiAxNjoyNjoxMiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjUg MS8yXSBSZW1vdmUgaW5uZXIgam9pbnMgYmFzZWQgb24gZm9yZWlnbiBrZXlzCgpUaGlzIHBhdGNo IGFsbG93cyB0aGUgcGxhbm5lciB0byBzYWZlbHkgcmVtb3ZlIGFuIGlubmVyIGpvaW4gdG8gdGhl CnJlZmVyZW5jZWQgcmVsYXRpb24gb2YgYSBmb3JlaWduIGtleSB3aGVuIHRoYXQgcmVsYXRpb24g YWN0cyBzb2xlbHkgYXMKYSBzdHJ1Y3R1cmFsIGFuY2hvci4gIFRvIGJlIHJlbW92YWJsZSwgdGhl IGlubmVyIGpvaW4gbXVzdCBiZQptYXRoZW1hdGljYWxseSBndWFyYW50ZWVkIHRvIHByb2R1Y2Ug ZXhhY3RseSBvbmUgbWF0Y2hpbmcgcm93IGZvciBlYWNoCnJvdyBpbiB0aGUgcmVmZXJlbmNpbmcg cmVsYXRpb24uICBUaGUgZm9yZWlnbiBrZXkgY29uc3RyYWludApndWFyYW50ZWVzIGV4aXN0ZW5j ZSAoYXQgbGVhc3Qgb25lIG1hdGNoKSwgd2hpbGUgdGhlIHJlZmVyZW5jZWQKcmVsYXRpb24ncyB1 bmlxdWUgY29uc3RyYWludCBndWFyYW50ZWVzIG5vbi1kdXBsaWNhdGlvbiAoYXQgbW9zdCBvbmUK bWF0Y2gpLgoKVG8gcHJlc2VydmUgdGhlIGlubmVyIGpvaW4ncyBlbGltaW5hdGlvbiBzZW1hbnRp Y3MsIHRoZSByZWZlcmVuY2luZwpyZWxhdGlvbidzIGZvcmVpZ24ga2V5IGNvbHVtbnMgbXVzdCBi ZSBndWFyYW50ZWVkIHRvIGJlIG5vdCBudWxsLiAgSWYKdGhleSBhcmUgbm90IGRlZmluZWQgYXMg bm90IG51bGwgaW4gdGhlIHNjaGVtYSwgdGhpcyBwYXRjaCBpbmplY3RzIGFuCklTIE5PVCBOVUxM IGZpbHRlciB0byBwcmV2ZW50IG51bGwta2V5IHJvd3MgZnJvbSBpbmNvcnJlY3RseSBzdXJ2aXZp bmcKdGhlIHJlbW92YWwuCgpUaGUgcmVmZXJlbmNlZCByZWxhdGlvbidzIG5vbi1rZXkgY29sdW1u cyBjYW5ub3QgYmUgdXNlZCBhbnl3aGVyZSBpbgp0aGUgcXVlcnkuICBCZWNhdXNlIHRoZSByZWZl cmVuY2VkIHJlbGF0aW9uIHdpbGwgYmUgcmVtb3ZlZCwgd2Ugd291bGQKaGF2ZSBubyB3YXkgdG8g cmVhZCB0aGVpciB2YWx1ZXMuICBFdmVuIGlmIHVzZWQgc3RyaWN0bHkgd2l0aGluIHRoZQpqb2lu IGNvbmRpdGlvbnMsIHRoZXkgd291bGQgYWN0IGFzIGxvY2FsIGZpbHRlcnMsIHZpb2xhdGluZyB0 aGUKZXhhY3QtbWF0Y2ggZ3VhcmFudGVlLgoKVGhlb3JldGljYWxseSwgdGhlIHJlZmVyZW5jZWQg cmVsYXRpb24ncyBrZXkgY29sdW1ucyByZXByZXNlbnQgdGhlCmV4YWN0IHNhbWUgbG9naWNhbCB2 YWx1ZXMgYXMgdGhlIHJlZmVyZW5jaW5nIHJlbGF0aW9uJ3MgY29sdW1ucyBkdWUgdG8KdGhlIGZv cmVpZ24ga2V5IGVxdWFsaXR5LiAgSG93ZXZlciwgdGhleSBhcmUgbm90IHN0cmljdGx5CmludGVy Y2hhbmdlYWJsZSBpbiB0aGUgcXVlcnkgdHJlZS4gIFN1YnN0aXR1dGluZyB0aGVtIHJlcXVpcmVz CnByZXNlcnZpbmcgZXhhY3QgZGF0YSB0eXBlcywgY29sbGF0aW9ucywgYW5kIG9wZXJhdG9yIGZh bWlseQpzZW1hbnRpY3MuICBCZWNhdXNlIHRoZSBwbGFubmVyIGN1cnJlbnRseSBsYWNrcyBhIG1l Y2hhbmlzbSB0byBzYWZlbHkKcGVyZm9ybSB0aGlzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiBhY3Jv c3MgZGlmZmVyaW5nIHNjaGVtYXMsIHRoZWlyCnVzYWdlIGlzIHN0cmljdGx5IGxpbWl0ZWQuICBU aGV5IGNhbm5vdCBiZSB1c2VkIGluIGNvbnRleHRzIHRoYXQKcmVxdWlyZSByZXdyaXRpbmcgVmFy IHJlZmVyZW5jZXMsIHN1Y2ggYXMgdGFyZ2V0bGlzdCwgcmVzdHJpY3Rpb24KY2xhdXNlcywgbGF0 ZXJhbF92YXJzLCBvciByaWdodGhhbmQtc2lkZSBleHByZXNzaW9ucyBvZiBzZW1pam9pbnMuCgpU aGV5IGFyZSwgaG93ZXZlciwgcGVybWl0dGVkIHRvIGJyaWRnZSBtdWx0aS1ob3Agam9pbnMgdmlh CkVxdWl2YWxlbmNlQ2xhc3Nlcy4gIFdoZW4gdGhlIHJlbGF0aW9uIGlzIHJlbW92ZWQsIGl0cyBt ZW1iZXJzIGFyZQpkcm9wcGVkIGZyb20gdGhlIEVxdWl2YWxlbmNlQ2xhc3NlcywgYWxsb3dpbmcg dGhlIHBsYW5uZXIncyBuYXRpdmUKbWFjaGluZXJ5IHRvIGRlZHVjZSB0aGUgcmVtYWluaW5nIHRy YW5zaXRpdmUgZXF1YWxpdGllcy4KCkRlZmVycmFibGUgY29uc3RyYWludHMgYXJlIGV4Y2x1ZGVk IGJlY2F1c2UgdGhlaXIgZW5mb3JjZW1lbnQgY2FuIGJlCnBvc3Rwb25lZCB0byBlbmQtb2YtdHJh bnNhY3Rpb24sIHNvIHRoZSBGSyBpbnZhcmlhbnQgbWF5IG5vdCBob2xkIGF0CnF1ZXJ5IHRpbWUu ICBOT1QgVkFMSUQgY29uc3RyYWludHMgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgZXhpc3RpbmcgZGF0 YQptYXkgdmlvbGF0ZSB0aGUgRksgZXZlbiB0aG91Z2ggbmV3IG1vZGlmaWNhdGlvbnMgYXJlIGVu Zm9yY2VkLgoKVGhpcyBjb21taXQgaXMgdGhlIHN0cnVjdHVyYWwgcGFydCBvZiB0aGUgb3B0aW1p emF0aW9uLiAgSXQgYXNzdW1lcwp0aGUgRksgaW52YXJpYW50IGhvbGRzIGZvciBldmVyeSBzbmFw c2hvdCBhIHF1ZXJ5IGNhbiBiZSBleGVjdXRlZAphZ2FpbnN0IC0tIGFuIGFzc3VtcHRpb24gdGhh dCBpcyBub3QgYWN0dWFsbHkgdHJ1ZSBpbiBQRyB0b2RheSBkdWUgdG8KdGhlIEFGVEVSLXJvdy10 cmlnZ2VyIG1vZGVsIG9mIFJJIGVuZm9yY2VtZW50ICh0aGUgInRyaWdnZXIgZ2FwIikuClRoZSBm b2xsb3ctdXAgY29tbWl0IGhhbmRsZXMgdGhhdC4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9lcXVpdmNsYXNzLmMgICAgICAgfCAgMTIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2FuYWx5emVqb2lucy5jICAgICB8IDY2NSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyAgICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmggICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGxhbm1haW4uaCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv am9pbi5vdXQgICAgICAgICAgICB8IDU0MyArKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9qb2luLnNxbCAgICAgICAgICAgICAgICAgfCAyNzggKysrKysrKysKIDE1IGZpbGVzIGNo YW5nZWQsIDE0OTQgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCmluZGV4IGUzNjk3ZGY1MWEyLi4zNGQzZGI5ZDlhNCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpAQCAtMjcwMSwxNCArMjcw MSwxNCBAQCBleHByc19rbm93bl9lcXVhbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqaXRlbTEs IE5vZGUgKml0ZW0yLCBPaWQgb3BmYW1pbHkpCiAgKiB3ZSBpZ25vcmUgdGhhdCBmaW5lIHBvaW50 IGhlcmUuKSAgVGhpcyBpcyBtdWNoIGxpa2UgZXhwcnNfa25vd25fZXF1YWwsCiAgKiBleGNlcHQg Zm9yIHRoZSBmb3JtYXQgb2YgdGhlIGlucHV0LgogICoKLSAqIE9uIHN1Y2Nlc3MsIHdlIGFsc28g c2V0IGZraW5mby0+ZWNsYXNzW2NvbG5vXSB0byB0aGUgbWF0Y2hpbmcgZWNsYXNzLAotICogYW5k IHNldCBma2luZm8tPmZrX2VjbGFzc19tZW1iZXJbY29sbm9dIHRvIHRoZSBlY2xhc3MgbWVtYmVy IGZvciB0aGUKLSAqIHJlZmVyZW5jaW5nIFZhci4KKyAqIElmIGZrX2VjbGFzc19tZW1iZXIgaXMg bm90IE5VTEwsICpma19lY2xhc3NfbWVtYmVyIGlzIHNldCB0byB0aGUgZWNsYXNzCisgKiBtZW1i ZXIgZm9yIHRoZSByZWZlcmVuY2luZyBWYXIuCiAgKi8KIEVxdWl2YWxlbmNlQ2xhc3MgKgogbWF0 Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9rZXlfY29sKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkgIEZvcmVpZ25LZXlPcHRJbmZvICpma2luZm8sCi0JCQkJCQkJCSAgaW50IGNvbG5vKQorCQkJ CQkJCQkgIGludCBjb2xubywKKwkJCQkJCQkJICBFcXVpdmFsZW5jZU1lbWJlciAqKmZrX2VjbGFz c19tZW1iZXIpCiB7CiAJSW5kZXgJCXZhcjF2YXJubyA9IGZraW5mby0+Y29uX3JlbGlkOwogCUF0 dHJOdW1iZXIJdmFyMWF0dG5vID0gZmtpbmZvLT5jb25rZXlbY29sbm9dOwpAQCAtMjc3OCw4ICsy Nzc4LDggQEAgbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9rZXlfY29sKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQlvcGZhbWlsaWVzID0gZ2V0X21lcmdlam9pbl9vcGZhbWlsaWVzKGVxb3ApOwog CQkJCWlmIChlcXVhbChvcGZhbWlsaWVzLCBlYy0+ZWNfb3BmYW1pbGllcykpCiAJCQkJewotCQkJ CQlma2luZm8tPmVjbGFzc1tjb2xub10gPSBlYzsKLQkJCQkJZmtpbmZvLT5ma19lY2xhc3NfbWVt YmVyW2NvbG5vXSA9IGl0ZW0yX2VtOworCQkJCQlpZiAoZmtfZWNsYXNzX21lbWJlcikKKwkJCQkJ CSpma19lY2xhc3NfbWVtYmVyID0gaXRlbTJfZW07CiAJCQkJCXJldHVybiBlYzsKIAkJCQl9CiAJ CQkJLyogT3RoZXJ3aXNlLCBkb25lIHdpdGggdGhpcyBFQywgbW92ZSBvbiB0byB0aGUgbmV4dCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9pbnMuYwppbmRleCBiMDdjYjcz MTQwMS4uNGM1Yzc4ZGNiZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVq b2lucy5jCkBAIC0yMywxMiArMjMsMTQgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgog I2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9qb2luaW5m by5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvcGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgog I2luY2x1ZGUgIm9wdGltaXplci9wbGFubWFpbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0 cmljdGluZm8uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfYWdnLmgiCkBAIC01Miw2ICs1NCw3 IEBAIHR5cGVkZWYgc3RydWN0CiB9IFNlbGZKb2luQ2FuZGlkYXRlOwogCiBib29sCQllbmFibGVf c2VsZl9qb2luX2VsaW1pbmF0aW9uOworYm9vbAkJZW5hYmxlX2ZrX2lubmVyX2pvaW5fcmVtb3Zh bDsKIAogLyogbG9jYWwgZnVuY3Rpb25zICovCiBzdGF0aWMgYm9vbCBqb2luX2lzX3JlbW92YWJs ZShQbGFubmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pOwpAQCAtNzksNiAr ODIsMTAgQEAgc3RhdGljIGJvb2wgaXNfaW5uZXJyZWxfdW5pcXVlX2ZvcihQbGFubmVySW5mbyAq cm9vdCwKIHN0YXRpYyBpbnQJc2VsZl9qb2luX2NhbmRpZGF0ZXNfY21wKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpOwogc3RhdGljIGJvb2wgcmVwbGFjZV9yZWxpZF9jYWxsYmFjayhOb2Rl ICpub2RlLAogCQkJCQkJCQkgICBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0ICpjb250ZXh0KTsKK3N0 YXRpYyBib29sIGlubmVyX2pvaW5faXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBGb3Jl aWduS2V5T3B0SW5mbyAqZmtpbmZvKTsKK3N0YXRpYyB2b2lkIGluamVjdF9ma19ub3RfbnVsbF9x dWFscyhQbGFubmVySW5mbyAqcm9vdCwgRm9yZWlnbktleU9wdEluZm8gKmZraW5mbyk7CitzdGF0 aWMgdm9pZCByZW1vdmVfcmVmZXJlbmNlZF9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCQkJIEZvcmVpZ25LZXlPcHRJbmZvICpma2luZm8pOwogCiAKIC8qCkBAIC00 MzQsMTYgKzQ0MSwxOCBAQCByZW1vdmVfbGVmdGpvaW5yZWxfZnJvbV9xdWVyeShQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkLAogICogdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBxdWVyeS4gIE9w dGlvbmFsbHkgcmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZQogICogcmVtb3ZlZCByZWxpZCB3aXRo IHN1YnN0IGlmIHRoaXMgaXMgYSBzZWxmLWpvaW4gcmVtb3ZhbC4KICAqCi0gKiBUaGlzIGZ1bmN0 aW9uIHNlcnZlcyBhcyB0aGUgY29tbW9uIGluZnJhc3RydWN0dXJlIGZvciBsZWZ0LWpvaW4gcmVt b3ZhbAotICogYW5kIHNlbGYtam9pbiBlbGltaW5hdGlvbi4gIEl0IGlzIGludGVudGlvbmFsbHkg c2NvcGVkIHRvIHVwZGF0ZSBvbmx5IHRoZQotICogc2hhcmVkIHBsYW5uZXIgZGF0YSBzdHJ1Y3R1 cmVzIHRoYXQgYXJlIHVuaXZlcnNhbGx5IGFmZmVjdGVkIGJ5IHJlbGF0aW9uCi0gKiByZW1vdmFs LiAgRWFjaCBzcGVjaWZpYyBjYWxsZXIgcmVtYWlucyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcg YW55Ci0gKiByZW1haW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIHJlcXVpcmVkIGJ5IGl0cyB1bmlxdWUg cmVtb3ZhbCBsb2dpYy4KKyAqIFRoaXMgZnVuY3Rpb24gc2VydmVzIGFzIHRoZSBjb21tb24gaW5m cmFzdHJ1Y3R1cmUgZm9yIHRocmVlIGRpc3RpbmN0CisgKiBvcHRpbWl6YXRpb24gcGFzc2VzOiBs ZWZ0LWpvaW4gcmVtb3ZhbCwgaW5uZXItam9pbiByZW1vdmFsLCBhbmQgc2VsZi1qb2luCisgKiBl bGltaW5hdGlvbi4gIEl0IGlzIGludGVudGlvbmFsbHkgc2NvcGVkIHRvIHVwZGF0ZSBvbmx5IHRo ZSBzaGFyZWQgcGxhbm5lcgorICogZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHVuaXZlcnNhbGx5 IGFmZmVjdGVkIGJ5IHJlbGF0aW9uIHJlbW92YWwuICBFYWNoCisgKiBzcGVjaWZpYyBjYWxsZXIg cmVtYWlucyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgYW55IHJlbWFpbmluZyBkYXRhCisgKiBz dHJ1Y3R1cmVzIHJlcXVpcmVkIGJ5IGl0cyB1bmlxdWUgcmVtb3ZhbCBsb2dpYy4KICAqCiAgKiBU aGUgc3BlY2lmaWMgdHlwZSBvZiByZW1vdmFsIGJlaW5nIHBlcmZvcm1lZCBpcyBkaWN0YXRlZCBi eSB0aGUgY29tYmluYXRpb24KICAqIG9mIHRoZSBzamluZm8gYW5kIHN1YnN0IHBhcmFtZXRlcnMu ICBBIG5vbi1OVUxMIHNqaW5mbyBpbmRpY2F0ZXMgbGVmdC1qb2luCiAgKiByZW1vdmFsLiAgV2hl biBzamluZm8gaXMgTlVMTCwgYSBwb3NpdGl2ZSBzdWJzdCB2YWx1ZSBpbmRpY2F0ZXMgc2VsZi1q b2luCi0gKiBlbGltaW5hdGlvbiAod2hlcmUgcmVmZXJlbmNlcyBhcmUgcmVwbGFjZWQgd2l0aCBz dWJzdCkuCisgKiBlbGltaW5hdGlvbiAod2hlcmUgcmVmZXJlbmNlcyBhcmUgcmVwbGFjZWQgd2l0 aCBzdWJzdCksIHdoaWxlIGEgbmVnYXRpdmUKKyAqIHN1YnN0IHZhbHVlIGluZGljYXRlcyBpbm5l ci1qb2luIHJlbW92YWwuCiAgKi8KIHN0YXRpYyB2b2lkCiByZW1vdmVfcmVsX2Zyb21fcXVlcnko UGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKQEAgLTQ1NSwxMCArNDY0LDExIEBAIHJlbW92 ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAogCUxpc3RDZWxs ICAgKmw7CiAJYm9vbAkJaXNfb3V0ZXJfam9pbiA9IChzamluZm8gIT0gTlVMTCk7CiAJYm9vbAkJ aXNfc2VsZl9qb2luID0gKCFpc19vdXRlcl9qb2luICYmIHN1YnN0ID4gMCk7CisJYm9vbAkJaXNf aW5uZXJfam9pbiA9ICghaXNfb3V0ZXJfam9pbiAmJiBzdWJzdCA8IDApOwogCi0JQXNzZXJ0KGlz X291dGVyX2pvaW4gfHwgaXNfc2VsZl9qb2luKTsKKwlBc3NlcnQoaXNfb3V0ZXJfam9pbiB8fCBp c19zZWxmX2pvaW4gfHwgaXNfaW5uZXJfam9pbik7CiAJQXNzZXJ0KCFpc19vdXRlcl9qb2luIHx8 IG9qcmVsaWQgPiAwKTsKLQlBc3NlcnQoIWlzX291dGVyX2pvaW4gfHwgam9pbnJlbGlkcyAhPSBO VUxMKTsKKwlBc3NlcnQoaXNfc2VsZl9qb2luIHx8IGpvaW5yZWxpZHMgIT0gTlVMTCk7CiAKIAkv KgogCSAqIFVwZGF0ZSBhbGxfYmFzZXJlbHMgYW5kIHJlbGF0ZWQgcmVsaWQgc2V0cy4KQEAgLTUx NSw3ICs1MjUsNyBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGlu dCByZWxpZCwKIAkJCXNqaW5mLT5jb21tdXRlX2JlbG93X2wgPSBibXNfZGVsX21lbWJlcihzamlu Zi0+Y29tbXV0ZV9iZWxvd19sLCBvanJlbGlkKTsKIAkJCXNqaW5mLT5jb21tdXRlX2JlbG93X3Ig PSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9iZWxvd19yLCBvanJlbGlkKTsKIAkJfQot CQllbHNlCisJCWVsc2UgaWYgKGlzX3NlbGZfam9pbikKIAkJewogCQkJLyoKIAkJCSAqIEZvciBz ZWxmLWpvaW4gcmVtb3ZhbCwgcmVwbGFjZSByZWxpZCByZWZlcmVuY2VzIGluCkBAIC01MjQsMTYg KzUzNCwyNCBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwKIAkJCUNoYW5nZVZhck5vZGVzRXh0ZW5kZWQoKE5vZGUgKikgc2ppbmYtPnNlbWlfcmhz X2V4cHJzLCByZWxpZCwgc3Vic3QsCiAJCQkJCQkJCSAgIDAsIHJlcGxhY2VfcmVsaWRfY2FsbGJh Y2spOwogCQl9CisJCWVsc2UgaWYgKGlzX2lubmVyX2pvaW4pCisJCXsKKwkJCS8qCisJCQkgKiBG b3IgaW5uZXItam9pbiByZW1vdmFsLCBubyBhZGRpdGlvbmFsIG1vZGlmaWNhdGlvbnMgYXJlIG5l ZWRlZC4KKwkJCSAqIGlubmVyX2pvaW5faXNfcmVtb3ZhYmxlKCkgaGFzIGFscmVhZHkgZ3VhcmFu dGVlZCB0aGF0IHRoZQorCQkJICogdGFyZ2V0IHJlbGF0aW9uJ3MgY29sdW1ucyBkbyBub3QgbGVh ayBpbnRvIHNlbWlfcmhzX2V4cHJzLgorCQkJICovCisJCX0KIAl9CiAKIAkvKgogCSAqIExpa2V3 aXNlIHJlbW92ZSByZWZlcmVuY2VzIGZyb20gUGxhY2VIb2xkZXJWYXIgZGF0YSBzdHJ1Y3R1cmVz LAotCSAqIHJlbW92aW5nIGFueSBuby1sb25nZXItbmVlZGVkIHBsYWNlaG9sZGVycyBlbnRpcmVs eS4gIFdlIG9ubHkgcmVtb3ZlCi0JICogUEhWcyBmb3IgbGVmdC1qb2luIHJlbW92YWwuICBXaXRo IHNlbGYtam9pbiBlbGltaW5hdGlvbiwgUEhWcyBhbHJlYWR5Ci0JICogZ2V0IG1vdmVkIHRvIHRo ZSByZW1haW5pbmcgcmVsYXRpb24sIHdoZXJlIHRoZXkgbWlnaHQgc3RpbGwgYmUgbmVlZGVkLgot CSAqIEl0IG1pZ2h0IGFsc28gaGFwcGVuIHRoYXQgd2Ugc2tpcCB0aGUgcmVtb3ZhbCBvZiBzb21l IFBIVnMgdGhhdCBjb3VsZAotCSAqIGJlIHJlbW92ZWQuICBIb3dldmVyLCB0aGUgb3ZlcmhlYWQg b2YgZXh0cmEgUEhWcyBpcyBzbWFsbCBjb21wYXJlZCB0bwotCSAqIHRoZSBjb21wbGV4aXR5IG9m IGFuYWx5c2lzIG5lZWRlZCB0byByZW1vdmUgdGhlbS4KKwkgKiByZW1vdmluZyBhbnkgbm8tbG9u Z2VyLW5lZWRlZCBwbGFjZWhvbGRlcnMgZW50aXJlbHkuICBXZSByZW1vdmUgUEhWcworCSAqIGZv ciBsZWZ0LWpvaW4gYW5kIGlubmVyLWpvaW4gcmVtb3ZhbC4gIFdpdGggc2VsZi1qb2luIGVsaW1p bmF0aW9uLCBQSFZzCisJICogYWxyZWFkeSBnZXQgbW92ZWQgdG8gdGhlIHJlbWFpbmluZyByZWxh dGlvbiwgd2hlcmUgdGhleSBtaWdodCBzdGlsbCBiZQorCSAqIG5lZWRlZC4gIEl0IG1pZ2h0IGFs c28gaGFwcGVuIHRoYXQgd2Ugc2tpcCB0aGUgcmVtb3ZhbCBvZiBzb21lIFBIVnMKKwkgKiB0aGF0 IGNvdWxkIGJlIHJlbW92ZWQuICBIb3dldmVyLCB0aGUgb3ZlcmhlYWQgb2YgZXh0cmEgUEhWcyBp cyBzbWFsbAorCSAqIGNvbXBhcmVkIHRvIHRoZSBjb21wbGV4aXR5IG9mIGFuYWx5c2lzIG5lZWRl ZCB0byByZW1vdmUgdGhlbS4KIAkgKgogCSAqIFJlbW92YWwgaXMgYSBiaXQgdHJpY2tpZXIgdGhh biBpdCBtaWdodCBzZWVtOiB3ZSBjYW4gcmVtb3ZlIFBIVnMgdGhhdAogCSAqIGFyZSB1c2VkIGF0 IHRoZSB0YXJnZXQgcmVsIGFuZC9vciBpbiB0aGUgam9pbiBxdWFsLCBidXQgbm90IHRob3NlIHRo YXQKQEAgLTU0MiwxOSArNTYwLDIwIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkLAogCSAqIHNpbmNlIHRoZXkgd2lsbCBib3RoIGhhdmUgcGhfbmVl ZGVkIHNldHMgdGhhdCBhcmUgc3Vic2V0cyBvZgogCSAqIGpvaW5yZWxpZHMuICBIb3dldmVyLCBh IFBIViB1c2VkIGF0IGEgcGFydG5lciByZWwgY291bGQgbm90IGhhdmUgdGhlCiAJICogdGFyZ2V0 IHJlbCBpbiBwaF9ldmFsX2F0LCBzbyB3ZSBjaGVjayB0aGF0IHdoaWxlIGRlY2lkaW5nIHdoZXRo ZXIgdG8KLQkgKiByZW1vdmUgb3IganVzdCB1cGRhdGUgdGhlIFBIVi4gIFRoZXJlIGlzIG5vIGNv cnJlc3BvbmRpbmcgdGVzdCBpbgotCSAqIGpvaW5faXNfcmVtb3ZhYmxlIGJlY2F1c2UgaXQgZG9l c24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRob3NlIGNhc2VzLgorCSAqIHJlbW92ZSBvciBqdXN0 IHVwZGF0ZSB0aGUgUEhWLiAgVGhlcmUgYXJlIG5vIGNvcnJlc3BvbmRpbmcgdGVzdHMgaW4gdGhl CisJICogY2FsbGVycyAobGlrZSBqb2luX2lzX3JlbW92YWJsZSBvciBpbm5lcl9qb2luX2lzX3Jl bW92YWJsZSkgYmVjYXVzZQorCSAqIHRoZXkgZG9uJ3QgbmVlZCB0byBkaXN0aW5ndWlzaCB0aG9z ZSBjYXNlcy4KIAkgKi8KIAlmb3JlYWNoKGwsIHJvb3QtPnBsYWNlaG9sZGVyX2xpc3QpCiAJewog CQlQbGFjZUhvbGRlckluZm8gKnBoaW5mbyA9IChQbGFjZUhvbGRlckluZm8gKikgbGZpcnN0KGwp OwogCi0JCUFzc2VydCghaXNfb3V0ZXJfam9pbiB8fCAhYm1zX2lzX21lbWJlcihyZWxpZCwgcGhp bmZvLT5waF9sYXRlcmFsKSk7CisJCUFzc2VydChpc19zZWxmX2pvaW4gfHwgIWJtc19pc19tZW1i ZXIocmVsaWQsIHBoaW5mby0+cGhfbGF0ZXJhbCkpOwogCi0JCWlmIChpc19vdXRlcl9qb2luICYm CisJCWlmICghaXNfc2VsZl9qb2luICYmCiAJCQlibXNfaXNfc3Vic2V0KHBoaW5mby0+cGhfbmVl ZGVkLCBqb2lucmVsaWRzKSAmJgogCQkJYm1zX2lzX21lbWJlcihyZWxpZCwgcGhpbmZvLT5waF9l dmFsX2F0KSAmJgotCQkJIWJtc19pc19tZW1iZXIob2pyZWxpZCwgcGhpbmZvLT5waF9ldmFsX2F0 KSkKKwkJCShpc19pbm5lcl9qb2luIHx8ICFibXNfaXNfbWVtYmVyKG9qcmVsaWQsIHBoaW5mby0+ cGhfZXZhbF9hdCkpKQogCQl7CiAJCQlyb290LT5wbGFjZWhvbGRlcl9saXN0ID0gZm9yZWFjaF9k ZWxldGVfY3VycmVudChyb290LT5wbGFjZWhvbGRlcl9saXN0LAogCQkJCQkJCQkJCQkJCQkJbCk7 CkBAIC01ODMsMTAgKzYwMiwxMSBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCwKIAkJCS8qCiAJCQkgKiBGb3Igc2VsZi1qb2luIHJlbW92YWwsIHVw ZGF0ZSBWYXIgbm9kZXMgd2l0aGluIHRoZSBQSFYncwogCQkJICogZXhwcmVzc2lvbiB0byByZWZl cmVuY2UgdGhlIHJlcGxhY2VtZW50IHJlbGlkLCBhbmQgYWRqdXN0Ci0JCQkgKiBwaF9sYXRlcmFs IGZvciB0aGUgcmVsaWQgc3Vic3RpdHV0aW9uLiAgKEZvciBsZWZ0LWpvaW4gcmVtb3ZhbCwKLQkJ CSAqIHdlJ3JlIHJlbW92aW5nIHJhdGhlciB0aGFuIHJlcGxhY2luZywgYW5kIGFueSBzdXJ2aXZp bmcgUEhWCi0JCQkgKiBzaG91bGRuJ3QgcmVmZXJlbmNlIHRoZSByZW1vdmVkIHJlbCBpbiBpdHMg ZXhwcmVzc2lvbi4gIEFsc28sCi0JCQkgKiByZWxpZCBjYW4ndCBhcHBlYXIgaW4gcGhfbGF0ZXJh bCBmb3Igb3V0ZXIgam9pbnMuKQorCQkJICogcGhfbGF0ZXJhbCBmb3IgdGhlIHJlbGlkIHN1YnN0 aXR1dGlvbi4gIChGb3IgbGVmdC1qb2luIGFuZAorCQkJICogaW5uZXItam9pbiByZW1vdmFsLCB3 ZSdyZSByZW1vdmluZyByYXRoZXIgdGhhbiByZXBsYWNpbmcsIGFuZAorCQkJICogYW55IHN1cnZp dmluZyBQSFYgc2hvdWxkbid0IHJlZmVyZW5jZSB0aGUgcmVtb3ZlZCByZWwgaW4gaXRzCisJCQkg KiBleHByZXNzaW9uLiAgQWxzbywgcmVsaWQgY2FuJ3QgYXBwZWFyIGluIHBoX2xhdGVyYWwgZm9y IG91dGVyCisJCQkgKiBqb2lucyBhbmQgaW5uZXIgam9pbnMuKQogCQkJICovCiAJCQlpZiAoaXNf c2VsZl9qb2luKQogCQkJewpAQCAtNjEyLDE0ICs2MzIsMTQgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1 ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCiAJICogRm9yIHNlbGYtam9pbiByZW1v dmFsLCB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IHVwZGF0ZWQgdGhlCiAJICogRXF1aXZhbGVuY2VD bGFzc2VzLCBzbyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAuCiAJICovCi0JaWYgKGlzX291dGVyX2pv aW4pCisJaWYgKGlzX291dGVyX2pvaW4gfHwgaXNfaW5uZXJfam9pbikKIAl7CiAJCWZvcmVhY2go bCwgcm9vdC0+ZXFfY2xhc3NlcykKIAkJewogCQkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1 aXZhbGVuY2VDbGFzcyAqKSBsZmlyc3QobCk7CiAKIAkJCWlmIChibXNfaXNfbWVtYmVyKHJlbGlk LCBlYy0+ZWNfcmVsaWRzKSB8fAotCQkJCWJtc19pc19tZW1iZXIob2pyZWxpZCwgZWMtPmVjX3Jl bGlkcykpCisJCQkJKGlzX291dGVyX2pvaW4gJiYgYm1zX2lzX21lbWJlcihvanJlbGlkLCBlYy0+ ZWNfcmVsaWRzKSkpCiAJCQkJcmVtb3ZlX3JlbF9mcm9tX2VjbGFzcyhlYywgcmVsaWQsIG9qcmVs aWQpOwogCQl9CiAJfQpAQCAtNjcxLDcgKzY5MSw4IEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQ bGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAogfQogCiAvKgotICogUmVtb3ZlIGFueSByZWZl cmVuY2VzIHRvIHJlbGlkIG9yIG9qcmVsaWQgZnJvbSB0aGUgUmVzdHJpY3RJbmZvLgorICogUmVt b3ZlIGFueSByZWZlcmVuY2VzIHRvIHJlbGlkIG9yIG9qcmVsaWQgZnJvbSB0aGUgUmVzdHJpY3RJ bmZvLiAgSWYKKyAqIG9qcmVsaWQgaXMgPD0gMCwgaXQgaXMgaWdub3JlZCAodXNlZCBmb3IgaW5u ZXItam9pbiByZW1vdmFsKS4KICAqCiAgKiBXZSBvbmx5IGJvdGhlciB0byBjbGVhbiBvdXQgYml0 cyBpbiB0aGUgUmVzdHJpY3RJbmZvJ3MgdmFyaW91cyByZWxpZCBzZXRzLAogICogbm90IG51bGxp bmdyZWwgYml0cyBpbiBjb250YWluZWQgVmFycyBhbmQgUEhWcy4gIChUaGlzIG1pZ2h0IGhhdmUg dG8gYmUKQEAgLTY5MCwyNyArNzExLDMzIEBAIHJlbW92ZV9yZWxfZnJvbV9yZXN0cmljdGluZm8o UmVzdHJpY3RJbmZvICpyaW5mbywgaW50IHJlbGlkLCBpbnQgb2pyZWxpZCkKIAkgKi8KIAlyaW5m by0+Y2xhdXNlX3JlbGlkcyA9IGJtc19jb3B5KHJpbmZvLT5jbGF1c2VfcmVsaWRzKTsKIAlyaW5m by0+Y2xhdXNlX3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBy ZWxpZCk7Ci0JcmluZm8tPmNsYXVzZV9yZWxpZHMgPSBibXNfZGVsX21lbWJlcihyaW5mby0+Y2xh dXNlX3JlbGlkcywgb2pyZWxpZCk7CisJaWYgKG9qcmVsaWQgPiAwKQorCQlyaW5mby0+Y2xhdXNl X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBvanJlbGlkKTsK IAkvKiBMaWtld2lzZSBmb3IgcmVxdWlyZWRfcmVsaWRzICovCiAJcmluZm8tPnJlcXVpcmVkX3Jl bGlkcyA9IGJtc19jb3B5KHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpOwogCXJpbmZvLT5yZXF1aXJl ZF9yZWxpZHMgPSBibXNfZGVsX21lbWJlcihyaW5mby0+cmVxdWlyZWRfcmVsaWRzLCByZWxpZCk7 Ci0JcmluZm8tPnJlcXVpcmVkX3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5yZXF1aXJl ZF9yZWxpZHMsIG9qcmVsaWQpOworCWlmIChvanJlbGlkID4gMCkKKwkJcmluZm8tPnJlcXVpcmVk X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMsIG9qcmVsaWQp OwogCS8qIExpa2V3aXNlIGZvciBpbmNvbXBhdGlibGVfcmVsaWRzICovCiAJcmluZm8tPmluY29t cGF0aWJsZV9yZWxpZHMgPSBibXNfY29weShyaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcyk7CiAJ cmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMgPSBibXNfZGVsX21lbWJlcihyaW5mby0+aW5jb21w YXRpYmxlX3JlbGlkcywgcmVsaWQpOwotCXJpbmZvLT5pbmNvbXBhdGlibGVfcmVsaWRzID0gYm1z X2RlbF9tZW1iZXIocmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMsIG9qcmVsaWQpOworCWlmIChv anJlbGlkID4gMCkKKwkJcmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMgPSBibXNfZGVsX21lbWJl cihyaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywgb2pyZWxpZCk7CiAJLyogTGlrZXdpc2UgZm9y IG91dGVyX3JlbGlkcyAqLwogCXJpbmZvLT5vdXRlcl9yZWxpZHMgPSBibXNfY29weShyaW5mby0+ b3V0ZXJfcmVsaWRzKTsKIAlyaW5mby0+b3V0ZXJfcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIocmlu Zm8tPm91dGVyX3JlbGlkcywgcmVsaWQpOwotCXJpbmZvLT5vdXRlcl9yZWxpZHMgPSBibXNfZGVs X21lbWJlcihyaW5mby0+b3V0ZXJfcmVsaWRzLCBvanJlbGlkKTsKKwlpZiAob2pyZWxpZCA+IDAp CisJCXJpbmZvLT5vdXRlcl9yZWxpZHMgPSBibXNfZGVsX21lbWJlcihyaW5mby0+b3V0ZXJfcmVs aWRzLCBvanJlbGlkKTsKIAkvKiBMaWtld2lzZSBmb3IgbGVmdF9yZWxpZHMgKi8KIAlyaW5mby0+ bGVmdF9yZWxpZHMgPSBibXNfY29weShyaW5mby0+bGVmdF9yZWxpZHMpOwogCXJpbmZvLT5sZWZ0 X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5sZWZ0X3JlbGlkcywgcmVsaWQpOwotCXJp bmZvLT5sZWZ0X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZvLT5sZWZ0X3JlbGlkcywgb2py ZWxpZCk7CisJaWYgKG9qcmVsaWQgPiAwKQorCQlyaW5mby0+bGVmdF9yZWxpZHMgPSBibXNfZGVs X21lbWJlcihyaW5mby0+bGVmdF9yZWxpZHMsIG9qcmVsaWQpOwogCS8qIExpa2V3aXNlIGZvciBy aWdodF9yZWxpZHMgKi8KIAlyaW5mby0+cmlnaHRfcmVsaWRzID0gYm1zX2NvcHkocmluZm8tPnJp Z2h0X3JlbGlkcyk7CiAJcmluZm8tPnJpZ2h0X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJpbmZv LT5yaWdodF9yZWxpZHMsIHJlbGlkKTsKLQlyaW5mby0+cmlnaHRfcmVsaWRzID0gYm1zX2RlbF9t ZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlkcywgb2pyZWxpZCk7CisJaWYgKG9qcmVsaWQgPiAwKQor CQlyaW5mby0+cmlnaHRfcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlk cywgb2pyZWxpZCk7CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCByZWN1cnNlIHRvIGNsZWFuIHVwIHN1 Yi1jbGF1c2VzICovCiAJaWYgKHJlc3RyaWN0aW9uX2lzX29yX2NsYXVzZShyaW5mbykpCkBAIC03 NDYsNyArNzczLDggQEAgcmVtb3ZlX3JlbF9mcm9tX3Jlc3RyaWN0aW5mbyhSZXN0cmljdEluZm8g KnJpbmZvLCBpbnQgcmVsaWQsIGludCBvanJlbGlkKQogfQogCiAvKgotICogUmVtb3ZlIGFueSBy ZWZlcmVuY2VzIHRvIHJlbGlkIG9yIG9qcmVsaWQgZnJvbSB0aGUgRXF1aXZhbGVuY2VDbGFzcy4K KyAqIFJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byByZWxpZCBvciBvanJlbGlkIGZyb20gdGhlIEVx dWl2YWxlbmNlQ2xhc3MuICBJZgorICogb2pyZWxpZCBpcyA8PSAwLCBpdCBpcyBpZ25vcmVkICh1 c2VkIGZvciBpbm5lci1qb2luIHJlbW92YWwpLgogICoKICAqIExpa2UgcmVtb3ZlX3JlbF9mcm9t X3Jlc3RyaWN0aW5mbywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgY2xlYW5pbmcgb3V0CiAgKiBhbnkg bnVsbGluZ3JlbCBiaXRzIGluIGNvbnRhaW5lZCBWYXJzIGFuZCBQSFZzLiAgKFRoaXMgbWlnaHQg aGF2ZSB0byBiZQpAQCAtNzYxLDcgKzc4OSw4IEBAIHJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1 aXZhbGVuY2VDbGFzcyAqZWMsIGludCByZWxpZCwgaW50IG9qcmVsaWQpCiAKIAkvKiBGaXggdXAg dGhlIEVDJ3Mgb3ZlcmFsbCByZWxpZHMgKi8KIAllYy0+ZWNfcmVsaWRzID0gYm1zX2RlbF9tZW1i ZXIoZWMtPmVjX3JlbGlkcywgcmVsaWQpOwotCWVjLT5lY19yZWxpZHMgPSBibXNfZGVsX21lbWJl cihlYy0+ZWNfcmVsaWRzLCBvanJlbGlkKTsKKwlpZiAob2pyZWxpZCA+IDApCisJCWVjLT5lY19y ZWxpZHMgPSBibXNfZGVsX21lbWJlcihlYy0+ZWNfcmVsaWRzLCBvanJlbGlkKTsKIAogCS8qCiAJ ICogV2UgZG9uJ3QgZXhwZWN0IGFueSBFQyBjaGlsZCBtZW1iZXJzIHRvIGV4aXN0IGF0IHRoaXMg cG9pbnQuICBFbnN1cmUKQEAgLTc4MCwxMyArODA5LDE0IEBAIHJlbW92ZV9yZWxfZnJvbV9lY2xh c3MoRXF1aXZhbGVuY2VDbGFzcyAqZWMsIGludCByZWxpZCwgaW50IG9qcmVsaWQpCiAJCUVxdWl2 YWxlbmNlTWVtYmVyICpjdXJfZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIgKikgbGZpcnN0KGxjKTsK IAogCQlpZiAoYm1zX2lzX21lbWJlcihyZWxpZCwgY3VyX2VtLT5lbV9yZWxpZHMpIHx8Ci0JCQli bXNfaXNfbWVtYmVyKG9qcmVsaWQsIGN1cl9lbS0+ZW1fcmVsaWRzKSkKKwkJCShvanJlbGlkID4g MCAmJiBibXNfaXNfbWVtYmVyKG9qcmVsaWQsIGN1cl9lbS0+ZW1fcmVsaWRzKSkpCiAJCXsKIAkJ CUFzc2VydCghY3VyX2VtLT5lbV9pc19jb25zdCk7CiAJCQkvKiBlbV9yZWxpZHMgaXMgbGlrZWx5 IHRvIGJlIHNoYXJlZCB3aXRoIHNvbWUgUmVzdHJpY3RJbmZvICovCiAJCQljdXJfZW0tPmVtX3Jl bGlkcyA9IGJtc19jb3B5KGN1cl9lbS0+ZW1fcmVsaWRzKTsKIAkJCWN1cl9lbS0+ZW1fcmVsaWRz ID0gYm1zX2RlbF9tZW1iZXIoY3VyX2VtLT5lbV9yZWxpZHMsIHJlbGlkKTsKLQkJCWN1cl9lbS0+ ZW1fcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIoY3VyX2VtLT5lbV9yZWxpZHMsIG9qcmVsaWQpOwor CQkJaWYgKG9qcmVsaWQgPiAwKQorCQkJCWN1cl9lbS0+ZW1fcmVsaWRzID0gYm1zX2RlbF9tZW1i ZXIoY3VyX2VtLT5lbV9yZWxpZHMsIG9qcmVsaWQpOwogCQkJaWYgKGJtc19pc19lbXB0eShjdXJf ZW0tPmVtX3JlbGlkcykpCiAJCQkJZWMtPmVjX21lbWJlcnMgPSBmb3JlYWNoX2RlbGV0ZV9jdXJy ZW50KGVjLT5lY19tZW1iZXJzLCBsYyk7CiAJCX0KQEAgLTIwMzgsNyArMjA2OCw2IEBAIHJlbW92 ZV9zZWxmX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBQbGFuUm93TWFyayAqa21hcmssIFBs YW5Sb3dNYXJrICpybWFyaywKIAkvKiBBbmQgbnVrZSB0aGUgUmVsT3B0SW5mbywganVzdCBpbiBj YXNlIHRoZXJlJ3MgYW5vdGhlciBhY2Nlc3MgcGF0aC4gKi8KIAlwZnJlZSh0b1JlbW92ZSk7CiAK LQogCS8qCiAJICogTm93IHJlcGVhdCBjb25zdHJ1Y3Rpb24gb2YgYXR0cl9uZWVkZWQgYml0cyBj b21pbmcgZnJvbSBhbGwgb3RoZXIKIAkgKiBzb3VyY2VzLgpAQCAtMjU2NywzICsyNTk2LDU2MyBA QCByZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lu bGlzdCkKIAogCXJldHVybiBqb2lubGlzdDsKIH0KKworLyoKKyAqIHJlbW92ZV91c2VsZXNzX2lu bmVyX2pvaW5zCisgKgkgIFNjYW5zIGFsbCBmb3JlaWduIGtleXMgaW4gdGhlIHF1ZXJ5IHRvIGZp bmQgYW5kIHJlbW92ZSByZWZlcmVuY2VkCisgKgkgIHJlbGF0aW9ucyB0aGF0IGFjdCBvbmx5IHRv IGR1cGxpY2F0ZSByZWZlcmVudGlhbCBpbnRlZ3JpdHkgZ3VhcmFudGVlcy4KKyAqCisgKiBXZSBh cmUgcGFzc2VkIHRoZSBjdXJyZW50IGpvaW5saXN0IGFuZCByZXR1cm4gdGhlIHVwZGF0ZWQgbGlz dC4gIE90aGVyCisgKiBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIHRvIGJlIHVwZGF0ZWQgYXJl IGFjY2Vzc2libGUgdmlhICJyb290Ii4KKyAqLworTGlzdCAqCityZW1vdmVfdXNlbGVzc19pbm5l cl9qb2lucyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCit7CisJUmVsaWRzCQly ZW1vdmVkX3JlbGlkcyA9IE5VTEw7CisKK3Jlc3RhcnQ6CisJZm9yZWFjaF9ub2RlKEZvcmVpZ25L ZXlPcHRJbmZvLCBma2luZm8sIHJvb3QtPmZrZXlfbGlzdCkKKwl7CisJCWludAkJCW5yZW1vdmVk OworCisJCS8qCisJCSAqIFNraXAgaWYgZWl0aGVyIHRoZSByZWZlcmVuY2luZyBvciB0aGUgcmVm ZXJlbmNlZCByZWxhdGlvbiBoYXMKKwkJICogYWxyZWFkeSBiZWVuIHJlbW92ZWQgYnkgYSBwcmlv ciBGSyByZW1vdmFsIGluIHRoaXMgbG9vcC4KKwkJICovCisJCWlmIChibXNfaXNfbWVtYmVyKGZr aW5mby0+Y29uX3JlbGlkLCByZW1vdmVkX3JlbGlkcykgfHwKKwkJCWJtc19pc19tZW1iZXIoZmtp bmZvLT5yZWZfcmVsaWQsIHJlbW92ZWRfcmVsaWRzKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNr aXAgaWYgbm90IHJlbW92YWJsZSAqLworCQlpZiAoIWlubmVyX2pvaW5faXNfcmVtb3ZhYmxlKHJv b3QsIGZraW5mbykpCisJCQljb250aW51ZTsKKworCQkvKiBJbmplY3QgSVMgTk9UIE5VTEwgY2xh dXNlcyBmb3IgbnVsbGFibGUgZm9yZWlnbiBrZXkgY29sdW1ucyAqLworCQlpbmplY3RfZmtfbm90 X251bGxfcXVhbHMocm9vdCwgZmtpbmZvKTsKKworCQkvKiBSZW1vdmUgdGhlIHJlZmVyZW5jZWQg cmVsYXRpb24gKi8KKwkJcmVtb3ZlX3JlZmVyZW5jZWRfcmVsX2Zyb21fcXVlcnkocm9vdCwgZmtp bmZvKTsKKworCQkvKiBXZSB2ZXJpZnkgdGhhdCBleGFjdGx5IG9uZSByZWZlcmVuY2UgZ2V0cyBy ZW1vdmVkIGZyb20gam9pbmxpc3QgKi8KKwkJbnJlbW92ZWQgPSAwOworCQlqb2lubGlzdCA9IHJl bW92ZV9yZWxfZnJvbV9qb2lubGlzdChqb2lubGlzdCwgZmtpbmZvLT5yZWZfcmVsaWQsICZucmVt b3ZlZCk7CisJCWlmIChucmVtb3ZlZCAhPSAxKQorCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBm aW5kIHJlbGF0aW9uICVkIGluIGpvaW5saXN0IiwgZmtpbmZvLT5yZWZfcmVsaWQpOworCisJCXJl bW92ZWRfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVtb3ZlZF9yZWxpZHMsIGZraW5mby0+cmVm X3JlbGlkKTsKKworCQkvKgorCQkgKiBSZXN0YXJ0IHRoZSBzY2FuLiAgVGhpcyBpcyBuZWNlc3Nh cnkgdG8gZW5zdXJlIHdlIGZpbmQgYWxsCisJCSAqIHJlbW92YWJsZSBqb2lucyBpbmRlcGVuZGVu dGx5IG9mIG9yZGVyaW5nIG9mIHRoZSBma2V5X2xpc3Q6IGEganVzdC0KKwkJICogY29tcGxldGVk IHJlbW92YWwgY2FuIGNvbGxhcHNlIGFub3RoZXIgRUMgdG8gYSBzaW5nbGUgcmVsLCB3aGljaAor CQkgKiBtYWtlcyBhIHByZXZpb3VzbHktcmVqZWN0ZWQgRksgcGFzcyBpbm5lcl9qb2luX2lzX3Jl bW92YWJsZSdzCisJCSAqIG11bHRpLXJlbC1FQyBjb3VudCBjaGVjay4KKwkJICovCisJCWdvdG8g cmVzdGFydDsKKwl9CisKKwlibXNfZnJlZShyZW1vdmVkX3JlbGlkcyk7CisKKwlyZXR1cm4gam9p bmxpc3Q7Cit9CisKKy8qCisgKiBpbm5lcl9qb2luX2lzX3JlbW92YWJsZQorICoJICBDaGVjayB3 aGV0aGVyIGFuIGlubmVyIGpvaW4gdG8gdGhlIHJlZmVyZW5jZWQgcmVsYXRpb24gb2YgYSBmb3Jl aWduIGtleQorICoJICBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgZnJvbSB0aGUgcXVlcnkgdHJlZS4K KyAqCisgKiBUbyBiZSByZW1vdmFibGUsIHRoZSByZWZlcmVuY2VkIHJlbGF0aW9uIG11c3QgYWN0 IG9ubHkgYXMgYSBzdHJ1Y3R1cmFsCisgKiBhbmNob3IuICBUaGUgaW5uZXIgam9pbiBtdXN0IGJl IG1hdGhlbWF0aWNhbGx5IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBleGFjdGx5CisgKiBvbmUgbWF0 Y2hpbmcgcm93IGZvciBlYWNoIHJlZmVyZW5jaW5nIHJlbGF0aW9uJ3Mgcm93LiAgVGhlIGZvcmVp Z24ga2V5CisgKiBjb25zdHJhaW50IGd1YXJhbnRlZXMgZXhpc3RlbmNlIChhdCBsZWFzdCBvbmUg bWF0Y2gpLCBhbmQgdGhlIHJlZmVyZW5jZWQKKyAqIHJlbGF0aW9uJ3MgdW5pcXVlIGNvbnN0cmFp bnQgZ3VhcmFudGVlcyBub24tZHVwbGljYXRpb24gKGF0IG1vc3Qgb25lIG1hdGNoKS4KKyAqCisg KiBUaGUgcmVmZXJlbmNlZCByZWxhdGlvbidzIG5vbi1rZXkgY29sdW1ucyBjYW5ub3QgYmUgdXNl ZCBhbnl3aGVyZSBpbiB0aGUKKyAqIHF1ZXJ5LiAgQmVjYXVzZSB0aGUgcmVmZXJlbmNlZCByZWxh dGlvbiB3aWxsIGJlIHJlbW92ZWQsIHdlIHdvdWxkIGhhdmUgbm8KKyAqIHdheSB0byByZWFkIHRo ZWlyIHZhbHVlcy4gIEV2ZW4gaWYgdXNlZCBzdHJpY3RseSB3aXRoaW4gdGhlIGpvaW4gY29uZGl0 aW9uLAorICogdGhleSB3b3VsZCBhY3QgYXMgbG9jYWwgZmlsdGVycywgdmlvbGF0aW5nIHRoZSBl eGFjdC1tYXRjaCBndWFyYW50ZWUuCisgKgorICogVGhlb3JldGljYWxseSwgdGhlIHJlZmVyZW5j ZWQgcmVsYXRpb24ncyBrZXkgY29sdW1ucyByZXByZXNlbnQgdGhlIGV4YWN0CisgKiBzYW1lIGxv Z2ljYWwgdmFsdWVzIGFzIHRoZSByZWZlcmVuY2luZyByZWxhdGlvbidzIGNvbHVtbnMgZHVlIHRv IHRoZSBmb3JlaWduCisgKiBrZXkgZXF1YWxpdHkuICBIb3dldmVyLCB0aGV5IGFyZSBub3Qgc3Ry aWN0bHkgaW50ZXJjaGFuZ2VhYmxlIGluIHRoZSBxdWVyeQorICogdHJlZS4gIFN1YnN0aXR1dGlu ZyB0aGVtIHJlcXVpcmVzIHByZXNlcnZpbmcgZXhhY3QgZGF0YSB0eXBlcywgY29sbGF0aW9ucywK KyAqIGFuZCBvcGVyYXRvciBmYW1pbHkgc2VtYW50aWNzLiAgQmVjYXVzZSB0aGUgcGxhbm5lciBj dXJyZW50bHkgbGFja3MgYQorICogbWVjaGFuaXNtIHRvIHNhZmVseSBwZXJmb3JtIHRoaXMgdmFy aWFibGUgc3Vic3RpdHV0aW9uIGFjcm9zcyBkaWZmZXJpbmcKKyAqIHNjaGVtYXMsIHRoZWlyIHVz YWdlIGlzIHN0cmljdGx5IGxpbWl0ZWQuICBUaGV5IGNhbm5vdCBiZSB1c2VkIGluIGNvbnRleHRz CisgKiB0aGF0IHJlcXVpcmUgcmV3cml0aW5nIFZhciByZWZlcmVuY2VzLCBzdWNoIGFzIHRhcmdl dGxpc3QsIHJlc3RyaWN0aW9uCisgKiBjbGF1c2VzLCBsYXRlcmFsX3ZhcnMsIG9yIHJpZ2h0aGFu ZC1zaWRlIGV4cHJlc3Npb25zIG9mIHNlbWlqb2lucy4gIFRoZXkKKyAqIGFyZSwgaG93ZXZlciwg cGVybWl0dGVkIHRvIGJyaWRnZSBtdWx0aS1ob3Agam9pbnMgdmlhIEVxdWl2YWxlbmNlQ2xhc3Nl cy4KKyAqIFJlbW92aW5nIHRoZSByZWxhdGlvbiBzYWZlbHkgZHJvcHMgaXRzIG1lbWJlcnMgZnJv bSB0aGUgRUNzLCBhbmQgdGhlIHBsYW5uZXIKKyAqIG5hdGl2ZWx5IGRlZHVjZXMgdGhlIHJlbWFp bmluZyB0cmFuc2l0aXZlIGVxdWFsaXRpZXMuCisgKgorICogTk9URTogVGhpcyBmdW5jdGlvbiBh c3N1bWVzIHRoZSBjYWxsZXIgd2lsbCBpbmplY3QgSVMgTk9UIE5VTEwgZmlsdGVycyBmb3IKKyAq IHRoZSByZWZlcmVuY2luZyByZWxhdGlvbidzIEZLIGNvbHVtbnMgaWYgdGhleSBhcmUgbm90IHN0 cmljdGx5IGVuZm9yY2VkIGJ5CisgKiB0aGUgc2NoZW1hIHRvIHByZXZlbnQgcGFydGlhbC1tYXRj aCBnaG9zdCByb3dzLgorICovCitzdGF0aWMgYm9vbAoraW5uZXJfam9pbl9pc19yZW1vdmFibGUo UGxhbm5lckluZm8gKnJvb3QsIEZvcmVpZ25LZXlPcHRJbmZvICpma2luZm8pCit7CisJUmVsT3B0 SW5mbyAqY29uX3JlbDsKKwlSZWxPcHRJbmZvICpyZWZfcmVsOworCWludAkJCWF0dHJvZmY7CisJ UmVsaWRzCQlpbnB1dHJlbGlkczsKKwlCaXRtYXBzZXQgICpma19hdHRudW1zID0gTlVMTDsKKwlp bnQJCQljb2xubzsKKwlpbnQJCQltdWx0aXJlbF9lY19jb3VudCA9IDA7CisJaW50CQkJaTsKKwor CS8qIFVzZXIgaGFzIGRpc2FibGVkIHRoaXMgb3B0aW1pemF0aW9uLiAqLworCWlmICghZW5hYmxl X2ZrX2lubmVyX2pvaW5fcmVtb3ZhbCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiB0 aGUgY29uc3RyYWludCBpcyBkZWZlcnJhYmxlLCB0aGUgcGh5c2ljYWwgdGFibGVzIG1heSB0ZW1w b3JhcmlseQorCSAqIHZpb2xhdGUgdGhlIEZLIGR1cmluZyBhbiBhY3RpdmUgdHJhbnNhY3Rpb24u ICBUaGUgaW5uZXIgam9pbiBtdXN0IGJlCisJICogZXhlY3V0ZWQgdG8gZmlsdGVyIG91dCB1bmNv bW1pdHRlZCBvcnBoYW5lZCByb3dzLgorCSAqLworCWlmIChma2luZm8tPmNvbl9kZWZlcnJhYmxl KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSBjb25zdHJhaW50IGlzIG5vdCB2 YWxpZGF0ZWQgKE5PVCBWQUxJRCksIGV4aXN0aW5nIGRhdGEgbWF5CisJICogdmlvbGF0ZSB0aGUg RksgZXZlbiB0aG91Z2ggbmV3IG1vZGlmaWNhdGlvbnMgYXJlIGVuZm9yY2VkLiAgV2UgY2Fubm90 CisJICogcmVseSBvbiBzdWNoIGEgY29uc3RyYWludCBmb3Igam9pbiByZW1vdmFsLgorCSAqLwor CWlmICghZmtpbmZvLT5jb25fdmFsaWRhdGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAq IE5ldmVyIHRyeSB0byBlbGltaW5hdGUgdGhlIHF1ZXJ5J3MgcmVzdWx0IHJlbGF0aW9uLiAgVVBE QVRFLCBERUxFVEUsCisJICogYW5kIE1FUkdFIGNhbiBhbGwgYnVpbGQgYSBqb2luIHRyZWUgd2hl cmUgdGhlIHRhcmdldCByZWxhdGlvbiBhcHBlYXJzCisJICogYXMgdGhlIEZLIHJlZmVyZW5jZWQg cmVsLgorCSAqLworCWlmIChma2luZm8tPnJlZl9yZWxpZCA9PSByb290LT5wYXJzZS0+cmVzdWx0 UmVsYXRpb24pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRWl0aGVyIHJlbGlkIG1pZ2h0 IGlkZW50aWZ5IGEgcmVsIHRoYXQgaXMgaW4gdGhlIHF1ZXJ5J3MgcnRhYmxlIGJ1dAorCSAqIGlz bid0IHJlZmVyZW5jZWQgYnkgdGhlIGpvaW50cmVlLCBvciBoYXMgYmVlbiByZW1vdmVkIGJ5IGpv aW4gcmVtb3ZhbCwKKwkgKiBzbyB0aGF0IGl0IHdvbid0IGhhdmUgYSBSZWxPcHRJbmZvLiAgSGVu Y2Ugd2UgdXNlIGZpbmRfYmFzZV9yZWxfbm9lcnIoKQorCSAqIGhlcmUuICBXZSBjYW4gaWdub3Jl IHN1Y2ggRktzLgorCSAqLworCWNvbl9yZWwgPSBmaW5kX2Jhc2VfcmVsX25vZXJyKHJvb3QsIGZr aW5mby0+Y29uX3JlbGlkKTsKKwlpZiAoY29uX3JlbCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7 CisJcmVmX3JlbCA9IGZpbmRfYmFzZV9yZWxfbm9lcnIocm9vdCwgZmtpbmZvLT5yZWZfcmVsaWQp OworCWlmIChyZWZfcmVsID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWdu b3JlIEZLIHVubGVzcyBib3RoIHJlbHMgYXJlIGJhc2VyZWxzLiAgVGhpcyBnZXRzIHJpZCBvZiBG S3MgdGhhdAorCSAqIGxpbmsgdG8gaW5oZXJpdGFuY2UgY2hpbGQgcmVscyAob3RoZXJyZWxzKS4K KwkgKi8KKwlpZiAoY29uX3JlbC0+cmVsb3B0a2luZCAhPSBSRUxPUFRfQkFTRVJFTCB8fAorCQly ZWZfcmVsLT5yZWxvcHRraW5kICE9IFJFTE9QVF9CQVNFUkVMKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIElmIHRoZSByZWZlcmVuY2VkIHJlbGF0aW9uIGhhcyBhbnkgcmVzdHJpY3Rpb24g Y2xhdXNlcywgdGhleSBhY3QgYXMKKwkgKiBleHBsaWNpdCBmaWx0ZXJzLiAgU2luY2Ugd2UgY2Fu bm90IHBlcmZvcm0gdmFyaWFibGUgc3Vic3RpdHV0aW9uIHRvCisJICogcmV3cml0ZSB0aGVzZSBj bGF1c2VzLCB3ZSBtdXN0IGFib3J0LgorCSAqLworCWlmIChyZWZfcmVsLT5iYXNlcmVzdHJpY3Rp bmZvKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSByZWZlcmVuY2VkIHJlbGF0 aW9uIGlzIGJlaW5nIHNhbXBsZWQgdmlhIFRBQkxFU0FNUExFLCB0aGUgam9pbgorCSAqIHdvdWxk IG5vcm1hbGx5IHJlc3RyaWN0IHRoZSByZXN1bHQgdG8gY2hpbGQgcm93cyB3aG9zZSBwYXJlbnQg bGFuZGVkIGluCisJICogdGhlIHNhbXBsZS4gIFJlbW92aW5nIHRoZSBqb2luIHdvdWxkIGxvc2Ug dGhhdCByZXN0cmljdGlvbiBhbmQgcmV0dXJuCisJICogYWxsIGNoaWxkIHJvd3Mgd2l0aCBhIG5v bi1udWxsIEZLLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIGpvaW5lZCBmb3JtCisJICogd291bGQg cmV0dXJuLiAgU2luY2Ugd2UgaGF2ZSBubyB3YXkgdG8gcHJlc2VydmUgdGhlIHNhbXBsaW5nIGVm ZmVjdAorCSAqIHdoZW4gdGhlIHJlZmVyZW5jZWQgcmVsIGlzIHJlbW92ZWQsIHdlIG11c3Qgc2tp cCB0aGUgb3B0aW1pemF0aW9uLgorCSAqLworCWlmIChyb290LT5zaW1wbGVfcnRlX2FycmF5W2Zr aW5mby0+cmVmX3JlbGlkXS0+dGFibGVzYW1wbGUgIT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyoKKwkgKiBGb3Igam9pbmluZm8sIHdlIGxvb2sgYXQgY2xhdXNlX3JlbGlkcyByYXRoZXIg dGhhbiBhdCB0aGUgam9pbmluZm8gbGlzdAorCSAqIGl0c2VsZi4gIHJlcXVpcmVkX3JlbGlkcyBt YXkgZXhjZWVkIGNsYXVzZV9yZWxpZHMgd2hlbiBhbiBvdXRlciBqb2luIE9OCisJICogY2xhdXNl IG5lZWRzIHRvIGJlIGZvcmNlZCB0byBldmFsdWF0ZSBleGFjdGx5IGF0IHRoZSBsZXZlbCBvZiB0 aGUgb3V0ZXIKKwkgKiBqb2luOyB0aGF0IGNhbiBwbGFjZSBhIGNsYXVzZSBvbiByZWZfcmVsLT5q b2luaW5mbyBldmVuIHRob3VnaCByZWZfcmVsCisJICogZG9lc24ndCBhcHBlYXIgaW4gdGhlIGNs YXVzZSdzIGV4cHJlc3Npb24gYXQgYWxsLiAgUmVqZWN0IG9ubHkgd2hlbiBhCisJICogam9pbiBj bGF1c2UgYWN0dWFsbHkgcmVmZXJlbmNlcyByZWZfcmVsLgorCSAqLworCWZvcmVhY2hfbm9kZShS ZXN0cmljdEluZm8sIHJpbmZvLCByZWZfcmVsLT5qb2luaW5mbykKKwl7CisJCWlmIChibXNfaXNf bWVtYmVyKHJlZl9yZWwtPnJlbGlkLCByaW5mby0+Y2xhdXNlX3JlbGlkcykpCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJLyoKKwkgKiBCdWlsZCBhIGZhc3QgbG9va3VwIGJpdG1hcCBmb3IgdGhl IHJlZmVyZW5jZWQgcmVsYXRpb24ncyBmb3JlaWduIGtleQorCSAqIGF0dHJpYnV0ZXMgdG8gb3B0 aW1pemUgdGhlIHN1YnNlcXVlbnQgYXR0cmlidXRlIHVzYWdlIGNoZWNrcy4KKwkgKi8KKwlmb3Ig KGNvbG5vID0gMDsgY29sbm8gPCBma2luZm8tPm5rZXlzOyBjb2xubysrKQorCXsKKwkJZmtfYXR0 bnVtcyA9IGJtc19hZGRfbWVtYmVyKGZrX2F0dG51bXMsCisJCQkJCQkJCQlma2luZm8tPmNvbmZr ZXlbY29sbm9dIC0gcmVmX3JlbC0+bWluX2F0dHIpOworCX0KKworCS8qCisJICogVmVyaWZ5IGF0 dHJpYnV0ZSB1c2FnZSBhZ2FpbnN0IHRoZSBzdWJzdGl0dXRpb24gY29uc3RyYWludHMuCisJICoK KwkgKiBBcyBhIG1pY3JvLW9wdGltaXphdGlvbiwgaXQgc2VlbXMgYmV0dGVyIHRvIHN0YXJ0IHdp dGggbWF4X2F0dHIgYW5kCisJICogY291bnQgZG93biByYXRoZXIgdGhhbiBzdGFydGluZyB3aXRo IG1pbl9hdHRyIGFuZCBjb3VudGluZyB1cCwgb24gdGhlCisJICogdGhlb3J5IHRoYXQgdGhlIHN5 c3RlbSBhdHRyaWJ1dGVzIGFyZSBzb21ld2hhdCBsZXNzIGxpa2VseSB0byBiZSB3YW50ZWQKKwkg KiBhbmQgc2hvdWxkIGJlIHRlc3RlZCBsYXN0LgorCSAqLworCWZvciAoYXR0cm9mZiA9IHJlZl9y ZWwtPm1heF9hdHRyIC0gcmVmX3JlbC0+bWluX2F0dHI7CisJCSBhdHRyb2ZmID49IDA7CisJCSBh dHRyb2ZmLS0pCisJeworCQlpZiAoYm1zX2lzX21lbWJlcihhdHRyb2ZmLCBma19hdHRudW1zKSkK KwkJeworCQkJLyoKKwkJCSAqIFRoZSBzcGVjaWZpYyBjb2x1bW5zIGludm9sdmVkIGluIHRoZSBm b3JlaWduIGtleSBhcmUgYWxsb3dlZCB0bworCQkJICogYnJpZGdlIG11bHRpLWhvcCBqb2lucyB2 aWEgRXF1aXZhbGVuY2VDbGFzc2VzLiAgSG93ZXZlciwgdGhleQorCQkJICogbXVzdCBub3QgYmUg bmVlZGVkIGluIHRoZSBmaW5hbCB0YXJnZXRsaXN0LCB3aGljaCB3b3VsZCByZXF1aXJlCisJCQkg KiB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCisJCQkgKi8KKwkJCWlmIChibXNfaXNfbWVtYmVyKDAs IHJlZl9yZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIG5vbi1rZXkgY29sdW1ucyBtdXN0IG5v dCBiZSB1c2VkIGFueXdoZXJlLiAgU2VlIGNvbW1lbnRzIGFib3ZlLgorCQkgKi8KKwkJaWYgKCFi bXNfaXNfZW1wdHkocmVmX3JlbC0+YXR0cl9uZWVkZWRbYXR0cm9mZl0pKQorCQkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIENvbXB1dGUgdGhlIHJlbGlkIHNldCBmb3IgdGhlIGpvaW4gd2UgYXJl IGNvbnNpZGVyaW5nICovCisJaW5wdXRyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24oZmtpbmZv LT5jb25fcmVsaWQpOworCWlucHV0cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoaW5wdXRyZWxpZHMs IGZraW5mby0+cmVmX3JlbGlkKTsKKworCS8qCisJICogU2ltaWxhcmx5IGNoZWNrIHRoYXQgdGhl IHJlZmVyZW5jZWQgcmVsIGlzbid0IG5lZWRlZCBieSBhbnkKKwkgKiBQbGFjZUhvbGRlclZhcnMg dGhhdCB3aWxsIGJlIHVzZWQgYWJvdmUgdGhlIGpvaW4uICBUaGUgUEhWIGNhc2UgaXMgYQorCSAq IGxpdHRsZSBiaXQgbW9yZSBjb21wbGljYXRlZCwgYmVjYXVzZSBQSFZzIG1heSBoYXZlIGJlZW4g YXNzaWduZWQgYQorCSAqIHBoX2V2YWxfYXQgbG9jYXRpb24gdGhhdCBpbmNsdWRlcyB0aGUgcmVm X3JlbCwgeWV0IHRoZWlyIGNvbnRhaW5lZAorCSAqIGV4cHJlc3Npb24gbWlnaHQgbm90IGFjdHVh bGx5IHJlZmVyZW5jZSB0aGUgcmVmX3JlbCAoaXQgY291bGQgYmUganVzdCBhCisJICogY29uc3Rh bnQsIGZvciBpbnN0YW5jZSkuICBJZiBzdWNoIGEgUEhWIGlzIGR1ZSB0byBiZSBldmFsdWF0ZWQg YWJvdmUKKwkgKiB0aGUgam9pbiB0aGVuIGl0IG5lZWRuJ3QgcHJldmVudCBpbm5lciBqb2luIHJl bW92YWwuCisJICovCisJZm9yZWFjaF9ub2RlKFBsYWNlSG9sZGVySW5mbywgcGhpbmZvLCByb290 LT5wbGFjZWhvbGRlcl9saXN0KQorCXsKKwkJaWYgKGJtc19vdmVybGFwKHBoaW5mby0+cGhfbGF0 ZXJhbCwgcmVmX3JlbC0+cmVsaWRzKSkKKwkJCXJldHVybiBmYWxzZTsJCS8qIGl0IHJlZmVyZW5j ZXMgcmVmX3JlbCBsYXRlcmFsbHkgKi8KKwkJaWYgKCFibXNfb3ZlcmxhcChwaGluZm8tPnBoX2V2 YWxfYXQsIHJlZl9yZWwtPnJlbGlkcykpCisJCQljb250aW51ZTsJCQkvKiBpdCBkZWZpbml0ZWx5 IGRvZXNuJ3QgcmVmZXJlbmNlIHJlZl9yZWwgKi8KKwkJaWYgKGJtc19pc19zdWJzZXQocGhpbmZv LT5waF9uZWVkZWQsIGlucHV0cmVsaWRzKSkKKwkJCWNvbnRpbnVlOwkJCS8qIFBIViBpcyBub3Qg dXNlZCBhYm92ZSB0aGUgam9pbiAqLworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gYmUgc3VyZSB0 aGVyZSB3aWxsIHN0aWxsIGJlIGEgcGxhY2UgdG8gZXZhbHVhdGUgdGhlIFBIVgorCQkgKiBpZiB3 ZSByZW1vdmUgdGhlIGpvaW4sIGllIHRoYXQgcGhfZXZhbF9hdCB3b3VsZG4ndCBiZWNvbWUgZW1w dHkuCisJCSAqIFdlJ3ZlIGVzdGFibGlzaGVkIGFib3ZlIHRoYXQgcGhfZXZhbF9hdCBvdmVybGFw cyByZWZfcmVsLT5yZWxpZHMsCisJCSAqIHNvIHRoZSBvbmx5IHdheSByZW1vdmFsIGVtcHRpZXMg aXQgaXMgaWYgcmVmX3JlbCBpcyB0aGUgc29sZQorCQkgKiBtZW1iZXIuCisJCSAqLworCQlpZiAo Ym1zX21lbWJlcnNoaXAocGhpbmZvLT5waF9ldmFsX2F0KSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJ cmV0dXJuIGZhbHNlOwkJLyogdGhlcmUgaXNuJ3QgYW55IG90aGVyIHBsYWNlIHRvIGV2YWwgUEhW ICovCisJCS8qIENoZWNrIGNvbnRhaW5lZCBleHByZXNzaW9uIGxhc3QsIHNpbmNlIHRoaXMgaXMg YSBiaXQgZXhwZW5zaXZlICovCisJCWlmIChibXNfb3ZlcmxhcChwdWxsX3Zhcm5vcyhyb290LCAo Tm9kZSAqKSBwaGluZm8tPnBoX3Zhci0+cGhleHByKSwKKwkJCQkJCXJlZl9yZWwtPnJlbGlkcykp CisJCQlyZXR1cm4gZmFsc2U7CQkvKiBjb250YWluZWQgZXhwcmVzc2lvbiByZWZlcmVuY2VzIHJl Zl9yZWwgKi8KKwl9CisKKwkvKgorCSAqIElmIHRoZSByZWZlcmVuY2luZyBhbmQgcmVmZXJlbmNl ZCByZWxhdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBhbiBvdXRlcgorCSAqIGpvaW4gYm91bmRhcnks IHJlbW92aW5nIHRoZSBpbm5lciBqb2luIGFsdGVycyB0aGUgbnVsbC1wYWRkaW5nCisJICogc2Vt YW50aWNzIG9mIHRoZSBxdWVyeS4KKwkgKgorCSAqIEFkZGl0aW9uYWxseSwgaWYgdGhlIHJlZmVy ZW5jZWQgcmVsYXRpb24ncyBjb2x1bW5zIGFyZSByZWZlcmVuY2VkIGluCisJICogdGhlIFJIUyBl eHByZXNzaW9ucyBvZiBhbnkgc2VtaS1qb2luLCB3ZSBtdXN0IHB1bnQuICBXZSBkbyBub3QgaGF2 ZSBhCisJICogd2F5IHRvIHJld3JpdGUgdGhvc2UgcmVmZXJlbmNlcy4KKwkgKi8KKwlmb3JlYWNo X25vZGUoU3BlY2lhbEpvaW5JbmZvLCBzamluZm8sIHJvb3QtPmpvaW5faW5mb19saXN0KQorCXsK KwkJaWYgKChibXNfaXNfbWVtYmVyKGZraW5mby0+Y29uX3JlbGlkLCBzamluZm8tPnN5bl9sZWZ0 aGFuZCkgXgorCQkJIGJtc19pc19tZW1iZXIoZmtpbmZvLT5yZWZfcmVsaWQsIHNqaW5mby0+c3lu X2xlZnRoYW5kKSkgfHwKKwkJCShibXNfaXNfbWVtYmVyKGZraW5mby0+Y29uX3JlbGlkLCBzamlu Zm8tPnN5bl9yaWdodGhhbmQpIF4KKwkJCSBibXNfaXNfbWVtYmVyKGZraW5mby0+cmVmX3JlbGlk LCBzamluZm8tPnN5bl9yaWdodGhhbmQpKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoc2pp bmZvLT5zZW1pX3Joc19leHBycyAhPSBOSUwpCisJCXsKKwkJCWlmIChibXNfaXNfbWVtYmVyKGZr aW5mby0+cmVmX3JlbGlkLAorCQkJCQkJCSAgcHVsbF92YXJub3Mocm9vdCwgKE5vZGUgKikgc2pp bmZvLT5zZW1pX3Joc19leHBycykpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8q CisJICogSWYgdGhlIHJlZmVyZW5jZWQgcmVsYXRpb24gaXMgcmVmZXJlbmNlZCBsYXRlcmFsbHkg YnkgYW55IG90aGVyCisJICogcmVsYXRpb24sIHB1bnQuICBXZSBkbyBub3QgaGF2ZSBhIHdheSB0 byByZXdyaXRlIHRob3NlIHJlZmVyZW5jZXMuCisJICovCisJaWYgKHJvb3QtPmhhc0xhdGVyYWxS VEVzKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQlmb3IgKHJ0aSA9IDE7IHJ0aSA8IHJvb3QtPnNp bXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCisJCXsKKwkJCVJlbE9wdEluZm8gKm90aGVycmVs ID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtydGldOworCisJCQlpZiAob3RoZXJyZWwgPT0gTlVM TCB8fCBvdGhlcnJlbC0+cmVsaWQgPT0gZmtpbmZvLT5yZWZfcmVsaWQpCisJCQkJY29udGludWU7 CisKKwkJCWlmIChvdGhlcnJlbC0+bGF0ZXJhbF92YXJzICE9IE5JTCkKKwkJCXsKKwkJCQlpZiAo Ym1zX2lzX21lbWJlcihma2luZm8tPnJlZl9yZWxpZCwKKwkJCQkJCQkJICBwdWxsX3Zhcm5vcyhy b290LCAoTm9kZSAqKSBvdGhlcnJlbC0+bGF0ZXJhbF92YXJzKSkpCisJCQkJCXJldHVybiBmYWxz ZTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogV2UgbXVzdCBtYXRoZW1hdGljYWxseSBwcm92 ZSB0aGF0IGV2ZXJ5IGNvbHVtbiBpbiB0aGUgcmVmZXJlbmNlZAorCSAqIHJlbGF0aW9uJ3MgZm9y ZWlnbiBrZXkgaXMgYm91bmQgdG8gdGhlIHJlZmVyZW5jaW5nIHJlbGF0aW9uJ3MgZm9yZWlnbgor CSAqIGtleSB2aWEgYSB2YWxpZCBlcXVhbGl0eSBvcGVyYXRvciB3aXRoaW4gYW4gZXF1aXZhbGVu Y2UgY2xhc3MuCisJICovCisJZm9yIChjb2xubyA9IDA7IGNvbG5vIDwgZmtpbmZvLT5ua2V5czsg Y29sbm8rKykKKwl7CisJCUVxdWl2YWxlbmNlQ2xhc3MgKmVjOworCisJCWVjID0gbWF0Y2hfZWNs YXNzZXNfdG9fZm9yZWlnbl9rZXlfY29sKHJvb3QsIGZraW5mbywgY29sbm8sIE5VTEwpOworCisJ CWlmIChlYyA9PSBOVUxMKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogV2UgbXVz dCBhbHNvIHByb3ZlIHRoZSBpbnZlcnNlOiB0aGUgcmVmZXJlbmNlZCByZWxhdGlvbiBtdXN0IG5v dAorCSAqIHBhcnRpY2lwYXRlIGluIGFueSBFcXVpdmFsZW5jZUNsYXNzZXMgb3RoZXIgdGhhbiB0 aGUgb25lcyB0aGF0IGJyaWRnZQorCSAqIGl0IHRvIHRoZSByZWZlcmVuY2luZyByZWxhdGlvbidz IGZvcmVpZ24ga2V5LCBhbmQgd2l0aGluIHRob3NlIEVDcyBubworCSAqIEVxdWl2YWxlbmNlTWVt YmVyIG1heSBtaXggcmVmX3JlbCB3aXRoIG90aGVyIHJlbGF0aW9ucy4KKwkgKgorCSAqIFdlIGhh dmUgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSByZWxhdGlvbiBwYXJ0aWNpcGF0ZXMgaW4gJ25r ZXlzJworCSAqIHZhbGlkIEVDcyBicmlkZ2luZyB0byB0aGUgcmVmZXJlbmNpbmcgcmVsYXRpb24u ICBJZiBpdCBhcHBlYXJzIGluIG1vcmUKKwkgKiBtdWx0aS1yZWwgRUNzIHRoYW4gdGhhdCwgaXQg bWVhbnMgYSByZWZlcmVuY2VkIGtleSBjb2x1bW4gaXMgaW52b2x2ZWQKKwkgKiBpbiBhbiBlcXVh bGl0eSB0aGF0IHRoZSBwbGFubmVyIHJlZnVzZWQgdG8gbWVyZ2Ugd2l0aCB0aGUgZm9yZWlnbiBr ZXkncworCSAqIEVDLiAgVGhpcyBzcGxpdCBvY2N1cnMgZHVyaW5nIGNvbGxhdGlvbiBtaXNtYXRj aGVzLCBpbmNvbXBhdGlibGUKKwkgKiBvcGVyYXRvciBmYW1pbGllcywgb3IgaWYgdGhlIGtleSBp cyB3cmFwcGVkIGluIGFuIGV4cHJlc3Npb24gbW9yZQorCSAqIGNvbXBsZXggdGhhbiBhIHNpbXBs ZSBWYXIgKGUuZy4sIHJlZl9yZWwucGsgKyAxID0gYy52YWwpLiAgSW4gdGhvc2UKKwkgKiBzY2Vu YXJpb3MsIHJlbW92aW5nIHRoZSByZWZlcmVuY2VkIHJlbGF0aW9uIHdvdWxkIHNpbGVudGx5IGRl c3Ryb3kgdGhlCisJICogam9pbiBjb25kaXRpb24gb2YgdGhhdCBzZXBhcmF0ZSBFQywgYmVjYXVz ZSB0aGUgcmVmZXJlbmNpbmcgcmVsYXRpb24ncworCSAqIGNvbHVtbiBpcyBub3QgcHJlc2VudCBp biBpdCB0byB0YWtlIG92ZXIgdGhlIHRyYW5zaXRpdmUgZXF1YWxpdHkuCisJICoKKwkgKiBTaW5n bGUtcmVsIEVDcyAoc29ydC9ncm91cCBleHByZXNzaW9ucywgb3IgRUNzIGxlZnQgZGVnZW5lcmF0 ZSBieSBhCisJICogcHJpb3IgRksgcmVtb3ZhbCBzdHJpcHBpbmcgdGhlaXIgb3RoZXIgc2lkZSkg YXJlIHNraXBwZWQ6IHRoZWlyCisJICogc3Vydml2aW5nIG1lbWJlcnMgYWxsIHJlZmVyZW5jZSBy ZWZfcmVsIGV4Y2x1c2l2ZWx5IGFuZCB3aWxsIGJlIGRyb3BwZWQKKwkgKiBkdXJpbmcgcmVtb3Zl X3JlbF9mcm9tX2VjbGFzcy4gIFNraXBwaW5nIHRoZW0gaXMgd2hhdCBsZXRzIGEgY2hhaW4gb2YK KwkgKiBGSyByZW1vdmFscyBzdWNjZWVkIG9uY2UgdGhlIGNhbGxlciByZS1ydW5zIHRoZSBzY2Fu LgorCSAqCisJICogV2l0aGluIHRoZSBicmlkZ2luZyBFQ3MsIHdlIGFsc28gbmVlZCB0byByZWpl Y3QgYW55IEVNIHRoYXQgbWVudGlvbnMKKwkgKiByZWZfcmVsIHRvZ2V0aGVyIHdpdGggb3RoZXIg cmVsYXRpb25zIChlLmcuLCByZWZfcmVsLnBrICsgb3RoZXJfcmVsLngpLgorCSAqIFN1Y2ggYW4g RU0gd291bGQgc3Vydml2ZSByZW1vdmVfcmVsX2Zyb21fZWNsYXNzIHdpdGggYSBub24tZW1wdHkK KwkgKiBlbV9yZWxpZHMsIHlldCBpdHMgZXhwcmVzc2lvbiBzdGlsbCBlbWJlZHMgYSBWYXIgb24g dGhlIG5vdy1yZW1vdmVkCisJICogcmVmX3JlbC4KKwkgKi8KKwlpID0gLTE7CisJd2hpbGUgKChp ID0gYm1zX25leHRfbWVtYmVyKHJlZl9yZWwtPmVjbGFzc19pbmRleGVzLCBpKSkgPj0gMCkKKwl7 CisJCUVxdWl2YWxlbmNlQ2xhc3MgKmVjID0gKEVxdWl2YWxlbmNlQ2xhc3MgKikgbGlzdF9udGgo cm9vdC0+ZXFfY2xhc3NlcywgaSk7CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKGVjLT5lY19yZWxp ZHMpID09IEJNU19NVUxUSVBMRSkKKwkJCW11bHRpcmVsX2VjX2NvdW50Kys7CisKKwkJZm9yZWFj aF9ub2RlKEVxdWl2YWxlbmNlTWVtYmVyLCBlbSwgZWMtPmVjX21lbWJlcnMpCisJCXsKKwkJCWlm IChibXNfaXNfbWVtYmVyKGZraW5mby0+cmVmX3JlbGlkLCBlbS0+ZW1fcmVsaWRzKSAmJgorCQkJ CWJtc19tZW1iZXJzaGlwKGVtLT5lbV9yZWxpZHMpID09IEJNU19NVUxUSVBMRSkKKwkJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKwl9CisJaWYgKG11bHRpcmVsX2VjX2NvdW50ICE9IGZraW5mby0+bmtl eXMpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEFsbCBjaGVja3MgcGFzc2VkICovCisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBpbmplY3RfZmtfbm90X251bGxfcXVhbHMKKyAqCSAgSW5qZWN0 cyBJUyBOT1QgTlVMTCBjbGF1c2VzIGludG8gdGhlIHJlZmVyZW5jaW5nIHJlbGF0aW9uJ3MgcmVz dHJpY3Rpb24KKyAqCSAgbGlzdCBmb3IgYW55IGZvcmVpZ24ga2V5IGNvbHVtbnMgdGhhdCBhcmUg bm90IGVuZm9yY2VkIGFzIE5PVCBOVUxMIGJ5IHRoZQorICoJICBzY2hlbWEuCisgKgorICogV2hl biB3ZSByZW1vdmUgYSByZWZlcmVuY2VkIHJlbGF0aW9uICh0aGUgaW5uZXIgam9pbiB0YXJnZXQp IGJhc2VkIG9uIGEKKyAqIGZvcmVpZ24ga2V5LCB3ZSBsb3NlIHRoZSBpbXBsaWNpdCBmaWx0ZXJp bmcgb2YgTlVMTHMgdGhhdCBhIHN0YW5kYXJkIGlubmVyCisgKiBqb2luIHBlcmZvcm1zLiAgVG8g cHJlc2VydmUgbWF0aGVtYXRpY2FsIGVxdWl2YWxlbmNlLCB3ZSBtdXN0IGVuc3VyZSB0aGUKKyAq IHJlZmVyZW5jaW5nIHJlbGF0aW9uIGRvZXMgbm90IGVtaXQgcm93cyB3aXRoIE5VTEwgZm9yZWln biBrZXlzLgorICovCitzdGF0aWMgdm9pZAoraW5qZWN0X2ZrX25vdF9udWxsX3F1YWxzKFBsYW5u ZXJJbmZvICpyb290LCBGb3JlaWduS2V5T3B0SW5mbyAqZmtpbmZvKQoreworCVJlbE9wdEluZm8g KmNvbl9yZWw7CisJUmFuZ2VUYmxFbnRyeSAqY29uX3J0ZTsKKwlCaXRtYXBzZXQgICpub3RudWxs YXR0bnVtczsKKwlCaXRtYXBzZXQgICphbHJlYWR5X2luamVjdGVkID0gTlVMTDsKKwlpbnQJCQlp OworCisJY29uX3JlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgZmtpbmZvLT5jb25fcmVsaWQpOwor CWNvbl9ydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W2ZraW5mby0+Y29uX3JlbGlkXTsKKwlB c3NlcnQoY29uX3J0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCUFzc2VydCghY29uX3J0 ZS0+aW5oKTsKKworCS8qCisJICogR2V0IHRoZSBjb2x1bW4gbm90LW51bGwgY29uc3RyYWludCBp bmZvcm1hdGlvbiBmb3IgdGhlIHJlZmVyZW5jaW5nCisJICogcmVsYXRpb24uCisJICovCisJbm90 bnVsbGF0dG51bXMgPSBmaW5kX3JlbGF0aW9uX25vdG51bGxhdHRzKHJvb3QsIGNvbl9ydGUtPnJl bGlkKTsKKworCS8qCisJICogQ29sbGVjdCBhdHRub3MgYWxyZWFkeSBjb3ZlcmVkIGJ5IGFuIElT IE5PVCBOVUxMIGNsYXVzZSBvbiBjb25fcmVsIGluCisJICogYmFzZXJlc3RyaWN0aW5mbywgc28g d2UgZG9uJ3QgYXBwZW5kIGEgcmVkdW5kYW50IHF1YWwuICBTdWNoIGNsYXVzZXMKKwkgKiBtYXkg Y29tZSBmcm9tIGEgcHJpb3IgRksgcmVtb3ZhbCBmb3IgYW5vdGhlciBGSyBvbiB0aGUgc2FtZSBj b25fcmVsLCBhCisJICogdXNlci13cml0dGVuIElTIE5PVCBOVUxMIGNsYXVzZSwgb3Igb3RoZXIg cGxhbm5lciB0cmFuc2Zvcm1hdGlvbnMgdGhhdAorCSAqIGluamVjdCBOdWxsVGVzdCByZXN0cmlj dGlvbnMuCisJICovCisJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgciwgY29uX3JlbC0+YmFz ZXJlc3RyaWN0aW5mbykKKwl7CisJCU51bGxUZXN0ICAgKm50ZXN0OworCQlWYXIJCSAgICp2YXI7 CisKKwkJaWYgKCFJc0Eoci0+Y2xhdXNlLCBOdWxsVGVzdCkpCisJCQljb250aW51ZTsKKwkJbnRl c3QgPSAoTnVsbFRlc3QgKikgci0+Y2xhdXNlOworCQlpZiAobnRlc3QtPm51bGx0ZXN0dHlwZSAh PSBJU19OT1RfTlVMTCB8fAorCQkJbnRlc3QtPmFyZ2lzcm93IHx8CisJCQkhSXNBKG50ZXN0LT5h cmcsIFZhcikpCisJCQljb250aW51ZTsKKwkJdmFyID0gKFZhciAqKSBudGVzdC0+YXJnOworCQlB c3NlcnQodmFyLT52YXJubyA9PSBma2luZm8tPmNvbl9yZWxpZCk7CisJCWlmICh2YXItPnZhcmF0 dG5vID4gMCkKKwkJCWFscmVhZHlfaW5qZWN0ZWQgPSBibXNfYWRkX21lbWJlcihhbHJlYWR5X2lu amVjdGVkLCB2YXItPnZhcmF0dG5vKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZmtpbmZvLT5u a2V5czsgaSsrKQorCXsKKwkJQXR0ck51bWJlcgljb25fYXR0bm8gPSBma2luZm8tPmNvbmtleVtp XTsKKwkJVmFyCQkgICAqdmFyOworCQlOdWxsVGVzdCAgICpudGVzdDsKKwkJUmVzdHJpY3RJbmZv ICpyaW5mbzsKKwkJT2lkCQkJdmFydHlwZTsKKwkJaW50MzIJCXZhcnR5cG1vZDsKKwkJT2lkCQkJ dmFyY29sbGlkOworCisJCS8qIFN5c3RlbSBjb2x1bW5zIGFyZSBpbXBsaWNpdGx5IE5PVCBOVUxM ICovCisJCWlmIChjb25fYXR0bm8gPCAwKQorCQkJY29udGludWU7CisKKwkJLyogU2NoZW1hIGFs cmVhZHkgZ3VhcmFudGVlcyB0aGUgY29sdW1uIGlzIE5PVCBOVUxMICovCisJCWlmIChibXNfaXNf bWVtYmVyKGNvbl9hdHRubywgbm90bnVsbGF0dG51bXMpKQorCQkJY29udGludWU7CisKKwkJLyog QWxyZWFkeSBjb3ZlcmVkIGJ5IGFuIGV4aXN0aW5nIElTIE5PVCBOVUxMIG9uIGNvbl9yZWwgKi8K KwkJaWYgKGJtc19pc19tZW1iZXIoY29uX2F0dG5vLCBhbHJlYWR5X2luamVjdGVkKSkKKwkJCWNv bnRpbnVlOworCisJCWdldF9hdHR0eXBldHlwbW9kY29sbChjb25fcnRlLT5yZWxpZCwKKwkJCQkJ CQkgIGNvbl9hdHRubywKKwkJCQkJCQkgICZ2YXJ0eXBlLAorCQkJCQkJCSAgJnZhcnR5cG1vZCwK KwkJCQkJCQkgICZ2YXJjb2xsaWQpOworCisJCXZhciA9IG1ha2VWYXIoZmtpbmZvLT5jb25fcmVs aWQsCisJCQkJCSAgY29uX2F0dG5vLAorCQkJCQkgIHZhcnR5cGUsCisJCQkJCSAgdmFydHlwbW9k LAorCQkJCQkgIHZhcmNvbGxpZCwKKwkJCQkJICAwKTsKKworCQludGVzdCA9IG1ha2VOb2RlKE51 bGxUZXN0KTsKKwkJbnRlc3QtPmFyZyA9IChFeHByICopIHZhcjsKKwkJbnRlc3QtPm51bGx0ZXN0 dHlwZSA9IElTX05PVF9OVUxMOworCQludGVzdC0+YXJnaXNyb3cgPSBmYWxzZTsKKwkJbnRlc3Qt PmxvY2F0aW9uID0gLTE7CisKKwkJcmluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290LAorCQkJ CQkJCQkgIChFeHByICopIG50ZXN0LAorCQkJCQkJCQkgIHRydWUsCisJCQkJCQkJCSAgZmFsc2Us CisJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCSAgcm9vdC0+cXVh bF9zZWN1cml0eV9sZXZlbCwKKwkJCQkJCQkJICBibXNfbWFrZV9zaW5nbGV0b24oZmtpbmZvLT5j b25fcmVsaWQpLAorCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCSAgTlVMTCk7CisKKwkJY29uX3Jl bC0+YmFzZXJlc3RyaWN0aW5mbyA9IGxhcHBlbmQoY29uX3JlbC0+YmFzZXJlc3RyaWN0aW5mbywg cmluZm8pOworCQlhbHJlYWR5X2luamVjdGVkID0gYm1zX2FkZF9tZW1iZXIoYWxyZWFkeV9pbmpl Y3RlZCwgY29uX2F0dG5vKTsKKwl9CisKKwlibXNfZnJlZShhbHJlYWR5X2luamVjdGVkKTsKK30K KworLyoKKyAqIHJlbW92ZV9yZWZlcmVuY2VkX3JlbF9mcm9tX3F1ZXJ5CisgKgkgIFJlbW92ZSB0 aGUgcmVmZXJlbmNlZCByZWwgb2YgYSBmb3JlaWduIGtleSBhbmQgcmVmZXJlbmNlcyB0byBpdCBm cm9tCisgKgkgIHRoZSBwbGFubmVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBoYXZpbmcgZGV0ZXJtaW5l ZCB0aGF0IHRoZXJlIGlzIG5vCisgKgkgIG5lZWQgdG8gaW5jbHVkZSBpdCBpbiB0aGUgcXVlcnku CisgKgorICogV2UgYXJlIG5vdCB0ZXJyaWJseSB0aG9yb3VnaCBoZXJlLiAgV2Ugb25seSBib3Ro ZXIgdG8gdXBkYXRlIHBhcnRzIG9mCisgKiB0aGUgcGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcyB0 aGF0IHdpbGwgYWN0dWFsbHkgYmUgY29uc3VsdGVkIGxhdGVyLgorICovCitzdGF0aWMgdm9pZAor cmVtb3ZlX3JlZmVyZW5jZWRfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIEZvcmVp Z25LZXlPcHRJbmZvICpma2luZm8pCit7CisJaW50CQkJcmVsaWQgPSBma2luZm8tPnJlZl9yZWxp ZDsKKwlSZWxPcHRJbmZvICpyZWZfcmVsID0gZmluZF9iYXNlX3JlbChyb290LCByZWxpZCk7CisJ UmVsaWRzCQlqb2lucmVsaWRzOworCisJLyogQ29tcHV0ZSB0aGUgcmVsaWQgc2V0IGZvciB0aGUg am9pbiB3ZSBhcmUgY29uc2lkZXJpbmcgKi8KKwlqb2lucmVsaWRzID0gYm1zX21ha2Vfc2luZ2xl dG9uKGZraW5mby0+Y29uX3JlbGlkKTsKKwlqb2lucmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoam9p bnJlbGlkcywgcmVsaWQpOworCisJcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KHJvb3QsIHJlbGlkLCAt MSwgTlVMTCwgam9pbnJlbGlkcyk7CisKKwlibXNfZnJlZShqb2lucmVsaWRzKTsKKworCS8qCisJ ICogQW55IGpvaW4gY2xhdXNlIHRoYXQgc3Vydml2ZWQgaW4gcmVmX3JlbC0+am9pbmluZm8gZG9l c24ndCByZWZlcmVuY2UKKwkgKiByZWZfcmVsLCBidXQgaXRzIHJlbGlkIHNldHMgbWF5IHN0aWxs IG1lbnRpb24gcmVmX3JlbCBiZWNhdXNlIGl0IHdhcworCSAqIGRpc3RyaWJ1dGVkIHRoZXJlIGJh c2VkIG9uIHJlcXVpcmVkX3JlbGlkcy4gIFN0cmlwIHJlZl9yZWwgZnJvbSBlYWNoCisJICogc3Vj aCBjbGF1c2UncyByZWxpZCBzZXRzIHNvIHRoYXQgc3Vydml2aW5nIHJlbHMgc2VlIGEgY29uc2lz dGVudCBzdGF0ZS4KKwkgKi8KKwlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgcmVm X3JlbC0+am9pbmluZm8pCisJeworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIocmVmX3JlbC0+cmVs aWQsIHJpbmZvLT5jbGF1c2VfcmVsaWRzKSk7CisKKwkJcmVtb3ZlX3JlbF9mcm9tX3Jlc3RyaWN0 aW5mbyhyaW5mbywgcmVsaWQsIDApOworCisJCUFzc2VydChibXNfbWVtYmVyc2hpcChyaW5mby0+ cmVxdWlyZWRfcmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCX0KKworCS8qCisJICogVGhlcmUg bWF5IGJlIHJlZmVyZW5jZXMgdG8gdGhlIHJlbCBpbiByb290LT5ma2V5X2xpc3QsIGJ1dCBpZiBz bywKKwkgKiBtYXRjaF9mb3JlaWduX2tleXNfdG9fcXVhbHMoKSB3aWxsIGdldCByaWQgb2YgdGhl bS4KKwkgKi8KKworCS8qCisJICogTm93IHJlbW92ZSB0aGUgcmVsIGZyb20gdGhlIGJhc2VyZWwg YXJyYXkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nCisJICogcmVmZXJlbmNlZCBhZ2Fpbi4KKwkg Ki8KKwlyb290LT5zaW1wbGVfcmVsX2FycmF5W3JlbGlkXSA9IE5VTEw7CisJcm9vdC0+c2ltcGxl X3J0ZV9hcnJheVtyZWxpZF0gPSBOVUxMOworCisJLyogQW5kIG51a2UgdGhlIFJlbE9wdEluZm8s IGp1c3QgaW4gY2FzZSB0aGVyZSdzIGFub3RoZXIgYWNjZXNzIHBhdGggKi8KKwlwZnJlZShyZWZf cmVsKTsKKworCS8qCisJICogTm93IHJlcGVhdCBjb25zdHJ1Y3Rpb24gb2YgYXR0cl9uZWVkZWQg Yml0cyBjb21pbmcgZnJvbSBhbGwgb3RoZXIKKwkgKiBzb3VyY2VzLgorCSAqLworCXJlYnVpbGRf cGxhY2Vob2xkZXJfYXR0cl9uZWVkZWQocm9vdCk7CisJcmVidWlsZF9qb2luY2xhdXNlX2F0dHJf bmVlZGVkKHJvb3QpOworCXJlYnVpbGRfZWNsYXNzX2F0dHJfbmVlZGVkKHJvb3QpOworCXJlYnVp bGRfbGF0ZXJhbF9hdHRyX25lZWRlZChyb290KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v aW5pdHNwbGFuLmMKaW5kZXggYjM4NDIyYzQ3YTQuLmE1OWJjZTZkYWNjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwpAQCAtNDA3NywxNSArNDA3NywxOCBAQCBtYXRjaF9m b3JlaWduX2tleXNfdG9fcXVhbHMoUGxhbm5lckluZm8gKnJvb3QpCiAJCWZvciAoY29sbm8gPSAw OyBjb2xubyA8IGZraW5mby0+bmtleXM7IGNvbG5vKyspCiAJCXsKIAkJCUVxdWl2YWxlbmNlQ2xh c3MgKmVjOworCQkJRXF1aXZhbGVuY2VNZW1iZXIgKmVtID0gTlVMTDsKIAkJCUF0dHJOdW1iZXIJ Y29uX2F0dG5vLAogCQkJCQkJcmVmX2F0dG5vOwogCQkJT2lkCQkJZnBlcW9wOwogCQkJTGlzdENl bGwgICAqbGMyOwogCi0JCQllYyA9IG1hdGNoX2VjbGFzc2VzX3RvX2ZvcmVpZ25fa2V5X2NvbChy b290LCBma2luZm8sIGNvbG5vKTsKKwkJCWVjID0gbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9r ZXlfY29sKHJvb3QsIGZraW5mbywgY29sbm8sICZlbSk7CiAJCQkvKiBEb24ndCBib3RoZXIgbG9v a2luZyBmb3IgbG9vc2UgcXVhbHMgaWYgd2UgZ290IGFuIEVDIG1hdGNoICovCiAJCQlpZiAoZWMg IT0gTlVMTCkKIAkJCXsKKwkJCQlma2luZm8tPmVjbGFzc1tjb2xub10gPSBlYzsKKwkJCQlma2lu Zm8tPmZrX2VjbGFzc19tZW1iZXJbY29sbm9dID0gZW07CiAJCQkJZmtpbmZvLT5ubWF0Y2hlZF9l YysrOwogCQkJCWlmIChlYy0+ZWNfaGFzX2NvbnN0KQogCQkJCQlma2luZm8tPm5jb25zdF9lYysr OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggMDI0OTVlMjJlMjQuLjE5 NGE4NDI2NmUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFp bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKQEAgLTI0MSw2 ICsyNDEsMTQgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlqb2lu bGlzdCA9IHJlbW92ZV91c2VsZXNzX3NlbGZfam9pbnMocm9vdCwgam9pbmxpc3QpOwogCisJLyoK KwkgKiBSZW1vdmUgYW55IHVzZWxlc3MgaW5uZXIgam9pbnMgYmFzZWQgb24gZm9yZWlnbiBrZXkg Y29uc3RyYWludHMuICBUaGlzCisJICogbXVzdCBiZSBkb25lIGFmdGVyIGVxdWl2YWxlbmNlIGNs YXNzZXMgYXJlIGZpbmFsaXplZCBhbmQgZm9yZWlnbiBrZXkKKwkgKiBsaXN0cyBhcmUgaW5pdGlh bGl6ZWQsIGFzIHRoZSBvcHRpbWl6YXRpb24gcmVsaWVzIG9uIHRoZXNlIHN0cnVjdHVyZXMKKwkg KiB0byBzYWZlbHkgaWRlbnRpZnkgYW5kIGVsaW1pbmF0ZSByZWR1bmRhbnQgcmVsYXRpb25zLgor CSAqLworCWpvaW5saXN0ID0gcmVtb3ZlX3VzZWxlc3NfaW5uZXJfam9pbnMocm9vdCwgam9pbmxp c3QpOworCiAJLyoKIAkgKiBOb3cgZGlzdHJpYnV0ZSAicGxhY2Vob2xkZXJzIiB0byBiYXNlIHJl bHMgYXMgbmVlZGVkLiAgVGhpcyBoYXMgdG8gYmUKIAkgKiBkb25lIGFmdGVyIGpvaW4gcmVtb3Zh bCBiZWNhdXNlIHJlbW92YWwgY291bGQgY2hhbmdlIHdoZXRoZXIgYQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCmluZGV4IDdjNGJlMTc0ODY5Li45OWUzZGM1YmM5MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtNjYyLDYgKzY2Miw4IEBAIGdldF9yZWxhdGlv bl9mb3JlaWduX2tleXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlu Zm8tPmNvbl9yZWxpZCA9IHJlbC0+cmVsaWQ7CiAJCQlpbmZvLT5yZWZfcmVsaWQgPSBydGk7CiAJ CQlpbmZvLT5ua2V5cyA9IGNhY2hlZGZrLT5ua2V5czsKKwkJCWluZm8tPmNvbl9kZWZlcnJhYmxl ID0gY2FjaGVkZmstPmNvbmRlZmVycmFibGU7CisJCQlpbmZvLT5jb25fdmFsaWRhdGVkID0gY2Fj aGVkZmstPmNvbnZhbGlkYXRlZDsKIAkJCW1lbWNweShpbmZvLT5jb25rZXksIGNhY2hlZGZrLT5j b25rZXksIHNpemVvZihpbmZvLT5jb25rZXkpKTsKIAkJCW1lbWNweShpbmZvLT5jb25ma2V5LCBj YWNoZWRmay0+Y29uZmtleSwgc2l6ZW9mKGluZm8tPmNvbmZrZXkpKTsKIAkJCW1lbWNweShpbmZv LT5jb25wZmVxb3AsIGNhY2hlZGZrLT5jb25wZmVxb3AsIHNpemVvZihpbmZvLT5jb25wZmVxb3Ap KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDA1NzJhYjQyNGU3Li40YzRiYzIw NmRiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC00Nzc0LDcgKzQ3NzQsOSBA QCBSZWxhdGlvbkdldEZLZXlMaXN0KFJlbGF0aW9uIHJlbGF0aW9uKQogCQlpbmZvLT5jb25vaWQg PSBjb25zdHJhaW50LT5vaWQ7CiAJCWluZm8tPmNvbnJlbGlkID0gY29uc3RyYWludC0+Y29ucmVs aWQ7CiAJCWluZm8tPmNvbmZyZWxpZCA9IGNvbnN0cmFpbnQtPmNvbmZyZWxpZDsKKwkJaW5mby0+ Y29uZGVmZXJyYWJsZSA9IGNvbnN0cmFpbnQtPmNvbmRlZmVycmFibGU7CiAJCWluZm8tPmNvbmVu Zm9yY2VkID0gY29uc3RyYWludC0+Y29uZW5mb3JjZWQ7CisJCWluZm8tPmNvbnZhbGlkYXRlZCA9 IGNvbnN0cmFpbnQtPmNvbnZhbGlkYXRlZDsKIAogCQlEZWNvbnN0cnVjdEZrQ29uc3RyYWludFJv dyhodHVwLCAmaW5mby0+bmtleXMsCiAJCQkJCQkJCSAgIGluZm8tPmNvbmtleSwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYWZhYTA1OGIwNDYuLjA0Njk3 Zjk1YWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAt ODkyLDYgKzg5MiwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4g J2VuYWJsZV9ma19pbm5lcl9qb2luX3JlbW92YWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9 PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0 X2Rlc2MgPT4gJ0VuYWJsZXMgZm9yZWlnbi1rZXktYmFzZWQgaW5uZXItam9pbiByZW1vdmFsLics CisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfZmtfaW5u ZXJfam9pbl9yZW1vdmFsJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ ICdlbmFibGVfZ2F0aGVybWVyZ2UnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VT RVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4g J0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGdhdGhlciBtZXJnZSBwbGFucy4nLAogICBm bGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCmluZGV4IGFjMzhjZGRhYWY5Li4yOWEyNmM3YjA3ZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDQ3LDYgKzQ0 Nyw3IEBACiAjZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSBvbgogI2VuYWJsZV9kaXN0aW5j dF9yZW9yZGVyaW5nID0gb24KICNlbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9uID0gb24KKyNl bmFibGVfZmtfaW5uZXJfam9pbl9yZW1vdmFsID0gb24KICNlbmFibGVfZWFnZXJfYWdncmVnYXRl ID0gb24KIAogIyAtIFBsYW5uZXIgQ29zdCBDb25zdGFudHMgLQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApp bmRleCAyN2EyYzY4MTViNy4uZDY3ZjY4MDg5ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0x NDczLDYgKzE0NzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleU9wdEluZm8KIAlJbmRl eAkJcmVmX3JlbGlkOwogCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBmb3JlaWduIGtleSAq LwogCWludAkJCW5rZXlzOworCS8qIElzIHRoZSBjb25zdHJhaW50IGRlZmVycmFibGU/ICovCisJ Ym9vbAkJY29uX2RlZmVycmFibGU7CisJLyogSXMgdGhlIGNvbnN0cmFpbnQgdmFsaWRhdGVkPyAq LworCWJvb2wJCWNvbl92YWxpZGF0ZWQ7CiAJLyogY29scyBpbiByZWZlcmVuY2luZyB0YWJsZSAq LwogCUF0dHJOdW1iZXIJY29ua2V5W0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShua2V5cykpOwogCS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aHMuaAppbmRleCAxN2YyMDk5ZWMzYi4uNTE5MzFjZDIzNjcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oCkBAIC0xNzIsNyArMTcyLDggQEAgZXh0ZXJuIGJvb2wgZXhwcnNfa25vd25fZXF1YWwoUGxh bm5lckluZm8gKnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwKIAkJCQkJCQkgIE9pZCBv cGZhbWlseSk7CiBleHRlcm4gRXF1aXZhbGVuY2VDbGFzcyAqbWF0Y2hfZWNsYXNzZXNfdG9fZm9y ZWlnbl9rZXlfY29sKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCQkgICBGb3JlaWdu S2V5T3B0SW5mbyAqZmtpbmZvLAotCQkJCQkJCQkJCQkJCQkgICBpbnQgY29sbm8pOworCQkJCQkJ CQkJCQkJCQkgICBpbnQgY29sbm8sCisJCQkJCQkJCQkJCQkJCSAgIEVxdWl2YWxlbmNlTWVtYmVy ICoqZmtfZWNsYXNzX21lbWJlcik7CiBleHRlcm4gUmVzdHJpY3RJbmZvICpmaW5kX2Rlcml2ZWRf Y2xhdXNlX2Zvcl9lY19tZW1iZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkJICAg RXF1aXZhbGVuY2VDbGFzcyAqZWMsCiAJCQkJCQkJCQkJCQkJICAgRXF1aXZhbGVuY2VNZW1iZXIg KmVtKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggNzFjMDQzYTI1ZTguLmI2YjViOTMw ODMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAorKysgYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmlu ZSBERUZBVUxUX0NVUlNPUl9UVVBMRV9GUkFDVElPTiAwLjEKIGV4dGVybiBQR0RMTElNUE9SVCBk b3VibGUgY3Vyc29yX3R1cGxlX2ZyYWN0aW9uOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9ma19pbm5lcl9qb2luX3JlbW92YWw7CiAKIC8qIHF1ZXJ5X3BsYW5uZXIgY2FsbGJhY2sgdG8g Y29tcHV0ZSBxdWVyeV9wYXRoa2V5cyAqLwogdHlwZWRlZiB2b2lkICgqcXVlcnlfcGF0aGtleXNf Y2FsbGJhY2spIChQbGFubmVySW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpOwpAQCAtMTIwLDYgKzEy MSw3IEBAIGV4dGVybiBib29sIGlubmVycmVsX2lzX3VuaXF1ZV9leHQoUGxhbm5lckluZm8gKnJv b3QsIFJlbGlkcyBqb2lucmVsaWRzLAogCQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgTGlz dCAqcmVzdHJpY3RsaXN0LAogCQkJCQkJCQkgICBib29sIGZvcmNlX2NhY2hlLCBMaXN0ICoqZXh0 cmFfY2xhdXNlcyk7CiBleHRlcm4gTGlzdCAqcmVtb3ZlX3VzZWxlc3Nfc2VsZl9qb2lucyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpOworZXh0ZXJuIExpc3QgKnJlbW92ZV91c2Vs ZXNzX2lubmVyX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCk7CiAKIC8q CiAgKiBwcm90b3R5cGVzIGZvciBwbGFuL3NldHJlZnMuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCBmYTA3ZWJmOGZm Ny4uNDgzYTY2ZWIwYTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0yODQsOSArMjg0LDE1IEBAIHR5cGVkZWYgc3Ry dWN0IEZvcmVpZ25LZXlDYWNoZUluZm8KIAkvKiBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZm9y ZWlnbiBrZXkgKi8KIAlpbnQJCQlua2V5czsKIAorCS8qIElzIGRlZmVycmFibGUgPyAqLworCWJv b2wJCWNvbmRlZmVycmFibGU7CisKIAkvKiBJcyBlbmZvcmNlZCA/ICovCiAJYm9vbAkJY29uZW5m b3JjZWQ7CiAKKwkvKiBJcyB2YWxpZGF0ZWQgPyAqLworCWJvb2wJCWNvbnZhbGlkYXRlZDsKKwog CS8qCiAJICogdGhlc2UgYXJyYXlzIGVhY2ggaGF2ZSBua2V5cyB2YWxpZCBlbnRyaWVzOgogCSAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggNzhiZjAyMmY3YjQuLmQ0NmZiZjBm MjhhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTEwMTQzLDMgKzEwMTQzLDU0 NiBAQCBTRUxFQ1QgQ09VTlQoKikgRlJPTSBvbmVrIHQxIExFRlQgSk9JTiB0ZW5rMSB0MgogIDE5 MDAwCiAoMSByb3cpCiAKKy0tCistLSBUZXN0IHVzZWxlc3MgaW5uZXIgam9pbiByZW1vdmFsIGZv ciBmb3JlaWduIGtleSByZWZlcmVuY2VkIHJlbGF0aW9ucworLS0KK0NSRUFURSBUQUJMRSBma19w YXJlbnQxIChpZCBpbnQgUFJJTUFSWSBLRVksIHZhbCB0ZXh0KTsKK0NSRUFURSBUQUJMRSBma19w YXJlbnQyIChpZCBpbnQgUFJJTUFSWSBLRVksIHZhbCB0ZXh0KTsKK0NSRUFURSBUQUJMRSBma19w YXJlbnRfdGV4dCAoaWQgdGV4dCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZmtfbXVsdGlf cGFyZW50IChpZDEgaW50LCBpZDIgaW50LCB2YWwgdGV4dCwgUFJJTUFSWSBLRVkgKGlkMSwgaWQy KSk7CitDUkVBVEUgVEFCTEUgZmtfY2hpbGQgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAg ICBwMV9pZCBpbnQgTk9UIE5VTEwgUkVGRVJFTkNFUyBma19wYXJlbnQxKGlkKSwKKyAgICBwMl9p ZCBpbnQgUkVGRVJFTkNFUyBma19wYXJlbnQyKGlkKSwKKyAgICBwX3RleHQgdGV4dCBSRUZFUkVO Q0VTIGZrX3BhcmVudF90ZXh0KGlkKSwKKyAgICBwX20xIGludCwKKyAgICBwX20yIGludCwKKyAg ICB2YWwgdGV4dCwKKyAgICBGT1JFSUdOIEtFWSAocF9tMSwgcF9tMikgUkVGRVJFTkNFUyBma19t dWx0aV9wYXJlbnQoaWQxLCBpZDIpCispOworSU5TRVJUIElOVE8gZmtfcGFyZW50MSBWQUxVRVMg KDEsICdwMV8xJyksICgyLCAncDFfMicpOworSU5TRVJUIElOVE8gZmtfcGFyZW50MiBWQUxVRVMg KDEsICdwMl8xJyksICgyLCAncDJfMicpOworSU5TRVJUIElOVE8gZmtfcGFyZW50X3RleHQgVkFM VUVTICgndDEnKSwgKCd0MicpOworSU5TRVJUIElOVE8gZmtfbXVsdGlfcGFyZW50IFZBTFVFUyAo MSwgMSwgJ20xJyksICgyLCAyLCAnbTInKTsKK0lOU0VSVCBJTlRPIGZrX2NoaWxkIFZBTFVFUwor ICAgICgxLCAxLCAxLCAndDEnLCAxLCAxLCAnYzEnKSwKKyAgICAoMiwgMiwgTlVMTCwgJ3QyJywg MiwgMiwgJ2MyJyksCisgICAgKDMsIDEsIDEsICd0MScsIDEsIDEsICdjMycpOworQU5BTFlaRSBm a19wYXJlbnQxOworQU5BTFlaRSBma19wYXJlbnQyOworQU5BTFlaRSBma19wYXJlbnRfdGV4dDsK K0FOQUxZWkUgZmtfbXVsdGlfcGFyZW50OworQU5BTFlaRSBma19jaGlsZDsKKy0tIEVuc3VyZSB0 aGF0IGZrX3BhcmVudDEgaXMgcmVtb3ZlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMu aWQsIGMudmFsCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9 IHAuaWQKK09SREVSIEJZIGMuaWQ7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5OiBjLmlkCisg ICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworKDMgcm93cykKKworLS0gRW5zdXJlIHRoYXQg aXQgcmV0dXJucyBhbGwgMyByb3dzCitTRUxFQ1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hpbGQg YyBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAxX2lkID0gcC5pZAorT1JERVIgQlkgYy5pZDsKKyBp ZCB8IHZhbCAKKy0tLS0rLS0tLS0KKyAgMSB8IGMxCisgIDIgfCBjMgorICAzIHwgYzMKKygzIHJv d3MpCisKKy0tIEVuc3VyZSB0aGF0IGZrX3BhcmVudDIgaXMgcmVtb3ZlZCwgYW5kIGFuIElTIE5P VCBOVUxMIHF1YWwgaXMgaW5qZWN0ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlk LCBjLnZhbAorRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MiBwIE9OIGMucDJfaWQgPSBw LmlkCitPUkRFUiBCWSBjLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQg S2V5OiBjLmlkCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworICAgICAgICAgRmlsdGVy OiAocDJfaWQgSVMgTk9UIE5VTEwpCisoNCByb3dzKQorCistLSBFbnN1cmUgdGhhdCBpdCByZXR1 cm5zIHJvdyAxIGFuZCByb3cgMworU0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZrX2NoaWxkIGMg Sk9JTiBma19wYXJlbnQyIHAgT04gYy5wMl9pZCA9IHAuaWQKK09SREVSIEJZIGMuaWQ7CisgaWQg fCB2YWwgCistLS0tKy0tLS0tCisgIDEgfCBjMQorICAzIHwgYzMKKygyIHJvd3MpCisKKy0tIEVu c3VyZSB3ZSBkbyBub3QgaGF2ZSByZWR1bmRhbnQgSVMgTk9UIE5VTEwgcXVhbAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19w YXJlbnQyIHAgT04gYy5wMl9pZCA9IHAuaWQKK1dIRVJFIGMucDJfaWQgSVMgTk9UIE5VTEwKK09S REVSIEJZIGMuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGMu aWQKKyAgIC0+ICBTZXEgU2NhbiBvbiBma19jaGlsZCBjCisgICAgICAgICBGaWx0ZXI6IChwMl9p ZCBJUyBOT1QgTlVMTCkKKyg0IHJvd3MpCisKKy0tIEVuc3VyZSB0aGF0IGl0IHJldHVybnMgcm93 IDEgYW5kIHJvdyAzCitTRUxFQ1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hpbGQgYyBKT0lOIGZr X3BhcmVudDIgcCBPTiBjLnAyX2lkID0gcC5pZAorV0hFUkUgYy5wMl9pZCBJUyBOT1QgTlVMTAor T1JERVIgQlkgYy5pZDsKKyBpZCB8IHZhbCAKKy0tLS0rLS0tLS0KKyAgMSB8IGMxCisgIDMgfCBj MworKDIgcm93cykKKworLS0gRW5zdXJlIHRoYXQgYm90aCBma19wYXJlbnQxIGFuZCBma19wYXJl bnQyIGFyZSByZW1vdmVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZAorRlJPTSBm a19jaGlsZCBjCisgIEpPSU4gZmtfcGFyZW50MSBwMSBPTiBjLnAxX2lkID0gcDEuaWQKKyAgSk9J TiBma19wYXJlbnQyIHAyIE9OIGMucDJfaWQgPSBwMi5pZAorT1JERVIgQlkgYy5pZDsKKyAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogYy5pZAorICAgLT4gIFNlcSBTY2Fu IG9uIGZrX2NoaWxkIGMKKyAgICAgICAgIEZpbHRlcjogKHAyX2lkIElTIE5PVCBOVUxMKQorKDQg cm93cykKKworLS0gRW5zdXJlIHRoYXQgaXQgcmV0dXJucyByb3dzIDEgYW5kIDMKK1NFTEVDVCBj LmlkCitGUk9NIGZrX2NoaWxkIGMKKyAgSk9JTiBma19wYXJlbnQxIHAxIE9OIGMucDFfaWQgPSBw MS5pZAorICBKT0lOIGZrX3BhcmVudDIgcDIgT04gYy5wMl9pZCA9IHAyLmlkCitPUkRFUiBCWSBj LmlkOworIGlkIAorLS0tLQorICAxCisgIDMKKygyIHJvd3MpCisKKy0tIEVuc3VyZSB0aGF0IGZr X3BhcmVudDEgaXMgcmVtb3ZlZCwgbGVhdmluZyBjMSBqb2luZWQgdG8gYzIKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBjMS5pZCwgYzIuaWQKK0ZST00gZmtfY2hpbGQgYzEKKyAgSk9JTiBm a19wYXJlbnQxIHAgT04gYzEucDFfaWQgPSBwLmlkCisgIEpPSU4gZmtfY2hpbGQgYzIgT04gcC5p ZCA9IGMyLnAxX2lkCitPUkRFUiBCWSBjMS5pZCwgYzIuaWQ7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGMxLmlkLCBjMi5pZAorICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoYzEucDFfaWQgPSBjMi5wMV9pZCkKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBma19jaGlsZCBjMQorICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBma19jaGlsZCBjMgorKDcgcm93cykKKworLS0gRW5z dXJlIHRoYXQgd2UgZ2V0IDF4MSwgMXgzLCAzeDEsIDN4MywgMngyCitTRUxFQ1QgYzEuaWQsIGMy LmlkCitGUk9NIGZrX2NoaWxkIGMxCisgIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMxLnAxX2lkID0g cC5pZAorICBKT0lOIGZrX2NoaWxkIGMyIE9OIHAuaWQgPSBjMi5wMV9pZAorT1JERVIgQlkgYzEu aWQsIGMyLmlkOworIGlkIHwgaWQgCistLS0tKy0tLS0KKyAgMSB8ICAxCisgIDEgfCAgMworICAy IHwgIDIKKyAgMyB8ICAxCisgIDMgfCAgMworKDUgcm93cykKKworLS0gTXVsdGktY29sdW1uIEZL LCBlbnN1cmUgdGhhdCBma19tdWx0aV9wYXJlbnQgaXMgcmVtb3ZlZAorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGMuaWQKK0ZST00gZmtfY2hpbGQgYworICBKT0lOIGZrX211bHRpX3BhcmVu dCBwIE9OIGMucF9tMSA9IHAuaWQxIEFORCBjLnBfbTIgPSBwLmlkMgorT1JERVIgQlkgYy5pZDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogYy5pZAorICAgLT4gIFNlcSBTY2FuIG9u IGZrX2NoaWxkIGMKKyAgICAgICAgIEZpbHRlcjogKChwX20xIElTIE5PVCBOVUxMKSBBTkQgKHBf bTIgSVMgTk9UIE5VTEwpKQorKDQgcm93cykKKworLS0gRW5zdXJlIHRoYXQgd2UgZ2V0IGFsbCAz IHJvd3MKK1NFTEVDVCBjLmlkCitGUk9NIGZrX2NoaWxkIGMKKyAgSk9JTiBma19tdWx0aV9wYXJl bnQgcCBPTiBjLnBfbTEgPSBwLmlkMSBBTkQgYy5wX20yID0gcC5pZDIKK09SREVSIEJZIGMuaWQ7 CisgaWQgCistLS0tCisgIDEKKyAgMgorICAzCisoMyByb3dzKQorCistLSBDaGFpbi1zaGFwZWQg RksgcmVtb3ZhbDogYyAtPiBwMSAtPiBwMgorQUxURVIgVEFCTEUgZmtfcGFyZW50MQorICBBREQg Q09MVU1OIHAyX2lkIGludCBOT1QgTlVMTCBERUZBVUxUIDEgUkVGRVJFTkNFUyBma19wYXJlbnQy KGlkKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9NIGZrX2NoaWxkIGMK KyAgSk9JTiBma19wYXJlbnQxIHAxIE9OIGMucDFfaWQgPSBwMS5pZAorICBKT0lOIGZrX3BhcmVu dDIgcDIgT04gcDEucDJfaWQgPSBwMi5pZAorT1JERVIgQlkgYy5pZDsKKyAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAor ICAgU29ydCBLZXk6IGMuaWQKKyAgIC0+ICBTZXEgU2NhbiBvbiBma19jaGlsZCBjCisoMyByb3dz KQorCistLSBFbnN1cmUgdGhhdCB3ZSBnZXQgYWxsIDMgcm93cworU0VMRUNUIGMuaWQKK0ZST00g ZmtfY2hpbGQgYworICBKT0lOIGZrX3BhcmVudDEgcDEgT04gYy5wMV9pZCA9IHAxLmlkCisgIEpP SU4gZmtfcGFyZW50MiBwMiBPTiBwMS5wMl9pZCA9IHAyLmlkCitPUkRFUiBCWSBjLmlkOworIGlk IAorLS0tLQorICAxCisgIDIKKyAgMworKDMgcm93cykKKworQUxURVIgVEFCTEUgZmtfcGFyZW50 MSBEUk9QIENPTFVNTiBwMl9pZDsKKy0tIExFRlQgSk9JTiBPTi1jbGF1c2UgaW4gam9pbmluZm8g ZG9lcyBub3QgcmVmZXJlbmNlIGZrX3BhcmVudDIsIHNvIEZLLXJlbW92YWwKKy0tIHNob3VsZCBz dGlsbCBmaXJlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZAorRlJPTSBma19wYXJl bnQxIHAxCisgIExFRlQgSk9JTiAoZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDIgcDIgT04gYy5w Ml9pZCA9IHAyLmlkKQorICAgIE9OIHAxLmlkID0gYy5pZAorT1JERVIgQlkgYy5pZDsKKyAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtl eTogYy5pZAorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9pbiBGaWx0 ZXI6IChwMS5pZCA9IGMuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBw MQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gZmtfY2hpbGQgYworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAocDJfaWQgSVMgTk9U IE5VTEwpCisoOCByb3dzKQorCitTRUxFQ1QgYy5pZAorRlJPTSBma19wYXJlbnQxIHAxCisgIExF RlQgSk9JTiAoZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDIgcDIgT04gYy5wMl9pZCA9IHAyLmlk KQorICAgIE9OIHAxLmlkID0gYy5pZAorT1JERVIgQlkgYy5pZDsKKyBpZCAKKy0tLS0KKyAgMQor ICAgCisoMiByb3dzKQorCistLSBma19wYXJlbnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2Ug cC52YWwgaXMgc2VsZWN0ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkLCBwLnZh bAorRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOwor ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAocC5p ZCA9IGMucDFfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisoNSByb3dzKQor CistLSBma19wYXJlbnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgcC52YWwgaXMgZmlsdGVy ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9NIGZrX2NoaWxkIGMgSk9J TiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQKK1dIRVJFIHAudmFsID0gJ3AxXzEnOwor ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAocC5p ZCA9IGMucDFfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisgICAgICAgICBG aWx0ZXI6ICh2YWwgPSAncDFfMSc6OnRleHQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQg YworKDUgcm93cykKKworLS0gZmtfcGFyZW50MSBjYW5ub3QgYmUgcmVtb3ZlZCBiZWNhdXNlIG9m IFRBQkxFU0FNUExFIG9uIHRoZSByZWZlcmVuY2VkCistLSByZWxhdGlvbgorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJl bnQxIHAgVEFCTEVTQU1QTEUgQkVSTk9VTExJKDUwKSBSRVBFQVRBQkxFKDEpCisgIE9OIGMucDFf aWQgPSBwLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoYy5wMV9pZCA9IHAuaWQpCisgICAtPiAgU2Ft cGxlIFNjYW4gb24gZmtfcGFyZW50MSBwCisgICAgICAgICBTYW1wbGluZzogYmVybm91bGxpICgn NTAnOjpyZWFsKSBSRVBFQVRBQkxFICgnMSc6OmRvdWJsZSBwcmVjaXNpb24pCisgICAtPiAgU2Vx IFNjYW4gb24gZmtfY2hpbGQgYworKDUgcm93cykKKworLS0gZmtfcGFyZW50MSBjYW5ub3QgYmUg cmVtb3ZlZCBiZWNhdXNlIHAuaWQgaXMgaW4gdGhlIHRhcmdldGxpc3QKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBjLmlkLCBwLmlkCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQx IHAgT04gYy5wMV9pZCA9IHAuaWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgSm9pbiBGaWx0ZXI6IChwLmlkID0gYy5wMV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBm a19jaGlsZCBjCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBm a19wYXJlbnQxIHAKKyg1IHJvd3MpCisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92ZWQg YmVjYXVzZSBwLmlkIGlzIGluIHRoZSBmaWx0ZXIKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjLmlkCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAu aWQKK1dIRVJFIHAuaWQgPiAxOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6IChwLmlkID0gYy5wMV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBma19wYXJlbnQxIHAK KyAgICAgICAgIEZpbHRlcjogKGlkID4gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBma19jaGlsZCBj CisoNSByb3dzKQorCistLSBma19wYXJlbnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgcC5p ZCBpcyBpbiB0aGUgam9pbiBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlk CitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQKK1dI RVJFIGMuaWQgPiBwLmlkOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChjLnAxX2lkID0gcC5pZCkKKyAgIEpvaW4gRmlsdGVyOiAoYy5pZCA+IHAuaWQp CisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBma19wYXJlbnQxIHAKKyg2IHJvd3MpCisKKy0tIGZrX211bHRpX3BhcmVu dCBjYW5ub3QgYmUgcmVtb3ZlZCBiZWNhdXNlIG5vdCBhbGwgZm9yZWlnbiBrZXkgY29sdW1ucyBh cmUKKy0tIG1hdGNoZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9NIGZr X2NoaWxkIGMKKyAgSk9JTiBma19tdWx0aV9wYXJlbnQgcCBPTiBjLnBfbTEgPSBwLmlkMTsKKyAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDog KGMucF9tMSA9IHAuaWQxKQorICAgLT4gIFNlcSBTY2FuIG9uIGZrX2NoaWxkIGMKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmtfbXVsdGlfcGFyZW50IHAKKyg1IHJvd3Mp CisKKy0tIGZrX3BhcmVudDIgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSB0aGUgTEVGVCBKT0lO IE9OLWNsYXVzZSByZWZlcmVuY2VzCistLSBwMi5pZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGMuaWQKK0ZST00gZmtfcGFyZW50MSBwMQorICBMRUZUIEpPSU4gKGZrX2NoaWxkIGMgSk9J TiBma19wYXJlbnQyIHAyIE9OIGMucDJfaWQgPSBwMi5pZCkKKyAgICBPTiBwMS5pZCA9IHAyLmlk OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IEpvaW4K KyAgIEhhc2ggQ29uZDogKHAyLmlkID0gcDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChjLnAyX2lkID0gcDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZmtfY2hpbGQgYworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBma19wYXJlbnQyIHAyCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGZrX3BhcmVudDEgcDEKKyg5IHJvd3MpCisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92 ZWQgYmVjYXVzZSBwLmlkIGlzIHJlZmVyZW5jZWQgaW4gbGF0ZXJhbF92YXJzCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgYy5pZAorRlJPTSBma19jaGlsZCBjCisgIEpPSU4gZmtfcGFyZW50 MSBwIE9OIGMucDFfaWQgPSBwLmlkCisgIENST1NTIEpPSU4gTEFURVJBTCAoU0VMRUNUIHAuaWQg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6IChjLnAxX2lkID0gcC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBma19j aGlsZCBjCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisgICAgICAgICAgICAgICAtPiAgUmVz dWx0CisoNyByb3dzKQorCistLSBma19wYXJlbnQyIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2Ug cDIuaWQgaXMgcmVmZXJlbmNlZCBpbiB0aGUgc2VtaS1qb2luCistLSBSSFMgZXhwcmVzc2lvbnMK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZmtfcGFyZW50MSBwMQorV0hFUkUg cDEuaWQgSU4KKyAgKFNFTEVDVCBwMi5pZCBGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQy IHAyIE9OIGMucDJfaWQgPSBwMi5pZCk7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgSm9pbiBGaWx0ZXI6 IChwMS5pZCA9IGMucDJfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwMQorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChjLnAyX2lkID0gcDIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gZmtfY2hpbGQgYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBma19wYXJlbnQyIHAyCisoOSByb3dzKQorCistLSBma19wYXJl bnRfdGV4dCBjYW5ub3QgYmUgcmVtb3ZlZCBkdWUgdG8gdGhlIENPTExBVEUgIkMiIG1pc21hdGNo IHNwbGl0dGluZworLS0gdGhlIEVDCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYzEuaWQs IGMyLmlkCitGUk9NIGZrX2NoaWxkIGMxCisgIEpPSU4gZmtfcGFyZW50X3RleHQgcCBPTiBjMS5w X3RleHQgPSBwLmlkCisgIEpPSU4gZmtfY2hpbGQgYzIgT04gcC5pZCBDT0xMQVRFICJDIiA9IGMy LnBfdGV4dCBDT0xMQVRFICJDIjsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChwLmlkKTo6dGV4dCA9IChjMi5w X3RleHQpOjp0ZXh0KQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KHAuaWQgPSBjMS5wX3RleHQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYzEK KyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGZrX3BhcmVudF90ZXh0IHAKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZmtfY2hpbGQgYzIKKyg5IHJvd3MpCisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92ZWQg YmVjYXVzZSBwLmlkICsgMCBzcGxpdHMgdGhlIEVDCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgYzEuaWQsIGMyLmlkCitGUk9NIGZrX2NoaWxkIGMxCisgIEpPSU4gZmtfcGFyZW50MSBwIE9O IGMxLnAxX2lkID0gcC5pZAorICBKT0lOIGZrX2NoaWxkIGMyIE9OIChwLmlkICsgMCkgPSBjMi5w MV9pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoKHAuaWQgKyAwKSA9IGMyLnAxX2lkKQorICAgLT4gIE5lc3RlZCBMb29wCisg ICAgICAgICBKb2luIEZpbHRlcjogKHAuaWQgPSBjMS5wMV9pZCkKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBma19jaGlsZCBjMQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGZrX2NoaWxkIGMyCisoOSByb3dzKQorCistLSBma19wYXJlbnQxIGNh bm5vdCBiZSByZW1vdmVkIGR1ZSB0byB0aGUgbXVsdGktcmVsIEVNIChwLmlkICsgYzIucDFfaWQp CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYzEuaWQsIGMyLmlkCitGUk9NIGZrX2NoaWxk IGMxCisgIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMxLnAxX2lkID0gcC5pZAorICBKT0lOIGZrX2No aWxkIGMyIE9OIGMxLnAxX2lkID0gKHAuaWQgKyBjMi5wMV9pZCk7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVy OiAocC5pZCA9IGMxLnAxX2lkKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZp bHRlcjogKChwLmlkICsgYzIucDFfaWQpID0gcC5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBma19jaGlsZCBjMgorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQg YzEKKyg4IHJvd3MpCisKKy0tIEVuc3VyZSB0aGF0IHRoZSByaWdodCBqb2luIGlzIG5vdCByZW1v dmVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hp bGQgYyBSSUdIVCBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAxX2lkID0gcC5pZDsKKyAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEhhc2ggUmlnaHQgSm9pbgorICAgSGFzaCBDb25kOiAoYy5wMV9pZCA9 IHAuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBma19wYXJlbnQxIHAKKyg1IHJvd3MpCisKKy0tIEVuc3VyZSB0 aGF0IHRoZSBmdWxsIGpvaW4gaXMgbm90IHJlbW92ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjLmlkLCBjLnZhbAorRlJPTSBma19jaGlsZCBjIEZVTEwgSk9JTiBma19wYXJlbnQxIHAg T04gYy5wMV9pZCA9IHAuaWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEZ1bGwgSm9p bgorICAgSGFzaCBDb25kOiAoYy5wMV9pZCA9IHAuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtf Y2hpbGQgYworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBma19wYXJlbnQx IHAKKyg1IHJvd3MpCisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSBp dCBpcyBzZXBhcmF0ZWQgd2l0aCBma19jaGlsZCBieSB0aGUKKy0tIG91dGVyIGpvaW4gYm91bmRh cnkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9NIGZrX2NoaWxkIGMKKyAg Sk9JTiAoZmtfcGFyZW50MSBwMQorICAgICAgICAgIExFRlQgSk9JTiBma19wYXJlbnQyIHAyIE9O IFRSVUUpCisgIE9OIGMucDFfaWQgPSBwMS5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIEpvaW4gRmlsdGVyOiAocDEuaWQgPSBjLnAxX2lkKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGZrX2NoaWxkIGMKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGZrX3BhcmVudDEgcDEKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGZrX3BhcmVudDIgcDIKKyg4IHJvd3MpCisKKy0tIERlZmVy cmFibGUgRks6IGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSBjb25zdHJhaW50 IGlzIGRlZmVycmFibGUKK0FMVEVSIFRBQkxFIGZrX2NoaWxkIERST1AgQ09OU1RSQUlOVCBma19j aGlsZF9wMV9pZF9ma2V5OworQUxURVIgVEFCTEUgZmtfY2hpbGQgQUREIENPTlNUUkFJTlQgZmtf Y2hpbGRfcDFfaWRfZmtleQorICBGT1JFSUdOIEtFWSAocDFfaWQpIFJFRkVSRU5DRVMgZmtfcGFy ZW50MShpZCkgREVGRVJSQUJMRTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkLCBj LnZhbAorRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlk OworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo cC5pZCA9IGMucDFfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gZmtfY2hpbGQgYworICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZmtfcGFyZW50MSBwCisoNSByb3dz KQorCistLSBOT1QgVkFMSUQgRks6IGZrX3BhcmVudDEgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVz ZSBjb25zdHJhaW50IGlzIE5PVCBWQUxJRAorQUxURVIgVEFCTEUgZmtfY2hpbGQgRFJPUCBDT05T VFJBSU5UIGZrX2NoaWxkX3AxX2lkX2ZrZXk7CitBTFRFUiBUQUJMRSBma19jaGlsZCBBREQgQ09O U1RSQUlOVCBma19jaGlsZF9wMV9pZF9ma2V5CisgIEZPUkVJR04gS0VZIChwMV9pZCkgUkVGRVJF TkNFUyBma19wYXJlbnQxKGlkKSBOT1QgVkFMSUQ7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAx X2lkID0gcC5pZDsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2lu IEZpbHRlcjogKHAuaWQgPSBjLnAxX2lkKQorICAgLT4gIFNlcSBTY2FuIG9uIGZrX2NoaWxkIGMK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGZrX3BhcmVudDEg cAorKDUgcm93cykKKworRFJPUCBUQUJMRSBma19jaGlsZDsKK0RST1AgVEFCTEUgZmtfbXVsdGlf cGFyZW50OworRFJPUCBUQUJMRSBma19wYXJlbnRfdGV4dDsKK0RST1AgVEFCTEUgZmtfcGFyZW50 MjsKK0RST1AgVEFCTEUgZmtfcGFyZW50MTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggMTMyYjU2YTU4NjQuLmY0MDRiYWM0YjBkIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU5LDYgKzE1OSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf Yml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5n ICAgICB8IG9uCiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24KKyBlbmFibGVf ZmtfaW5uZXJfam9pbl9yZW1vdmFsICAgfCBvbgogIGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgICAgIHwgb24KICBlbmFibGVf aGFzaGFnZyAgICAgICAgICAgICAgICAgfCBvbgpAQCAtMTgwLDcgKzE4MSw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24K LSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBk ZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJl IHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3Rt YXN0ZXIgc3RhcnQuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCmluZGV4IGZhZTE5MTEzY2VmLi5iNjJmNWFj NmMwYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKQEAgLTM4OTEsMyArMzg5MSwyODEgQEAgU0VMRUNU IENPVU5UKCopIEZST00gb25layB0MSBMRUZUIEpPSU4gdGVuazEgdDIKICAgICBPTiAodDIudGhv dXNhbmQgPSB0MS50ZW50aG91cyBPUiB0Mi50aG91c2FuZCA9IHQxLnRob3VzYW5kKTsKIFNFTEVD VCBDT1VOVCgqKSBGUk9NIG9uZWsgdDEgTEVGVCBKT0lOIHRlbmsxIHQyCiAgICAgT04gKHQyLnRo b3VzYW5kID0gdDEudGVudGhvdXMgT1IgdDIudGhvdXNhbmQgPSB0MS50aG91c2FuZCk7CisKKy0t CistLSBUZXN0IHVzZWxlc3MgaW5uZXIgam9pbiByZW1vdmFsIGZvciBmb3JlaWduIGtleSByZWZl cmVuY2VkIHJlbGF0aW9ucworLS0KKworQ1JFQVRFIFRBQkxFIGZrX3BhcmVudDEgKGlkIGludCBQ UklNQVJZIEtFWSwgdmFsIHRleHQpOworQ1JFQVRFIFRBQkxFIGZrX3BhcmVudDIgKGlkIGludCBQ UklNQVJZIEtFWSwgdmFsIHRleHQpOworQ1JFQVRFIFRBQkxFIGZrX3BhcmVudF90ZXh0IChpZCB0 ZXh0IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBma19tdWx0aV9wYXJlbnQgKGlkMSBpbnQs IGlkMiBpbnQsIHZhbCB0ZXh0LCBQUklNQVJZIEtFWSAoaWQxLCBpZDIpKTsKKworQ1JFQVRFIFRB QkxFIGZrX2NoaWxkICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgcDFfaWQgaW50IE5P VCBOVUxMIFJFRkVSRU5DRVMgZmtfcGFyZW50MShpZCksCisgICAgcDJfaWQgaW50IFJFRkVSRU5D RVMgZmtfcGFyZW50MihpZCksCisgICAgcF90ZXh0IHRleHQgUkVGRVJFTkNFUyBma19wYXJlbnRf dGV4dChpZCksCisgICAgcF9tMSBpbnQsCisgICAgcF9tMiBpbnQsCisgICAgdmFsIHRleHQsCisg ICAgRk9SRUlHTiBLRVkgKHBfbTEsIHBfbTIpIFJFRkVSRU5DRVMgZmtfbXVsdGlfcGFyZW50KGlk MSwgaWQyKQorKTsKKworSU5TRVJUIElOVE8gZmtfcGFyZW50MSBWQUxVRVMgKDEsICdwMV8xJyks ICgyLCAncDFfMicpOworSU5TRVJUIElOVE8gZmtfcGFyZW50MiBWQUxVRVMgKDEsICdwMl8xJyks ICgyLCAncDJfMicpOworSU5TRVJUIElOVE8gZmtfcGFyZW50X3RleHQgVkFMVUVTICgndDEnKSwg KCd0MicpOworSU5TRVJUIElOVE8gZmtfbXVsdGlfcGFyZW50IFZBTFVFUyAoMSwgMSwgJ20xJyks ICgyLCAyLCAnbTInKTsKKworSU5TRVJUIElOVE8gZmtfY2hpbGQgVkFMVUVTCisgICAgKDEsIDEs IDEsICd0MScsIDEsIDEsICdjMScpLAorICAgICgyLCAyLCBOVUxMLCAndDInLCAyLCAyLCAnYzIn KSwKKyAgICAoMywgMSwgMSwgJ3QxJywgMSwgMSwgJ2MzJyk7CisKK0FOQUxZWkUgZmtfcGFyZW50 MTsKK0FOQUxZWkUgZmtfcGFyZW50MjsKK0FOQUxZWkUgZmtfcGFyZW50X3RleHQ7CitBTkFMWVpF IGZrX211bHRpX3BhcmVudDsKK0FOQUxZWkUgZmtfY2hpbGQ7CisKKy0tIEVuc3VyZSB0aGF0IGZr X3BhcmVudDEgaXMgcmVtb3ZlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQsIGMu dmFsCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQK K09SREVSIEJZIGMuaWQ7CisKKy0tIEVuc3VyZSB0aGF0IGl0IHJldHVybnMgYWxsIDMgcm93cwor U0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQxIHAgT04g Yy5wMV9pZCA9IHAuaWQKK09SREVSIEJZIGMuaWQ7CisKKy0tIEVuc3VyZSB0aGF0IGZrX3BhcmVu dDIgaXMgcmVtb3ZlZCwgYW5kIGFuIElTIE5PVCBOVUxMIHF1YWwgaXMgaW5qZWN0ZWQKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkLCBjLnZhbAorRlJPTSBma19jaGlsZCBjIEpPSU4g ZmtfcGFyZW50MiBwIE9OIGMucDJfaWQgPSBwLmlkCitPUkRFUiBCWSBjLmlkOworCistLSBFbnN1 cmUgdGhhdCBpdCByZXR1cm5zIHJvdyAxIGFuZCByb3cgMworU0VMRUNUIGMuaWQsIGMudmFsCitG Uk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQyIHAgT04gYy5wMl9pZCA9IHAuaWQKK09SREVS IEJZIGMuaWQ7CisKKy0tIEVuc3VyZSB3ZSBkbyBub3QgaGF2ZSByZWR1bmRhbnQgSVMgTk9UIE5V TEwgcXVhbAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZr X2NoaWxkIGMgSk9JTiBma19wYXJlbnQyIHAgT04gYy5wMl9pZCA9IHAuaWQKK1dIRVJFIGMucDJf aWQgSVMgTk9UIE5VTEwKK09SREVSIEJZIGMuaWQ7CisKKy0tIEVuc3VyZSB0aGF0IGl0IHJldHVy bnMgcm93IDEgYW5kIHJvdyAzCitTRUxFQ1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hpbGQgYyBK T0lOIGZrX3BhcmVudDIgcCBPTiBjLnAyX2lkID0gcC5pZAorV0hFUkUgYy5wMl9pZCBJUyBOT1Qg TlVMTAorT1JERVIgQlkgYy5pZDsKKworLS0gRW5zdXJlIHRoYXQgYm90aCBma19wYXJlbnQxIGFu ZCBma19wYXJlbnQyIGFyZSByZW1vdmVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5p ZAorRlJPTSBma19jaGlsZCBjCisgIEpPSU4gZmtfcGFyZW50MSBwMSBPTiBjLnAxX2lkID0gcDEu aWQKKyAgSk9JTiBma19wYXJlbnQyIHAyIE9OIGMucDJfaWQgPSBwMi5pZAorT1JERVIgQlkgYy5p ZDsKKworLS0gRW5zdXJlIHRoYXQgaXQgcmV0dXJucyByb3dzIDEgYW5kIDMKK1NFTEVDVCBjLmlk CitGUk9NIGZrX2NoaWxkIGMKKyAgSk9JTiBma19wYXJlbnQxIHAxIE9OIGMucDFfaWQgPSBwMS5p ZAorICBKT0lOIGZrX3BhcmVudDIgcDIgT04gYy5wMl9pZCA9IHAyLmlkCitPUkRFUiBCWSBjLmlk OworCistLSBFbnN1cmUgdGhhdCBma19wYXJlbnQxIGlzIHJlbW92ZWQsIGxlYXZpbmcgYzEgam9p bmVkIHRvIGMyCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYzEuaWQsIGMyLmlkCitGUk9N IGZrX2NoaWxkIGMxCisgIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMxLnAxX2lkID0gcC5pZAorICBK T0lOIGZrX2NoaWxkIGMyIE9OIHAuaWQgPSBjMi5wMV9pZAorT1JERVIgQlkgYzEuaWQsIGMyLmlk OworCistLSBFbnN1cmUgdGhhdCB3ZSBnZXQgMXgxLCAxeDMsIDN4MSwgM3gzLCAyeDIKK1NFTEVD VCBjMS5pZCwgYzIuaWQKK0ZST00gZmtfY2hpbGQgYzEKKyAgSk9JTiBma19wYXJlbnQxIHAgT04g YzEucDFfaWQgPSBwLmlkCisgIEpPSU4gZmtfY2hpbGQgYzIgT04gcC5pZCA9IGMyLnAxX2lkCitP UkRFUiBCWSBjMS5pZCwgYzIuaWQ7CisKKy0tIE11bHRpLWNvbHVtbiBGSywgZW5zdXJlIHRoYXQg ZmtfbXVsdGlfcGFyZW50IGlzIHJlbW92ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBj LmlkCitGUk9NIGZrX2NoaWxkIGMKKyAgSk9JTiBma19tdWx0aV9wYXJlbnQgcCBPTiBjLnBfbTEg PSBwLmlkMSBBTkQgYy5wX20yID0gcC5pZDIKK09SREVSIEJZIGMuaWQ7CisKKy0tIEVuc3VyZSB0 aGF0IHdlIGdldCBhbGwgMyByb3dzCitTRUxFQ1QgYy5pZAorRlJPTSBma19jaGlsZCBjCisgIEpP SU4gZmtfbXVsdGlfcGFyZW50IHAgT04gYy5wX20xID0gcC5pZDEgQU5EIGMucF9tMiA9IHAuaWQy CitPUkRFUiBCWSBjLmlkOworCistLSBDaGFpbi1zaGFwZWQgRksgcmVtb3ZhbDogYyAtPiBwMSAt PiBwMgorQUxURVIgVEFCTEUgZmtfcGFyZW50MQorICBBREQgQ09MVU1OIHAyX2lkIGludCBOT1Qg TlVMTCBERUZBVUxUIDEgUkVGRVJFTkNFUyBma19wYXJlbnQyKGlkKTsKKworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIGMuaWQKK0ZST00gZmtfY2hpbGQgYworICBKT0lOIGZrX3BhcmVudDEg cDEgT04gYy5wMV9pZCA9IHAxLmlkCisgIEpPSU4gZmtfcGFyZW50MiBwMiBPTiBwMS5wMl9pZCA9 IHAyLmlkCitPUkRFUiBCWSBjLmlkOworCistLSBFbnN1cmUgdGhhdCB3ZSBnZXQgYWxsIDMgcm93 cworU0VMRUNUIGMuaWQKK0ZST00gZmtfY2hpbGQgYworICBKT0lOIGZrX3BhcmVudDEgcDEgT04g Yy5wMV9pZCA9IHAxLmlkCisgIEpPSU4gZmtfcGFyZW50MiBwMiBPTiBwMS5wMl9pZCA9IHAyLmlk CitPUkRFUiBCWSBjLmlkOworCitBTFRFUiBUQUJMRSBma19wYXJlbnQxIERST1AgQ09MVU1OIHAy X2lkOworCistLSBMRUZUIEpPSU4gT04tY2xhdXNlIGluIGpvaW5pbmZvIGRvZXMgbm90IHJlZmVy ZW5jZSBma19wYXJlbnQyLCBzbyBGSy1yZW1vdmFsCistLSBzaG91bGQgc3RpbGwgZmlyZQorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQKK0ZST00gZmtfcGFyZW50MSBwMQorICBMRUZU IEpPSU4gKGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQyIHAyIE9OIGMucDJfaWQgPSBwMi5pZCkK KyAgICBPTiBwMS5pZCA9IGMuaWQKK09SREVSIEJZIGMuaWQ7CisKK1NFTEVDVCBjLmlkCitGUk9N IGZrX3BhcmVudDEgcDEKKyAgTEVGVCBKT0lOIChma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MiBw MiBPTiBjLnAyX2lkID0gcDIuaWQpCisgICAgT04gcDEuaWQgPSBjLmlkCitPUkRFUiBCWSBjLmlk OworCistLSBma19wYXJlbnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgcC52YWwgaXMgc2Vs ZWN0ZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkLCBwLnZhbAorRlJPTSBma19j aGlsZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOworCistLSBma19wYXJl bnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgcC52YWwgaXMgZmlsdGVyZWQKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9NIGZrX2NoaWxkIGMgSk9JTiBma19wYXJlbnQx IHAgT04gYy5wMV9pZCA9IHAuaWQKK1dIRVJFIHAudmFsID0gJ3AxXzEnOworCistLSBma19wYXJl bnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2Ugb2YgVEFCTEVTQU1QTEUgb24gdGhlIHJlZmVy ZW5jZWQKKy0tIHJlbGF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZCwgYy52 YWwKK0ZST00gZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBUQUJMRVNBTVBMRSBCRVJOT1VM TEkoNTApIFJFUEVBVEFCTEUoMSkKKyAgT04gYy5wMV9pZCA9IHAuaWQ7CisKKy0tIGZrX3BhcmVu dDEgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSBwLmlkIGlzIGluIHRoZSB0YXJnZXRsaXN0CitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZCwgcC5pZAorRlJPTSBma19jaGlsZCBjIEpP SU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOworCistLSBma19wYXJlbnQxIGNhbm5v dCBiZSByZW1vdmVkIGJlY2F1c2UgcC5pZCBpcyBpbiB0aGUgZmlsdGVyCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgYy5pZAorRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9O IGMucDFfaWQgPSBwLmlkCitXSEVSRSBwLmlkID4gMTsKKworLS0gZmtfcGFyZW50MSBjYW5ub3Qg YmUgcmVtb3ZlZCBiZWNhdXNlIHAuaWQgaXMgaW4gdGhlIGpvaW4gY2xhdXNlCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgYy5pZAorRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MSBw IE9OIGMucDFfaWQgPSBwLmlkCitXSEVSRSBjLmlkID4gcC5pZDsKKworLS0gZmtfbXVsdGlfcGFy ZW50IGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2Ugbm90IGFsbCBmb3JlaWduIGtleSBjb2x1bW5z IGFyZQorLS0gbWF0Y2hlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQKK0ZST00g ZmtfY2hpbGQgYworICBKT0lOIGZrX211bHRpX3BhcmVudCBwIE9OIGMucF9tMSA9IHAuaWQxOwor CistLSBma19wYXJlbnQyIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgdGhlIExFRlQgSk9JTiBP Ti1jbGF1c2UgcmVmZXJlbmNlcworLS0gcDIuaWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjLmlkCitGUk9NIGZrX3BhcmVudDEgcDEKKyAgTEVGVCBKT0lOIChma19jaGlsZCBjIEpPSU4g ZmtfcGFyZW50MiBwMiBPTiBjLnAyX2lkID0gcDIuaWQpCisgICAgT04gcDEuaWQgPSBwMi5pZDsK KworLS0gZmtfcGFyZW50MSBjYW5ub3QgYmUgcmVtb3ZlZCBiZWNhdXNlIHAuaWQgaXMgcmVmZXJl bmNlZCBpbiBsYXRlcmFsX3ZhcnMKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitG Uk9NIGZrX2NoaWxkIGMKKyAgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQKKyAg Q1JPU1MgSk9JTiBMQVRFUkFMIChTRUxFQ1QgcC5pZCBPRkZTRVQgMCk7CisKKy0tIGZrX3BhcmVu dDIgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSBwMi5pZCBpcyByZWZlcmVuY2VkIGluIHRoZSBz ZW1pLWpvaW4KKy0tIFJIUyBleHByZXNzaW9ucworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBma19wYXJlbnQxIHAxCitXSEVSRSBwMS5pZCBJTgorICAoU0VMRUNUIHAyLmlkIEZS T00gZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDIgcDIgT04gYy5wMl9pZCA9IHAyLmlkKTsKKwor LS0gZmtfcGFyZW50X3RleHQgY2Fubm90IGJlIHJlbW92ZWQgZHVlIHRvIHRoZSBDT0xMQVRFICJD IiBtaXNtYXRjaCBzcGxpdHRpbmcKKy0tIHRoZSBFQworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGMxLmlkLCBjMi5pZAorRlJPTSBma19jaGlsZCBjMQorICBKT0lOIGZrX3BhcmVudF90ZXh0 IHAgT04gYzEucF90ZXh0ID0gcC5pZAorICBKT0lOIGZrX2NoaWxkIGMyIE9OIHAuaWQgQ09MTEFU RSAiQyIgPSBjMi5wX3RleHQgQ09MTEFURSAiQyI7CisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJl IHJlbW92ZWQgYmVjYXVzZSBwLmlkICsgMCBzcGxpdHMgdGhlIEVDCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgYzEuaWQsIGMyLmlkCitGUk9NIGZrX2NoaWxkIGMxCisgIEpPSU4gZmtfcGFy ZW50MSBwIE9OIGMxLnAxX2lkID0gcC5pZAorICBKT0lOIGZrX2NoaWxkIGMyIE9OIChwLmlkICsg MCkgPSBjMi5wMV9pZDsKKworLS0gZmtfcGFyZW50MSBjYW5ub3QgYmUgcmVtb3ZlZCBkdWUgdG8g dGhlIG11bHRpLXJlbCBFTSAocC5pZCArIGMyLnAxX2lkKQorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGMxLmlkLCBjMi5pZAorRlJPTSBma19jaGlsZCBjMQorICBKT0lOIGZrX3BhcmVudDEg cCBPTiBjMS5wMV9pZCA9IHAuaWQKKyAgSk9JTiBma19jaGlsZCBjMiBPTiBjMS5wMV9pZCA9IChw LmlkICsgYzIucDFfaWQpOworCistLSBFbnN1cmUgdGhhdCB0aGUgcmlnaHQgam9pbiBpcyBub3Qg cmVtb3ZlZAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGMuaWQsIGMudmFsCitGUk9NIGZr X2NoaWxkIGMgUklHSFQgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQ7CisKKy0t IEVuc3VyZSB0aGF0IHRoZSBmdWxsIGpvaW4gaXMgbm90IHJlbW92ZWQKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBjLmlkLCBjLnZhbAorRlJPTSBma19jaGlsZCBjIEZVTEwgSk9JTiBma19w YXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQ7CisKKy0tIGZrX3BhcmVudDEgY2Fubm90IGJlIHJl bW92ZWQgYmVjYXVzZSBpdCBpcyBzZXBhcmF0ZWQgd2l0aCBma19jaGlsZCBieSB0aGUKKy0tIG91 dGVyIGpvaW4gYm91bmRhcnkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjLmlkCitGUk9N IGZrX2NoaWxkIGMKKyAgSk9JTiAoZmtfcGFyZW50MSBwMQorICAgICAgICAgIExFRlQgSk9JTiBm a19wYXJlbnQyIHAyIE9OIFRSVUUpCisgIE9OIGMucDFfaWQgPSBwMS5pZDsKKworLS0gRGVmZXJy YWJsZSBGSzogZmtfcGFyZW50MSBjYW5ub3QgYmUgcmVtb3ZlZCBiZWNhdXNlIGNvbnN0cmFpbnQg aXMgZGVmZXJyYWJsZQorQUxURVIgVEFCTEUgZmtfY2hpbGQgRFJPUCBDT05TVFJBSU5UIGZrX2No aWxkX3AxX2lkX2ZrZXk7CitBTFRFUiBUQUJMRSBma19jaGlsZCBBREQgQ09OU1RSQUlOVCBma19j aGlsZF9wMV9pZF9ma2V5CisgIEZPUkVJR04gS0VZIChwMV9pZCkgUkVGRVJFTkNFUyBma19wYXJl bnQxKGlkKSBERUZFUlJBQkxFOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYy5pZCwg Yy52YWwKK0ZST00gZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAxX2lkID0gcC5p ZDsKKworLS0gTk9UIFZBTElEIEZLOiBma19wYXJlbnQxIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1 c2UgY29uc3RyYWludCBpcyBOT1QgVkFMSUQKK0FMVEVSIFRBQkxFIGZrX2NoaWxkIERST1AgQ09O U1RSQUlOVCBma19jaGlsZF9wMV9pZF9ma2V5OworQUxURVIgVEFCTEUgZmtfY2hpbGQgQUREIENP TlNUUkFJTlQgZmtfY2hpbGRfcDFfaWRfZmtleQorICBGT1JFSUdOIEtFWSAocDFfaWQpIFJFRkVS RU5DRVMgZmtfcGFyZW50MShpZCkgTk9UIFZBTElEOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgYy5pZCwgYy52YWwKK0ZST00gZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBPTiBj LnAxX2lkID0gcC5pZDsKKworRFJPUCBUQUJMRSBma19jaGlsZDsKK0RST1AgVEFCTEUgZmtfbXVs dGlfcGFyZW50OworRFJPUCBUQUJMRSBma19wYXJlbnRfdGV4dDsKK0RST1AgVEFCTEUgZmtfcGFy ZW50MjsKK0RST1AgVEFCTEUgZmtfcGFyZW50MTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkK Cg== --000000000000317fab0652aaae20 Content-Type: application/octet-stream; name="v5-0002-Suppress-FK-based-inner-join-removal-during-the-t.patch" Content-Disposition: attachment; filename="v5-0002-Suppress-FK-based-inner-join-removal-during-the-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mploorbf1 RnJvbSA3ZTBhMjg2Yjg1YTVhMzA0YTQ4OTYzYjAwZWRkZjc2Y2E4YjAyMjY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxMSBNYXIgMjAyNiAxNjoyNjoxMiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Mi8yXSBTdXBwcmVzcyBGSy1iYXNlZCBpbm5lciBqb2luIHJlbW92YWwgZHVyaW5nIHRoZQogdHJp Z2dlciBnYXAKCkZLIGNvbnN0cmFpbnRzIGFyZSBlbmZvcmNlZCB2aWEgQUZURVIgUk9XIHRyaWdn ZXJzLCBjcmVhdGluZyBhIHdpbmRvdwoodGhlICJ0cmlnZ2VyIGdhcCIpIGJldHdlZW4gd2hlbiBh IHJvdyBpcyBwaHlzaWNhbGx5IG1vZGlmaWVkIGFuZCB3aGVuCnRoZSBlbmZvcmNlbWVudCB0cmln Z2VyIGZpcmVzLiAgV2l0aGluIHRoaXMgd2luZG93IHRoZSBGSyBpbnZhcmlhbnQgaXMKbG9jYWxs eSBmYWxzZSBpbiB0aGUgaGVhcC4gIEl0IGJlY29tZXMgdXNlci1vYnNlcnZhYmxlIHRocm91Z2gg YW55CnF1ZXJ5IHRoYXQgcnVucyBhZ2FpbnN0IGEgc25hcHNob3QgY2FwdHVyZWQgaW5zaWRlIHRo ZSB3aW5kb3cgLS0gZm9yCmV4YW1wbGUsIGEgU0VMRUNUIGluc2lkZSBhIHBscGdzcWwgZnVuY3Rp b24gaW52b2tlZCBmcm9tIFJFVFVSTklORywgYQpxdWVyeSBpbnNpZGUgYW4gQUZURVIgUk9XIHRy aWdnZXIgYm9keSwgb3IgYSBmZXRjaCBmcm9tIGEgY3Vyc29yCm9wZW5lZCBpbnNpZGUgdGhlIHdp bmRvdy4gIFRoZSBvcHRpbWl6YXRpb24gaW50cm9kdWNlZCBpbiB0aGUgcHJldmlvdXMKY29tbWl0 IG11c3QgdGhlcmVmb3JlIGJlIGRpc2FibGVkIHdoZW5ldmVyIGEgcXVlcnkgY291bGQgYmUgZXhl Y3V0ZWQKYWdhaW5zdCBhIHNuYXBzaG90IHRoYXQgY2FwdHVyZXMgZ2FwLXdpbmRvdyBzdGF0ZS4K CkEgcHJlZGljYXRlIHRoYXQgb25seSBpbnNwZWN0cyB0aGUgY3VycmVudCB0cmlnZ2VyIHF1ZXVl IGlzIG5vdApzdWZmaWNpZW50LiAgQSBzbmFwc2hvdCBjYXB0dXJlZCBkdXJpbmcgdGhlIGdhcCBj YW4gb3V0bGl2ZSB0aGUgZ2FwJ3MKY2xvc3VyZSAtLSBmb3IgZXhhbXBsZSwgYSBjdXJzb3IgZnJv emVuIHZpYSBDb3B5U25hcHNob3QgaW5zaWRlIHRoZQp3aW5kb3csIG9yIGEgY2FjaGVkIHBsYW4g cmV1c2VkIGF0IGV4ZWN1dGlvbiB0aW1lIGFnYWluc3QgYSBzbmFwc2hvdAp0aGF0IHdhcyBjYXB0 dXJlZCBpbnNpZGUgdGhlIHdpbmRvdy4gIEEgcXVlcnkgZXhlY3V0ZWQgYWdhaW5zdCBzdWNoIGEK c3RhbGUgc25hcHNob3QgY2FuIHN0aWxsIG9ic2VydmUgdGhlIGluY29uc2lzdGVudCBzdGF0ZSBl dmVuIGFmdGVyCnRyaWdnZXJzIGhhdmUgZmlyZWQgYW5kIHRoZSBxdWV1ZSBoYXMgZHJhaW5lZC4g IFRoZSBwcmVkaWNhdGUgZ3VhcmRpbmcKdGhlIG9wdGltaXphdGlvbiB0aGVyZWZvcmUgaGFzIHRv IHJlbWFpbiBwb3NpdGl2ZSBhdCBsZWFzdCBhcyBsb25nIGFzCmFueSBzbmFwc2hvdCBpbiB0aGlz IHRyYW5zYWN0aW9uIGNvdWxkIHN0aWxsIGJlIHJlZmVyZW5jZWQuCgpSb3dFeGNsdXNpdmVMb2Nr IGhhcyBleGFjdGx5IHRoYXQgbGlmZXRpbWU6IGl0IGlzIGFjcXVpcmVkIGR1cmluZwpwYXJzZSBh bmFseXNpcyBvZiBhbnkgRE1MIG9uIHRoZSByZWwgYW5kIHJlbGVhc2VkIG9ubHkgYXQgZW5kIG9m CnRyYW5zYWN0aW9uLCB3aGljaCB0cml2aWFsbHkgZXhjZWVkcyB0aGUgbGlmZXRpbWUgb2YgYW55 IGluLXhhY3QKc25hcHNob3QuICBUaGUgb3B0aW1pemF0aW9uIGlzIHRoZXJlZm9yZSBkaXNhYmxl ZCB3aGVuZXZlciBlaXRoZXIgc2lkZQpvZiB0aGUgRksgaXMgUm93RXhjbHVzaXZlTG9jaydkIGJ5 IHRoaXMgYmFja2VuZC4gIFRoZSBjb3N0IGlzCnBlc3NpbWlzbSBpbiBjYXNlcyB3aGVyZSB0aGUg bG9jayBvdXRsaXZlcyB0aGUgYWN0dWFsIGdhcCB3aW5kb3c6CmFmdGVyIHRoZSBETUwgY29tcGxl dGVzIHdpdGhpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiwgYWZ0ZXIgUk9MTEJBQ0sgVE8KYSBzYXZl cG9pbnQsIG9yIHdoZW4gUm93RXhjbHVzaXZlTG9jayBpcyBoZWxkIGZvciB1bnJlbGF0ZWQgcmVh c29ucwooZS5nLiwgTE9DSyBUQUJMRSkuICBJbiB0aG9zZSBjYXNlcyB0aGUgcXVlcnkgZmFsbHMg YmFjayB0byBleGVjdXRpbmcKdGhlIGpvaW4gbm9ybWFsbHk7IGNvcnJlY3RuZXNzIGlzIHByZXNl cnZlZC4KCkZvciBjYWNoZWQgcGxhbnMsIHRoZSBwbGFuIGNhY2hlIGZvcmNlcyByZXBsYW5uaW5n IHdoZW4gYSBwcmV2aW91c2x5CmNhY2hlZCBnZW5lcmljIHBsYW4gd2l0aCBGSy1iYXNlZCBqb2lu IHJlbW92YWwgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgYW4KYWN0aXZlIHRyaWdnZXIgZ2FwLiAgVGhl IE9JRHMgb2YgdGhlIHJlbGF0aW9ucyBpbnZvbHZlZCBpbiBGSyBqb2luCnJlbW92YWwgYXJlIHBy b3BhZ2F0ZWQgdGhyb3VnaCBQbGFubmVyR2xvYmFsIGFuZCBQbGFubmVkU3RtdCBzbyB0aGF0CmNo b29zZV9jdXN0b21fcGxhbigpIGNhbiBwZXJmb3JtIHRoaXMgY2hlY2sgZWZmaWNpZW50bHkuCi0t LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMgfCA1MyArKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAg ICAgfCAgMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICAgICB8IDM0 ICsrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAg ICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgfCAg MyArKwogc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAgICAgfCAgMSArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICB8IDQwICsrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCAgICAgICAgICAgICB8IDMwICsr KysrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTY2IGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9pbnMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmluZGV4IDRjNWM3OGRjYmZjLi40ZDli NDVkNzFkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpv aW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKQEAg LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2FnZy5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlw LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAKIC8qCkBAIC0yNjI3LDYgKzI2MjgsMTggQEAgcmVzdGFydDoKIAkJaWYgKCFpbm5lcl9q b2luX2lzX3JlbW92YWJsZShyb290LCBma2luZm8pKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJ ICogUmVjb3JkIHRoZSBPSURzIG9mIGJvdGggc2lkZXMgb2YgdGhlIEZLIHNvIHRoYXQgdGhlIHBs YW4gY2FjaGUgY2FuCisJCSAqIGRldGVjdCB3aGVuIGEgY2FjaGVkIHBsYW4gd2l0aCBGSy1iYXNl ZCBqb2luIHJlbW92YWwgbmVlZHMKKwkJICogcmVwbGFubmluZyBkdWUgdG8gdGhlIHRyaWdnZXIg Z2FwIGJlY29taW5nIHBvc3NpYmxlLgorCQkgKi8KKwkJcm9vdC0+Z2xvYi0+ZmtSZW1vdmVkUmVs T2lkcyA9CisJCQlsaXN0X2FwcGVuZF91bmlxdWVfb2lkKHJvb3QtPmdsb2ItPmZrUmVtb3ZlZFJl bE9pZHMsCisJCQkJCQkJCSAgIHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbZmtpbmZvLT5jb25fcmVs aWRdLT5yZWxpZCk7CisJCXJvb3QtPmdsb2ItPmZrUmVtb3ZlZFJlbE9pZHMgPQorCQkJbGlzdF9h cHBlbmRfdW5pcXVlX29pZChyb290LT5nbG9iLT5ma1JlbW92ZWRSZWxPaWRzLAorCQkJCQkJCQkg ICByb290LT5zaW1wbGVfcnRlX2FycmF5W2ZraW5mby0+cmVmX3JlbGlkXS0+cmVsaWQpOworCiAJ CS8qIEluamVjdCBJUyBOT1QgTlVMTCBjbGF1c2VzIGZvciBudWxsYWJsZSBmb3JlaWduIGtleSBj b2x1bW5zICovCiAJCWluamVjdF9ma19ub3RfbnVsbF9xdWFscyhyb290LCBma2luZm8pOwogCkBA IC0yNjk0LDYgKzI3MDcsOCBAQCBpbm5lcl9qb2luX2lzX3JlbW92YWJsZShQbGFubmVySW5mbyAq cm9vdCwgRm9yZWlnbktleU9wdEluZm8gKmZraW5mbykKIHsKIAlSZWxPcHRJbmZvICpjb25fcmVs OwogCVJlbE9wdEluZm8gKnJlZl9yZWw7CisJT2lkCQkJY29uX3JlbG9pZDsKKwlPaWQJCQlyZWZf cmVsb2lkOwogCWludAkJCWF0dHJvZmY7CiAJUmVsaWRzCQlpbnB1dHJlbGlkczsKIAlCaXRtYXBz ZXQgICpma19hdHRudW1zID0gTlVMTDsKQEAgLTI3NTAsNiArMjc2NSw0NCBAQCBpbm5lcl9qb2lu X2lzX3JlbW92YWJsZShQbGFubmVySW5mbyAqcm9vdCwgRm9yZWlnbktleU9wdEluZm8gKmZraW5m bykKIAkJcmVmX3JlbC0+cmVsb3B0a2luZCAhPSBSRUxPUFRfQkFTRVJFTCkKIAkJcmV0dXJuIGZh bHNlOwogCisJY29uX3JlbG9pZCA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbZmtpbmZvLT5jb25f cmVsaWRdLT5yZWxpZDsKKwlyZWZfcmVsb2lkID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtma2lu Zm8tPnJlZl9yZWxpZF0tPnJlbGlkOworCisJLyoKKwkgKiBGSyBjb25zdHJhaW50cyBhcmUgZW5m b3JjZWQgdmlhIEFGVEVSIFJPVyB0cmlnZ2VycywgY3JlYXRpbmcgYSB3aW5kb3cKKwkgKiAodGhl ICJ0cmlnZ2VyIGdhcCIpIGJldHdlZW4gd2hlbiBhIHJvdyBpcyBwaHlzaWNhbGx5IG1vZGlmaWVk IGFuZCB3aGVuCisJICogdGhlIEZLIGVuZm9yY2VtZW50IHRyaWdnZXIgZmlyZXMuICBXaXRoaW4g dGhpcyB3aW5kb3cgdGhlIEZLIGludmFyaWFudAorCSAqIGlzIGxvY2FsbHkgZmFsc2UgaW4gdGhl IGhlYXAuICBJdCBiZWNvbWVzIHVzZXItb2JzZXJ2YWJsZSB0aHJvdWdoIGFueQorCSAqIHF1ZXJ5 IHRoYXQgcnVucyBhZ2FpbnN0IGEgc25hcHNob3QgY2FwdHVyZWQgaW5zaWRlIHRoZSB3aW5kb3cg LS0gZm9yCisJICogZXhhbXBsZSwgYSBTRUxFQ1QgaW5zaWRlIGEgcGxwZ3NxbCBmdW5jdGlvbiBp bnZva2VkIGZyb20gUkVUVVJOSU5HLCBhCisJICogcXVlcnkgaW5zaWRlIGFuIEFGVEVSIFJPVyB0 cmlnZ2VyIGJvZHksIG9yIGEgZmV0Y2ggZnJvbSBhIGN1cnNvciBvcGVuZWQKKwkgKiBpbnNpZGUg dGhlIHdpbmRvdy4KKwkgKgorCSAqIFRoZSBwcmVkaWNhdGUgZ3VhcmRpbmcgdGhlIG9wdGltaXph dGlvbiBtdXN0IHJlbWFpbiBwb3NpdGl2ZSBhdCBsZWFzdAorCSAqIGFzIGxvbmcgYXMgYW55IHNu YXBzaG90IGluIHRoaXMgdHJhbnNhY3Rpb24gY291bGQgc3RpbGwgYmUgcmVmZXJlbmNlZCwKKwkg KiBiZWNhdXNlIGEgc25hcHNob3QgY2FwdHVyZWQgZHVyaW5nIHRoZSBnYXAgY2FuIG91dGxpdmUg dGhlIGdhcCdzCisJICogY2xvc3VyZSAtLSBmb3IgZXhhbXBsZSwgYSBjdXJzb3IgZnJvemVuIHZp YSBDb3B5U25hcHNob3QgaW5zaWRlIHRoZQorCSAqIHdpbmRvdywgb3IgYSBjYWNoZWQgcGxhbiBy ZXVzZWQgYXQgZXhlY3V0aW9uIHRpbWUgYWdhaW5zdCBhIHNuYXBzaG90CisJICogdGhhdCB3YXMg Y2FwdHVyZWQgaW5zaWRlIHRoZSB3aW5kb3cuICBBbnkgRkstcmVtb3ZlZCBwbGFuIGV4ZWN1dGVk CisJICogYWdhaW5zdCBzdWNoIGEgc3RhbGUgc25hcHNob3Qgd291bGQgb2JzZXJ2ZSB0aGUgaW5j b25zaXN0ZW50IHN0YXRlIGFuZAorCSAqIHByb2R1Y2Ugd3JvbmcgcmVzdWx0cywgZXZlbiBpZiB0 aGUgdHJpZ2dlciBxdWV1ZSBoYXMgbG9uZyBzaW5jZQorCSAqIGRyYWluZWQuICBQcmVkaWNhdGVz IHRpZWQgdG8gdGhlIGFjdGl2ZSBETUwncyBvd24gbGlmZXRpbWUsIHN1Y2ggYXMgYQorCSAqIHBl ci1zdGF0ZW1lbnQgY291bnRlciBvciBBZnRlclRyaWdnZXJQZW5kaW5nT25SZWwoKSwgZ28gc2ls ZW50IG9uY2UgdGhlCisJICogZ2FwIGNsb3NlcyBhbmQgd291bGQgbGVhdmUgc3RhbGUtc25hcHNo b3QgZXhlY3V0aW9ucyB1bmd1YXJkZWQuCisJICoKKwkgKiBSb3dFeGNsdXNpdmVMb2NrIGhhcyBl eGFjdGx5IHRoZSByaWdodCBsaWZldGltZTogaXQgaXMgYWNxdWlyZWQgZHVyaW5nCisJICogcGFy c2UgYW5hbHlzaXMgb2YgYW55IERNTCBvbiB0aGUgcmVsIGFuZCByZWxlYXNlZCBvbmx5IGF0IGVu ZCBvZgorCSAqIHRyYW5zYWN0aW9uLCB3aGljaCB0cml2aWFsbHkgZXhjZWVkcyB0aGUgbGlmZXRp bWUgb2YgYW55IGluLXRyYW5zYWN0aW9uCisJICogc25hcHNob3QuICBUaGUgcGVzc2ltaXNtIHRo aXMgaW50cm9kdWNlcyAtLSBza2lwcGluZyB0aGUgb3B0aW1pemF0aW9uCisJICogZm9yIHRoZSBy ZXN0IG9mIHRoZSB0cmFuc2FjdGlvbiBhZnRlciB0aGUgRE1MIGNvbXBsZXRlcywgb3Igd2hlbgor CSAqIFJvd0V4Y2x1c2l2ZUxvY2sgaXMgaGVsZCBmb3Igb3RoZXIgcmVhc29ucyBzdWNoIGFzIExP Q0sgVEFCTEUgLS0gaXMgdGhlCisJICogcHJpY2Ugb2YgdGhhdCBsaWZldGltZSBndWFyYW50ZWUu ICBJbiB0aG9zZSBjYXNlcyB0aGUgcXVlcnkgZmFsbHMgYmFjaworCSAqIHRvIGV4ZWN1dGluZyB0 aGUgam9pbiBub3JtYWxseS4KKwkgKi8KKwlpZiAoQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUo Y29uX3JlbG9pZCwgUm93RXhjbHVzaXZlTG9jaywgdHJ1ZSkgfHwKKwkJQ2hlY2tSZWxhdGlvbk9p ZExvY2tlZEJ5TWUocmVmX3JlbG9pZCwgUm93RXhjbHVzaXZlTG9jaywgdHJ1ZSkpCisJCXJldHVy biBmYWxzZTsKKwogCS8qCiAJICogSWYgdGhlIHJlZmVyZW5jZWQgcmVsYXRpb24gaGFzIGFueSBy ZXN0cmljdGlvbiBjbGF1c2VzLCB0aGV5IGFjdCBhcwogCSAqIGV4cGxpY2l0IGZpbHRlcnMuICBT aW5jZSB3ZSBjYW5ub3QgcGVyZm9ybSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gdG8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBmNDY4OWU3YzlmOC4uNGY2Njc0N2Q4M2YgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTM4NSw2ICszODUsNyBAQCBzdGFu ZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQg Y3Vyc29yT3B0aW9ucywKIAlnbG9iLT5wYXJ0UHJ1bmVJbmZvcyA9IE5JTDsKIAlnbG9iLT5yZWxh dGlvbk9pZHMgPSBOSUw7CiAJZ2xvYi0+aW52YWxJdGVtcyA9IE5JTDsKKwlnbG9iLT5ma1JlbW92 ZWRSZWxPaWRzID0gTklMOwogCWdsb2ItPnBhcmFtRXhlY1R5cGVzID0gTklMOwogCWdsb2ItPmxh c3RQSElkID0gMDsKIAlnbG9iLT5sYXN0Um93TWFya0lkID0gMDsKQEAgLTY5Myw2ICs2OTQsNyBA QCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LCBpbnQgY3Vyc29yT3B0aW9ucywKIAogCXJlc3VsdC0+cmVsYXRpb25PaWRzID0gZ2xvYi0+cmVs YXRpb25PaWRzOwogCXJlc3VsdC0+aW52YWxJdGVtcyA9IGdsb2ItPmludmFsSXRlbXM7CisJcmVz dWx0LT5ma1JlbW92ZWRSZWxPaWRzID0gZ2xvYi0+ZmtSZW1vdmVkUmVsT2lkczsKIAlyZXN1bHQt PnBhcmFtRXhlY1R5cGVzID0gZ2xvYi0+cGFyYW1FeGVjVHlwZXM7CiAJLyogdXRpbGl0eVN0bXQg c2hvdWxkIGJlIG51bGwsIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGNvcHkgaXQgKi8KIAlyZXN1bHQt PnV0aWxpdHlTdG10ID0gcGFyc2UtPnV0aWxpdHlTdG10OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFu Y2FjaGUuYwppbmRleCA2OThlN2MxYWEyMi4uZjUzNTBmZjAzMDIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCkBAIC0xMTMyLDYgKzExMzIsNyBAQCBCdWlsZENhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJICovCiAJcGxhbi0+cGxh blJvbGVJZCA9IEdldFVzZXJJZCgpOwogCXBsYW4tPmRlcGVuZHNPblJvbGUgPSBwbGFuc291cmNl LT5kZXBlbmRzT25STFM7CisJcGxhbi0+aGFzRktKb2luUmVtb3ZhbCA9IGZhbHNlOwogCWlzX3Ry YW5zaWVudCA9IGZhbHNlOwogCWZvcmVhY2gobGMsIHBsaXN0KQogCXsKQEAgLTExNDQsNiArMTE0 NSw4IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0 ICpxbGlzdCwKIAkJCWlzX3RyYW5zaWVudCA9IHRydWU7CiAJCWlmIChwbGFubmVkc3RtdC0+ZGVw ZW5kc09uUm9sZSkKIAkJCXBsYW4tPmRlcGVuZHNPblJvbGUgPSB0cnVlOworCQlpZiAocGxhbm5l ZHN0bXQtPmZrUmVtb3ZlZFJlbE9pZHMgIT0gTklMKQorCQkJcGxhbi0+aGFzRktKb2luUmVtb3Zh bCA9IHRydWU7CiAJfQogCWlmIChpc190cmFuc2llbnQpCiAJewpAQCAtMTE4MCw2ICsxMTgzLDM3 IEBAIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJh bUxpc3RJbmZvIGJvdW5kUGFyYW1zKQogCWlmIChwbGFuc291cmNlLT5pc19vbmVzaG90KQogCQly ZXR1cm4gdHJ1ZTsKIAorCS8qCisJICogSWYgdGhlIGdlbmVyaWMgcGxhbiB1c2VkIEZLLWJhc2Vk IGlubmVyIGpvaW4gcmVtb3ZhbCwgY2hlY2sgd2hldGhlciBhbnkKKwkgKiBvZiB0aGUgcmVsYXRp b25zIGludm9sdmVkIGFyZSBjdXJyZW50bHkgYmVpbmcgbW9kaWZpZWQgaW4gdGhpcworCSAqIHRy YW5zYWN0aW9uIChkZXRlY3RlZCBieSBSb3dFeGNsdXNpdmVMb2NrKS4gIElmIHNvLCB3ZSBtdXN0 IGZvcmNlIGEKKwkgKiBjdXN0b20gcGxhbjogYW4gRkstcmVtb3ZlZCBwbGFuIGV4ZWN1dGVkIGFn YWluc3QgYSBzbmFwc2hvdCB0aGF0IHN0aWxsCisJICogc2VlcyB0aGUgdHJpZ2dlci1nYXAgc3Rh dGUgd291bGQgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cy4gIFRoaXMgY2hlY2sKKwkgKiB1c2Vz IHRoZSBzYW1lIHByZWRpY2F0ZSBhcyBpbm5lcl9qb2luX2lzX3JlbW92YWJsZSgpIGF0IHBsYW5u aW5nIHRpbWU7CisJICogc2VlIHRoYXQgZnVuY3Rpb24gZm9yIHRoZSBjb3JyZWN0bmVzcyBhcmd1 bWVudC4KKwkgKgorCSAqIFRoaXMgY2hlY2sgbXVzdCBjb21lIGJlZm9yZSBhbGwgb3RoZXIgZWFy bHkgcmV0dXJucywgYmVjYXVzZQorCSAqIGNvcnJlY3RuZXNzIHJlcXVpcmVzIHJlcGxhbm5pbmcg cmVnYXJkbGVzcyBvZiBwYXJhbWV0ZXIgYXZhaWxhYmlsaXR5LAorCSAqIEdVQyBzZXR0aW5ncywg b3IgY3Vyc29yIG9wdGlvbnMuCisJICoKKwkgKiBXZSB1c2UgdGhlIGhhc0ZLSm9pblJlbW92YWwg ZmxhZyBmb3IgYSBmYXN0LXBhdGggY2hlY2sgc28gdGhhdCBwbGFucworCSAqIHdpdGhvdXQgRksg am9pbiByZW1vdmFsICh0aGUgY29tbW9uIGNhc2UpIHBheSBvbmx5IGEgc2luZ2xlIGJvb2xlYW4K KwkgKiB0ZXN0LgorCSAqLworCWlmIChwbGFuc291cmNlLT5ncGxhbiAhPSBOVUxMICYmIHBsYW5z b3VyY2UtPmdwbGFuLT5oYXNGS0pvaW5SZW1vdmFsKQorCXsKKwkJZm9yZWFjaF9ub2RlKFBsYW5u ZWRTdG10LCBzdG10LCBwbGFuc291cmNlLT5ncGxhbi0+c3RtdF9saXN0KQorCQl7CisJCQlpZiAo c3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCisJCQkJY29udGludWU7CisJCQlmb3Jl YWNoX29pZChyZWxvaWQsIHN0bXQtPmZrUmVtb3ZlZFJlbE9pZHMpCisJCQl7CisJCQkJaWYgKENo ZWNrUmVsYXRpb25PaWRMb2NrZWRCeU1lKHJlbG9pZCwgUm93RXhjbHVzaXZlTG9jaywgdHJ1ZSkp CisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJfQorCiAJLyogT3RoZXJ3aXNlLCBuZXZl ciBhbnkgcG9pbnQgaW4gYSBjdXN0b20gcGxhbiBpZiB0aGVyZSdzIG5vIHBhcmFtZXRlcnMgKi8K IAlpZiAoYm91bmRQYXJhbXMgPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaAppbmRleCBkNjdmNjgwODllMy4uNjA0ZGYzYmQ1ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CkBAIC0yMjksNiArMjI5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIG90 aGVyIGRlcGVuZGVuY2llcywgYXMgUGxhbkludmFsSXRlbXMgKi8KIAlMaXN0CSAgICppbnZhbEl0 ZW1zOwogCisJLyogT0lEcyBvZiByZWxhdGlvbnMgaW52b2x2ZWQgaW4gRkstYmFzZWQgaW5uZXIg am9pbiByZW1vdmFsICovCisJTGlzdAkgICAqZmtSZW1vdmVkUmVsT2lkczsKKwogCS8qIHR5cGUg T0lEcyBmb3IgUEFSQU1fRVhFQyBQYXJhbXMgKi8KIAlMaXN0CSAgICpwYXJhbUV4ZWNUeXBlczsK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAxNGExZGZlZDJiOS4uNjNhZjQ2OWE5ODEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC0xNDYsNiArMTQ2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5l ZFN0bXQKIAkvKiBvdGhlciBkZXBlbmRlbmNpZXMsIGFzIFBsYW5JbnZhbEl0ZW1zICovCiAJTGlz dAkgICAqaW52YWxJdGVtczsKIAorCS8qIE9JRHMgb2YgcmVsYXRpb25zIGludm9sdmVkIGluIEZL LWJhc2VkIGlubmVyIGpvaW4gcmVtb3ZhbCAqLworCUxpc3QJICAgKmZrUmVtb3ZlZFJlbE9pZHM7 CisKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1zICovCiAJTGlzdAkgICAqcGFy YW1FeGVjVHlwZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggN2E0YTg1YzgwMzguLjgxMzBj YzNlMWEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMTY1LDYgKzE2NSw3IEBAIHR5cGVkZWYg c3RydWN0IENhY2hlZFBsYW4KIAlib29sCQlpc192YWxpZDsJCS8qIGlzIHRoZSBzdG10X2xpc3Qg Y3VycmVudGx5IHZhbGlkPyAqLwogCU9pZAkJCXBsYW5Sb2xlSWQ7CQkvKiBSb2xlIElEIHRoZSBw bGFuIHdhcyBjcmVhdGVkIGZvciAqLwogCWJvb2wJCWRlcGVuZHNPblJvbGU7CS8qIGlzIHBsYW4g c3BlY2lmaWMgdG8gdGhhdCByb2xlPyAqLworCWJvb2wJCWhhc0ZLSm9pblJlbW92YWw7CS8qIGRv ZXMgcGxhbiB1c2UgRkstYmFzZWQgam9pbiByZW1vdmFsPyAqLwogCVRyYW5zYWN0aW9uSWQgc2F2 ZWRfeG1pbjsJLyogaWYgdmFsaWQsIHJlcGxhbiB3aGVuIFRyYW5zYWN0aW9uWG1pbgogCQkJCQkJ CQkgKiBjaGFuZ2VzIGZyb20gdGhpcyB2YWx1ZSAqLwogCWludAkJCWdlbmVyYXRpb247CQkvKiBw YXJlbnQncyBnZW5lcmF0aW9uIG51bWJlciBmb3IgdGhpcyBwbGFuICovCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qb2luLm91dAppbmRleCBkNDZmYmYwZjI4YS4uMTc0OTE0YTZhODkgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dApAQCAtMTA2ODEsNiArMTA2ODEsNDYgQEAgRlJPTSBma19jaGls ZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOwogICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGZrX3BhcmVudDEgcAogKDUgcm93cykKIAorLS0gVHJpZ2dlciBnYXA6IGZrX3Bh cmVudDEgY2Fubm90IGJlIHJlbW92ZWQgd2hlbiBSb3dFeGNsdXNpdmVMb2NrIGlzIGhlbGQKKy0t IGR1cmluZyBhY3RpdmUgRE1MIG9uIGEgRkstcmVsYXRlZCB0YWJsZQorQUxURVIgVEFCTEUgZmtf Y2hpbGQgRFJPUCBDT05TVFJBSU5UIGZrX2NoaWxkX3AxX2lkX2ZrZXk7CitBTFRFUiBUQUJMRSBm a19jaGlsZCBBREQgQ09OU1RSQUlOVCBma19jaGlsZF9wMV9pZF9ma2V5CisgIEZPUkVJR04gS0VZ IChwMV9pZCkgUkVGRVJFTkNFUyBma19wYXJlbnQxKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKK0NS RUFURSBGVU5DVElPTiB0cmlnZ2VyX2dhcF90ZXN0X2ZuKCkgUkVUVVJOUyBpbnQgTEFOR1VBR0Ug cGxwZ3NxbCBBUyAkJAorREVDTEFSRQorICAgIGpvaW5fY291bnQgaW50OworICAgIHBsYW5fbGlu ZSB0ZXh0OworQkVHSU4KKyAgICBTRUxFQ1QgY291bnQoKikgSU5UTyBqb2luX2NvdW50CisgICAg RlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFyZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOworICAg IFJBSVNFIE5PVElDRSAnSm9pbiBDb3VudDogJScsIGpvaW5fY291bnQ7CisKKyAgICBSQUlTRSBO T1RJQ0UgJy0tLSBFWFBMQUlOIFBMQU4gLS0tJzsKKyAgICBGT1IgcGxhbl9saW5lIElOCisgICAg ICAgIEVYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAgU0VMRUNUIGNvdW50KCopIEZST00gZmtf Y2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAxX2lkID0gcC5pZAorICAgIExPT1AKKyAg ICAgICAgUkFJU0UgTk9USUNFICclJywgcGxhbl9saW5lOworICAgIEVORCBMT09QOworCisgICAg UkVUVVJOIGpvaW5fY291bnQ7CitFTkQ7CiskJDsKK0RFTEVURSBGUk9NIGZrX3BhcmVudDEgV0hF UkUgaWQgPSAxIFJFVFVSTklORyB0cmlnZ2VyX2dhcF90ZXN0X2ZuKCk7CitOT1RJQ0U6ICBKb2lu IENvdW50OiAxCitOT1RJQ0U6ICAtLS0gRVhQTEFJTiBQTEFOIC0tLQorTk9USUNFOiAgQWdncmVn YXRlCitOT1RJQ0U6ICAgIC0+ICBOZXN0ZWQgTG9vcAorTk9USUNFOiAgICAgICAgICBKb2luIEZp bHRlcjogKHAuaWQgPSBjLnAxX2lkKQorTk9USUNFOiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZmtfY2hpbGQgYworTk9USUNFOiAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKK05PVElDRTogICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGZrX3BhcmVudDEgcAorIHRyaWdnZXJfZ2FwX3Rl c3RfZm4gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAxCisoMSBy b3cpCisKK0RST1AgRlVOQ1RJT04gdHJpZ2dlcl9nYXBfdGVzdF9mbigpOwogRFJPUCBUQUJMRSBm a19jaGlsZDsKIERST1AgVEFCTEUgZmtfbXVsdGlfcGFyZW50OwogRFJPUCBUQUJMRSBma19wYXJl bnRfdGV4dDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwKaW5kZXggYjYyZjVhYzZjMGIuLjBjYjI5OTliZjk4 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAtNDE2NCw2ICs0MTY0LDM2IEBAIEVYUExBSU4gKENP U1RTIE9GRikKIFNFTEVDVCBjLmlkLCBjLnZhbAogRlJPTSBma19jaGlsZCBjIEpPSU4gZmtfcGFy ZW50MSBwIE9OIGMucDFfaWQgPSBwLmlkOwogCistLSBUcmlnZ2VyIGdhcDogZmtfcGFyZW50MSBj YW5ub3QgYmUgcmVtb3ZlZCB3aGVuIFJvd0V4Y2x1c2l2ZUxvY2sgaXMgaGVsZAorLS0gZHVyaW5n IGFjdGl2ZSBETUwgb24gYSBGSy1yZWxhdGVkIHRhYmxlCitBTFRFUiBUQUJMRSBma19jaGlsZCBE Uk9QIENPTlNUUkFJTlQgZmtfY2hpbGRfcDFfaWRfZmtleTsKK0FMVEVSIFRBQkxFIGZrX2NoaWxk IEFERCBDT05TVFJBSU5UIGZrX2NoaWxkX3AxX2lkX2ZrZXkKKyAgRk9SRUlHTiBLRVkgKHAxX2lk KSBSRUZFUkVOQ0VTIGZrX3BhcmVudDEoaWQpIE9OIERFTEVURSBDQVNDQURFOworCitDUkVBVEUg RlVOQ1RJT04gdHJpZ2dlcl9nYXBfdGVzdF9mbigpIFJFVFVSTlMgaW50IExBTkdVQUdFIHBscGdz cWwgQVMgJCQKK0RFQ0xBUkUKKyAgICBqb2luX2NvdW50IGludDsKKyAgICBwbGFuX2xpbmUgdGV4 dDsKK0JFR0lOCisgICAgU0VMRUNUIGNvdW50KCopIElOVE8gam9pbl9jb3VudAorICAgIEZST00g ZmtfY2hpbGQgYyBKT0lOIGZrX3BhcmVudDEgcCBPTiBjLnAxX2lkID0gcC5pZDsKKyAgICBSQUlT RSBOT1RJQ0UgJ0pvaW4gQ291bnQ6ICUnLCBqb2luX2NvdW50OworCisgICAgUkFJU0UgTk9USUNF ICctLS0gRVhQTEFJTiBQTEFOIC0tLSc7CisgICAgRk9SIHBsYW5fbGluZSBJTgorICAgICAgICBF WFBMQUlOIChDT1NUUyBPRkYpCisgICAgICAgIFNFTEVDVCBjb3VudCgqKSBGUk9NIGZrX2NoaWxk IGMgSk9JTiBma19wYXJlbnQxIHAgT04gYy5wMV9pZCA9IHAuaWQKKyAgICBMT09QCisgICAgICAg IFJBSVNFIE5PVElDRSAnJScsIHBsYW5fbGluZTsKKyAgICBFTkQgTE9PUDsKKworICAgIFJFVFVS TiBqb2luX2NvdW50OworRU5EOworJCQ7CisKK0RFTEVURSBGUk9NIGZrX3BhcmVudDEgV0hFUkUg aWQgPSAxIFJFVFVSTklORyB0cmlnZ2VyX2dhcF90ZXN0X2ZuKCk7CitEUk9QIEZVTkNUSU9OIHRy aWdnZXJfZ2FwX3Rlc3RfZm4oKTsKKwogRFJPUCBUQUJMRSBma19jaGlsZDsKIERST1AgVEFCTEUg ZmtfbXVsdGlfcGFyZW50OwogRFJPUCBUQUJMRSBma19wYXJlbnRfdGV4dDsKLS0gCjIuMzkuNSAo QXBwbGUgR2l0LTE1NCkKCg== --000000000000317fab0652aaae20--