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 1wZ7Kw-000mlq-2S for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 13:26:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZ7Ku-00C6Ms-0a for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 13:26:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wZ7Kt-00C6Mj-1f for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 13:26:43 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wZ7Ko-00000000TtR-1drK for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 13:26:42 +0000 Received: from oss.nttdata.com (oss.nttdata.com [49.212.34.109]) by oss.nttdata.com (Postfix) with ESMTPSA id A5DEE2020284; Mon, 15 Jun 2026 22:26:32 +0900 (JST) MIME-Version: 1.0 Date: Mon, 15 Jun 2026 22:26:32 +0900 From: torikoshia To: Lukas Fittl Cc: pgsql-hackers@lists.postgresql.org, Atsushi Torikoshi , samimseih@gmail.com, destrex271@gmail.com, robertmhaas@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <2aedcb5e8120bfdee994775e660f8718@oss.nttdata.com> <174144854199.294105.9417032645816235284.pgcf@coridan.postgresql.org> <784224198089cbe3cc3825332f195475@oss.nttdata.com> <8de51267059a43f53848c69a2bd9bc3b@oss.nttdata.com> <8f99161d84373ea46fb305ad75affa28@oss.nttdata.com> <01962a4f656356fb2899a0c4ace83019@oss.nttdata.com> <6143f00af4bfdba95a85cf866f4acb41@oss.nttdata.com> <9886a201a5da64eab1472db6c70473a8@oss.nttdata.com> <7c7ca3bc345b28fa4b903bd49fdce519@oss.nttdata.com> <5fbde7ee5e41cc2ad6012bf273a9539d@oss.nttdata.com> <9ce54f35e3802ad53156b926670f5880@oss.nttdata.com> <900f24c08ea77d4ca6871c39e2b898d3@oss.nttdata.com> <3791a2338d2bc66bd0c94cb49a7ed623@oss.nttdata.com> <38258602a885453e331fa64e970d959d@oss.nttdata.com> Message-ID: <4372fb202217256483a015f662d2b474@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com Content-Type: multipart/mixed; boundary="=_140a30e4bb38362f1e20cf672b3ba39e" X-Virus-Scanned: clamav-milter 1.4.3 at oss.nttdata.com X-Virus-Status: Clean List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_140a30e4bb38362f1e20cf672b3ba39e Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2026-06-08 15:08, Lukas Fittl wrote: Thanks for your review and update again. > Hi, > > On Mon, Mar 16, 2026 at 8:14 AM torikoshia > wrote: >> >> Rebased the patch. > > I was reminded about this patch at PG DATA in Chicago last week, and > figured I'd see if I can contribute a review / help move this forward > in PG20. > > First of all, find attached a v54 that is rebased over changes late in > the PG19 cycle, with other minimal fixes: > > - Add a missing call to explain_per_plan_hook in ExplainStringAssemble > (this hook was newly added after your last patch version) > - The TAP test number (11) was overlapping with an existing test > (011_lock_stats) that was recently added, renumbered to > 014_pg_log_query_plan.pl > - Add missing reference for the TAP test in Meson builds > - Adjust auto_explain.c to not include "dynamic_explain.h" (its not > needed, ExplainStringAssemble is defined in explain.h which is already > included) > - pgindent run to fix minor whitespace issues in dynamic_explain.c Agreed on those changes. > I've also read through the other thread re: progressive explain, and > it seems like this infrastructure here to log the current plan > (without ANALYZE) would be required in any case (and I think the > overall approach makes sense), and then separately we can solve the > progressive explain's parallel worker and other design issues around > execution statistics. > > In terms of code review: > >> diff --git a/src/backend/access/transam/xact.c >> b/src/backend/access/transam/xact.c >> index aafc53e0164..09e51b3d75a 100644 >> --- a/src/backend/access/transam/xact.c >> +++ b/src/backend/access/transam/xact.c >> @@ -37,6 +37,7 @@ >> #include "catalog/pg_enum.h" >> #include "catalog/storage.h" >> #include "commands/async.h" >> +#include "commands/dynamic_explain.h" >> #include "commands/tablecmds.h" >> #include "commands/trigger.h" >> #include "common/pg_prng.h" >> @@ -217,6 +218,7 @@ typedef struct TransactionStateData >> bool parallelChildXact; /* is any parent transaction >> parallel? */ >> bool chain; /* start a new block after this one >> */ >> bool topXidLogged; /* for a subxact: is top-level XID >> logged? */ >> + QueryDesc *queryDesc; /* my current QueryDesc */ >> struct TransactionStateData *parent; /* back link to parent */ >> } TransactionStateData; > > Somehow putting the current QueryDesc into TransactionStateData seemed > a bit odd to me, and I briefly experimented with putting this into the > active portal instead - but that doesn't work with subtransactions > that don't have their own portal, which presumably is how you landed > on this design. So I think this makes sense as-is, given those > challenges. > >> @@ -2953,6 +2977,9 @@ AbortTransaction(void) >> /* Reset snapshot export state. */ >> SnapBuildResetExportedSnapshotState(); >> >> + /* Reset current query plan state used for logging. */ >> + SetCurrentQueryDesc(NULL); >> + >> /* >> * If this xact has started any unfinished parallel operation, >> clean up >> * its workers and exit parallel mode. Don't warn about leaked >> resources. >> @@ -5352,6 +5379,13 @@ AbortSubTransaction(void) >> /* Reset logical streaming state. */ >> ResetLogicalStreamingState(); >> >> + /* >> + * Reset current query plan state used for logging. Note that >> even after >> + * this reset, it's still possible to obtain the parent >> transaction's >> + * query plans, since they are preserved in >> standard_ExecutorRun(). >> + */ >> + SetCurrentQueryDesc(NULL); >> + >> /* >> * No need for SnapBuildResetExportedSnapshotState() here, >> snapshot >> * exports are not supported in subtransactions. > > It seems better to me if we avoided overly specific code comments in > xact.c that talk about plan logging behavior, i.e. look at this more > as a general purpose "what's the current queryDesc for the current > transaction" facility. Removed specific comments about plan logging. >> diff --git a/src/backend/executor/execProcnode.c >> b/src/backend/executor/execProcnode.c >> index 7e40b852517..96cb22daf80 100644 >> --- a/src/backend/executor/execProcnode.c >> +++ b/src/backend/executor/execProcnode.c >> @@ -441,27 +443,43 @@ ExecSetExecProcNode(PlanState *node, >> ExecProcNodeMtd function) >> ... >> static TupleTableSlot * >> ExecProcNodeFirst(PlanState *node) >> { >> ... >> + if (LogQueryPlanPending) >> + LogQueryPlan(); >> + >> /* >> * If instrumentation is required, change the wrapper to one that >> just >> * does instrumentation. Otherwise we can dispense with all >> wrappers and >> * have ExecProcNode() directly call the relevant function from >> now on. >> */ >> - if (node->instrument) >> + else if (node->instrument) >> node->ExecProcNode = ExecProcNodeInstr; >> else >> node->ExecProcNode = node->ExecProcNodeReal; > > I'm not sure if this was discussed earlier already, but I find the > flow here a bit hard to follow in regards to how we execute the actual > node function again. > > Specifically, since this uses "else if" we don't touch ExecProcNode > when LogQueryPlanPending = true, and since node->ExecProcNode still > points to ExecProcNodeFirst, the function basically calls itself. On > the second go around we assume that LogQueryPlanPending is no longer > set, so we get back to the intended ExecProcNode *if* > LogQueryPlanPending was set to false (which it is in LogQueryPlan, but > that's not easy to see from just that function). > > Why not do it like this: > > if (LogQueryPlanPending) > LogQueryPlan(); > > /* Unmodified existing code */ > if (node->instrument) > node->ExecProcNode = ExecProcNodeInstr; > else > node->ExecProcNode = node->ExecProcNodeReal; > Make sense. Modified it. I also fixed some typos in the attached patch. Thanks, -- Atsushi Torikoshi Seconded from NTT DATA CORPORATION to SRA OSS K.K. --=_140a30e4bb38362f1e20cf672b3ba39e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v55-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch Content-Disposition: attachment; filename=v55-0001-Add-function-to-log-the-plan-of-the-currently-ru.patch; size=39159 RnJvbSA2Njk4YWJmZTU2OWJjZDZiYTVlNzk5ODAwMWNkMTBlOWQxM2I0YmFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMTUgSnVuIDIwMjYgMjI6MTg6MjQgKzA5MDAKU3ViamVjdDog W1BBVENIIHY1NV0gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5 IHJ1bm5pbmcKCkN1cnJlbnRseSwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcXVlcnkgZXhlY3V0 aW9uIHRvIGZpbmlzaAp0byBrbm93IGl0cyBwbGFuIGVpdGhlciB1c2luZyBFWFBMQUlOIEFOQUxZ WkUgb3IgYXV0b19leHBsYWluLgpUaGlzIGlzIG5vdCBzbyBjb252ZW5pZW50LCBmb3IgZXhhbXBs ZSB3aGVuIGludmVzdGlnYXRpbmcKbG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBl bnZpcm9ubWVudHMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24sIHRoaXMgcGF0Y2ggYWRkcyBw Z19sb2dfcXVlcnlfcGxhbigpCmZ1bmN0aW9uIHRoYXQgcmVxdWVzdHMgdG8gbG9nIHRoZSBwbGFu IG9mIHRoZSBjdXJyZW50bHkKZXhlY3V0aW5nIHF1ZXJ5LgoKT24gcmVjZWlwdCBvZiB0aGUgcmVx dWVzdCwgRXhlY1Byb2NOb2RlcyBvZiB0aGUgY3VycmVudCBwbGFuCm5vZGUgYW5kIGl0cyBzdWJz aWRpYXJ5IG5vZGVzIGFyZSB3cmFwcGVkIHdpdGgKRXhlY1Byb2NOb2RlRmlyc3QsIHdoaWNoIGlt cGxlbGVtZW50cyBsb2dnaW5nIHF1ZXJ5IHBsYW4uCldoZW4gZXhlY3V0b3IgZXhlY3V0ZXMgdGhl IG9uZSBvZiB0aGUgd3JhcHBlZCBub2RlcywgdGhlCnF1ZXJ5IHBsYW4gaXMgbG9nZ2VkLgoKT3Vy IGluaXRpYWwgaWRlYSB3YXMgdG8gc2VuZCBhIHNpZ25hbCB0byB0aGUgdGFyZ2V0IGJhY2tlbmQK cHJvY2Vzcywgd2hpY2ggaW52b2tlcyBFWFBMQUlOIGxvZ2ljIGF0IHRoZSBuZXh0CkNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkgY2FsbC4gSG93ZXZlciwgd2UgcmVhbGl6ZWQgZHVyaW5nCnByb3RvdHlw aW5nIHRoYXQgRVhQTEFJTiBpcyBjb21wbGV4IGFuZCBtYXkgbm90IGJlIHNhZmVseQpleGVjdXRl ZCBhdCBhcmJpdHJhcnkgaW50ZXJydXB0IHBvaW50cy4KCkJ5IGRlZmF1bHQsIG9ubHkgc3VwZXJ1 c2VycyBhcmUgYWxsb3dlZCB0byByZXF1ZXN0IHRvIGxvZyB0aGUKcGxhbnMgYmVjYXVzZSBhbGxv d2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuCnVuYm91bmRlZCByYXRl IHdvdWxkIGNhdXNlIGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4KbGVhZCB0byBk ZW5pYWwgb2Ygc2VydmljZS4KClRvZG86IENvbnNpZGVyIHJlbW92aW5nIHRoZSBQSUQgZnJvbSB0 aGUgbG9nIG91dHB1dCBvZgpwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBhbmQgcGdf bG9nX3F1ZXJ5X3BsYW4oKS4KRm9yIGRldGFpbCwgc2VlIHRoZSBkaXNjdXNzaW9uOgpodHRwczov L3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBJTJCVGdtb1k4MXI3bnBUUzM0Tl81TUxB X3U2Z2hmb3I1SG9TYWFyNTN2ZVhVWXUxT3hRJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBjb250cmli L2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyAgICAgICAgICAgfCAgMjkgKy0tCiBkb2Mvc3Jj L3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwgICAgICAgICAgICAgfCAgMjQgKysrCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgICAgICAgICAgICAgfCAgMzQgKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jICAgICAgICB8IDE4OCArKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICA0 NCArKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgIDE3 ICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyAgICAgICAgICAgfCAxMjEg KysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAg ICB8ICAgNCArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICAg fCAgIDQgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICAgIHwg ICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmggICAgICAgICAgICAgICAgICAgICB8ICAg MyArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDcg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmggICAgICAgIHwgIDI1ICsr Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oICAgICAgICAgICAgICAgIHwgICA1ICsK IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogLi4uL3Rlc3Rf bWlzYy90LzAxNF9wZ19sb2dfcXVlcnlfcGxhbi5wbCAgICAgIHwgMTAxICsrKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0ICB8ICAzOCArKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgICAgICAgfCAgMzEgKysrCiAy NCBmaWxlcyBjaGFuZ2VkLCA2NDggaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDE0X3BnX2xv Z19xdWVyeV9wbGFuLnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19l eHBsYWluLmMgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwppbmRleCA5N2Nl NDk4ZDBjMS4uMDcwMTRjYWIzNjYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1 dG9fZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBA IC00NTEsMzIgKzQ1MSw5IEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURl c2MpCiAKIAkJCWFwcGx5X2V4dGVuc2lvbl9vcHRpb25zKGVzLCBleHRlbnNpb25fb3B0aW9ucyk7 CiAKLQkJCUV4cGxhaW5CZWdpbk91dHB1dChlcyk7Ci0JCQlFeHBsYWluUXVlcnlUZXh0KGVzLCBx dWVyeURlc2MpOwotCQkJRXhwbGFpblF1ZXJ5UGFyYW1ldGVycyhlcywgcXVlcnlEZXNjLT5wYXJh bXMsIGF1dG9fZXhwbGFpbl9sb2dfcGFyYW1ldGVyX21heF9sZW5ndGgpOwotCQkJRXhwbGFpblBy aW50UGxhbihlcywgcXVlcnlEZXNjKTsKLQkJCWlmIChlcy0+YW5hbHl6ZSAmJiBhdXRvX2V4cGxh aW5fbG9nX3RyaWdnZXJzKQotCQkJCUV4cGxhaW5QcmludFRyaWdnZXJzKGVzLCBxdWVyeURlc2Mp OwotCQkJaWYgKGVzLT5jb3N0cykKLQkJCQlFeHBsYWluUHJpbnRKSVRTdW1tYXJ5KGVzLCBxdWVy eURlc2MpOwotCQkJaWYgKGV4cGxhaW5fcGVyX3BsYW5faG9vaykKLQkJCQkoKmV4cGxhaW5fcGVy X3BsYW5faG9vaykgKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQsCi0JCQkJCQkJCQkJICBOVUxMLCBl cywKLQkJCQkJCQkJCQkgIHF1ZXJ5RGVzYy0+c291cmNlVGV4dCwKLQkJCQkJCQkJCQkgIHF1ZXJ5 RGVzYy0+cGFyYW1zLAotCQkJCQkJCQkJCSAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3F1ZXJ5RW52 KTsKLQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0JCQkvKiBSZW1vdmUgbGFzdCBsaW5lIGJy ZWFrICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3RyLT5kYXRhW2VzLT5zdHIt PmxlbiAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ZGF0YVstLWVzLT5zdHItPmxlbl0gPSAn XDAnOwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4gb2JqZWN0ICovCi0JCQlpZiAoYXV0 b19leHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNPTikKLQkJCXsKLQkJCQll cy0+c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5zdHItPmRhdGFbZXMtPnN0ci0+bGVuIC0g MV0gPSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluU3RyaW5nQXNzZW1ibGUoZXMsIHF1ZXJ5RGVzYywg YXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJCSAgYXV0b19leHBsYWluX2xvZ190cmln Z2VycywKKwkJCQkJCQkJICBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsK IAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24gdGhlIGV4aXN0aW5nIGxvZ2dpbmcgb2Yg Y29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21s IGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sCmluZGV4IDBlYWUxYzFmNjE2Li5i YTMxOWM5NDE2MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbApAQCAtMTg0LDYgKzE4NCwz MCBAQAogICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CiAKKyAgICAgIDxyb3c+ CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNf c2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2xv Z19xdWVyeV9wbGFuPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1 bmN0aW9uPnBnX2xvZ19xdWVyeV9wbGFuPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnBpZDwvcGFy YW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5ib29s ZWFuPC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAg IFJlcXVlc3RzIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgcXVlcnkgY3VycmVudGx5IHJ1bm5pbmcg b24gdGhlCisgICAgICAgIGJhY2tlbmQgd2l0aCBzcGVjaWZpZWQgcHJvY2VzcyBJRC4KKyAgICAg ICAgSXQgd2lsbCBiZSBsb2dnZWQgYXQgPGxpdGVyYWw+TE9HPC9saXRlcmFsPiBtZXNzYWdlIGxl dmVsIGFuZAorICAgICAgICB3aWxsIGFwcGVhciBpbiB0aGUgc2VydmVyIGxvZyBiYXNlZCBvbiB0 aGUgbG9nCisgICAgICAgIGNvbmZpZ3VyYXRpb24gc2V0IChTZWUgPHhyZWYgbGlua2VuZD0icnVu dGltZS1jb25maWctbG9nZ2luZyIvPgorICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiksIGJ1 dCB3aWxsIG5vdCBiZSBzZW50IHRvIHRoZSBjbGllbnQKKyAgICAgICAgcmVnYXJkbGVzcyBvZiA8 eHJlZiBsaW5rZW5kPSJndWMtY2xpZW50LW1pbi1tZXNzYWdlcyIvPi4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVzdHJpY3RlZCB0byBz dXBlcnVzZXJzIGJ5IGRlZmF1bHQsIGJ1dCBvdGhlcgorICAgICAgICB1c2VycyBjYW4gYmUgZ3Jh bnRlZCBFWEVDVVRFIHRvIHJ1biB0aGUgZnVuY3Rpb24uCisgICAgICAgPC9wYXJhPjwvZW50cnk+ CisgICAgICA8L3Jvdz4KKworCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxpbmRl eHRlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggNTU4NmZiZTViMDcuLmEyZDg4 MGJlZmU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0zNyw2ICszNyw3IEBACiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19lbnVtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWlj X2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICNpbmNsdWRlICJj b21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKQEAgLTIxNyw2 ICsyMTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBUcmFuc2FjdGlvblN0YXRlRGF0YQogCWJvb2wJCXBh cmFsbGVsQ2hpbGRYYWN0OwkvKiBpcyBhbnkgcGFyZW50IHRyYW5zYWN0aW9uIHBhcmFsbGVsPyAq LwogCWJvb2wJCWNoYWluOwkJCS8qIHN0YXJ0IGEgbmV3IGJsb2NrIGFmdGVyIHRoaXMgb25lICov CiAJYm9vbAkJdG9wWGlkTG9nZ2VkOwkvKiBmb3IgYSBzdWJ4YWN0OiBpcyB0b3AtbGV2ZWwgWElE IGxvZ2dlZD8gKi8KKwlRdWVyeURlc2MgICpxdWVyeURlc2M7CQkvKiBteSBjdXJyZW50IFF1ZXJ5 RGVzYyAqLwogCXN0cnVjdCBUcmFuc2FjdGlvblN0YXRlRGF0YSAqcGFyZW50OwkvKiBiYWNrIGxp bmsgdG8gcGFyZW50ICovCiB9IFRyYW5zYWN0aW9uU3RhdGVEYXRhOwogCkBAIC0yNTAsNiArMjUy LDcgQEAgc3RhdGljIFRyYW5zYWN0aW9uU3RhdGVEYXRhIFRvcFRyYW5zYWN0aW9uU3RhdGVEYXRh ID0gewogCS5zdGF0ZSA9IFRSQU5TX0RFRkFVTFQsCiAJLmJsb2NrU3RhdGUgPSBUQkxPQ0tfREVG QVVMVCwKIAkudG9wWGlkTG9nZ2VkID0gZmFsc2UsCisJLnF1ZXJ5RGVzYyA9IE5VTEwsCiB9Owog CiAvKgpAQCAtOTM1LDYgKzkzOCwyNyBAQCBHZXRDdXJyZW50VHJhbnNhY3Rpb25OZXN0TGV2ZWwo dm9pZCkKIAlyZXR1cm4gcy0+bmVzdGluZ0xldmVsOwogfQogCisvKgorICogU2V0Q3VycmVudFF1 ZXJ5RGVzYworICovCit2b2lkCitTZXRDdXJyZW50UXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjKQoreworCVRyYW5zYWN0aW9uU3RhdGUgcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlOwor CisJcy0+cXVlcnlEZXNjID0gcXVlcnlEZXNjOworfQorCisvKgorICogR2V0Q3VycmVudFF1ZXJ5 RGVzYworICovCitRdWVyeURlc2MgKgorR2V0Q3VycmVudFF1ZXJ5RGVzYyh2b2lkKQoreworCVRy YW5zYWN0aW9uU3RhdGUgcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlOworCisJcmV0dXJuIHMt PnF1ZXJ5RGVzYzsKK30KIAogLyoKICAqCVRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlv bklkCkBAIC0yOTUzLDYgKzI5NzcsOSBAQCBBYm9ydFRyYW5zYWN0aW9uKHZvaWQpCiAJLyogUmVz ZXQgc25hcHNob3QgZXhwb3J0IHN0YXRlLiAqLwogCVNuYXBCdWlsZFJlc2V0RXhwb3J0ZWRTbmFw c2hvdFN0YXRlKCk7CiAKKwkvKiBSZXNldCBjdXJyZW50IHF1ZXJ5IHBsYW4gc3RhdGUuICovCisJ U2V0Q3VycmVudFF1ZXJ5RGVzYyhOVUxMKTsKKwogCS8qCiAJICogSWYgdGhpcyB4YWN0IGhhcyBz dGFydGVkIGFueSB1bmZpbmlzaGVkIHBhcmFsbGVsIG9wZXJhdGlvbiwgY2xlYW4gdXAKIAkgKiBp dHMgd29ya2VycyBhbmQgZXhpdCBwYXJhbGxlbCBtb2RlLiAgRG9uJ3Qgd2FybiBhYm91dCBsZWFr ZWQgcmVzb3VyY2VzLgpAQCAtNTM1Miw2ICs1Mzc5LDEzIEBAIEFib3J0U3ViVHJhbnNhY3Rpb24o dm9pZCkKIAkvKiBSZXNldCBsb2dpY2FsIHN0cmVhbWluZyBzdGF0ZS4gKi8KIAlSZXNldExvZ2lj YWxTdHJlYW1pbmdTdGF0ZSgpOwogCisJLyoKKwkgKiBSZXNldCBjdXJyZW50IHF1ZXJ5IHBsYW4g c3RhdGUuIE5vdGUgdGhhdCBldmVuIGFmdGVyIHRoaXMgcmVzZXQsIGl0J3MKKwkgKiBzdGlsbCBw b3NzaWJsZSB0byBvYnRhaW4gdGhlIHBhcmVudCB0cmFuc2FjdGlvbidzIHF1ZXJ5IHBsYW5zLCBz aW5jZQorCSAqIHRoZXkgYXJlIHByZXNlcnZlZCBpbiBzdGFuZGFyZF9FeGVjdXRvclJ1bigpLgor CSAqLworCVNldEN1cnJlbnRRdWVyeURlc2MoTlVMTCk7CisKIAkvKgogCSAqIE5vIG5lZWQgZm9y IFNuYXBCdWlsZFJlc2V0RXhwb3J0ZWRTbmFwc2hvdFN0YXRlKCkgaGVyZSwgc25hcHNob3QKIAkg KiBleHBvcnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHN1YnRyYW5zYWN0aW9ucy4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv TWFrZWZpbGUKaW5kZXggNWI5ZDA4NDk3N2UuLjhmMTNjN2Y1NzUyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZQpAQCAtMzEsNiArMzEsNyBAQCBPQkpTID0gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8g XAogCWRyb3BjbWRzLm8gXAorCWR5bmFtaWNfZXhwbGFpbi5vIFwKIAlldmVudF90cmlnZ2VyLm8g XAogCWV4cGxhaW4ubyBcCiAJZXhwbGFpbl9kci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1p Y19leHBsYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBmNjNl NmEzYTgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZHluYW1pY19l eHBsYWluLmMKQEAgLTAsMCArMSwxODggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGR5 bmFtaWNfZXhwbGFpbi5jCisgKgkgIEV4cGxhaW4gcXVlcnkgcGxhbnMgZHVyaW5nIGV4ZWN1dGlv bgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LTUs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIK KyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFp bl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKKyNpbmNs dWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9w b2ludC5oIgorCisvKiBJcyBwbGFuIG5vZGUgd3JhcHBpbmcgZm9yIHF1ZXJ5IHBsYW4gbG9nZ2lu ZyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3M/ICovCitzdGF0aWMgYm9vbCBXcmFwTm9kZXNJblByb2dy ZXNzID0gZmFsc2U7CisKKy8qCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5k aWNhdGluZyBsb2dnaW5nIHRoZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcXVl cnkuCisgKgorICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQcm9jZXNzTG9n UXVlcnlQbGFuSW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkgZW1pdCBh IGxvZyBtZXNzYWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRs ZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKQoreworI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9J TlRTCisJSU5KRUNUSU9OX1BPSU5UKCJsb2ctcXVlcnktaW50ZXJydXB0IiwgTlVMTCk7CisjZW5k aWYKKwlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKKwlMb2dRdWVyeVBsYW5QZW5kaW5nID0gdHJ1 ZTsKKwkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAq LworfQorCisvKgorICogQWN0dWFsIHBsYW4gbG9nZ2luZyBmdW5jdGlvbi4KKyAqLwordm9pZAor TG9nUXVlcnlQbGFuKHZvaWQpCit7CisJRXhwbGFpblN0YXRlICplczsKKwlNZW1vcnlDb250ZXh0 IGN4dDsKKwlNZW1vcnlDb250ZXh0IG9sZF9jeHQ7CisJUXVlcnlEZXNjICAqcXVlcnlEZXNjOwor CisJY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkibG9nX3F1ZXJ5X3BsYW4gdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZF9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3h0 KTsKKworCWVzID0gTmV3RXhwbGFpblN0YXRlKCk7CisKKwllcy0+Zm9ybWF0ID0gRVhQTEFJTl9G T1JNQVRfVEVYVDsKKwllcy0+c2V0dGluZ3MgPSB0cnVlOworCWVzLT52ZXJib3NlID0gdHJ1ZTsK Kwllcy0+c2lnbmFsZWQgPSB0cnVlOworCisJLyoKKwkgKiBDdXJyZW50IFF1ZXJ5RGVzYyBpcyB2 YWxpZCBvbmx5IGR1cmluZyBzdGFuZGFyZF9FeGVjdXRvclJ1bi4gSG93ZXZlciwKKwkgKiBFeGVj UHJvY05vZGUgY2FuIGJlIGNhbGxlZCBhZnRlcndhcmQoaS5lLiwgRXhlY1Bvc3Rwcm9jZXNzUGxh bikuIFRvCisJICogaGFuZGxlIHRoZSBjYXNlLCBjaGVjayB3aGV0aGVyIHdlIGhhdmUgUXVlcnlE ZXNjIG5vdy4KKwkgKi8KKwlxdWVyeURlc2MgPSBHZXRDdXJyZW50UXVlcnlEZXNjKCk7CisKKwlp ZiAocXVlcnlEZXNjID09IE5VTEwpCisJeworCQlMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7 CisJCXJldHVybjsKKwl9CisKKwlFeHBsYWluU3RyaW5nQXNzZW1ibGUoZXMsIHF1ZXJ5RGVzYywg ZXMtPmZvcm1hdCwgMCwgLTEpOworCisJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQllcnJt c2coInF1ZXJ5IGFuZCBpdHMgcGxhbiBydW5uaW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQgJWQgYXJl OlxuJXMiLAorCQkJCSAgIE15UHJvY1BpZCwgZXMtPnN0ci0+ZGF0YSkpOworCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZF9jeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUoY3h0KTsKKworCUxv Z1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIHJlcXVl c3QgZm9yIGxvZ2dpbmcgcXVlcnkgcGxhbiBhdCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgorICoK KyAqIFNpbmNlIGV4ZWN1dGluZyBFWFBMQUlOLXJlbGF0ZWQgY29kZSBhdCBhbiBhcmJpdHJhcnkg Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorICogcG9pbnQgaXMgcG90ZW50aWFsbHkgdW5zYWZlLCB0 aGlzIGZ1bmN0aW9uIGp1c3Qgd3JhcHMgdGhlIG5vZGVzIG9mCisgKiBFeGVjUHJvY05vZGUgd2l0 aCBFeGVjUHJvY05vZGVGaXJzdCwgd2hpY2ggbG9ncyBxdWVyeSBwbGFuIGlmIHJlcXVlc3RlZC4K KyAqIFRoaXMgd2F5IGVuc3VyZXMgdGhhdCBFWFBMQUlOLXJlbGF0ZWQgY29kZSBpcyBleGVjdXRl ZCBvbmx5IGR1cmluZworICogRXhlY1Byb2NOb2RlRmlyc3QsIHdoZXJlIGl0IGlzIGNvbnNpZGVy ZWQgc2FmZS4KKyAqLwordm9pZAorUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKQor eworCVF1ZXJ5RGVzYyAgKnF1ZXJ5ZGVzYyA9IEdldEN1cnJlbnRRdWVyeURlc2MoKTsKKworCS8q IElmIGN1cnJlbnQgcXVlcnkgaGFzIGFscmVhZHkgZmluaXNoZWQsIHdlIGNhbiBkbyBub3RoaW5n IGJ1dCBleGl0ICovCisJaWYgKHF1ZXJ5ZGVzYyA9PSBOVUxMKQorCXsKKwkJTG9nUXVlcnlQbGFu UGVuZGluZyA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFeGl0IGltbWVkaWF0 ZWx5IGlmIHdyYXBwaW5nIHBsYW4gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBwcmV2ZW50 cworCSAqIHJlY3Vyc2l2ZSBjYWxscywgd2hpY2ggY291bGQgb2NjdXIgaWYgbG9nZ2luZyBpcyBy ZXF1ZXN0ZWQgcmVwZWF0ZWRseQorCSAqIGFuZCByYXBpZGx5LCBwb3RlbnRpYWxseSBsZWFkaW5n IHRvIGluZmluaXRlIHJlY3Vyc2lvbiBhbmQgY3Jhc2guCisJICovCisJaWYgKFdyYXBOb2Rlc0lu UHJvZ3Jlc3MpCisJCXJldHVybjsKKworCVdyYXBOb2Rlc0luUHJvZ3Jlc3MgPSB0cnVlOworCisJ UEdfVFJZKCk7CisJeworCQkvKgorCQkgKiBXcmFwIEV4ZWNQcm9jTm9kZXMgd2l0aCBFeGVjUHJv Y05vZGVGaXJzdCwgd2hpY2ggbG9ncyBxdWVyeSBwbGFuCisJCSAqIHdoZW4gTG9nUXVlcnlQbGFu UGVuZGluZyBpcyB0cnVlLgorCQkgKi8KKwkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UocXVl cnlkZXNjLT5wbGFuc3RhdGUpOworCX0KKwlQR19GSU5BTExZKCk7CisJeworCQlXcmFwTm9kZXNJ blByb2dyZXNzID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKK30KKworLyoKKyAqIFNpZ25h bCBhIGJhY2tlbmQgcHJvY2VzcyB0byBsb2cgdGhlIHF1ZXJ5IHBsYW4gb2YgdGhlIHJ1bm5pbmcg cXVlcnkuCisgKgorICogQnkgZGVmYXVsdCwgb25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRv IHNpZ25hbCB0byBsb2cgdGhlIHBsYW4gYmVjYXVzZQorICogYWxsb3dpbmcgYW55IHVzZXJzIHRv IGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJvdW5kZWQgcmF0ZSB3b3VsZAorICogY2F1c2Ug bG90cyBvZiBsb2cgbWVzc2FnZXMgYW5kIHdoaWNoIGNhbiBsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2 aWNlLgorICogQWRkaXRpb25hbCByb2xlcyBjYW4gYmUgcGVybWl0dGVkIHdpdGggR1JBTlQuCisg Ki8KK0RhdHVtCitwZ19sb2dfcXVlcnlfcGxhbihQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJ CXBpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlQR1BST0MJICAgKnByb2M7CisJUGdCYWNrZW5k U3RhdHVzICpiZV9zdGF0dXM7CisKKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKwor CWlmIChwcm9jID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGlzIGlzIGp1c3QgYSB3YXJuaW5n IHNvIGEgbG9vcC10aHJvdWdoLXJlc3VsdHNldCB3aWxsIG5vdCBhYm9ydAorCQkgKiBpZiBvbmUg YmFja2VuZCB0ZXJtaW5hdGVkIG9uIGl0cyBvd24gZHVyaW5nIHRoZSBydW4uCisJCSAqLworCQll cmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwg YmFja2VuZCBwcm9jZXNzIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQor CisJYmVfc3RhdHVzID0gcGdzdGF0X2dldF9iZWVudHJ5X2J5X3Byb2NfbnVtYmVyKHByb2MtPnZ4 aWQucHJvY051bWJlcik7CisJaWYgKGJlX3N0YXR1cy0+c3RfYmFja2VuZFR5cGUgIT0gQl9CQUNL RU5EKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3Qg YSBQb3N0Z3JlU1FMIGNsaWVudCBiYWNrZW5kIHByb2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVS Tl9CT09MKGZhbHNlKTsKKwl9CisKKwlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xP R19RVUVSWV9QTEFOLCBwcm9jLT52eGlkLnByb2NOdW1iZXIpIDwgMCkKKwl7CisJCWVyZXBvcnQo V0FSTklORywKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBzaWduYWwgdG8gcHJvY2VzcyAl ZDogJW0iLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlQR19SRVRV Uk5fQk9PTCh0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAxMTJjMTdiMGQ2NC4u NTE2NDhiNWQ1MTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEwOTIsNiArMTA5Miw0MyBA QCBFeHBsYWluUXVlcnlQYXJhbWV0ZXJzKEV4cGxhaW5TdGF0ZSAqZXMsIFBhcmFtTGlzdEluZm8g cGFyYW1zLCBpbnQgbWF4bGVuKQogCQlFeHBsYWluUHJvcGVydHlUZXh0KCJRdWVyeSBQYXJhbWV0 ZXJzIiwgc3RyLCBlcyk7CiB9CiAKKy8qCisgKiBFeHBsYWluU3RyaW5nQXNzZW1ibGUgLQorICog ICAgQXNzZW1ibGUgZXMtPnN0ciBmb3IgbG9nZ2luZyBhY2NvcmRpbmcgdG8gc3BlY2lmaWVkIG9w dGlvbnMgYW5kIGZvcm1hdAorICovCisKK3ZvaWQKK0V4cGxhaW5TdHJpbmdBc3NlbWJsZShFeHBs YWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGxvZ0Zvcm1hdCwKKwkJCQkJ ICBib29sIGxvZ1RyaWdnZXJzLCBpbnQgbG9nUGFyYW1ldGVyTWF4TGVuZ3RoKQoreworCUV4cGxh aW5CZWdpbk91dHB1dChlcyk7CisJRXhwbGFpblF1ZXJ5VGV4dChlcywgcXVlcnlEZXNjKTsKKwlF eHBsYWluUXVlcnlQYXJhbWV0ZXJzKGVzLCBxdWVyeURlc2MtPnBhcmFtcywgbG9nUGFyYW1ldGVy TWF4TGVuZ3RoKTsKKwlFeHBsYWluUHJpbnRQbGFuKGVzLCBxdWVyeURlc2MpOworCWlmIChlcy0+ YW5hbHl6ZSAmJiBsb2dUcmlnZ2VycykKKwkJRXhwbGFpblByaW50VHJpZ2dlcnMoZXMsIHF1ZXJ5 RGVzYyk7CisJaWYgKGVzLT5jb3N0cykKKwkJRXhwbGFpblByaW50SklUU3VtbWFyeShlcywgcXVl cnlEZXNjKTsKKwlpZiAoZXhwbGFpbl9wZXJfcGxhbl9ob29rKQorCQkoKmV4cGxhaW5fcGVyX3Bs YW5faG9vaykgKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQsCisJCQkJCQkJCSAgTlVMTCwgZXMsCisJ CQkJCQkJCSAgcXVlcnlEZXNjLT5zb3VyY2VUZXh0LAorCQkJCQkJCQkgIHF1ZXJ5RGVzYy0+cGFy YW1zLAorCQkJCQkJCQkgIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19xdWVyeUVudik7CisJRXhwbGFp bkVuZE91dHB1dChlcyk7CisKKwkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCisJaWYgKGVz LT5zdHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4n KQorCQllcy0+c3RyLT5kYXRhWy0tZXMtPnN0ci0+bGVuXSA9ICdcMCc7CisKKwkvKiBGaXggSlNP TiB0byBvdXRwdXQgYW4gb2JqZWN0ICovCisJaWYgKGxvZ0Zvcm1hdCA9PSBFWFBMQUlOX0ZPUk1B VF9KU09OKQorCXsKKwkJZXMtPnN0ci0+ZGF0YVswXSA9ICd7JzsKKwkJZXMtPnN0ci0+ZGF0YVtl cy0+c3RyLT5sZW4gLSAxXSA9ICd9JzsKKwl9Cit9CisKIC8qCiAgKiByZXBvcnRfdHJpZ2dlcnMg LQogICoJCXJlcG9ydCBleGVjdXRpb24gc3RhdHMgZm9yIGEgc2luZ2xlIHJlbGF0aW9uJ3MgdHJp Z2dlcnMKQEAgLTE4MjcsNyArMTg2NCwxMCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGZvcmNpYmx5IGNs ZWFuIHVwIHRoZSBpbnN0cnVtZW50YXRpb24gc3RhdGUgYmVjYXVzZSB3ZQotCSAqIGhhdmVuJ3Qg ZG9uZSBFeGVjdXRvckVuZCB5ZXQuICBUaGlzIGlzIHByZXR0eSBncm90dHkgLi4uCisJICogaGF2 ZW4ndCBkb25lIEV4ZWN1dG9yRW5kIHlldC4gIFRoaXMgaXMgcHJldHR5IGdyb3R0eSAuLi4gVGhp cyBjbGVhbnVwCisJICogc2hvdWxkIG5vdCBiZSBkb25lIHdoZW4gdGhlIHF1ZXJ5IGhhcyBhbHJl YWR5IGJlZW4gZXhlY3V0ZWQgYW5kIGV4cGxhaW4KKwkgKiBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkg c2lnbmFsLCBhcyB0aGUgdGFyZ2V0IHF1ZXJ5IG1heSB1c2UKKwkgKiBpbnN0cnVtZW50YXRpb24g YW5kIGNsZWFuIGl0c2VsZiB1cC4KIAkgKgogCSAqIE5vdGU6IGNvbnRyaWIvYXV0b19leHBsYWlu IGNvdWxkIGNhdXNlIGluc3RydW1lbnRhdGlvbiB0byBiZSBzZXQgdXAKIAkgKiBldmVuIHRob3Vn aCB3ZSBkaWRuJ3QgYXNrIGZvciBpdCBoZXJlLiAgQmUgY2FyZWZ1bCBub3QgdG8gcHJpbnQgYW55 CkBAIC0xODM1LDcgKzE4NzUsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCSAqIEluc3RyRW5kTG9vcCBjYWxsIGFueXdheSwgaWYgcG9zc2li bGUsIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhc2VzCiAJICogYXV0b19leHBsYWluIGhhcyB0 byBjb250ZW5kIHdpdGguCiAJICovCi0JaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKKwlpZiAo cGxhbnN0YXRlLT5pbnN0cnVtZW50ICYmICFlcy0+c2lnbmFsZWQpCiAJCUluc3RyRW5kTG9vcChw bGFuc3RhdGUtPmluc3RydW1lbnQpOwogCiAJaWYgKGVzLT5hbmFseXplICYmCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21lc29uLmJ1aWxkCmluZGV4IDlmMjU4ZDU2NmViLi4yZjJiMzBjZWEwYyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWVzb24uYnVpbGQKQEAgLTE5LDYgKzE5LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAnZGVmaW5lLmMnLAogICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRzLmMnLAorICAnZHlu YW1pY19leHBsYWluLmMnLAogICAnZXZlbnRfdHJpZ2dlci5jJywKICAgJ2V4cGxhaW4uYycsCiAg ICdleHBsYWluX2RyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggNGIzMGY3Njg2ODAu LjRiOWY0ZjJiN2E4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTQ0LDYgKzQ0LDcgQEAK ICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9keW5h bWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCkBAIC0z MjMsNiArMzI0LDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2Ms CiAJRGVzdFJlY2VpdmVyICpkZXN0OwogCWJvb2wJCXNlbmRUdXBsZXM7CiAJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCVF1ZXJ5RGVzYyAgKm9sZFF1ZXJ5RGVzYzsKIAogCS8qIHNhbml0eSBj aGVja3MgKi8KIAlBc3NlcnQocXVlcnlEZXNjICE9IE5VTEwpOwpAQCAtMzM1LDYgKzMzNywxMyBA QCBzdGFuZGFyZF9FeGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAkvKiBjYWxsZXIg bXVzdCBlbnN1cmUgdGhlIHF1ZXJ5J3Mgc25hcHNob3QgaXMgYWN0aXZlICovCiAJQXNzZXJ0KEdl dEFjdGl2ZVNuYXBzaG90KCkgPT0gZXN0YXRlLT5lc19zbmFwc2hvdCk7CiAKKwkvKgorCSAqIFNh dmUgY3VycmVudCBRdWVyeURlc2MgaGVyZSB0byBlbmFibGUgcmV0cmlldmFsIG9mIHRoZSBjdXJy ZW50bHkKKwkgKiBydW5uaW5nIHF1ZXJ5RGVzYyBmb3IgbmVzdGVkIHF1ZXJpZXMuCisJICovCisJ b2xkUXVlcnlEZXNjID0gR2V0Q3VycmVudFF1ZXJ5RGVzYygpOworCVNldEN1cnJlbnRRdWVyeURl c2MocXVlcnlEZXNjKTsKKwogCS8qCiAJICogU3dpdGNoIGludG8gcGVyLXF1ZXJ5IG1lbW9yeSBj b250ZXh0CiAJICovCkBAIC0zOTcsNiArNDA2LDE0IEBAIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQlJbnN0clN0b3AocXVlcnlEZXNjLT5xdWVyeV9pbnN0cik7 CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJU2V0Q3VycmVudFF1ZXJ5 RGVzYyhvbGRRdWVyeURlc2MpOworCisJLyoKKwkgKiBFbnN1cmUgTG9nUXVlcnlQbGFuUGVuZGlu ZyBpcyBpbml0aWFsaXplZCBpbiBjYXNlIHRoZXJlIHdhcyBubyB0aW1lIGZvcgorCSAqIGxvZ2dp bmcgdGhlIHBsYW4uIE90aGVyd2lzZSBwbGFuIHdpbGwgYmUgbG9nZ2VkIGF0IHRoZSBuZXh0IHF1 ZXJ5CisJICogZXhlY3V0aW9uIG9uIHRoZSBzYW1lIHNlc3Npb24uCisJICovCisJTG9nUXVlcnlQ bGFuUGVuZGluZyA9IGZhbHNlOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ cm9jbm9kZS5jCmluZGV4IDdjNGM2NmUzMjNmLi4wODE1OTdhMzFkMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKKyNpbmNsdWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIK ICNpbmNsdWRlICJleGVjdXRvci9ub2RlQWdnLmgiCkBAIC00MzEsOSArNDMyLDEwIEBAIEV4ZWNT ZXRFeGVjUHJvY05vZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05vZGVNdGQgZnVuY3Rpb24p CiB7CiAJLyoKIAkgKiBBZGQgYSB3cmFwcGVyIGFyb3VuZCB0aGUgRXhlY1Byb2NOb2RlIGNhbGxi YWNrIHRoYXQgY2hlY2tzIHN0YWNrIGRlcHRoCi0JICogZHVyaW5nIHRoZSBmaXJzdCBleGVjdXRp b24gYW5kIG1heWJlIGFkZHMgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBwZXIuCi0JICogV2hlbiB0 aGUgY2FsbGJhY2sgaXMgY2hhbmdlZCBhZnRlciBleGVjdXRpb24gaGFzIGFscmVhZHkgYmVndW4g dGhhdAotCSAqIG1lYW5zIHdlJ2xsIHN1cGVyZmx1b3VzbHkgZXhlY3V0ZSBFeGVjUHJvY05vZGVG aXJzdCwgYnV0IHRoYXQgc2VlbXMgb2suCisJICogYW5kIHF1ZXJ5IGxvZ2dpbmcgcmVxdWVzdCBk dXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgbWF5YmUgYWRkcyBhbgorCSAqIGluc3RydW1lbnRhdGlv biB3cmFwcGVyLiBXaGVuIHRoZSBjYWxsYmFjayBpcyBjaGFuZ2VkIGFmdGVyIGV4ZWN1dGlvbgor CSAqIGhhcyBhbHJlYWR5IGJlZ3VuIHRoYXQgbWVhbnMgd2UnbGwgc3VwZXJmbHVvdXNseSBleGVj dXRlCisJICogRXhlY1Byb2NOb2RlRmlyc3QsIGJ1dCB0aGF0IHNlZW1zIG9rLgogCSAqLwogCW5v ZGUtPkV4ZWNQcm9jTm9kZVJlYWwgPSBmdW5jdGlvbjsKIAlub2RlLT5FeGVjUHJvY05vZGUgPSBF eGVjUHJvY05vZGVGaXJzdDsKQEAgLTQ0MSwyMSArNDQzLDM3IEBAIEV4ZWNTZXRFeGVjUHJvY05v ZGUoUGxhblN0YXRlICpub2RlLCBFeGVjUHJvY05vZGVNdGQgZnVuY3Rpb24pCiAKIAogLyoKLSAq IEV4ZWNQcm9jTm9kZSB3cmFwcGVyIHRoYXQgcGVyZm9ybXMgc29tZSBvbmUtdGltZSBjaGVja3Ms IGJlZm9yZSBjYWxsaW5nCisgKiBFeGVjUHJvY05vZGUgd3JhcHBlciB0aGF0IHBlcmZvcm1zIHNv bWUgZXh0cmEgY2hlY2tzLCBiZWZvcmUgY2FsbGluZwogICogdGhlIHJlbGV2YW50IG5vZGUgbWV0 aG9kIChwb3NzaWJseSB2aWEgYW4gaW5zdHJ1bWVudGF0aW9uIHdyYXBwZXIpLgorICoKKyAqIE5v cm1hbGx5LCB0aGlzIGlzIGp1c3QgaW52b2tlZCBvbmNlIGZvciB0aGUgZmlyc3QgY2FsbCB0byBh bnkgZ2l2ZW4gbm9kZSwKKyAqIGFuZCB0aGVyZWFmdGVyIHdlIGFycmFuZ2UgdG8gY2FsbCBFeGVj UHJvY05vZGVJbnN0ciBvciB0aGUgcmVsZXZhbnQgbm9kZQorICogbWV0aG9kIGRpcmVjdGx5LiBI b3dldmVyLCBpdCdzIGxlZ2FsIHRvIHJlc2V0IG5vZGUtPkV4ZWNQcm9jTm9kZSBiYWNrIHRvCisg KiB0aGlzIGZ1bmN0aW9uIGF0IGFueSB0aW1lLCBhbmQgd2UgZG8gdGhhdCB3aGVuZXZlciB0aGUg cXVlcnkgcGxhbiBtaWdodAorICogbmVlZCB0byBiZSBwcmludGVkLCBzbyB0aGF0IHdlIG9ubHkg aW5jdXIgdGhlIGNvc3Qgb2YgY2hlY2tpbmcgZm9yIHRoYXQKKyAqIGNhc2Ugd2hlbiByZXF1aXJl ZC4KICAqLwogc3RhdGljIFR1cGxlVGFibGVTbG90ICoKIEV4ZWNQcm9jTm9kZUZpcnN0KFBsYW5T dGF0ZSAqbm9kZSkKIHsKIAkvKgotCSAqIFBlcmZvcm0gc3RhY2sgZGVwdGggY2hlY2sgZHVyaW5n IHRoZSBmaXJzdCBleGVjdXRpb24gb2YgdGhlIG5vZGUuICBXZQotCSAqIG9ubHkgZG8gc28gdGhl IGZpcnN0IHRpbWUgcm91bmQgYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8gbm90IGJlIGNoZWFwIG9u Ci0JICogc29tZSBjb21tb24gYXJjaGl0ZWN0dXJlcyAoZWcuIHg4NikuICBUaGlzIHJlbGllcyBv biB0aGUgYXNzdW1wdGlvbgotCSAqIHRoYXQgRXhlY1Byb2NOb2RlIGNhbGxzIGZvciBhIGdpdmVu IHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBtYWRlIGF0Ci0JICogcm91Z2hseSB0aGUgc2FtZSBz dGFjayBkZXB0aC4KKwkgKiBQZXJmb3JtIGEgc3RhY2sgZGVwdGggY2hlY2suICBXZSBkb24ndCB3 YW50IHRvIGRvIHRoaXMgYWxsIHRoZSB0aW1lCisJICogYmVjYXVzZSBpdCB0dXJucyBvdXQgdG8g bm90IGJlIGNoZWFwIG9uIHNvbWUgY29tbW9uIGFyY2hpdGVjdHVyZXMgKGVnLgorCSAqIHg4Niku ICBUaGlzIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IEV4ZWNQcm9jTm9kZSBjYWxscyBm b3IgYQorCSAqIGdpdmVuIHBsYW4gbm9kZSB3aWxsIGFsd2F5cyBiZSBtYWRlIGF0IHJvdWdobHkg dGhlIHNhbWUgc3RhY2sgZGVwdGguCiAJICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAorCS8q CisJICogSWYgd2UgaGF2ZSBiZWVuIGFza2VkIHRvIHByaW50IHRoZSBxdWVyeSBwbGFuLCBkbyB0 aGF0IG5vdy4gV2UgZGFyZSBub3QKKwkgKiB0cnkgdG8gZG8gdGhpcyBkaXJlY3RseSBmcm9tIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkgYmVjYXVzZSB3ZSBkb24ndAorCSAqIHJlYWxseSBrbm93IHdo YXQgdGhlIGV4ZWN1dG9yIHN0YXRlIGlzIGF0IHRoYXQgcG9pbnQsIGJ1dCB3ZSBhc3N1bWUKKwkg KiB0aGF0IHdoZW4gZW50ZXJpbmcgYSBub2RlIHRoZSBzdGF0ZSB3aWxsIGJlIHN1ZmZpY2llbnRs eSBjb25zaXN0ZW50CisJICogdGhhdCB0cnlpbmcgdG8gcHJpbnQgdGhlIHBsYW4gbWFrZXMgc2Vu c2UuCisJICovCisJaWYgKExvZ1F1ZXJ5UGxhblBlbmRpbmcpCisJCUxvZ1F1ZXJ5UGxhbigpOwor CiAJLyoKIAkgKiBJZiBpbnN0cnVtZW50YXRpb24gaXMgcmVxdWlyZWQsIGNoYW5nZSB0aGUgd3Jh cHBlciB0byBvbmUgdGhhdCBqdXN0CiAJICogZG9lcyBpbnN0cnVtZW50YXRpb24uICBPdGhlcndp c2Ugd2UgY2FuIGRpc3BlbnNlIHdpdGggYWxsIHdyYXBwZXJzIGFuZApAQCAtNTI3LDYgKzU0NSw5 MSBAQCBNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUpCiAJcmV0dXJuIHJlc3VsdDsK IH0KIAorLyoKKyAqIFdyYXAgYXJyYXkgb2YgUGxhblN0YXRlIEV4ZWNQcm9jTm9kZSB3aXRoIEV4 ZWNQcm9jTm9kZUZpcnN0LgorICovCitzdGF0aWMgdm9pZAorRXhlY1NldEV4ZWNQcm9jTm9kZUFy cmF5KFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMpCit7CisJaW50CQkJaTsKKwor CWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vy c2UocGxhbnN0YXRlc1tpXSk7Cit9CisKKy8qCisgKiBXcmFwIEN1c3RvbVNjYW5TdGF0ZSBjaGls ZHJlbidzIEV4ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICovCitzdGF0aWMg dm9pZAorQ1NTQ2hpbGRFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXkoQ3VzdG9tU2NhblN0YXRlICpj c3MpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2goY2VsbCwgY3NzLT5jdXN0b21f cHMpCisJCUV4ZWNTZXRFeGVjUHJvY05vZGVSZWN1cnNlKChQbGFuU3RhdGUgKikgbGZpcnN0KGNl bGwpKTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHdyYXAgYWxsIHRoZSB1bmRlcmx5aW5nIEV4 ZWNQcm9jTm9kZSB3aXRoIEV4ZWNQcm9jTm9kZUZpcnN0LgorICoKKyAqIFJlY3Vyc2lvbiBpcyB1 c3VhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBuZXh0IEV4ZWNQcm9jTm9kZSgpIGNhbGwgbWF5 IGJlCisgKiBpbnZva2VkIG5vdCBvbmx5IHRocm91Z2ggdGhlIGN1cnJlbnQgbm9kZSwgYnV0IGFs c28gdmlhIGxlZnR0cmVlLCByaWdodHRyZWUsCisgKiBzdWJQbGFuLCBvciBvdGhlciBzcGVjaWFs IGNoaWxkIHBsYW5zLgorICovCit2b2lkCitFeGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShQbGFu U3RhdGUgKnBzKQoreworCUV4ZWNTZXRFeGVjUHJvY05vZGUocHMsIHBzLT5FeGVjUHJvY05vZGVS ZWFsKTsKKworCWlmIChwcy0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJRXhlY1NldEV4ZWNQcm9jTm9k ZVJlY3Vyc2UocHMtPmxlZnR0cmVlKTsKKwlpZiAocHMtPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQlF eGVjU2V0RXhlY1Byb2NOb2RlUmVjdXJzZShwcy0+cmlnaHR0cmVlKTsKKwlpZiAocHMtPnN1YlBs YW4gIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmw7CisKKwkJZm9yZWFjaChsLCBwcy0+c3Vi UGxhbikKKwkJeworCQkJU3ViUGxhblN0YXRlICpzc3RhdGUgPSAoU3ViUGxhblN0YXRlICopIGxm aXJzdChsKTsKKworCQkJRXhlY1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2Uoc3N0YXRlLT5wbGFuc3Rh dGUpOworCQl9CisJfQorCisJLyogc3BlY2lhbCBjaGlsZCBwbGFucyAqLworCXN3aXRjaCAobm9k ZVRhZyhwcy0+cGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJRXhlY1NldEV4ZWNQcm9j Tm9kZUFycmF5KCgoQXBwZW5kU3RhdGUgKikgcHMpLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJCSAo KEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbnBsYW5zKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTWVy Z2VBcHBlbmQ6CisJCQlFeGVjU2V0RXhlY1Byb2NOb2RlQXJyYXkoKChNZXJnZUFwcGVuZFN0YXRl ICopIHBzKS0+bWVyZ2VwbGFucywKKwkJCQkJCQkJCSAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMp LT5tc19ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlFeGVjU2V0 RXhlY1Byb2NOb2RlQXJyYXkoKChCaXRtYXBBbmRTdGF0ZSAqKSBwcyktPmJpdG1hcHBsYW5zLAor CQkJCQkJCQkJICgoQml0bWFwQW5kU3RhdGUgKikgcHMpLT5ucGxhbnMpOworCQkJYnJlYWs7CisJ CWNhc2UgVF9CaXRtYXBPcjoKKwkJCUV4ZWNTZXRFeGVjUHJvY05vZGVBcnJheSgoKEJpdG1hcE9y U3RhdGUgKikgcHMpLT5iaXRtYXBwbGFucywKKwkJCQkJCQkJCSAoKEJpdG1hcE9yU3RhdGUgKikg cHMpLT5ucGxhbnMpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlFeGVj U2V0RXhlY1Byb2NOb2RlUmVjdXJzZSgoKFN1YnF1ZXJ5U2NhblN0YXRlICopIHBzKS0+c3VicGxh bik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N0ZVNjYW46CisJCQlFeGVjU2V0RXhlY1Byb2NOb2Rl UmVjdXJzZSgoKEN0ZVNjYW5TdGF0ZSAqKSBwcyktPmN0ZXBsYW5zdGF0ZSk7CisJCQlicmVhazsK KwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlDU1NDaGlsZEV4ZWNTZXRFeGVjUHJvY05vZGVBcnJh eSgoQ3VzdG9tU2NhblN0YXRlICopIHBzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJl YWs7CisJfQorfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjRW5kTm9kZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IDEzOTdmNjVmNjdiLi5iYjAxZjYwNWQwMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVk ZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9keW5hbWljX2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9yZXBh Y2suaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAgLTcx Myw2ICs3MTQsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlp ZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKSkKIAkJSGFuZGxl TG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9D U0lHX0xPR19RVUVSWV9QTEFOKSkKKwkJSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KCk7CisK IAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCiAJ CUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpp bmRleCBkYmVmNzM0YTkzZi4uOTg0MTNhZDU4ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTM2LDYg KzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZHluYW1pY19leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgog I2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9w cmVwYXJlLmgiCkBAIC0zNjA5LDYgKzM2MTAsOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQog CWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJ bnRlcnJ1cHQoKTsKIAorCWlmIChMb2dRdWVyeVBsYW5QZW5kaW5nKQorCQlQcm9jZXNzTG9nUXVl cnlQbGFuSW50ZXJydXB0KCk7CisKIAlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQog CQlQcm9jZXNzUGFyYWxsZWxBcHBseU1lc3NhZ2VzKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxz LmMKaW5kZXggYmJkMjhkMTRkOTkuLmRlODRmZDljZmEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYwpAQCAtNDAsNiArNDAsOCBAQCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25U aW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxC YXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNv bnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVN0YXRzVXBk YXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVy eVBsYW5QZW5kaW5nID0gZmFsc2U7CisKIHZvbGF0aWxlIHVpbnQzMiBJbnRlcnJ1cHRIb2xkb2Zm Q291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID0gMDsK IHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy94YWN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCmluZGV4IGE4 Y2JkZjI0N2M4Li5mMjg4MWQ5NTZjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hh Y3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCkBAIC00MzIsNiArNDMyLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgeGxfeGFjdF9wYXJzZWRfYWJvcnQKIAlUaW1lc3RhbXBUeiBvcmlnaW5f dGltZXN0YW1wOwogfSB4bF94YWN0X3BhcnNlZF9hYm9ydDsKIAordHlwZWRlZiBzdHJ1Y3QgUXVl cnlEZXNjIFF1ZXJ5RGVzYzsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWV4dGVybiBkZWZp bml0aW9ucwpAQCAtNDU4LDYgKzQ1OSw4IEBAIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRDdXJyZW50 U3RhdGVtZW50U3RhcnRUaW1lc3RhbXAodm9pZCk7CiBleHRlcm4gVGltZXN0YW1wVHogR2V0Q3Vy cmVudFRyYW5zYWN0aW9uU3RvcFRpbWVzdGFtcCh2b2lkKTsKIGV4dGVybiB2b2lkIFNldEN1cnJl bnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCh2b2lkKTsKIGV4dGVybiBpbnQJR2V0Q3VycmVudFRy YW5zYWN0aW9uTmVzdExldmVsKHZvaWQpOworUXVlcnlEZXNjICAqR2V0Q3VycmVudFF1ZXJ5RGVz Yyh2b2lkKTsKK3ZvaWQJCVNldEN1cnJlbnRRdWVyeURlc2MoUXVlcnlEZXNjICpxdWVyeURlc2Mp OwogZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQoVHJhbnNh Y3Rpb25JZCB4aWQpOwogZXh0ZXJuIGludAlHZXRUb3BSZWFkT25seVRyYW5zYWN0aW9uTmVzdExl dmVsKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQodm9pZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBiZTE1N2E1ZmJlOS4uOTI5NzZiMWU1MzIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODcyMSw2ICs4NzIxLDEzIEBACiAgIHByb3JldHR5cGUg PT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAncGdfbG9nX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzJywgcHJvYWNsID0+ICd7UE9TVEdSRVM9WH0nIH0sCiAKKyMg bG9nZ2luZyBwbGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2Vu ZAoreyBvaWQgPT4gJzgwMDAnLCBkZXNjciA9PiAnbG9nIHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVl cnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfbG9nX3F1ZXJ5 X3BsYW4nLAorICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBw cm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb3NyYyA9PiAncGdfbG9nX3F1ZXJ5X3BsYW4nLAorICBw cm9hY2wgPT4gJ3tQT1NUR1JFUz1YfScgfSwKKwogIyBub24tcGVyc2lzdGVudCBzZXJpZXMgZ2Vu ZXJhdG9yCiB7IG9pZCA9PiAnMTA2NicsIGRlc2NyID0+ICdub24tcGVyc2lzdGVudCBzZXJpZXMg Z2VuZXJhdG9yJywKICAgcHJvbmFtZSA9PiAnZ2VuZXJhdGVfc2VyaWVzJywgcHJvcm93cyA9PiAn MTAwMCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9keW5hbWljX2V4cGxhaW4u aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mM2M0ZjZmYjVhZgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2R5bmFtaWNfZXhwbGFpbi5oCkBAIC0wLDAgKzEsMjUgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGR5bmFtaWNfZXhwbGFpbi5oCisgKgkgIHByb3Rv dHlwZXMgZm9yIGR5bmFtaWNfZXhwbGFpbi5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQtNSwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvZHluYW1pY19leHBsYWluLmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBEWU5BTUlDX0VYUExBSU5fSAor I2RlZmluZSBEWU5BTUlDX0VYUExBSU5fSAorCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3Iu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisKK2V4dGVybiB2b2lkIEhh bmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NMb2dR dWVyeVBsYW5JbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gVHVwbGVUYWJsZVNsb3QgKkV4ZWNQcm9j Tm9kZVdpdGhFeHBsYWluKFBsYW5TdGF0ZSAqcHMpOworZXh0ZXJuIHZvaWQgTG9nUXVlcnlQbGFu KHZvaWQpOworZXh0ZXJuIERhdHVtIHBnX2xvZ19xdWVyeV9wbGFuKFBHX0ZVTkNUSU9OX0FSR1Mp OworCisjZW5kaWYJCQkJCQkJLyogRFlOQU1JQ19FWFBMQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxh aW4uaAppbmRleCA0NzJlMTQxYmJhMy4uNDJmMWY3ZDYxZmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWlu LmgKQEAgLTcxLDYgKzcxLDggQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgY29uc3QgQnVmZmVy VXNhZ2UgKmJ1ZnVzYWdlLAogCQkJCQkJICAgY29uc3QgTWVtb3J5Q29udGV4dENvdW50ZXJzICpt ZW1fY291bnRlcnMpOwogCitleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRQbGFuKEV4cGxhaW5TdGF0 ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKK2V4dGVybiB2b2lkIEV4cGxhaW5QcmludFRy aWdnZXJzKEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKIGV4dGVybiB2 b2lkIEV4cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURl c2MpOwogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0YXRlICplcywK IAkJCQkJCQkJIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKQEAgLTgxLDUgKzgzLDggQEAgZXh0ZXJu IHZvaWQgRXhwbGFpblByaW50SklUU3VtbWFyeShFeHBsYWluU3RhdGUgKmVzLAogZXh0ZXJuIHZv aWQgRXhwbGFpblF1ZXJ5VGV4dChFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVz Yyk7CiBleHRlcm4gdm9pZCBFeHBsYWluUXVlcnlQYXJhbWV0ZXJzKEV4cGxhaW5TdGF0ZSAqZXMs CiAJCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBpbnQgbWF4bGVuKTsKK2V4dGVybiB2 b2lkIEV4cGxhaW5TdHJpbmdBc3NlbWJsZShFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1 ZXJ5RGVzYywKKwkJCQkJCQkJICBpbnQgbG9nRm9ybWF0LCBib29sIGxvZ1RyaWdnZXJzLAorCQkJ CQkJCQkgIGludCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpOwogCiAjZW5kaWYJCQkJCQkJLyogRVhQ TEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRl LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgKaW5kZXggOTdiYzdlZDQ5 ZjYuLmI5YTk4MTU3ODE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWlu X3N0YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oCkBAIC03 Myw2ICs3Myw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCQkJCQkJCQkgKiBlbnRy eSAqLwogCS8qIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcGxhbiBub2RlICovCiAJRXhw bGFpbldvcmtlcnNTdGF0ZSAqd29ya2Vyc19zdGF0ZTsgLyogbmVlZGVkIGlmIHBhcmFsbGVsIHBs YW4gKi8KKwlib29sCQlzaWduYWxlZDsJCS8qIHdoZXRoZXIgZXhwbGFpbiBpcyBjYWxsZWQgYnkg c2lnbmFsICovCiAJLyogZXh0ZW5zaW9ucyAqLwogCXZvaWQJICAqKmV4dGVuc2lvbl9zdGF0ZTsK IAlpbnQJCQlleHRlbnNpb25fc3RhdGVfYWxsb2NhdGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK aW5kZXggNjUwYmFhYjNlZmMuLjEyYTE2NzNkMDBjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK QEAgLTI5OSw2ICsyOTksNyBAQCBleHRlcm4gdm9pZCBFdmFsUGxhblF1YWxFbmQoRVBRU3RhdGUg KmVwcXN0YXRlKTsKIGV4dGVybiBQbGFuU3RhdGUgKkV4ZWNJbml0Tm9kZShQbGFuICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjU2V0RXhlY1Byb2NO b2RlKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2RlTXRkIGZ1bmN0aW9uKTsKIGV4dGVybiBO b2RlICpNdWx0aUV4ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhl Y1NldEV4ZWNQcm9jTm9kZVJlY3Vyc2UoUGxhblN0YXRlICpwcyk7CiBleHRlcm4gdm9pZCBFeGVj RW5kTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NodXRkb3duTm9kZShQ bGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVw bGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggNzE3MGE0YmZm OTguLjBhYjc3NWU5NjRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysg Yi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTgsNiArOTgsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVy UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVt b3J5Q29udGV4dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21p Y190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdETExJ TVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmc7 CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rp b25Mb3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCBhYWExNThiZmQ2Ni4uYzIxNDIw NDNlMmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw4IEBAIHR5cGVk ZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJz IHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9i YWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8q IGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19MT0df UVVFUllfUExBTiwJCS8qIGFzayBiYWNrZW5kIHRvIGxvZyBwbGFuIG9mIHRoZSBjdXJyZW50CisJ CQkJCQkJCSAqIHF1ZXJ5ICovCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAvKiBN ZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCVBST0NTSUdfU0xPVFNZTkNf TUVTU0FHRSwJLyogYXNrIHNsb3Qgc3luY2hyb25pemF0aW9uIHRvIHN0b3AgKi8KIAlQUk9DU0lH X1JFUEFDS19NRVNTQUdFLAkJLyogTWVzc2FnZSBmcm9tIHJlcGFjayB3b3JrZXIgKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKaW5kZXggOTY5ZTkwYjM5NmQuLjRjMjNiYjc5 NGM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZApAQCAtMjIsNiArMjIs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMTFfbG9ja19zdGF0cy5wbCcsCiAgICAgICAndC8w MTJfZGRsdXRpbHMucGwnLAogICAgICAgJ3QvMDEzX3RlbXBfb2JqX211bHRpc2Vzc2lvbi5wbCcs CisgICAgICAndC8wMTRfcGdfbG9nX3F1ZXJ5X3BsYW4ucGwnLAogICAgIF0sCiAgICAgIyBUaGUg aW5qZWN0aW9uIHBvaW50cyBhcmUgY2x1c3Rlci13aWRlLCBzbyBkaXNhYmxlIGluc3RhbGxjaGVj awogICAgICdydW5uaW5nY2hlY2snOiBmYWxzZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL3QvMDE0X3BnX2xvZ19xdWVyeV9wbGFuLnBsIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X21pc2MvdC8wMTRfcGdfbG9nX3F1ZXJ5X3BsYW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIwNTU2NDEyODNlCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTRfcGdfbG9nX3F1ZXJ5X3BsYW4ucGwKQEAgLTAs MCArMSwxMDEgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9 PiAnYWxsJzsKK3VzZSBsb2NhbGU7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGVzdCB0 aGF0IHBnX2xvZ19xdWVyeV9wbGFuKCkgYWN0dWFsbHkgbG9ncyB0aGUgcXVlcnkgcGxhbiBvZgor IyBhbm90aGVyIGJhY2tlbmQgZXhlY3V0aW5nIGEgcXVlcnkuCisKKyMgVGhpcyB0ZXN0IHJlcXVp cmVzIHRpbWluZyBjb29yZGluYXRpb25zOgorIyAgMSkgVGhlIHRhcmdldCBiYWNrZW5kIG11c3Qg YmUgZXhlY3V0aW5nIGEgcXVlcnkgd2hlbgorIyAgICAgcGdfbG9nX3F1ZXJ5X3BsYW4oKSBzZW5k cyB0aGUgc2lnbmFsLgorIyAgMikgV2UgbXVzdCBjb25maXJtIHRoYXQgdGhlIHRhcmdldCBiYWNr ZW5kIGFjdHVhbGx5IHJlY2VpdmVkIHRoZQorIyAgICAgc2lnbmFsIHRoYXQgcmVxdWVzdHMgbG9n Z2luZyBvZiB0aGUgcGxhbi4KKyMKKyMgV2UgdXNlIGFuIGFkdmlzb3J5IGxvY2sgYW5kIGFuIGlu amVjdGlvbiBwb2ludCB0byBjb250cm9sIHRoZW0KKyMgcmVzcGVjdGl2ZWx5LgorCitpZiAoJEVO VntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9 PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCisj IE5vZGUgaW5pdGlhbGl6YXRpb24KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdCgpOworJG5vZGUtPnN0YXJ0OworCisjIENoZWNr IGlmIHRoZSBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBpcyBhdmFpbGFibGUsIGFzIGl0IG1h eSBiZQorIyBwb3NzaWJsZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGluc3RhbGxjaGVj aywgd2hlcmUgdGhlIG1vZHVsZQorIyB3b3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQu CitpZiAoISRub2RlLT5jaGVja19leHRlbnNpb24oJ2luamVjdGlvbl9wb2ludHMnKSkKK3sKKwlw bGFuIHNraXBfYWxsID0+ICdFeHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBub3QgaW5zdGFsbGVk JzsKK30KKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBp bmplY3Rpb25fcG9pbnRzOycpOworCitteSAkcHNxbF9zZXNzaW9uMSA9ICRub2RlLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJyk7CitteSAkcHNxbF9zZXNzaW9uMiA9ICRub2RlLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJyk7CisKK215ICRzZXNzaW9uMV9waWQgPSAkcHNxbF9zZXNzaW9u MS0+cXVlcnlfc2FmZSgic2VsZWN0IHBnX2JhY2tlbmRfcGlkKCkiKTsKKworIyBTZXQgaW5qZWN0 aW9uIHBvaW50IGluIHRoZSBsb2dnaW5nIHBsYW4gcmVxdWVzdCBoYW5kbGVyIHRvIGVuc3VyZQor IyB0aGF0IHNlc3Npb24xIHJlY2VpdmVkIHRoZSBzaWduYWwgb2YgcGdfbG9nX3F1ZXJ5X3BsYW4o KS4KKyRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKAorCXFxWworCVNFTEVDVCBpbmplY3Rpb25f cG9pbnRzX3NldF9sb2NhbCgpOworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnbG9n LXF1ZXJ5LWludGVycnVwdCcsICd3YWl0Jyk7CitdKTsKKworIyBVc2UgYW4gYWR2aXNvcnkgbG9j ayB0byBtYWtlIHNlc3Npb24xIGJsb2NrZWQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4KKyRwc3Fs X3Nlc3Npb24yLT5xdWVyeV9zYWZlKAorCXFxWworCUJFR0lOOworCVNFTEVDVCBwZ19hZHZpc29y eV94YWN0X2xvY2soMSk7CitdKTsKKworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3VudGlsKAorCXFy L3dhaXRfb25fYWR2aXNvcnlfbG9jay8sIHEoCisJXGVjaG8gd2FpdF9vbl9hZHZpc29yeV9sb2Nr CisJQkVHSU47CisJU0VMRUNUIHBnX2Fkdmlzb3J5X3hhY3RfbG9jaygxKTsKKykpOworCisjIENv bmZpcm0gdGhhdCBzZXNzaW9uMSBpcyBhY3R1YWxseSB3YWl0aW5nIG9uIHRoZSBhZHZpc29yeSBs b2NrLgorJG5vZGUtPndhaXRfZm9yX2V2ZW50KCdjbGllbnQgYmFja2VuZCcsICdhZHZpc29yeScp OworCisjIFJ1biBwZ19sb2dfcXVlcnlfcGxhbigpLgorJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5X3Nh ZmUoIlNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbigkc2Vzc2lvbjFfcGlkKTsiKTsKKworIyBFbnN1 cmUgdGhhdCB0aGUgc2lnbmFsIG9mIHBnX2xvZ19xdWVyeV9wbGFuKCkgaXMgYWN0dWFsbHkKKyMg cmVjZWl2ZWQgYnkgY29uZmlybWluZyBzZXNzaW9uMSBpcyB3YWl0aW5nIG9uIHRoZSBpbmplY3Rp b24gcG9pbnQuCiskbm9kZS0+d2FpdF9mb3JfZXZlbnQoJ2NsaWVudCBiYWNrZW5kJywgJ2xvZy1x dWVyeS1pbnRlcnJ1cHQnKTsKKworIyBDb21taXQgdGhlIHNlc3Npb24gMiB0byByZWxlYXNlIHRo ZSBhZHZpc29yeSBsb2NrLgorJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsK KworbXkgJGxvZ19vZmZzZXQgPSAtcyAkbm9kZS0+bG9nZmlsZTsKKworIyBEZXRhY2ggdGhlIGlu amVjdGlvbiBwb2ludCB0byBzdGFydCBsb2dnaW5nIHRoZSBwbGFuLgorJHBzcWxfc2Vzc2lvbjIt PnF1ZXJ5X3NhZmUoCisJcXFbCisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCds b2ctcXVlcnktaW50ZXJydXB0Jyk7CisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNo KCdsb2ctcXVlcnktaW50ZXJydXB0Jyk7CitdKTsKKworJG5vZGUtPndhaXRfZm9yX2xvZygncXVl cnkgYW5kIGl0cyBwbGFuIHJ1bm5pbmcgb24gYmFja2VuZCB3aXRoIFBJRCcsCisJJGxvZ19vZmZz ZXQpOworCiskcHNxbF9zZXNzaW9uMS0+cXVlcnlfc2FmZSgiQ09NTUlUOyIpOworCitvaygkcHNx bF9zZXNzaW9uMS0+cXVpdCk7CitvaygkcHNxbF9zZXNzaW9uMi0+cXVpdCk7CisKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0 aW9ucy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dApp bmRleCBjMzI2MWJmZjIwOS4uNWQzMTA5MzlhNzUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CkBAIC0zNTcsNiArMzU3LDQ0IEBAIFJFVk9LRSBFWEVD VVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnRlZ2VyKQog ICBGUk9NIHJlZ3Jlc3NfbG9nX21lbW9yeTsKIERST1AgUk9MRSByZWdyZXNzX2xvZ19tZW1vcnk7 CiAtLQorLS0gcGdfbG9nX3F1ZXJ5X3BsYW4oKQorLS0KKy0tIFBsYW5zIGFyZSBsb2dnZWQgYW5k IHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCistLSBGdXJ0aGVybW9yZSwg dGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBvcHRpbWl6ZXIuCistLSBI ZXJlIHdlIGp1c3QgdmVyaWZpZXMgdGhhdCB0aGUgcGVybWlzc2lvbnMgYXJlIHNldCBwcm9wZXJs eS4KKy0tCistLSBUaGUgdGVzdCB0aGF0IHZlcmlmaWVzIHRoZSBiYWNrZW5kJ3MgcXVlcnkgcGxh biBpcyBhY3R1YWxseQorLS0gbG9nZ2VkIGlzIGltcGxlbWVudGVkIGluCistLSBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy90LzAwOV9wZ19sb2dfcXVlcnlfcGxhbi5wbC4KK0NSRUFURSBST0xF IHJlZ3Jlc3NfbG9nX3BsYW47CitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVz c19sb2dfcGxhbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7 IC0tIG5vCisgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIGYKKygxIHJvdykKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfcXVlcnlf cGxhbihpbnRlZ2VyKQorICBUTyByZWdyZXNzX2xvZ19wbGFuOworU0VMRUNUIGhhc19mdW5jdGlv bl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX3BsYW4nLAorICAncGdfbG9nX3F1ZXJ5X3BsYW4oaW50 ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKKyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRVQgUk9MRSByZWdyZXNzX2xv Z19wbGFuOworU0VMRUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpOworIHBn X2xvZ19xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVT RVQgUk9MRTsKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIEZST00gcmVncmVzc19sb2dfcGxhbjsKK0RST1AgUk9MRSByZWdyZXNzX2xvZ19w bGFuOworLS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQogLS0gVGhlIG91dHB1dHMg b2YgdGhlc2UgYXJlIHZhcmlhYmxlLCBzbyB3ZSBjYW4ndCBqdXN0IHByaW50IHRoZWlyIHJlc3Vs dHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCA5NDZlZTU3MjZj ZC4uZTdhYjgxY2NhNjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVu Y3Rpb25zLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwK QEAgLTExMyw2ICsxMTMsMzcgQEAgUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCiAKIERST1AgUk9MRSByZWdyZXNzX2xvZ19t ZW1vcnk7CiAKKy0tCistLSBwZ19sb2dfcXVlcnlfcGxhbigpCistLQorLS0gUGxhbnMgYXJlIGxv Z2dlZCBhbmQgdGhleSBhcmUgbm90IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIEZ1cnRo ZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIG9wdGltaXpl ci4KKy0tIEhlcmUgd2UganVzdCB2ZXJpZmllcyB0aGF0IHRoZSBwZXJtaXNzaW9ucyBhcmUgc2V0 IHByb3Blcmx5LgorLS0KKy0tIFRoZSB0ZXN0IHRoYXQgdmVyaWZpZXMgdGhlIGJhY2tlbmQncyBx dWVyeSBwbGFuIGlzIGFjdHVhbGx5CistLSBsb2dnZWQgaXMgaW1wbGVtZW50ZWQgaW4KKy0tIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDA5X3BnX2xvZ19xdWVyeV9wbGFuLnBsLgorCitD UkVBVEUgUk9MRSByZWdyZXNzX2xvZ19wbGFuOworCitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZp bGVnZSgncmVncmVzc19sb2dfcGxhbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScs ICdFWEVDVVRFJyk7IC0tIG5vCisKK0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1 ZXJ5X3BsYW4oaW50ZWdlcikKKyAgVE8gcmVncmVzc19sb2dfcGxhbjsKKworU0VMRUNUIGhhc19m dW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX3BsYW4nLAorICAncGdfbG9nX3F1ZXJ5X3Bs YW4oaW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSB5ZXMKKworU0VUIFJPTEUgcmVncmVzc19sb2df cGxhbjsKK1NFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKK1JFU0VU IFJPTEU7CisKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIEZST00gcmVncmVzc19sb2dfcGxhbjsKKworRFJPUCBST0xFIHJlZ3Jlc3NfbG9n X3BsYW47CisKIC0tCiAtLSBUZXN0IHNvbWUgYnVpbHQtaW4gU1JGcwogLS0KLS0gCjIuNDguMQoK --=_140a30e4bb38362f1e20cf672b3ba39e--