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 1wSt1o-000Ahr-1d for pgsql-hackers@arkaria.postgresql.org; Fri, 29 May 2026 08:57:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wSt1m-0025rN-36 for pgsql-hackers@arkaria.postgresql.org; Fri, 29 May 2026 08:57:15 +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 1wSt1m-0025r5-1e for pgsql-hackers@lists.postgresql.org; Fri, 29 May 2026 08:57:15 +0000 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wSt1k-000000006vG-0fgk for pgsql-hackers@postgresql.org; Fri, 29 May 2026 08:57:14 +0000 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-834f1075805so10238492b3a.2 for ; Fri, 29 May 2026 01:57:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780045029; cv=none; d=google.com; s=arc-20240605; b=d3D7Io/3Ya+huGpfdvpUMa5RLWM2DjdJFQp76K6GBOJUL31RUZENkweNYPUchDwsNb IDkSZShI9qEvVE3EJLbU620lZ8t8SC08CUsUgLti5mJbWxH5dj0aSF0O08oebY521z2g xlp84yYdhFyU5NuWqN1QNcvsZc2y+t7r8fkt3g8Anmyqn48zJC5RyZFW4LL3qpuKcRs3 5SU9e0lexjby17wXFx2gWcaCpTIHLRqa4b7Oci1PmsizeiDModK3p8V+muHyQuCo5Uvz bE76fJnCVHw72DWY6G64Bub7dZaDvuoJ4duBHyfLSZ8P0ughq0o3HJhtRoMoPRMQEjZJ uZmA== 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=LteJvgdm3Cf1seoV4IRZYo0fcfBASJo4yRpd3cQ3VM4=; fh=1UiV5ylBXCY5MqVam1yYjExTLJD4IcZtA/Kj/7Ms/ac=; b=TCUgHkWQnyItt3+Us56DjjVm0bWS0hmvBJP/aJKW3+vlCAkJwXPM/1oSB7JpbprpVL PjjZFoDqMTO8KrIvNgFVkKbVvzvFMapMWnROWvFmJHrssrs9d9BzSMa9kB0E9Sw3E5B7 AdpTlzJ49hL/ToGdVwIY4lgsj3xNFAZRavYdsOHcBkFhwJ2aCF2h0sUOpqunoBYJLGz6 4UwrDwzBdEP4kwWsoUrx0v0LxWcjpidbO/ZUjyIC+v2yBlwX0PlDBJ7olCI7jh9aMRUM KZdczeqWxL6Oi1T5yzU/8kEt6Jkx14CWFams3chQCgu73/XjAqZVxg1RNL0uC5ZAg1gL feUw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780045029; x=1780649829; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LteJvgdm3Cf1seoV4IRZYo0fcfBASJo4yRpd3cQ3VM4=; b=T2oVqnTWMyHNJnv1F+o4RrBqzZU8tMBPQUEWmpTSuL94nZMcJZReIZ9/dUJ5B+GiuD oLhlBY9Sa+2MyOPB0GW0oIU939xnykdgbhYoXTjEMqqWkDWvkA2Sx/7kv8pPoPOtmZ/q WCA5+q5aPvNkev4kB+PNf8OynOziQcJE35IQc+selYoj2Aopxn3EsaqnaKAGmZN6CXx4 xsPnrfHGeQOq2F7Y/o6He19P/bxj7pe/MzZwJ5rMvmELH5zusJ6rWf4E3cKtVjmZgX9d P0w33/lA0KS7F8STeSosi5GvtlX1krLWudzFlxNIEmbZ7Fynsm3vExtO6BejRvGxJpzq W1WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780045029; x=1780649829; 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=LteJvgdm3Cf1seoV4IRZYo0fcfBASJo4yRpd3cQ3VM4=; b=oTGGXxkXpO2bJ30c/hNzaV6Hvn/WxTdbGWtON+y2FBpsvOWH7S/EwMbJrIb04qnRw9 8d0bc1a/yYDLIYdEXZHrd+ey9YVufb/X6njulOMRPyWYya6PBMSkG2mE9SUZbETAPuCj KCrDzH/a1jWH68scwOEUOW/nVVrjBh2fKetVx5CzRj9+Pp1+ZCfxSZGdD5BaNB9Rtotn wHOZAEWzPYjefmRCBKZKdGWAA/P3D9nPkMUhtGeFMeQqbt9Q8hP0SnDKiKeeN0cMftAw /MTQBP4djns0+1krGXq3DhLUcwUpDKlHpP+gilwBH2SVhkOf444ep3Gf2SQ4sit7ziMm FsdA== X-Forwarded-Encrypted: i=1; AFNElJ9n3VsjgJ3m7fCkvBCOcVA7xbf79uAy8A0oAgIONN7wFoH4V/hIb1X6zsOMeYxDwiLXssLYtgKRN8xpa/Sw@postgresql.org X-Gm-Message-State: AOJu0YyENVBEfuzR4OLX1ZqT5E9ZVIEkfehUh8Vr+X3SES/ftIBzW9vP w9GVV6i8DmeEH9J0vCF4aV3MfPHj1xBGVVIr3mJoJLowUwylPGQW3eOabxGbksUbMOfynQPbp2e fUrMaImZYpqlNJCkPPhl4eeqqShlSwO8= X-Gm-Gg: Acq92OHafD9qWmluWlIMTxz6G9FHF95Gv2goOm7HBpeGPRIBr1VROHn9ILzuKktn1d1 1+mGYq8uex/l2hNzu+Xtkirt5QUYrkusUC5Tp7x2Q1h7SwhRF3sBq9WbnnmvdOKVRp2HEU8ryNi PlvMsAJy+yeRRurmp0RwFT1uS0s8rqGm3xvK9sbdNUZGrfy3CxT46zJnJL6EpbtgkEvBUNmL3sw P2tes9ynnlKpJOC86QBEnSSZYNHJI++tBuwBAZEbMedqDsP+mOiIZ8j9Y0E4NO/YBtOwdJIFQAW tgL9mx6OP+vk9J1CiISnA3OJJ2cNGuV4O1xQjtJpepXK68NQC0skW/TJL/ovQKA+Qrb5dYI+b4g /KdZPh9cpKw== X-Received: by 2002:a05:6a00:12d3:b0:83a:7516:5be0 with SMTP id d2e1a72fcca58-84212ca331cmr1883859b3a.50.1780045029451; Fri, 29 May 2026 01:57:09 -0700 (PDT) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> <605328.1747710381@sss.pgh.pa.us> <691261.1747755511@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Fri, 29 May 2026 17:56:51 +0900 X-Gm-Features: AVHnY4LQJVOvsvghqZCsImZE5VYqrPBtL5y0coDU7EDxe_OXSGS6XLQSVKIVxvk Message-ID: Subject: Re: generic plans and "initial" pruning To: Thom Brown Cc: Chao Li , Tom Lane , Tender Wang , Alexander Lakhin , Tomas Vondra , Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000aa729e0652f107bd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aa729e0652f107bd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, May 28, 2026 at 10:14=E2=80=AFPM Thom Brown wrote: > On Thu, 28 May 2026 at 09:14, Amit Langote wrot= e: > > It's a real bug. > > > > You're right that if PortalLockCachedPlan() replans, the QueryDesc > > created before the call still points at the old PlannedStmt from the > > released plan. And yes, 0004 happens to fix it by rebuilding the > > QueryDesc inside PortalLockCachedPlan(), but 0001 through 0003 are > > broken on their own. > > > > Attached is an updated set with the fix: CreateQueryDesc now runs > > after PortalLockCachedPlan() returns, as you suggested. That said, > > I'll probably focus first on settling the plancache refactoring that > > spun off from this thread [1], and then start a new thread for the > > pruning-aware locking work on top of it, incorporating parts of this > > series. > > Thanks. > > I've done another pass. I see a reference to > AcquireExecutorLocksUnpruned(), but I can't find this function. Is > this supposed to be AcquireExecutorLocksPrepared()? You're right, stale comment. It should say AcquireExecutorLocksPrepared(). Fixed. > And also I have a question about the new firstResultRels code > > If I've followed it right, the bit in setrefs.c records the > lowest-numbered RT index from leaf_result_relids as the > per-ModifyTable fallback that's used when all real targets get pruned > away, and the executor side looks it up via > linitial_int(node->resultRelations). For that to work those two have > to pick the same RT index, and the comment justifies it with > "partition expansion preserves RT index order". Where is that > preservation guaranteed? The ordering comes from expand_inherited_rtentry(), which adds child partitions to the range table sequentially in partition bound order. Since ModifyTable.resultRelations is built from the same expansion, its first element is the lowest-numbered RT index among the leaf partitions for that node. That is the same value bms_next_member(leaf_result_relids, -1) returns from the Bitmapset, because Bitmapset iteration returns members in ascending order. I've added a comment in setrefs.c pointing to expand_inherited_rtentry() as the source of this guarantee. > And with the assertion in ExecInitModifyTable: > > Assert(list_member_int(estate->es_plannedstmt->firstResultRels, rti)); > > With writable CTEs producing more than one ModifyTable node the list > has several entries, so all the assert really checks is that some > recorded entry matches, not that the one recorded for this particular > node matches. If that's correct, then in a case where the wrong entry > happened to line up the right relation wouldn't be locked and nothing > would complain. Is there something that keeps these in order > somewhere? This is a fair observation -- the Assert checks membership in the global list rather than per-node correspondence. But node A's rti can't accidentally pass the Assert by matching an entry recorded for node B. Each ModifyTable node gets its own partition expansion with distinct RT entries. In a writable CTE like: WITH upd1 AS (UPDATE t SET ...), upd2 AS (UPDATE t SET ...) UPDATE t SET ... each UPDATE creates a separate set of leaf partition RT entries -- upd1 might get RT indexes 5,6,7, upd2 gets 8,9,10, and the main UPDATE gets 11,12,13. The global firstResultRels list would be [5, 8, 11]. When ExecInitModifyTable falls back to linitial_int(resultRelations) for a given node, it finds that node's own entry, because the RT index sets are disjoint across nodes. That said, it's worth being explicit about what protections exist at each layer, since this is safety-critical code: 1. AcquireExecutorLocksPrepared(), added by 0004, locks every entry in firstResultRels unconditionally. So regardless of which rti a ModifyTable node falls back to, the relation will be locked. 2. ExecGetRangeTableRelation() has two checks when opening a relation. For non-result relations (isResultRel=3Dfalse), it checks es_unpruned_relids and raises an ERROR in release builds if the relation was pruned. For result relations (isResultRel=3Dtrue), that check is intentionally skipped -- it has to be, because at least one result relation per ModifyTable node must remain openable even when all partitions are pruned, since executor code paths like ExecMerge() and ExecInitPartitionInfo() rely on resultRelInfo[0] being initialized (see commit 28317de723b). The remaining protection for result relations is Assert(CheckRelationLockedByMe()) inside table_open, which fires in debug builds. 3. I've tightened ExecInitModifyTable to close this gap: the all-pruned fallback path now raises an elog(ERROR) in release builds if linitial_int(resultRelations) is not found in firstResultRels, rather than just an Assert. This gives result relations a production-visible check comparable to what es_unpruned_relids provides for scan relations. So the net effect is that for scan relations, opening a pruned-and-unlocked relation is caught by an ERROR in production via es_unpruned_relids. For result relations on the all-pruned fallback path, it's now also caught by an ERROR in production via the firstResultRels check in ExecInitModifyTable. The locking in AcquireExecutorLocksPrepared() ensures the relation is always locked regardless. Thanks again for the review. A close look at these aspects by someone other than me is very useful. --=20 Thanks, Amit Langote --000000000000aa729e0652f107bd Content-Type: application/octet-stream; name="v13-0003-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Disposition: attachment; filename="v13-0003-Introduce-ExecutorPrep-and-refactor-executor-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpqoop3s1 RnJvbSAwNWM5MjM0NmUyYmVjNGM4ZWM5YTdjZjQ1ZWM1NzJjMTVkNjQ0ODFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMTY6MDg6NDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MyAzLzRdIEludHJvZHVjZSBFeGVjdXRvclByZXAgYW5kIHJlZmFjdG9yIGV4ZWN1dG9yIHN0YXJ0 dXAKCk1vdmUgcGVybWlzc2lvbiBjaGVja3MsIHJhbmdlIHRhYmxlIGluaXRpYWxpemF0aW9uLCBh bmQgaW5pdGlhbApwYXJ0aXRpb24gcHJ1bmluZyBvdXQgb2YgSW5pdFBsYW4oKSBpbnRvIGEgbmV3 IEV4ZWN1dG9yUHJlcCgpCmhlbHBlci4KCkV4ZWN1dG9yU3RhcnQoKSBpbnZva2VzIEV4ZWN1dG9y UHJlcCgpIHdoZW4gUXVlcnlEZXNjLT5lc3RhdGUgaXMKTlVMTCwga2VlcGluZyBjdXJyZW50IGJl aGF2aW9yIHVuY2hhbmdlZC4gIElmIFF1ZXJ5RGVzYy0+ZXN0YXRlIGlzCmFscmVhZHkgc2V0LCBF eGVjdXRvclN0YXJ0KCkgcmV1c2VzIGl0LgoKVGhpcyBpcyBwcmVwYXJhdG9yeSByZWZhY3Rvcmlu ZyBvbmx5LiAgTm8gY2FsbGVyIG91dHNpZGUgdGhlCmV4ZWN1dG9yIHN1cHBsaWVzIGEgcHJlYnVp bHQgRVN0YXRlIGluIHRoaXMgY29tbWl0LgoKSW4gYXNzZXJ0IGJ1aWxkcywgdmVyaWZ5IHRoYXQg dGhlIGV4cGVjdGVkIHJlbGF0aW9uIGxvY2tzIGFyZSBoZWxkCndoZW4gZW50ZXJpbmcgRXhlY3V0 b3JTdGFydCgpLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSAgICAgfCAgMTAgKyst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIHwgMTUyICsrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIHwgICAyICst CiAzIGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgYi9zcmMvYmFja2VuZC9leGVj dXRvci9SRUFETUUKaW5kZXggNTRmNDc4MmYzMWIuLjg5MGJjM2Q5MzMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVB RE1FCkBAIC0yOTEsMTEgKzI5MSwxNyBAQCBRdWVyeSBQcm9jZXNzaW5nIENvbnRyb2wgRmxvdwog CiBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRyb2wgZmxvdyBmb3IgZnVsbCBxdWVyeSBwcm9jZXNz aW5nOgogCisgICAgRXhlY3V0b3JQcmVwCisJCU1heSBiZSBydW4gYmVmb3JlIEV4ZWN1dG9yU3Rh cnQsIG9yIGltcGxpY2l0bHkgZnJvbSBFeGVjdXRvclN0YXJ0CisJCWlmIG5vdCBkb25lIGVhcmxp ZXIuICBDcmVhdGVzIHRoZSBFU3RhdGUgaW4gUXVlcnlEZXNjLCBwZXJmb3JtcworCQlyYW5nZSB0 YWJsZSBpbml0aWFsaXphdGlvbiwgcGVybWlzc2lvbiBjaGVja3MsIGFuZCBpbml0aWFsCisJCXBh cnRpdGlvbiBwcnVuaW5nLgorCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0Ci0J CUNyZWF0ZUV4ZWN1dG9yU3RhdGUKLQkJCWNyZWF0ZXMgcGVyLXF1ZXJ5IGNvbnRleHQKKwkJRXhl Y3V0b3JQcmVwIChpZiBRdWVyeURlc2MuZXN0YXRlIGlzIE5VTEwpCisJCQljcmVhdGVzIEVTdGF0 ZSBhbmQgcGVyLXF1ZXJ5IGNvbnRleHQKIAkJc3dpdGNoIHRvIHBlci1xdWVyeSBjb250ZXh0IHRv IHJ1biBFeGVjSW5pdE5vZGUKIAkJQWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeQogCQlFeGVjSW5pdE5v ZGUgLS0tIHJlY3Vyc2l2ZWx5IHNjYW5zIHBsYW4gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK aW5kZXggNGIzMGY3Njg2ODAuLjJiOTM5N2I3MmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK QEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5j bHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKQEAg LTc2LDYgKzc3LDcgQEAgRXhlY3V0b3JFbmRfaG9va190eXBlIEV4ZWN1dG9yRW5kX2hvb2sgPSBO VUxMOwogRXhlY3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBFeGVjdXRvckNoZWNrUGVybXNfaG9v ayA9IE5VTEw7CiAKIC8qIGRlY2xzIGZvciBsb2NhbCByb3V0aW5lcyBvbmx5IHVzZWQgd2l0aGlu IHRoaXMgbW9kdWxlICovCitzdGF0aWMgdm9pZCBFeGVjdXRvclByZXAoUXVlcnlEZXNjICpxdWVy eURlc2MsIFJlc291cmNlT3duZXIgb3duZXIsIGludCBlZmxhZ3MpOwogc3RhdGljIHZvaWQgSW5p dFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogc3RhdGljIHZvaWQgQ2hl Y2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24gcmVsLCBSb3dNYXJrVHlwZSBtYXJrVHlwZSk7CiBz dGF0aWMgdm9pZCBFeGVjUG9zdHByb2Nlc3NQbGFuKEVTdGF0ZSAqZXN0YXRlKTsKQEAgLTE0Nyw3 ICsxNDksNiBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKQogCiAJLyogc2FuaXR5IGNoZWNrczogcXVlcnlEZXNjIG11c3Qgbm90IGJlIHN0 YXJ0ZWQgYWxyZWFkeSAqLwogCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7Ci0JQXNzZXJ0KHF1 ZXJ5RGVzYy0+ZXN0YXRlID09IE5VTEwpOwogCiAJLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBx dWVyeSdzIHNuYXBzaG90IGlzIGFjdGl2ZSAqLwogCUFzc2VydChHZXRBY3RpdmVTbmFwc2hvdCgp ID09IHF1ZXJ5RGVzYy0+c25hcHNob3QpOwpAQCAtMTczLDkgKzE3NCw2NyBAQCBzdGFuZGFyZF9F eGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCiAJLyoKIAkg KiBCdWlsZCBFU3RhdGUsIHN3aXRjaCBpbnRvIHBlci1xdWVyeSBtZW1vcnkgY29udGV4dCBmb3Ig c3RhcnR1cC4KLQkgKi8KLQllc3RhdGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7Ci0JcXVlcnlE ZXNjLT5lc3RhdGUgPSBlc3RhdGU7CisJICoKKwkgKiBJZiBFeGVjdXRvclByZXAoKSByYW4gZWFy bGllciAoZS5nLiwgdG8gZG8gaW5pdGlhbCBwcnVuaW5nIGR1cmluZyBwbGFuCisJICogdmFsaWRp dHkgY2hlY2tpbmcpLCByZXVzZSBpdHMgRVN0YXRlIHRvIGF2b2lkIHJlZG9pbmcgcmFuZ2UgdGFi bGUgc2V0dXAKKwkgKiBhbmQgcHJ1bmluZy4gT3RoZXJ3aXNlLCBjcmVhdGUgYSBmcmVzaCBFU3Rh dGUgYXMgdXN1YWwuCisJICoKKwkgKiBJbiBhc3NlcnQgYnVpbGRzLCB2ZXJpZnkgdGhhdCB0aGUg ZXhwZWN0ZWQgbG9ja3MgYXJlIGhlbGQuICBXaGVuIG5vCisJICogcHJlcCBFU3RhdGUgd2FzIHBy b3ZpZGVkLCBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHNob3VsZCBoYXZlIGxvY2tlZAorCSAqIGV2 ZXJ5IHJlbGF0aW9uIGluIHRoZSBwbGFuLiAgV2hlbiBvbmUgd2FzIHByb3ZpZGVkLCBwcnVuaW5n LWF3YXJlCisJICogbG9ja2luZyBzaG91bGQgaGF2ZSBsb2NrZWQgYXQgbGVhc3QgdGhlIHVucHJ1 bmVkIHJlbGF0aW9ucy4gIEJvdGgKKwkgKiBjaGVja3MgYXJlIHNraXBwZWQgaW4gcGFyYWxsZWwg d29ya2Vycywgd2hpY2ggYWNxdWlyZSByZWxhdGlvbiBsb2NrcworCSAqIGxhemlseSBpbiBFeGVj R2V0UmFuZ2VUYWJsZVJlbGF0aW9uKCkuCisJICovCisJaWYgKHF1ZXJ5RGVzYy0+ZXN0YXRlID09 IE5VTEwpCisJeworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJaWYgKCFJc1BhcmFsbGVs V29ya2VyKCkpCisJCXsKKwkJCUxpc3RDZWxsICAgKmxjOworCisJCQlmb3JlYWNoKGxjLCBxdWVy eURlc2MtPnBsYW5uZWRzdG10LT5ydGFibGUpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gbGZpcnN0X25vZGUoUmFuZ2VUYmxFbnRyeSwgbGMpOworCisJCQkJaWYgKHJ0ZS0+cnRla2lu ZCA9PSBSVEVfUkVMQVRJT04gfHwKKwkJCQkJKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkg JiYgcnRlLT5yZWxpZCAhPSBJbnZhbGlkT2lkKSkKKwkJCQkJQXNzZXJ0KENoZWNrUmVsYXRpb25P aWRMb2NrZWRCeU1lKHJ0ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkJICBydGUtPnJlbGxvY2ttb2Rl LAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSkpOworCQkJfQorCQl9CisjZW5kaWYKKwkJRXhlY3V0b3JQ cmVwKHF1ZXJ5RGVzYywgQ3VycmVudFJlc291cmNlT3duZXIsIGVmbGFncyk7CisJfQorI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwllbHNlCisJeworCQkvKgorCQkgKiBBIHByZXAgRVN0YXRl IHdhcyBwcm92aWRlZCwgbWVhbmluZyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgc2hvdWxkCisJCSAq IGhhdmUgbG9ja2VkIGF0IGxlYXN0IHRoZSB1bnBydW5lZCByZWxhdGlvbnMuCisJCSAqLworCQlp ZiAoIUlzUGFyYWxsZWxXb3JrZXIoKSkKKwkJeworCQkJaW50CQkJcnRpbmRleCA9IC0xOworCisJ CQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIocXVlcnlEZXNjLT5lc3RhdGUtPmVz X3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJCQkJICBydGluZGV4KSkgPj0gMCkKKwkJCXsKKwkJ CQlSYW5nZVRibEVudHJ5ICpydGUgPSBleGVjX3J0X2ZldGNoKHJ0aW5kZXgsIHF1ZXJ5RGVzYy0+ ZXN0YXRlKTsKKworCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8CisJ CQkJCSAgIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmCisJCQkJCQlydGUtPnJlbGlk ICE9IEludmFsaWRPaWQpKTsKKwkJCQlBc3NlcnQoQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUo cnRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSAgcnRlLT5yZWxsb2NrbW9kZSwgdHJ1ZSkpOworCQkJ fQorCQl9CisJfQorI2VuZGlmCisKKwllc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKKwlBc3Nl cnQoZXN0YXRlKTsKIAogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRl LT5lc19xdWVyeV9jeHQpOwogCkBAIC0yNzQsNiArMzMzLDY0IEBAIHN0YW5kYXJkX0V4ZWN1dG9y U3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwogfQogCisvKgorICogRXhlY3V0b3JQcmVwCisgKgorICogQnVp bGQgdGhlIGluaXRpYWwgZXhlY3V0b3Igc3RhdGUgZm9yIHF1ZXJ5RGVzYyBiZWZvcmUgRXhlY3V0 b3JTdGFydCgpLgorICoKKyAqIFRoaXMgY3JlYXRlcyB0aGUgRVN0YXRlIGFuZCBwZXJmb3JtcyB0 aGUgc3Vic2V0IG9mIGV4ZWN1dG9yIHN0YXJ0dXAgdGhhdAorICogZG9lcyBub3QgcmVxdWlyZSBw bGFuLXRyZWUgaW5pdGlhbGl6YXRpb24sIGFsbG93aW5nIHRoYXQgd29yayB0byBiZSByZXVzZWQK KyAqIGJ5IGNhbGxlcnMgdGhhdCBuZWVkIGV4ZWN1dG9yIHN0YXRlIGJlZm9yZSBFeGVjdXRvclN0 YXJ0KCk6CisgKgorICogLSBpbml0aWFsaXplIHRoZSByYW5nZSB0YWJsZQorICogLSBwZXJmb3Jt IHBlcm1pc3Npb24gY2hlY2tzCisgKiAtIHBlcmZvcm0gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmlu ZworICoKKyAqIE9uIHN1Y2Nlc3MsIHF1ZXJ5RGVzYy0+ZXN0YXRlIGlzIHNldCBhbmQgY2FuIGxh dGVyIGJlIHJldXNlZCBieQorICogRXhlY3V0b3JTdGFydCgpIGluc3RlYWQgb2YgcmVidWlsZGlu ZyB0aGUgc2FtZSBzdGF0ZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBxdWVyeURl c2MtPnNuYXBzaG90IGlzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWN1dG9yUHJlcChR dWVyeURlc2MgKnF1ZXJ5RGVzYywgUmVzb3VyY2VPd25lciBvd25lciwgaW50IGVmbGFncykKK3sK KwlSZXNvdXJjZU93bmVyIG9sZG93bmVyOworCUVTdGF0ZQkgICAqZXN0YXRlOworCVBsYW5uZWRT dG10ICpwc3RtdDsKKworCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7CisKKwlpZiAocXVlcnlE ZXNjLT5vcGVyYXRpb24gPT0gQ01EX1VUSUxJVFkpCisJCXJldHVybjsKKworCUFzc2VydChBY3Rp dmVTbmFwc2hvdFNldCgpKTsKKwlBc3NlcnQoR2V0QWN0aXZlU25hcHNob3QoKSA9PSBxdWVyeURl c2MtPnNuYXBzaG90KTsKKwlBc3NlcnQocXVlcnlEZXNjLT5lc3RhdGUgPT0gTlVMTCk7CisKKwlw c3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisKKwllc3RhdGUgPSBDcmVhdGVFeGVjdXRv clN0YXRlKCk7CisJcXVlcnlEZXNjLT5lc3RhdGUgPSBlc3RhdGU7CisKKwllc3RhdGUtPmVzX3Bs YW5uZWRzdG10ID0gcHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0gcHN0bXQt PnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZvID0gcXVlcnlEZXNj LT5wYXJhbXM7CisJZXN0YXRlLT5lc19xdWVyeUVudiA9IHF1ZXJ5RGVzYy0+cXVlcnlFbnY7CisJ ZXN0YXRlLT5lc190b3BfZWZsYWdzID0gZWZsYWdzOworCisJRXhlY0NoZWNrUGVybWlzc2lvbnMo cHN0bXQtPnJ0YWJsZSwgcHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7CisKKwlFeGVjSW5pdFJhbmdl VGFibGUoZXN0YXRlLCBwc3RtdC0+cnRhYmxlLCBwc3RtdC0+cGVybUluZm9zLAorCQkJCQkgICBi bXNfY29weShwc3RtdC0+dW5wcnVuYWJsZVJlbGlkcykpOworCisJb2xkb3duZXIgPSBDdXJyZW50 UmVzb3VyY2VPd25lcjsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IG93bmVyOworCisJRXhlY0Rv SW5pdGlhbFBydW5pbmcoZXN0YXRlKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3du ZXI7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjdXRvclJ1bgogICoKQEAgLTg0OSwzNyArOTY2 LDE0IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCUNtZFR5 cGUJCW9wZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5u ZWRzdG10LT5wbGFuVHJlZTsKLQlMaXN0CSAgICpyYW5nZVRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0 YWJsZTsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOwogCVBsYW5TdGF0 ZSAgKnBsYW5zdGF0ZTsKIAlUdXBsZURlc2MJdHVwVHlwZTsKIAlMaXN0Q2VsbCAgICpsOwogCWlu dAkJCWk7CiAKLQkvKgotCSAqIERvIHBlcm1pc3Npb25zIGNoZWNrcwotCSAqLwotCUV4ZWNDaGVj a1Blcm1pc3Npb25zKHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsIHRydWUpOwot Ci0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlCi0JICovCi0J RXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSwgcGxhbm5lZHN0bXQtPnBlcm1J bmZvcywKLQkJCQkJICAgYm1zX2NvcHkocGxhbm5lZHN0bXQtPnVucHJ1bmFibGVSZWxpZHMpKTsK LQotCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKLQllc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfaW5mb3MgPSBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3M7Ci0KLQkvKgotCSAq IFBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIgcHJ1bmluZyB0byBpZGVudGlmeSB3aGljaCBjaGls ZCBzdWJwbGFucywKLQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGlsZHJlbiBvZiBwbGFuIG5v ZGVzIHRoYXQgY29udGFpbgotCSAqIFBhcnRpdGlvblBydW5lSW5mbyBzdWNoIGFzIEFwcGVuZCwg d2lsbCBub3QgYmUgZXhlY3V0ZWQuIFRoZSByZXN1bHRzLAotCSAqIHdoaWNoIGFyZSBiaXRtYXBz ZXRzIG9mIGluZGV4ZXMgb2YgdGhlIGNoaWxkIHN1YnBsYW5zIHRoYXQgd2lsbCBiZQotCSAqIGV4 ZWN1dGVkLCBhcmUgc2F2ZWQgaW4gZXNfcGFydF9wcnVuZV9yZXN1bHRzLiAgVGhlc2UgcmVzdWx0 cyBjb3JyZXNwb25kCi0JICogdG8gZWFjaCBQYXJ0aXRpb25QcnVuZUluZm8gZW50cnksIGFuZCB0 aGUgZXNfcGFydF9wcnVuZV9yZXN1bHRzIGxpc3QgaXMKLQkgKiBwYXJhbGxlbCB0byBlc19wYXJ0 X3BydW5lX2luZm9zLgotCSAqLwotCUV4ZWNEb0luaXRpYWxQcnVuaW5nKGVzdGF0ZSk7CisJLyog RXhlY3V0b3JQcmVwKCkgbXVzdCBoYXZlIGJlZW4gZG9uZS4gKi8KKwlBc3NlcnQocXVlcnlEZXNj LT5lc3RhdGUpOwogCiAJLyoKIAkgKiBOZXh0LCBidWlsZCB0aGUgRXhlY1Jvd01hcmsgYXJyYXkg ZnJvbSB0aGUgUGxhblJvd01hcmsocyksIGlmIGFueS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCmlu ZGV4IDM3YzI1NzZlNGJjLi5hZWE1ZWM4ZWEwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCkBA IC00NSw3ICs0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCWludAkJCXF1ZXJ5X2lu c3RyX29wdGlvbnM7CS8qIE9SIG9mIEluc3RydW1lbnRPcHRpb24gZmxhZ3MgZm9yCiAJCQkJCQkJ CQkJICogcXVlcnlfaW5zdHIgKi8KIAotCS8qIFRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IEV4ZWN1 dG9yU3RhcnQgKi8KKwkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBieSBFeGVjdXRvclN0YXJ0IG9y IEV4ZWN1dG9yUHJlcCAqLwogCVR1cGxlRGVzYwl0dXBEZXNjOwkJLyogZGVzY3JpcHRvciBmb3Ig cmVzdWx0IHR1cGxlcyAqLwogCUVTdGF0ZQkgICAqZXN0YXRlOwkJCS8qIGV4ZWN1dG9yJ3MgcXVl cnktd2lkZSBzdGF0ZSAqLwogCVBsYW5TdGF0ZSAgKnBsYW5zdGF0ZTsJCS8qIHRyZWUgb2YgcGVy LXBsYW4tbm9kZSBzdGF0ZSAqLwotLSAKMi40Ny4zCgo= --000000000000aa729e0652f107bd Content-Type: application/octet-stream; name="v13-0002-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Disposition: attachment; filename="v13-0002-Refactor-executor-s-initial-partition-pruning-se.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpqoop3w2 RnJvbSAyOWU1YWQxMTNmNjk3NGE5NGZiY2Y5ODRiNDNmYTNlZDg2ZjU3NjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTY6MDY6MzggKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MyAyLzRdIFJlZmFjdG9yIGV4ZWN1dG9yJ3MgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyBzZXR1 cAoKU2ltcGxpZnkgaGFuZGxpbmcgb2YgdW5wcnVuZWQgcmVsaWRzIGJ5IG1vdmluZyByZXNwb25z aWJpbGl0eQpmb3IgcmVjb3JkaW5nIHRoZW0gaW4gRVN0YXRlIGludG8gQ3JlYXRlUGFydGl0aW9u UHJ1bmVTdGF0ZSgpLAphdm9pZGluZyB0aGUgbmVlZCB0byBwYXNzIGFsbF9sZWFmcGFydF9ydGlz IGFzIGFuIG91dCBwYXJhbWV0ZXIuCgpBbHNvIG1vdmUgdGhlIHNldHRpbmcgb2YgZWN4dF9wYXJh bV9leGVjX3ZhbHMgZnJvbQpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpIHRvIEluaXRF eGVjUGFydGl0aW9uUHJ1bmVDb250ZXh0cygpLAp0byBhbGxvdyB0aGUgZm9ybWVyIHRvIGJlIGNh bGxlZCBiZWZvcmUgUEFSQU1fRVhFQyBwYXJhbWV0ZXJzIGFyZQpzZXQgdXAuICBBIGxhdGVyIGNv bW1pdCBuZWVkcyB0aGlzIHdoZW4gcnVubmluZyBwcnVuaW5nIHN0YXRlIHNldHVwCm91dHNpZGUg b2YgSW5pdFBsYW4oKS4KCk5vIGJlaGF2aW9yYWwgY2hhbmdlLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyB8IDcwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggZDk2ZDRmOTk0N2IuLjJhM2FmMDA2Zjc3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODUsOCArMTg1LDcgQEAg c3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlv biByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9z LCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFy dGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsK IHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKEVT dGF0ZSAqZXN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCi0JCQkJCQkJCQkJCQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcyk7CisJCQkJ CQkJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBJ bml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwK IAkJCQkJCQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJCSAgUGFydGl0aW9uRGVz YyBwYXJ0ZGVzYywKQEAgLTE5NzgsNyArMTk3Nyw3IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9z X3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKiBlc3RhdGUtPmVz X3BhcnRfcHJ1bmVfaW5mb3MuIEZvciBlYWNoIGVudHJ5LCBpdCBjcmVhdGVzIGEgUGFydGl0aW9u UHJ1bmVTdGF0ZQogICogYW5kIGFkZHMgaXQgdG8gZXNfcGFydF9wcnVuZV9zdGF0ZXMuICBFeGVj SW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCkgYWNjZXNzZXMKICAqIHRoZXNlIHN0YXRlcyB0aHJv dWdoIHRoZWlyIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBpbiBlc19wYXJ0X3BydW5lX3N0YXRlcyBh bmQKLSAqIGFzc2lnbiBlYWNoIHN0YXRlIHRvIHRoZSBwYXJlbnQgbm9kZSdzIFBsYW5TdGF0ZSwg ZnJvbSB3aGVyZSBpdCB3aWxsIGJlIHVzZWQKKyAqIGFzc2lnbnMgZWFjaCBzdGF0ZSB0byB0aGUg cGFyZW50IG5vZGUncyBQbGFuU3RhdGUsIGZyb20gd2hlcmUgaXQgd2lsbCBiZSB1c2VkCiAgKiBm b3IgImV4ZWMiIHBydW5pbmcuCiAgKgogICogSWYgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGV4aXN0 IGZvciBhIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSwgdGhpcyBmdW5jdGlvbgpAQCAtMTk5Niwy OSArMTk5NSwzMSBAQCBFeGVjRG9Jbml0aWFsUHJ1bmluZyhFU3RhdGUgKmVzdGF0ZSkKIHsKIAlM aXN0Q2VsbCAgICpsYzsKIAorCUFzc2VydChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9 PSBOVUxMKTsKIAlmb3JlYWNoKGxjLCBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MpCiAJewog CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBy dW5lSW5mbywgbGMpOwogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCQlCaXRt YXBzZXQgICp2YWxpZHN1YnBsYW5zID0gTlVMTDsKLQkJQml0bWFwc2V0ICAqYWxsX2xlYWZwYXJ0 X3J0aXMgPSBOVUxMOwogCQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5fcnRpcyA9IE5VTEw7CiAK IAkJLyogQ3JlYXRlIGFuZCBzYXZlIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlLiAqLwotCQlwcnVu ZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShlc3RhdGUsIHBydW5laW5mbywKLQkJ CQkJCQkJCQkJICAgJmFsbF9sZWFmcGFydF9ydGlzKTsKKwkJcHJ1bmVzdGF0ZSA9IENyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGUoZXN0YXRlLCBwcnVuZWluZm8pOwogCQllc3RhdGUtPmVzX3BhcnRf cHJ1bmVfc3RhdGVzID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfc3RhdGVzLAogCQkJ CQkJCQkJCQkgICBwcnVuZXN0YXRlKTsKIAogCQkvKgogCQkgKiBQZXJmb3JtIGluaXRpYWwgcHJ1 bmluZyBzdGVwcywgaWYgYW55LCBhbmQgc2F2ZSB0aGUgcmVzdWx0Ci0JCSAqIGJpdG1hcHNldCBv ciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuCisJCSAqIGJpdG1hcHNl dCBvciBOVUxMIGFzIGRlc2NyaWJlZCBpbiB0aGUgaGVhZGVyIGNvbW1lbnQuICBSVCBpbmRleGVz CisJCSAqIG9mIHN1cnZpdmluZyBwYXJ0aXRpb25zIHdvdWxkIGJlIGFkZGVkIHRvIHZhbGlkc3Vi cGxhbl9ydGlzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2hlbiBkb19pbml0aWFsX3BydW5lIGlz IGZhbHNlLAorCQkgKiBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCkgd291bGQgaGF2ZSBhbHJl YWR5IGFkZGVkIHRoZSBSVCBpbmRleGVzCisJCSAqIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgdG8g ZXNfdW5wcnVuZWRfcmVsaWRzIGRpcmVjdGx5LgogCQkgKi8KIAkJaWYgKHBydW5lc3RhdGUtPmRv X2luaXRpYWxfcHJ1bmUpCiAJCQl2YWxpZHN1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKHBydW5lc3RhdGUsIHRydWUsCiAJCQkJCQkJCQkJCQkJICZ2YWxpZHN1YnBsYW5fcnRpcyk7 Ci0JCWVsc2UKLQkJCXZhbGlkc3VicGxhbl9ydGlzID0gYWxsX2xlYWZwYXJ0X3J0aXM7CiAKIAkJ ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoZXN0YXRlLT5lc191 bnBydW5lZF9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJIHZhbGlkc3VicGxhbl9ydGlzKTsKQEAgLTIx MzYsMTQgKzIxMzcsMTIgQEAgRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3RhdGUuCiAgKgogICogSWYg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGFyZSB0byBiZSBza2lwcGVkIChlLmcuLCBkdXJpbmcgRVhQ TEFJTgotICogKEdFTkVSSUNfUExBTikpLCAqYWxsX2xlYWZwYXJ0X3J0aXMgd2lsbCBiZSBwb3B1 bGF0ZWQgd2l0aCB0aGUgUlQgaW5kZXhlcyBvZgotICogYWxsIGxlYWYgcGFydGl0aW9ucyB3aG9z ZSBzY2FubmluZyBzdWJub2RlIGlzIGluY2x1ZGVkIGluIHRoZSBwYXJlbnQgcGxhbgotICogbm9k ZSdzIGxpc3Qgb2YgY2hpbGQgcGxhbnMuIFRoZSBjYWxsZXIgbXVzdCBhZGQgdGhlc2UgUlQgaW5k ZXhlcyB0bwotICogZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMuCisgKiAoR0VORVJJQ19QTEFO KSksIHRoZSBSVCBpbmRleGVzIG9mIGFsbCBsZWFmIHBhcnRpdGlvbnMgd2hvc2Ugc2Nhbm5pbmcK KyAqIHN1Ym5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBsaXN0IG9m IGNoaWxkIHBsYW5zIGFyZQorICogYWRkZWQgdG8gZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMu CiAgKi8KIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICoKLUNyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAotCQkJ CQkJICBCaXRtYXBzZXQgKiphbGxfbGVhZnBhcnRfcnRpcykKK0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoRVN0YXRlICplc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewog CVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNo aWVzOwpAQCAtMjM3Nyw4ICsyMzc2LDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShFU3Rh dGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkJCQkJCQkJ ICAgcGluZm8tPmV4ZWNwYXJhbWlkcyk7CiAKIAkJCS8qCi0JCQkgKiBSZXR1cm4gYWxsIGxlYWYg cGFydGl0aW9uIGluZGV4ZXMgaWYgd2UncmUgc2tpcHBpbmcgcHJ1bmluZyBpbgotCQkJICogdGhl IEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KKwkJCSAqIEFkZCBhbGwgbGVhZiBwYXJ0aXRp b24gaW5kZXhlcyB0byBlc191bnBydW5lZF9yZWxpZHMgaWYgd2UncmUKKwkJCSAqIHNraXBwaW5n IHBydW5pbmcgaW4gdGhlIEVYUExBSU4gKEdFTkVSSUNfUExBTikgY2FzZS4KIAkJCSAqLwogCQkJ aWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgJiYgIXBydW5lc3RhdGUtPmRvX2luaXRp YWxfcHJ1bmUpCiAJCQl7CkBAIC0yMzkwLDkgKzIzODksMjggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShFU3RhdGUgKmVzdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJ CQkJCUluZGV4CQlydGluZGV4ID0gcHBydW5lLT5sZWFmcGFydF9ydGlfbWFwW3BhcnRfaW5kZXhd OwogCiAJCQkJCWlmIChydGluZGV4KQotCQkJCQkJKmFsbF9sZWFmcGFydF9ydGlzID0gYm1zX2Fk ZF9tZW1iZXIoKmFsbF9sZWFmcGFydF9ydGlzLAotCQkJCQkJCQkJCQkJCQkJcnRpbmRleCk7CisJ CQkJCQllc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIo ZXN0YXRlLT5lc191bnBydW5lZF9yZWxpZHMsIHJ0aW5kZXgpOworCQkJCX0KKwkJCX0KKwkJCWVs c2UgaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPT0gTklMKQorCQkJeworCQkJCS8q CisJCQkJICogQWxsIHBhcnRpdGlvbnMgYmV0dGVyIGJlIHByZXNlbnQgaW4gZXNfdW5wcnVuZWRf cmVsaWRzIHdoZW4KKwkJCQkgKiBub25lIGFyZSBpbml0aWFsbHkgcHJ1bmFibGUuCisJCQkJICov CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJCWludAkJCXBhcnRfaW5kZXggPSAtMTsK KworCQkJCXdoaWxlICgocGFydF9pbmRleCA9IGJtc19uZXh0X21lbWJlcihwcHJ1bmUtPnByZXNl bnRfcGFydHMsCisJCQkJCQkJCQkJCQkJIHBhcnRfaW5kZXgpKSA+PSAwKQorCQkJCXsKKwkJCQkJ SW5kZXgJCXJ0aW5kZXggPSBwcHJ1bmUtPmxlYWZwYXJ0X3J0aV9tYXBbcGFydF9pbmRleF07CisK KwkJCQkJaWYgKHJ0aW5kZXgpCisJCQkJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihydGluZGV4LCBl c3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlkcykpOwogCQkJCX0KKyNlbmRpZgogCQkJfQogCiAJCQlq Kys7CkBAIC0yNDkwLDkgKzI1MDgsMTAgQEAgSW5pdFBhcnRpdGlvblBydW5lQ29udGV4dChQYXJ0 aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKgkJSW5pdGlhbGl6ZSBleGVjIHBydW5pbmcg Y29udGV4dHMgZGVmZXJyZWQgYnkgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZSgpCiAgKgogICog VGhpcyBmdW5jdGlvbiBmaW5hbGl6ZXMgZXhlYyBwcnVuaW5nIHNldHVwIGZvciBhIFBhcnRpdGlv blBydW5lU3RhdGUgYnkKLSAqIGluaXRpYWxpemluZyBjb250ZXh0cyBmb3IgcHJ1bmluZyBzdGVw cyB0aGF0IHJlcXVpcmUgdGhlIHBhcmVudCBwbGFuJ3MKLSAqIFBsYW5TdGF0ZS4gSXQgaXRlcmF0 ZXMgb3ZlciBQYXJ0aXRpb25QcnVuaW5nRGF0YSBlbnRyaWVzIGFuZCBzZXRzIHVwIHRoZQotICog bmVjZXNzYXJ5IGV4ZWN1dGlvbiBjb250ZXh0cyBmb3IgcHJ1bmluZyBkdXJpbmcgcXVlcnkgZXhl Y3V0aW9uLgorICogaW5pdGlhbGl6aW5nIGNvbnRleHRzIGZvciBwcnVuaW5nIHN0ZXBzIHRoYXQg cmVxdWlyZSBQQVJBTV9FWEVDIHBhcmFtZXRlcnMKKyAqIGFuZCB0aGUgcGFyZW50IHBsYW4ncyBQ bGFuU3RhdGUuIEl0IGl0ZXJhdGVzIG92ZXIgUGFydGl0aW9uUHJ1bmluZ0RhdGEKKyAqIGVudHJp ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBleGVjdXRpb24gY29udGV4dHMgZm9yIHBydW5p bmcgZHVyaW5nCisgKiBxdWVyeSBleGVjdXRpb24uCiAgKgogICogQWxzbyBmaXggdGhlIG1hcHBp bmcgb2YgcGFydGl0aW9uIGluZGV4ZXMgdG8gc3VicGxhbiBpbmRleGVzIGNvbnRhaW5lZCBpbgog ICogcHJ1bmVzdGF0ZSBieSBjb25zaWRlcmluZyB0aGUgbmV3IGxpc3Qgb2Ygc3VicGxhbnMgdGhh dCBzdXJ2aXZlZCBpbml0aWFsCkBAIC0yNTIwLDkgKzI1MzksMTYgQEAgSW5pdEV4ZWNQYXJ0aXRp b25QcnVuZUNvbnRleHRzKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJYm9vbAkJ Zml4X3N1YnBsYW5fbWFwID0gZmFsc2U7CiAKIAlBc3NlcnQocHJ1bmVzdGF0ZS0+ZG9fZXhlY19w cnVuZSk7CisJQXNzZXJ0KHBydW5lc3RhdGUtPmVjb250ZXh0KTsKIAlBc3NlcnQocGFyZW50X3Bs YW4gIT0gTlVMTCk7CiAJZXN0YXRlID0gcGFyZW50X3BsYW4tPnN0YXRlOwogCisJLyoKKwkgKiBU aGVzZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoKSBpcworCSAqIGNhbGxlZC4KKwkgKi8KKwlwcnVuZXN0YXRlLT5lY29udGV4dC0+ZWN4 dF9wYXJhbV9leGVjX3ZhbHMgPSBlc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFsczsKKwogCS8qCiAJ ICogTm8gbmVlZCB0byBmaXggc3VicGxhbnMgbWFwcyBpZiBpbml0aWFsIHBydW5pbmcgZGlkbid0 IGVsaW1pbmF0ZSBhbnkKIAkgKiBzdWJwbGFucy4KLS0gCjIuNDcuMwoK --000000000000aa729e0652f107bd Content-Type: application/octet-stream; name="v13-0001-Move-execution-lock-acquisition-out-of-GetCached.patch" Content-Disposition: attachment; filename="v13-0001-Move-execution-lock-acquisition-out-of-GetCached.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpqoop413 RnJvbSBhMzIxNDU4MGYyY2UxOTgzYTExMWFmMDdjY2IwOTJiYTAzYzgxMmM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgNCBBcHIgMjAyNiAxODozODozNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEz IDEvNF0gTW92ZSBleGVjdXRpb24gbG9jayBhY3F1aXNpdGlvbiBvdXQgb2YKIEdldENhY2hlZFBs YW4oKQoKR2V0Q2FjaGVkUGxhbigpIHByZXZpb3VzbHkgYWNxdWlyZWQgZXhlY3V0aW9uIGxvY2tz IG9uIGFsbCBwbGFuCnJlbGF0aW9ucyBhcyBwYXJ0IG9mIGNhY2hlZCBwbGFuIHZhbGlkYXRpb24u ICBNb3ZlIHRoaXMKcmVzcG9uc2liaWxpdHkgdG8gY2FsbGVycywgbWFraW5nIEdldENhY2hlZFBs YW4oKSByZXR1cm4gYSB2YWxpZApwbGFuIHdpdGhvdXQgaG9sZGluZyBleGVjdXRpb24gbG9ja3Mu CgpBZGQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBhcyB0aGUgY2FsbGVyLWZhY2luZyBmdW5jdGlv bjogaXQgbG9ja3MKYWxsIHJlbGF0aW9ucyBpbiB0aGUgcGxhbiwgY2hlY2tzIHRoYXQgdGhlIHBs YW4gaXMgc3RpbGwgdmFsaWQKYWZ0ZXJ3YXJkLCBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCB3YXMg aW52YWxpZGF0ZWQgc28gdGhlIGNhbGxlcgpjYW4gcmV0cnkgd2l0aCBhIGZyZXNoIHBsYW4uCgpG b3IgcG9ydGFsLWJhY2tlZCBjYWxsZXJzLCBhZGQgUG9ydGFsTG9ja0NhY2hlZFBsYW4oKSBpbiBw cXVlcnkuYwp3aGljaCB3cmFwcyB0aGUgbG9jay1jaGVjay1yZXRyeSBsb29wIGFuZCBoYW5kbGVz IHRoZSBjYXNlIHdoZXJlCnJlcGxhbm5pbmcgY2hhbmdlcyB0aGUgcG9ydGFsIHN0cmF0ZWd5LiAg U3RvcmUgdGhlIENhY2hlZFBsYW5Tb3VyY2UKcG9pbnRlciBpbiBQb3J0YWxEYXRhIHNvIHJldHJ5 IGNhbiBjYWxsIEdldENhY2hlZFBsYW4oKSB3aXRob3V0CnRoZSBjYWxsZXIgdGhyZWFkaW5nIGl0 IHRocm91Z2guCgpBZGp1c3QgYWxsIG5vbi1wb3J0YWwgR2V0Q2FjaGVkUGxhbigpIGNhbGxlcnMg KFNQSSwgRVhQTEFJTgpFWEVDVVRFLCBTUUwgZnVuY3Rpb25zKSB0byBjYWxsIEFjcXVpcmVFeGVj dXRvckxvY2tzKCkgZXhwbGljaXRseQphZnRlciBmZXRjaGluZyB0aGUgcGxhbi4KCk5vIGJlaGF2 aW9yYWwgY2hhbmdlLiAgVGhpcyBzZXBhcmF0ZXMgcGxhbiByZXRyaWV2YWwgZnJvbSBleGVjdXRp b24Kc2V0dXAsIGFsbG93aW5nIGEgbGF0ZXIgY29tbWl0IHRvIHN1YnN0aXR1dGUgcHJ1bmluZy1h d2FyZSBsb2NraW5nCmZvciBlbGlnaWJsZSBwbGFucy4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9wb3J0YWxjbWRzLmMgICB8ICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAg ICAgIHwgMTQgKysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyAgICB8IDE0 ICsrKystLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAgfCAyMiArKysrKysr LS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgIHwgIDIgKwogc3JjL2JhY2tl bmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAgfCA3MCArKysrKysrKysrKysrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgfCA0NCArKysrKysrKysr KysrLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMgIHwgIDcgKysrCiBz cmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0 aWxzL3BvcnRhbC5oICAgICAgICAgIHwgIDMgKysKIDEwIGZpbGVzIGNoYW5nZWQsIDE1NyBpbnNl cnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKaW5k ZXggMDFlZmFjMzMxOWUuLmNmNWRlZWM0OTQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j CkBAIC0xMTgsNiArMTE4LDcgQEAgUGVyZm9ybUN1cnNvck9wZW4oUGFyc2VTdGF0ZSAqcHN0YXRl LCBEZWNsYXJlQ3Vyc29yU3RtdCAqY3N0bXQsIFBhcmFtTGlzdEluZm8gcGEKIAkJCQkJICBxdWVy eVN0cmluZywKIAkJCQkJICBDTURUQUdfU0VMRUNULAkvKiBjdXJzb3IncyBxdWVyeSBpcyBhbHdh eXMgYSBTRUxFQ1QgKi8KIAkJCQkJICBsaXN0X21ha2UxKHBsYW4pLAorCQkJCQkgIE5VTEwsCiAJ CQkJCSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwppbmRleCA4 NzZhYWQyMTAwYS4uMDNkN2E5OGZjNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTIwNyw2 ICsyMDcsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHF1ZXJ5 X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBw bGFuX2xpc3QsCisJCQkJCSAgZW50cnktPnBsYW5zb3VyY2UsCiAJCQkJCSAgY3BsYW4pOwogCiAJ LyoKQEAgLTYzMiw4ICs2MzMsMTcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAq ZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJfQogCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGFjcXVpcmUgYSB0cmFuc2llbnQgcmVmY291bnQgKi8KLQlj cGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCi0JCQkJCQkg IEN1cnJlbnRSZXNvdXJjZU93bmVyLCBwc3RhdGUtPnBfcXVlcnlFbnYpOworCWZvciAoOzspCisJ eworCQljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCisJ CQkJCQkJICBDdXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkgIHBzdGF0ZS0+cF9xdWVyeUVu dik7CisJCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisKKwkJaWYgKEFjcXVpcmVFeGVj dXRvckxvY2tzKGNwbGFuKSkKKwkJCWJyZWFrOworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwg Q3VycmVudFJlc291cmNlT3duZXIpOworCX0KIAogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQocGxh bmR1cmF0aW9uKTsKIAlJTlNUUl9USU1FX1NVQlRSQUNUKHBsYW5kdXJhdGlvbiwgcGxhbnN0YXJ0 KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggODgxMDkzNDg4MTcuLjJhZmI4MTRhNDM1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpAQCAtNjU0LDYgKzY1NCw3IEBAIHN0YXRpYyBi b29sCiBpbml0X2V4ZWN1dGlvbl9zdGF0ZShTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIHsK IAlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlOworCUNhY2hlZFBsYW4gKmNwbGFuOwogCWV4 ZWN1dGlvbl9zdGF0ZSAqcHJldmVzID0gTlVMTDsKIAlleGVjdXRpb25fc3RhdGUgKmxhc3R0YWdl cyA9IE5VTEw7CiAJaW50CQkJbnN0bXRzOwpAQCAtNjk2LDEwICs2OTcsMTUgQEAgaW5pdF9leGVj dXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJICogQ3VycmVudFJlc291 cmNlT3duZXIgd2lsbCBiZSB0aGUgc2FtZSB3aGVuIFNodXRkb3duU1FMRnVuY3Rpb24gcnVucy4p CiAJICovCiAJZmNhY2hlLT5jb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKLQlmY2FjaGUt PmNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLAotCQkJCQkJCQkgIGZjYWNoZS0+cGFy YW1MSSwKLQkJCQkJCQkJICBmY2FjaGUtPmNvd25lciwKLQkJCQkJCQkJICBOVUxMKTsKKwlmb3Ig KDs7KQorCXsKKwkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIGZjYWNoZS0+cGFy YW1MSSwKKwkJCQkJCQkgIGZjYWNoZS0+Y293bmVyLCBOVUxMKTsKKwkJaWYgKEFjcXVpcmVFeGVj dXRvckxvY2tzKGNwbGFuKSkKKwkJCWJyZWFrOworCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwg ZmNhY2hlLT5jb3duZXIpOworCX0KKwlmY2FjaGUtPmNwbGFuID0gY3BsYW47CiAKIAkvKgogCSAq IElmIG5lY2Vzc2FyeSwgbWFrZSBlc2FycmF5W10gYmlnZ2VyIHRvIGhvbGQgdGhlIG5lZWRlZCBz dGF0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggNTJmM2IxMTMwMWMuLjI2OGNkMTBiZGU4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYwpAQCAtMTY4Niw2ICsxNjg2LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNv bnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJ CQkJCSAgcGxhbnNvdXJjZS0+Y29tbWFuZFRhZywKIAkJCQkJICBzdG10X2xpc3QsCisJCQkJCSAg cGxhbnNvdXJjZSwKIAkJCQkJICBjcGxhbik7CiAKIAkvKgpAQCAtMjEwNiw2ICsyMTA3LDE2IEBA IFNQSV9wbGFuX2dldF9jYWNoZWRfcGxhbihTUElQbGFuUHRyIHBsYW4pCiAJCQkJCQkgIF9TUElf Y3VycmVudC0+cXVlcnlFbnYpOwogCUFzc2VydChjcGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7 CiAKKwlpZiAoIUFjcXVpcmVFeGVjdXRvckxvY2tzKGNwbGFuKSkKKwl7CisJCS8qIFBsYW4gaW52 YWxpZGF0ZWQgZHVyaW5nIGxvY2tpbmc7IGdldCBhIGZyZXNoIG9uZS4gKi8KKwkJUmVsZWFzZUNh Y2hlZFBsYW4oY3BsYW4sCisJCQkJCQkgIHBsYW4tPnNhdmVkID8gQ3VycmVudFJlc291cmNlT3du ZXIgOiBOVUxMKTsKKwkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIE5VTEwsCisJ CQkJCQkJICBwbGFuLT5zYXZlZCA/IEN1cnJlbnRSZXNvdXJjZU93bmVyIDogTlVMTCwKKwkJCQkJ CQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOworCX0KKwogCS8qIFBvcCB0aGUgZXJyb3IgY29u dGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcGllcnJjb250ZXh0LnByZXZp b3VzOwogCkBAIC0yNTc0LDkgKzI1ODUsMTQgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0 ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJICogUmVwbGFuIGlm IG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50LiAgSWYgaXQncyBhIHNhdmVkCiAJ CSAqIHBsYW4sIHRoZSByZWZjb3VudCBtdXN0IGJlIGJhY2tlZCBieSB0aGUgcGxhbl9vd25lci4K IAkJICovCi0JCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJh bXMsCi0JCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKLQorCQlm b3IgKDs7KQorCQl7CisJCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9u cy0+cGFyYW1zLAorCQkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYp OworCQkJaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKGNwbGFuKSkKKwkJCQlicmVhazsKKwkJCVJl bGVhc2VDYWNoZWRQbGFuKGNwbGFuLCBwbGFuX293bmVyKTsKKwkJfQogCQlzdG10X2xpc3QgPSBj cGxhbi0+c3RtdF9saXN0OwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggZGJlZjczNGE5M2Yu LjI5MjlmMTU4MzM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMjQzLDYgKzEyNDMsNyBAQCBleGVj X3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCQkJCQkgIHF1ZXJ5X3N0 cmluZywKIAkJCQkJCSAgY29tbWFuZFRhZywKIAkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJ CSAgTlVMTCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoKQEAgLTIwNDIsNiArMjA0Myw3IEBAIGV4 ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9z dHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0 LAorCQkJCQkgIHBzcmMsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogUG9ydGFsIGlzIGRlZmluZWQs IHNldCB0aGUgcGxhbiBJRCBiYXNlZCBvbiBpdHMgY29udGVudHMuICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRl eCBlZTczMTAwMDgyMC4uNDY5OWI1M2NhYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3Av cHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwpAQCAtNTksNiArNTksNyBA QCBzdGF0aWMgdWludDY0IERvUG9ydGFsUnVuRmV0Y2goUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkg ICBsb25nIGNvdW50LAogCQkJCQkJCSAgIERlc3RSZWNlaXZlciAqZGVzdCk7CiBzdGF0aWMgdm9p ZCBEb1BvcnRhbFJld2luZChQb3J0YWwgcG9ydGFsKTsKK3N0YXRpYyBib29sIFBvcnRhbExvY2tD YWNoZWRQbGFuKFBvcnRhbCBwb3J0YWwpOwogCiAKIC8qCkBAIC00NjMsNiArNDY0LDggQEAgUG9y dGFsU3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCSAqLwogCQlw b3J0YWwtPnN0cmF0ZWd5ID0gQ2hvb3NlUG9ydGFsU3RyYXRlZ3kocG9ydGFsLT5zdG10cyk7CiAK K3Jlc3RhcnQ6CisKIAkJLyoKIAkJICogRmlyZSBoZXIgdXAgYWNjb3JkaW5nIHRvIHRoZSBzdHJh dGVneQogCQkgKi8KQEAgLTQ4NSw2ICs0ODgsMjEgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRh bCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJICogbm9uLWRlZmF1bHQgbmVzdGluZyBsZXZl bCBmb3IgdGhlIHNuYXBzaG90LgogCQkJCSAqLwogCisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgcG9y dGFsIGlzIGJhY2tlZCBieSBhIGNhY2hlZCBwbGFuLCBhY3F1aXJlIGV4ZWN1dGlvbgorCQkJCSAq IGxvY2tzIHZpYSBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpLiAgSWYgdGhlIHBsYW4gaXMKKwkJCQkg KiBpbnZhbGlkYXRlZCBkdXJpbmcgbG9ja2luZywgaXQgcmVwbGFucyBhbmQgbWF5IGNoYW5nZSB0 aGUKKwkJCQkgKiBwb3J0YWwgc3RyYXRlZ3ksIHJlcXVpcmluZyB1cyB0byByZXN0YXJ0IFBvcnRh bFN0YXJ0KCkuCisJCQkJICovCisJCQkJaWYgKHBvcnRhbC0+Y3BsYW4pCisJCQkJeworCQkJCQlp ZiAoUG9ydGFsTG9ja0NhY2hlZFBsYW4ocG9ydGFsKSkKKwkJCQkJeworCQkJCQkJUG9wQWN0aXZl U25hcHNob3QoKTsKKwkJCQkJCWdvdG8gcmVzdGFydDsKKwkJCQkJfQorCQkJCX0KKwogCQkJCS8q CiAJCQkJICogQ3JlYXRlIFF1ZXJ5RGVzYyBpbiBwb3J0YWwncyBjb250ZXh0OyBmb3IgdGhlIG1v bWVudCwgc2V0CiAJCQkJICogdGhlIGRlc3RpbmF0aW9uIHRvIERlc3ROb25lLgpAQCAtNTM1LDYg KzU1MywxMSBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFt cywKIAogCQkJY2FzZSBQT1JUQUxfT05FX1JFVFVSTklORzoKIAkJCWNhc2UgUE9SVEFMX09ORV9N T0RfV0lUSDoKKwkJCQlpZiAocG9ydGFsLT5jcGxhbikKKwkJCQl7CisJCQkJCWlmIChQb3J0YWxM b2NrQ2FjaGVkUGxhbihwb3J0YWwpKQorCQkJCQkJZ290byByZXN0YXJ0OworCQkJCX0KIAogCQkJ CS8qCiAJCQkJICogV2UgZG9uJ3Qgc3RhcnQgdGhlIGV4ZWN1dG9yIHVudGlsIHdlIGFyZSB0b2xk IHRvIHJ1biB0aGUKQEAgLTU3OCw3ICs2MDEsMjAgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRh bCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUE9SVEFMX01V TFRJX1FVRVJZOgotCQkJCS8qIE5lZWQgZG8gbm90aGluZyBub3cgKi8KKworCQkJCS8qCisJCQkJ ICogR2V0Q2FjaGVkUGxhbigpIG5vIGxvbmdlciBhY3F1aXJlcyBleGVjdXRpb24gbG9ja3MsIHNv IHdlCisJCQkJICogbXVzdCBkbyBpdCBoZXJlLiAgTXVsdGktc3RhdGVtZW50IHBsYW5zIGFsd2F5 cyB1c2UKKwkJCQkgKiBjb25zZXJ2YXRpdmUgbG9ja2luZyAoYWxsIHBhcnRpdGlvbnMgbG9ja2Vk KTsgcHJ1bmluZy1hd2FyZQorCQkJCSAqIGxvY2tpbmcgaXMgbm90IGZlYXNpYmxlIGJlY2F1c2Ug UG9ydGFsUnVuTXVsdGkoKSBleGVjdXRlcworCQkJCSAqIHN0YXRlbWVudHMgc2VxdWVudGlhbGx5 IHdpdGggQ0NJIGJldHdlZW4gdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAocG9ydGFsLT5jcGxhbikK KwkJCQl7CisJCQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxhbihwb3J0YWwpKQorCQkJCQkJZ290 byByZXN0YXJ0OworCQkJCX0KKwogCQkJCXBvcnRhbC0+dHVwRGVzYyA9IE5VTEw7CiAJCQkJYnJl YWs7CiAJCX0KQEAgLTE3ODYsMyArMTgyMiwzNSBAQCBFbnN1cmVQb3J0YWxTbmFwc2hvdEV4aXN0 cyh2b2lkKQogCS8qIFB1c2hBY3RpdmVTbmFwc2hvdFdpdGhMZXZlbCBtaWdodCBoYXZlIGNvcGll ZCB0aGUgc25hcHNob3QgKi8KIAlwb3J0YWwtPnBvcnRhbFNuYXBzaG90ID0gR2V0QWN0aXZlU25h cHNob3QoKTsKIH0KKworLyoKKyAqIFBvcnRhbExvY2tDYWNoZWRQbGFuCisgKgkJQWNxdWlyZSBl eGVjdXRpb24gbG9ja3MgZm9yIGEgY2FjaGVkLXBsYW4tYmFja2VkIHBvcnRhbCwKKyAqCQlyZXRy eWluZyB3aXRoIGEgZnJlc2ggcGxhbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgaW52YWxpZGF0ZWQu CisgKgorICogUmV0dXJucyB0cnVlIGlmIHJlcGxhbm5pbmcgY2hhbmdlZCBwb3J0YWwtPnN0cmF0 ZWd5LCBtZWFuaW5nIHRoZQorICogY2FsbGVyIG11c3QgcmVkaXNwYXRjaC4gIFJldHVybnMgZmFs c2Ugb25jZSBsb2NrcyBhcmUgaGVsZC4KKyAqLworc3RhdGljIGJvb2wKK1BvcnRhbExvY2tDYWNo ZWRQbGFuKFBvcnRhbCBwb3J0YWwpCit7CisJUG9ydGFsU3RyYXRlZ3kgc3RhcnRfc3RyYXRlZ3kg PSBwb3J0YWwtPnN0cmF0ZWd5OworCisJaWYgKEFjcXVpcmVFeGVjdXRvckxvY2tzKHBvcnRhbC0+ Y3BsYW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBSZXBsYW4uICBMb2NrcyB3aWxsIGJlIHRh a2VuIGZyZXNobHkuICovCisJUmVsZWFzZUNhY2hlZFBsYW4ocG9ydGFsLT5jcGxhbiwgcG9ydGFs LT5yZXNvd25lcik7CisJcG9ydGFsLT5jcGxhbiA9IE5VTEw7CisJcG9ydGFsLT5zdG10cyA9IE5J TDsKKwlwb3J0YWwtPmNwbGFuID0gR2V0Q2FjaGVkUGxhbihwb3J0YWwtPnBsYW5zb3VyY2UsCisJ CQkJCQkJCSAgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCisJCQkJCQkJCSAgcG9ydGFsLT5yZXNvd25l ciwKKwkJCQkJCQkJICBwb3J0YWwtPnF1ZXJ5RW52KTsKKwlwb3J0YWwtPnN0bXRzID0gcG9ydGFs LT5jcGxhbi0+c3RtdF9saXN0OworCXBvcnRhbC0+c3RyYXRlZ3kgPSBDaG9vc2VQb3J0YWxTdHJh dGVneShwb3J0YWwtPnN0bXRzKTsKKwlpZiAocG9ydGFsLT5zdHJhdGVneSAhPSBzdGFydF9zdHJh dGVneSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCmluZGV4IDY5OGU3YzFhYTIyLi5mN2ZlMzY2ODU5YyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgYm9vbCBj aG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkg ICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5f Y29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVl cnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRpYyB2b2lkIEFj cXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKK3N0YXRp YyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzSW50KExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1 aXJlKTsKIHN0YXRpYyB2b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBi b29sIGFjcXVpcmUpOwogc3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNl dHJlZSwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpu b2RlLCBib29sICphY3F1aXJlKTsKQEAgLTk0NSw4ICs5NDUsOSBAQCBSZXZhbGlkYXRlQ2FjaGVk UXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqIENhbGxlciBtdXN0IGhhdmUg YWxyZWFkeSBjYWxsZWQgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5IHRvIHZlcmlmeSB0aGF0IHRoZQog ICogcXVlcnl0cmVlIGlzIHVwIHRvIGRhdGUuCiAgKgotICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3 ZSBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgotICogKFdl IG11c3QgZG8gdGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24t ZnJlZS4pCisgKiBPbiBhICJ0cnVlIiByZXR1cm4sIHRoZSBnZW5lcmljIHBsYW4gbWF5IGJlIHJl dXNlZCBhcyBhIHZhbGlkIGNhY2hlZAorICogcGxhbi4gIEFueSBleGVjdXRpb24tdGltZSBzZXR1 cCwgaW5jbHVkaW5nIGxvY2sgYWNxdWlzaXRpb24sIGlzIHRoZQorICogY2FsbGVyJ3MgcmVzcG9u c2liaWxpdHkuCiAgKi8KIHN0YXRpYyBib29sCiBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSkKQEAgLTk4Myw4ICs5ODQsNiBAQCBDaGVja0NhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJICovCiAJCUFzc2VydChwbGFuLT5yZWZjb3Vu dCA+IDApOwogCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgdHJ1ZSk7 Ci0KIAkJLyoKIAkJICogSWYgcGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJh bnNhY3Rpb25YbWluIGhhcwogCQkgKiBhZHZhbmNlZCwgYW5kIGlmIHNvIGludmFsaWRhdGUgaXQu CkBAIC0xMDAzLDkgKzEwMDIsNiBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSkKIAkJCS8qIFN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgbG9ja2VkIHRo ZSBxdWVyeS4gKi8KIAkJCXJldHVybiB0cnVlOwogCQl9Ci0KLQkJLyogT29wcywgdGhlIHJhY2Ug Y2FzZSBoYXBwZW5lZC4gIFJlbGVhc2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1 dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBmYWxzZSk7CiAJfQogCiAJLyoKQEAgLTEyODIsOCAr MTI3OCwxMSBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVk ZV9wbGFubmVyKQogICogcGxhbiBvciBhIGN1c3RvbSBwbGFuIGZvciB0aGUgZ2l2ZW4gcGFyYW1l dGVyczogdGhlIGNhbGxlciBkb2VzIG5vdCBrbm93CiAgKiB3aGljaCBpdCB3aWxsIGdldC4KICAq Ci0gKiBPbiByZXR1cm4sIHRoZSBwbGFuIGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHN1ZmZpY2llbnQg bG9ja3MgdG8gYmVnaW4KLSAqIGV4ZWN1dGlvbi4KKyAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMg dmFsaWQgYnV0IG5vIGV4ZWN1dGlvbiBsb2NrcyBhcmUgaGVsZC4KKyAqIFRoZSBjYWxsZXIgbXVz dCBjYWxsIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgYmVmb3JlIGV4ZWN1dGluZy4KKyAqIEZvciBm cmVzaGx5IGJ1aWx0IHBsYW5zIChjdXN0b20gb3IgbmV3IGdlbmVyaWMpLCB0aGUgcGxhbm5lcgor ICogYWxyZWFkeSBob2xkcyB0aGUgbmVlZGVkIGxvY2tzLCBzbyBBY3F1aXJlRXhlY3V0b3JMb2Nr cygpIGlzCisgKiByZWR1bmRhbnQgYnV0IGhhcm1sZXNzLgogICoKICAqIE9uIHJldHVybiwgdGhl IHJlZmNvdW50IG9mIHRoZSBwbGFuIGhhcyBiZWVuIGluY3JlbWVudGVkOyBhIGxhdGVyCiAgKiBS ZWxlYXNlQ2FjaGVkUGxhbigpIGNhbGwgaXMgZXhwZWN0ZWQuICBJZiAib3duZXIiIGlzIG5vdCBO VUxMIHRoZW4KQEAgLTE5MDYsOSArMTkwNSwxMSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChM aXN0ICpzdG10cykKIC8qCiAgKiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBu ZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZCBwbGFuOwogICogb3IgcmVsZWFzZSB0aGVt IGlmIGFjcXVpcmUgaXMgZmFsc2UuCisgKgorICogVGhpcyBsb2NrcyBhbGwgcmVsYXRpb25zIGlu IGEgZ2l2ZW4gUGxhbm5lZFN0bXQncyByYW5nZSB0YWJsZS4KICAqLwogc3RhdGljIHZvaWQKLUFj cXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQorQWNxdWly ZUV4ZWN1dG9yTG9ja3NJbnQoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiB7CiAJTGlz dENlbGwgICAqbGMxOwogCkBAIC0xOTU1LDYgKzE5NTYsMjcgQEAgQWNxdWlyZUV4ZWN1dG9yTG9j a3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJfQogfQogCisvKgorICogQWNxdWly ZUV4ZWN1dG9yTG9ja3MKKyAqCQlBY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbiBhbGwgcmVsYXRp b25zIGluIGEgY2FjaGVkIHBsYW4uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwbGFuIGlz IHN0aWxsIHZhbGlkIGFmdGVyIGxvY2tpbmcuICBSZXR1cm5zCisgKiBmYWxzZSBpZiB0aGUgcGxh biB3YXMgaW52YWxpZGF0ZWQgd2hpbGUgbG9ja3Mgd2VyZSBiZWluZyBhY3F1aXJlZCwKKyAqIGlu IHdoaWNoIGNhc2UgdGhlIGxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBhbmQgdGhlIGNhbGxlciBz aG91bGQKKyAqIGRpc2NhcmQgdGhpcyBwbGFuIGFuZCByZXRyeSB3aXRoIGEgZnJlc2ggb25lIGZy b20gR2V0Q2FjaGVkUGxhbigpLgorICovCitib29sCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhDYWNo ZWRQbGFuICpjcGxhbikKK3sKKwlBY3F1aXJlRXhlY3V0b3JMb2Nrc0ludChjcGxhbi0+c3RtdF9s aXN0LCB0cnVlKTsKKwlpZiAoIWNwbGFuLT5pc192YWxpZCkKKwl7CisJCUFjcXVpcmVFeGVjdXRv ckxvY2tzSW50KGNwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEFjcXVpcmVQbGFubmVyTG9ja3M6IGFjcXVpcmUg bG9ja3MgbmVlZGVkIGZvciBwbGFubmluZyBvZiBhIHF1ZXJ5dHJlZSBsaXN0OwogICogb3IgcmVs ZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9tbWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0u YwppbmRleCA0OTNmOWIwZWUxOS4uNjEzZjNiZTMwYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0 YWxtZW0uYwpAQCAtMjcyLDYgKzI3MiwxMCBAQCBDcmVhdGVOZXdQb3J0YWwodm9pZCkKICAqIHRo ZSBwYXNzZWQgcGxhbiB0cmVlcyBoYXZlIGFkZXF1YXRlIGxpZmV0aW1lLiAgVHlwaWNhbGx5IHRo aXMgaXMgZG9uZSBieQogICogY29weWluZyB0aGVtIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQu CiAgKgorICogSWYgcGxhbnNvdXJjZSBpcyBwcm92aWRlZCwgaXQgaXMgdGhlIENhY2hlZFBsYW5T b3VyY2UgdGhhdCBwcm9kdWNlZAorICogY3BsYW4uICBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpIHVz ZXMgaXQgdG8gZmV0Y2ggYSBmcmVzaCBwbGFuIGlmIHRoZQorICogY3VycmVudCBvbmUgaXMgaW52 YWxpZGF0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBsb2NrIGFjcXVpc2l0aW9uLgorICoKICAqIFRoZSBj YWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkIHBy ZXBTdG10TmFtZQogICogKGlmIG5vdCBOVUxMKSBhbmQgc291cmNlVGV4dCBoYXZlIGFkZXF1YXRl IGxpZmV0aW1lLgogICoKQEAgLTI4Niw2ICsyOTAsNyBAQCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0 YWwgcG9ydGFsLAogCQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkgIENvbW1hbmRU YWcgY29tbWFuZFRhZywKIAkJCQkgIExpc3QgKnN0bXRzLAorCQkJCSAgQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSwKIAkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKQogewogCUFzc2VydChQb3J0 YWxJc1ZhbGlkKHBvcnRhbCkpOwpAQCAtMjk5LDYgKzMwNCw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5 KFBvcnRhbCBwb3J0YWwsCiAJcG9ydGFsLT5jb21tYW5kVGFnID0gY29tbWFuZFRhZzsKIAlTZXRR dWVyeUNvbXBsZXRpb24oJnBvcnRhbC0+cWMsIGNvbW1hbmRUYWcsIDApOwogCXBvcnRhbC0+c3Rt dHMgPSBzdG10czsKKwlwb3J0YWwtPnBsYW5zb3VyY2UgPSBwbGFuc291cmNlOwogCXBvcnRhbC0+ Y3BsYW4gPSBjcGxhbjsKIAlwb3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQpAQCAt NTE3LDYgKzUyMyw3IEBAIFBvcnRhbERyb3AoUG9ydGFsIHBvcnRhbCwgYm9vbCBpc1RvcENvbW1p dCkKIAogCS8qIGRyb3AgY2FjaGVkIHBsYW4gcmVmZXJlbmNlLCBpZiBhbnkgKi8KIAlQb3J0YWxS ZWxlYXNlQ2FjaGVkUGxhbihwb3J0YWwpOworCXBvcnRhbC0+cGxhbnNvdXJjZSA9IE5VTEw7CiAK IAkvKgogCSAqIElmIHBvcnRhbCBoYXMgYSBzbmFwc2hvdCBwcm90ZWN0aW5nIGl0cyBkYXRhLCBy ZWxlYXNlIHRoYXQuICBUaGlzIG5lZWRzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmluZGV4IDdhNGE4NWM4 MDM4Li5lMGZjNDAzZTcxNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hl LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTI0MSw2ICsyNDEsNyBA QCBleHRlcm4gQ2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCQkJCQkJIFJl c291cmNlT3duZXIgb3duZXIsCiAJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7 CitleHRlcm4gYm9vbCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhDYWNoZWRQbGFuICpjcGxhbik7CiBl eHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBSZXNvdXJjZU93 bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFsbG93c1NpbXBsZVZhbGlkaXR5 Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKaW5kZXggYTdi ZWRiMTJjMTguLjNhZjUzNTM2MmNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0 YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTM3LDYgKzEzNyw4IEBA IHR5cGVkZWYgc3RydWN0IFBvcnRhbERhdGEKIAlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CQkvKiBj b21tYW5kIHRhZyBmb3Igb3JpZ2luYWwgcXVlcnkgKi8KIAlRdWVyeUNvbXBsZXRpb24gcWM7CQkJ LyogY29tbWFuZCBjb21wbGV0aW9uIGRhdGEgZm9yIGV4ZWN1dGVkIHF1ZXJ5ICovCiAJTGlzdAkg ICAqc3RtdHM7CQkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KKwlDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlOwkvKiBDYWNoZWRQbGFuU291cmNlLCBmb3IgcmVwbGFubmluZyBvbgorCQkJ CQkJCQkJICogaW52YWxpZGF0aW9uICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyogQ2FjaGVk UGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBh cmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KQEAgLTI0MCw2ICsyNDIsNyBAQCBl eHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAogCQkJCQkJCSAgY29u c3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJ CQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJCSAgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9y dGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVh dGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7Ci0tIAoyLjQ3LjMKCg== --000000000000aa729e0652f107bd Content-Type: application/octet-stream; name="v13-0004-Use-pruning-aware-locking-for-single-statement-c.patch" Content-Disposition: attachment; filename="v13-0004-Use-pruning-aware-locking-for-single-statement-c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpqoop390 RnJvbSA1Nzg1ZTA5MDNiODY3ZjAyNGU0YjY3NTc4M2RmZDc2ZGMwMGVlNzMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgNCBBcHIgMjAyNiAyMDo0MzoxNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEz IDQvNF0gVXNlIHBydW5pbmctYXdhcmUgbG9ja2luZyBmb3Igc2luZ2xlLXN0YXRlbWVudCBjYWNo ZWQKIHBsYW5zCgpGb3Igc2luZ2xlLXN0YXRlbWVudCByZXVzZWQgZ2VuZXJpYyBwbGFucywgcGVy Zm9ybSBpbml0aWFsIHBhcnRpdGlvbgpwcnVuaW5nIGJlZm9yZSBhY3F1aXJpbmcgZXhlY3V0aW9u IGxvY2tzLCB0aGVuIGxvY2sgb25seSB0aGUKc3Vydml2aW5nIHBhcnRpdGlvbnMuCgpBZGQgRXhl Y3V0b3JQcmVwQW5kTG9jaygpIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgcHJ1bmluZy1hd2FyZSBs b2NrCnNlcXVlbmNlOiBsb2NrIHVucHJ1bmFibGUgcmVsYXRpb25zLCBjYWxsIEV4ZWN1dG9yUHJl cCgpIHRvIHJ1bgppbml0aWFsIHBydW5pbmcsIHRoZW4gbG9jayBzdXJ2aXZvcnMuICBQbGFuIHZh bGlkaXR5IGlzIGNoZWNrZWQKYWZ0ZXIgZWFjaCBzdGVwOyBFeGVjdXRvclByZXBDbGVhbnVwKCkg aGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKcGxhbiBpcyBpbnZhbGlkYXRlZCBiZXR3ZWVuIHBy ZXAgYW5kIGV4ZWN1dGlvbi4KCkV4dGVuZCBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpIHRvIHVzZSB0 aGUgcHJ1bmluZy1hd2FyZSBwYXRoIGZvcgplbGlnaWJsZSBwbGFucyAoc2luZ2xlLXN0YXRlbWVu dCByZXVzZWQgZ2VuZXJpYywgbm9uLXV0aWxpdHkpLgpBbGwgb3RoZXIgY2FzZXMgY29udGludWUg dXNpbmcgdGhlIGNvbnNlcnZhdGl2ZSBsb2NrLWFsbCBwYXRoCmZyb20gdGhlIHByZXZpb3VzIGNv bW1pdC4KClRyYWNrIGZpcnN0UmVzdWx0UmVscyBpbiBQbGFubmVyR2xvYmFsIGFuZCBQbGFubmVk U3RtdCBzbyB0aGV5CmFyZSBsb2NrZWQgZXZlbiBpZiBwcnVuZWQsIHByZXNlcnZpbmcgRXhlY0lu aXRNb2RpZnlUYWJsZSgpCmFzc3VtcHRpb25zIGFib3V0IHRoZSBmaXJzdCByZXN1bHQgcmVsYXRp b24gYmVpbmcgYXZhaWxhYmxlLgoKTXVsdGktc3RhdGVtZW50IENhY2hlZFBsYW5zIChmcm9tIHJ1 bGUgcmV3cml0aW5nKSBhbHdheXMgdXNlCmNvbnNlcnZhdGl2ZSBsb2NraW5nLCBzaW5jZSBQb3J0 YWxSdW5NdWx0aSgpIGV4ZWN1dGVzIHN0YXRlbWVudHMKc2VxdWVudGlhbGx5IHdpdGggQ0NJIGJl dHdlZW4gdGhlbSBhbmQgbGF0ZXIgc3RhdGVtZW50cycgcHJ1bmluZwpleHByZXNzaW9ucyBtYXkg ZGVwZW5kIG9uIGVhcmxpZXIgb25lcycgZWZmZWN0cy4gIEluIHByaW5jaXBsZSwKdGhpcyBjb3Vs ZCBiZSByZWxheGVkIGlmIHRoZSBwbGFubmVyIGNhbiBwcm92ZSB0aGF0IG5vIHBydW5pbmcKZXhw cmVzc2lvbiByZWFkcyBzdGF0ZSBtb2RpZmllZCBieSBhbiBlYXJsaWVyIHN0YXRlbWVudCwgYnV0 IHRoYXQKaXMgbGVmdCBmb3IgYSBmdXR1cmUgcGF0Y2guCgpSZWdyZXNzaW9uIHRlc3RzIGFyZSBp bmNsdWRlZCB0byB2ZXJpZnk6CgotIE9ubHkgc3Vydml2aW5nIHBhcnRpdGlvbnMgYXJlIGxvY2tl ZCB3aGVuIHBydW5pbmcgaXMgZW5hYmxlZCwgYW5kCiAgYWxsIHBhcnRpdGlvbnMgYXJlIGxvY2tl ZCB3aGVuIGl0IGlzIGRpc2FibGVkIChwZ19sb2NrcyBpbnNwZWN0aW9uKS4KLSBNdWx0aXBsZSBN b2RpZnlUYWJsZSBub2RlcyAodmlhIHdyaXRhYmxlIENURXMpIGhhbmRsZSB0aGUgY2FzZSB3aGVy ZQogIGFsbCB0YXJnZXQgcGFydGl0aW9ucyBhcmUgcHJ1bmVkLCBleGVyY2lzaW5nIGZpcnN0UmVz dWx0UmVscy4KLSBQbGFuIGludmFsaWRhdGlvbiBkdXJpbmcgcHJ1bmluZy1hd2FyZSBsb2NrIHNl dHVwIChEREwgdHJpZ2dlcmVkIGJ5CiAgYSBwcnVuaW5nIGV4cHJlc3Npb24pIGRpc2NhcmRzIHRo ZSBwcmVwIHN0YXRlIGFuZCByZXBsYW5zIGNsZWFubHkuCi0gTXVsdGktc3RhdGVtZW50IENhY2hl ZFBsYW5zIChmcm9tIHJ1bGUgcmV3cml0aW5nKSBmYWxsIGJhY2sgdG8KICBsb2NraW5nIGFsbCBw YXJ0aXRpb25zLCBhdm9pZGluZyBzdGFsZSBwcnVuaW5nIHJlc3VsdHMuCgpOb3RlIGZvciBleHRl bnNpb24gYXV0aG9yczogY29kZSB0aGF0IGFjY2Vzc2VzIHBhcnRpdGlvbiByZWxhdGlvbnMKdGhy b3VnaCBFU3RhdGUgbXVzdCBjaGVjayB0aGF0IHRoZSBSVCBpbmRleCBpcyBhIG1lbWJlciBvZgpl c191bnBydW5lZF9yZWxpZHMgYmVmb3JlIG9wZW5pbmcgdGhlIHJlbGF0aW9uLiAgUHJldmlvdXNs eSB0aGlzCndhcyBhbiBvcHRpbWl6YXRpb247IGl0IGlzIG5vdyBhIGNvcnJlY3RuZXNzIHJlcXVp cmVtZW50LCBiZWNhdXNlCnBydW5lZCBwYXJ0aXRpb25zIG1heSBub3QgYmUgbG9ja2VkLgotLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICA0NSArKyst LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jICAgICAgICAgICAgICAgIHwgIDMwICsr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgMTQyICsr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAg ICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAg fCAgMTkgKysKIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgICAgICAgICAgICAgICAgICAgICB8 ICA3NiArKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgICAgICAg ICAgIHwgIDE2ICsrCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAgICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAg ICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgICAgIHwg IDEwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgfCAxODQg KysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BsYW5jYWNoZS5v dXQgICAgICAgfCAgNjMgKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1 bmUuc3FsICAgICAgfCAxMTYgKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5j YWNoZS5zcWwgICAgICAgICAgICB8ICA1MiArKysrKwogMTcgZmlsZXMgY2hhbmdlZCwgNzM0IGlu c2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAx MTJjMTdiMGQ2NC4uYzUyNTRmMGY5MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTM3Nyw3 ICszNzcsOCBAQCBzdGFuZGFyZF9FeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vy c29yT3B0aW9ucywKIAkvKiBydW4gaXQgKGlmIG5lZWRlZCkgYW5kIHByb2R1Y2Ugb3V0cHV0ICov CiAJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1 ZXJ5RW52LAogCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6 IE5VTEwpLAotCQkJCSAgIGVzLT5tZW1vcnkgPyAmbWVtX2NvdW50ZXJzIDogTlVMTCk7CisJCQkJ ICAgZXMtPm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMLAorCQkJCSAgIE5VTEwpOwogfQog CiAvKgpAQCAtNTAxLDcgKzUwMiw4IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCSAgIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSAgIFF1ZXJ5RW52 aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCiAJCQkg ICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCi0JCQkgICBjb25zdCBNZW1vcnlDb250ZXh0 Q291bnRlcnMgKm1lbV9jb3VudGVycykKKwkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVy cyAqbWVtX2NvdW50ZXJzLAorCQkJICAgUXVlcnlEZXNjICpwcmVwX3FkKQogewogCURlc3RSZWNl aXZlciAqZGVzdDsKIAlRdWVyeURlc2MgICpxdWVyeURlc2M7CkBAIC01MzIsMTMgKzUzNCw2IEBA IEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKIAkgKi8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0 dGltZSk7CiAKLQkvKgotCSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5k IElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5IHNlZXMKLQkgKiByZXN1bHRzIG9mIGFueSBwcmV2aW91 c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCi0JICovCi0JUHVzaENvcGllZFNuYXBzaG90KEdldEFjdGl2 ZVNuYXBzaG90KCkpOwotCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7Ci0KIAkvKgog CSAqIFdlIGRpc2NhcmQgdGhlIG91dHB1dCBpZiB3ZSBoYXZlIG5vIHVzZSBmb3IgaXQuICBJZiB3 ZSdyZSBleHBsYWluaW5nCiAJICogQ1JFQVRFIFRBQkxFIEFTLCB3ZSdkIGJldHRlciB1c2UgdGhl IGFwcHJvcHJpYXRlIHR1cGxlIHJlY2VpdmVyLCB3aGlsZQpAQCAtNTU0LDEwICs1NDksMzQgQEAg RXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRv LCBFeHBsYWluU3RhdGUgKmVzLAogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKLQkv KiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0 ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgcXVlcnlTdHJpbmcsCi0JCQkJCQkJCUdldEFjdGl2ZVNu YXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVu diwgaW5zdHJ1bWVudF9vcHRpb24pOworCS8qCisJICogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0 aGUgcXVlcnksIG9yIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZQorCSAqIGNhbGxlci4gIFdo ZW4gcmV1c2luZyBhIHByZXAgUXVlcnlEZXNjLCBpdHMgc25hcHNob3Qgd2FzIHNldCBhdAorCSAq IGNyZWF0aW9uIHRpbWU7IHdlIHB1c2ggaXQgYXMgYWN0aXZlIGZvciBFeGVjdXRvclN0YXJ0IGFu ZCBvdmVycmlkZSB0aGUKKwkgKiBkZXN0aW5hdGlvbiBhbmQgaW5zdHJ1bWVudCBvcHRpb25zLCB3 aGljaCB3ZXJlIG5vdCBrbm93biB3aGVuIHRoZQorCSAqIGNhbGxlciBjcmVhdGVkIGl0LgorCSAq LworCWlmIChwcmVwX3FkKQorCXsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldEFjdGl2ZVNuYXBz aG90KCkpOworCQlxdWVyeURlc2MgPSBwcmVwX3FkOworCQlBc3NlcnQocXVlcnlEZXNjLT5kZXN0 ID09IE5vbmVfUmVjZWl2ZXIpOworCQlxdWVyeURlc2MtPmRlc3QgPSBkZXN0OworCQlxdWVyeURl c2MtPmluc3RydW1lbnRfb3B0aW9ucyA9IGluc3RydW1lbnRfb3B0aW9uOworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0ZWQgY29tbWFuZCBJRCB0 byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCisJCSAqIHJlc3VsdHMgb2YgYW55IHByZXZpb3VzbHkg ZXhlY3V0ZWQgcXVlcmllcy4KKwkJICovCisJCVB1c2hDb3BpZWRTbmFwc2hvdChHZXRBY3RpdmVT bmFwc2hvdCgpKTsKKwkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKKwkJcXVlcnlE ZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmluZywKKwkJCQkJCQkJ CUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKKwkJCQkJCQkJCWRlc3QsIHBh cmFtcywgcXVlcnlFbnYsCisJCQkJCQkJCQlpbnN0cnVtZW50X29wdGlvbik7CisJfQogCiAJLyog U2VsZWN0IGV4ZWN1dGlvbiBvcHRpb25zICovCiAJaWYgKGVzLT5hbmFseXplKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jCmluZGV4IDAzZDdhOThmYzU4Li4zYmJiYzA1MjE0OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3By ZXBhcmUuYwpAQCAtNTg4LDYgKzU4OCw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0 bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCU1lbW9y eUNvbnRleHRDb3VudGVycyBtZW1fY291bnRlcnM7CiAJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N0 eCA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBzYXZlZF9jdHggPSBOVUxMOworCVF1ZXJ5RGVzYyAg KnByZXBfcWQgPSBOVUxMOwogCiAJaWYgKGVzLT5tZW1vcnkpCiAJewpAQCAtNjQwLDggKzY0MSwz MSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVz ZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCQkJCQkgIHBzdGF0ZS0+cF9xdWVyeUVudik7 CiAJCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKLQkJaWYgKEFjcXVpcmVFeGVjdXRv ckxvY2tzKGNwbGFuKSkKKwkJaWYgKCFDYWNoZWRQbGFuQ2FuUHJlcChjcGxhbiwgZW50cnktPnBs YW5zb3VyY2UpKQorCQl7CisJCQlpZiAoQWNxdWlyZUV4ZWN1dG9yTG9ja3MoY3BsYW4pKQorCQkJ CWJyZWFrOworCQkJUmVsZWFzZUNhY2hlZFBsYW4oY3BsYW4sIEN1cnJlbnRSZXNvdXJjZU93bmVy KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJlcF9xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhsaW5p dGlhbF9ub2RlKFBsYW5uZWRTdG10LCBwbGFuX2xpc3QpLAorCQkJCQkJCQkgIHF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkJICBHZXRBY3RpdmVTbmFwc2hvdCgpLAorCQkJCQkJCQkgIEludmFsaWRTbmFw c2hvdCwKKwkJCQkJCQkJICBOb25lX1JlY2VpdmVyLAkvKiBFeHBsYWluT25lUGxhbiB3aWxsIGZp eCAqLworCQkJCQkJCQkgIHBhcmFtTEksCisJCQkJCQkJCSAgcHN0YXRlLT5wX3F1ZXJ5RW52LAor CQkJCQkJCQkgIDAgLyogRXhwbGFpbk9uZVBsYW4gd2lsbCBmaXggKi8gKTsKKwkJaWYgKEV4ZWN1 dG9yUHJlcEFuZExvY2socHJlcF9xZCwKKwkJCQkJCQkJQ3VycmVudFJlc291cmNlT3duZXIsCisJ CQkJCQkJCWVzLT5nZW5lcmljID8gRVhFQ19GTEFHX0VYUExBSU5fR0VORVJJQyA6IDAsCisJCQkJ CQkJCSZjcGxhbi0+aXNfdmFsaWQpKQogCQkJYnJlYWs7CisKKwkJLyogVHJ5IGFnYWluLiAqLwor CQlFeGVjdXRvclByZXBDbGVhbnVwKHByZXBfcWQpOworCQlGcmVlUXVlcnlEZXNjKHByZXBfcWQp OwogCQlSZWxlYXNlQ2FjaGVkUGxhbihjcGxhbiwgQ3VycmVudFJlc291cmNlT3duZXIpOwogCX0K IApAQCAtNjY0LDYgKzY4OCw3IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4 ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCXBsYW5fbGlzdCA9 IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAkvKiBFeHBsYWluIGVhY2ggcXVlcnkgKi8KKwlBc3NlcnQo cHJlcF9xZCA9PSBOVUxMIHx8IGxpc3RfbGVuZ3RoKHBsYW5fbGlzdCkgPT0gMSk7CiAJZm9yZWFj aChwLCBwbGFuX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQ bGFubmVkU3RtdCwgcCk7CkBAIC02NzEsNyArNjk2LDggQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShF eGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMs CiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpCiAJCQlFeHBsYWluT25l UGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwgcHN0YXRlLT5wX3F1 ZXJ5RW52LAogCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdl IDogTlVMTCksCi0JCQkJCQkgICBlcy0+bWVtb3J5ID8gJm1lbV9jb3VudGVycyA6IE5VTEwpOwor CQkJCQkJICAgZXMtPm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMLAorCQkJCQkJICAgcHJl cF9xZCk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBzdG10LT51dGlsaXR5U3RtdCwg aW50bywgZXMsIHBzdGF0ZSwgcGFyYW1MSSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4 IDJiOTM5N2I3MmYzLi5iYmZhMGUyYjkyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0z MzMsNiArMzMzLDEyNCBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjLCBpbnQgZWZsYWdzKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIH0K IAorLyoKKyAqIExvY2tSYW5nZVRhYmxlUmVsaWRzCisgKiAJCUFjcXVpcmUgb3IgcmVsZWFzZSBs b2NrcyBvbiB0aGUgc3BlY2lmaWVkIHJlbGlkcywgd2hpY2ggcmVmZXJlbmNlCisgKiAJCWVudHJp ZXMgaW4gdGhlIHByb3ZpZGVkIHJhbmdlIHRhYmxlLgorICoKKyAqIEhlbHBlciBmb3IgQWNxdWly ZUV4ZWN1dG9yTG9ja3NQcmVwYXJlZCgpLgorICovCitzdGF0aWMgdm9pZAorTG9ja1JhbmdlVGFi bGVSZWxpZHMoTGlzdCAqcnRhYmxlLCBCaXRtYXBzZXQgKnJlbGlkcywgYm9vbCBhY3F1aXJlKQor eworCWludAkJCXJ0aW5kZXggPSAtMTsKKworCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21l bWJlcihyZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0g bGlzdF9udGhfbm9kZShSYW5nZVRibEVudHJ5LCBydGFibGUsIHJ0aW5kZXggLSAxKTsKKworCQlB c3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJICAgKHJ0ZS0+cnRla2lu ZCA9PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSkpOworCisJCS8qCisJ CSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9u IE9JRC4gTm90ZQorCQkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBvcGVuIHRoZSBy ZWwsIGFuZCBoZW5jZSB3aWxsIG5vdCBmYWlsCisJCSAqIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVu dGlyZWx5IC0tLSB3ZSdsbCBqdXN0IHRyYW5zaWVudGx5IGFjcXVpcmUgYQorCQkgKiBub24tY29u ZmxpY3RpbmcgbG9jay4KKwkJICovCisJCWlmIChhY3F1aXJlKQorCQkJTG9ja1JlbGF0aW9uT2lk KHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQllbHNlCisJCQlVbmxvY2tSZWxhdGlv bk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwl9Cit9CisKKy8qCisgKiBBY3F1 aXJlRXhlY3V0b3JMb2Nrc1ByZXBhcmVkCisgKgorICogQWNxdWlyZSBvciByZWxlYXNlIGV4ZWN1 dGlvbiBsb2NrcyB1c2luZyBwcnVuaW5nIHJlc3VsdHMgYWxyZWFkeSBjb21wdXRlZAorICogYnkg RXhlY3V0b3JQcmVwKCkgYW5kIHN0b3JlZCBpbiBxdWVyeURlc2MtPmVzdGF0ZS4KKyAqCisgKiBU aGlzIGlzIGludGVuZGVkIGZvciBzaW5nbGUtc3RhdGVtZW50IHJldXNlZCBnZW5lcmljLXBsYW4g cGF0aHMgdGhhdAorICogY2hvb3NlIHBydW5pbmctYXdhcmUgbG9ja2luZyBpbnN0ZWFkIG9mIHRo ZSBjb25zZXJ2YXRpdmUKKyAqIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgcGF0aC4KKyAqLworc3Rh dGljIHZvaWQKK0FjcXVpcmVFeGVjdXRvckxvY2tzUHJlcGFyZWQoUXVlcnlEZXNjICpxdWVyeURl c2MsIGJvb2wgYWNxdWlyZSkKK3sKKwlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVyeURl c2MtPnBsYW5uZWRzdG10OworCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7 CisJQml0bWFwc2V0ICAqbG9ja19yZWxpZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlBc3NlcnQo cXVlcnlEZXNjICE9IE5VTEwpOworCUFzc2VydChlc3RhdGUgIT0gTlVMTCk7CisJQXNzZXJ0KHBs YW5uZWRzdG10ICE9IE5VTEwpOworCUFzc2VydChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgIT0g Q01EX1VUSUxJVFkpOworCisJbG9ja19yZWxpZHMgPSBibXNfZGlmZmVyZW5jZShlc3RhdGUtPmVz X3VucHJ1bmVkX3JlbGlkcywKKwkJCQkJCQkJIHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRz KTsKKworCS8qCisJICogS2VlcCB0aGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uIG9mIGVhY2ggTW9k aWZ5VGFibGUgbG9ja2VkIGV2ZW4gaWYKKwkgKiBwcnVuaW5nIHJlbW92ZWQgYWxsIHRhcmdldCBw YXJ0aXRpb25zLiAgRXhlY0luaXRNb2RpZnlUYWJsZSgpIHJlbGllcyBvbgorCSAqIG9uZSBzdWNo IHJlbGF0aW9uIHJlbWFpbmluZyBhdmFpbGFibGUuCisJICovCisJZm9yZWFjaChsYywgcGxhbm5l ZHN0bXQtPmZpcnN0UmVzdWx0UmVscykKKwl7CisJCUluZGV4CQlydGkgPSBsZmlyc3RfaW50KGxj KTsKKworCQlsb2NrX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGxvY2tfcmVsaWRzLCBydGkpOwor CX0KKworCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBsYW5uZWRzdG10LT5ydGFibGUsIGxvY2tfcmVs aWRzLCBhY3F1aXJlKTsKKworCWJtc19mcmVlKGxvY2tfcmVsaWRzKTsKKworfQorCisvKgorICog RXhlY3V0b3JQcmVwQW5kTG9jaworICoJCVBlcmZvcm0gcHJ1bmluZy1hd2FyZSBsb2NraW5nIGZv ciBhIHNpbmdsZSBQbGFubmVkU3RtdC4KKyAqCisgKiBMb2NrcyB1bnBydW5hYmxlIHJlbGF0aW9u cyBmaXJzdCwgdGhlbiBydW5zIEV4ZWN1dG9yUHJlcCgpIHRvCisgKiBkZXRlcm1pbmUgd2hpY2gg cGFydGl0aW9ucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmluZywgdGhlbiBsb2NrcworICogb25seSB0 aG9zZSBzdXJ2aXZvcnMuICBDaGVja3MgKmlzX3ZhbGlkIGFmdGVyIGVhY2ggbG9ja2luZyBzdGVw CisgKiB0byBkZXRlY3QgcGxhbiBpbnZhbGlkYXRpb24gKGUuZy4sIGZyb20gY29uY3VycmVudCBE REwgb3IgRERMCisgKiB0cmlnZ2VyZWQgYnkgYSBwcnVuaW5nIGV4cHJlc3Npb24pLgorICoKKyAq IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhbiBpcyBzdGlsbCB2YWxpZCBhbmQgYWxsIG5lZWRlZCBs b2NrcyBhcmUKKyAqIGhlbGQuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwbGFuIHdhcyBpbnZhbGlk YXRlZCBhdCBhbnkgcG9pbnQsIGluCisgKiB3aGljaCBjYXNlIGFsbCBhY3F1aXJlZCBsb2NrcyBo YXZlIGJlZW4gcmVsZWFzZWQgYW5kIHRoZSBjYWxsZXIKKyAqIHNob3VsZCBkaXNjYXJkIHRoZSBR dWVyeURlc2MgYW5kIHJldHJ5IHdpdGggYSBmcmVzaCBwbGFuLgorICovCitib29sCitFeGVjdXRv clByZXBBbmRMb2NrKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBSZXNvdXJjZU93bmVyIG93bmVyLAor CQkJCQlpbnQgZWZsYWdzLCBib29sICppc192YWxpZCkKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQg PSBxdWVyeURlc2MtPnBsYW5uZWRzdG10OworCisJLyogTG9jayB1bnBydW5hYmxlIHJlbHMgYmVm b3JlIHBydW5pbmcgY2FuIGFjY2VzcyB0aGVtLiAqLworCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBz dG10LT5ydGFibGUsIHBzdG10LT51bnBydW5hYmxlUmVsaWRzLCB0cnVlKTsKKwlpZiAoISppc192 YWxpZCkKKwl7CisJCUxvY2tSYW5nZVRhYmxlUmVsaWRzKHBzdG10LT5ydGFibGUsIHBzdG10LT51 bnBydW5hYmxlUmVsaWRzLCBmYWxzZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBSdW4g cHJ1bmluZyBhbmQgbG9jayBzdXJ2aXZvcnMuICovCisJRXhlY3V0b3JQcmVwKHF1ZXJ5RGVzYywg b3duZXIsIGVmbGFncyk7CisJQWNxdWlyZUV4ZWN1dG9yTG9ja3NQcmVwYXJlZChxdWVyeURlc2Ms IHRydWUpOworCWlmICghKmlzX3ZhbGlkKQorCXsKKwkJQWNxdWlyZUV4ZWN1dG9yTG9ja3NQcmVw YXJlZChxdWVyeURlc2MsIGZhbHNlKTsKKwkJTG9ja1JhbmdlVGFibGVSZWxpZHMocHN0bXQtPnJ0 YWJsZSwgcHN0bXQtPnVucHJ1bmFibGVSZWxpZHMsIGZhbHNlKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogRXhlY3V0b3JQcmVwCiAgKgpAQCAtMzkx LDYgKzUwOSwzMCBAQCBFeGVjdXRvclByZXAoUXVlcnlEZXNjICpxdWVyeURlc2MsIFJlc291cmNl T3duZXIgb3duZXIsIGludCBlZmxhZ3MpCiAJQ3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25l cjsKIH0KIAorLyoKKyAqIEV4ZWN1dG9yUHJlcENsZWFudXAKKyAqCQlDbGVhbiB1cCBhbiBFU3Rh dGUgdGhhdCB3YXMgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKSBidXQgbmV2ZXIKKyAqCQlwYXNz ZWQgdG8gRXhlY3V0b3JTdGFydCgpLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHBsYW4gaXMKKyAq CQlpbnZhbGlkYXRlZCBiZXR3ZWVuIHByZXAgYW5kIGV4ZWN1dGlvbiwgYW5kIHRoZSBjYWxsZXIg bXVzdAorICoJCWRpc2NhcmQgdGhlIHByZXBwZWQgc3RhdGUgYmVmb3JlIHJldHJ5aW5nIHdpdGgg YSBmcmVzaCBwbGFuLgorICoKKyAqIFVubGlrZSBFeGVjdXRvckVuZCgpLCB0aGlzIGRvZXMgbm90 IGV4cGVjdCBhIGZ1bGx5IGluaXRpYWxpemVkCisgKiBwbGFuIHN0YXRlIHRyZWUgLS0gb25seSB0 aGUgcmFuZ2UgdGFibGUgcmVsYXRpb25zIGFuZCB0aGUKKyAqIEVTdGF0ZSBpdHNlbGYgbmVlZCB0 byBiZSBmcmVlZC4KKyAqLwordm9pZAorRXhlY3V0b3JQcmVwQ2xlYW51cChRdWVyeURlc2MgKnF1 ZXJ5RGVzYykKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOworCisJ aWYgKGVzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlFeGVjQ2xvc2VSYW5nZVRhYmxlUmVs YXRpb25zKGVzdGF0ZSk7CisJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKKwlxdWVyeURlc2Mt PmVzdGF0ZSA9IE5VTEw7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjdXRvclJ1bgogICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggNDc4Y2IwMTc4M2MuLjZlNzhi NjFmNzAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtNTEzMyw4 ICs1MTMzLDggQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICogYXMgYSByZWZlcmVuY2UgZm9yIGJ1aWxkaW5nIHRo ZSBSZXN1bHRSZWxJbmZvIG9mIHRoZSB0YXJnZXQgcGFydGl0aW9uLgogCSAqIEluIGVpdGhlciBj YXNlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCByZXN1bHQgcmVsYXRpb24gaXMga2VwdCwgc28g d2UKIAkgKiBqdXN0IGtlZXAgdGhlIGZpcnN0IG9uZSwgaWYgYWxsIG90aGVycyBoYXZlIGJlZW4g cHJ1bmVkLiAgU2VlIGFsc28sCi0JICogRXhlY0RvSW5pdGlhbFBydW5pbmcoKSwgd2hpY2ggZW5z dXJlcyB0aGF0IHRoaXMgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCi0JICogaGFzIGJlZW4gbG9ja2Vk LgorCSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzUHJlcGFyZWQoKSwgd2hpY2ggZW5zdXJlcyB0aGF0 IHRoaXMgZmlyc3QgcmVzdWx0CisJICogcmVsYXRpb24gaGFzIGJlZW4gbG9ja2VkLgogCSAqLwog CWkgPSAwOwogCWZvcmVhY2gobCwgbm9kZS0+cmVzdWx0UmVsYXRpb25zKQpAQCAtNTE0OCw2ICs1 MTQ4LDkgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCQkvKiBhbGwgcmVzdWx0IHJlbGF0aW9ucyBwcnVuZWQ7IGtl ZXAgdGhlIGZpcnN0IG9uZSAqLwogCQkJa2VlcF9yZWwgPSB0cnVlOwogCQkJcnRpID0gbGluaXRp YWxfaW50KG5vZGUtPnJlc3VsdFJlbGF0aW9ucyk7CisJCQlpZiAoIWxpc3RfbWVtYmVyX2ludChl c3RhdGUtPmVzX3BsYW5uZWRzdG10LT5maXJzdFJlc3VsdFJlbHMsIHJ0aSkpCisJCQkJZWxvZyhF UlJPUiwgImZpcnN0IHJlc3VsdCByZWxhdGlvbiAldSBub3QgZm91bmQgaW4gZmlyc3RSZXN1bHRS ZWxzIiwKKwkJCQkJIHJ0aSk7CiAJCQlpID0gMDsKIAkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKaW5kZXggZjQ2ODllN2M5ZjguLjRjZGRhYzdmMmZjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC02NzUsNiArNjc1LDcgQEAgc3RhbmRhcmRfcGxhbm5l cihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlv bnMsCiAJCQkJCQkJCQkJCSAgZ2xvYi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUlu Zm9zID0gZ2xvYi0+ZmluYWxydGVwZXJtaW5mb3M7CiAJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xv Yi0+c3VicnRpbmZvczsKKwlyZXN1bHQtPmZpcnN0UmVzdWx0UmVscyA9IGdsb2ItPmZpcnN0UmVz dWx0UmVsczsKIAlyZXN1bHQtPmFwcGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9u czsKIAlyZXN1bHQtPnN1YnBsYW5zID0gZ2xvYi0+c3VicGxhbnM7CiAJcmVzdWx0LT5yZXdpbmRQ bGFuSURzID0gZ2xvYi0+cmV3aW5kUGxhbklEczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJl ZnMuYwppbmRleCBmZjBlODc1ZjJhMi4uNDQ5NWJjNmU2MjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMKQEAgLTM4NCw2ICszODQsMjUgQEAgc2V0X3BsYW5fcmVmZXJlbmNlcyhQ bGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkJfQogCX0KIAorCS8qCisJICogUmVjb3Jk IHRoZSBmaXJzdCByZXN1bHQgcmVsYXRpb24gaWYgaXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIGlu aXRpYWxseQorCSAqIHBydW5hYmxlIHJlbGF0aW9ucy4gIFdlIHVzZSBibXNfbmV4dF9tZW1iZXIo KSB0byBnZXQgdGhlCisJICogbG93ZXN0LW51bWJlcmVkIGxlYWYgcmVzdWx0IHJlbCwgd2hpY2gg bWF0Y2hlcworCSAqIGxpbml0aWFsX2ludChNb2RpZnlUYWJsZS5yZXN1bHRSZWxhdGlvbnMpIGJl Y2F1c2UKKwkgKiBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoKSBhZGRzIGNoaWxkIHBhcnRpdGlv bnMgdG8gdGhlIHJhbmdlIHRhYmxlCisJICogc2VxdWVudGlhbGx5IGluIHBhcnRpdGlvbiBib3Vu ZCBvcmRlciwgYW5kIHJlc3VsdFJlbGF0aW9ucyBpcyBidWlsdAorCSAqIGZyb20gdGhhdCBzYW1l IGV4cGFuc2lvbi4KKwkgKi8KKwlpZiAocm9vdC0+bGVhZl9yZXN1bHRfcmVsaWRzKQorCXsKKwkJ SW5kZXgJCWZpcnN0UmVzdWx0UmVsID0gYm1zX25leHRfbWVtYmVyKHJvb3QtPmxlYWZfcmVzdWx0 X3JlbGlkcywgLTEpOworCisJCWZpcnN0UmVzdWx0UmVsICs9IHJ0b2Zmc2V0OworCQlpZiAoYm1z X2lzX21lbWJlcihmaXJzdFJlc3VsdFJlbCwgcm9vdC0+Z2xvYi0+cHJ1bmFibGVSZWxpZHMpKQor CQkJcm9vdC0+Z2xvYi0+Zmlyc3RSZXN1bHRSZWxzID0KKwkJCQlsYXBwZW5kX2ludChyb290LT5n bG9iLT5maXJzdFJlc3VsdFJlbHMsIGZpcnN0UmVzdWx0UmVsKTsKKwl9CisKIAlyZXR1cm4gcmVz dWx0OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3JjL2Jh Y2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCA0Njk5YjUzY2FiNy4uNTNjNTBhYjBmY2UgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9w cXVlcnkuYwpAQCAtNTksNyArNTksOSBAQCBzdGF0aWMgdWludDY0IERvUG9ydGFsUnVuRmV0Y2go UG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkgICBsb25nIGNvdW50LAogCQkJCQkJCSAgIERlc3RSZWNl aXZlciAqZGVzdCk7CiBzdGF0aWMgdm9pZCBEb1BvcnRhbFJld2luZChQb3J0YWwgcG9ydGFsKTsK LXN0YXRpYyBib29sIFBvcnRhbExvY2tDYWNoZWRQbGFuKFBvcnRhbCBwb3J0YWwpOworc3RhdGlj IGJvb2wgUG9ydGFsTG9ja0NhY2hlZFBsYW4oUG9ydGFsIHBvcnRhbCwgYm9vbCBkb19wcmVwLAor CQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCSBRdWVyeURlc2MgKipxdWVy eURlc2NfcCk7CiAKIAogLyoKQEAgLTQ4OCwyMSArNDkwLDYgQEAgcmVzdGFydDoKIAkJCQkgKiBu b24tZGVmYXVsdCBuZXN0aW5nIGxldmVsIGZvciB0aGUgc25hcHNob3QuCiAJCQkJICovCiAKLQkJ CQkvKgotCQkJCSAqIElmIHRoZSBwb3J0YWwgaXMgYmFja2VkIGJ5IGEgY2FjaGVkIHBsYW4sIGFj cXVpcmUgZXhlY3V0aW9uCi0JCQkJICogbG9ja3MgdmlhIFBvcnRhbExvY2tDYWNoZWRQbGFuKCku ICBJZiB0aGUgcGxhbiBpcwotCQkJCSAqIGludmFsaWRhdGVkIGR1cmluZyBsb2NraW5nLCBpdCBy ZXBsYW5zIGFuZCBtYXkgY2hhbmdlIHRoZQotCQkJCSAqIHBvcnRhbCBzdHJhdGVneSwgcmVxdWly aW5nIHVzIHRvIHJlc3RhcnQgUG9ydGFsU3RhcnQoKS4KLQkJCQkgKi8KLQkJCQlpZiAocG9ydGFs LT5jcGxhbikKLQkJCQl7Ci0JCQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxhbihwb3J0YWwpKQot CQkJCQl7Ci0JCQkJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCQkJCQkJZ290byByZXN0YXJ0Owot CQkJCQl9Ci0JCQkJfQotCiAJCQkJLyoKIAkJCQkgKiBDcmVhdGUgUXVlcnlEZXNjIGluIHBvcnRh bCdzIGNvbnRleHQ7IGZvciB0aGUgbW9tZW50LCBzZXQKIAkJCQkgKiB0aGUgZGVzdGluYXRpb24g dG8gRGVzdE5vbmUuCkBAIC01MTYsNiArNTAzLDI2IEBAIHJlc3RhcnQ6CiAJCQkJCQkJCQkJCXBv cnRhbC0+cXVlcnlFbnYsCiAJCQkJCQkJCQkJCTApOwogCisJCQkJLyoKKwkJCQkgKiBJZiB0aGUg cG9ydGFsIGlzIGJhY2tlZCBieSBhIGNhY2hlZCBwbGFuLCBhY3F1aXJlIGV4ZWN1dGlvbgorCQkJ CSAqIGxvY2tzIHZpYSBQb3J0YWxMb2NrQ2FjaGVkUGxhbigpLiAgRm9yIGVsaWdpYmxlIHBsYW5z CisJCQkJICogKHNpbmdsZS1zdGF0ZW1lbnQgcmV1c2VkIGdlbmVyaWMpLCB0aGlzIHBlcmZvcm1z CisJCQkJICogcHJ1bmluZy1hd2FyZSBsb2NraW5nOiBpdCBydW5zIEV4ZWN1dG9yUHJlcCgpIG9u IHRoZQorCQkJCSAqIFF1ZXJ5RGVzYyB0byBkZXRlcm1pbmUgd2hpY2ggcGFydGl0aW9ucyBzdXJ2 aXZlIGluaXRpYWwKKwkJCQkgKiBwcnVuaW5nLCB0aGVuIGxvY2tzIG9ubHkgdGhvc2UuICBJZiB0 aGUgcGxhbiBpcyBpbnZhbGlkYXRlZAorCQkJCSAqIGR1cmluZyB0aGlzIHByb2Nlc3MsIGl0IHJl cGxhbnMgYW5kIHJlYnVpbGRzIHRoZSBRdWVyeURlc2MuCisJCQkJICogSWYgcmVwbGFubmluZyBj aGFuZ2VzIHRoZSBwb3J0YWwgc3RyYXRlZ3ksIHdlIG11c3QgcmVzdGFydAorCQkJCSAqIFBvcnRh bFN0YXJ0KCkgdG8gcmVkaXNwYXRjaC4KKwkJCQkgKi8KKwkJCQlpZiAocG9ydGFsLT5jcGxhbikK KwkJCQl7CisJCQkJCWlmIChQb3J0YWxMb2NrQ2FjaGVkUGxhbihwb3J0YWwsIHRydWUsIHBhcmFt cywgJnF1ZXJ5RGVzYykpCisJCQkJCXsKKwkJCQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCQkJ CQlnb3RvIHJlc3RhcnQ7CisJCQkJCX0KKwkJCQl9CisKIAkJCQkvKgogCQkJCSAqIElmIGl0J3Mg YSBzY3JvbGxhYmxlIGN1cnNvciwgZXhlY3V0b3IgbmVlZHMgdG8gc3VwcG9ydAogCQkJCSAqIFJF V0lORCBhbmQgYmFja3dhcmRzIHNjYW4sIGFzIHdlbGwgYXMgd2hhdGV2ZXIgdGhlIGNhbGxlcgpA QCAtNTU1LDcgKzU2Miw3IEBAIHJlc3RhcnQ6CiAJCQljYXNlIFBPUlRBTF9PTkVfTU9EX1dJVEg6 CiAJCQkJaWYgKHBvcnRhbC0+Y3BsYW4pCiAJCQkJewotCQkJCQlpZiAoUG9ydGFsTG9ja0NhY2hl ZFBsYW4ocG9ydGFsKSkKKwkJCQkJaWYgKFBvcnRhbExvY2tDYWNoZWRQbGFuKHBvcnRhbCwgZmFs c2UsIE5VTEwsIE5VTEwpKQogCQkJCQkJZ290byByZXN0YXJ0OwogCQkJCX0KIApAQCAtNjExLDcg KzYxOCw3IEBAIHJlc3RhcnQ6CiAJCQkJICovCiAJCQkJaWYgKHBvcnRhbC0+Y3BsYW4pCiAJCQkJ ewotCQkJCQlpZiAoUG9ydGFsTG9ja0NhY2hlZFBsYW4ocG9ydGFsKSkKKwkJCQkJaWYgKFBvcnRh bExvY2tDYWNoZWRQbGFuKHBvcnRhbCwgZmFsc2UsIE5VTEwsIE5VTEwpKQogCQkJCQkJZ290byBy ZXN0YXJ0OwogCQkJCX0KIApAQCAtMTgyOCwxNSArMTgzNSwzMiBAQCBFbnN1cmVQb3J0YWxTbmFw c2hvdEV4aXN0cyh2b2lkKQogICoJCUFjcXVpcmUgZXhlY3V0aW9uIGxvY2tzIGZvciBhIGNhY2hl ZC1wbGFuLWJhY2tlZCBwb3J0YWwsCiAgKgkJcmV0cnlpbmcgd2l0aCBhIGZyZXNoIHBsYW4gaWYg dGhlIGN1cnJlbnQgb25lIGlzIGludmFsaWRhdGVkLgogICoKKyAqIElmIGRvX3ByZXAgaXMgdHJ1 ZSBhbmQgdGhlIHBsYW4gaXMgZWxpZ2libGUgKHNpbmdsZS1zdGF0ZW1lbnQgcmV1c2VkCisgKiBn ZW5lcmljIHBsYW4pLCBwZXJmb3JtcyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgdmlhIEV4ZWN1dG9y UHJlcCgpIGFuZAorICogcG9wdWxhdGVzIHBvcnRhbC0+cXVlcnlEZXNjIHdpdGggdGhlIHByZXBw ZWQgUXVlcnlEZXNjLiAgT3RoZXJ3aXNlCisgKiBmYWxscyBiYWNrIHRvIGxvY2tpbmcgYWxsIHJl bGF0aW9ucyBpbiB0aGUgcGxhbi4KKyAqCiAgKiBSZXR1cm5zIHRydWUgaWYgcmVwbGFubmluZyBj aGFuZ2VkIHBvcnRhbC0+c3RyYXRlZ3ksIG1lYW5pbmcgdGhlCi0gKiBjYWxsZXIgbXVzdCByZWRp c3BhdGNoLiAgUmV0dXJucyBmYWxzZSBvbmNlIGxvY2tzIGFyZSBoZWxkLgorICogY2FsbGVyIG11 c3QgcmVkaXNwYXRjaC4gIFJldHVybnMgZmFsc2Ugb25jZSBsb2NrcyBhcmUgaGVsZCBhbmQgdGhl CisgKiBwbGFuIGlzIHZhbGlkIGZvciBleGVjdXRpb24uCiAgKi8KIHN0YXRpYyBib29sCi1Qb3J0 YWxMb2NrQ2FjaGVkUGxhbihQb3J0YWwgcG9ydGFsKQorUG9ydGFsTG9ja0NhY2hlZFBsYW4oUG9y dGFsIHBvcnRhbCwgYm9vbCBkb19wcmVwLAorCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJ CQkJCSBRdWVyeURlc2MgKipwcmVwX3FkKQogewogCVBvcnRhbFN0cmF0ZWd5IHN0YXJ0X3N0cmF0 ZWd5ID0gcG9ydGFsLT5zdHJhdGVneTsKIAotCWlmIChBY3F1aXJlRXhlY3V0b3JMb2Nrcyhwb3J0 YWwtPmNwbGFuKSkKKwlpZiAoZG9fcHJlcCAmJiBDYWNoZWRQbGFuQ2FuUHJlcChwb3J0YWwtPmNw bGFuLCBwb3J0YWwtPnBsYW5zb3VyY2UpKQorCXsKKwkJQXNzZXJ0KHByZXBfcWQpOworCQlpZiAo RXhlY3V0b3JQcmVwQW5kTG9jaygqcHJlcF9xZCwgcG9ydGFsLT5yZXNvd25lciwgMCwKKwkJCQkJ CQkJJnBvcnRhbC0+Y3BsYW4tPmlzX3ZhbGlkKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJRXhlY3V0 b3JQcmVwQ2xlYW51cCgqcHJlcF9xZCk7CisJCUZyZWVRdWVyeURlc2MoKnByZXBfcWQpOworCX0K KwllbHNlIGlmIChBY3F1aXJlRXhlY3V0b3JMb2Nrcyhwb3J0YWwtPmNwbGFuKSkKIAkJcmV0dXJu IGZhbHNlOwogCiAJLyogUmVwbGFuLiAgTG9ja3Mgd2lsbCBiZSB0YWtlbiBmcmVzaGx5LiAqLwpA QCAtMTg1Miw1ICsxODc2LDE1IEBAIFBvcnRhbExvY2tDYWNoZWRQbGFuKFBvcnRhbCBwb3J0YWwp CiAJaWYgKHBvcnRhbC0+c3RyYXRlZ3kgIT0gc3RhcnRfc3RyYXRlZ3kpCiAJCXJldHVybiB0cnVl OwogCisJaWYgKHByZXBfcWQpCisJeworCQlBc3NlcnQobGlzdF9sZW5ndGgocG9ydGFsLT5zdG10 cykgPT0gMSk7CisJCSpwcmVwX3FkID0gQ3JlYXRlUXVlcnlEZXNjKGxpbml0aWFsX25vZGUoUGxh bm5lZFN0bXQsIHBvcnRhbC0+c3RtdHMpLAorCQkJCQkJCQkgICBwb3J0YWwtPnNvdXJjZVRleHQs CisJCQkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKKwkJCQkJ CQkJICAgTm9uZV9SZWNlaXZlciwgcGFyYW1zLAorCQkJCQkJCQkgICBwb3J0YWwtPnF1ZXJ5RW52 LCAwKTsKKwl9CisKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNo ZS5jCmluZGV4IGY3ZmUzNjY4NTljLi5mY2EyZjg0MDgxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cGxhbmNhY2hlLmMKQEAgLTE5NzcsNiArMTk3NywyMiBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhD YWNoZWRQbGFuICpjcGxhbikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIENhY2hlZFBsYW5D YW5QcmVwCisgKgkJQ2hlY2sgd2hldGhlciBhIGNhY2hlZCBwbGFuIGlzIGVsaWdpYmxlIGZvciBw cnVuaW5nLWF3YXJlIGxvY2tpbmcKKyAqCQl2aWEgRXhlY3V0b3JQcmVwQW5kTG9jaygpLgorICoK KyAqIE9ubHkgc2luZ2xlLXN0YXRlbWVudCByZXVzZWQgZ2VuZXJpYyBwbGFucyB3aXRoIGEgbm9u LXV0aWxpdHkgY29tbWFuZAorICogcXVhbGlmeS4KKyAqLworYm9vbAorQ2FjaGVkUGxhbkNhblBy ZXAoQ2FjaGVkUGxhbiAqY3BsYW4sIENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCit7CisJ cmV0dXJuIChjcGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbiAmJgorCQkJbGlzdF9sZW5ndGgoY3Bs YW4tPnN0bXRfbGlzdCkgPT0gMSAmJgorCQkJbGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgY3Bs YW4tPnN0bXRfbGlzdCktPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKTsKK30KKwogLyoKICAq IEFjcXVpcmVQbGFubmVyTG9ja3M6IGFjcXVpcmUgbG9ja3MgbmVlZGVkIGZvciBwbGFubmluZyBv ZiBhIHF1ZXJ5dHJlZSBsaXN0OwogICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFs c2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNDcyZTE0MWJiYTMuLjNhMDMzNTVlNmI2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC02OSw3ICs2OSw4IEBAIGV4dGVybiB2b2lkIEV4cGxh aW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKIAkJ CQkJCSAgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwK IAkJCQkJCSAgIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCQkJCSAgIGNvbnN0 IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKLQkJCQkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3Vu dGVycyAqbWVtX2NvdW50ZXJzKTsKKwkJCQkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVy cyAqbWVtX2NvdW50ZXJzLAorCQkJCQkJICAgUXVlcnlEZXNjICpwcmVwX3FkKTsKIAogZXh0ZXJu IHZvaWQgRXhwbGFpblByaW50UGxhbihFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5 RGVzYyk7CiBleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRUcmlnZ2VycyhFeHBsYWluU3RhdGUgKmVz LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggMzNiYmRiZmVmZmIuLjA5M2JlOWJkMjRiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJub2Rl cy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAKIAogLyoK QEAgLTIzNSw2ICsyMzYsOSBAQCBFeGVjR2V0SnVua0F0dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAq c2xvdCwgQXR0ck51bWJlciBhdHRubywgYm9vbCAqaXNOdWxsKQogICovCiBleHRlcm4gdm9pZCBF eGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2 b2lkIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpOworZXh0ZXJuIGJvb2wgRXhlY3V0b3JQcmVwQW5kTG9jayhRdWVyeURlc2MgKnF1ZXJ5RGVz YywgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCQkJCQkJaW50IGVmbGFncywgYm9vbCAqaXNfdmFs aWQpOworZXh0ZXJuIHZvaWQgRXhlY3V0b3JQcmVwQ2xlYW51cChRdWVyeURlc2MgKnF1ZXJ5RGVz Yyk7CiBleHRlcm4gdm9pZCBFeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAkJCQkJ CVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQpOwogZXh0ZXJuIHZvaWQgc3Rh bmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDI3YTJjNjgxNWI3Li5hNWQwMDYzM2I0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTIxNyw2ICsyMTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgaW50ZWdlciBSVCBpbmRleGVzICovCiAJTGlzdAkgICAqcmVzdWx0UmVsYXRpb25z OwogCisJLyogImZsYXQiIGxpc3Qgb2YgaW50ZWdlciBSVCBpbmRleGVzIChvbmUgcGVyIE1vZGlm eVRhYmxlIG5vZGUpICovCisJTGlzdAkgICAqZmlyc3RSZXN1bHRSZWxzOworCiAJLyogImZsYXQi IGxpc3Qgb2YgQXBwZW5kUmVsSW5mb3MgKi8KIAlMaXN0CSAgICphcHBlbmRSZWxhdGlvbnM7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMTRhMWRmZWQyYjkuLjFhMzI4ZWExMzhjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaApAQCAtMTIwLDYgKzEyMCwxNiBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVk U3RtdAogCS8qIFJUIGluZGV4ZXMgb2YgcmVsYXRpb25zIHRhcmdldGVkIGJ5IElOU0VSVC9VUERB VEUvREVMRVRFL01FUkdFICovCiAJQml0bWFwc2V0ICAqcmVzdWx0UmVsYXRpb25SZWxpZHM7CiAK KwkvKgorCSAqIHJ0YWJsZSBpbmRleGVzIG9mIGZpcnN0IHRhcmdldCByZWxhdGlvbiBpbiBlYWNo IE1vZGlmeVRhYmxlIG5vZGUgaW4gdGhlCisJICogcGxhbiBmb3IgSU5TRVJUL1VQREFURS9ERUxF VEUvTUVSR0UuICBOSUwgaWYgcmVzdWx0UmVsYXRpb25zIGlzIE5JTC4KKwkgKgorCSAqIFRoZXNl IGFyZSB1c2VkIGJ5IEFjcXVpcmVFeGVjdXRvckxvY2tzUHJlcGFyZWQoKSB0byBlbnN1cmUgdGhh dCB0aGUKKwkgKiBmaXJzdCByZXN1bHQgcmVsIGZvciBlYWNoIE1vZGlmeVRhYmxlIHJlbWFpbnMg bG9ja2VkIGV2ZW4gaWYgcHJ1bmVkOworCSAqIHNlZSBFeGVjSW5pdE1vZGlmeVRhYmxlKCkgZm9y IHRoZSBleGVjdXRvciBzaWRlIGFzc3VtcHRpb25zLgorCSAqLworCUxpc3QJICAgKmZpcnN0UmVz dWx0UmVsczsKKwogCS8qIGxpc3Qgb2YgQXBwZW5kUmVsSW5mbyBub2RlcyAqLwogCUxpc3QJICAg KmFwcGVuZFJlbGF0aW9uczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNh Y2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCBlMGZjNDAzZTcxNy4u Mjk0MWQzYTMwMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCkBAIC0yNTQsNCArMjU0LDYgQEAgZXh0 ZXJuIGJvb2wgQ2FjaGVkUGxhbklzU2ltcGx5VmFsaWQoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZSwKIGV4dGVybiBDYWNoZWRFeHByZXNzaW9uICpHZXRDYWNoZWRFeHByZXNzaW9uKE5vZGUg KmV4cHIpOwogZXh0ZXJuIHZvaWQgRnJlZUNhY2hlZEV4cHJlc3Npb24oQ2FjaGVkRXhwcmVzc2lv biAqY2V4cHIpOwogCitleHRlcm4gYm9vbCBDYWNoZWRQbGFuQ2FuUHJlcChDYWNoZWRQbGFuICpj cGxhbiwgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CisKICNlbmRpZgkJCQkJCQkvKiBQ TEFOQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fcHJ1bmUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1 bmUub3V0CmluZGV4IDg0OTA0OWY5YzUxLi5lYzczODY2NDg2ZSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dApAQCAtNDk1NiwzICs0OTU2LDE4NyBA QCBzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9ib29scGFydCkgdAogKDIgcm93 cykKIAogZHJvcCB0YWJsZSBwaHZfYm9vbHBhcnQ7CistLQorLS0gVmVyaWZ5IHRoYXQgcHJ1bmlu Zy1hd2FyZSBsb2NraW5nIHNraXBzIHBydW5lZCBwYXJ0aXRpb25zCistLSB3aGVuIHJldXNpbmcg YSBnZW5lcmljIGNhY2hlZCBwbGFuLgorLS0KK3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2Vf Z2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wIChhIGludCkgcGFydGl0aW9u IGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wMSBwYXJ0aXRpb24gb2YgcHJ1 bmVsb2NrX3AgZm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgcHJ1bmVsb2NrX3AyIHBh cnRpdGlvbiBvZiBwcnVuZWxvY2tfcCBmb3IgdmFsdWVzIGluICgyKTsKK2NyZWF0ZSB0YWJsZSBw cnVuZWxvY2tfcDMgcGFydGl0aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1ZXMgaW4gKDMpOwor cHJlcGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBzZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdo ZXJlIGEgPSAkMTsKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29z dHMgb2ZmKSBleGVjdXRlIHBydW5lbG9ja19xKDEpOworICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3ZlZDogMgorICAgLT4gIFNl cSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF8xCisgICAgICAgICBGaWx0ZXI6IChh ID0gJDEpCisoNCByb3dzKQorCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBwYXJ0 aXRpb25zIGFyZSBsb2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKyBhIAor LS0tCisoMCByb3dzKQorCitzZWxlY3QgYy5yZWxuYW1lCisgIGZyb20gcGdfbG9ja3MgbAorICBq b2luIHBnX2NsYXNzIGMgb24gYy5vaWQgPSBsLnJlbGF0aW9uCisgd2hlcmUgbC5waWQgPSBwZ19i YWNrZW5kX3BpZCgpCisgICBhbmQgYy5yZWxuYW1lIGxpa2UgJ3BydW5lbG9ja19wXycKKyBvcmRl ciBieSBjLnJlbG5hbWU7CisgICByZWxuYW1lICAgIAorLS0tLS0tLS0tLS0tLS0KKyBwcnVuZWxv Y2tfcDEKKygxIHJvdykKKworY29tbWl0OworZGVhbGxvY2F0ZSBwcnVuZWxvY2tfcTsKKy0tIFR1 cm4gcHJ1bmluZyBvZmYKK3NldCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmcgdG8gb2ZmOworcHJl cGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBzZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdoZXJl IGEgPSAkMTsKKy0tIEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMg b2ZmKSBleGVjdXRlIHBydW5lbG9ja19xKDEpOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVu ZWxvY2tfcF8xCisgICAgICAgICBGaWx0ZXI6IChhID0gJDEpCisgICAtPiAgU2VxIFNjYW4gb24g cHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzIKKyAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfMworICAgICAgICAgRmls dGVyOiAoYSA9ICQxKQorKDcgcm93cykKKworLS0gRXhlY3V0ZSBhbmQgY2hlY2sgd2hpY2ggY2hp bGQgcGFydGl0aW9ucyBhcmUgbG9ja2VkCitiZWdpbjsKK2V4ZWN1dGUgcHJ1bmVsb2NrX3EoMSk7 CisgYSAKKy0tLQorKDAgcm93cykKKworc2VsZWN0IGMucmVsbmFtZQorICBmcm9tIHBnX2xvY2tz IGwKKyAgam9pbiBwZ19jbGFzcyBjIG9uIGMub2lkID0gbC5yZWxhdGlvbgorIHdoZXJlIGwucGlk ID0gcGdfYmFja2VuZF9waWQoKQorICAgYW5kIGMucmVsbmFtZSBsaWtlICdwcnVuZWxvY2tfcF8n Cisgb3JkZXIgYnkgYy5yZWxuYW1lOworICAgcmVsbmFtZSAgICAKKy0tLS0tLS0tLS0tLS0tCisg cHJ1bmVsb2NrX3AxCisgcHJ1bmVsb2NrX3AyCisgcHJ1bmVsb2NrX3AzCisoMyByb3dzKQorCitj b21taXQ7CitkZWFsbG9jYXRlIHBydW5lbG9ja19xOworcmVzZXQgZW5hYmxlX3BhcnRpdGlvbl9w cnVuaW5nOworLS0KKy0tIFZlcmlmeSBmaXJzdFJlc3VsdFJlbHMgaGFuZGxpbmcgd2l0aCBtdWx0 aXBsZSBNb2RpZnlUYWJsZSBub2RlcworLS0gKHdyaXRhYmxlIENURXMpIHRhcmdldGluZyBhIHBh cnRpdGlvbmVkIHRhYmxlLiAgV2hlbiBhIHBydW5pbmcKKy0tIHBhcmFtZXRlciBtYXRjaGVzIG5v IHBhcnRpdGlvbiwgYWxsIHJlc3VsdCByZWxhdGlvbnMgYXJlIHBydW5lZAorLS0gYW5kIHRoZSBl eGVjdXRvciBtdXN0IHN0aWxsIGZpbmQgYSB1c2FibGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uCist LSBmb3IgZWFjaCBNb2RpZnlUYWJsZSBub2RlLgorLS0KK3ByZXBhcmUgcHJ1bmVsb2NrX210X3Eg KGludCwgaW50KSBhcworICB3aXRoIHVwZDEgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9 IGEpLAorICAgICAgIHVwZDIgYXMgKHVwZGF0ZSBwcnVuZWxvY2tfcCBzZXQgYSA9IGEgd2hlcmUg YSA9ICQyKQorICB1cGRhdGUgcHJ1bmVsb2NrX3Agc2V0IGEgPSBhIHdoZXJlIGEgPSAkMTsKKy0t IEZvcmNlIGdlbmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRl IHBydW5lbG9ja19tdF9xKDEsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gcHJ1bmVsb2NrX3AK KyAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2NrX3BfMQorICAgQ1RFIHVwZDEKKyAg ICAgLT4gIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF8zCisgICAgICAgICAgIFVw ZGF0ZSBvbiBwcnVuZWxvY2tfcDEgcHJ1bmVsb2NrX3BfNAorICAgICAgICAgICBVcGRhdGUgb24g cHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzUKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9j a19wMyBwcnVuZWxvY2tfcF82CisgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydW5lbG9ja19wMSBwcnVuZWxvY2tfcF80CisgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfNQorICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1bmVsb2NrX3AzIHBydW5lbG9ja19wXzYKKyAg IENURSB1cGQyCisgICAgIC0+ICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AgcHJ1bmVsb2NrX3BfNwor ICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AyIHBydW5lbG9ja19wXzgKKyAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVsb2NrX3BfOAor ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gJDIpCisgICAtPiAgQXBwZW5kCisg ICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAyCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ1 bmVsb2NrX3AxIHBydW5lbG9ja19wXzEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSAkMSkK KygyMiByb3dzKQorCistLSBBbGwgcGFydGl0aW9ucyBwcnVuZWQ6IHZhbHVlIDQgbWF0Y2hlcyBu byBwYXJ0aXRpb24sIHNvIGVhY2gKKy0tIE1vZGlmeVRhYmxlIG11c3Qgc3RpbGwgaW5pdGlhbGl6 ZSBjb3JyZWN0bHkgd2l0aCBubyBtYXRjaGluZworLS0gcmVzdWx0IHJlbGF0aW9ucy4KK2V4cGxh aW4gKGNvc3RzIG9mZikgZXhlY3V0ZSBwcnVuZWxvY2tfbXRfcSg0LCA1KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg VXBkYXRlIG9uIHBydW5lbG9ja19wCisgICBDVEUgdXBkMQorICAgICAtPiAgVXBkYXRlIG9uIHBy dW5lbG9ja19wIHBydW5lbG9ja19wXzIKKyAgICAgICAgICAgVXBkYXRlIG9uIHBydW5lbG9ja19w MSBwcnVuZWxvY2tfcF8zCisgICAgICAgICAgIFVwZGF0ZSBvbiBwcnVuZWxvY2tfcDIgcHJ1bmVs b2NrX3BfNAorICAgICAgICAgICBVcGRhdGUgb24gcHJ1bmVsb2NrX3AzIHBydW5lbG9ja19wXzUK KyAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHJ1bmVsb2NrX3AxIHBydW5lbG9ja19wXzMKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydW5lbG9ja19wMiBwcnVuZWxvY2tfcF80CisgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwcnVuZWxvY2tfcDMgcHJ1bmVsb2NrX3BfNQorICAgQ1RFIHVwZDIKKyAgICAgLT4g IFVwZGF0ZSBvbiBwcnVuZWxvY2tfcCBwcnVuZWxvY2tfcF82CisgICAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMworICAgLT4gIEFwcGVuZAor ICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMworKDE2IHJvd3MpCisKK2RlYWxsb2NhdGUgcHJ1 bmVsb2NrX210X3E7Citkcm9wIHRhYmxlIHBydW5lbG9ja19wOworLS0KKy0tIFZlcmlmeSB0aGF0 IHBydW5pbmctYXdhcmUgbG9ja2luZyBmYWxscyBiYWNrIHRvIGxvY2tpbmcgYWxsCistLSBwYXJ0 aXRpb25zIGZvciBtdWx0aS1zdGF0ZW1lbnQgQ2FjaGVkUGxhbnMuICBSdWxlIHJld3JpdGluZyBj YW4KKy0tIGV4cGFuZCBhIHNpbmdsZSBzdGF0ZW1lbnQgaW50byBtdWx0aXBsZSBQbGFubmVkU3Rt dHMsIGFuZCBsYXRlcgorLS0gc3RhdGVtZW50cyBtdXN0IG5vdCBoYXZlIHRoZWlyIHBydW5pbmcg ZXZhbHVhdGVkIGJlZm9yZSBlYXJsaWVyCistLSBvbmVzIGhhdmUgZXhlY3V0ZWQsIHNpbmNlIEND SSBiZXR3ZWVuIHN0YXRlbWVudHMgY2FuIGNoYW5nZSB3aGF0CistLSBwcnVuaW5nIGV4cHJlc3Np b25zIHNlZS4KKy0tCitjcmVhdGUgdGFibGUgcHJ1bmVfY29uZmlnICh2YWwgaW50KTsKK2luc2Vy dCBpbnRvIHBydW5lX2NvbmZpZyB2YWx1ZXMgKDEpOworY3JlYXRlIHRhYmxlIG11bHRpc3RtdF9w dCAoYSBpbnQsIGIgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgbXVs dGlzdG10X3B0XzEgcGFydGl0aW9uIG9mIG11bHRpc3RtdF9wdCBmb3IgdmFsdWVzIGluICgxKTsK K2NyZWF0ZSB0YWJsZSBtdWx0aXN0bXRfcHRfMiBwYXJ0aXRpb24gb2YgbXVsdGlzdG10X3B0IGZv ciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0IGludG8gbXVsdGlzdG10X3B0IHZhbHVlcyAoMSwgMCks ICgyLCAwKTsKK2NyZWF0ZSBmdW5jdGlvbiBnZXRfcHJ1bmVfdmFsKCkgcmV0dXJucyBpbnQgYXMg JCQKKyAgc2VsZWN0IHZhbCBmcm9tIHBydW5lX2NvbmZpZzsKKyQkIGxhbmd1YWdlIHNxbCBzdGFi bGU7CitjcmVhdGUgcnVsZSBjb25maWdfdXBkX3J1bGUgYXMgb24gdXBkYXRlIHRvIG11bHRpc3Rt dF9wdAorICBkbyBhbHNvIHVwZGF0ZSBwcnVuZV9jb25maWcgc2V0IHZhbCA9IDI7CitzZXQgcGxh bl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKK3ByZXBhcmUgbXVsdGlfcSBhcyB1 cGRhdGUgbXVsdGlzdG10X3B0IHNldCBiID0gYiArIDEgd2hlcmUgYSA9IGdldF9wcnVuZV92YWwo KTsKKy0tIGZpcnN0IGV4ZWN1dGUgY3JlYXRlcyB0aGUgZ2VuZXJpYyBwbGFuCitleGVjdXRlIG11 bHRpX3E7CistLSByZXNldCBmb3IgdGhlIHJlYWwgdGVzdAordXBkYXRlIHBydW5lX2NvbmZpZyBz ZXQgdmFsID0gMTsKK3VwZGF0ZSBtdWx0aXN0bXRfcHQgc2V0IGIgPSAwOworLS0gc2Vjb25kIGV4 ZWN1dGUgcmV1c2VzIHRoZSBwbGFuOyBwcnVuaW5nLWF3YXJlIGxvY2tpbmcga2lja3MgaW4KK2V4 ZWN1dGUgbXVsdGlfcTsKK3NlbGVjdCAqIGZyb20gbXVsdGlzdG10X3B0IG9yZGVyIGJ5IGE7Cisg YSB8IGIgCistLS0rLS0tCisgMSB8IDAKKyAyIHwgMQorKDIgcm93cykKKworZGVhbGxvY2F0ZSBt dWx0aV9xOworZHJvcCBydWxlIGNvbmZpZ191cGRfcnVsZSBvbiBtdWx0aXN0bXRfcHQ7Citkcm9w IGZ1bmN0aW9uIGdldF9wcnVuZV92YWw7Citkcm9wIHRhYmxlIG11bHRpc3RtdF9wdCwgcHJ1bmVf Y29uZmlnOworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w bGFuY2FjaGUub3V0CmluZGV4IGQ1ODUzNGNhMWNkLi41NDA3NzI5NGRjZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wbGFuY2FjaGUub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGxhbmNhY2hlLm91dApAQCAtNDAyLDMgKzQwMiw2NiBAQCBzZWxlY3Qg bmFtZSwgZ2VuZXJpY19wbGFucywgY3VzdG9tX3BsYW5zIGZyb20gcGdfcHJlcGFyZWRfc3RhdGVt ZW50cwogKDEgcm93KQogCiBkcm9wIHRhYmxlIHRlc3RfbW9kZTsKKy0tIFRoaXMgZXhlcmNpc2Vz IHRoZSBDYWNoZWRQbGFuUHJlcENsZWFudXAoKSBwYXRoLCB3aGljaCBtdXN0IGZyZWUKKy0tIHRo ZSBFU3RhdGUgY3JlYXRlZCBieSBFeGVjdXRvclByZXAoKSB3aGVuIHRoZSBwbGFuIGlzIGludmFs aWRhdGVkCistLSBiZWZvcmUgZXhlY3V0aW9uIGJlZ2lucy4gIFRoZSBwcnVuaW5nIGV4cHJlc3Np b24gdXNlcyBhIHN0YWJsZSBTUUwKKy0tIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYSB2b2xhdGlsZSBw bHBnc3FsIGZ1bmN0aW9uLiAgVGhhdCBmdW5jdGlvbgorLS0gcGVyZm9ybXMgRERMIG9uIGEgcGFy dGl0aW9uIHdoZW4gYSBzZXBhcmF0ZSAic2lnbmFsIiB0YWJsZSBzYXlzIHRvCistLSBkbyBzby4g IFRoZSBzZWNvbmQgRVhFQ1VURSBzaG91bGQgcmVwbGFuIGNsZWFubHkgYWZ0ZXIgdGhlIERETC4K K3NldCBwbGFuX2NhY2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFuOworY3JlYXRlIHRhYmxl IGludmFsX2R1cmluZ19wcnVuaW5nX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7Citj cmVhdGUgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcDEgcGFydGl0aW9uIG9mIGludmFsX2R1 cmluZ19wcnVuaW5nX3AgZm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgaW52YWxfZHVy aW5nX3BydW5pbmdfcDIgcGFydGl0aW9uIG9mIGludmFsX2R1cmluZ19wcnVuaW5nX3AgZm9yIHZh bHVlcyBpbiAoMik7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHZhbHVlcyAo MSksICgyKTsKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgKGNyZWF0 ZV9pZHggYm9vbCBub3QgbnVsbCk7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19z aWduYWwgdmFsdWVzIChmYWxzZSk7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBpbnZhbGlk YXRlX3BsYW5jYWNoZV9mdW5jKCkgcmV0dXJucyBpbnQKK2FzICQkCitkZWNsYXJlCisJY3JlYXRl X2luZGV4IGJvb2w7CitiZWdpbgorCS0tIFBlcmZvcm0gRERMIG9uIGEgcGFydGl0aW9uIGlmIGFz a2VkIHRvCisJc2VsZWN0IGNyZWF0ZV9pZHggaW50byBjcmVhdGVfaW5kZXggZnJvbSBpbnZhbF9k dXJpbmdfcHJ1bmluZ19zaWduYWwgZm9yIHVwZGF0ZTsKKwlpZiBjcmVhdGVfaW5kZXggPSB0cnVl IHRoZW4KKwkJcmFpc2Ugbm90aWNlICdjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52YWxf ZHVyaW5nX3BydW5pbmdfcDEnOworCQljcmVhdGUgaW5kZXggb24gaW52YWxfZHVyaW5nX3BydW5p bmdfcDEgKGEpOworCQl1cGRhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVh dGVfaWR4ID0gZmFsc2U7CisJZW5kIGlmOworCS0tIHZhbHVlIHRoYXQgcHJ1bmluZyB3aWxsIG1h dGNoIGFnYWluc3QgcGFydGl0aW9uIGJvdW5kcworCXJldHVybiAxOworZW5kOworJCQgbGFuZ3Vh Z2UgcGxwZ3NxbCB2b2xhdGlsZTsKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIHN0YWJsZV9w cnVuaW5nX3ZhbCgpIHJldHVybnMgaW50IGFzICQkCisJc2VsZWN0IGludmFsaWRhdGVfcGxhbmNh Y2hlX2Z1bmMoKTsKKyQkIGxhbmd1YWdlIHNxbCBzdGFibGU7CitwcmVwYXJlIGludmFsX2R1cmlu Z19wcnVuaW5nX3EgYXMgc2VsZWN0ICogZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIHdoZXJl IGEgPSBzdGFibGVfcHJ1bmluZ192YWwoKTsKKy0tIEJ1aWxkIGEgZ2VuZXJpYyBwbGFuIGFuZCBy dW4gcHJ1bmluZyBvbmNlLCBidXQgZG9uJ3Qgc2V0IHRoZSBzaWduYWwKKy0tIGZvciBpbnZhbGlk YXRlX3BsYW5jYWNoZV9mdW5jKCkgdG8gcGVyZm9ybSB0aGUgRERMLgorZXhwbGFpbiAodmVyYm9z ZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3Zl ZDogMQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5pbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSBp bnZhbF9kdXJpbmdfcHJ1bmluZ19wXzEKKyAgICAgICAgIE91dHB1dDogaW52YWxfZHVyaW5nX3By dW5pbmdfcF8xLmEKKyAgICAgICAgIEZpbHRlcjogKGludmFsX2R1cmluZ19wcnVuaW5nX3BfMS5h ID0gc3RhYmxlX3BydW5pbmdfdmFsKCkpCisoNSByb3dzKQorCistLSBSZXVzZSB0aGUgZ2VuZXJp YyBwbGFuLiAgTWFrZSBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jKCkgcGVyZm9ybSBEREwKKy0t IGR1cmluZyB0aGlzIGV4ZWN1dGlvbiwgd2hpY2ggc2hvdWxkIGZvcmNlIHJlcGxhbm5pbmcgd2l0 aG91dCBlcnJvcnMuCit1cGRhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVh dGVfaWR4ID0gdHJ1ZTsKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikgZXhlY3V0ZSBpbnZh bF9kdXJpbmdfcHJ1bmluZ19xOworTk9USUNFOiAgY3JlYXRpbmcgaW5kZXggb24gcGFydGl0aW9u IGludmFsX2R1cmluZ19wcnVuaW5nX3AxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3ZlZDogMQorICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5pbnZhbF9kdXJpbmdfcHJ1bmluZ19wMSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19w XzEKKyAgICAgICAgIE91dHB1dDogaW52YWxfZHVyaW5nX3BydW5pbmdfcF8xLmEKKyAgICAgICAg IEZpbHRlcjogKGludmFsX2R1cmluZ19wcnVuaW5nX3BfMS5hID0gc3RhYmxlX3BydW5pbmdfdmFs KCkpCisoNSByb3dzKQorCitkZWFsbG9jYXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7Citkcm9w IHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AsIGludmFsX2R1cmluZ19wcnVuaW5nX3NpZ25h bDsKK2Ryb3AgZnVuY3Rpb24gaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVuYywgc3RhYmxlX3BydW5p bmdfdmFsOworcmVzZXQgcGxhbl9jYWNoZV9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9wcnVuZS5zcWwKaW5kZXggMzU5YTkyMDgwNTYuLmE5ODg0NGQxNGY4IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTE1MTgsMyArMTUxOCwxMTkgQEAg c2VsZWN0ICogZnJvbSAoc2VsZWN0IGEsIGIgZnJvbSBwaHZfYm9vbHBhcnQpIHQKICAgZ3JvdXAg YnkgZ3JvdXBpbmcgc2V0cyAoYSwgYik7CiAKIGRyb3AgdGFibGUgcGh2X2Jvb2xwYXJ0OworCist LQorLS0gVmVyaWZ5IHRoYXQgcHJ1bmluZy1hd2FyZSBsb2NraW5nIHNraXBzIHBydW5lZCBwYXJ0 aXRpb25zCistLSB3aGVuIHJldXNpbmcgYSBnZW5lcmljIGNhY2hlZCBwbGFuLgorLS0KK3NldCBw bGFuX2NhY2hlX21vZGUgdG8gZm9yY2VfZ2VuZXJpY19wbGFuOworCitjcmVhdGUgdGFibGUgcHJ1 bmVsb2NrX3AgKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgcHJ1 bmVsb2NrX3AxIHBhcnRpdGlvbiBvZiBwcnVuZWxvY2tfcCBmb3IgdmFsdWVzIGluICgxKTsKK2Ny ZWF0ZSB0YWJsZSBwcnVuZWxvY2tfcDIgcGFydGl0aW9uIG9mIHBydW5lbG9ja19wIGZvciB2YWx1 ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHBydW5lbG9ja19wMyBwYXJ0aXRpb24gb2YgcHJ1bmVs b2NrX3AgZm9yIHZhbHVlcyBpbiAoMyk7CisKK3ByZXBhcmUgcHJ1bmVsb2NrX3EgKGludCkgYXMg c2VsZWN0ICogZnJvbSBwcnVuZWxvY2tfcCB3aGVyZSBhID0gJDE7CisKKy0tIEZvcmNlIGdlbmVy aWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRlIHBydW5lbG9ja19x KDEpOworCistLSBFeGVjdXRlIGFuZCBjaGVjayB3aGljaCBjaGlsZCBwYXJ0aXRpb25zIGFyZSBs b2NrZWQKK2JlZ2luOworZXhlY3V0ZSBwcnVuZWxvY2tfcSgxKTsKKworc2VsZWN0IGMucmVsbmFt ZQorICBmcm9tIHBnX2xvY2tzIGwKKyAgam9pbiBwZ19jbGFzcyBjIG9uIGMub2lkID0gbC5yZWxh dGlvbgorIHdoZXJlIGwucGlkID0gcGdfYmFja2VuZF9waWQoKQorICAgYW5kIGMucmVsbmFtZSBs aWtlICdwcnVuZWxvY2tfcF8nCisgb3JkZXIgYnkgYy5yZWxuYW1lOworY29tbWl0OworCitkZWFs bG9jYXRlIHBydW5lbG9ja19xOworCistLSBUdXJuIHBydW5pbmcgb2ZmCitzZXQgZW5hYmxlX3Bh cnRpdGlvbl9wcnVuaW5nIHRvIG9mZjsKKworcHJlcGFyZSBwcnVuZWxvY2tfcSAoaW50KSBhcyBz ZWxlY3QgKiBmcm9tIHBydW5lbG9ja19wIHdoZXJlIGEgPSAkMTsKKworLS0gRm9yY2UgZ2VuZXJp YyBwbGFuIGNyZWF0aW9uCitleHBsYWluIChjb3N0cyBvZmYpIGV4ZWN1dGUgcHJ1bmVsb2NrX3Eo MSk7CisKKy0tIEV4ZWN1dGUgYW5kIGNoZWNrIHdoaWNoIGNoaWxkIHBhcnRpdGlvbnMgYXJlIGxv Y2tlZAorYmVnaW47CitleGVjdXRlIHBydW5lbG9ja19xKDEpOworCitzZWxlY3QgYy5yZWxuYW1l CisgIGZyb20gcGdfbG9ja3MgbAorICBqb2luIHBnX2NsYXNzIGMgb24gYy5vaWQgPSBsLnJlbGF0 aW9uCisgd2hlcmUgbC5waWQgPSBwZ19iYWNrZW5kX3BpZCgpCisgICBhbmQgYy5yZWxuYW1lIGxp a2UgJ3BydW5lbG9ja19wXycKKyBvcmRlciBieSBjLnJlbG5hbWU7Citjb21taXQ7CisKK2RlYWxs b2NhdGUgcHJ1bmVsb2NrX3E7CityZXNldCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CisKKy0t CistLSBWZXJpZnkgZmlyc3RSZXN1bHRSZWxzIGhhbmRsaW5nIHdpdGggbXVsdGlwbGUgTW9kaWZ5 VGFibGUgbm9kZXMKKy0tICh3cml0YWJsZSBDVEVzKSB0YXJnZXRpbmcgYSBwYXJ0aXRpb25lZCB0 YWJsZS4gIFdoZW4gYSBwcnVuaW5nCistLSBwYXJhbWV0ZXIgbWF0Y2hlcyBubyBwYXJ0aXRpb24s IGFsbCByZXN1bHQgcmVsYXRpb25zIGFyZSBwcnVuZWQKKy0tIGFuZCB0aGUgZXhlY3V0b3IgbXVz dCBzdGlsbCBmaW5kIGEgdXNhYmxlIGZpcnN0IHJlc3VsdCByZWxhdGlvbgorLS0gZm9yIGVhY2gg TW9kaWZ5VGFibGUgbm9kZS4KKy0tCitwcmVwYXJlIHBydW5lbG9ja19tdF9xIChpbnQsIGludCkg YXMKKyAgd2l0aCB1cGQxIGFzICh1cGRhdGUgcHJ1bmVsb2NrX3Agc2V0IGEgPSBhKSwKKyAgICAg ICB1cGQyIGFzICh1cGRhdGUgcHJ1bmVsb2NrX3Agc2V0IGEgPSBhIHdoZXJlIGEgPSAkMikKKyAg dXBkYXRlIHBydW5lbG9ja19wIHNldCBhID0gYSB3aGVyZSBhID0gJDE7CisKKy0tIEZvcmNlIGdl bmVyaWMgcGxhbiBjcmVhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKSBleGVjdXRlIHBydW5lbG9j a19tdF9xKDEsIDIpOworCistLSBBbGwgcGFydGl0aW9ucyBwcnVuZWQ6IHZhbHVlIDQgbWF0Y2hl cyBubyBwYXJ0aXRpb24sIHNvIGVhY2gKKy0tIE1vZGlmeVRhYmxlIG11c3Qgc3RpbGwgaW5pdGlh bGl6ZSBjb3JyZWN0bHkgd2l0aCBubyBtYXRjaGluZworLS0gcmVzdWx0IHJlbGF0aW9ucy4KK2V4 cGxhaW4gKGNvc3RzIG9mZikgZXhlY3V0ZSBwcnVuZWxvY2tfbXRfcSg0LCA1KTsKKworZGVhbGxv Y2F0ZSBwcnVuZWxvY2tfbXRfcTsKK2Ryb3AgdGFibGUgcHJ1bmVsb2NrX3A7CisKKy0tCistLSBW ZXJpZnkgdGhhdCBwcnVuaW5nLWF3YXJlIGxvY2tpbmcgZmFsbHMgYmFjayB0byBsb2NraW5nIGFs bAorLS0gcGFydGl0aW9ucyBmb3IgbXVsdGktc3RhdGVtZW50IENhY2hlZFBsYW5zLiAgUnVsZSBy ZXdyaXRpbmcgY2FuCistLSBleHBhbmQgYSBzaW5nbGUgc3RhdGVtZW50IGludG8gbXVsdGlwbGUg UGxhbm5lZFN0bXRzLCBhbmQgbGF0ZXIKKy0tIHN0YXRlbWVudHMgbXVzdCBub3QgaGF2ZSB0aGVp ciBwcnVuaW5nIGV2YWx1YXRlZCBiZWZvcmUgZWFybGllcgorLS0gb25lcyBoYXZlIGV4ZWN1dGVk LCBzaW5jZSBDQ0kgYmV0d2VlbiBzdGF0ZW1lbnRzIGNhbiBjaGFuZ2Ugd2hhdAorLS0gcHJ1bmlu ZyBleHByZXNzaW9ucyBzZWUuCistLQorY3JlYXRlIHRhYmxlIHBydW5lX2NvbmZpZyAodmFsIGlu dCk7CitpbnNlcnQgaW50byBwcnVuZV9jb25maWcgdmFsdWVzICgxKTsKKworY3JlYXRlIHRhYmxl IG11bHRpc3RtdF9wdCAoYSBpbnQsIGIgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVh dGUgdGFibGUgbXVsdGlzdG10X3B0XzEgcGFydGl0aW9uIG9mIG11bHRpc3RtdF9wdCBmb3IgdmFs dWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBtdWx0aXN0bXRfcHRfMiBwYXJ0aXRpb24gb2YgbXVs dGlzdG10X3B0IGZvciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0IGludG8gbXVsdGlzdG10X3B0IHZh bHVlcyAoMSwgMCksICgyLCAwKTsKKworY3JlYXRlIGZ1bmN0aW9uIGdldF9wcnVuZV92YWwoKSBy ZXR1cm5zIGludCBhcyAkJAorICBzZWxlY3QgdmFsIGZyb20gcHJ1bmVfY29uZmlnOworJCQgbGFu Z3VhZ2Ugc3FsIHN0YWJsZTsKKworY3JlYXRlIHJ1bGUgY29uZmlnX3VwZF9ydWxlIGFzIG9uIHVw ZGF0ZSB0byBtdWx0aXN0bXRfcHQKKyAgZG8gYWxzbyB1cGRhdGUgcHJ1bmVfY29uZmlnIHNldCB2 YWwgPSAyOworCitzZXQgcGxhbl9jYWNoZV9tb2RlIHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKK3By ZXBhcmUgbXVsdGlfcSBhcyB1cGRhdGUgbXVsdGlzdG10X3B0IHNldCBiID0gYiArIDEgd2hlcmUg YSA9IGdldF9wcnVuZV92YWwoKTsKKy0tIGZpcnN0IGV4ZWN1dGUgY3JlYXRlcyB0aGUgZ2VuZXJp YyBwbGFuCitleGVjdXRlIG11bHRpX3E7CistLSByZXNldCBmb3IgdGhlIHJlYWwgdGVzdAordXBk YXRlIHBydW5lX2NvbmZpZyBzZXQgdmFsID0gMTsKK3VwZGF0ZSBtdWx0aXN0bXRfcHQgc2V0IGIg PSAwOworLS0gc2Vjb25kIGV4ZWN1dGUgcmV1c2VzIHRoZSBwbGFuOyBwcnVuaW5nLWF3YXJlIGxv Y2tpbmcga2lja3MgaW4KK2V4ZWN1dGUgbXVsdGlfcTsKK3NlbGVjdCAqIGZyb20gbXVsdGlzdG10 X3B0IG9yZGVyIGJ5IGE7CisKK2RlYWxsb2NhdGUgbXVsdGlfcTsKK2Ryb3AgcnVsZSBjb25maWdf dXBkX3J1bGUgb24gbXVsdGlzdG10X3B0OworZHJvcCBmdW5jdGlvbiBnZXRfcHJ1bmVfdmFsOwor ZHJvcCB0YWJsZSBtdWx0aXN0bXRfcHQsIHBydW5lX2NvbmZpZzsKK3Jlc2V0IHBsYW5fY2FjaGVf bW9kZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5jYWNoZS5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCmluZGV4IGFlZDM4OGQwM2ExLi45MGI2 YzVmODJiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbmNhY2hlLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFuY2FjaGUuc3FsCkBAIC0yMjgsMyArMjI4LDU1 IEBAIHNlbGVjdCBuYW1lLCBnZW5lcmljX3BsYW5zLCBjdXN0b21fcGxhbnMgZnJvbSBwZ19wcmVw YXJlZF9zdGF0ZW1lbnRzCiAgIHdoZXJlICBuYW1lID0gJ3Rlc3RfbW9kZV9wcCc7CiAKIGRyb3Ag dGFibGUgdGVzdF9tb2RlOworCistLSBUaGlzIGV4ZXJjaXNlcyB0aGUgQ2FjaGVkUGxhblByZXBD bGVhbnVwKCkgcGF0aCwgd2hpY2ggbXVzdCBmcmVlCistLSB0aGUgRVN0YXRlIGNyZWF0ZWQgYnkg RXhlY3V0b3JQcmVwKCkgd2hlbiB0aGUgcGxhbiBpcyBpbnZhbGlkYXRlZAorLS0gYmVmb3JlIGV4 ZWN1dGlvbiBiZWdpbnMuICBUaGUgcHJ1bmluZyBleHByZXNzaW9uIHVzZXMgYSBzdGFibGUgU1FM CistLSBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdm9sYXRpbGUgcGxwZ3NxbCBmdW5jdGlvbi4gIFRo YXQgZnVuY3Rpb24KKy0tIHBlcmZvcm1zIERETCBvbiBhIHBhcnRpdGlvbiB3aGVuIGEgc2VwYXJh dGUgInNpZ25hbCIgdGFibGUgc2F5cyB0bworLS0gZG8gc28uICBUaGUgc2Vjb25kIEVYRUNVVEUg c2hvdWxkIHJlcGxhbiBjbGVhbmx5IGFmdGVyIHRoZSBEREwuCitzZXQgcGxhbl9jYWNoZV9tb2Rl IHRvIGZvcmNlX2dlbmVyaWNfcGxhbjsKK2NyZWF0ZSB0YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmlu Z19wIChhIGludCkgcGFydGl0aW9uIGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIGludmFsX2R1 cmluZ19wcnVuaW5nX3AxIHBhcnRpdGlvbiBvZiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIGZvciB2 YWx1ZXMgaW4gKDEpOworY3JlYXRlIHRhYmxlIGludmFsX2R1cmluZ19wcnVuaW5nX3AyIHBhcnRp dGlvbiBvZiBpbnZhbF9kdXJpbmdfcHJ1bmluZ19wIGZvciB2YWx1ZXMgaW4gKDIpOworaW5zZXJ0 IGludG8gaW52YWxfZHVyaW5nX3BydW5pbmdfcCB2YWx1ZXMgKDEpLCAoMik7CisKK2NyZWF0ZSB0 YWJsZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgKGNyZWF0ZV9pZHggYm9vbCBub3QgbnVs bCk7CitpbnNlcnQgaW50byBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgdmFsdWVzIChmYWxz ZSk7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5j KCkgcmV0dXJucyBpbnQKK2FzICQkCitkZWNsYXJlCisJY3JlYXRlX2luZGV4IGJvb2w7CitiZWdp bgorCS0tIFBlcmZvcm0gRERMIG9uIGEgcGFydGl0aW9uIGlmIGFza2VkIHRvCisJc2VsZWN0IGNy ZWF0ZV9pZHggaW50byBjcmVhdGVfaW5kZXggZnJvbSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWdu YWwgZm9yIHVwZGF0ZTsKKwlpZiBjcmVhdGVfaW5kZXggPSB0cnVlIHRoZW4KKwkJcmFpc2Ugbm90 aWNlICdjcmVhdGluZyBpbmRleCBvbiBwYXJ0aXRpb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEn OworCQljcmVhdGUgaW5kZXggb24gaW52YWxfZHVyaW5nX3BydW5pbmdfcDEgKGEpOworCQl1cGRh dGUgaW52YWxfZHVyaW5nX3BydW5pbmdfc2lnbmFsIHNldCBjcmVhdGVfaWR4ID0gZmFsc2U7CisJ ZW5kIGlmOworCS0tIHZhbHVlIHRoYXQgcHJ1bmluZyB3aWxsIG1hdGNoIGFnYWluc3QgcGFydGl0 aW9uIGJvdW5kcworCXJldHVybiAxOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbCB2b2xhdGls ZTsKKworY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gc3RhYmxlX3BydW5pbmdfdmFsKCkgcmV0 dXJucyBpbnQgYXMgJCQKKwlzZWxlY3QgaW52YWxpZGF0ZV9wbGFuY2FjaGVfZnVuYygpOworJCQg bGFuZ3VhZ2Ugc3FsIHN0YWJsZTsKKworcHJlcGFyZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19xIGFz IHNlbGVjdCAqIGZyb20gaW52YWxfZHVyaW5nX3BydW5pbmdfcCB3aGVyZSBhID0gc3RhYmxlX3By dW5pbmdfdmFsKCk7CisKKy0tIEJ1aWxkIGEgZ2VuZXJpYyBwbGFuIGFuZCBydW4gcHJ1bmluZyBv bmNlLCBidXQgZG9uJ3Qgc2V0IHRoZSBzaWduYWwKKy0tIGZvciBpbnZhbGlkYXRlX3BsYW5jYWNo ZV9mdW5jKCkgdG8gcGVyZm9ybSB0aGUgRERMLgorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2Zm KSBleGVjdXRlIGludmFsX2R1cmluZ19wcnVuaW5nX3E7CisKKy0tIFJldXNlIHRoZSBnZW5lcmlj IHBsYW4uICBNYWtlIGludmFsaWRhdGVfcGxhbmNhY2hlX2Z1bmMoKSBwZXJmb3JtIERETAorLS0g ZHVyaW5nIHRoaXMgZXhlY3V0aW9uLCB3aGljaCBzaG91bGQgZm9yY2UgcmVwbGFubmluZyB3aXRo b3V0IGVycm9ycy4KK3VwZGF0ZSBpbnZhbF9kdXJpbmdfcHJ1bmluZ19zaWduYWwgc2V0IGNyZWF0 ZV9pZHggPSB0cnVlOworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKSBleGVjdXRlIGludmFs X2R1cmluZ19wcnVuaW5nX3E7CisKK2RlYWxsb2NhdGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcTsK K2Ryb3AgdGFibGUgaW52YWxfZHVyaW5nX3BydW5pbmdfcCwgaW52YWxfZHVyaW5nX3BydW5pbmdf c2lnbmFsOworZHJvcCBmdW5jdGlvbiBpbnZhbGlkYXRlX3BsYW5jYWNoZV9mdW5jLCBzdGFibGVf cHJ1bmluZ192YWw7CisKK3Jlc2V0IHBsYW5fY2FjaGVfbW9kZTsKLS0gCjIuNDcuMwoK --000000000000aa729e0652f107bd--