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 1w565P-002tID-12 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 18:02:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w565N-008Kjr-2U for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 18:02:38 +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 1w565M-008Kji-2D for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 18:02:37 +0000 Received: from fhigh-b8-smtp.messagingengine.com ([202.12.124.159]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w565G-00000000pXE-0MPL for pgsql-hackers@postgresql.org; Tue, 24 Mar 2026 18:02:36 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id A74D87A00A2; Tue, 24 Mar 2026 14:02:28 -0400 (EDT) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Tue, 24 Mar 2026 14:02:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1774375348; x=1774461748; bh=lKozhGC+Ut auL4M2YKAxeuDOX0EtJYfMfhF7K99DYeQ=; b=jsaHfzuOfOdsdyWg3ZyGeskd8P ib+AIy4j6RJHaZKeo6S/KTIMKU+2483DOcRbjapZ11dvU7NgJWa1C7/50NOYJ1No /M1sjLKHNI8MeqGN2P4Fayoc+E90N9Po6f2/JGCzoAdCzl2Q4IdXtTAKyGeQsw3A LJizrs27+MCYTwC0nBVi1NHePIqLnsukwZItVdZAPnEgohsu2Q4mjjbud72VXibq +9z6ubMGkhDrX7kGYcqDZJPugD9GIwc1Cb9yj6QKZVPjNgfdbdkOwXgSk4qmBie5 6HLRl7DRqwKNNN1yL0Zu6B5IEarMgwAG1/f5JbQSQn2am5lNUP/+qwVxL5WQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1774375348; x=1774461748; bh=lKozhGC+UtauL4M2YKAxeuDOX0EtJYfMfhF 7K99DYeQ=; b=g9B5W8Tob8Ve7H6DD/gMMEeUVXszI8Nzj3OxxiiUMyQ+AcjRvPG RidgXnExLV7aH2BL01Y1YNfD5WL6OWei7RmFcdtm6SmNFWkICLbYg2c2SrzcQ8C1 upsRWByOaWxUholk4vPZYNUOXMP1wSZGzaam0zDhTa04RNBf+8FYPlSTDgeWNuvR ozJskGA6Jj05xXUnFwjhPItax/lsL/4KywOV20AiwtYBClvnYbpjOLCbd7vq0Pw7 PyQW+CBpN1i49zyWmxH5oouMfXNj2hsxUy1HWfJQHTSyDf7bIFNriOi4tRliL/kl kWC2Fmp5TG4X4QFNWEr0SrXNmhNZugB+1uQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgdefvddvvdegucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf gurhepofggfffhvfevkfgjfhfutgesmhdtreerredttdenucfhrhhomhepfdfirhgvghcu uehurhgufdcuoehgrhgvghessghurhgurdhmvgeqnecuggftrfgrthhtvghrnhephfevle ehfeefffduledvuddtgffhieelieekueefhffhledvffduvddvjeelkeelnecuvehluhhs thgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepghhrvghgsegsuhhrug drmhgvpdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthho pehnrghthhgrnhgusghoshhsrghrthesghhmrghilhdrtghomhdprhgtphhtthhopehpgh hsqhhlsehjqdgurghvihhsrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghr shesphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id EBB15C40075; Tue, 24 Mar 2026 14:02:27 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: Aqv5ICFmdMAN Date: Tue, 24 Mar 2026 14:02:07 -0400 From: "Greg Burd" To: "Nathan Bossart" Cc: "Jeff Davis" , pgsql-hackers Message-Id: In-Reply-To: References: <91f4dbe2-21ed-49f3-bebe-270f9bbec9d5@app.fastmail.com> <811d6f42e5481935943556b692859aae9146d4c9.camel@j-davis.com> <7b8681a578b5fe77103948eeb7b5cdd80fabad5d.camel@j-davis.com> <4f48f75d-4f2a-4240-b66d-597517796e02@app.fastmail.com> <3fba3f5671eddb221ba38f5a12acbe7cad27edf3.camel@j-davis.com> <427bfbda-c901-49e4-b725-8ddc41bec23d@app.fastmail.com> <887b1ee62794553a95c3578fcdc0cc1831e68b27.camel@j-davis.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=4c2f6a995cf94f2faf0e839bcfb553b4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --4c2f6a995cf94f2faf0e839bcfb553b4 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon, Mar 23, 2026, at 2:39 PM, Nathan Bossart wrote: > Thanks for the new patch. As a general note, please be sure to run > pgindent on patches. My review is still rather surface-level, sorry. Hello Nathan, Thanks for continuing to review my work. I appreciate your time. I do run pgindent on all patches, maybe something slipped it. Apologies if that's the case. :) > On Tue, Mar 17, 2026 at 02:04:11PM -0400, Greg Burd wrote: >> - id_attrs = RelationGetIndexAttrBitmap(relation, >> - INDEX_ATTR_BITMAP_IDENTITY_KEY); >> [...] >> + rid_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_IDENTITY_KEY); > > I'm nitpicking, but it took me a while to parse the > replica-identity-related code in heap_update() until I discovered that this > variable was renamed. I think we ought to leave the name alone. Okay, reverted to "id_attrs". >> /* >> * At this point newbuf and buffer are both pinned and locked, and newbuf >> - * has enough space for the new tuple. If they are the same buffer, only >> - * one pin is held. >> + * has enough space for the new tuple so we can use the HOT update path if >> + * the caller determined that it is allowable. >> + * >> + * NOTE: If newbuf == buffer then only one pin is held. >> */ >> - >> if (newbuf == buffer) > > Sorry, more nitpicks. In addition to the unnecessary removal of the blank > line, I'm not sure the changes to this comment are needed. Okay, reverted to earlier comment and blank line re-inserted. :) >> - /* >> - * If it is a HOT update, the update may still need to update summarized >> - * indexes, lest we fail to update those summaries and get incorrect >> - * results (for example, minmax bounds of the block may change with this >> - * update). >> - */ >> - if (use_hot_update) >> - { >> - if (summarized_update) >> - *update_indexes = TU_Summarizing; >> - else >> - *update_indexes = TU_None; >> - } >> - else >> - *update_indexes = TU_All; > > So, the "HOT but still need to update summarized indexes" code has been > moved from heap_update() to HeapUpdateHotAllowable(), which is called by > heap_update()'s callers (i.e., simple_heap_update() and > heapam_tuple_update()). That looks correct to me at a glance. Yes, that's indeed what that is. >> -simple_heap_update(Relation relation, const ItemPointerData *otid, HeapTuple tup, >> +simple_heap_update(Relation relation, const ItemPointerData *otid, HeapTuple tuple, > > nitpick: This variable name change looks unnecessary. Okay, reverted to "tup". >> @@ -944,8 +946,13 @@ ExecSimpleRelationUpdate(ResultRelInfo *resultRelInfo, >> if (rel->rd_rel->relispartition) >> ExecPartitionCheck(resultRelInfo, slot, estate, true); >> >> + modified_idx_attrs = ExecUpdateModifiedIdxAttrs(resultRelInfo, >> + estate, searchslot, slot); >> + >> simple_table_tuple_update(rel, tid, slot, estate->es_snapshot, >> - &update_indexes); >> + modified_idx_attrs, &update_indexes); >> + bms_free(modified_idx_attrs); > > I don't know how constructive of a comment this is, but this change in > particular seems quite out of place. It feels odd to me that we expect > callers of simple_table_tuple_update() to determine the > modified-index-attributes. I guess I'm confused why this work doesn't > belong one level down, i.e., in the tuple_update function. Problem is that simple_table_tuple_update() has the old TID and the new slot, but not the old slot (searchslot), so I'd have to change the signature of that function either way. Passing modified_idx_attrs is the new pattern, so I am just reusing that here. I could replicate what's in simple_heap_update() and call HeapUpdateModifiedIdxAttrs() after re-constructing the HeapTuple, but that feels very ugly/unnecessary to me given that the caller has that information already in slot form. I've left this as is, but I'm happy to continue discussing options. >> - * INDEX_ATTR_BITMAP_SUMMARIZED Columns included in summarizing indexes >> + * INDEX_ATTR_BITMAP_INDEXED Columns referenced by indexes >> + * INDEX_ATTR_BITMAP_SUMMARIZED Columns only included in summarizing indexes > >> - Bitmapset *summarizedattrs; /* columns with summarizing indexes */ >> + Bitmapset *indexedattrs; /* columns referenced by indexes */ >> + Bitmapset *summarizedattrs; /* columns only in summarizing indexes */ > > As before, the comment changes for the summarized-attr-related stuff seem > unnecessary. I disagree, the "only" is required to highlight the logic change here. Before this patch summarized attrs could overlap with indexed attrs, now it should not. This makes the logic a bit easier later in HeapUpdateHotAllowable(). >> if (indexDesc->rd_indam->amsummarizing) >> attrs = &summarizedattrs; >> else >> - attrs = &hotblockingattrs; >> + attrs = &indexedattrs; > >> + /* >> + * Record what attributes are only referenced by summarizing indexes. Then >> + * add that into the other indexed attributes to track all referenced >> + * attributes. >> + */ >> + summarizedattrs = bms_del_members(summarizedattrs, indexedattrs); >> + indexedattrs = bms_add_members(indexedattrs, summarizedattrs); > > The difference between hotblockingattrs and indexedattrs seems quite > subtle. I feel it was *much* more subtle before and mis-named ("hot blocking"). But, let's review. On master today in heapam.c heap_update() near the start and before the buffer lock there is the following: hot_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_HOT_BLOCKING); sum_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_SUMMARIZED); key_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_KEY); id_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_IDENTITY_KEY); It turns out that hot_attrs includes all INDEX_ATTR_BITMAP_IDENTITY_KEY and INDEX_ATTR_BITMAP_IDENTITY_KEY except for those found when scanning a summarizing index. So, what comes next is a bit wasteful. interesting_attrs = NULL; interesting_attrs = bms_add_members(interesting_attrs, hot_attrs); interesting_attrs = bms_add_members(interesting_attrs, sum_attrs); interesting_attrs = bms_add_members(interesting_attrs, key_attrs); <- unnecessary interesting_attrs = bms_add_members(interesting_attrs, id_attrs); <- unnecessary And that in the end, what's passed to HeapDetermineColumnsInfo() is all indexed attributes, including summarized, and those found in expressions. That function then reduces the set from "interesting" to "modified (and indexed is implied)". It does this by testing before/after datum for equality (memcmp() via datumIsEqual()) and that becomes our "modified_attrs" set used for lockmode and HOT eligibility tests. When testing later on (on master) for the HOT or NOT decision the code: if (newbuf == buffer) { // first test to see if any modified/indexed attributes are used // by non-summarizing indexes if (!bms_overlap(modified_attrs, hot_attrs)) { // and if not, we're going HOT use_hot_update = true; // at this point if there is any overlap it means that the only // attributes that might be referenced by an index and modified // are summarizing, there can't be any non-summarizing attributes // in the modified_attrs set otherwise our first test would have // failed, so this tests for the "only summarizing" case if (bms_overlap(modified_attrs, sum_attrs)) only_summarized = true; } } My thinking was, why re-create this every update? Why not have the cached representation of these bitmaps have what's needed? Now, I've changed the logic in this patch. First in the executor nodeModifyTable.c ExecUpdateModifiedIdxAttrs() identify which indexed attributes were modified (changed value): // get all attributes indexed on a relation, including summarized // note how we no longer construct "interesting_attrs" from a number // of bitmaps, the map we want is the map we cached and the name matches // the content, *all* indexed attributes (not indexed, but not summarized) attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_INDEXED); // compare the old/new reducing the set to only those that changed // as determined by datum_is_equal() to produce the modified/indexed // attribute set attrs = ExecCompareSlotAttrs(attrs, tupdesc, old_tts, new_tts); Then in heapam_handler.c heapam_tuple_update(): // call our helper function hot_allowed = HeapUpdateHotAllowable(relation, modified_idx_attrs, &summarized_only); HeapUpdateHotAllowable() { // if no indexed attributes were modified, we're done if (bms_is_empty(modified_idx_attrs)) return true; else { // now we need the *only* summarized attributes Bitmapset *sum_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_SUMMARIZED); // if the modified set is a sumset of the summarized, // we're only updating summarized if (bms_is_subset(modified_idx_attrs, sum_attrs)) { hot_allowed = true; *summarized_only = true; } else // at least one attribute is modified, referenced by an index // that isn't summarizing, HOT isn't allowed hot_allowed = false; bms_free(sum_attrs); } } So, we go from 3 calls to RelationGetIndexAttrBitmap() to 1, or at most 2 when there's a summarizing index (which is frequently the case). This feels more logical, cleaner, and has less overhead but supports the same HOT logic. > Am I understanding correctly that indexedattrs is essentially just > hotblockingattrs + summarizedattrs? And that this is all meant for > INDEX_ATTR_BITMAP_INDEXED? > > - INJECTION_POINT("heap_update-before-pin", NULL); > + INJECTION_POINT("simple_heap_update-before-pin", NULL); > > Why was this changed in heap_update()? Oops, that's a mistake. Fixed it. > -- > nathan Thanks for your review, v38 attached. best. -greg --4c2f6a995cf94f2faf0e839bcfb553b4 Content-Disposition: attachment; filename*0="v38-0001-Add-tests-to-cover-a-variety-of-heap-HOT-update-.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v38-0001-Add-tests-to-cover-a-variety-of-heap-HOT-update-.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSBlYjc0ZDEwYmRiOTBjMzViZTdjMDJhNzU4NTE5NWFmOTUxNTE4YWQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog VHVlLCAxMCBNYXIgMjAyNiAwOToyODoxNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjM4IDEv Ml0gQWRkIHRlc3RzIHRvIGNvdmVyIGEgdmFyaWV0eSBvZiBoZWFwIEhPVCB1cGRhdGUKIGJl aGF2aW9ycwoKVGhpcyBjb21taXQgaW50cm9kdWNlcyB0ZXN0IGluZnJhc3RydWN0dXJlIGZv ciB2ZXJpZnlpbmcgSGVhcC1Pbmx5IFR1cGxlCihIT1QpIHVwZGF0ZSBmdW5jdGlvbmFsaXR5 IGluIFBvc3RncmVTUUwuIEl0IHByb3ZpZGVzIGEgYmFzZWxpbmUgZm9yCmRlbW9uc3RyYXRp bmcgYW5kIHZhbGlkYXRpbmcgSE9UIHVwZGF0ZSBiZWhhdmlvci4KClJlZ3Jlc3Npb24gdGVz dHM6Ci0gQmFzaWMgSE9UIHZzIG5vbi1IT1QgdXBkYXRlIGRlY2lzaW9ucwotIEFsbC1vci1u b25lIHByb3BlcnR5IGZvciBtdWx0aXBsZSBpbmRleGVzCi0gUGFydGlhbCBpbmRleGVzIGFu ZCBwcmVkaWNhdGUgaGFuZGxpbmcKLSBCUklOIChzdW1tYXJpemluZykgaW5kZXhlcyBhbGxv d2luZyBIT1QgdXBkYXRlcwotIFRPQVNUIGNvbHVtbiBoYW5kbGluZyB3aXRoIEhPVAotIFVu aXF1ZSBjb25zdHJhaW50cyBiZWhhdmlvcgotIE11bHRpLWNvbHVtbiBpbmRleGVzCi0gUGFy dGl0aW9uZWQgdGFibGUgSE9UIHVwZGF0ZXMKCklzb2xhdGlvbiB0ZXN0czoKLSBIT1QgY2hh aW4gZm9ybWF0aW9uIGFuZCBtYWludGVuYW5jZQotIENvbmN1cnJlbnQgSE9UIHVwZGF0ZSBz Y2VuYXJpb3MKLSBJbmRleCBzY2FuIGJlaGF2aW9yIHdpdGggSE9UIGNoYWlucwotLS0KIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X3VwZGF0ZXMub3V0IHwgNzQ1ICsrKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAg ICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hvdF91cGRhdGVzLnNxbCAgICAg IHwgNjA1ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMzU1IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2hvdF91cGRhdGVzLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2hvdF91cGRhdGVzLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaG90X3VwZGF0ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ob3Rf dXBkYXRlcy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3 M2ZlMzMxMGRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ob3RfdXBkYXRlcy5vdXQKQEAgLTAsMCArMSw3NDUgQEAKKy0tCistLSBIT1RfVVBEQVRF UworLS0gVGVzdCBIZWFwLU9ubHkgVHVwbGUgKEhPVCkgdXBkYXRlIGRlY2lzaW9ucworLS0K Ky0tIFRoaXMgdGVzdCBzeXN0ZW1hdGljYWxseSB2ZXJpZmllcyB0aGF0IEhPVCB1cGRhdGVz IGFyZSB1c2VkIHdoZW4gYXBwcm9wcmlhdGUKKy0tIGFuZCBhdm9pZGVkIHdoZW4gbmVjZXNz YXJ5IChlLmcuLCB3aGVuIGluZGV4ZWQgY29sdW1ucyBhcmUgbW9kaWZpZWQpLgorLS0KKy0t IFdlIHVzZSBtdWx0aXBsZSB2YWxpZGF0aW9uIG1ldGhvZHM6CistLSAxLiBTdGF0aXN0aWNz IGZ1bmN0aW9ucyAocGdfc3RhdF9nZXRfdHVwbGVzX2hvdF91cGRhdGVkKQorLS0gMi4gcGFn ZWluc3BlY3QgZXh0ZW5zaW9uIGZvciBIT1QgY2hhaW4gZXhhbWluYXRpb24KKy0tIDMuIEVY UExBSU4gdG8gdmVyaWZ5IGluZGV4IHVzYWdlIGFmdGVyIHVwZGF0ZXMKKy0tCistLSBMb2Fk IHJlcXVpcmVkIGV4dGVuc2lvbnMKK0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyBw YWdlaW5zcGVjdDsKKy0tIEZ1bmN0aW9uIHRvIGdldCBIT1QgdXBkYXRlIGNvdW50CitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRfaG90X2NvdW50KHJlbF9uYW1lIHRleHQpCitS RVRVUk5TIFRBQkxFICgKKyAgICB1cGRhdGVzIEJJR0lOVCwKKyAgICBob3QgQklHSU5UCisp IEFTICQkCitERUNMQVJFCisgIHJlbF9vaWQgb2lkOworQkVHSU4KKyAgcmVsX29pZCA6PSBy ZWxfbmFtZTo6cmVnY2xhc3M6Om9pZDsKKworICAtLSBSZWFkIGJvdGggY29tbWl0dGVkIGFu ZCB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0cworICAtLSBJbiBhdXRvY29tbWl0IG1vZGUgKGRl ZmF1bHQgZm9yIHJlZ3Jlc3Npb24gdGVzdHMpLCB0aGlzIHdvcmtzIGNvcnJlY3RseQorICAt LSBOb3RlOiBJbiBleHBsaWNpdCB0cmFuc2FjdGlvbnMgKEJFR0lOL0NPTU1JVCksIGNvbW1p dHRlZCBzdGF0cyBhbHJlYWR5CisgIC0tIGluY2x1ZGUgZmx1c2hlZCB1cGRhdGVzLCBzbyB0 aGlzIHdvdWxkIGRvdWJsZS1jb3VudC4gRm9yIGV4cGxpY2l0CisgIC0tIHRyYW5zYWN0aW9u IHRlc3RpbmcsIGNhbGwgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCkgYmVmb3JlIHRoaXMg ZnVuY3Rpb24uCisgIHVwZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfdHVwbGVzX3Vw ZGF0ZWQocmVsX29pZCksIDApICsKKyAgICAgICAgICAgICBDT0FMRVNDRShwZ19zdGF0X2dl dF94YWN0X3R1cGxlc191cGRhdGVkKHJlbF9vaWQpLCAwKTsKKyAgaG90IDo9IENPQUxFU0NF KHBnX3N0YXRfZ2V0X3R1cGxlc19ob3RfdXBkYXRlZChyZWxfb2lkKSwgMCkgKworICAgICAg ICAgQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQocmVsX29p ZCksIDApOworCisgIFJFVFVSTiBORVhUOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsK Ky0tIENoZWNrIGlmIGEgdHVwbGUgaXMgcGFydCBvZiBhIEhPVCBjaGFpbiAoaGFzIGEgcHJl ZGVjZXNzb3Igb24gc2FtZSBwYWdlKQorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gaGFz X2hvdF9jaGFpbihyZWxfbmFtZSB0ZXh0LCB0YXJnZXRfY3RpZCB0aWQpCitSRVRVUk5TIGJv b2xlYW4gQVMgJCQKK0RFQ0xBUkUKKyAgYmxvY2tfbnVtIGludDsKKyAgcGFnZV9pdGVtIHJl Y29yZDsKK0JFR0lOCisgIGJsb2NrX251bSA6PSAodGFyZ2V0X2N0aWQ6OnRleHQ6OnBvaW50 KVswXTo6aW50OworCisgIC0tIExvb2sgZm9yIGEgZGlmZmVyZW50IHR1cGxlIG9uIHRoZSBz YW1lIHBhZ2UgdGhhdCBwb2ludHMgdG8gb3VyIHRhcmdldCB0dXBsZQorICBGT1IgcGFnZV9p dGVtIElOCisgICAgU0VMRUNUIGxwLCBscF9mbGFncywgdF9jdGlkCisgICAgRlJPTSBoZWFw X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKHJlbF9uYW1lLCBibG9ja19udW0pKQorICAgIFdI RVJFIGxwX2ZsYWdzID0gMQorICAgICAgQU5EIHRfY3RpZCBJUyBOT1QgTlVMTAorICAgICAg QU5EIHRfY3RpZCA9IHRhcmdldF9jdGlkCisgICAgICBBTkQgKCcoJyB8fCBibG9ja19udW06 OnRleHQgfHwgJywnIHx8IGxwOjp0ZXh0IHx8ICcpJyk6OnRpZCAhPSB0YXJnZXRfY3RpZAor ICBMT09QCisgICAgUkVUVVJOIHRydWU7CisgIEVORCBMT09QOworCisgIFJFVFVSTiBmYWxz ZTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CistLSBQcmludCB0aGUgSE9UIGNoYWlu IHN0YXJ0aW5nIGZyb20gYSBnaXZlbiB0dXBsZQorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gcHJpbnRfaG90X2NoYWluKHJlbF9uYW1lIHRleHQsIHN0YXJ0X2N0aWQgdGlkKQorUkVU VVJOUyBUQUJMRShjaGFpbl9wb3NpdGlvbiBpbnQsIGN0aWQgdGlkLCBscF9mbGFncyB0ZXh0 LCB0X2N0aWQgdGlkLCBjaGFpbl9lbmQgYm9vbGVhbikgQVMKKyQkCisjdmFyaWFibGVfY29u ZmxpY3QgdXNlX2NvbHVtbgorREVDTEFSRQorICBibG9ja19udW0gaW50OworICBsaW5lX3B0 ciBpbnQ7CisgIGN1cnJlbnRfY3RpZCB0aWQgOj0gc3RhcnRfY3RpZDsKKyAgbmV4dF9jdGlk IHRpZDsKKyAgcG9zaXRpb24gaW50IDo9IDA7CisgIG1heF9pdGVyYXRpb25zIGludCA6PSAx MDA7CisgIHBhZ2VfaXRlbSByZWNvcmQ7CisgIGZvdW5kX3ByZWRlY2Vzc29yIGJvb2xlYW4g Oj0gZmFsc2U7CisgIGZsYWdzX25hbWUgdGV4dDsKK0JFR0lOCisgIGJsb2NrX251bSA6PSAo c3RhcnRfY3RpZDo6dGV4dDo6cG9pbnQpWzBdOjppbnQ7CisKKyAgLS0gRmluZCB0aGUgcHJl ZGVjZXNzb3IgKG9sZCB0dXBsZSBwb2ludGluZyB0byBvdXIgc3RhcnRfY3RpZCkKKyAgRk9S IHBhZ2VfaXRlbSBJTgorICAgIFNFTEVDVCBscCwgbHBfZmxhZ3MsIHRfY3RpZAorICAgIEZS T00gaGVhcF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZShyZWxfbmFtZSwgYmxvY2tfbnVtKSkK KyAgICBXSEVSRSBscF9mbGFncyA9IDEKKyAgICAgIEFORCB0X2N0aWQgPSBzdGFydF9jdGlk CisgIExPT1AKKyAgICBjdXJyZW50X2N0aWQgOj0gKCcoJyB8fCBibG9ja19udW06OnRleHQg fHwgJywnIHx8IHBhZ2VfaXRlbS5scDo6dGV4dCB8fCAnKScpOjp0aWQ7CisgICAgZm91bmRf cHJlZGVjZXNzb3IgOj0gdHJ1ZTsKKyAgICBFWElUOworICBFTkQgTE9PUDsKKworICAtLSBJ ZiBubyBwcmVkZWNlc3NvciBmb3VuZCwgc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gY3RpZAorICBJ RiBOT1QgZm91bmRfcHJlZGVjZXNzb3IgVEhFTgorICAgIGN1cnJlbnRfY3RpZCA6PSBzdGFy dF9jdGlkOworICBFTkQgSUY7CisKKyAgLS0gRm9sbG93IHRoZSBjaGFpbiBmb3J3YXJkCisg IFdISUxFIHBvc2l0aW9uIDwgbWF4X2l0ZXJhdGlvbnMgTE9PUAorICAgIGxpbmVfcHRyIDo9 IChjdXJyZW50X2N0aWQ6OnRleHQ6OnBvaW50KVsxXTo6aW50OworCisgICAgRk9SIHBhZ2Vf aXRlbSBJTgorICAgICAgU0VMRUNUIGxwLCBscF9mbGFncywgdF9jdGlkCisgICAgICBGUk9N IGhlYXBfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UocmVsX25hbWUsIGJsb2NrX251bSkpCisg ICAgICBXSEVSRSBscCA9IGxpbmVfcHRyCisgICAgTE9PUAorICAgICAgLS0gTWFwIGxwX2Zs YWdzIHRvIG5hbWVzCisgICAgICBmbGFnc19uYW1lIDo9IENBU0UgcGFnZV9pdGVtLmxwX2Zs YWdzCisgICAgICAgIFdIRU4gMCBUSEVOICd1bnVzZWQgKDApJworICAgICAgICBXSEVOIDEg VEhFTiAnbm9ybWFsICgxKScKKyAgICAgICAgV0hFTiAyIFRIRU4gJ3JlZGlyZWN0ICgyKScK KyAgICAgICAgV0hFTiAzIFRIRU4gJ2RlYWQgKDMpJworICAgICAgICBFTFNFICd1bmtub3du ICgnIHx8IHBhZ2VfaXRlbS5scF9mbGFnczo6dGV4dCB8fCAnKScKKyAgICAgIEVORDsKKwor ICAgICAgUkVUVVJOIFFVRVJZIFNFTEVDVAorICAgICAgICBwb3NpdGlvbiwKKyAgICAgICAg Y3VycmVudF9jdGlkLAorICAgICAgICBmbGFnc19uYW1lLAorICAgICAgICBwYWdlX2l0ZW0u dF9jdGlkLAorICAgICAgICAocGFnZV9pdGVtLnRfY3RpZCBJUyBOVUxMIE9SIHBhZ2VfaXRl bS50X2N0aWQgPSBjdXJyZW50X2N0aWQpOjpib29sZWFuCisgICAgICA7CisKKyAgICAgIElG IHBhZ2VfaXRlbS50X2N0aWQgSVMgTlVMTCBPUiBwYWdlX2l0ZW0udF9jdGlkID0gY3VycmVu dF9jdGlkIFRIRU4KKyAgICAgICAgUkVUVVJOOworICAgICAgRU5EIElGOworCisgICAgICBu ZXh0X2N0aWQgOj0gcGFnZV9pdGVtLnRfY3RpZDsKKworICAgICAgSUYgKG5leHRfY3RpZDo6 dGV4dDo6cG9pbnQpWzBdOjppbnQgIT0gYmxvY2tfbnVtIFRIRU4KKyAgICAgICAgUkVUVVJO OworICAgICAgRU5EIElGOworCisgICAgICBjdXJyZW50X2N0aWQgOj0gbmV4dF9jdGlkOwor ICAgICAgcG9zaXRpb24gOj0gcG9zaXRpb24gKyAxOworICAgIEVORCBMT09QOworCisgICAg SUYgcG9zaXRpb24gPSAwIFRIRU4KKyAgICAgIFJFVFVSTjsKKyAgICBFTkQgSUY7CisgIEVO RCBMT09QOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKy0tIEJhc2ljIEhPVCB1cGRh dGUgKHVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4pCitDUkVBVEUgVEFCTEUgaG90X3Rlc3Qg KAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBpbmRleGVkX2NvbCBpbnQsCisgICAg bm9uX2luZGV4ZWRfY29sIHRleHQKKykgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKK0NSRUFU RSBJTkRFWCBob3RfdGVzdF9pbmRleGVkX2lkeCBPTiBob3RfdGVzdChpbmRleGVkX2NvbCk7 CitJTlNFUlQgSU5UTyBob3RfdGVzdCBWQUxVRVMgKDEsIDEwMCwgJ2luaXRpYWwnKTsKK0lO U0VSVCBJTlRPIGhvdF90ZXN0IFZBTFVFUyAoMiwgMjAwLCAnaW5pdGlhbCcpOworSU5TRVJU IElOVE8gaG90X3Rlc3QgVkFMVUVTICgzLCAzMDAsICdpbml0aWFsJyk7CistLSBHZXQgYmFz ZWxpbmUKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKyB1cGRh dGVzIHwgaG90IAorLS0tLS0tLS0tKy0tLS0tCisgICAgICAgMCB8ICAgMAorKDEgcm93KQor CistLSBTaG91bGQgYmUgSE9UIHVwZGF0ZXMgKG9ubHkgbm9uLWluZGV4ZWQgY29sdW1uIG1v ZGlmaWVkKQorVVBEQVRFIGhvdF90ZXN0IFNFVCBub25faW5kZXhlZF9jb2wgPSAndXBkYXRl ZDEnIFdIRVJFIGlkID0gMTsKK1VQREFURSBob3RfdGVzdCBTRVQgbm9uX2luZGV4ZWRfY29s ID0gJ3VwZGF0ZWQyJyBXSEVSRSBpZCA9IDI7CitVUERBVEUgaG90X3Rlc3QgU0VUIG5vbl9p bmRleGVkX2NvbCA9ICd1cGRhdGVkMycgV0hFUkUgaWQgPSAzOworLS0gVmVyaWZ5IEhPVCB1 cGRhdGVzIG9jY3VycmVkCitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0 Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAgIDMgfCAgIDMK KygxIHJvdykKKworLS0gRHVtcCB0aGUgSE9UIGNoYWluIGJlZm9yZSBWQUNVVU1pbmcKK1dJ VEggY3VycmVudF90dXBsZSBBUyAoCisgIFNFTEVDVCBjdGlkIEZST00gaG90X3Rlc3QgV0hF UkUgaWQgPSAxCispCitTRUxFQ1QKKyAgaGFzX2hvdF9jaGFpbignaG90X3Rlc3QnLCBjdXJy ZW50X3R1cGxlLmN0aWQpIEFTIGhhc19jaGFpbiwKKyAgY2hhaW5fcG9zaXRpb24sCisgIHBy aW50X2hvdF9jaGFpbi5jdGlkLAorICBscF9mbGFncywKKyAgdF9jdGlkCitGUk9NIGN1cnJl bnRfdHVwbGUsCitMQVRFUkFMIHByaW50X2hvdF9jaGFpbignaG90X3Rlc3QnLCBjdXJyZW50 X3R1cGxlLmN0aWQpOworIGhhc19jaGFpbiB8IGNoYWluX3Bvc2l0aW9uIHwgY3RpZCAgfCAg bHBfZmxhZ3MgIHwgdF9jdGlkIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLQorIHQgICAgICAgICB8ICAgICAgICAgICAgICAw IHwgKDAsMSkgfCBub3JtYWwgKDEpIHwgKDAsNCkKKyB0ICAgICAgICAgfCAgICAgICAgICAg ICAgMSB8ICgwLDQpIHwgbm9ybWFsICgxKSB8ICgwLDQpCisoMiByb3dzKQorCistLSBWYWN1 dW0gdGhlIHJlbGF0aW9uLCBleHBlY3QgdGhlIEhPVCBjaGFpbiB0byBjb2xsYXBzZQorVkFD VVVNIGhvdF90ZXN0OworLS0gU2hvdyB0aGF0IHRoZXJlIGlzIG5vIGNoYWluIGFmdGVyIHZh Y3V1bQorV0lUSCBjdXJyZW50X3R1cGxlIEFTICgKKyAgU0VMRUNUIGN0aWQgRlJPTSBob3Rf dGVzdCBXSEVSRSBpZCA9IDEKKykKK1NFTEVDVAorICBoYXNfaG90X2NoYWluKCdob3RfdGVz dCcsIGN1cnJlbnRfdHVwbGUuY3RpZCkgQVMgaGFzX2NoYWluLAorICBjaGFpbl9wb3NpdGlv biwKKyAgcHJpbnRfaG90X2NoYWluLmN0aWQsCisgIGxwX2ZsYWdzLAorICB0X2N0aWQKK0ZS T00gY3VycmVudF90dXBsZSwKK0xBVEVSQUwgcHJpbnRfaG90X2NoYWluKCdob3RfdGVzdCcs IGN1cnJlbnRfdHVwbGUuY3RpZCk7CisgaGFzX2NoYWluIHwgY2hhaW5fcG9zaXRpb24gfCBj dGlkICB8ICBscF9mbGFncyAgfCB0X2N0aWQgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgZiAgICAgICAgIHwgICAgICAg ICAgICAgIDAgfCAoMCw0KSB8IG5vcm1hbCAoMSkgfCAoMCw0KQorKDEgcm93KQorCistLSBO b24tSE9UIHVwZGF0ZSAodXBkYXRlIGluZGV4ZWQgY29sdW1uKQorVVBEQVRFIGhvdF90ZXN0 IFNFVCBpbmRleGVkX2NvbCA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdl dF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSst LS0tLQorICAgICAgIDQgfCAgIDMKKygxIHJvdykKKworLS0gVmVyaWZ5IGluZGV4IHdhcyB1 cGRhdGVkIChuZXcgdmFsdWUgZmluZGFibGUpCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBpZCwgaW5kZXhlZF9jb2wgRlJPTSBob3Rf dGVzdCBXSEVSRSBpbmRleGVkX2NvbCA9IDE1MDsKKyAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBob3RfdGVz dF9pbmRleGVkX2lkeCBvbiBob3RfdGVzdAorICAgSW5kZXggQ29uZDogKGluZGV4ZWRfY29s ID0gMTUwKQorKDIgcm93cykKKworU0VMRUNUIGlkLCBpbmRleGVkX2NvbCBGUk9NIGhvdF90 ZXN0IFdIRVJFIGluZGV4ZWRfY29sID0gMTUwOworIGlkIHwgaW5kZXhlZF9jb2wgCistLS0t Ky0tLS0tLS0tLS0tLS0KKyAgMSB8ICAgICAgICAgMTUwCisoMSByb3cpCisKKy0tIFZlcmlm eSBvbGQgdmFsdWUgbm8gbG9uZ2VyIGluIGluZGV4CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCBpZCBGUk9NIGhvdF90ZXN0IFdIRVJFIGluZGV4ZWRfY29sID0gMTAwOworICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIGhvdF90ZXN0X2luZGV4ZWRfaWR4IG9uIGhvdF90ZXN0CisgICBJbmRleCBD b25kOiAoaW5kZXhlZF9jb2wgPSAxMDApCisoMiByb3dzKQorCitTRUxFQ1QgaWQgRlJPTSBo b3RfdGVzdCBXSEVSRSBpbmRleGVkX2NvbCA9IDEwMDsKKyBpZCAKKy0tLS0KKygwIHJvd3Mp CisKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworLS0gQWxsLW9yLW5vbmUgcHJvcGVydHk6IHVw ZGF0aW5nIG9uZSBpbmRleGVkIGNvbHVtbiByZXF1aXJlcyBBTEwgaW5kZXggdXBkYXRlcwor RFJPUCBUQUJMRSBob3RfdGVzdDsKK0NSRUFURSBUQUJMRSBob3RfdGVzdCAoCisgICAgaWQg aW50IFBSSU1BUlkgS0VZLAorICAgIGNvbF9hIGludCwKKyAgICBjb2xfYiBpbnQsCisgICAg Y29sX2MgaW50LAorICAgIG5vbl9pbmRleGVkIHRleHQKKykgV0lUSCAoZmlsbGZhY3RvciA9 IDUwKTsKK0NSRUFURSBJTkRFWCBob3RfdGVzdF9hX2lkeCBPTiBob3RfdGVzdChjb2xfYSk7 CitDUkVBVEUgSU5ERVggaG90X3Rlc3RfYl9pZHggT04gaG90X3Rlc3QoY29sX2IpOworQ1JF QVRFIElOREVYIGhvdF90ZXN0X2NfaWR4IE9OIGhvdF90ZXN0KGNvbF9jKTsKK0lOU0VSVCBJ TlRPIGhvdF90ZXN0IFZBTFVFUyAoMSwgMTAsIDIwLCAzMCwgJ2luaXRpYWwnKTsKKy0tIFVw ZGF0ZSBvbmx5IGNvbF9hIC0gc2hvdWxkIE5PVCBiZSBIT1QgYmVjYXVzZSBhbiBpbmRleGVk IGNvbHVtbiBjaGFuZ2VkCistLSBUaGlzIG1lYW5zIEFMTCBpbmRleGVzIG11c3QgYmUgdXBk YXRlZCAoYWxsLW9yLW5vbmUgcHJvcGVydHkpCitVUERBVEUgaG90X3Rlc3QgU0VUIGNvbF9h ID0gMTUgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3Rf dGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAxIHwg ICAwCisoMSByb3cpCisKKy0tIE5vdyB1cGRhdGUgb25seSBub24taW5kZXhlZCBjb2x1bW4g LSBzaG91bGQgYmUgSE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIG5vbl9pbmRleGVkID0gJ3Vw ZGF0ZWQnOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcpOworIHVw ZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAyIHwgICAxCisoMSByb3cp CisKKy0tIFBhcnRpYWwgaW5kZXg6IGJvdGggb2xkIGFuZCBuZXcgb3V0c2lkZSBwcmVkaWNh dGUgKGNvbnNlcnZhdGl2ZSA9IG5vbi1IT1QpCitEUk9QIFRBQkxFIGhvdF90ZXN0OworQ1JF QVRFIFRBQkxFIGhvdF90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgc3Rh dHVzIHRleHQsCisgICAgZGF0YSB0ZXh0CispIFdJVEggKGZpbGxmYWN0b3IgPSA1MCk7Cist LSBQYXJ0aWFsIGluZGV4IG9ubHkgY292ZXJzIHN0YXR1cyA9ICdhY3RpdmUnCitDUkVBVEUg SU5ERVggaG90X3Rlc3RfYWN0aXZlX2lkeCBPTiBob3RfdGVzdChzdGF0dXMpIFdIRVJFIHN0 YXR1cyA9ICdhY3RpdmUnOworSU5TRVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgxLCAnYWN0 aXZlJywgJ2RhdGExJyk7CitJTlNFUlQgSU5UTyBob3RfdGVzdCBWQUxVRVMgKDIsICdpbmFj dGl2ZScsICdkYXRhMicpOworSU5TRVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgzLCAnZGVs ZXRlZCcsICdkYXRhMycpOworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiBvbiAnYWN0 aXZlJyByb3cgKGluIHByZWRpY2F0ZSwgc3RhdHVzIHVuY2hhbmdlZCkKKy0tIFNob3VsZCBi ZSBIT1QKK1VQREFURSBob3RfdGVzdCBTRVQgZGF0YSA9ICd1cGRhdGVkMScgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcpOworIHVwZGF0 ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAxIHwgICAxCisoMSByb3cpCisK Ky0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gb24gJ2luYWN0aXZlJyByb3cgKG91dHNp ZGUgcHJlZGljYXRlKQorLS0gU2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCBk YXRhID0gJ3VwZGF0ZWQyJyBXSEVSRSBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3Rf Y291bnQoJ2hvdF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQor ICAgICAgIDIgfCAgIDIKKygxIHJvdykKKworLS0gVXBkYXRlIHN0YXR1cyBmcm9tICdpbmFj dGl2ZScgdG8gJ2RlbGV0ZWQnIChib3RoIG91dHNpZGUgcHJlZGljYXRlKQorLS0gUG9zdGdy ZVNRTCBpcyBjb25zZXJ2YXRpdmU6IGhlYXAgaW5zZXJ0IGhhcHBlbnMgYmVmb3JlIHByZWRp Y2F0ZSBjaGVjaworLS0gU28gdGhpcyBpcyBOT04tSE9UIGV2ZW4gdGhvdWdoIGJvdGggdmFs dWVzIGFyZSBvdXRzaWRlIHByZWRpY2F0ZQorVVBEQVRFIGhvdF90ZXN0IFNFVCBzdGF0dXMg PSAnZGVsZXRlZCcgV0hFUkUgaWQgPSAyOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50 KCdob3RfdGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAg ICAzIHwgICAyCisoMSByb3cpCisKKy0tIFZlcmlmeSBpbmRleCBzdGlsbCB3b3JrcyBmb3Ig J2FjdGl2ZScgcm93cworU0VMRUNUIGlkLCBzdGF0dXMgRlJPTSBob3RfdGVzdCBXSEVSRSBz dGF0dXMgPSAnYWN0aXZlJzsKKyBpZCB8IHN0YXR1cyAKKy0tLS0rLS0tLS0tLS0KKyAgMSB8 IGFjdGl2ZQorKDEgcm93KQorCistLSBPbmx5IEJSSU4gKHN1bW1hcml6aW5nKSBpbmRleGVz IG9uIG5vbi1QSyBjb2x1bW5zCitEUk9QIFRBQkxFIGhvdF90ZXN0OworQ1JFQVRFIFRBQkxF IGhvdF90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgdHMgdGltZXN0YW1w LAorICAgIHZhbHVlIGludCwKKyAgICBicmluX2NvbCBpbnQKKykgV0lUSCAoZmlsbGZhY3Rv ciA9IDUwKTsKK0NSRUFURSBJTkRFWCBob3RfdGVzdF90c19icmluIE9OIGhvdF90ZXN0IFVT SU5HIGJyaW4odHMpOworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2JyaW5fY29sX2JyaW4gT04g aG90X3Rlc3QgVVNJTkcgYnJpbihicmluX2NvbCk7CitJTlNFUlQgSU5UTyBob3RfdGVzdCBW QUxVRVMgKDEsICcyMDI0LTAxLTAxJywgMTAwLCAxMDAwKTsKKy0tIFVwZGF0ZSBib3RoIEJS SU4gY29sdW1ucyAtIHNob3VsZCBzdGlsbCBiZSBIT1QgKG9ubHkgc3VtbWFyaXppbmcgaW5k ZXhlcykKK1VQREFURSBob3RfdGVzdCBTRVQgdHMgPSAnMjAyNC0wMS0wMicsIGJyaW5fY29s ID0gMjAwMCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hv dF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAgIDEg fCAgIDEKKygxIHJvdykKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3Vs ZCBhbHNvIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCB2YWx1ZSA9IDIwMCBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisgdXBk YXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAgIDIgfCAgIDIKKygxIHJvdykK KworLS0gVE9BU1QgYW5kIEhPVDogVE9BU1RlZCBjb2x1bW5zIGNhbiBwYXJ0aWNpcGF0ZSBp biBIT1QKK0RST1AgVEFCTEUgaG90X3Rlc3Q7CitDUkVBVEUgVEFCTEUgaG90X3Rlc3QgKAor ICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBpbmRleGVkX2NvbCBpbnQsCisgICAgbGFy Z2VfdGV4dCB0ZXh0LAorICAgIHNtYWxsX3RleHQgdGV4dAorKSBXSVRIIChmaWxsZmFjdG9y ID0gNTApOworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2lkeCBPTiBob3RfdGVzdChpbmRleGVk X2NvbCk7CistLSBJbnNlcnQgcm93IHdpdGggVE9BU1RlZCBjb2x1bW4gKD4gMktCKQorSU5T RVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgxLCAxMDAsIHJlcGVhdCgneCcsIDMwMDApLCAn c21hbGwnKTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCwgbm9uLVRPQVNUZWQgY29sdW1uIC0g c2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCBzbWFsbF90ZXh0ID0gJ3VwZGF0 ZWQnOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcpOworIHVwZGF0 ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAxIHwgICAxCisoMSByb3cpCisK Ky0tIFVwZGF0ZSBUT0FTVGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QgaWYgaW5kZXhlZCBj b2x1bW4gdW5jaGFuZ2VkCitVUERBVEUgaG90X3Rlc3QgU0VUIGxhcmdlX3RleHQgPSByZXBl YXQoJ3knLCAzMDAwKTsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3Qn KTsKKyB1cGRhdGVzIHwgaG90IAorLS0tLS0tLS0tKy0tLS0tCisgICAgICAgMiB8ICAgMgor KDEgcm93KQorCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgTk9UIGJlIEhP VAorVVBEQVRFIGhvdF90ZXN0IFNFVCBpbmRleGVkX2NvbCA9IDIwMDsKK1NFTEVDVCAqIEZS T00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKyB1cGRhdGVzIHwgaG90IAorLS0tLS0t LS0tKy0tLS0tCisgICAgICAgMyB8ICAgMgorKDEgcm93KQorCistLSBVbmlxdWUgY29uc3Ry YWludCAodW5pcXVlIGluZGV4KSBiZWhhdmVzIGxpa2UgcmVndWxhciBpbmRleAorRFJPUCBU QUJMRSBob3RfdGVzdDsKK0NSRUFURSBUQUJMRSBob3RfdGVzdCAoCisgICAgaWQgaW50IFBS SU1BUlkgS0VZLAorICAgIHVuaXF1ZV9jb2wgaW50IFVOSVFVRSwKKyAgICBkYXRhIHRleHQK KykgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKK0lOU0VSVCBJTlRPIGhvdF90ZXN0IFZBTFVF UyAoMSwgMTAwLCAnZGF0YTEnKTsKK0lOU0VSVCBJTlRPIGhvdF90ZXN0IFZBTFVFUyAoMiwg MjAwLCAnZGF0YTInKTsKKy0tIFVwZGF0ZSBkYXRhIChub24taW5kZXhlZCkgLSBzaG91bGQg YmUgSE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIGRhdGEgPSAndXBkYXRlZCc7CitTRUxFQ1Qg KiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0t LS0tLS0tLSstLS0tLQorICAgICAgIDIgfCAgIDIKKygxIHJvdykKKworLS0gVmVyaWZ5IHVu aXF1ZSBjb25zdHJhaW50IHN0aWxsIGVuZm9yY2VkCitTRUxFQ1QgaWQsIHVuaXF1ZV9jb2ws IGRhdGEgRlJPTSBob3RfdGVzdCBPUkRFUiBCWSBpZDsKKyBpZCB8IHVuaXF1ZV9jb2wgfCAg ZGF0YSAgIAorLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisgIDEgfCAgICAgICAgMTAw IHwgdXBkYXRlZAorICAyIHwgICAgICAgIDIwMCB8IHVwZGF0ZWQKKygyIHJvd3MpCisKKy0t IFRoaXMgc2hvdWxkIGZhaWwgKHVuaXF1ZSB2aW9sYXRpb24pCitVUERBVEUgaG90X3Rlc3Qg U0VUIHVuaXF1ZV9jb2wgPSAxMDAgV0hFUkUgaWQgPSAyOworRVJST1I6ICBkdXBsaWNhdGUg a2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJob3RfdGVzdF91bmlxdWVf Y29sX2tleSIKK0RFVEFJTDogIEtleSAodW5pcXVlX2NvbCk9KDEwMCkgYWxyZWFkeSBleGlz dHMuCistLSBNdWx0aS1jb2x1bW4gaW5kZXg6IGFueSBjb2x1bW4gY2hhbmdlID0gbm9uLUhP VAorRFJPUCBUQUJMRSBob3RfdGVzdDsKK0NSRUFURSBUQUJMRSBob3RfdGVzdCAoCisgICAg aWQgaW50IFBSSU1BUlkgS0VZLAorICAgIGNvbF9hIGludCwKKyAgICBjb2xfYiBpbnQsCisg ICAgY29sX2MgaW50LAorICAgIGRhdGEgdGV4dAorKSBXSVRIIChmaWxsZmFjdG9yID0gNTAp OworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2FiX2lkeCBPTiBob3RfdGVzdChjb2xfYSwgY29s X2IpOworSU5TRVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgxLCAxMCwgMjAsIDMwLCAnZGF0 YScpOworLS0gVXBkYXRlIGNvbF9hIChwYXJ0IG9mIG11bHRpLWNvbHVtbiBpbmRleCkgLSBz aG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCBjb2xfYSA9IDE1OworU0VM RUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcpOworIHVwZGF0ZXMgfCBob3Qg CistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAxIHwgICAwCisoMSByb3cpCisKKy0tIFJlc2V0 CitVUERBVEUgaG90X3Rlc3QgU0VUIGNvbF9hID0gMTA7CistLSBVcGRhdGUgY29sX2IgKHBh cnQgb2YgbXVsdGktY29sdW1uIGluZGV4KSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUg aG90X3Rlc3QgU0VUIGNvbF9iID0gMjU7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQo J2hvdF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAg IDMgfCAgIDAKKygxIHJvdykKKworLS0gUmVzZXQKK1VQREFURSBob3RfdGVzdCBTRVQgY29s X2IgPSAyMDsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKyB1 cGRhdGVzIHwgaG90IAorLS0tLS0tLS0tKy0tLS0tCisgICAgICAgNCB8ICAgMAorKDEgcm93 KQorCistLSBVcGRhdGUgY29sX2MgKG5vdCBpbmRleGVkKSAtIHNob3VsZCBiZSBIT1QKK1VQ REFURSBob3RfdGVzdCBTRVQgY29sX2MgPSAzNTsKKy0tIFVwZGF0ZSBkYXRhIChub3QgaW5k ZXhlZCkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIGRhdGEgPSAndXBk YXRlZCc7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisgdXBk YXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAgIDYgfCAgIDIKKygxIHJvdykK KworLS0gUGFydGl0aW9uZWQgdGFibGVzOiBIT1Qgd29ya3Mgd2l0aGluIHBhcnRpdGlvbnMK K0RST1AgVEFCTEUgSUYgRVhJU1RTIGhvdF90ZXN0X3BhcnRpdGlvbmVkIENBU0NBREU7CitO T1RJQ0U6ICB0YWJsZSAiaG90X3Rlc3RfcGFydGl0aW9uZWQiIGRvZXMgbm90IGV4aXN0LCBz a2lwcGluZworQ1JFQVRFIFRBQkxFIGhvdF90ZXN0X3BhcnRpdGlvbmVkICgKKyAgICBpZCBp bnQsCisgICAgcGFydGl0aW9uX2tleSBpbnQsCisgICAgaW5kZXhlZF9jb2wgaW50LAorICAg IGRhdGEgdGV4dCwKKyAgICBQUklNQVJZIEtFWSAoaWQsIHBhcnRpdGlvbl9rZXkpCispIFBB UlRJVElPTiBCWSBSQU5HRSAocGFydGl0aW9uX2tleSk7CitDUkVBVEUgVEFCTEUgaG90X3Rl c3RfcGFydDEgUEFSVElUSU9OIE9GIGhvdF90ZXN0X3BhcnRpdGlvbmVkCisgICAgRk9SIFZB TFVFUyBGUk9NICgxKSBUTyAoMTAwKSBXSVRIIChmaWxsZmFjdG9yID0gNTApOworQ1JFQVRF IFRBQkxFIGhvdF90ZXN0X3BhcnQyIFBBUlRJVElPTiBPRiBob3RfdGVzdF9wYXJ0aXRpb25l ZAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKSBXSVRIIChmaWxsZmFjdG9y ID0gNTApOworQ1JFQVRFIElOREVYIGhvdF90ZXN0X3BhcnRfaWR4IE9OIGhvdF90ZXN0X3Bh cnRpdGlvbmVkKGluZGV4ZWRfY29sKTsKK0lOU0VSVCBJTlRPIGhvdF90ZXN0X3BhcnRpdGlv bmVkIFZBTFVFUyAoMSwgNTAsIDEwMCwgJ2luaXRpYWwxJyk7CitJTlNFUlQgSU5UTyBob3Rf dGVzdF9wYXJ0aXRpb25lZCBWQUxVRVMgKDIsIDE1MCwgMjAwLCAnaW5pdGlhbDInKTsKKy0t IFVwZGF0ZSBpbiBwYXJ0aXRpb24gMSAobm9uLWluZGV4ZWQgY29sdW1uKSAtIHNob3VsZCBi ZSBIT1QKK1VQREFURSBob3RfdGVzdF9wYXJ0aXRpb25lZCBTRVQgZGF0YSA9ICd1cGRhdGVk MScgV0hFUkUgaWQgPSAxOworLS0gVXBkYXRlIGluIHBhcnRpdGlvbiAyIChub24taW5kZXhl ZCBjb2x1bW4pIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0X3BhcnRpdGlvbmVk IFNFVCBkYXRhID0gJ3VwZGF0ZWQyJyBXSEVSRSBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGdl dF9ob3RfY291bnQoJ2hvdF90ZXN0X3BhcnQxJyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0t LS0tLSstLS0tLQorICAgICAgIDEgfCAgIDEKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBn ZXRfaG90X2NvdW50KCdob3RfdGVzdF9wYXJ0MicpOworIHVwZGF0ZXMgfCBob3QgCistLS0t LS0tLS0rLS0tLS0KKyAgICAgICAxIHwgICAxCisoMSByb3cpCisKKy0tIFZlcmlmeSBpbmRl eGVzIHdvcmsgb24gcGFydGl0aW9ucworU0VMRUNUIGlkIEZST00gaG90X3Rlc3RfcGFydGl0 aW9uZWQgV0hFUkUgaW5kZXhlZF9jb2wgPSAxMDA7CisgaWQgCistLS0tCisgIDEKKygxIHJv dykKKworU0VMRUNUIGlkIEZST00gaG90X3Rlc3RfcGFydGl0aW9uZWQgV0hFUkUgaW5kZXhl ZF9jb2wgPSAyMDA7CisgaWQgCistLS0tCisgIDIKKygxIHJvdykKKworLS0gVXBkYXRlIGlu ZGV4ZWQgY29sdW1uIGluIHBhcnRpdGlvbiAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUg aG90X3Rlc3RfcGFydGl0aW9uZWQgU0VUIGluZGV4ZWRfY29sID0gMTUwIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3RfcGFydDEnKTsKKyB1 cGRhdGVzIHwgaG90IAorLS0tLS0tLS0tKy0tLS0tCisgICAgICAgMiB8ICAgMQorKDEgcm93 KQorCistLSBWZXJpZnkgaW5kZXggd2FzIHVwZGF0ZWQKK1NFTEVDVCBpZCBGUk9NIGhvdF90 ZXN0X3BhcnRpdGlvbmVkIFdIRVJFIGluZGV4ZWRfY29sID0gMTUwOworIGlkIAorLS0tLQor ICAxCisoMSByb3cpCisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRyaWdnZXIg bW9kaWZpY2F0aW9uczogaGVhcF9tb2RpZnlfdHVwbGUoKSBhbmQgSE9UCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBUZXN0IHRoYXQgd2UgY29ycmVjdGx5IGRldGVjdCB3aGVu IHRyaWdnZXJzIG1vZGlmeSBpbmRleGVkIGNvbHVtbnMgdmlhCistLSBoZWFwX21vZGlmeV90 dXBsZSgpLCBldmVuIHdoZW4gdGhvc2UgY29sdW1ucyBhcmVuJ3QgaW4gdGhlIFVQREFURSdz IFNFVCBjbGF1c2UKK0NSRUFURSBUQUJMRSBob3RfdHJpZ2dlcl90ZXN0ICgKKyAgICBpZCBp bnQgUFJJTUFSWSBLRVksCisgICAgdHJpZ2dlcmVkX2NvbCBpbnQsCisgICAgZGF0YSB0ZXh0 CispIFdJVEggKGZpbGxmYWN0b3IgPSA1MCk7CitDUkVBVEUgSU5ERVggaG90X3RyaWdnZXJf aWR4IE9OIGhvdF90cmlnZ2VyX3Rlc3QodHJpZ2dlcmVkX2NvbCk7CistLSBDcmVhdGUgYSB0 cmlnZ2VyIHRoYXQgbW9kaWZpZXMgYW4gaW5kZXhlZCBjb2x1bW4KK0NSRUFURSBPUiBSRVBM QUNFIEZVTkNUSU9OIG1vZGlmeV90cmlnZ2VyZWRfY29sKCkKK1JFVFVSTlMgVFJJR0dFUiBB UyAkJAorQkVHSU4KKyAgICBORVcudHJpZ2dlcmVkX2NvbCA9IE5FVy50cmlnZ2VyZWRfY29s ICsgMTsKKyAgICBSRVRVUk4gTkVXOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK0NS RUFURSBUUklHR0VSIGJlZm9yZV91cGRhdGVfbW9kaWZ5CisgICAgQkVGT1JFIFVQREFURSBP TiBob3RfdHJpZ2dlcl90ZXN0CisgICAgRk9SIEVBQ0ggUk9XCisgICAgRVhFQ1VURSBGVU5D VElPTiBtb2RpZnlfdHJpZ2dlcmVkX2NvbCgpOworSU5TRVJUIElOVE8gaG90X3RyaWdnZXJf dGVzdCBWQUxVRVMgKDEsIDEwMCwgJ2luaXRpYWwnKTsKK1NFTEVDVCAqIEZST00gZ2V0X2hv dF9jb3VudCgnaG90X3RyaWdnZXJfdGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0t LS0rLS0tLS0KKyAgICAgICAwIHwgICAwCisoMSByb3cpCisKKy0tIFVwZGF0ZSBvbmx5IGRh dGEgY29sdW1uLCBidXQgdHJpZ2dlciBtb2RpZmllcyBpbmRleGVkIGNvbHVtbgorLS0gU2hv dWxkIE5PVCBiZSBIT1QgYmVjYXVzZSB0cmlnZ2VyIG1vZGlmaWVkIGFuIGluZGV4ZWQgY29s dW1uCitVUERBVEUgaG90X3RyaWdnZXJfdGVzdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVS RSBpZCA9IDE7CistLSBWZXJpZnkgaXQgd2FzIE5PVCBhIEhPVCB1cGRhdGUgKGluZGV4ZWQg Y29sdW1uIHdhcyBtb2RpZmllZCBieSB0cmlnZ2VyKQorU0VMRUNUICogRlJPTSBnZXRfaG90 X2NvdW50KCdob3RfdHJpZ2dlcl90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0t LSstLS0tLQorICAgICAgIDEgfCAgIDAKKygxIHJvdykKKworLS0gVmVyaWZ5IHRoZSB0cmln Z2VyZWQgY29sdW1uIHdhcyBhY3R1YWxseSBtb2RpZmllZAorU0VMRUNUIHRyaWdnZXJlZF9j b2wgRlJPTSBob3RfdHJpZ2dlcl90ZXN0IFdIRVJFIGlkID0gMTsKKyB0cmlnZ2VyZWRfY29s IAorLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIDEwMQorKDEgcm93KQorCitEUk9QIFRB QkxFIGhvdF90cmlnZ2VyX3Rlc3QgQ0FTQ0FERTsKK0RST1AgRlVOQ1RJT04gbW9kaWZ5X3Ry aWdnZXJlZF9jb2woKTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEpTT05CIGV4 cHJlc3Npb24gaW5kZXhlcyBhbmQgc3ViLWF0dHJpYnV0ZSB0cmFja2luZworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gVGVzdCB0aGF0IHVwZGF0ZXMgdG8gbm9uLWluZGV4ZWQg SlNPTkIgcGF0aHMgY2FuIGJlIEhPVCB1cGRhdGVzCitDUkVBVEUgVEFCTEUgaG90X2pzb25i X3Rlc3QgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBkYXRhIGpzb25iCispIFdJ VEggKGZpbGxmYWN0b3IgPSA1MCk7CistLSBDcmVhdGUgZXhwcmVzc2lvbiBpbmRleCBvbiBh IHNwZWNpZmljIEpTT04gcGF0aAorQ1JFQVRFIElOREVYIGhvdF9qc29uYl9uYW1lX2lkeCBP TiBob3RfanNvbmJfdGVzdCAoKGRhdGEtPj4nbmFtZScpKTsKK0lOU0VSVCBJTlRPIGhvdF9q c29uYl90ZXN0IFZBTFVFUworICAgICgxLCAneyJuYW1lIjoiQWxpY2UiLCJhZ2UiOjMwLCJj aXR5IjoiTllDIn0nKSwKKyAgICAoMiwgJ3sibmFtZSI6IkJvYiIsImFnZSI6MjUsImNpdHki OiJMQSJ9Jyk7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF9qc29uYl90ZXN0 Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAgIDAgfCAgIDAK KygxIHJvdykKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT04gcGF0aCAoYWdlKSAtIHNo b3VsZCBiZSBIT1QgYWZ0ZXIgaW5zdHJ1bWVudGF0aW9uCitVUERBVEUgaG90X2pzb25iX3Rl c3QgU0VUIGRhdGEgPSBqc29uYl9zZXQoZGF0YSwgJ3thZ2V9JywgJzMxJykgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfanNvbmJfdGVzdCcpOwor IHVwZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAxIHwgICAwCisoMSBy b3cpCisKKy0tIFVwZGF0ZSBpbmRleGVkIEpTT04gcGF0aCAobmFtZSkgLSBzaG91bGQgTk9U IGJlIEhPVAorVVBEQVRFIGhvdF9qc29uYl90ZXN0IFNFVCBkYXRhID0ganNvbmJfc2V0KGRh dGEsICd7bmFtZX0nLCAnIkFsaWNlMiInKSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGdldF9ob3RfY291bnQoJ2hvdF9qc29uYl90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0t LS0tLS0tLSstLS0tLQorICAgICAgIDIgfCAgIDAKKygxIHJvdykKKworLS0gVmVyaWZ5IGlu ZGV4IHdvcmtzCitTRUxFQ1QgaWQgRlJPTSBob3RfanNvbmJfdGVzdCBXSEVSRSBkYXRhLT4+ J25hbWUnID0gJ0FsaWNlMic7CisgaWQgCistLS0tCisgIDEKKygxIHJvdykKKworLS0gVGVz dCBqc29uYl9kZWxldGUgb24gbm9uLWluZGV4ZWQgcGF0aCAtIHNob3VsZCBiZSBIT1QgYWZ0 ZXIgaW5zdHJ1bWVudGF0aW9uCitVUERBVEUgaG90X2pzb25iX3Rlc3QgU0VUIGRhdGEgPSBk YXRhIC0gJ2NpdHknIFdIRVJFIGlkID0gMjsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3Vu dCgnaG90X2pzb25iX3Rlc3QnKTsKKyB1cGRhdGVzIHwgaG90IAorLS0tLS0tLS0tKy0tLS0t CisgICAgICAgMyB8ICAgMAorKDEgcm93KQorCistLSBUZXN0IGpzb25iX2luc2VydCBvbiBu b24taW5kZXhlZCBwYXRoIC0gc2hvdWxkIGJlIEhPVCBhZnRlciBpbnN0cnVtZW50YXRpb24K K1VQREFURSBob3RfanNvbmJfdGVzdCBTRVQgZGF0YSA9IGpzb25iX2luc2VydChkYXRhLCAn e2NvdW50cnl9JywgJyJVU0EiJykgV0hFUkUgaWQgPSAyOworU0VMRUNUICogRlJPTSBnZXRf aG90X2NvdW50KCdob3RfanNvbmJfdGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0t LS0rLS0tLS0KKyAgICAgICA0IHwgICAwCisoMSByb3cpCisKK0RST1AgVEFCTEUgaG90X2pz b25iX3Rlc3Q7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBYTUwgZXhwcmVzc2lv biBpbmRleGVzIGFuZCBzdWItYXR0cmlidXRlIHRyYWNraW5nCistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBUZXN0IHRoYXQgdXBkYXRlcyB0byBub24taW5kZXhlZCBYTUwgcGF0 aHMgY2FuIGJlIEhPVCB1cGRhdGVzCitDUkVBVEUgVEFCTEUgaG90X3htbF90ZXN0ICgKKyAg ICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgZG9jIHhtbAorKSBXSVRIIChmaWxsZmFjdG9y ID0gNTApOworLS0gQ3JlYXRlIGV4cHJlc3Npb24gaW5kZXggb24gYSBzcGVjaWZpYyBYUGF0 aAorQ1JFQVRFIElOREVYIGhvdF94bWxfbmFtZV9pZHggT04gaG90X3htbF90ZXN0ICgoeHBh dGgoJy9wZXJzb24vbmFtZS90ZXh0KCknLCBkb2MpKSk7CitJTlNFUlQgSU5UTyBob3RfeG1s X3Rlc3QgVkFMVUVTCisgICAgKDEsICc8cGVyc29uPjxuYW1lPkFsaWNlPC9uYW1lPjxhZ2U+ MzA8L2FnZT48L3BlcnNvbj4nKSwKKyAgICAoMiwgJzxwZXJzb24+PG5hbWU+Qm9iPC9uYW1l PjxhZ2U+MjU8L2FnZT48L3BlcnNvbj4nKTsKK0VSUk9SOiAgY291bGQgbm90IGlkZW50aWZ5 IGEgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdHlwZSB4bWwKK1NFTEVDVCAqIEZST00gZ2V0 X2hvdF9jb3VudCgnaG90X3htbF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0t LSstLS0tLQorICAgICAgIDAgfCAgIDAKKygxIHJvdykKKworLS0gVXBkYXRlIG5vbi1pbmRl eGVkIFhQYXRoIChhZ2UpIC0gYmVoYXZpb3IgZGVwZW5kcyBvbiBYTUwgY29tcGFyaXNvbiBm YWxsYmFjaworLS0gRnVsbCBYTUwgdmFsdWUgcmVwbGFjZW1lbnQgbWVhbnMgbm9uLWluZGV4 ZWQgcGF0aCB1cGRhdGVzIHN0aWxsIHJlcXVpcmUgaW5kZXggY29tcGFyaXNvbgorVVBEQVRF IGhvdF94bWxfdGVzdCBTRVQgZG9jID0gJzxwZXJzb24+PG5hbWU+QWxpY2U8L25hbWU+PGFn ZT4zMTwvYWdlPjwvcGVyc29uPicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBnZXRf aG90X2NvdW50KCdob3RfeG1sX3Rlc3QnKTsKKyB1cGRhdGVzIHwgaG90IAorLS0tLS0tLS0t Ky0tLS0tCisgICAgICAgMCB8ICAgMAorKDEgcm93KQorCistLSBVcGRhdGUgaW5kZXhlZCBY UGF0aCAobmFtZSkgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIGhvdF94bWxfdGVzdCBT RVQgZG9jID0gJzxwZXJzb24+PG5hbWU+QWxpY2UyPC9uYW1lPjxhZ2U+MzE8L2FnZT48L3Bl cnNvbj4nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90 X3htbF90ZXN0Jyk7CisgdXBkYXRlcyB8IGhvdCAKKy0tLS0tLS0tLSstLS0tLQorICAgICAg IDAgfCAgIDAKKygxIHJvdykKKworLS0gVmVyaWZ5IGluZGV4IHdvcmtzCitTRUxFQ1QgaWQg RlJPTSBob3RfeG1sX3Rlc3QgV0hFUkUgeHBhdGgoJy9wZXJzb24vbmFtZS90ZXh0KCknLCBk b2MpID0gQVJSQVlbJ0FsaWNlMic6OnRleHRdOworRVJST1I6ICBvcGVyYXRvciBkb2VzIG5v dCBleGlzdDogeG1sW10gPSB0ZXh0W10KK0xJTkUgMTogLi4uX3htbF90ZXN0IFdIRVJFIHhw YXRoKCcvcGVyc29uL25hbWUvdGV4dCgpJywgZG9jKSA9IEFSUkFZWydBLi4uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorREVUQUlMOiAgTm8gb3BlcmF0b3Igb2YgdGhhdCBuYW1lIGFjY2VwdHMgdGhlIGdpdmVu IGFyZ3VtZW50IHR5cGVzLgorSElOVDogIFlvdSBtaWdodCBuZWVkIHRvIGFkZCBleHBsaWNp dCB0eXBlIGNhc3RzLgorRFJPUCBUQUJMRSBob3RfeG1sX3Rlc3Q7CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBHSU4gaW5kZXhlcyBhbmQgYW1jb21wYXJlZGF0dW1zIGZvciBK U09OQgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCB0aGF0IEdJTiBpbmRl eGVzIGNhbiB1c2UgYW1jb21wYXJlZGF0dW1zIHRvIGVuYWJsZSBIT1Qgd2hlbiBleHRyYWN0 ZWQga2V5cyBtYXRjaAorQ1JFQVRFIFRBQkxFIGhvdF9naW5fdGVzdCAoCisgICAgaWQgaW50 IFBSSU1BUlkgS0VZLAorICAgIHRhZ3MgdGV4dFtdLAorICAgIHByb3BlcnRpZXMganNvbmIK KykgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKKy0tIEdJTiBpbmRleCBvbiB0ZXh0IGFycmF5 CitDUkVBVEUgSU5ERVggaG90X2dpbl90YWdzX2lkeCBPTiBob3RfZ2luX3Rlc3QgVVNJTkcg Z2luICh0YWdzKTsKKy0tIEdJTiBpbmRleCBvbiBKU09OQiAoanNvbmJfb3BzIC0ga2V5cyBh bmQgdmFsdWVzKQorQ1JFQVRFIElOREVYIGhvdF9naW5fcHJvcHNfaWR4IE9OIGhvdF9naW5f dGVzdCBVU0lORyBnaW4gKHByb3BlcnRpZXMpOworSU5TRVJUIElOVE8gaG90X2dpbl90ZXN0 IFZBTFVFUworICAgICgxLCBBUlJBWVsndGFnMScsICd0YWcyJ10sICd7ImtleTEiOiJ2YWwx Iiwia2V5MiI6InZhbDIifScpLAorICAgICgyLCBBUlJBWVsndGFnMycsICd0YWc0J10sICd7 ImtleTMiOiJ2YWwzIiwia2V5NCI6InZhbDQifScpOworU0VMRUNUICogRlJPTSBnZXRfaG90 X2NvdW50KCdob3RfZ2luX3Rlc3QnKTsKKyB1cGRhdGVzIHwgaG90IAorLS0tLS0tLS0tKy0t LS0tCisgICAgICAgMCB8ICAgMAorKDEgcm93KQorCistLSBVcGRhdGUgdGhhdCBjaGFuZ2Vz IHRhZyBvcmRlciBidXQgbm90IGNvbnRlbnQgLSBhZnRlciBhbWNvbXBhcmVkYXR1bXMgc2hv dWxkIGJlIEhPVAorLS0gKEdJTiBleHRyYWN0cyBzYW1lIGtleXMsIGp1c3QgZGlmZmVyZW50 IG9yZGVyKQorVVBEQVRFIGhvdF9naW5fdGVzdCBTRVQgdGFncyA9IEFSUkFZWyd0YWcyJywg J3RhZzEnXSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hv dF9naW5fdGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAg ICAxIHwgICAwCisoMSByb3cpCisKKy0tIFVwZGF0ZSBKU09OQiB2YWx1ZSAobm90IGtleSkg LSBhZnRlciBhbWNvbXBhcmVkYXR1bXMgbWF5IGJlIEhPVCBvciBub24tSE9UCistLSBkZXBl bmRpbmcgb24gR0lOIG9wZXJhdG9yIGNsYXNzIChqc29uYl9vcHMgaW5kZXhlcyBib3RoIGtl eXMgYW5kIHZhbHVlcykKK1VQREFURSBob3RfZ2luX3Rlc3QgU0VUIHByb3BlcnRpZXMgPSAn eyJrZXkxIjoidmFsMV9uZXciLCJrZXkyIjoidmFsMiJ9JyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF9naW5fdGVzdCcpOworIHVwZGF0ZXMgfCBo b3QgCistLS0tLS0tLS0rLS0tLS0KKyAgICAgICAyIHwgICAwCisoMSByb3cpCisKKy0tIEFk ZCBuZXcgdGFnIC0gc2hvdWxkIE5PVCBiZSBIT1QgKGRpZmZlcmVudCBleHRyYWN0ZWQga2V5 cykKK1VQREFURSBob3RfZ2luX3Rlc3QgU0VUIHRhZ3MgPSBBUlJBWVsndGFnMicsICd0YWcx JywgJ3RhZzUnXSBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQo J2hvdF9naW5fdGVzdCcpOworIHVwZGF0ZXMgfCBob3QgCistLS0tLS0tLS0rLS0tLS0KKyAg ICAgICAzIHwgICAwCisoMSByb3cpCisKKy0tIFZlcmlmeSBHSU4gaW5kZXhlcyB3b3JrCitT RUxFQ1QgaWQgRlJPTSBob3RfZ2luX3Rlc3QgV0hFUkUgdGFncyBAPiBBUlJBWVsndGFnNSdd OworIGlkIAorLS0tLQorICAxCisoMSByb3cpCisKK1NFTEVDVCBpZCBGUk9NIGhvdF9naW5f dGVzdCBXSEVSRSBwcm9wZXJ0aWVzIEA+ICd7ImtleTEiOiJ2YWwxX25ldyJ9JzsKKyBpZCAK Ky0tLS0KKyAgMQorKDEgcm93KQorCitEUk9QIFRBQkxFIGhvdF9naW5fdGVzdDsKKy0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tIENsZWFudXAKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0RST1AgVEFCTEUgSUYgRVhJU1RTIGhvdF90ZXN0OworRFJPUCBUQUJMRSBJRiBF WElTVFMgaG90X3Rlc3RfcGFydGl0aW9uZWQgQ0FTQ0FERTsKK0RST1AgRlVOQ1RJT04gSUYg RVhJU1RTIGhhc19ob3RfY2hhaW4odGV4dCwgdGlkKTsKK0RST1AgRlVOQ1RJT04gSUYgRVhJ U1RTIHByaW50X2hvdF9jaGFpbih0ZXh0LCB0aWQpOworRFJPUCBGVU5DVElPTiBJRiBFWElT VFMgZ2V0X2hvdF9jb3VudCh0ZXh0KTsKK0RST1AgRVhURU5TSU9OIHBhZ2VpbnNwZWN0Owpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggNzM0ZGEwNTdjMzQuLjY3NWVi MTc1MDU5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxl CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTEzNyw2ICsx MzcsMTEgQEAgdGVzdDogZXZlbnRfdHJpZ2dlcl9sb2dpbgogIyB0aGlzIHRlc3QgYWxzbyB1 c2VzIGV2ZW50IHRyaWdnZXJzLCBzbyBsaWtld2lzZSBydW4gaXQgYnkgaXRzZWxmCiB0ZXN0 OiBmYXN0X2RlZmF1bHQKIAorIyAtLS0tLS0tLS0tCisjIEhPVCB1cGRhdGVzIHRlc3RzCisj IC0tLS0tLS0tLS0KK3Rlc3Q6IGhvdF91cGRhdGVzCisKICMgcnVuIHRhYmxlc3BhY2UgdGVz dCBhdCB0aGUgZW5kIGJlY2F1c2UgaXQgZHJvcHMgdGhlIHRhYmxlc3BhY2UgY3JlYXRlZCBk dXJpbmcKICMgc2V0dXAgdGhhdCBvdGhlciB0ZXN0cyBtYXkgdXNlLgogdGVzdDogdGFibGVz cGFjZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaG90X3VwZGF0ZXMuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaG90X3VwZGF0ZXMuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hODg5NDAwNjE3NwotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hvdF91cGRhdGVzLnNxbApAQCAtMCwwICsxLDYw NSBAQAorLS0KKy0tIEhPVF9VUERBVEVTCistLSBUZXN0IEhlYXAtT25seSBUdXBsZSAoSE9U KSB1cGRhdGUgZGVjaXNpb25zCistLQorLS0gVGhpcyB0ZXN0IHN5c3RlbWF0aWNhbGx5IHZl cmlmaWVzIHRoYXQgSE9UIHVwZGF0ZXMgYXJlIHVzZWQgd2hlbiBhcHByb3ByaWF0ZQorLS0g YW5kIGF2b2lkZWQgd2hlbiBuZWNlc3NhcnkgKGUuZy4sIHdoZW4gaW5kZXhlZCBjb2x1bW5z IGFyZSBtb2RpZmllZCkuCistLQorLS0gV2UgdXNlIG11bHRpcGxlIHZhbGlkYXRpb24gbWV0 aG9kczoKKy0tIDEuIFN0YXRpc3RpY3MgZnVuY3Rpb25zIChwZ19zdGF0X2dldF90dXBsZXNf aG90X3VwZGF0ZWQpCistLSAyLiBwYWdlaW5zcGVjdCBleHRlbnNpb24gZm9yIEhPVCBjaGFp biBleGFtaW5hdGlvbgorLS0gMy4gRVhQTEFJTiB0byB2ZXJpZnkgaW5kZXggdXNhZ2UgYWZ0 ZXIgdXBkYXRlcworLS0KKworLS0gTG9hZCByZXF1aXJlZCBleHRlbnNpb25zCitDUkVBVEUg RVhURU5TSU9OIElGIE5PVCBFWElTVFMgcGFnZWluc3BlY3Q7CisKKy0tIEZ1bmN0aW9uIHRv IGdldCBIT1QgdXBkYXRlIGNvdW50CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRf aG90X2NvdW50KHJlbF9uYW1lIHRleHQpCitSRVRVUk5TIFRBQkxFICgKKyAgICB1cGRhdGVz IEJJR0lOVCwKKyAgICBob3QgQklHSU5UCispIEFTICQkCitERUNMQVJFCisgIHJlbF9vaWQg b2lkOworQkVHSU4KKyAgcmVsX29pZCA6PSByZWxfbmFtZTo6cmVnY2xhc3M6Om9pZDsKKwor ICAtLSBSZWFkIGJvdGggY29tbWl0dGVkIGFuZCB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0cwor ICAtLSBJbiBhdXRvY29tbWl0IG1vZGUgKGRlZmF1bHQgZm9yIHJlZ3Jlc3Npb24gdGVzdHMp LCB0aGlzIHdvcmtzIGNvcnJlY3RseQorICAtLSBOb3RlOiBJbiBleHBsaWNpdCB0cmFuc2Fj dGlvbnMgKEJFR0lOL0NPTU1JVCksIGNvbW1pdHRlZCBzdGF0cyBhbHJlYWR5CisgIC0tIGlu Y2x1ZGUgZmx1c2hlZCB1cGRhdGVzLCBzbyB0aGlzIHdvdWxkIGRvdWJsZS1jb3VudC4gRm9y IGV4cGxpY2l0CisgIC0tIHRyYW5zYWN0aW9uIHRlc3RpbmcsIGNhbGwgcGdfc3RhdF9mb3Jj ZV9uZXh0X2ZsdXNoKCkgYmVmb3JlIHRoaXMgZnVuY3Rpb24uCisgIHVwZGF0ZXMgOj0gQ09B TEVTQ0UocGdfc3RhdF9nZXRfdHVwbGVzX3VwZGF0ZWQocmVsX29pZCksIDApICsKKyAgICAg ICAgICAgICBDT0FMRVNDRShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHJlbF9v aWQpLCAwKTsKKyAgaG90IDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxlc19ob3RfdXBk YXRlZChyZWxfb2lkKSwgMCkgKworICAgICAgICAgQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFj dF90dXBsZXNfaG90X3VwZGF0ZWQocmVsX29pZCksIDApOworCisgIFJFVFVSTiBORVhUOwor RU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworLS0gQ2hlY2sgaWYgYSB0dXBsZSBpcyBw YXJ0IG9mIGEgSE9UIGNoYWluIChoYXMgYSBwcmVkZWNlc3NvciBvbiBzYW1lIHBhZ2UpCitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBoYXNfaG90X2NoYWluKHJlbF9uYW1lIHRleHQs IHRhcmdldF9jdGlkIHRpZCkKK1JFVFVSTlMgYm9vbGVhbiBBUyAkJAorREVDTEFSRQorICBi bG9ja19udW0gaW50OworICBwYWdlX2l0ZW0gcmVjb3JkOworQkVHSU4KKyAgYmxvY2tfbnVt IDo9ICh0YXJnZXRfY3RpZDo6dGV4dDo6cG9pbnQpWzBdOjppbnQ7CisKKyAgLS0gTG9vayBm b3IgYSBkaWZmZXJlbnQgdHVwbGUgb24gdGhlIHNhbWUgcGFnZSB0aGF0IHBvaW50cyB0byBv dXIgdGFyZ2V0IHR1cGxlCisgIEZPUiBwYWdlX2l0ZW0gSU4KKyAgICBTRUxFQ1QgbHAsIGxw X2ZsYWdzLCB0X2N0aWQKKyAgICBGUk9NIGhlYXBfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2Uo cmVsX25hbWUsIGJsb2NrX251bSkpCisgICAgV0hFUkUgbHBfZmxhZ3MgPSAxCisgICAgICBB TkQgdF9jdGlkIElTIE5PVCBOVUxMCisgICAgICBBTkQgdF9jdGlkID0gdGFyZ2V0X2N0aWQK KyAgICAgIEFORCAoJygnIHx8IGJsb2NrX251bTo6dGV4dCB8fCAnLCcgfHwgbHA6OnRleHQg fHwgJyknKTo6dGlkICE9IHRhcmdldF9jdGlkCisgIExPT1AKKyAgICBSRVRVUk4gdHJ1ZTsK KyAgRU5EIExPT1A7CisKKyAgUkVUVVJOIGZhbHNlOworRU5EOworJCQgTEFOR1VBR0UgcGxw Z3NxbDsKKworLS0gUHJpbnQgdGhlIEhPVCBjaGFpbiBzdGFydGluZyBmcm9tIGEgZ2l2ZW4g dHVwbGUKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHByaW50X2hvdF9jaGFpbihyZWxf bmFtZSB0ZXh0LCBzdGFydF9jdGlkIHRpZCkKK1JFVFVSTlMgVEFCTEUoY2hhaW5fcG9zaXRp b24gaW50LCBjdGlkIHRpZCwgbHBfZmxhZ3MgdGV4dCwgdF9jdGlkIHRpZCwgY2hhaW5fZW5k IGJvb2xlYW4pIEFTCiskJAorI3ZhcmlhYmxlX2NvbmZsaWN0IHVzZV9jb2x1bW4KK0RFQ0xB UkUKKyAgYmxvY2tfbnVtIGludDsKKyAgbGluZV9wdHIgaW50OworICBjdXJyZW50X2N0aWQg dGlkIDo9IHN0YXJ0X2N0aWQ7CisgIG5leHRfY3RpZCB0aWQ7CisgIHBvc2l0aW9uIGludCA6 PSAwOworICBtYXhfaXRlcmF0aW9ucyBpbnQgOj0gMTAwOworICBwYWdlX2l0ZW0gcmVjb3Jk OworICBmb3VuZF9wcmVkZWNlc3NvciBib29sZWFuIDo9IGZhbHNlOworICBmbGFnc19uYW1l IHRleHQ7CitCRUdJTgorICBibG9ja19udW0gOj0gKHN0YXJ0X2N0aWQ6OnRleHQ6OnBvaW50 KVswXTo6aW50OworCisgIC0tIEZpbmQgdGhlIHByZWRlY2Vzc29yIChvbGQgdHVwbGUgcG9p bnRpbmcgdG8gb3VyIHN0YXJ0X2N0aWQpCisgIEZPUiBwYWdlX2l0ZW0gSU4KKyAgICBTRUxF Q1QgbHAsIGxwX2ZsYWdzLCB0X2N0aWQKKyAgICBGUk9NIGhlYXBfcGFnZV9pdGVtcyhnZXRf cmF3X3BhZ2UocmVsX25hbWUsIGJsb2NrX251bSkpCisgICAgV0hFUkUgbHBfZmxhZ3MgPSAx CisgICAgICBBTkQgdF9jdGlkID0gc3RhcnRfY3RpZAorICBMT09QCisgICAgY3VycmVudF9j dGlkIDo9ICgnKCcgfHwgYmxvY2tfbnVtOjp0ZXh0IHx8ICcsJyB8fCBwYWdlX2l0ZW0ubHA6 OnRleHQgfHwgJyknKTo6dGlkOworICAgIGZvdW5kX3ByZWRlY2Vzc29yIDo9IHRydWU7Cisg ICAgRVhJVDsKKyAgRU5EIExPT1A7CisKKyAgLS0gSWYgbm8gcHJlZGVjZXNzb3IgZm91bmQs IHN0YXJ0IHdpdGggdGhlIGdpdmVuIGN0aWQKKyAgSUYgTk9UIGZvdW5kX3ByZWRlY2Vzc29y IFRIRU4KKyAgICBjdXJyZW50X2N0aWQgOj0gc3RhcnRfY3RpZDsKKyAgRU5EIElGOworCisg IC0tIEZvbGxvdyB0aGUgY2hhaW4gZm9yd2FyZAorICBXSElMRSBwb3NpdGlvbiA8IG1heF9p dGVyYXRpb25zIExPT1AKKyAgICBsaW5lX3B0ciA6PSAoY3VycmVudF9jdGlkOjp0ZXh0Ojpw b2ludClbMV06OmludDsKKworICAgIEZPUiBwYWdlX2l0ZW0gSU4KKyAgICAgIFNFTEVDVCBs cCwgbHBfZmxhZ3MsIHRfY3RpZAorICAgICAgRlJPTSBoZWFwX3BhZ2VfaXRlbXMoZ2V0X3Jh d19wYWdlKHJlbF9uYW1lLCBibG9ja19udW0pKQorICAgICAgV0hFUkUgbHAgPSBsaW5lX3B0 cgorICAgIExPT1AKKyAgICAgIC0tIE1hcCBscF9mbGFncyB0byBuYW1lcworICAgICAgZmxh Z3NfbmFtZSA6PSBDQVNFIHBhZ2VfaXRlbS5scF9mbGFncworICAgICAgICBXSEVOIDAgVEhF TiAndW51c2VkICgwKScKKyAgICAgICAgV0hFTiAxIFRIRU4gJ25vcm1hbCAoMSknCisgICAg ICAgIFdIRU4gMiBUSEVOICdyZWRpcmVjdCAoMiknCisgICAgICAgIFdIRU4gMyBUSEVOICdk ZWFkICgzKScKKyAgICAgICAgRUxTRSAndW5rbm93biAoJyB8fCBwYWdlX2l0ZW0ubHBfZmxh Z3M6OnRleHQgfHwgJyknCisgICAgICBFTkQ7CisKKyAgICAgIFJFVFVSTiBRVUVSWSBTRUxF Q1QKKyAgICAgICAgcG9zaXRpb24sCisgICAgICAgIGN1cnJlbnRfY3RpZCwKKyAgICAgICAg ZmxhZ3NfbmFtZSwKKyAgICAgICAgcGFnZV9pdGVtLnRfY3RpZCwKKyAgICAgICAgKHBhZ2Vf aXRlbS50X2N0aWQgSVMgTlVMTCBPUiBwYWdlX2l0ZW0udF9jdGlkID0gY3VycmVudF9jdGlk KTo6Ym9vbGVhbgorICAgICAgOworCisgICAgICBJRiBwYWdlX2l0ZW0udF9jdGlkIElTIE5V TEwgT1IgcGFnZV9pdGVtLnRfY3RpZCA9IGN1cnJlbnRfY3RpZCBUSEVOCisgICAgICAgIFJF VFVSTjsKKyAgICAgIEVORCBJRjsKKworICAgICAgbmV4dF9jdGlkIDo9IHBhZ2VfaXRlbS50 X2N0aWQ7CisKKyAgICAgIElGIChuZXh0X2N0aWQ6OnRleHQ6OnBvaW50KVswXTo6aW50ICE9 IGJsb2NrX251bSBUSEVOCisgICAgICAgIFJFVFVSTjsKKyAgICAgIEVORCBJRjsKKworICAg ICAgY3VycmVudF9jdGlkIDo9IG5leHRfY3RpZDsKKyAgICAgIHBvc2l0aW9uIDo9IHBvc2l0 aW9uICsgMTsKKyAgICBFTkQgTE9PUDsKKworICAgIElGIHBvc2l0aW9uID0gMCBUSEVOCisg ICAgICBSRVRVUk47CisgICAgRU5EIElGOworICBFTkQgTE9PUDsKK0VORDsKKyQkIExBTkdV QUdFIHBscGdzcWw7CisKKy0tIEJhc2ljIEhPVCB1cGRhdGUgKHVwZGF0ZSBub24taW5kZXhl ZCBjb2x1bW4pCitDUkVBVEUgVEFCTEUgaG90X3Rlc3QgKAorICAgIGlkIGludCBQUklNQVJZ IEtFWSwKKyAgICBpbmRleGVkX2NvbCBpbnQsCisgICAgbm9uX2luZGV4ZWRfY29sIHRleHQK KykgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKKworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2lu ZGV4ZWRfaWR4IE9OIGhvdF90ZXN0KGluZGV4ZWRfY29sKTsKKworSU5TRVJUIElOVE8gaG90 X3Rlc3QgVkFMVUVTICgxLCAxMDAsICdpbml0aWFsJyk7CitJTlNFUlQgSU5UTyBob3RfdGVz dCBWQUxVRVMgKDIsIDIwMCwgJ2luaXRpYWwnKTsKK0lOU0VSVCBJTlRPIGhvdF90ZXN0IFZB TFVFUyAoMywgMzAwLCAnaW5pdGlhbCcpOworCistLSBHZXQgYmFzZWxpbmUKK1NFTEVDVCAq IEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKworLS0gU2hvdWxkIGJlIEhPVCB1 cGRhdGVzIChvbmx5IG5vbi1pbmRleGVkIGNvbHVtbiBtb2RpZmllZCkKK1VQREFURSBob3Rf dGVzdCBTRVQgbm9uX2luZGV4ZWRfY29sID0gJ3VwZGF0ZWQxJyBXSEVSRSBpZCA9IDE7CitV UERBVEUgaG90X3Rlc3QgU0VUIG5vbl9pbmRleGVkX2NvbCA9ICd1cGRhdGVkMicgV0hFUkUg aWQgPSAyOworVVBEQVRFIGhvdF90ZXN0IFNFVCBub25faW5kZXhlZF9jb2wgPSAndXBkYXRl ZDMnIFdIRVJFIGlkID0gMzsKKworLS0gVmVyaWZ5IEhPVCB1cGRhdGVzIG9jY3VycmVkCitT RUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisKKy0tIER1bXAgdGhl IEhPVCBjaGFpbiBiZWZvcmUgVkFDVVVNaW5nCitXSVRIIGN1cnJlbnRfdHVwbGUgQVMgKAor ICBTRUxFQ1QgY3RpZCBGUk9NIGhvdF90ZXN0IFdIRVJFIGlkID0gMQorKQorU0VMRUNUCisg IGhhc19ob3RfY2hhaW4oJ2hvdF90ZXN0JywgY3VycmVudF90dXBsZS5jdGlkKSBBUyBoYXNf Y2hhaW4sCisgIGNoYWluX3Bvc2l0aW9uLAorICBwcmludF9ob3RfY2hhaW4uY3RpZCwKKyAg bHBfZmxhZ3MsCisgIHRfY3RpZAorRlJPTSBjdXJyZW50X3R1cGxlLAorTEFURVJBTCBwcmlu dF9ob3RfY2hhaW4oJ2hvdF90ZXN0JywgY3VycmVudF90dXBsZS5jdGlkKTsKKworLS0gVmFj dXVtIHRoZSByZWxhdGlvbiwgZXhwZWN0IHRoZSBIT1QgY2hhaW4gdG8gY29sbGFwc2UKK1ZB Q1VVTSBob3RfdGVzdDsKKworLS0gU2hvdyB0aGF0IHRoZXJlIGlzIG5vIGNoYWluIGFmdGVy IHZhY3V1bQorV0lUSCBjdXJyZW50X3R1cGxlIEFTICgKKyAgU0VMRUNUIGN0aWQgRlJPTSBo b3RfdGVzdCBXSEVSRSBpZCA9IDEKKykKK1NFTEVDVAorICBoYXNfaG90X2NoYWluKCdob3Rf dGVzdCcsIGN1cnJlbnRfdHVwbGUuY3RpZCkgQVMgaGFzX2NoYWluLAorICBjaGFpbl9wb3Np dGlvbiwKKyAgcHJpbnRfaG90X2NoYWluLmN0aWQsCisgIGxwX2ZsYWdzLAorICB0X2N0aWQK K0ZST00gY3VycmVudF90dXBsZSwKK0xBVEVSQUwgcHJpbnRfaG90X2NoYWluKCdob3RfdGVz dCcsIGN1cnJlbnRfdHVwbGUuY3RpZCk7CisKKy0tIE5vbi1IT1QgdXBkYXRlICh1cGRhdGUg aW5kZXhlZCBjb2x1bW4pCitVUERBVEUgaG90X3Rlc3QgU0VUIGluZGV4ZWRfY29sID0gMTUw IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3Qn KTsKKworLS0gVmVyaWZ5IGluZGV4IHdhcyB1cGRhdGVkIChuZXcgdmFsdWUgZmluZGFibGUp CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCBpZCwgaW5kZXhlZF9jb2wgRlJPTSBob3RfdGVzdCBXSEVSRSBpbmRleGVkX2NvbCA9IDE1 MDsKK1NFTEVDVCBpZCwgaW5kZXhlZF9jb2wgRlJPTSBob3RfdGVzdCBXSEVSRSBpbmRleGVk X2NvbCA9IDE1MDsKKworLS0gVmVyaWZ5IG9sZCB2YWx1ZSBubyBsb25nZXIgaW4gaW5kZXgK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGlkIEZST00gaG90X3Rlc3QgV0hFUkUgaW5k ZXhlZF9jb2wgPSAxMDA7CitTRUxFQ1QgaWQgRlJPTSBob3RfdGVzdCBXSEVSRSBpbmRleGVk X2NvbCA9IDEwMDsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworCistLSBBbGwtb3Itbm9uZSBw cm9wZXJ0eTogdXBkYXRpbmcgb25lIGluZGV4ZWQgY29sdW1uIHJlcXVpcmVzIEFMTCBpbmRl eCB1cGRhdGVzCitEUk9QIFRBQkxFIGhvdF90ZXN0OworCitDUkVBVEUgVEFCTEUgaG90X3Rl c3QgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBjb2xfYSBpbnQsCisgICAgY29s X2IgaW50LAorICAgIGNvbF9jIGludCwKKyAgICBub25faW5kZXhlZCB0ZXh0CispIFdJVEgg KGZpbGxmYWN0b3IgPSA1MCk7CisKK0NSRUFURSBJTkRFWCBob3RfdGVzdF9hX2lkeCBPTiBo b3RfdGVzdChjb2xfYSk7CitDUkVBVEUgSU5ERVggaG90X3Rlc3RfYl9pZHggT04gaG90X3Rl c3QoY29sX2IpOworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2NfaWR4IE9OIGhvdF90ZXN0KGNv bF9jKTsKKworSU5TRVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgxLCAxMCwgMjAsIDMwLCAn aW5pdGlhbCcpOworCistLSBVcGRhdGUgb25seSBjb2xfYSAtIHNob3VsZCBOT1QgYmUgSE9U IGJlY2F1c2UgYW4gaW5kZXhlZCBjb2x1bW4gY2hhbmdlZAorLS0gVGhpcyBtZWFucyBBTEwg aW5kZXhlcyBtdXN0IGJlIHVwZGF0ZWQgKGFsbC1vci1ub25lIHByb3BlcnR5KQorVVBEQVRF IGhvdF90ZXN0IFNFVCBjb2xfYSA9IDE1IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Z2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKworLS0gTm93IHVwZGF0ZSBvbmx5IG5vbi1p bmRleGVkIGNvbHVtbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSBob3RfdGVzdCBTRVQgbm9u X2luZGV4ZWQgPSAndXBkYXRlZCc7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hv dF90ZXN0Jyk7CisKKy0tIFBhcnRpYWwgaW5kZXg6IGJvdGggb2xkIGFuZCBuZXcgb3V0c2lk ZSBwcmVkaWNhdGUgKGNvbnNlcnZhdGl2ZSA9IG5vbi1IT1QpCitEUk9QIFRBQkxFIGhvdF90 ZXN0OworCitDUkVBVEUgVEFCTEUgaG90X3Rlc3QgKAorICAgIGlkIGludCBQUklNQVJZIEtF WSwKKyAgICBzdGF0dXMgdGV4dCwKKyAgICBkYXRhIHRleHQKKykgV0lUSCAoZmlsbGZhY3Rv ciA9IDUwKTsKKworLS0gUGFydGlhbCBpbmRleCBvbmx5IGNvdmVycyBzdGF0dXMgPSAnYWN0 aXZlJworQ1JFQVRFIElOREVYIGhvdF90ZXN0X2FjdGl2ZV9pZHggT04gaG90X3Rlc3Qoc3Rh dHVzKSBXSEVSRSBzdGF0dXMgPSAnYWN0aXZlJzsKKworSU5TRVJUIElOVE8gaG90X3Rlc3Qg VkFMVUVTICgxLCAnYWN0aXZlJywgJ2RhdGExJyk7CitJTlNFUlQgSU5UTyBob3RfdGVzdCBW QUxVRVMgKDIsICdpbmFjdGl2ZScsICdkYXRhMicpOworSU5TRVJUIElOVE8gaG90X3Rlc3Qg VkFMVUVTICgzLCAnZGVsZXRlZCcsICdkYXRhMycpOworCistLSBVcGRhdGUgbm9uLWluZGV4 ZWQgY29sdW1uIG9uICdhY3RpdmUnIHJvdyAoaW4gcHJlZGljYXRlLCBzdGF0dXMgdW5jaGFu Z2VkKQorLS0gU2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCBkYXRhID0gJ3Vw ZGF0ZWQxJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hv dF90ZXN0Jyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gb24gJ2luYWN0aXZl JyByb3cgKG91dHNpZGUgcHJlZGljYXRlKQorLS0gU2hvdWxkIGJlIEhPVAorVVBEQVRFIGhv dF90ZXN0IFNFVCBkYXRhID0gJ3VwZGF0ZWQyJyBXSEVSRSBpZCA9IDI7CitTRUxFQ1QgKiBG Uk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisKKy0tIFVwZGF0ZSBzdGF0dXMgZnJv bSAnaW5hY3RpdmUnIHRvICdkZWxldGVkJyAoYm90aCBvdXRzaWRlIHByZWRpY2F0ZSkKKy0t IFBvc3RncmVTUUwgaXMgY29uc2VydmF0aXZlOiBoZWFwIGluc2VydCBoYXBwZW5zIGJlZm9y ZSBwcmVkaWNhdGUgY2hlY2sKKy0tIFNvIHRoaXMgaXMgTk9OLUhPVCBldmVuIHRob3VnaCBi b3RoIHZhbHVlcyBhcmUgb3V0c2lkZSBwcmVkaWNhdGUKK1VQREFURSBob3RfdGVzdCBTRVQg c3RhdHVzID0gJ2RlbGV0ZWQnIFdIRVJFIGlkID0gMjsKK1NFTEVDVCAqIEZST00gZ2V0X2hv dF9jb3VudCgnaG90X3Rlc3QnKTsKKworLS0gVmVyaWZ5IGluZGV4IHN0aWxsIHdvcmtzIGZv ciAnYWN0aXZlJyByb3dzCitTRUxFQ1QgaWQsIHN0YXR1cyBGUk9NIGhvdF90ZXN0IFdIRVJF IHN0YXR1cyA9ICdhY3RpdmUnOworCistLSBPbmx5IEJSSU4gKHN1bW1hcml6aW5nKSBpbmRl eGVzIG9uIG5vbi1QSyBjb2x1bW5zCitEUk9QIFRBQkxFIGhvdF90ZXN0OworCitDUkVBVEUg VEFCTEUgaG90X3Rlc3QgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICB0cyB0aW1l c3RhbXAsCisgICAgdmFsdWUgaW50LAorICAgIGJyaW5fY29sIGludAorKSBXSVRIIChmaWxs ZmFjdG9yID0gNTApOworCitDUkVBVEUgSU5ERVggaG90X3Rlc3RfdHNfYnJpbiBPTiBob3Rf dGVzdCBVU0lORyBicmluKHRzKTsKK0NSRUFURSBJTkRFWCBob3RfdGVzdF9icmluX2NvbF9i cmluIE9OIGhvdF90ZXN0IFVTSU5HIGJyaW4oYnJpbl9jb2wpOworCitJTlNFUlQgSU5UTyBo b3RfdGVzdCBWQUxVRVMgKDEsICcyMDI0LTAxLTAxJywgMTAwLCAxMDAwKTsKKworLS0gVXBk YXRlIGJvdGggQlJJTiBjb2x1bW5zIC0gc2hvdWxkIHN0aWxsIGJlIEhPVCAob25seSBzdW1t YXJpemluZyBpbmRleGVzKQorVVBEQVRFIGhvdF90ZXN0IFNFVCB0cyA9ICcyMDI0LTAxLTAy JywgYnJpbl9jb2wgPSAyMDAwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gZ2V0X2hv dF9jb3VudCgnaG90X3Rlc3QnKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAt IHNob3VsZCBhbHNvIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCB2YWx1ZSA9IDIwMCBX SEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7 CisKKy0tIFRPQVNUIGFuZCBIT1Q6IFRPQVNUZWQgY29sdW1ucyBjYW4gcGFydGljaXBhdGUg aW4gSE9UCitEUk9QIFRBQkxFIGhvdF90ZXN0OworCitDUkVBVEUgVEFCTEUgaG90X3Rlc3Qg KAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBpbmRleGVkX2NvbCBpbnQsCisgICAg bGFyZ2VfdGV4dCB0ZXh0LAorICAgIHNtYWxsX3RleHQgdGV4dAorKSBXSVRIIChmaWxsZmFj dG9yID0gNTApOworCitDUkVBVEUgSU5ERVggaG90X3Rlc3RfaWR4IE9OIGhvdF90ZXN0KGlu ZGV4ZWRfY29sKTsKKworLS0gSW5zZXJ0IHJvdyB3aXRoIFRPQVNUZWQgY29sdW1uICg+IDJL QikKK0lOU0VSVCBJTlRPIGhvdF90ZXN0IFZBTFVFUyAoMSwgMTAwLCByZXBlYXQoJ3gnLCAz MDAwKSwgJ3NtYWxsJyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCwgbm9uLVRPQVNUZWQg Y29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0IFNFVCBzbWFsbF90ZXh0 ID0gJ3VwZGF0ZWQnOworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcp OworCistLSBVcGRhdGUgVE9BU1RlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UIGlmIGluZGV4 ZWQgY29sdW1uIHVuY2hhbmdlZAorVVBEQVRFIGhvdF90ZXN0IFNFVCBsYXJnZV90ZXh0ID0g cmVwZWF0KCd5JywgMzAwMCk7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90 ZXN0Jyk7CisKKy0tIFVwZGF0ZSBpbmRleGVkIGNvbHVtbiAtIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgaG90X3Rlc3QgU0VUIGluZGV4ZWRfY29sID0gMjAwOworU0VMRUNUICogRlJP TSBnZXRfaG90X2NvdW50KCdob3RfdGVzdCcpOworCistLSBVbmlxdWUgY29uc3RyYWludCAo dW5pcXVlIGluZGV4KSBiZWhhdmVzIGxpa2UgcmVndWxhciBpbmRleAorRFJPUCBUQUJMRSBo b3RfdGVzdDsKKworQ1JFQVRFIFRBQkxFIGhvdF90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFS WSBLRVksCisgICAgdW5pcXVlX2NvbCBpbnQgVU5JUVVFLAorICAgIGRhdGEgdGV4dAorKSBX SVRIIChmaWxsZmFjdG9yID0gNTApOworCitJTlNFUlQgSU5UTyBob3RfdGVzdCBWQUxVRVMg KDEsIDEwMCwgJ2RhdGExJyk7CitJTlNFUlQgSU5UTyBob3RfdGVzdCBWQUxVRVMgKDIsIDIw MCwgJ2RhdGEyJyk7CisKKy0tIFVwZGF0ZSBkYXRhIChub24taW5kZXhlZCkgLSBzaG91bGQg YmUgSE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIGRhdGEgPSAndXBkYXRlZCc7CitTRUxFQ1Qg KiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0Jyk7CisKKy0tIFZlcmlmeSB1bmlxdWUg Y29uc3RyYWludCBzdGlsbCBlbmZvcmNlZAorU0VMRUNUIGlkLCB1bmlxdWVfY29sLCBkYXRh IEZST00gaG90X3Rlc3QgT1JERVIgQlkgaWQ7CisKKy0tIFRoaXMgc2hvdWxkIGZhaWwgKHVu aXF1ZSB2aW9sYXRpb24pCitVUERBVEUgaG90X3Rlc3QgU0VUIHVuaXF1ZV9jb2wgPSAxMDAg V0hFUkUgaWQgPSAyOworCistLSBNdWx0aS1jb2x1bW4gaW5kZXg6IGFueSBjb2x1bW4gY2hh bmdlID0gbm9uLUhPVAorRFJPUCBUQUJMRSBob3RfdGVzdDsKKworQ1JFQVRFIFRBQkxFIGhv dF90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgY29sX2EgaW50LAorICAg IGNvbF9iIGludCwKKyAgICBjb2xfYyBpbnQsCisgICAgZGF0YSB0ZXh0CispIFdJVEggKGZp bGxmYWN0b3IgPSA1MCk7CisKK0NSRUFURSBJTkRFWCBob3RfdGVzdF9hYl9pZHggT04gaG90 X3Rlc3QoY29sX2EsIGNvbF9iKTsKKworSU5TRVJUIElOVE8gaG90X3Rlc3QgVkFMVUVTICgx LCAxMCwgMjAsIDMwLCAnZGF0YScpOworCistLSBVcGRhdGUgY29sX2EgKHBhcnQgb2YgbXVs dGktY29sdW1uIGluZGV4KSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgaG90X3Rlc3Qg U0VUIGNvbF9hID0gMTU7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0 Jyk7CisKKy0tIFJlc2V0CitVUERBVEUgaG90X3Rlc3QgU0VUIGNvbF9hID0gMTA7CisKKy0t IFVwZGF0ZSBjb2xfYiAocGFydCBvZiBtdWx0aS1jb2x1bW4gaW5kZXgpIC0gc2hvdWxkIE5P VCBiZSBIT1QKK1VQREFURSBob3RfdGVzdCBTRVQgY29sX2IgPSAyNTsKK1NFTEVDVCAqIEZS T00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3QnKTsKKworLS0gUmVzZXQKK1VQREFURSBob3Rf dGVzdCBTRVQgY29sX2IgPSAyMDsKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90 X3Rlc3QnKTsKKworLS0gVXBkYXRlIGNvbF9jIChub3QgaW5kZXhlZCkgLSBzaG91bGQgYmUg SE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIGNvbF9jID0gMzU7CisKKy0tIFVwZGF0ZSBkYXRh IChub3QgaW5kZXhlZCkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgaG90X3Rlc3QgU0VUIGRh dGEgPSAndXBkYXRlZCc7CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90ZXN0 Jyk7CisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlczogSE9UIHdvcmtzIHdpdGhpbiBwYXJ0aXRp b25zCitEUk9QIFRBQkxFIElGIEVYSVNUUyBob3RfdGVzdF9wYXJ0aXRpb25lZCBDQVNDQURF OworCitDUkVBVEUgVEFCTEUgaG90X3Rlc3RfcGFydGl0aW9uZWQgKAorICAgIGlkIGludCwK KyAgICBwYXJ0aXRpb25fa2V5IGludCwKKyAgICBpbmRleGVkX2NvbCBpbnQsCisgICAgZGF0 YSB0ZXh0LAorICAgIFBSSU1BUlkgS0VZIChpZCwgcGFydGl0aW9uX2tleSkKKykgUEFSVElU SU9OIEJZIFJBTkdFIChwYXJ0aXRpb25fa2V5KTsKKworQ1JFQVRFIFRBQkxFIGhvdF90ZXN0 X3BhcnQxIFBBUlRJVElPTiBPRiBob3RfdGVzdF9wYXJ0aXRpb25lZAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgVE8gKDEwMCkgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKK0NSRUFURSBU QUJMRSBob3RfdGVzdF9wYXJ0MiBQQVJUSVRJT04gT0YgaG90X3Rlc3RfcGFydGl0aW9uZWQK KyAgICBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCkgV0lUSCAoZmlsbGZhY3RvciA9 IDUwKTsKKworQ1JFQVRFIElOREVYIGhvdF90ZXN0X3BhcnRfaWR4IE9OIGhvdF90ZXN0X3Bh cnRpdGlvbmVkKGluZGV4ZWRfY29sKTsKKworSU5TRVJUIElOVE8gaG90X3Rlc3RfcGFydGl0 aW9uZWQgVkFMVUVTICgxLCA1MCwgMTAwLCAnaW5pdGlhbDEnKTsKK0lOU0VSVCBJTlRPIGhv dF90ZXN0X3BhcnRpdGlvbmVkIFZBTFVFUyAoMiwgMTUwLCAyMDAsICdpbml0aWFsMicpOwor CistLSBVcGRhdGUgaW4gcGFydGl0aW9uIDEgKG5vbi1pbmRleGVkIGNvbHVtbikgLSBzaG91 bGQgYmUgSE9UCitVUERBVEUgaG90X3Rlc3RfcGFydGl0aW9uZWQgU0VUIGRhdGEgPSAndXBk YXRlZDEnIFdIRVJFIGlkID0gMTsKKworLS0gVXBkYXRlIGluIHBhcnRpdGlvbiAyIChub24t aW5kZXhlZCBjb2x1bW4pIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIGhvdF90ZXN0X3BhcnRp dGlvbmVkIFNFVCBkYXRhID0gJ3VwZGF0ZWQyJyBXSEVSRSBpZCA9IDI7CisKK1NFTEVDVCAq IEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3Rlc3RfcGFydDEnKTsKK1NFTEVDVCAqIEZST00g Z2V0X2hvdF9jb3VudCgnaG90X3Rlc3RfcGFydDInKTsKKworLS0gVmVyaWZ5IGluZGV4ZXMg d29yayBvbiBwYXJ0aXRpb25zCitTRUxFQ1QgaWQgRlJPTSBob3RfdGVzdF9wYXJ0aXRpb25l ZCBXSEVSRSBpbmRleGVkX2NvbCA9IDEwMDsKK1NFTEVDVCBpZCBGUk9NIGhvdF90ZXN0X3Bh cnRpdGlvbmVkIFdIRVJFIGluZGV4ZWRfY29sID0gMjAwOworCistLSBVcGRhdGUgaW5kZXhl ZCBjb2x1bW4gaW4gcGFydGl0aW9uIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSBob3Rf dGVzdF9wYXJ0aXRpb25lZCBTRVQgaW5kZXhlZF9jb2wgPSAxNTAgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfdGVzdF9wYXJ0MScpOworCistLSBW ZXJpZnkgaW5kZXggd2FzIHVwZGF0ZWQKK1NFTEVDVCBpZCBGUk9NIGhvdF90ZXN0X3BhcnRp dGlvbmVkIFdIRVJFIGluZGV4ZWRfY29sID0gMTUwOworCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBUcmlnZ2VyIG1vZGlmaWNhdGlvbnM6IGhlYXBfbW9kaWZ5X3R1cGxlKCkg YW5kIEhPVAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCB0aGF0IHdlIGNv cnJlY3RseSBkZXRlY3Qgd2hlbiB0cmlnZ2VycyBtb2RpZnkgaW5kZXhlZCBjb2x1bW5zIHZp YQorLS0gaGVhcF9tb2RpZnlfdHVwbGUoKSwgZXZlbiB3aGVuIHRob3NlIGNvbHVtbnMgYXJl bid0IGluIHRoZSBVUERBVEUncyBTRVQgY2xhdXNlCisKK0NSRUFURSBUQUJMRSBob3RfdHJp Z2dlcl90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgdHJpZ2dlcmVkX2Nv bCBpbnQsCisgICAgZGF0YSB0ZXh0CispIFdJVEggKGZpbGxmYWN0b3IgPSA1MCk7CisKK0NS RUFURSBJTkRFWCBob3RfdHJpZ2dlcl9pZHggT04gaG90X3RyaWdnZXJfdGVzdCh0cmlnZ2Vy ZWRfY29sKTsKKworLS0gQ3JlYXRlIGEgdHJpZ2dlciB0aGF0IG1vZGlmaWVzIGFuIGluZGV4 ZWQgY29sdW1uCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBtb2RpZnlfdHJpZ2dlcmVk X2NvbCgpCitSRVRVUk5TIFRSSUdHRVIgQVMgJCQKK0JFR0lOCisgICAgTkVXLnRyaWdnZXJl ZF9jb2wgPSBORVcudHJpZ2dlcmVkX2NvbCArIDE7CisgICAgUkVUVVJOIE5FVzsKK0VORDsK KyQkIExBTkdVQUdFIHBscGdzcWw7CisKK0NSRUFURSBUUklHR0VSIGJlZm9yZV91cGRhdGVf bW9kaWZ5CisgICAgQkVGT1JFIFVQREFURSBPTiBob3RfdHJpZ2dlcl90ZXN0CisgICAgRk9S IEVBQ0ggUk9XCisgICAgRVhFQ1VURSBGVU5DVElPTiBtb2RpZnlfdHJpZ2dlcmVkX2NvbCgp OworCitJTlNFUlQgSU5UTyBob3RfdHJpZ2dlcl90ZXN0IFZBTFVFUyAoMSwgMTAwLCAnaW5p dGlhbCcpOworCitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF90cmlnZ2VyX3Rl c3QnKTsKKworLS0gVXBkYXRlIG9ubHkgZGF0YSBjb2x1bW4sIGJ1dCB0cmlnZ2VyIG1vZGlm aWVzIGluZGV4ZWQgY29sdW1uCistLSBTaG91bGQgTk9UIGJlIEhPVCBiZWNhdXNlIHRyaWdn ZXIgbW9kaWZpZWQgYW4gaW5kZXhlZCBjb2x1bW4KK1VQREFURSBob3RfdHJpZ2dlcl90ZXN0 IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKKworLS0gVmVyaWZ5IGl0IHdh cyBOT1QgYSBIT1QgdXBkYXRlIChpbmRleGVkIGNvbHVtbiB3YXMgbW9kaWZpZWQgYnkgdHJp Z2dlcikKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3RyaWdnZXJfdGVzdCcp OworCistLSBWZXJpZnkgdGhlIHRyaWdnZXJlZCBjb2x1bW4gd2FzIGFjdHVhbGx5IG1vZGlm aWVkCitTRUxFQ1QgdHJpZ2dlcmVkX2NvbCBGUk9NIGhvdF90cmlnZ2VyX3Rlc3QgV0hFUkUg aWQgPSAxOworCitEUk9QIFRBQkxFIGhvdF90cmlnZ2VyX3Rlc3QgQ0FTQ0FERTsKK0RST1Ag RlVOQ1RJT04gbW9kaWZ5X3RyaWdnZXJlZF9jb2woKTsKKworLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gSlNPTkIgZXhwcmVzc2lvbiBpbmRleGVzIGFuZCBzdWItYXR0cmlidXRl IHRyYWNraW5nCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IHRoYXQgdXBk YXRlcyB0byBub24taW5kZXhlZCBKU09OQiBwYXRocyBjYW4gYmUgSE9UIHVwZGF0ZXMKKwor Q1JFQVRFIFRBQkxFIGhvdF9qc29uYl90ZXN0ICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVks CisgICAgZGF0YSBqc29uYgorKSBXSVRIIChmaWxsZmFjdG9yID0gNTApOworCistLSBDcmVh dGUgZXhwcmVzc2lvbiBpbmRleCBvbiBhIHNwZWNpZmljIEpTT04gcGF0aAorQ1JFQVRFIElO REVYIGhvdF9qc29uYl9uYW1lX2lkeCBPTiBob3RfanNvbmJfdGVzdCAoKGRhdGEtPj4nbmFt ZScpKTsKKworSU5TRVJUIElOVE8gaG90X2pzb25iX3Rlc3QgVkFMVUVTCisgICAgKDEsICd7 Im5hbWUiOiJBbGljZSIsImFnZSI6MzAsImNpdHkiOiJOWUMifScpLAorICAgICgyLCAneyJu YW1lIjoiQm9iIiwiYWdlIjoyNSwiY2l0eSI6IkxBIn0nKTsKKworU0VMRUNUICogRlJPTSBn ZXRfaG90X2NvdW50KCdob3RfanNvbmJfdGVzdCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4 ZWQgSlNPTiBwYXRoIChhZ2UpIC0gc2hvdWxkIGJlIEhPVCBhZnRlciBpbnN0cnVtZW50YXRp b24KK1VQREFURSBob3RfanNvbmJfdGVzdCBTRVQgZGF0YSA9IGpzb25iX3NldChkYXRhLCAn e2FnZX0nLCAnMzEnKSBXSEVSRSBpZCA9IDE7CisKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9j b3VudCgnaG90X2pzb25iX3Rlc3QnKTsKKworLS0gVXBkYXRlIGluZGV4ZWQgSlNPTiBwYXRo IChuYW1lKSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgaG90X2pzb25iX3Rlc3QgU0VU IGRhdGEgPSBqc29uYl9zZXQoZGF0YSwgJ3tuYW1lfScsICciQWxpY2UyIicpIFdIRVJFIGlk ID0gMTsKKworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfanNvbmJfdGVzdCcp OworCistLSBWZXJpZnkgaW5kZXggd29ya3MKK1NFTEVDVCBpZCBGUk9NIGhvdF9qc29uYl90 ZXN0IFdIRVJFIGRhdGEtPj4nbmFtZScgPSAnQWxpY2UyJzsKKworLS0gVGVzdCBqc29uYl9k ZWxldGUgb24gbm9uLWluZGV4ZWQgcGF0aCAtIHNob3VsZCBiZSBIT1QgYWZ0ZXIgaW5zdHJ1 bWVudGF0aW9uCitVUERBVEUgaG90X2pzb25iX3Rlc3QgU0VUIGRhdGEgPSBkYXRhIC0gJ2Np dHknIFdIRVJFIGlkID0gMjsKKworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3Rf anNvbmJfdGVzdCcpOworCistLSBUZXN0IGpzb25iX2luc2VydCBvbiBub24taW5kZXhlZCBw YXRoIC0gc2hvdWxkIGJlIEhPVCBhZnRlciBpbnN0cnVtZW50YXRpb24KK1VQREFURSBob3Rf anNvbmJfdGVzdCBTRVQgZGF0YSA9IGpzb25iX2luc2VydChkYXRhLCAne2NvdW50cnl9Jywg JyJVU0EiJykgV0hFUkUgaWQgPSAyOworCitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQo J2hvdF9qc29uYl90ZXN0Jyk7CisKK0RST1AgVEFCTEUgaG90X2pzb25iX3Rlc3Q7CisKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFhNTCBleHByZXNzaW9uIGluZGV4ZXMgYW5k IHN1Yi1hdHRyaWJ1dGUgdHJhY2tpbmcKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IFRlc3QgdGhhdCB1cGRhdGVzIHRvIG5vbi1pbmRleGVkIFhNTCBwYXRocyBjYW4gYmUgSE9U IHVwZGF0ZXMKKworQ1JFQVRFIFRBQkxFIGhvdF94bWxfdGVzdCAoCisgICAgaWQgaW50IFBS SU1BUlkgS0VZLAorICAgIGRvYyB4bWwKKykgV0lUSCAoZmlsbGZhY3RvciA9IDUwKTsKKwor LS0gQ3JlYXRlIGV4cHJlc3Npb24gaW5kZXggb24gYSBzcGVjaWZpYyBYUGF0aAorQ1JFQVRF IElOREVYIGhvdF94bWxfbmFtZV9pZHggT04gaG90X3htbF90ZXN0ICgoeHBhdGgoJy9wZXJz b24vbmFtZS90ZXh0KCknLCBkb2MpKSk7CisKK0lOU0VSVCBJTlRPIGhvdF94bWxfdGVzdCBW QUxVRVMKKyAgICAoMSwgJzxwZXJzb24+PG5hbWU+QWxpY2U8L25hbWU+PGFnZT4zMDwvYWdl PjwvcGVyc29uPicpLAorICAgICgyLCAnPHBlcnNvbj48bmFtZT5Cb2I8L25hbWU+PGFnZT4y NTwvYWdlPjwvcGVyc29uPicpOworCitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hv dF94bWxfdGVzdCcpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgWFBhdGggKGFnZSkgLSBi ZWhhdmlvciBkZXBlbmRzIG9uIFhNTCBjb21wYXJpc29uIGZhbGxiYWNrCistLSBGdWxsIFhN TCB2YWx1ZSByZXBsYWNlbWVudCBtZWFucyBub24taW5kZXhlZCBwYXRoIHVwZGF0ZXMgc3Rp bGwgcmVxdWlyZSBpbmRleCBjb21wYXJpc29uCitVUERBVEUgaG90X3htbF90ZXN0IFNFVCBk b2MgPSAnPHBlcnNvbj48bmFtZT5BbGljZTwvbmFtZT48YWdlPjMxPC9hZ2U+PC9wZXJzb24+ JyBXSEVSRSBpZCA9IDE7CisKK1NFTEVDVCAqIEZST00gZ2V0X2hvdF9jb3VudCgnaG90X3ht bF90ZXN0Jyk7CisKKy0tIFVwZGF0ZSBpbmRleGVkIFhQYXRoIChuYW1lKSAtIHNob3VsZCBO T1QgYmUgSE9UCitVUERBVEUgaG90X3htbF90ZXN0IFNFVCBkb2MgPSAnPHBlcnNvbj48bmFt ZT5BbGljZTI8L25hbWU+PGFnZT4zMTwvYWdlPjwvcGVyc29uPicgV0hFUkUgaWQgPSAxOwor CitTRUxFQ1QgKiBGUk9NIGdldF9ob3RfY291bnQoJ2hvdF94bWxfdGVzdCcpOworCistLSBW ZXJpZnkgaW5kZXggd29ya3MKK1NFTEVDVCBpZCBGUk9NIGhvdF94bWxfdGVzdCBXSEVSRSB4 cGF0aCgnL3BlcnNvbi9uYW1lL3RleHQoKScsIGRvYykgPSBBUlJBWVsnQWxpY2UyJzo6dGV4 dF07CisKK0RST1AgVEFCTEUgaG90X3htbF90ZXN0OworCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBHSU4gaW5kZXhlcyBhbmQgYW1jb21wYXJlZGF0dW1zIGZvciBKU09OQgor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCB0aGF0IEdJTiBpbmRleGVzIGNh biB1c2UgYW1jb21wYXJlZGF0dW1zIHRvIGVuYWJsZSBIT1Qgd2hlbiBleHRyYWN0ZWQga2V5 cyBtYXRjaAorCitDUkVBVEUgVEFCTEUgaG90X2dpbl90ZXN0ICgKKyAgICBpZCBpbnQgUFJJ TUFSWSBLRVksCisgICAgdGFncyB0ZXh0W10sCisgICAgcHJvcGVydGllcyBqc29uYgorKSBX SVRIIChmaWxsZmFjdG9yID0gNTApOworCistLSBHSU4gaW5kZXggb24gdGV4dCBhcnJheQor Q1JFQVRFIElOREVYIGhvdF9naW5fdGFnc19pZHggT04gaG90X2dpbl90ZXN0IFVTSU5HIGdp biAodGFncyk7CisKKy0tIEdJTiBpbmRleCBvbiBKU09OQiAoanNvbmJfb3BzIC0ga2V5cyBh bmQgdmFsdWVzKQorQ1JFQVRFIElOREVYIGhvdF9naW5fcHJvcHNfaWR4IE9OIGhvdF9naW5f dGVzdCBVU0lORyBnaW4gKHByb3BlcnRpZXMpOworCitJTlNFUlQgSU5UTyBob3RfZ2luX3Rl c3QgVkFMVUVTCisgICAgKDEsIEFSUkFZWyd0YWcxJywgJ3RhZzInXSwgJ3sia2V5MSI6InZh bDEiLCJrZXkyIjoidmFsMiJ9JyksCisgICAgKDIsIEFSUkFZWyd0YWczJywgJ3RhZzQnXSwg J3sia2V5MyI6InZhbDMiLCJrZXk0IjoidmFsNCJ9Jyk7CisKK1NFTEVDVCAqIEZST00gZ2V0 X2hvdF9jb3VudCgnaG90X2dpbl90ZXN0Jyk7CisKKy0tIFVwZGF0ZSB0aGF0IGNoYW5nZXMg dGFnIG9yZGVyIGJ1dCBub3QgY29udGVudCAtIGFmdGVyIGFtY29tcGFyZWRhdHVtcyBzaG91 bGQgYmUgSE9UCistLSAoR0lOIGV4dHJhY3RzIHNhbWUga2V5cywganVzdCBkaWZmZXJlbnQg b3JkZXIpCitVUERBVEUgaG90X2dpbl90ZXN0IFNFVCB0YWdzID0gQVJSQVlbJ3RhZzInLCAn dGFnMSddIFdIRVJFIGlkID0gMTsKKworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdo b3RfZ2luX3Rlc3QnKTsKKworLS0gVXBkYXRlIEpTT05CIHZhbHVlIChub3Qga2V5KSAtIGFm dGVyIGFtY29tcGFyZWRhdHVtcyBtYXkgYmUgSE9UIG9yIG5vbi1IT1QKKy0tIGRlcGVuZGlu ZyBvbiBHSU4gb3BlcmF0b3IgY2xhc3MgKGpzb25iX29wcyBpbmRleGVzIGJvdGgga2V5cyBh bmQgdmFsdWVzKQorVVBEQVRFIGhvdF9naW5fdGVzdCBTRVQgcHJvcGVydGllcyA9ICd7Imtl eTEiOiJ2YWwxX25ldyIsImtleTIiOiJ2YWwyIn0nIFdIRVJFIGlkID0gMTsKKworU0VMRUNU ICogRlJPTSBnZXRfaG90X2NvdW50KCdob3RfZ2luX3Rlc3QnKTsKKworLS0gQWRkIG5ldyB0 YWcgLSBzaG91bGQgTk9UIGJlIEhPVCAoZGlmZmVyZW50IGV4dHJhY3RlZCBrZXlzKQorVVBE QVRFIGhvdF9naW5fdGVzdCBTRVQgdGFncyA9IEFSUkFZWyd0YWcyJywgJ3RhZzEnLCAndGFn NSddIFdIRVJFIGlkID0gMTsKKworU0VMRUNUICogRlJPTSBnZXRfaG90X2NvdW50KCdob3Rf Z2luX3Rlc3QnKTsKKworLS0gVmVyaWZ5IEdJTiBpbmRleGVzIHdvcmsKK1NFTEVDVCBpZCBG Uk9NIGhvdF9naW5fdGVzdCBXSEVSRSB0YWdzIEA+IEFSUkFZWyd0YWc1J107CitTRUxFQ1Qg aWQgRlJPTSBob3RfZ2luX3Rlc3QgV0hFUkUgcHJvcGVydGllcyBAPiAneyJrZXkxIjoidmFs MV9uZXcifSc7CisKK0RST1AgVEFCTEUgaG90X2dpbl90ZXN0OworCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBDbGVhbnVwCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitE Uk9QIFRBQkxFIElGIEVYSVNUUyBob3RfdGVzdDsKK0RST1AgVEFCTEUgSUYgRVhJU1RTIGhv dF90ZXN0X3BhcnRpdGlvbmVkIENBU0NBREU7CitEUk9QIEZVTkNUSU9OIElGIEVYSVNUUyBo YXNfaG90X2NoYWluKHRleHQsIHRpZCk7CitEUk9QIEZVTkNUSU9OIElGIEVYSVNUUyBwcmlu dF9ob3RfY2hhaW4odGV4dCwgdGlkKTsKK0RST1AgRlVOQ1RJT04gSUYgRVhJU1RTIGdldF9o b3RfY291bnQodGV4dCk7CitEUk9QIEVYVEVOU0lPTiBwYWdlaW5zcGVjdDsKLS0gCjIuNTEu MgoK --4c2f6a995cf94f2faf0e839bcfb553b4 Content-Disposition: attachment; filename*0="v38-0002-Identify-modified-indexed-attributes-in-the-exec.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v38-0002-Identify-modified-indexed-attributes-in-the-exec.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSA1ZTZlMDQxNDE5MjI5NDg4MmNjZmJkMWM3MzFmMTJjZWJmMmQ1MDdmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog VHVlLCAxMCBNYXIgMjAyNiAwODoxNzozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjM4IDIv Ml0gSWRlbnRpZnkgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIGluIHRoZSBleGVjdXRv cgogb24gVVBEQVRFCgpSZWZhY3RvciBleGVjdXRvciB1cGRhdGUgbG9naWMgdG8gZGV0ZXJt aW5lIHdoaWNoIGluZGV4ZWQgY29sdW1ucyBoYXZlCmFjdHVhbGx5IGNoYW5nZWQgZHVyaW5n IGFuIFVQREFURSBvcGVyYXRpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGlzIHVwCnRvIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIGluIGhlYXBfdXBkYXRlKCkuIEZpbmRpbmcgdGhp cyBzZXQgb2YKYXR0cmlidXRlcyBpcyBub3QgaGVhcC1zcGVjaWZpYywgYnV0IG1vcmUgZ2Vu ZXJhbCB0byBhbGwgdGFibGUgQU1zIGFuZApoYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpbiB0 aGUgZXhlY3V0b3IgY291bGQgaW5mb3JtIG90aGVyIGRlY2lzaW9ucwphYm91dCB3aGVuIGlu ZGV4IGluc2VydHMgYXJlIHJlcXVpcmVkIGFuZCB3aGVuIHRoZXkgYXJlIG5vdCByZWdhcmRs ZXNzCm9mIHRoZSB0YWJsZSBBTSdzIE1WQ0MgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kuCgpU aGUgaGVhcC1vbmx5IHR1cGxlIGRlY2lzaW9uIChIT1QpIGluIGhlYXAgZnVuY3Rpb25zIGFz IGl0IGFsd2F5cyBoYXMsCmJ1dCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgIm1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyIKKG1vZGlmaWVkX2lkeF9hdHRycywgZm9ybWVybHkga25v d24gYXMgbW9kaWZpZWRfYXR0cnMpLgoKRXhlY1VwZGF0ZU1vZGlmaWVkSWR4QXR0cnMoKSBy ZXBsYWNlcyBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oKSBhbmQgaXMKY2FsbGVkIGJlZm9y ZSB0YWJsZV90dXBsZV91cGRhdGUoKSBjcnVjaWFsbHkgd2l0aG91dCB0aGUgbmVlZCBmb3Ig YW4KZXhjbHVzaXZlIGJ1ZmZlciBsb2NrIG9uIHRoZSBwYWdlIHRoYXQgaG9sZHMgdGhlIHR1 cGxlIGJlaW5nIHVwZGF0ZWQuClRoaXMgcmVkdWNlcyB0aGUgdGltZSB0aGUgYnVmZmVyIGxv Y2sgaXMgaGVsZCBsYXRlciB3aXRoaW4KaGVhcGFtX3R1cGxlX3VwZGF0ZSgpIGFuZCBoZWFw X3VwZGF0ZSgpLgoKQmVzaWRlcyBpZGVudGlmeWluZyB0aGUgc2V0IG9mIG1vZGlmaWVkIGlu ZGV4ZWQgYXR0cmlidXRlcwpIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oKSB3YXMgYWxzbyBw YXJ0aWFsbHkgcmVzcG9uc2libGUgZm9yIHRoZQpkZWNpc2lvbiBhYm91dCB3aGF0IHRvIFdB TCBsb2cgZm9yIHRoZSByZXBsaWNhIGlkZW50aXR5IGtleS4gVGhpcyBsb2dpYwptb3ZlZCBp bnRvIGhlYXBfdXBkYXRlKCkgYW5kIG91dCBvZiB0aGUgcmVwbGFjZW1lbnQgbmFtZWQKSGVh cFVwZGF0ZU1vZGlmaWVkSWR4QXR0cnMoKS4gIERvaW5nIHRoaXMgYWxsb3dzIGZvcgpzaW1w bGVfaGVhcF91cGRhdGUoKSBhbmQgaGVhcGFtX3R1cGxlX3VwZGF0ZSgpIHRvIHNoYXJlIHRo ZSBzYW1lIGxvZ2ljCmFzIHRoZXkgYm90aCBjYWxsIGludG8gaGVhcF91cGRhdGUoKS4KClVw ZGF0ZXMgc3RlbW1pbmcgZnJvbSBsb2dpY2FsIHJlcGxpY2F0aW9uIGFsc28gdXNlIHRoZSBu ZXcKRXhlY1VwZGF0ZU1vZGlmaWVkSWR4QXR0cnMoKSBpbiBFeGVjU2ltcGxlUmVsYXRpb25V cGRhdGUoKS4KCkV4ZWNVcGRhdGVNb2RpZmllZElkeEF0dHJzKCkgdXNlcyBFeGVjQ29tcGFy ZVNsb3RBdHRycygpIHRvIGlkZW50aWZ5CndoaWNoIGF0dHJpYnV0ZXMgaGF2ZSBjaGFuZ2Vk IGFuZCB0aGVuIGludGVyc2VjdHMgdGhhdCB3aXRoIHRoZSBzZXQgb2YKaW5kZXhlZCBhdHRy aWJ1dGVzIHRvIGlkZW50aWZ5IHRoZSBtb2RpZmllZCBpbmRleGVkIHNldCwgdGhlCm1vZGlm aWVkX2lkeF9hdHRycy4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBoZWxwZXIgZnVu Y3Rpb25zIHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uCmFuZCBpbmNyZWFzZSByZWFkYWJp bGl0eTogSGVhcFVwZGF0ZUhvdEFsbG93YWJsZSgpLApIZWFwVXBkYXRlRGV0ZXJtaW5lTG9j a21vZGUoKS4gVGhlc2UgYXJlIHVzZWQgaW4gYm90aCBoZWFwX3VwZGF0ZSgpIGFuZApzaW1w bGVfaGVhcF91cGRhdGUoKS4KClRoZSBoZWFwX3VwZGF0ZSgpIGZ1bmN0aW9uIGlzIGNhbGxl ZCBub3cgd2l0aCBsb2NrbW9kZSBwcmUtZGV0ZXJtaW5lZAphbmQgYSBib29sZWFuIGluZGlj YXRpbmcgaWYgdGhlIHVwZGF0ZSBhbGxvd3MgSE9UIHVwZGF0ZXMgb3Igbm90LCBib3RoCmNv bnN0LiBJZiBkdXJpbmcgaGVhcF91cGRhdGUoKSB0aGUgbmV3IHR1cGxlIHdpbGwgZml0IG9u IHRoZSBzYW1lIHBhZ2UKYW5kIHRoYXQgYm9vbGVhbiBpcyB0cnVlLCB0aGUgdXBkYXRlIGlz IEhPVC4gVGhpcyBtZWFucyB0aGF0IGFsdGhvdWdoCnRoZSBmdW5jdGlvbnMgYW5kIHRpbWlu ZyBvZiB0aGUgY29kZSBpbnZvbGVkIGluIEhPVCBkZWNpc2lvbnMgaGF2ZQpjaGFuZ2VkLCBu b25lIG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIHdoZW4gSE9UIGlzIGFsbG93ZWQgaGFzIGNo YW5nZWQuCgpEZXZlbG9wbWVudCBvZiB0aGlzIGZlYXR1cmUgZXhwb3NlZCBub25kZXRlcm1p bmlzdGljIGJlaGF2aW9yIGluIHRocmVlCmV4aXN0aW5nIHRlc3RzIHdoaWNoIGhhdmUgYmVl biBhZGp1c3RlZCB0byBhdm9pZCBpbmNvbnNpc3RlbnQgdGVzdApyZXN1bHRzIGR1ZSB0byB0 dXBsZSBvcmRlcmluZyBkdXJpbmcgaGVhcCBwYWdlIHNjYW5zLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8IDQ2MyArKysrKysrKysrKyst LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8 ICAzMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyAgICAgICAgICAg IHwgICA1ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyAgICAg ICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAgICAg ICAgICB8ICA3MCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j ICAgICAgICB8ICA4OCArKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j ICAgICAgICAgICAgfCAgNDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICAgICB8ICAxMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAg ICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRv ci5oICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNo ZS5oICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIC4uLi9leHBlY3RlZC9zeXNjYWNoZS11 cGRhdGUtcHJ1bmVkLm91dCAgICAgICB8ICAxMiArLQogLi4uL3NwZWNzL3N5c2NhY2hlLXVw ZGF0ZS1wcnVuZWQuc3BlYyAgICAgICAgIHwgICA2ICstCiAuLi4vcmVncmVzcy9leHBlY3Rl ZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQgICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvdHJpZ2dlcnMub3V0ICAgICAgICB8ICAxNiArLQogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC90c2VhcmNoLm91dCAgICAgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQgfCAgIDQgKy0KIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbCAgICB8ICAgMiArLQogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvdHJpZ2dlcnMuc3FsICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbCAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5zcWwgICAgICB8ICAgMiArLQogMjIg ZmlsZXMgY2hhbmdlZCwgNTczIGluc2VydGlvbnMoKyksIDIyNCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IGU1YmQwNjJkZTc3Li5kY2I4YTM0Yjdi ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTM3LDIxICszNywyNiBAQAog I2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJh bnMuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv c3lzYXR0ci5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3ZhbGlkLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJh c2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlX2QuaCIKICNpbmNsdWRlICJj b21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorI2lu Y2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUu aCIKLSNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Nh cnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5q ZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1 dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjgsMTEgKzczLDggQEAgc3RhdGljIHZvaWQg Y2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9u LAogCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOwogc3RhdGljIHZvaWQgY2hlY2tf aW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVwKTsKICNlbmRpZgotc3RhdGljIEJp dG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAot CQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywKLQkJCQkJCQkJCQkg ICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAgSGVhcFR1cGxlIG9s ZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29sICpoYXNfZXh0ZXJu YWwpOworc3RhdGljIEJpdG1hcHNldCAqSGVhcFVwZGF0ZU1vZGlmaWVkSWR4QXR0cnMoUmVs YXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJCSBIZWFwVHVwbGUgb2xkdHVwLCBIZWFwVHVw bGUgbmV3dHVwKTsKIHN0YXRpYyBib29sIGhlYXBfYWNxdWlyZV90dXBsb2NrKFJlbGF0aW9u IHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAkJCQkJCQkJIExvY2tU dXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBi b29sICpoYXZlX3R1cGxlX2xvY2spOwpAQCAtMzMxMiw3ICszMzE0LDcgQEAgc2ltcGxlX2hl YXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRp ZCkKICAqCWhlYXBfdXBkYXRlIC0gcmVwbGFjZSBhIHR1cGxlCiAgKgogICogU2VlIHRhYmxl X3R1cGxlX3VwZGF0ZSgpIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgcGFyYW1ldGVycywg ZXhjZXB0IHRoYXQKLSAqIHRoaXMgcm91dGluZSBkaXJlY3RseSB0YWtlcyBhIHR1cGxlIHJh dGhlciB0aGFuIGEgc2xvdC4KKyAqIHRoaXMgcm91dGluZSBkaXJlY3RseSB0YWtlcyBhIGhl YXAgdHVwbGUgcmF0aGVyIHRoYW4gYSBzbG90LgogICoKICAqIEluIHRoZSBmYWlsdXJlIGNh c2VzLCB0aGUgcm91dGluZSBmaWxscyAqdG1mZCB3aXRoIHRoZSB0dXBsZSdzIHRfY3RpZCwK ICAqIHRfeG1heCAocmVzb2x2aW5nIGEgcG9zc2libGUgTXVsdGlYYWN0LCBpZiBuZWNlc3Nh cnkpLCBhbmQgdF9jbWF4ICh0aGUgbGFzdApAQCAtMzMyMiwxNyArMzMyNCwxMyBAQCBzaW1w bGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkKQogVE1fUmVzdWx0CiBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCQkJQ29tbWFu ZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVy ZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJVFVfVXBkYXRlSW5k ZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgY29uc3Qg TG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKKwkJCWNvbnN0IEJpdG1hcHNldCAqbW9kaWZpZWRf aWR4X2F0dHJzLCBjb25zdCBib29sIGhvdF9hbGxvd2VkKQogewogCVRNX1Jlc3VsdAlyZXN1 bHQ7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOwot CUJpdG1hcHNldCAgKmhvdF9hdHRyczsKLQlCaXRtYXBzZXQgICpzdW1fYXR0cnM7Ci0JQml0 bWFwc2V0ICAqa2V5X2F0dHJzOwotCUJpdG1hcHNldCAgKmlkX2F0dHJzOwotCUJpdG1hcHNl dCAgKmludGVyZXN0aW5nX2F0dHJzOwotCUJpdG1hcHNldCAgKm1vZGlmaWVkX2F0dHJzOwor CUJpdG1hcHNldCAgKmlkeF9hdHRycywKKwkJCSAgICppZF9hdHRyczsKIAlJdGVtSWQJCWxw OwogCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVwOwpAQCAtMzM1 MiwxMyArMzM1MCwxMiBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCWJvb2wJCWhhdmVf dHVwbGVfbG9jayA9IGZhbHNlOwogCWJvb2wJCWlzY29tYm87CiAJYm9vbAkJdXNlX2hvdF91 cGRhdGUgPSBmYWxzZTsKLQlib29sCQlzdW1tYXJpemVkX3VwZGF0ZSA9IGZhbHNlOwogCWJv b2wJCWtleV9pbnRhY3Q7CiAJYm9vbAkJYWxsX3Zpc2libGVfY2xlYXJlZCA9IGZhbHNlOwog CWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWRfbmV3ID0gZmFsc2U7CiAJYm9vbAkJY2hlY2tl ZF9sb2NrZXJzOwogCWJvb2wJCWxvY2tlcl9yZW1haW5zOwotCWJvb2wJCWlkX2hhc19leHRl cm5hbCA9IGZhbHNlOworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKIAlU cmFuc2FjdGlvbklkIHhtYXhfbmV3X3R1cGxlLAogCQkJCXhtYXhfb2xkX3R1cGxlOwogCXVp bnQxNgkJaW5mb21hc2tfb2xkX3R1cGxlLApAQCAtMzM4OSwzMyArMzM4NiwxOCBAQCBoZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlk LCBIZWFwVHVwbGUgbmV3dHVwLAogI2VuZGlmCiAKIAkvKgotCSAqIEZldGNoIHRoZSBsaXN0 IG9mIGF0dHJpYnV0ZXMgdG8gYmUgY2hlY2tlZCBmb3IgdmFyaW91cyBvcGVyYXRpb25zLgot CSAqCi0JICogRm9yIEhPVCBjb25zaWRlcmF0aW9ucywgdGhpcyBpcyB3YXN0ZWQgZWZmb3J0 IGlmIHdlIGZhaWwgdG8gdXBkYXRlIG9yCi0JICogaGF2ZSB0byBwdXQgdGhlIG5ldyB0dXBs ZSBvbiBhIGRpZmZlcmVudCBwYWdlLiAgQnV0IHdlIG11c3QgY29tcHV0ZSB0aGUKLQkgKiBs aXN0IGJlZm9yZSBvYnRhaW5pbmcgYnVmZmVyIGxvY2sgLS0tIGluIHRoZSB3b3JzdCBjYXNl LCBpZiB3ZSBhcmUKLQkgKiBkb2luZyBhbiB1cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFu dCBzeXN0ZW0gY2F0YWxvZ3MsIHdlIGNvdWxkCi0JICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRv IGZldGNoIHRoZSBsaXN0IGxhdGVyLiAgSW4gYW55IGNhc2UsIHRoZSByZWxjYWNoZQotCSAq IGNhY2hlcyB0aGUgZGF0YSBzbyB0aGlzIGlzIHVzdWFsbHkgcHJldHR5IGNoZWFwLgotCSAq Ci0JICogV2UgYWxzbyBuZWVkIGNvbHVtbnMgdXNlZCBieSB0aGUgcmVwbGljYSBpZGVudGl0 eSBhbmQgY29sdW1ucyB0aGF0IGFyZQotCSAqIGNvbnNpZGVyZWQgdGhlICJrZXkiIG9mIHJv d3MgaW4gdGhlIHRhYmxlLgorCSAqIEZldGNoIHRoZSBhdHRyaWJ1dGVzIHVzZWQgYWNyb3Nz IGFsbCBpbmRleGVzIG9uIHRoaXMgcmVsYXRpb24gYXMgd2VsbAorCSAqIGFzIHRoZSByZXBs aWNhIGlkZW50aXR5IGFuZCBjb2x1bW5zLgogCSAqCi0JICogTm90ZSB0aGF0IHdlIGdldCBj b3BpZXMgb2YgZWFjaCBiaXRtYXAsIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0Ci0JICog cmVsY2FjaGUgZmx1c2ggaGFwcGVuaW5nIG1pZHdheSB0aHJvdWdoLgotCSAqLwotCWhvdF9h dHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJ CSAgIElOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORyk7Ci0Jc3VtX2F0dHJzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0JCQkJCQkJCQkJICAgSU5ERVhf QVRUUl9CSVRNQVBfU1VNTUFSSVpFRCk7Ci0Ja2V5X2F0dHJzID0gUmVsYXRpb25HZXRJbmRl eEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0tFWSk7Ci0JaWRfYXR0 cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkg IElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7Ci0JaW50ZXJlc3RpbmdfYXR0cnMg PSBOVUxMOwotCWludGVyZXN0aW5nX2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGludGVyZXN0 aW5nX2F0dHJzLCBob3RfYXR0cnMpOwotCWludGVyZXN0aW5nX2F0dHJzID0gYm1zX2FkZF9t ZW1iZXJzKGludGVyZXN0aW5nX2F0dHJzLCBzdW1fYXR0cnMpOwotCWludGVyZXN0aW5nX2F0 dHJzID0gYm1zX2FkZF9tZW1iZXJzKGludGVyZXN0aW5nX2F0dHJzLCBrZXlfYXR0cnMpOwot CWludGVyZXN0aW5nX2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGludGVyZXN0aW5nX2F0dHJz LCBpZF9hdHRycyk7CisJICogTm90ZTogV2UgbXVzdCBjb21wdXRlIHRoZSBsaXN0IGJlZm9y ZSBvYnRhaW5pbmcgYnVmZmVyIGxvY2suIEluIHRoZQorCSAqIHdvcnN0IGNhc2UsIGlmIHdl IGFyZSBkb2luZyBhbiB1cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFudCBzeXN0ZW0KKwkg KiBjYXRhbG9ncywgd2UgY291bGQgZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZldGNoIHRoZSBs aXN0IGxhdGVyLiBLZWVwIGluCisJICogbWluZCB0aGF0IHJlbGNhY2hlIHJldHVybnMgY29w aWVzIG9mIGVhY2ggYml0bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeQorCSAqIGFib3V0IHJl bGNhY2hlIGZsdXNoIGhhcHBlbmluZyBtaWR3YXkgdGhyb3VnaCwgYnV0IHdlIGRvIG5lZWQg dG8gZnJlZQorCSAqIHRoZW0uCisJICovCisJaWR4X2F0dHJzID0gUmVsYXRpb25HZXRJbmRl eEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQpOworCWlk X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FU VFJfQklUTUFQX0lERU5USVRZX0tFWSk7CiAKIAlibG9jayA9IEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIob3RpZCk7CiAJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3VwZGF0ZS1iZWZvcmUt cGluIiwgTlVMTCk7CkBAIC0zNDY5LDIwICszNDUxLDE3IEBAIGhlYXBfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBu ZXd0dXAsCiAJCXRtZmQtPmN0aWQgPSAqb3RpZDsKIAkJdG1mZC0+eG1heCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJZDsKLQkJKnVw ZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKIAotCQlibXNfZnJlZShob3RfYXR0cnMpOwotCQli bXNfZnJlZShzdW1fYXR0cnMpOwotCQlibXNfZnJlZShrZXlfYXR0cnMpOwogCQlibXNfZnJl ZShpZF9hdHRycyk7Ci0JCS8qIG1vZGlmaWVkX2F0dHJzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQg Ki8KLQkJYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOworCQlibXNfZnJlZShpZHhfYXR0 cnMpOworCQkvKiBtb2RpZmllZF9pZHhfYXR0cnMgaXMgb3duZWQgYnkgdGhlIGNhbGxlciwg ZG9uJ3QgZnJlZSBpdCAqLworCiAJCXJldHVybiBUTV9EZWxldGVkOwogCX0KIAogCS8qCi0J ICogRmlsbCBpbiBlbm91Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbyB0byB3b3JrCi0JICogcHJvcGVybHkuCisJICogRmlsbCBpbiBlbm91Z2ggZGF0 YSBpbiBvbGR0dXAgdG8gZGV0ZXJtaW5lIHJlcGxpY2EgaWRlbnRpdHkgYXR0cmlidXRlCisJ ICogcmVxdWlyZW1lbnRzLgogCSAqLwogCW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25H ZXRSZWxpZChyZWxhdGlvbik7CiAJb2xkdHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIp IFBhZ2VHZXRJdGVtKHBhZ2UsIGxwKTsKQEAgLTM0OTMsMTYgKzM0NzIsNTkgQEAgaGVhcF91 cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwg SGVhcFR1cGxlIG5ld3R1cCwKIAluZXd0dXAtPnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJl bGlkKHJlbGF0aW9uKTsKIAogCS8qCi0JICogRGV0ZXJtaW5lIGNvbHVtbnMgbW9kaWZpZWQg YnkgdGhlIHVwZGF0ZS4gIEFkZGl0aW9uYWxseSwgaWRlbnRpZnkKLQkgKiB3aGV0aGVyIGFu eSBvZiB0aGUgdW5tb2RpZmllZCByZXBsaWNhIGlkZW50aXR5IGtleSBhdHRyaWJ1dGVzIGlu IHRoZQotCSAqIG9sZCB0dXBsZSBpcyBleHRlcm5hbGx5IHN0b3JlZCBvciBub3QuICBUaGlz IGlzIHJlcXVpcmVkIGJlY2F1c2UgZm9yCi0JICogc3VjaCBhdHRyaWJ1dGVzIHRoZSBmbGF0 dGVuZWQgdmFsdWUgd29uJ3QgYmUgV0FMIGxvZ2dlZCBhcyBwYXJ0IG9mIHRoZQotCSAqIG5l dyB0dXBsZSBzbyB3ZSBtdXN0IGluY2x1ZGUgaXQgYXMgcGFydCBvZiB0aGUgb2xkX2tleV90 dXBsZS4gIFNlZQotCSAqIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkuCisJICogRXh0cmFjdFJl cGxpY2FJZGVudGl0eSgpIG5lZWRzIHRvIGtub3cgaWYgYSBtb2RpZmllZCBpbmRleGVkIGF0 dHJidXRlCisJICogaXMgdXNlZCBhcyBhIHJlcGxpY2EgaW5kZW50aXR5IG9yIGlmIGFueSBv ZiB0aGUgcmVwbGljYSBpZGVudGl0eQorCSAqIGF0dHJpYnV0ZXMgYXJlIHJlZmVyZW5jZWQg aW4gYW4gaW5kZXgsIHVubW9kaWZpZWQsIGFuZCBhcmUgc3RvcmVkCisJICogZXh0ZXJuYWxs eSBpbiB0aGUgb2xkIHR1cGxlIGJlaW5nIHJlcGxhY2VkLiAgSW4gdGhvc2UgY2FzZXMgaXQg bWF5IGJlCisJICogbmVjZXNzYXJ5IHRvIFdBTCBsb2cgdGhlbSB0byBzbyB0aGV5IGFyZSBh dmFpbGFibGUgdG8gcmVwbGljYXMuCiAJICovCi0JbW9kaWZpZWRfYXR0cnMgPSBIZWFwRGV0 ZXJtaW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGludGVyZXN0aW5nX2F0dHJzLAotCQkJCQkJ CQkJCQkgIGlkX2F0dHJzLCAmb2xkdHVwLAotCQkJCQkJCQkJCQkgIG5ld3R1cCwgJmlkX2hh c19leHRlcm5hbCk7CisJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGJtc19vdmVybGFwKG1vZGlm aWVkX2lkeF9hdHRycywgaWRfYXR0cnMpOworCWlmICghcmVwX2lkX2tleV9yZXF1aXJlZCkK Kwl7CisJCUJpdG1hcHNldCAgKmF0dHJzOworCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsYXRpb24pOworCQlpbnQJCQlhdHRpZHggPSAtMTsKKworCQkvKgor CQkgKiBSZWR1Y2UgdGhlIHNldCB1bmRlciByZXZpZXcgdG8gb25seSB0aGUgdW5tb2RpZmll ZCBpbmRleGVkIHJlcGxpY2EKKwkJICogaWRlbnRpdHkga2V5IGF0dHJpYnV0ZXMuICBpZHhf YXR0cnMgaXMgY29waWVkIChieSBibXNfZGlmZmVyZW5jZSgpKQorCQkgKiBub3QgbW9kaWZp ZWQgaGVyZS4KKwkJICovCisJCWF0dHJzID0gYm1zX2RpZmZlcmVuY2UoaWR4X2F0dHJzLCBt b2RpZmllZF9pZHhfYXR0cnMpOworCQlhdHRycyA9IGJtc19pbnRfbWVtYmVycyhhdHRycywg aWRfYXR0cnMpOworCisJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0dHJz LCBhdHRpZHgpKSA+PSAwKQorCQl7CisJCQkvKgorCQkJICogYXR0aWR4IGlzIHplcm8tYmFz ZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyCisJCQkgKi8KKwkJ CUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXI7CisJCQlEYXR1bQkJdmFsdWU7CisJCQlib29sCQlpc251bGw7CisKKwkJ CS8qCisJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBhcmUgbm90IGFkZGVkIGludG8gSU5ERVhf QVRUUl9CSVRNQVBfSU5ERVhFRAorCQkJICogYml0bWFwIGJ5IHJlbGNhY2hlLgorCQkJICov CisJCQlBc3NlcnQoYXR0cm51bSA+IDApOworCisJCQl2YWx1ZSA9IGhlYXBfZ2V0YXR0cigm b2xkdHVwLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNudWxsKTsKKworCQkJLyogTm8gbmVlZCB0 byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkgKi8K KwkJCWlmIChpc251bGwgfHwKKwkJCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBh dHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKKwkJCQljb250aW51ZTsKKworCQkJLyogQ2hl Y2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0ZSBpcyBzdG9yZWQgZXh0ZXJuYWxseSAq LworCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgoc3RydWN0IHZhcmxlbmEgKikgRGF0dW1H ZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJCQkJcmVwX2lkX2tleV9yZXF1aXJlZCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlibXNfZnJlZShhdHRycyk7CisJfQog CiAJLyoKIAkgKiBJZiB3ZSdyZSBub3QgdXBkYXRpbmcgYW55ICJrZXkiIGNvbHVtbiwgd2Ug Y2FuIGdyYWIgYSB3ZWFrZXIgbG9jayB0eXBlLgpAQCAtMzUxNSw5ICszNTM3LDggQEAgaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3Rp ZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkgKiBpcyB1cGRhdGVzIHRoYXQgZG9uJ3QgbWFuaXB1 bGF0ZSBrZXkgY29sdW1ucywgbm90IHRob3NlIHRoYXQKIAkgKiBzZXJlbmRpcGl0b3VzbHkg YXJyaXZlIGF0IHRoZSBzYW1lIGtleSB2YWx1ZXMuCiAJICovCi0JaWYgKCFibXNfb3Zlcmxh cChtb2RpZmllZF9hdHRycywga2V5X2F0dHJzKSkKKwlpZiAobG9ja21vZGUgPT0gTG9ja1R1 cGxlTm9LZXlFeGNsdXNpdmUpCiAJewotCQkqbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tleUV4 Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzTm9LZXlVcGRhdGU7 CiAJCWtleV9pbnRhY3QgPSB0cnVlOwogCkBAIC0zNTM0LDcgKzM1NTUsNyBAQCBoZWFwX3Vw ZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBI ZWFwVHVwbGUgbmV3dHVwLAogCX0KIAllbHNlCiAJewotCQkqbG9ja21vZGUgPSBMb2NrVHVw bGVFeGNsdXNpdmU7CisJCUFzc2VydChsb2NrbW9kZSA9PSBMb2NrVHVwbGVFeGNsdXNpdmUp OwogCQlteGFjdF9zdGF0dXMgPSBNdWx0aVhhY3RTdGF0dXNVcGRhdGU7CiAJCWtleV9pbnRh Y3QgPSBmYWxzZTsKIAl9CkBAIC0zNjEzLDcgKzM2MzQsNyBAQCBsMjoKIAkJCWJvb2wJCWN1 cnJlbnRfaXNfbWVtYmVyID0gZmFsc2U7CiAKIAkJCWlmIChEb2VzTXVsdGlYYWN0SWRDb25m bGljdCgoTXVsdGlYYWN0SWQpIHh3YWl0LCBpbmZvbWFzaywKLQkJCQkJCQkJCQkqbG9ja21v ZGUsICZjdXJyZW50X2lzX21lbWJlcikpCisJCQkJCQkJCQkJbG9ja21vZGUsICZjdXJyZW50 X2lzX21lbWJlcikpCiAJCQl7CiAJCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CiAKQEAgLTM2MjIsNyArMzY0Myw3IEBAIGwyOgogCQkJCSAqIHJlcXVlc3Rp bmcgYSBsb2NrIGFuZCBhbHJlYWR5IGhhdmUgb25lOyBhdm9pZHMgZGVhZGxvY2spLgogCQkJ CSAqLwogCQkJCWlmICghY3VycmVudF9pc19tZW1iZXIpCi0JCQkJCWhlYXBfYWNxdWlyZV90 dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9ja21vZGUsCisJCQkJCWhl YXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCBsb2NrbW9k ZSwKIAkJCQkJCQkJCQkgTG9ja1dhaXRCbG9jaywgJmhhdmVfdHVwbGVfbG9jayk7CiAKIAkJ CQkvKiB3YWl0IGZvciBtdWx0aXhhY3QgKi8KQEAgLTM3MDcsNyArMzcyOCw3IEBAIGwyOgog CQkJICogbG9jay4KIAkJCSAqLwogCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1VOTE9DSyk7Ci0JCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAu dF9zZWxmKSwgKmxvY2ttb2RlLAorCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24s ICYob2xkdHVwLnRfc2VsZiksIGxvY2ttb2RlLAogCQkJCQkJCQkgTG9ja1dhaXRCbG9jaywg JmhhdmVfdHVwbGVfbG9jayk7CiAJCQlYYWN0TG9ja1RhYmxlV2FpdCh4d2FpdCwgcmVsYXRp b24sICZvbGR0dXAudF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUpOwpAQCAtMzc2Nywx NyArMzc4OCwxNCBAQCBsMjoKIAkJCXRtZmQtPmNtYXggPSBJbnZhbGlkQ29tbWFuZElkOwog CQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCWlmIChoYXZlX3R1cGxlX2xvY2sp Ci0JCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICYob2xkdHVwLnRfc2VsZiksICps b2NrbW9kZSk7CisJCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICYob2xkdHVwLnRf c2VsZiksIGxvY2ttb2RlKTsKIAkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCiAJ CQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9u ZTsKIAotCQlibXNfZnJlZShob3RfYXR0cnMpOwotCQlibXNfZnJlZShzdW1fYXR0cnMpOwot CQlibXNfZnJlZShrZXlfYXR0cnMpOwogCQlibXNfZnJlZShpZF9hdHRycyk7Ci0JCWJtc19m cmVlKG1vZGlmaWVkX2F0dHJzKTsKLQkJYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwor CQlibXNfZnJlZShpZHhfYXR0cnMpOworCQkvKiBtb2RpZmllZF9pZHhfYXR0cnMgaXMgb3du ZWQgYnkgdGhlIGNhbGxlciwgZG9uJ3QgZnJlZSBpdCAqLworCiAJCXJldHVybiByZXN1bHQ7 CiAJfQogCkBAIC0zODA3LDcgKzM4MjUsNyBAQCBsMjoKIAljb21wdXRlX25ld194bWF4X2lu Zm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCiAJCQkJ CQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLAogCQkJCQkJCSAgb2xkdHVwLnRfZGF0 YS0+dF9pbmZvbWFzazIsCi0JCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgdHJ1ZSwKKwkJCQkJ CQkgIHhpZCwgbG9ja21vZGUsIHRydWUsCiAJCQkJCQkJICAmeG1heF9vbGRfdHVwbGUsICZp bmZvbWFza19vbGRfdHVwbGUsCiAJCQkJCQkJICAmaW5mb21hc2syX29sZF90dXBsZSk7CiAK QEAgLTM5MjQsNyArMzk0Miw3IEBAIGwyOgogCQljb21wdXRlX25ld194bWF4X2luZm9tYXNr KEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCiAJCQkJCQkJCSAg b2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKIAkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrMiwKLQkJCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgZmFsc2UsCisJCQkJCQkJ CSAgeGlkLCBsb2NrbW9kZSwgZmFsc2UsCiAJCQkJCQkJCSAgJnhtYXhfbG9ja19vbGRfdHVw bGUsICZpbmZvbWFza19sb2NrX29sZF90dXBsZSwKIAkJCQkJCQkJICAmaW5mb21hc2syX2xv Y2tfb2xkX3R1cGxlKTsKIApAQCAtNDA5NywyMCArNDExNSw4IEBAIGwyOgogCQkgKiB0byBk byBhIEhPVCB1cGRhdGUuICBDaGVjayBpZiBhbnkgb2YgdGhlIGluZGV4IGNvbHVtbnMgaGF2 ZSBiZWVuCiAJCSAqIGNoYW5nZWQuCiAJCSAqLwotCQlpZiAoIWJtc19vdmVybGFwKG1vZGlm aWVkX2F0dHJzLCBob3RfYXR0cnMpKQotCQl7CisJCWlmIChob3RfYWxsb3dlZCkKIAkJCXVz ZV9ob3RfdXBkYXRlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIElmIG5vbmUgb2YgdGhlIGNv bHVtbnMgdGhhdCBhcmUgdXNlZCBpbiBob3QtYmxvY2tpbmcgaW5kZXhlcwotCQkJICogd2Vy ZSB1cGRhdGVkLCB3ZSBjYW4gYXBwbHkgSE9ULCBidXQgd2UgZG8gc3RpbGwgbmVlZCB0byBj aGVjawotCQkJICogaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN1bW1hcml6aW5nIGluZGV4 ZXMsIGFuZCB1cGRhdGUgdGhvc2UKLQkJCSAqIGluZGV4ZXMgaWYgdGhlIGNvbHVtbnMgd2Vy ZSB1cGRhdGVkLCBvciB3ZSBtYXkgZmFpbCB0byBkZXRlY3QKLQkJCSAqIGUuZy4gdmFsdWUg Ym91bmQgY2hhbmdlcyBpbiBCUklOIG1pbm1heCBpbmRleGVzLgotCQkJICovCi0JCQlpZiAo Ym1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIHN1bV9hdHRycykpCi0JCQkJc3VtbWFyaXpl ZF91cGRhdGUgPSB0cnVlOwotCQl9CiAJfQogCWVsc2UKIAl7CkBAIC00MTI2LDggKzQxMzIs NyBAQCBsMjoKIAkgKiBjb2x1bW5zIGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJuYWwg ZGF0YS4KIAkgKi8KIAlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0eShy ZWxhdGlvbiwgJm9sZHR1cCwKLQkJCQkJCQkJCQkgICBibXNfb3ZlcmxhcChtb2RpZmllZF9h dHRycywgaWRfYXR0cnMpIHx8Ci0JCQkJCQkJCQkJICAgaWRfaGFzX2V4dGVybmFsLAorCQkJ CQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJICAgJm9sZF9rZXlf Y29waWVkKTsKIAogCS8qIE5PIEVSRVBPUlQoRVJST1IpIGZyb20gaGVyZSB0aWxsIGNoYW5n ZXMgYXJlIGxvZ2dlZCAqLwpAQCAtNDI1Niw3ICs0MjYxLDcgQEAgbDI6CiAJICogUmVsZWFz ZSB0aGUgbG1nciB0dXBsZSBsb2NrLCBpZiB3ZSBoYWQgaXQuCiAJICovCiAJaWYgKGhhdmVf dHVwbGVfbG9jaykKLQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50 X3NlbGYpLCAqbG9ja21vZGUpOworCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICYo b2xkdHVwLnRfc2VsZiksIGxvY2ttb2RlKTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX3VwZGF0 ZShyZWxhdGlvbiwgdXNlX2hvdF91cGRhdGUsIG5ld2J1ZiAhPSBidWZmZXIpOwogCkBAIC00 MjcwLDMxICs0Mjc1LDEyIEBAIGwyOgogCQloZWFwX2ZyZWV0dXBsZShoZWFwdHVwKTsKIAl9 CiAKLQkvKgotCSAqIElmIGl0IGlzIGEgSE9UIHVwZGF0ZSwgdGhlIHVwZGF0ZSBtYXkgc3Rp bGwgbmVlZCB0byB1cGRhdGUgc3VtbWFyaXplZAotCSAqIGluZGV4ZXMsIGxlc3Qgd2UgZmFp bCB0byB1cGRhdGUgdGhvc2Ugc3VtbWFyaWVzIGFuZCBnZXQgaW5jb3JyZWN0Ci0JICogcmVz dWx0cyAoZm9yIGV4YW1wbGUsIG1pbm1heCBib3VuZHMgb2YgdGhlIGJsb2NrIG1heSBjaGFu Z2Ugd2l0aCB0aGlzCi0JICogdXBkYXRlKS4KLQkgKi8KLQlpZiAodXNlX2hvdF91cGRhdGUp Ci0JewotCQlpZiAoc3VtbWFyaXplZF91cGRhdGUpCi0JCQkqdXBkYXRlX2luZGV4ZXMgPSBU VV9TdW1tYXJpemluZzsKLQkJZWxzZQotCQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsK LQl9Ci0JZWxzZQotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9BbGw7Ci0KIAlpZiAob2xkX2tl eV90dXBsZSAhPSBOVUxMICYmIG9sZF9rZXlfY29waWVkKQogCQloZWFwX2ZyZWV0dXBsZShv bGRfa2V5X3R1cGxlKTsKIAotCWJtc19mcmVlKGhvdF9hdHRycyk7Ci0JYm1zX2ZyZWUoc3Vt X2F0dHJzKTsKLQlibXNfZnJlZShrZXlfYXR0cnMpOwogCWJtc19mcmVlKGlkX2F0dHJzKTsK LQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7Ci0JYm1zX2ZyZWUoaW50ZXJlc3RpbmdfYXR0 cnMpOworCWJtc19mcmVlKGlkeF9hdHRycyk7CisJLyogbW9kaWZpZWRfaWR4X2F0dHJzIGlz IG93bmVkIGJ5IHRoZSBjYWxsZXIsIGRvbid0IGZyZWUgaXQgKi8KIAogCXJldHVybiBUTV9P azsKIH0KQEAgLTQ0NjcsMjggKzQ0NTMsMTE1IEBAIGhlYXBfYXR0cl9lcXVhbHMoVHVwbGVE ZXNjIHR1cGRlc2MsIGludCBhdHRybnVtLCBEYXR1bSB2YWx1ZTEsIERhdHVtIHZhbHVlMiwK IH0KIAogLyoKLSAqIENoZWNrIHdoaWNoIGNvbHVtbnMgYXJlIGJlaW5nIHVwZGF0ZWQuCi0g KgotICogR2l2ZW4gYW4gdXBkYXRlZCB0dXBsZSwgZGV0ZXJtaW5lIChhbmQgcmV0dXJuIGlu dG8gdGhlIG91dHB1dCBiaXRtYXBzZXQpLAotICogZnJvbSB0aG9zZSBsaXN0ZWQgYXMgaW50 ZXJlc3RpbmcsIHRoZSBzZXQgb2YgY29sdW1ucyB0aGF0IGNoYW5nZWQuCi0gKgotICogaGFz X2V4dGVybmFsIGluZGljYXRlcyBpZiBhbnkgb2YgdGhlIHVubW9kaWZpZWQgYXR0cmlidXRl cyAoZnJvbSB0aG9zZQotICogbGlzdGVkIGFzIGludGVyZXN0aW5nKSBvZiB0aGUgb2xkIHR1 cGxlIGlzIGEgbWVtYmVyIG9mIGV4dGVybmFsX2NvbHMgYW5kIGlzCi0gKiBzdG9yZWQgZXh0 ZXJuYWxseS4KKyAqIEhPVCB1cGRhdGVzIGFyZSBwb3NzaWJsZSB3aGVuIGVpdGhlcjogYSkg dGhlcmUgYXJlIG5vIG1vZGlmaWVkIGluZGV4ZWQKKyAqIGF0dHJpYnV0ZXMsIG9yIGIpIHRo ZSBtb2RpZmllZCBhdHRyaWJ1dGVzIGFyZSBhbGwgb24gc3VtbWFyaXppbmcgaW5kZXhlcy4K KyAqIExhdGVyLCBpbiBoZWFwX3VwZGF0ZSgpLCB3ZSBjYW4gY2hvb3NlIHRvIHBlcmZvcm0g YSBIT1QgdXBkYXRlIGlmIHRoZXJlIGlzCisgKiBzcGFjZSBvbiB0aGUgcGFnZSBmb3IgdGhl IG5ldyB0dXBsZSBhbmQgdGhlIGZvbGxvd2luZyBjb2RlIGhhcyBkZXRlcm1pbmVkCisgKiB0 aGF0IEhPVCBpcyBhbGxvd2VkLgorICovCitib29sCitIZWFwVXBkYXRlSG90QWxsb3dhYmxl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBCaXRtYXBzZXQgKm1vZGlmaWVkX2lkeF9hdHRy cywKKwkJCQkJICAgYm9vbCAqc3VtbWFyaXplZF9vbmx5KQoreworCWJvb2wJCWhvdF9hbGxv d2VkOworCisJLyoKKwkgKiBMZXQncyBiZSBvcHRpbWlzdGljIGFuZCBzdGFydCBvZmYgYnkg YXNzdW1pbmcgdGhlIGJlc3QgY2FzZSwgbm8gaW5kZXhlcworCSAqIG5lZWQgdXBkYXRpbmcg YW5kIEhPVCBpcyBhbGxvd2FibGUuCisJICovCisJaG90X2FsbG93ZWQgPSB0cnVlOworCSpz dW1tYXJpemVkX29ubHkgPSBmYWxzZTsKKworCS8qCisJICogQ2hlY2sgZm9yIGNhc2UgKGEp OyB3aGVuIHRoZXJlIGFyZSBubyBtb2RpZmllZCBpbmRleCBhdHRyaWJ1dGVzIEhPVCBpcwor CSAqIGFsbG93ZWQuCisJICovCisJaWYgKGJtc19pc19lbXB0eShtb2RpZmllZF9pZHhfYXR0 cnMpKQorCQlob3RfYWxsb3dlZCA9IHRydWU7CisJZWxzZQorCXsKKwkJQml0bWFwc2V0ICAq c3VtX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJ CQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCisJCS8qCisJ CSAqIEF0IGxlYXN0IG9uZSBpbmRleCBhdHRyaWJ1dGUgd2FzIG1vZGlmaWVkLCBidXQgaXMg dGhpcyBjYXNlIChiKQorCQkgKiB3aGVyZSBhbGwgdGhlIG1vZGlmaWVkIGluZGV4IGF0dHJp YnV0ZXMgYXJlIG9ubHkgdXNlZCBieQorCQkgKiBzdW1tYXJpemluZyBpbmRleGVzPyAgSWYg aXQgaXMsIHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgdGhvc2UKKwkJICogaW5kZXhlcywgYnV0 IHRoaXMgdXBkYXRlIGNhbiBzdGlsbCBiZSBjb25zaWRlcmVkIGhlYXAtb25seSAoSE9UKQor CQkgKiBhbmQgYXZvaWQgdXBkYXRpbmcgYW55IG5vbi1zdW1tYXJpemluZyBpbmRleGVzIG9u IHRoZSByZWxhdGlvbi4KKwkJICovCisJCWlmIChibXNfaXNfc3Vic2V0KG1vZGlmaWVkX2lk eF9hdHRycywgc3VtX2F0dHJzKSkKKwkJeworCQkJaG90X2FsbG93ZWQgPSB0cnVlOworCQkJ KnN1bW1hcml6ZWRfb25seSA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogTm93IHdlIGtub3cgYSkgb25lIG9yIG1vcmUgaW5kZXhlZCBhdHRyaWJ1dGVzIHdlcmUg bW9kaWZpZWQKKwkJCSAqIChjaGFuZ2VkIHZhbHVlLCBub3QganVzdCByZWZlcmVuY2VkIHdp dGhpbiB0aGUgVVBEQVRFKSBhbmQgdGhhdAorCQkJICogYikgYXQgbGVhc3Qgb25lIG9mIHRo b3NlIGF0dHJpYnV0ZXMgaXMgdXNlZCBieSBhCisJCQkgKiBub24tc3VtbWFyaXppbmcgaW5k ZXguIEhPVCBpcyBub3QgYWxsb3dlZC4KKwkJCSAqLworCQkJaG90X2FsbG93ZWQgPSBmYWxz ZTsKKwkJfQorCisJCWJtc19mcmVlKHN1bV9hdHRycyk7CisJfQorCisJcmV0dXJuIGhvdF9h bGxvd2VkOworfQorCisvKgorICogSWYgd2UncmUgbm90IHVwZGF0aW5nIGFueSBhdHRyaWJ1 dGVzIHVzZWQgd2hlbiBmb3JtaW5nIHRoZSBpbmRleCBrZXlzIHdlIGNhbgorICogZ3JhYiBh IHdlYWtlciBsb2NrIHR5cGUuIFRoaXMgYWxsb3dzIGZvciBtb3JlIGNvbmN1cnJlbmN5IHdo ZW4gd2UgYXJlCisgKiBydW5uaW5nIHNpbXVsdGFuZW91c2x5IHdpdGggZm9yZWlnbiBrZXkg Y2hlY2tzLgorICovCitMb2NrVHVwbGVNb2RlCitIZWFwVXBkYXRlRGV0ZXJtaW5lTG9ja21v ZGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEJpdG1hcHNldCAqbW9kaWZpZWRfaWR4X2F0 dHJzKQoreworCUxvY2tUdXBsZU1vZGUgbG9ja21vZGUgPSBMb2NrVHVwbGVFeGNsdXNpdmU7 CisKKwlCaXRtYXBzZXQgICprZXlfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1h cChyZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9LRVkpOwor CisJaWYgKCFibXNfb3ZlcmxhcChtb2RpZmllZF9pZHhfYXR0cnMsIGtleV9hdHRycykpCisJ CWxvY2ttb2RlID0gTG9ja1R1cGxlTm9LZXlFeGNsdXNpdmU7CisKKwlibXNfZnJlZShrZXlf YXR0cnMpOworCisJcmV0dXJuIGxvY2ttb2RlOworfQorCisvKgorICogUmV0dXJuIGEgQml0 bWFwc2V0IHRoYXQgY29udGFpbnMgdGhlIHNldCBvZiBtb2RpZmllZCAoY2hhbmdlZCkgaW5k ZXhlZAorICogYXR0cmlidXRlcyBiZXR3ZWVuIG9sZHR1cCBhbmQgbmV3dHVwLgogICovCiBz dGF0aWMgQml0bWFwc2V0ICoKLUhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiBy ZWxhdGlvbiwKLQkJCQkJCSBCaXRtYXBzZXQgKmludGVyZXN0aW5nX2NvbHMsCi0JCQkJCQkg Qml0bWFwc2V0ICpleHRlcm5hbF9jb2xzLAotCQkJCQkJIEhlYXBUdXBsZSBvbGR0dXAsIEhl YXBUdXBsZSBuZXd0dXAsCi0JCQkJCQkgYm9vbCAqaGFzX2V4dGVybmFsKQorSGVhcFVwZGF0 ZU1vZGlmaWVkSWR4QXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSBvbGR0dXAs IEhlYXBUdXBsZSBuZXd0dXApCiB7CiAJaW50CQkJYXR0aWR4OwotCUJpdG1hcHNldCAgKm1v ZGlmaWVkID0gTlVMTDsKKwlCaXRtYXBzZXQgICphdHRycywKKwkJCSAgICptb2RpZmllZF9p ZHhfYXR0cnMgPSBOVUxMOwogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihyZWxhdGlvbik7CiAKKwkvKiBHZXQgdGhlIHNldCBvZiBhbGwgYXR0cmlidXRlcyBhY3Jv c3MgYWxsIGluZGV4ZXMgZm9yIHRoaXMgcmVsYXRpb24gKi8KKwlhdHRycyA9IFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVE KTsKKworCS8qIE5vIGluZGV4ZWQgYXR0cmlidXRlcywgd2UncmUgZG9uZSAqLworCWlmIChi bXNfaXNfZW1wdHkoYXR0cnMpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogVGhpcyBo ZWFwIHVwZGF0ZSBmdW5jdGlvbiBpcyB1c2VkIG91dHNpZGUgdGhlIGV4ZWN1dG9yIGFuZCBz byB1bmxpa2UKKwkgKiBoZWFwYW1fdHVwbGVfdXBkYXRlKCkgd2hlcmUgdGhlcmUgaXMgUmVz dWx0UmVsSW5mbyBhbmQgRVN0YXRlIHRvCisJICogcHJvdmlkZSB0aGUgY29uY2lzZSBzZXQg b2YgYXR0cmlidXRlcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZAorCSAqICh2aWEg RXhlY0dldEFsbFVwZGF0ZWRDb2xzKCkpIHdlIHNpbXBseSBjaGVjayBhbGwgaW5kZXhlZCBh dHRyaWJ1dGVzIHRvCisJICogZmluZCB0aGUgc3Vic2V0IHRoYXQgY2hhbmdlZCB2YWx1ZS4g IFRoYXQncyB0aGUgIm1vZGlmaWVkIGluZGV4ZWQKKwkgKiBhdHRyaWJ1dGVzIiBvciAibW9k aWZpZWRfaWR4X2F0dHJzIi4KKwkgKi8KIAlhdHRpZHggPSAtMTsKLQl3aGlsZSAoKGF0dGlk eCA9IGJtc19uZXh0X21lbWJlcihpbnRlcmVzdGluZ19jb2xzLCBhdHRpZHgpKSA+PSAwKQor CXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAw KQogCXsKIAkJLyogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1h bCBhdHRyaWJ1dGUgbnVtYmVyICovCiAJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCAr IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CkBAIC00NTA0LDcgKzQ1Nzcs NyBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCiAJCSAq LwogCQlpZiAoYXR0cm51bSA9PSAwKQogCQl7Ci0JCQltb2RpZmllZCA9IGJtc19hZGRfbWVt YmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJbW9kaWZpZWRfaWR4X2F0dHJzID0gYm1zX2Fk ZF9tZW1iZXIobW9kaWZpZWRfaWR4X2F0dHJzLCBhdHRpZHgpOwogCQkJY29udGludWU7CiAJ CX0KIApAQCAtNDUxNyw3ICs0NTkwLDcgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJl bGF0aW9uIHJlbGF0aW9uLAogCQl7CiAJCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJp YnV0ZU51bWJlcikKIAkJCXsKLQkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlm aWVkLCBhdHRpZHgpOworCQkJCW1vZGlmaWVkX2lkeF9hdHRycyA9IGJtc19hZGRfbWVtYmVy KG1vZGlmaWVkX2lkeF9hdHRycywgYXR0aWR4KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJ fQpAQCAtNDUzMywyOSArNDYwNiwxMiBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVs YXRpb24gcmVsYXRpb24sCiAKIAkJaWYgKCFoZWFwX2F0dHJfZXF1YWxzKHR1cGRlc2MsIGF0 dHJudW0sIHZhbHVlMSwKIAkJCQkJCQkgIHZhbHVlMiwgaXNudWxsMSwgaXNudWxsMikpCi0J CXsKLQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7Ci0J CQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gY2hlY2sgYXR0cmli dXRlcyB0aGF0IGNhbid0IGJlIHN0b3JlZCBleHRlcm5hbGx5LiBOb3RlCi0JCSAqIHRoYXQg c3lzdGVtIGF0dHJpYnV0ZXMgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkuCi0JCSAqLwot CQlpZiAoYXR0cm51bSA8IDAgfHwgaXNudWxsMSB8fAotCQkJVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwZGVzYywgYXR0cm51bSAtIDEpLT5hdHRsZW4gIT0gLTEpCi0JCQljb250aW51ZTsK LQotCQkvKgotCQkgKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxlJ3MgYXR0cmlidXRlIGlzIHN0 b3JlZCBleHRlcm5hbGx5IGFuZCBpcyBhCi0JCSAqIG1lbWJlciBvZiBleHRlcm5hbF9jb2xz LgotCQkgKi8KLQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgodmFybGVuYSAqKSBEYXR1bUdl dFBvaW50ZXIodmFsdWUxKSkgJiYKLQkJCWJtc19pc19tZW1iZXIoYXR0aWR4LCBleHRlcm5h bF9jb2xzKSkKLQkJCSpoYXNfZXh0ZXJuYWwgPSB0cnVlOworCQkJbW9kaWZpZWRfaWR4X2F0 dHJzID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWRfaWR4X2F0dHJzLCBhdHRpZHgpOwogCX0K IAotCXJldHVybiBtb2RpZmllZDsKKwlibXNfZnJlZShhdHRycyk7CisKKwlyZXR1cm4gbW9k aWZpZWRfaWR4X2F0dHJzOwogfQogCiAvKgpAQCAtNDU3MywxMSArNDYyOSwxMDYgQEAgc2lt cGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAlUTV9SZXN1bHQJcmVzdWx0OwogCVRNX0ZhaWx1 cmVEYXRhIHRtZmQ7CiAJTG9ja1R1cGxlTW9kZSBsb2NrbW9kZTsKKwlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKKwlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90OworCUhlYXBUdXBs ZQlvbGR0dXA7CisJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CisJQml0bWFwc2V0ICAqaWR4 X2F0dHJzLAorCQkJICAgKm1vZGlmaWVkX2lkeF9hdHRyczsKKwlib29sCQlob3RfYWxsb3dl ZCwKKwkJCQlzdW1tYXJpemVkX29ubHk7CisJQnVmZmVyCQlidWZmZXI7CiAKLQlyZXN1bHQg PSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwLAotCQkJCQkJIEdldEN1cnJlbnRD b21tYW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCSB0cnVlIC8qIHdhaXQg Zm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2luZGV4 ZXMpOworCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJLyoKKwkgKiBG ZXRjaCB0aGlzIGJpdG1hcCBvZiBpbnRlcmVzdGluZyBhdHRyaWJ1dGVzIGZyb20gcmVsY2Fj aGUgYmVmb3JlCisJICogb2J0YWluaW5nIGEgYnVmZmVyIGxvY2sgYmVjYXVzZSBpZiB3ZSBh cmUgZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0aGUKKwkgKiByZWxldmFudCBzeXN0ZW0g Y2F0YWxvZ3Mgd2UgY291bGQgZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZldGNoIHRoZW0KKwkg KiBsYXRlciBvbi4gUmVsY2FjaGUgd2lsbCByZXR1cm4gY29waWVzIG9mIGVhY2ggYml0bWFw LCBzbyB3ZSBuZWVkIG5vdAorCSAqIHdvcnJ5IGFib3V0IHJlbGNhY2hlIGZsdXNoIGhhcHBl bmluZyBtaWR3YXkgdGhyb3VnaCB0aGlzIG9wZXJhdGlvbi4KKwkgKi8KKwlpZHhfYXR0cnMg PSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRN QVBfSU5ERVhFRCk7CisKKwlJTkpFQ1RJT05fUE9JTlQoInNpbXBsZV9oZWFwX3VwZGF0ZS1i ZWZvcmUtcGluIiwgTlVMTCk7CisKKwkvKgorCSAqIFRvIHVwZGF0ZSBhIGhlYXAgdHVwbGUg d2UgbmVlZCB0byBmaW5kIHRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZAorCSAqIGF0dHJp YnV0ZXMgKCJtb2RpZmllZF9pZHhfYXR0cnMiKSBhbmQgdXNlIHRoYXQgdG8gZGV0ZXJtaW5l IGlmIGEgSE9UCisJICogdXBkYXRlIGlzIGFsbG93YWJsZSBvciBub3QuIFdoZW4gdXBkYXRp bmcgaGVhcCB0dXBsZXMgdmlhIGV4ZWN1dGlvbiBvZgorCSAqIFVQREFURSBzdGF0ZW1lbnRz IHRoaXMgc2V0IGlzIGNvbnN0cnVjdGVkIGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIHRhYmxl CisJICogQU0ncyB1cGRhdGUgZnVuY3Rpb24gYnkgRXhlY1VwZGF0ZU1vZGlmaWVkSWR4QXR0 cnMoKSB3aGljaCBjb21wYXJlcyB0aGUKKwkgKiBvbGQvbmV3IFR1cGxlVGFibGVTbG90cy4K KwkgKgorCSAqIEhlcmUgdGhpbmdzIGFyZSBhIGJpdCBkaWZmZXJlbnQsIHdlIGhhdmUgdGhl IG9sZCBUSUQgYW5kIHRoZSBuZXcgdHVwbGUsCisJICogbm90IHR3byBUdXBsZVRhYmxlU2xv dHMsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNvbnN0cnVjdCBhIHNpbWlsYXIKKwkgKiBiaXRt YXAgc28gYXMgdG8gYmUgYWJsZSB0byBrbm93IGlmIEhPVCB1cGRhdGVzIGFyZSBhbGxvd2Vk IG9yIG5vdC4KKwkgKgorCSAqIFRvIGRvIHRoYXQgd2UgZmlyc3QgaGF2ZSB0byBmZXRjaCB0 aGUgb2xkIHR1cGxlIGl0c2VsZiwgYnV0IGJlY2F1c2UKKwkgKiBoZWFwYW1fZmV0Y2hfcm93 X3ZlcnNpb24oKSBpcyBzdGF0aWMsIHdlIHJlcGxpY2F0ZSBpbiBwYXJ0IHRoYXQgY29kZQor CSAqIGhlcmUuCisJICoKKwkgKiBUaGlzIGlzIGEgYml0IHJlcGV0aXRpdmUgYmVjYXVzZSBo ZWFwX3VwZGF0ZSgpIHdpbGwgYWdhaW4gZmluZCBhbmQgZm9ybQorCSAqIHRoZSBvbGQgSGVh cFR1cGxlIGZyb20gdGhlIG9sZCBUSUQgYW5kIGluIG1vc3QgY2FzZXMgdGhlIGNhbGxlcnMK KwkgKiAoaWdub3JpbmcgZXh0ZW5zaW9ucywgYXJlIGFsd2F5cyBjYXRhbG9nIHR1cGxlIHVw ZGF0ZXMpIGFscmVhZHkgaGFkIHRoZQorCSAqIHNldCBvZiBjaGFuZ2VkIGF0dHJpYnV0ZXMg KHRoZSAicmVwbGFjZXMiIGFycmF5KSwgYnV0IGZvciBub3cgdGhpcworCSAqIG1pbm9yIHJl cGV0aXRpb24gb2Ygd29yayBpcyBuZWNlc3NhcnkuCisJICovCisJc2xvdCA9IE1ha2VUdXBs ZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKSwgJlRUU09wc0J1ZmZlckhl YXBUdXBsZSwgMCk7CisJYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNs b3Q7CisKKwkvKgorCSAqIFNldCB0aGUgVElEIGluIHRoZSBzbG90IGFuZCB0aGVuIGZldGNo IHRoZSBvbGQgdHVwbGUgc28gd2UgY2FuIGV4YW1pbmUKKwkgKiBpdAorCSAqLworCWJzbG90 LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKm90aWQ7CisJaWYgKCFoZWFwX2ZldGNoKHJlbGF0 aW9uLCBTbmFwc2hvdEFueSwgJmJzbG90LT5iYXNlLnR1cGRhdGEsICZidWZmZXIsIGZhbHNl KSkKKwl7CisJCS8qCisJCSAqIGhlYXBfdXBkYXRlKCkgY2hlY2tzIGZvciAhSXRlbUlkSXNO b3JtYWwobHApIGFuZCB3aWxsIHJldHVybiBmYWxzZQorCQkgKiBpbiB0aG9zZSBjYXNlcy4K KwkJICovCisJCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbikpKTsKKworCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCisJ CS8qIG1vZGlmaWVkX2lkeF9hdHRycyBub3QgeWV0IGluaXRpYWxpemVkICovCisJCWJtc19m cmVlKGlkeF9hdHRycyk7CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7 CisKKwkJZWxvZyhFUlJPUiwgInR1cGxlIGNvbmN1cnJlbnRseSBkZWxldGVkIik7CisKKwkJ cmV0dXJuOworCX0KKworCUFzc2VydChidWZmZXIgIT0gSW52YWxpZEJ1ZmZlcik7CisKKwkv KiBTdG9yZSBpbiBzbG90LCB0cmFuc2ZlcnJpbmcgZXhpc3RpbmcgcGluICovCisJRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBi dWZmZXIpOworCW9sZHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgZmFsc2Us ICZzaG91bGRGcmVlKTsKKworCW1vZGlmaWVkX2lkeF9hdHRycyA9IEhlYXBVcGRhdGVNb2Rp ZmllZElkeEF0dHJzKHJlbGF0aW9uLCBvbGR0dXAsIHR1cCk7CisJbG9ja21vZGUgPSBIZWFw VXBkYXRlRGV0ZXJtaW5lTG9ja21vZGUocmVsYXRpb24sIG1vZGlmaWVkX2lkeF9hdHRycyk7 CisJaG90X2FsbG93ZWQgPSBIZWFwVXBkYXRlSG90QWxsb3dhYmxlKHJlbGF0aW9uLCBtb2Rp ZmllZF9pZHhfYXR0cnMsICZzdW1tYXJpemVkX29ubHkpOworCisJcmVzdWx0ID0gaGVhcF91 cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwK KwkJCQkJCSBJbnZhbGlkU25hcHNob3QsIHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwK KwkJCQkJCSAmdG1mZCwgbG9ja21vZGUsIG1vZGlmaWVkX2lkeF9hdHRycywgaG90X2FsbG93 ZWQpOworCisJaWYgKHNob3VsZEZyZWUpCisJCWhlYXBfZnJlZXR1cGxlKG9sZHR1cCk7CisK KwlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCWJtc19mcmVlKGlkeF9h dHRycyk7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIG5ldyBpbmRleCBlbnRyaWVzIGFy ZSBuZWVkZWQgZm9yIHRoZSB0dXBsZQorCSAqCisJICogSWYgdGhlIHVwZGF0ZSBpcyBub3Qg SE9ULCB3ZSBtdXN0IHVwZGF0ZSBhbGwgaW5kZXhlcy4gSWYgdGhlIHVwZGF0ZSBpcworCSAq IEhPVCwgaXQgY291bGQgYmUgdGhhdCB3ZSB1cGRhdGVkIHN1bW1hcml6ZWQgY29sdW1ucywg c28gd2UgZWl0aGVyCisJICogdXBkYXRlIG9ubHkgc3VtbWFyaXplZCBpbmRleGVzLCBvciBu b25lIGF0IGFsbC4KKwkgKi8KKwkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwogCXN3aXRj aCAocmVzdWx0KQogCXsKIAkJY2FzZSBUTV9TZWxmTW9kaWZpZWQ6CkBAIC00NTg3LDYgKzQ3 MzgsMTAgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAogCQljYXNlIFRNX09rOgog CQkJLyogZG9uZSBzdWNjZXNzZnVsbHkgKi8KKwkJCWlmICghSGVhcFR1cGxlSXNIZWFwT25s eSh0dXApKQorCQkJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX0FsbDsKKwkJCWVsc2UgaWYgKHN1 bW1hcml6ZWRfb25seSkKKwkJCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9TdW1tYXJpemluZzsK IAkJCWJyZWFrOwogCiAJCWNhc2UgVE1fVXBkYXRlZDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDI1M2E3MzViNmMxLi4zNzI2Yzg2N2M2NSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNyw3 ICsyNyw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL3N5bmNzY2FuLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHNtYXBpLmgiCi0jaW5jbHVkZSAi YWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK QEAgLTMyNSwxOSArMzI0LDI2IEBAIGhlYXBhbV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVs YXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwgQ29tbWFuZElkIGNpZCwKIHN0YXRpYyBUTV9SZXN1 bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVy IG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFw c2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKLQkJCQkJYm9vbCB3YWl0LCBU TV9GYWlsdXJlRGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIFRV X1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCQlib29sIHdhaXQsIFRNX0Zh aWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJY29uc3Qg Qml0bWFwc2V0ICptb2RpZmllZF9pZHhfYXR0cnMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKQogewogCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwogCUhlYXBUdXBsZQl0 dXBsZSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUp OworCWJvb2wJCWhvdF9hbGxvd2VkOworCWJvb2wJCXN1bW1hcml6ZWRfb25seTsKIAlUTV9S ZXN1bHQJcmVzdWx0OwogCisJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZChvdGlkKSk7CisK Kwlob3RfYWxsb3dlZCA9IEhlYXBVcGRhdGVIb3RBbGxvd2FibGUocmVsYXRpb24sIG1vZGlm aWVkX2lkeF9hdHRycywgJnN1bW1hcml6ZWRfb25seSk7CisJKmxvY2ttb2RlID0gSGVhcFVw ZGF0ZURldGVybWluZUxvY2ttb2RlKHJlbGF0aW9uLCBtb2RpZmllZF9pZHhfYXR0cnMpOwor CiAJLyogVXBkYXRlIHRoZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLwogCXNsb3QtPnR0c190 YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCXR1cGxlLT50X3RhYmxl T2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOwogCiAJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVs YXRpb24sIG90aWQsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1m ZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCSB0bWZkLCAqbG9ja21vZGUs IG1vZGlmaWVkX2lkeF9hdHRycywgaG90X2FsbG93ZWQpOwogCUl0ZW1Qb2ludGVyQ29weSgm dHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJLyoKQEAgLTM1MCwxNiArMzU2 LDE3IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCSAqIEhPVCwgaXQgY291bGQgYmUg dGhhdCB3ZSB1cGRhdGVkIHN1bW1hcml6ZWQgY29sdW1ucywgc28gd2UgZWl0aGVyCiAJICog dXBkYXRlIG9ubHkgc3VtbWFyaXplZCBpbmRleGVzLCBvciBub25lIGF0IGFsbC4KIAkgKi8K LQlpZiAocmVzdWx0ICE9IFRNX09rKQorCSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7CisJ aWYgKHJlc3VsdCA9PSBUTV9PaykKIAl7Ci0JCUFzc2VydCgqdXBkYXRlX2luZGV4ZXMgPT0g VFVfTm9uZSk7Ci0JCSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7CisJCWlmIChIZWFwVHVw bGVJc0hlYXBPbmx5KHR1cGxlKSkKKwkJeworCQkJaWYgKHN1bW1hcml6ZWRfb25seSkKKwkJ CQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9TdW1tYXJpemluZzsKKwkJfQorCQllbHNlCisJCQkq dXBkYXRlX2luZGV4ZXMgPSBUVV9BbGw7CiAJfQotCWVsc2UgaWYgKCFIZWFwVHVwbGVJc0hl YXBPbmx5KHR1cGxlKSkKLQkJQXNzZXJ0KCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9BbGwpOwot CWVsc2UKLQkJQXNzZXJ0KCgqdXBkYXRlX2luZGV4ZXMgPT0gVFVfU3VtbWFyaXppbmcpIHx8 Ci0JCQkgICAoKnVwZGF0ZV9pbmRleGVzID09IFRVX05vbmUpKTsKIAogCWlmIChzaG91bGRG cmVlKQogCQlwZnJlZSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpp bmRleCBkZmRhMWFmNDEyZS4uOWJhNzJkNTFkZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxl L3RhYmxlYW0uYwpAQCAtMzU5LDYgKzM1OSw3IEBAIHZvaWQKIHNpbXBsZV90YWJsZV90dXBs ZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkg IGNvbnN0IEJpdG1hcHNldCAqbW9kaWZpZWRfaWR4X2F0dHJzLAogCQkJCQkJICBUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwpAQCAt MzY5LDcgKzM3MCw5IEBAIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVs LCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQlHZXRDdXJyZW50Q29tbWFuZElkKHRydWUp LAogCQkJCQkJCQlzbmFwc2hvdCwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQl0cnVlIC8q IHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkJCSZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0 ZV9pbmRleGVzKTsKKwkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwKKwkJCQkJCQkJbW9kaWZp ZWRfaWR4X2F0dHJzLAorCQkJCQkJCQl1cGRhdGVfaW5kZXhlcyk7CiAKIAlzd2l0Y2ggKHJl c3VsdCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGlj YXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4 IDI0OTdlZTdlZGM1Li44YTI2OWRkMmY2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv c25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdHlwY2FjaGUuaCIKQEAgLTkwNiw2ICs5MDcsNyBAQCBFeGVjU2ltcGxlUmVsYXRpb25V cGRhdGUoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlib29sCQlza2lwX3R1cGxl ID0gZmFsc2U7CiAJUmVsYXRpb24JcmVsID0gcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25E ZXNjOwogCUl0ZW1Qb2ludGVyIHRpZCA9ICYoc2VhcmNoc2xvdC0+dHRzX3RpZCk7CisJQml0 bWFwc2V0ICAqbW9kaWZpZWRfaWR4X2F0dHJzOwogCiAJLyoKIAkgKiBXZSBzdXBwb3J0IG9u bHkgbm9uLXN5c3RlbSB0YWJsZXMsIHdpdGgKQEAgLTk0NCw4ICs5NDYsMTMgQEAgRXhlY1Np bXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCWlm IChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCiAJCQlFeGVjUGFydGl0aW9uQ2hlY2so cmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCB0cnVlKTsKIAorCQltb2RpZmllZF9pZHhf YXR0cnMgPSBFeGVjVXBkYXRlTW9kaWZpZWRJZHhBdHRycyhyZXN1bHRSZWxJbmZvLAorCQkJ CQkJCQkJCQkJCQlzZWFyY2hzbG90LCBzbG90KTsKKwogCQlzaW1wbGVfdGFibGVfdHVwbGVf dXBkYXRlKHJlbCwgdGlkLCBzbG90LCBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkg ICZ1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSAgbW9kaWZpZWRfaWR4X2F0dHJzLCAmdXBk YXRlX2luZGV4ZXMpOworCQlibXNfZnJlZShtb2RpZmllZF9pZHhfYXR0cnMpOworCiAKIAkJ Y29uZmxpY3RpbmRleGVzID0gcmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJ bmRleGVzOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggOWQ5MDAxNDdh NTUuLjE5MDU0MTA5YTc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj VHVwbGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC02 Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRkYXR1bS5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hl LmgiCkBAIC0yMDA1LDYgKzIwMDYsNzUgQEAgRXhlY0ZldGNoU2xvdEhlYXBUdXBsZURhdHVt KFR1cGxlVGFibGVTbG90ICpzbG90KQogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBFeGVj Q29tcGFyZVNsb3RBdHRycworICoKKyAqIENvbXBhcmUgdGhlIHN1YnNldCBvZiBhdHRyaWJ1 dGVzIGluIGF0dHJzIGJld3R3ZWVuIFR1cGxlVGFibGVTbG90cyB0byBkZXRlY3QKKyAqIHdo aWNoIGF0dHJpYnV0ZXMgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIFJldHVybnMgYSByZXVzZWQg d2hlbiBwb3NzaWJsZSBCaXRtYXBzZXQgb2YgYXR0cmlidXRlIGluZGljZXMgKHVzaW5nCisg KiBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyIGNvbnZlbnRpb24pIHRoYXQg ZGlmZmVyIGJldHdlZW4gdGhlIHR3bworICogc2xvdHMuCisgKi8KK0JpdG1hcHNldCAqCitF eGVjQ29tcGFyZVNsb3RBdHRycyhCaXRtYXBzZXQgKmF0dHJzLCBUdXBsZURlc2MgdHVwZGVz YywKKwkJCQkJIFR1cGxlVGFibGVTbG90ICpzMSwgVHVwbGVUYWJsZVNsb3QgKnMyKQorewor CWludAkJCWF0dGlkeCA9IC0xOworCisJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1i ZXIoYXR0cnMsIGF0dGlkeCkpID49IDApCisJeworCQkvKiBhdHRpZHggaXMgemVyby1iYXNl ZCwgYXR0cm51bSBpcyB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBudW1iZXIgKi8KKwkJQXR0ck51 bWJlcglhdHRybnVtID0gYXR0aWR4ICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51 bWJlcjsKKwkJRGF0dW0JCXZhbHVlMSwKKwkJCQkJdmFsdWUyOworCQlib29sCQludWxsMSwK KwkJCQkJbnVsbDI7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKKworCQkvKgorCQkgKiBJ ZiBpdCdzIGEgd2hvbGUtdHVwbGUgcmVmZXJlbmNlLCBzYXkgIm5vdCBlcXVhbCIuICBJdCdz IG5vdCByZWFsbHkKKwkJICogd29ydGggc3VwcG9ydGluZyB0aGlzIGNhc2UsIHNpbmNlIGl0 IGNvdWxkIG9ubHkgc3VjY2VlZCBhZnRlciBhCisJCSAqIG5vLW9wIHVwZGF0ZSwgd2hpY2gg aXMgaGFyZGx5IGEgY2FzZSB3b3J0aCBvcHRpbWl6aW5nIGZvci4KKwkJICovCisJCWlmIChh dHRybnVtID09IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBMaWtld2lzZSwgYXV0 b21hdGljYWxseSBzYXkgIm5vdCBlcXVhbCIgZm9yIGFueSBzeXN0ZW0gYXR0cmlidXRlCisJ CSAqIG90aGVyIHRoYW4gdGFibGVPSUQ7IHdlIGNhbm5vdCBleHBlY3QgdGhlc2UgdG8gYmUg Y29uc2lzdGVudCBpbiBhCisJCSAqIEhPVCBjaGFpbiwgb3IgZXZlbiB0byBiZSBzZXQgY29y cmVjdGx5IHlldCBpbiB0aGUgbmV3IHR1cGxlLgorCQkgKi8KKwkJaWYgKGF0dHJudW0gPCAw KQorCQl7CisJCQlpZiAoYXR0cm51bSA9PSBUYWJsZU9pZEF0dHJpYnV0ZU51bWJlcikKKwkJ CQlhdHRycyA9IGJtc19kZWxfbWVtYmVyKGF0dHJzLCBhdHRpZHgpOworCQkJZWxzZQorCQkJ CWNvbnRpbnVlOworCQl9CisKKwkJYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVz YywgYXR0cm51bSAtIDEpOworCQl2YWx1ZTEgPSBzbG90X2dldGF0dHIoczEsIGF0dHJudW0s ICZudWxsMSk7CisJCXZhbHVlMiA9IHNsb3RfZ2V0YXR0cihzMiwgYXR0cm51bSwgJm51bGwy KTsKKworCQkvKiBBIGNoYW5nZSB0by9mcm9tIE5VTEwsIHNvIG5vdCBlcXVhbCAqLworCQlp ZiAobnVsbDEgIT0gbnVsbDIpCisJCQljb250aW51ZTsKKworCQkvKiBCb3RoIE5VTEwsIG5v IGNoYW5nZS91bm1vZGlmaWVkICovCisJCWlmIChudWxsMikKKwkJeworCQkJYXR0cnMgPSBi bXNfZGVsX21lbWJlcihhdHRycywgYXR0aWR4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ aWYgKGRhdHVtX2ltYWdlX2VxKHZhbHVlMSwgdmFsdWUyLCBhdHQtPmF0dGJ5dmFsLCBhdHQt PmF0dGxlbikpCisJCQlhdHRycyA9IGJtc19kZWxfbWVtYmVyKGF0dHJzLCBhdHRpZHgpOwor CX0KKworCXJldHVybiBhdHRyczsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJY29udmVu aWVuY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggNGNkNWUyNjJlMGYuLjRjMGM1 YTAzMDI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAt MTcsNiArMTcsNyBAQAogICoJCUV4ZWNNb2RpZnlUYWJsZQkJLSByZXRyaWV2ZSB0aGUgbmV4 dCB0dXBsZSBmcm9tIHRoZSBub2RlCiAgKgkJRXhlY0VuZE1vZGlmeVRhYmxlCS0gc2h1dCBk b3duIHRoZSBNb2RpZnlUYWJsZSBub2RlCiAgKgkJRXhlY1JlU2Nhbk1vZGlmeVRhYmxlIC0g cmVzY2FuIHRoZSBNb2RpZnlUYWJsZSBub2RlCisgKgkJRXhlY1VwZGF0ZU1vZGlmaWVkSWR4 QXR0cnMgLSBmaW5kIHNldCBvZiB1cGRhdGVkIGluZGV4ZWQgY29sdW1ucwogICoKICAqCSBO T1RFUwogICoJCVRoZSBNb2RpZnlUYWJsZSBub2RlIHJlY2VpdmVzIGlucHV0IGZyb20gaXRz IG91dGVyUGxhbiwgd2hpY2ggaXMKQEAgLTU1LDYgKzU2LDcgQEAKICNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNs dWRlICJhY2Nlc3MvdHVwY29udmVydC5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2Vy LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgpAQCAtMTkwLDYgKzE5 Miw2MyBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU5vdE1hdGNoZWQoTW9k aWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkJICAgYm9vbCBjYW5TZXRUYWcpOwogCisvKgor ICogRXhlY1VwZGF0ZU1vZGlmaWVkSWR4QXR0cnMKKyAqCisgKiBGaW5kIHRoZSBzZXQgb2Yg YXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IHRoaXMgcmVsYXRpb24gYW5kIHVzZWQgaW4gdGhp cworICogVVBEQVRFIHRoYXQgbm93IGRpZmZlciBpbiB2YWx1ZS4gIFRoaXMgaXMgZG9uZSBi eSByZXZpZXdpbmcgc2xvdCBkYXR1bSB0aGF0CisgKiBhcmUgaW4gdGhlIFVQREFURSBzdGF0 bWVudCBhbmQgYXJlIGtub3duIHRvIGJlIHJlZmVyZW5jZWQgYnkgYXQgbGVhc3Qgb25lCisg KiBpbmRleCBpbiBzb21lIHdheS4gIFRoaXMgc2V0IGlzIGNhbGxlZCB0aGUgIm1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyIgb3IKKyAqICJtb2RpZmllZF9pZHhfYXR0cnMiLiAgQW4g b3ZlcmxhcCBvZiBhIHNpbmdsZSBpbmRleCdzIGF0dHJpYnV0ZXMgYW5kIHRoaXMKKyAqIG1v ZGlmaWVkX2lkeF9hdHRycyBzZXQgc2lnbmFscyB0aGF0IHRoZSBhdHRyaWJ1dGVzIGluIHRo ZSBuZXdfdHRzIHVzZWQgdG8KKyAqIGZvcm0gdGhlIGluZGV4IGRhdHVtIGhhdmUgY2hhbmdl ZC4KKyAqCisgKiBSZXR1cm4gYSBCaXRtYXBzZXQgdGhhdCBjb250YWlucyB0aGUgc2V0IG9m IG1vZGlmaWVkIChjaGFuZ2VkKSBpbmRleGVkCisgKiBhdHRyaWJ1dGVzIGJldHdlZW4gb2xk dHVwIGFuZCBuZXd0dXAuCisgKgorICogTm90ZTogVGhlcmUgaXMgYSBzaW1pbGFyIGZ1bmN0 aW9uIGNhbGxlZCBIZWFwVXBkYXRlTW9kaWZpZWRJZHhBdHRycygpIHRoYXQgb3BlcmF0ZXMK KyAqIG9uIHRoZSBvbGQgVElEIGFuZCBuZXcgSGVhcFR1cGxlIHJhdGhlciB0aGFuIHRoZSBv bGQvbmV3IFR1cGxlVGFibGVTbG90cyBhcworICogdGhpcyBmdW5jdGlvbiBkb2VzLiAgVGhl c2UgdHdvIGZ1bmN0aW9ucyBzaG91bGQgbWlycm9yIG9uZSBhbm90aGVyIHVudGlsCisgKiBz b21lZGF5IHdoZW4gY2F0YWxvZyB0dXBsZSB1cGRhdGVzIHRyYWNrIHRoZWlyIGNoYW5nZXMg YXZvaWRpbmcgdGhlIG5lZWQgdG8KKyAqIHJlLWRpc2NvdmVyIHRoZW0gaW4gc2ltcGxlX2hl YXBfdXBkYXRlKCkuCisgKi8KK0JpdG1hcHNldCAqCitFeGVjVXBkYXRlTW9kaWZpZWRJZHhB dHRycyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKm9sZF90dHMsCisJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cykKK3sK KwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsK KwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCUJp dG1hcHNldCAgKmF0dHJzOworCisJLyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLwor CWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID09IDApCisJCXJldHVybiBOVUxM OworCisJLyoKKwkgKiBHZXQgdGhlIHNldCBvZiBhbGwgYXR0cmlidXRlcyBhY3Jvc3MgYWxs IGluZGV4ZXMgZm9yIHRoaXMgcmVsYXRpb24gZnJvbQorCSAqIHRoZSByZWxjYWNoZSwgaXQg cmV0dXJucyB1cyBhIGNvcHkgb2YgdGhlIGJpdG1hcCBzbyB3ZSBjYW4gbW9kaWZ5IGl0Lgor CSAqCisJICogTm90ZTogV2UgaW50ZW50aW9uYWxseSBzY2FuIGFsbCBpbmRleGVkIGNvbHVt bnMgd2hlbiBsb29raW5nIGZvcgorCSAqIGNoYW5nZXMgcmF0aGVyIHRoYW4gcmVkdWNlIHRo YXQgc2V0IGJ5IGludGVyc2VjdGluZyBpdCB3aXRoCisJICogRXhlY0dldEFsbFVwZGF0ZWRD b2xzKCkuICBEZXNpcHRlIHRoZSBuYW1lIGl0IHByb3ZpZGVzIHRoZSBzZXQgb2YKKwkgKiB0 YXJnZXRlZCBhdHRyaWJ1dGVzIGluIHRoZSBTUUwgdXNlZCBmb3IgdGhlIFVQREFURSBhbmQg YW55IHRyaWdnZXJzLAorCSAqIGJ1dCB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgYXR0cmli dXRlcyB1cGRhdGVkIHVzaW5nCisJICogaGVhcF9tb2RpZml5X3R1cGxlKCkuIFRoZXJlIGlz IG9uZSB0ZXN0IGluIHRzZWFyY2guc3FsIHRoYXQgZG9lcyBqdXN0CisJICogdGhhdCwgbW9k aWZpZXMgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdGhhdCBpc24ndCBzcGVjaWZpZWQgaW4gdGhl IFNRTCBhbmQKKwkgKiBzbyBpc24ndCBwcmVzZW50IGluIHRoYXQgYml0bWFwc2V0LgorCSAq LworCWF0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVY X0FUVFJfQklUTUFQX0lOREVYRUQpOworCisJLyoKKwkgKiBXaGVuIHRoZXJlIGFyZSBpbmRl eGVkIGF0dHJpYnV0ZXMgbWVudGlvbmVkIGluIHRoZSBVUERBVEUgdGhlbiB3ZSBuZWVkCisJ ICogdG8gZmluZCB0aGUgc3Vic2V0IHRoYXQgY2hhbmdlZCB2YWx1ZS4gIFRoYXQncyB0aGUK KwkgKiAibW9kaWZpZWRfaWR4X2F0dHJzIi4KKwkgKi8KKwlhdHRycyA9IEV4ZWNDb21wYXJl U2xvdEF0dHJzKGF0dHJzLCB0dXBkZXNjLCBvbGRfdHRzLCBuZXdfdHRzKTsKKworCXJldHVy biBhdHRyczsKK30KIAogLyoKICAqIFZlcmlmeSB0aGF0IHRoZSB0dXBsZXMgdG8gYmUgcHJv ZHVjZWQgYnkgSU5TRVJUIG1hdGNoIHRoZQpAQCAtMjE5NywxNCArMjI1NiwxNyBAQCBFeGVj VXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKICAqLwog c3RhdGljIFRNX1Jlc3VsdAogRXhlY1VwZGF0ZUFjdChNb2RpZnlUYWJsZUNvbnRleHQgKmNv bnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkgIEl0ZW1Qb2ludGVy IHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0J CQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpCisJCQkgIEl0 ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3Qg Km9sZFNsb3QsCisJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGNhblNldFRhZywg VXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0KQogewogCUVTdGF0ZQkgICAqZXN0YXRlID0gY29u dGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3VsdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlib29sCQlwYXJ0aXRpb25fY29uc3RyYWludF9m YWlsZWQ7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCS8qIFRoZSBzZXQgb2YgbW9kaWZpZWQg aW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgdHJpZ2dlciBuZXcgaW5kZXggZW50cmllcyAqLwor CUJpdG1hcHNldCAgKm1vZGlmaWVkX2lkeF9hdHRycyA9IE5VTEw7CisKIAl1cGRhdGVDeHQt PmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTIzMjEsNyArMjM4MywxNiBA QCBscmVwbGFjZToKIAkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVz dGF0ZSk7CiAKIAkvKgotCSAqIHJlcGxhY2UgdGhlIGhlYXAgdHVwbGUKKwkgKiBOZXh0IHVw IHdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIHNldCBvZiBpbmRleGVkIGF0dHJpYnV0ZXMgdGhh dCBoYXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZSBhbmQgc2hvdWxkIHRyaWdnZXIgYSBuZXcg aW5kZXggdHVwbGUuICBXZSBjb3VsZCBzdGFydAorCSAqIHdpdGggdGhlIHNldCBvZiB1cGRh dGVkIGNvbHVtbnMgdmlhIEV4ZWNHZXRVcGRhdGVkQ29scygpLCBidXQgaWYgd2UgZG8KKwkg KiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJpYnV0ZXMgZGlyZWN0bHkgbW9kaWZpZWQgYnkgaGVh cF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNoIGFyZSBub3Qga25vd24gdG8gRXhlY0dldFVw ZGF0ZWRDb2xzKCkuCisJICovCisJbW9kaWZpZWRfaWR4X2F0dHJzID0gRXhlY1VwZGF0ZU1v ZGlmaWVkSWR4QXR0cnMocmVzdWx0UmVsSW5mbywgb2xkU2xvdCwgc2xvdCk7CisKKwkvKgor CSAqIENhbGwgaW50byB0aGUgdGFibGUgQU0gdG8gdXBkYXRlIHRoZSBoZWFwIHR1cGxlLgog CSAqCiAJICogTm90ZTogaWYgZXNfY3Jvc3NjaGVja19zbmFwc2hvdCBpc24ndCBJbnZhbGlk U25hcHNob3QsIHdlIGNoZWNrIHRoYXQKIAkgKiB0aGUgcm93IHRvIGJlIHVwZGF0ZWQgaXMg dmlzaWJsZSB0byB0aGF0IHNuYXBzaG90LCBhbmQgdGhyb3cgYQpAQCAtMjMzNSw2ICsyNDA2 LDcgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFwc2hv dCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJCQkJCQkmY29u dGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUsCisJCQkJCQkJCW1vZGlmaWVkX2lk eF9hdHRycywKIAkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyk7CiAKIAlyZXR1 cm4gcmVzdWx0OwpAQCAtMjU1Nyw4ICsyNjI5LDggQEAgRXhlY1VwZGF0ZShNb2RpZnlUYWJs ZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAq LwogcmVkb19hY3Q6CiAJCWxvY2tlZHRpZCA9ICp0dXBsZWlkOwotCQlyZXN1bHQgPSBFeGVj VXBkYXRlQWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9sZHR1cGxlLCBz bG90LAotCQkJCQkJCSAgIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CisJCXJlc3VsdCA9IEV4 ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUs IG9sZFNsb3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKIAog CQkvKgogCQkgKiBJZiBFeGVjVXBkYXRlQWN0IHJlcG9ydHMgdGhhdCBhIGNyb3NzLXBhcnRp dGlvbiB1cGRhdGUgd2FzIGRvbmUsCkBAIC0zNDA4LDggKzM0ODAsOCBAQCBsbWVyZ2VfbWF0 Y2hlZDoKIAkJCQkJQXNzZXJ0KG9sZHR1cGxlID09IE5VTEwpOwogCiAJCQkJCXJlc3VsdCA9 IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwKLQkJCQkJ CQkJCQkgICBOVUxMLCBuZXdzbG90LCBjYW5TZXRUYWcsCi0JCQkJCQkJCQkJICAgJnVwZGF0 ZUN4dCk7CisJCQkJCQkJCQkJICAgTlVMTCwgcmVzdWx0UmVsSW5mby0+cmlfb2xkVHVwbGVT bG90LAorCQkJCQkJCQkJCSAgIG5ld3Nsb3QsIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CiAK IAkJCQkJLyoKIAkJCQkJICogQXMgaW4gRXhlY1VwZGF0ZSgpLCBpZiBFeGVjVXBkYXRlQWN0 KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTQ1NDYsNyArNDYxOCw3IEBAIEV4ZWNNb2RpZnlUYWJs ZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogRm9yIFVQREFURS9ERUxFVEUvTUVSR0UsIGZl dGNoIHRoZSByb3cgaWRlbnRpdHkgaW5mbyBmb3IgdGhlIHR1cGxlCiAJCSAqIHRvIGJlIHVw ZGF0ZWQvZGVsZXRlZC9tZXJnZWQuICBGb3IgYSBoZWFwIHJlbGF0aW9uLCB0aGF0J3MgYSBU SUQ7CiAJCSAqIG90aGVyd2lzZSB3ZSBtYXkgaGF2ZSBhIHdob2xlcm93IGp1bmsgYXR0ciB0 aGF0IGNhcnJpZXMgdGhlIG9sZAotCQkgKiB0dXBsZSBpbiB0b3RvLiAgS2VlcCB0aGlzIGlu IHN0ZXAgd2l0aCB0aGUgcGFydCBvZgorCQkgKiB0dXBsZSBpbiB0b3RhbC4gIEtlZXAgdGhp cyBpbiBzdGVwIHdpdGggdGhlIHBhcnQgb2YKIAkJICogRXhlY0luaXRNb2RpZnlUYWJsZSB0 aGF0IHNldHMgdXAgcmlfUm93SWRBdHROby4KIAkJICovCiAJCWlmIChvcGVyYXRpb24gPT0g Q01EX1VQREFURSB8fCBvcGVyYXRpb24gPT0gQ01EX0RFTEVURSB8fApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggM2E0ZjE5ZThkNTguLmYyYjdmYjhmNDQ0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTI0NjksNyArMjQ2OSw3IEBAIFJl bGF0aW9uRGVzdHJveVJlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBib29sIHJlbWVtYmVy X3R1cGRlc2MpCiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2tleWF0dHIpOwogCWJtc19mcmVl KHJlbGF0aW9uLT5yZF9wa2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIp OwotCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOworCWJtc19mcmVl KHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX3N1 bW1hcml6ZWRhdHRyKTsKIAlpZiAocmVsYXRpb24tPnJkX3B1YmRlc2MpCiAJCXBmcmVlKHJl bGF0aW9uLT5yZF9wdWJkZXNjKTsKQEAgLTUyNzEsOCArNTI3MSw4IEBAIFJlbGF0aW9uR2V0 SW5kZXhQcmVkaWNhdGUoUmVsYXRpb24gcmVsYXRpb24pCiAgKgkJCQkJCQkJCShiZXdhcmU6 IGV2ZW4gaWYgUEsgaXMgZGVmZXJyYWJsZSEpCiAgKglJTkRFWF9BVFRSX0JJVE1BUF9JREVO VElUWV9LRVkJQ29sdW1ucyBpbiB0aGUgdGFibGUncyByZXBsaWNhIGlkZW50aXR5CiAgKgkJ CQkJCQkJCWluZGV4IChlbXB0eSBpZiBGVUxMKQotICoJSU5ERVhfQVRUUl9CSVRNQVBfSE9U X0JMT0NLSU5HCUNvbHVtbnMgdGhhdCBibG9jayB1cGRhdGVzIGZyb20gYmVpbmcgSE9UCi0g KglJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVECUNvbHVtbnMgaW5jbHVkZWQgaW4gc3Vt bWFyaXppbmcgaW5kZXhlcworICoJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRAkJQ29sdW1u cyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUkla RUQJQ29sdW1ucyBvbmx5IGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKICAqCiAg KiBBdHRyaWJ1dGUgbnVtYmVycyBhcmUgb2Zmc2V0IGJ5IEZpcnN0TG93SW52YWxpZEhlYXBB dHRyaWJ1dGVOdW1iZXIgc28gdGhhdAogICogd2UgY2FuIGluY2x1ZGUgc3lzdGVtIGF0dHJp YnV0ZXMgKGUuZy4sIE9JRCkgaW4gdGhlIGJpdG1hcCByZXByZXNlbnRhdGlvbi4KQEAgLTUy OTUsOCArNTI5NSw4IEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJl bGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCUJpdG1hcHNldCAgKnVp bmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHVuaXF1ZSBpbmRleGVzICovCiAJQml0bWFwc2V0 ICAqcGtpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSBwcmltYXJ5IGluZGV4ICovCiAJ Qml0bWFwc2V0ICAqaWRpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSByZXBsaWNhIGlk ZW50aXR5ICovCi0JQml0bWFwc2V0ICAqaG90YmxvY2tpbmdhdHRyczsJLyogY29sdW1ucyB3 aXRoIEhPVCBibG9ja2luZyBpbmRleGVzICovCi0JQml0bWFwc2V0ICAqc3VtbWFyaXplZGF0 dHJzOwkvKiBjb2x1bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNl dCAgKmluZGV4ZWRhdHRyczsJLyogY29sdW1ucyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8K KwlCaXRtYXBzZXQgICpzdW1tYXJpemVkYXR0cnM7CS8qIGNvbHVtbnMgb25seSBpbiBzdW1t YXJpemluZyBpbmRleGVzICovCiAJTGlzdAkgICAqaW5kZXhvaWRsaXN0OwogCUxpc3QJICAg Km5ld2luZGV4b2lkbGlzdDsKIAlPaWQJCQlyZWxwa2luZGV4OwpAQCAtNTMxNSw4ICs1MzE1 LDggQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRpb24gcmVsYXRpb24sIElu ZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0 aW9uLT5yZF9wa2F0dHIpOwogCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9L RVk6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pZGF0dHIpOwotCQkJY2Fz ZSBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkc6Ci0JCQkJcmV0dXJuIGJtc19jb3B5 KHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOworCQkJY2FzZSBJTkRFWF9BVFRSX0JJ VE1BUF9JTkRFWEVEOgorCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaW5kZXhl ZGF0dHIpOwogCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJCXJl dHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOwogCQkJZGVmYXVs dDoKQEAgLTUzNjEsNyArNTM2MSw3IEBAIHJlc3RhcnQ6CiAJdWluZGV4YXR0cnMgPSBOVUxM OwogCXBraW5kZXhhdHRycyA9IE5VTEw7CiAJaWRpbmRleGF0dHJzID0gTlVMTDsKLQlob3Ri bG9ja2luZ2F0dHJzID0gTlVMTDsKKwlpbmRleGVkYXR0cnMgPSBOVUxMOwogCXN1bW1hcml6 ZWRhdHRycyA9IE5VTEw7CiAJZm9yZWFjaChsLCBpbmRleG9pZGxpc3QpCiAJewpAQCAtNTQy MSw3ICs1NDIxLDcgQEAgcmVzdGFydDoKIAkJaWYgKGluZGV4RGVzYy0+cmRfaW5kYW0tPmFt c3VtbWFyaXppbmcpCiAJCQlhdHRycyA9ICZzdW1tYXJpemVkYXR0cnM7CiAJCWVsc2UKLQkJ CWF0dHJzID0gJmhvdGJsb2NraW5nYXR0cnM7CisJCQlhdHRycyA9ICZpbmRleGVkYXR0cnM7 CiAKIAkJLyogQ29sbGVjdCBzaW1wbGUgYXR0cmlidXRlIHJlZmVyZW5jZXMgKi8KIAkJZm9y IChpID0gMDsgaSA8IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5hdHRzOyBpKyspCkBAIC01 NDMwLDkgKzU0MzAsOSBAQCByZXN0YXJ0OgogCiAJCQkvKgogCQkJICogU2luY2Ugd2UgaGF2 ZSBjb3ZlcmluZyBpbmRleGVzIHdpdGggbm9uLWtleSBjb2x1bW5zLCB3ZSBtdXN0Ci0JCQkg KiBoYW5kbGUgdGhlbSBhY2N1cmF0ZWx5IGhlcmUuIG5vbi1rZXkgY29sdW1ucyBtdXN0IGJl IGFkZGVkIGludG8KLQkJCSAqIGhvdGJsb2NraW5nYXR0cnMgb3Igc3VtbWFyaXplZGF0dHJz LCBzaW5jZSB0aGV5IGFyZSBpbiBpbmRleCwKLQkJCSAqIGFuZCB1cGRhdGUgc2hvdWxkbid0 IG1pc3MgdGhlbS4KKwkJCSAqIGhhbmRsZSB0aGVtIGFjY3VyYXRlbHkgaGVyZS4gTm9uLWtl eSBjb2x1bW5zIG11c3QgYmUgYWRkZWQgaW50bworCQkJICogaW5kZXhlZGF0dHJzIG9yIHN1 bW1hcml6ZWRhdHRycywgc2luY2UgdGhleSBhcmUgaW4gaW5kZXgsIGFuZAorCQkJICogdXBk YXRlIHNob3VsZG4ndCBtaXNzIHRoZW0uCiAJCQkgKgogCQkJICogU3VtbWFyaXppbmcgaW5k ZXhlcyBkbyBub3QgYmxvY2sgSE9ULCBidXQgZG8gbmVlZCB0byBiZSB1cGRhdGVkCiAJCQkg KiB3aGVuIHRoZSBjb2x1bW4gdmFsdWUgY2hhbmdlcywgdGh1cyByZXF1aXJlIGEgc2VwYXJh dGUKQEAgLTU0OTMsMTIgKzU0OTMsMjAgQEAgcmVzdGFydDoKIAkJYm1zX2ZyZWUodWluZGV4 YXR0cnMpOwogCQlibXNfZnJlZShwa2luZGV4YXR0cnMpOwogCQlibXNfZnJlZShpZGluZGV4 YXR0cnMpOwotCQlibXNfZnJlZShob3RibG9ja2luZ2F0dHJzKTsKKwkJYm1zX2ZyZWUoaW5k ZXhlZGF0dHJzKTsKIAkJYm1zX2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKIAogCQlnb3RvIHJl c3RhcnQ7CiAJfQogCisJLyoKKwkgKiBSZWNvcmQgd2hhdCBhdHRyaWJ1dGVzIGFyZSBvbmx5 IHJlZmVyZW5jZWQgYnkgc3VtbWFyaXppbmcgaW5kZXhlcy4gVGhlbgorCSAqIGFkZCB0aGF0 IGludG8gdGhlIG90aGVyIGluZGV4ZWQgYXR0cmlidXRlcyB0byB0cmFjayBhbGwgcmVmZXJl bmNlZAorCSAqIGF0dHJpYnV0ZXMuCisJICovCisJc3VtbWFyaXplZGF0dHJzID0gYm1zX2Rl bF9tZW1iZXJzKHN1bW1hcml6ZWRhdHRycywgaW5kZXhlZGF0dHJzKTsKKwlpbmRleGVkYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoaW5kZXhlZGF0dHJzLCBzdW1tYXJpemVkYXR0cnMpOwor CiAJLyogRG9uJ3QgbGVhayB0aGUgb2xkIHZhbHVlcyBvZiB0aGVzZSBiaXRtYXBzLCBpZiBh bnkgKi8KIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IGZhbHNlOwogCWJtc19mcmVlKHJl bGF0aW9uLT5yZF9rZXlhdHRyKTsKQEAgLTU1MDcsOCArNTUxNSw4IEBAIHJlc3RhcnQ6CiAJ cmVsYXRpb24tPnJkX3BrYXR0ciA9IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2lk YXR0cik7CiAJcmVsYXRpb24tPnJkX2lkYXR0ciA9IE5VTEw7Ci0JYm1zX2ZyZWUocmVsYXRp b24tPnJkX2hvdGJsb2NraW5nYXR0cik7Ci0JcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0 ciA9IE5VTEw7CisJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyKTsKKwlyZWxh dGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9z dW1tYXJpemVkYXR0cik7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gTlVMTDsK IApAQCAtNTUyMyw3ICs1NTMxLDcgQEAgcmVzdGFydDoKIAlyZWxhdGlvbi0+cmRfa2V5YXR0 ciA9IGJtc19jb3B5KHVpbmRleGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfcGthdHRyID0gYm1z X2NvcHkocGtpbmRleGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfaWRhdHRyID0gYm1zX2NvcHko aWRpbmRleGF0dHJzKTsKLQlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyID0gYm1zX2Nv cHkoaG90YmxvY2tpbmdhdHRycyk7CisJcmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0gYm1z X2NvcHkoaW5kZXhlZGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBi bXNfY29weShzdW1tYXJpemVkYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9hdHRyc3ZhbGlkID0g dHJ1ZTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKQEAgLTU1MzcsOCArNTU0 NSw4IEBAIHJlc3RhcnQ6CiAJCQlyZXR1cm4gcGtpbmRleGF0dHJzOwogCQljYXNlIElOREVY X0FUVFJfQklUTUFQX0lERU5USVRZX0tFWToKIAkJCXJldHVybiBpZGluZGV4YXR0cnM7Ci0J CWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HOgotCQkJcmV0dXJuIGhvdGJs b2NraW5nYXR0cnM7CisJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKKwkJCXJl dHVybiBpbmRleGVkYXR0cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpF RDoKIAkJCXJldHVybiBzdW1tYXJpemVkYXR0cnM7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKaW5kZXggMzA1ZWNjMzFhOWUuLjMxYTY4OGNmMDViIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCkBAIC00MDMsMTAgKzQwMyw5IEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUo UmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogZXh0ZXJu IHZvaWQgaGVhcF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3Vs YXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsK IGV4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKLQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJ CQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAot CQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUs Ci0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkg SGVhcFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywg Ym9vbCB3YWl0LAorCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgY29uc3QgTG9ja1R1 cGxlTW9kZSBsb2NrbW9kZSwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptb2RpZmllZF9p ZHhfYXR0cnMsIGNvbnN0IGJvb2wgaG90X2FsbG93ZWQpOwogZXh0ZXJuIFRNX1Jlc3VsdCBo ZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJ CQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xp Y3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtNDY5 LDYgKzQ2OCwxMiBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJl bGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1i ZXIgKmRlYWQsIGludCBuZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQs IGludCBudW51c2VkKTsKIAorLyogaW4gaGVhcC9oZWFwYW0uYyAqLworZXh0ZXJuIGJvb2wg SGVhcFVwZGF0ZUhvdEFsbG93YWJsZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgQml0bWFw c2V0ICptb2RpZmllZF9pZHhfYXR0cnMsCisJCQkJCQkJCSAgIGJvb2wgKnN1bW1hcml6ZWRf b25seSk7CitleHRlcm4gTG9ja1R1cGxlTW9kZSBIZWFwVXBkYXRlRGV0ZXJtaW5lTG9ja21v ZGUoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICpt b2RpZmllZF9pZHhfYXR0cnMpOworCiAvKiBpbiBoZWFwL3ZhY3V1bWxhenkuYyAqLwogZXh0 ZXJuIHZvaWQgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQljb25zdCBW YWN1dW1QYXJhbXMgcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMDYwODQ3NTIyNDUuLjhlYzIwZGNmYzExIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmgKQEAgLTU0OSw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBU YWJsZUFtUm91dGluZQogCQkJCQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJCQkgVE1fRmFpbHVy ZURhdGEgKnRtZmQsCiAJCQkJCQkJCSBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJ CQkJIGNvbnN0IEJpdG1hcHNldCAqbW9kaWZpZWRfaWR4X2F0dHJzLAogCQkJCQkJCQkgVFVf VXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAJLyogc2VlIHRhYmxlX3R1cGxl X2xvY2soKSBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KQEAgLTE1MjMsMTIg KzE1MjQsMTIgQEAgc3RhdGljIGlubGluZSBUTV9SZXN1bHQKIHRhYmxlX3R1cGxlX3VwZGF0 ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90 LAogCQkJCSAgIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IHNuYXBzaG90LCBTbmFwc2hvdCBj cm9zc2NoZWNrLAogCQkJCSAgIGJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExv Y2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKQorCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqbW9kaWZpZWRfaWR4X2F0dHJz LCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlyZXR1cm4gcmVsLT5y ZF90YWJsZWFtLT50dXBsZV91cGRhdGUocmVsLCBvdGlkLCBzbG90LAogCQkJCQkJCQkJCSBj aWQsIHNuYXBzaG90LCBjcm9zc2NoZWNrLAotCQkJCQkJCQkJCSB3YWl0LCB0bWZkLAotCQkJ CQkJCQkJCSBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkJCSB3YWl0LCB0 bWZkLCBsb2NrbW9kZSwKKwkJCQkJCQkJCQkgbW9kaWZpZWRfaWR4X2F0dHJzLCB1cGRhdGVf aW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDA5LDYgKzIwMTAsNyBAQCBleHRlcm4gdm9pZCBz aW1wbGVfdGFibGVfdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlk LAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCk7CiBleHRlcm4gdm9pZCBzaW1wbGVf dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJ CQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJ CQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1vZGlmaWVkX2lkeF9hdHRycywKIAkJCQkJCQkJ CSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oCmluZGV4IDA3ZjRiMWY3NDkwLi5kMjk0Nzg5YzQ0MSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiZGF0YXR5 cGUvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNs dWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAi bm9kZXMvbG9ja29wdGlvbnMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTYxMCw2ICs2MTEsMTAgQEAgZXh0ZXJu IFR1cGxlRGVzYyBFeGVjQ2xlYW5UeXBlRnJvbVRMKExpc3QgKnRhcmdldExpc3QpOwogZXh0 ZXJuIFR1cGxlRGVzYyBFeGVjVHlwZUZyb21FeHByTGlzdChMaXN0ICpleHByTGlzdCk7CiBl eHRlcm4gdm9pZCBFeGVjVHlwZVNldENvbE5hbWVzKFR1cGxlRGVzYyB0eXBlSW5mbywgTGlz dCAqbmFtZXNMaXN0KTsKIGV4dGVybiB2b2lkIFVwZGF0ZUNoYW5nZWRQYXJhbVNldChQbGFu U3RhdGUgKm5vZGUsIEJpdG1hcHNldCAqbmV3Y2hnKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4 ZWNDb21wYXJlU2xvdEF0dHJzKEJpdG1hcHNldCAqYXR0cnMsCisJCQkJCQkJCQkgICBUdXBs ZURlc2MgdHVwZGVzYywKKwkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAor CQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKm5ld190dHMpOwogCiB0eXBlZGVmIHN0cnVj dCBUdXBPdXRwdXRTdGF0ZQogewpAQCAtODA3LDUgKzgxMiw4IEBAIGV4dGVybiBSZXN1bHRS ZWxJbmZvICpFeGVjTG9va3VwUmVzdWx0UmVsQnlPaWQoTW9kaWZ5VGFibGVTdGF0ZSAqbm9k ZSwKIAkJCQkJCQkJCQkJICAgT2lkIHJlc3VsdG9pZCwKIAkJCQkJCQkJCQkJICAgYm9vbCBt aXNzaW5nX29rLAogCQkJCQkJCQkJCQkgICBib29sIHVwZGF0ZV9jYWNoZSk7CitleHRlcm4g Qml0bWFwc2V0ICpFeGVjVXBkYXRlTW9kaWZpZWRJZHhBdHRycyhSZXN1bHRSZWxJbmZvICpy ZWxpbmZvLAorCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cyk7CiAKICNlbmRpZgkJCQkJCQkvKiBFWEVD VVRPUl9IICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaAppbmRleCAyMzY4MzBmNmI5My4uMTE0NjBlMTM0ZjAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCkBAIC0xNjIsNyArMTYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25E YXRhCiAJQml0bWFwc2V0ICAqcmRfa2V5YXR0cjsJCS8qIGNvbHMgdGhhdCBjYW4gYmUgcmVm J2QgYnkgZm9yZWlnbiBrZXlzICovCiAJQml0bWFwc2V0ICAqcmRfcGthdHRyOwkJLyogY29s cyBpbmNsdWRlZCBpbiBwcmltYXJ5IGtleSAqLwogCUJpdG1hcHNldCAgKnJkX2lkYXR0cjsJ CS8qIGluY2x1ZGVkIGluIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggKi8KLQlCaXRtYXBzZXQg ICpyZF9ob3RibG9ja2luZ2F0dHI7IC8qIGNvbHMgYmxvY2tpbmcgSE9UIHVwZGF0ZSAqLwor CUJpdG1hcHNldCAgKnJkX2luZGV4ZWRhdHRyOyAvKiBhbGwgY29scyByZWZlcmVuY2VkIGJ5 IGluZGV4ZXMgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29scyBp bmRleGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KIAogCVB1YmxpY2F0aW9uRGVzYyAq cmRfcHViZGVzYzsJLyogcHVibGljYXRpb24gZGVzY3JpcHRvciwgb3IgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbGNhY2hlLmgKaW5kZXggMjcwMDIyNDkzOWEuLmQ0ZGI4MjQ5NmI0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbGNhY2hlLmgKQEAgLTY5LDcgKzY5LDcgQEAgdHlwZWRlZiBlbnVtIEluZGV4QXR0 ckJpdG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9LRVksCiAJSU5ERVhfQVRUUl9CSVRN QVBfUFJJTUFSWV9LRVksCiAJSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZLAotCUlO REVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORywKKwlJTkRFWF9BVFRSX0JJVE1BUF9JTkRF WEVELAogCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQsCiB9IEluZGV4QXR0ckJpdG1h cEtpbmQ7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cy9leHBlY3RlZC9zeXNjYWNoZS11cGRhdGUtcHJ1bmVkLm91dCBiL3NyYy90ZXN0L21vZHVs ZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9zeXNjYWNoZS11cGRhdGUtcHJ1bmVkLm91 dAppbmRleCBhNmE0ZThkYjk5Ni4uMDdlZjY3YTFlYjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9zeXNjYWNoZS11cGRhdGUtcHJ1 bmVkLm91dAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0 ZWQvc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5vdXQKQEAgLTE2LDggKzE2LDggQEAgc3RlcCB3 YWtlaW52YWw0Ogogc3RlcCBhdDI6IDwuLi4gY29tcGxldGVkPgogc3RlcCB3YWtlaW52YWw0 OiA8Li4uIGNvbXBsZXRlZD4KIHN0ZXAgd2FrZWdyYW50NDogCi0JU0VMRUNUIEZST00gaW5q ZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfdXBkYXRlLWJlZm9yZS1waW4nKTsKLQlTRUxF Q1QgRlJPTSBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnaGVhcF91cGRhdGUtYmVmb3JlLXBp bicpOworCVNFTEVDVCBGUk9NIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdzaW1wbGVfaGVh cF91cGRhdGUtYmVmb3JlLXBpbicpOworCVNFTEVDVCBGUk9NIGluamVjdGlvbl9wb2ludHNf d2FrZXVwKCdzaW1wbGVfaGVhcF91cGRhdGUtYmVmb3JlLXBpbicpOwogIDx3YWl0aW5nIC4u Lj4KIHN0ZXAgZ3JhbnQxOiA8Li4uIGNvbXBsZXRlZD4KIEVSUk9SOiAgdHVwbGUgY29uY3Vy cmVudGx5IGRlbGV0ZWQKQEAgLTQyLDggKzQyLDggQEAgc3RlcCBta3JlbHM0OgogCVNFTEVD VCBGUk9NIHZhY3Rlc3QubWtyZWxzKCdpbnRydWRlcicsIDEsIDEwMCk7ICAtLSByZXBvcHVs YXRlIExQX1VOVVNFRAogCiBzdGVwIHdha2VncmFudDQ6IAotCVNFTEVDVCBGUk9NIGluamVj dGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwX3VwZGF0ZS1iZWZvcmUtcGluJyk7Ci0JU0VMRUNU IEZST00gaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ2hlYXBfdXBkYXRlLWJlZm9yZS1waW4n KTsKKwlTRUxFQ1QgRlJPTSBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnc2ltcGxlX2hlYXBf dXBkYXRlLWJlZm9yZS1waW4nKTsKKwlTRUxFQ1QgRlJPTSBpbmplY3Rpb25fcG9pbnRzX3dh a2V1cCgnc2ltcGxlX2hlYXBfdXBkYXRlLWJlZm9yZS1waW4nKTsKICA8d2FpdGluZyAuLi4+ CiBzdGVwIGdyYW50MTogPC4uLiBjb21wbGV0ZWQ+CiBFUlJPUjogIGR1cGxpY2F0ZSBrZXkg dmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInBnX2NsYXNzX29pZF9pbmRleCIK QEAgLTcxLDggKzcxLDggQEAgc3RlcCBhdDI6IDwuLi4gY29tcGxldGVkPgogc3RlcCB3YWtl aW52YWw0OiA8Li4uIGNvbXBsZXRlZD4KIHN0ZXAgYXQ0OiBBTFRFUiBUQUJMRSB2YWN0ZXN0 LmNoaWxkNTAgSU5IRVJJVCB2YWN0ZXN0Lm9yaWc1MDsKIHN0ZXAgd2FrZWdyYW50NDogCi0J U0VMRUNUIEZST00gaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfdXBkYXRlLWJlZm9y ZS1waW4nKTsKLQlTRUxFQ1QgRlJPTSBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnaGVhcF91 cGRhdGUtYmVmb3JlLXBpbicpOworCVNFTEVDVCBGUk9NIGluamVjdGlvbl9wb2ludHNfZGV0 YWNoKCdzaW1wbGVfaGVhcF91cGRhdGUtYmVmb3JlLXBpbicpOworCVNFTEVDVCBGUk9NIGlu amVjdGlvbl9wb2ludHNfd2FrZXVwKCdzaW1wbGVfaGVhcF91cGRhdGUtYmVmb3JlLXBpbicp OwogIDx3YWl0aW5nIC4uLj4KIHN0ZXAgZ3JhbnQxOiA8Li4uIGNvbXBsZXRlZD4KIHN0ZXAg d2FrZWdyYW50NDogPC4uLiBjb21wbGV0ZWQ+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvc3BlY3Mvc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5zcGVj IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3N5c2NhY2hlLXVw ZGF0ZS1wcnVuZWQuc3BlYwppbmRleCBlM2E0Mjk1YmQxMi4uZmVmOWFjODk1YTEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9zeXNjYWNo ZS11cGRhdGUtcHJ1bmVkLnNwZWMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25f cG9pbnRzL3NwZWNzL3N5c2NhY2hlLXVwZGF0ZS1wcnVuZWQuc3BlYwpAQCAtMTAzLDcgKzEw Myw3IEBAIHNlc3Npb24gczEKIHNldHVwCXsKIAlTRVQgZGVidWdfZGlzY2FyZF9jYWNoZXMg PSAwOwogCVNFTEVDVCBGUk9NIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7Ci0JU0VM RUNUIEZST00gaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2hlYXBfdXBkYXRlLWJlZm9yZS1w aW4nLCAnd2FpdCcpOworCVNFTEVDVCBGUk9NIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdz aW1wbGVfaGVhcF91cGRhdGUtYmVmb3JlLXBpbicsICd3YWl0Jyk7CiB9CiBzdGVwIGNhY2hl ZmlsbDEJeyBTRUxFQ1QgRlJPTSB2YWN0ZXN0LnJlbG9pZF9jYXRjYWNoZV9zZXQoJ3ZhY3Rl c3Qub3JpZzUwJyk7IH0KIHN0ZXAgZ3JhbnQxCXsgR1JBTlQgU0VMRUNUIE9OIHZhY3Rlc3Qu b3JpZzUwIFRPIFBVQkxJQzsgfQpAQCAtMTQwLDggKzE0MCw4IEBAIHN0ZXAgbWtyZWxzNAl7 CiAJU0VMRUNUIEZST00gdmFjdGVzdC5ta3JlbHMoJ2ludHJ1ZGVyJywgMSwgMTAwKTsgIC0t IHJlcG9wdWxhdGUgTFBfVU5VU0VECiB9CiBzdGVwIHdha2VncmFudDQJewotCVNFTEVDVCBG Uk9NIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwX3VwZGF0ZS1iZWZvcmUtcGluJyk7 Ci0JU0VMRUNUIEZST00gaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ2hlYXBfdXBkYXRlLWJl Zm9yZS1waW4nKTsKKwlTRUxFQ1QgRlJPTSBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnc2lt cGxlX2hlYXBfdXBkYXRlLWJlZm9yZS1waW4nKTsKKwlTRUxFQ1QgRlJPTSBpbmplY3Rpb25f cG9pbnRzX3dha2V1cCgnc2ltcGxlX2hlYXBfdXBkYXRlLWJlZm9yZS1waW4nKTsKIH0KIHN0 ZXAgYXQ0CXsgQUxURVIgVEFCTEUgdmFjdGVzdC5jaGlsZDUwIElOSEVSSVQgdmFjdGVzdC5v cmlnNTA7IH0KIHN0ZXAgd2FrZWludmFsNAl7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CmluZGV4IDZkYWI2MGM5MzdiLi43ZWJi Nzg5MGQ5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0 ZWRfdmlydHVhbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0 ZWRfdmlydHVhbC5vdXQKQEAgLTI4Nyw3ICsyODcsNyBAQCBERVRBSUw6ICBDb2x1bW4gImIi IGlzIGEgZ2VuZXJhdGVkIGNvbHVtbi4KIElOU0VSVCBJTlRPIGd0ZXN0MXYgVkFMVUVTICg4 LCBERUZBVUxUKSwgKDksIERFRkFVTFQpOyAgLS0gZXJyb3IKIEVSUk9SOiAgY2Fubm90IGlu c2VydCBhIG5vbi1ERUZBVUxUIHZhbHVlIGludG8gY29sdW1uICJiIgogREVUQUlMOiAgQ29s dW1uICJiIiBpcyBhIGdlbmVyYXRlZCBjb2x1bW4uCi1TRUxFQ1QgKiBGUk9NIGd0ZXN0MXY7 CitTRUxFQ1QgKiBGUk9NIGd0ZXN0MXYgT1JERVIgQlkgYTsKICBhIHwgYiAgCiAtLS0rLS0t LQogIDMgfCAgNgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90cmln Z2Vycy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyaWdnZXJzLm91dAppbmRl eCA5OGRlZTYzYjUwYS4uZWY5OGZkMGNjY2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdHJpZ2dlcnMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdHJpZ2dlcnMub3V0CkBAIC05NTksMTYgKzk1OSwyNCBAQCBOT1RJQ0U6ICBtYWluX3Zp ZXcgQkVGT1JFIFVQREFURSBTVEFURU1FTlQgKGJlZm9yZV92aWV3X3VwZF9zdG10KQogTk9U SUNFOiAgbWFpbl92aWV3IEFGVEVSIFVQREFURSBTVEFURU1FTlQgKGFmdGVyX3ZpZXdfdXBk X3N0bXQpCiBVUERBVEUgMAogLS0gRGVsZXRlIGZyb20gdmlldyB1c2luZyB0cmlnZ2VyCi1E RUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSBJTiAoMjAsMjEpOworREVMRVRFIEZST00g bWFpbl92aWV3IFdIRVJFIGEgPSAyMCBBTkQgYiA9IDMxOwogTk9USUNFOiAgbWFpbl92aWV3 IEJFRk9SRSBERUxFVEUgU1RBVEVNRU5UIChiZWZvcmVfdmlld19kZWxfc3RtdCkKIE5PVElD RTogIG1haW5fdmlldyBJTlNURUFEIE9GIERFTEVURSBST1cgKGluc3RlYWRfb2ZfZGVsKQot Tk9USUNFOiAgT0xEOiAoMjEsMTApCi1OT1RJQ0U6ICBtYWluX3ZpZXcgSU5TVEVBRCBPRiBE RUxFVEUgUk9XIChpbnN0ZWFkX29mX2RlbCkKIE5PVElDRTogIE9MRDogKDIwLDMxKQorTk9U SUNFOiAgbWFpbl92aWV3IEFGVEVSIERFTEVURSBTVEFURU1FTlQgKGFmdGVyX3ZpZXdfZGVs X3N0bXQpCitERUxFVEUgMQorREVMRVRFIEZST00gbWFpbl92aWV3IFdIRVJFIGEgPSAyMSBB TkQgYiA9IDEwOworTk9USUNFOiAgbWFpbl92aWV3IEJFRk9SRSBERUxFVEUgU1RBVEVNRU5U IChiZWZvcmVfdmlld19kZWxfc3RtdCkKK05PVElDRTogIG1haW5fdmlldyBJTlNURUFEIE9G IERFTEVURSBST1cgKGluc3RlYWRfb2ZfZGVsKQorTk9USUNFOiAgT0xEOiAoMjEsMTApCitO T1RJQ0U6ICBtYWluX3ZpZXcgQUZURVIgREVMRVRFIFNUQVRFTUVOVCAoYWZ0ZXJfdmlld19k ZWxfc3RtdCkKK0RFTEVURSAxCitERUxFVEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSA9IDIx IEFORCBiID0gMzI7CitOT1RJQ0U6ICBtYWluX3ZpZXcgQkVGT1JFIERFTEVURSBTVEFURU1F TlQgKGJlZm9yZV92aWV3X2RlbF9zdG10KQogTk9USUNFOiAgbWFpbl92aWV3IElOU1RFQUQg T0YgREVMRVRFIFJPVyAoaW5zdGVhZF9vZl9kZWwpCiBOT1RJQ0U6ICBPTEQ6ICgyMSwzMikK IE5PVElDRTogIG1haW5fdmlldyBBRlRFUiBERUxFVEUgU1RBVEVNRU5UIChhZnRlcl92aWV3 X2RlbF9zdG10KQotREVMRVRFIDMKK0RFTEVURSAxCiBERUxFVEUgRlJPTSBtYWluX3ZpZXcg V0hFUkUgYSA9IDMxIFJFVFVSTklORyBhLCBiOwogTk9USUNFOiAgbWFpbl92aWV3IEJFRk9S RSBERUxFVEUgU1RBVEVNRU5UIChiZWZvcmVfdmlld19kZWxfc3RtdCkKIE5PVElDRTogIG1h aW5fdmlldyBJTlNURUFEIE9GIERFTEVURSBST1cgKGluc3RlYWRfb2ZfZGVsKQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90c2VhcmNoLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQKaW5kZXggOTI4N2M0NDA3MDkuLmM2MDRl YzM1ZmE1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RzZWFyY2gu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQKQEAgLTI0 ODMsNyArMjQ4Myw4IEBAIFNFTEVDVCB0b190c3F1ZXJ5KCdTS0lFUyAmIE15IHwgYm9vS3Mn KTsKICAnc2t5JyB8ICdib29rJwogKDEgcm93KQogCi0tLXRyaWdnZXIKKy0tIHRzdmVjdG9y X3VwZGF0ZV90cmlnZ2VyKCkgdXNlcyBoZWFwX21vZGlmeV90dXBsZSgpIHRvIHNldCBjb2x1 bW4gJ2EnCistLSB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGV4ZWN1dG9yJ3MgU0VULWNs YXVzZSB0cmFja2luZy4KIENSRUFURSBUUklHR0VSIHRzdmVjdG9ydXBkYXRlCiBCRUZPUkUg VVBEQVRFIE9SIElOU0VSVCBPTiB0ZXN0X3RzdmVjdG9yCiBGT1IgRUFDSCBST1cgRVhFQ1VU RSBQUk9DRURVUkUgdHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXIoYSwgJ3BnX2NhdGFsb2cuZW5n bGlzaCcsIHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRh dGFibGVfdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRhdGFibGVf dmlld3Mub3V0CmluZGV4IDljZWE1MzhiOGU4Li40ODc3YTFkZGNlOSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRhdGFibGVfdmlld3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dApAQCAtMzcyLDE1 ICszNzIsMTUgQEAgSU5TRVJUIElOVE8gcndfdmlldzE2IChhLCBiKSBWQUxVRVMgKDMsICdS b3cgMycpOyAtLSBzaG91bGQgYmUgT0sKIFVQREFURSByd192aWV3MTYgU0VUIGE9MywgYWE9 LTMgV0hFUkUgYT0zOyAtLSBzaG91bGQgZmFpbAogRVJST1I6ICBtdWx0aXBsZSBhc3NpZ25t ZW50cyB0byBzYW1lIGNvbHVtbiAiYSIKIFVQREFURSByd192aWV3MTYgU0VUIGFhPS0zIFdI RVJFIGE9MzsgLS0gc2hvdWxkIGJlIE9LCi1TRUxFQ1QgKiBGUk9NIGJhc2VfdGJsOworU0VM RUNUICogRlJPTSBiYXNlX3RibCBPUkRFUiBCWSBhOwogIGEgIHwgICBiICAgIAogLS0tLSst LS0tLS0tLQorIC0zIHwgUm93IDMKICAtMiB8IFJvdyAtMgogIC0xIHwgUm93IC0xCiAgIDAg fCBSb3cgMAogICAxIHwgUm93IDEKICAgMiB8IFJvdyAyCi0gLTMgfCBSb3cgMwogKDYgcm93 cykKIAogREVMRVRFIEZST00gcndfdmlldzE2IFdIRVJFIGE9LTM7IC0tIHNob3VsZCBiZSBP SwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4 IGU3NTA4NjZkMmQ4Li44NzcxNTJkNmQ2OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2dlbmVyYXRlZF92aXJ0dWFsLnNxbApAQCAtMTI3LDcgKzEyNyw3IEBAIEFMVEVSIFZJRVcg Z3Rlc3QxdiBBTFRFUiBDT0xVTU4gYiBTRVQgREVGQVVMVCAxMDA7CiBJTlNFUlQgSU5UTyBn dGVzdDF2IFZBTFVFUyAoOCwgREVGQVVMVCk7ICAtLSBlcnJvcgogSU5TRVJUIElOVE8gZ3Rl c3QxdiBWQUxVRVMgKDgsIERFRkFVTFQpLCAoOSwgREVGQVVMVCk7ICAtLSBlcnJvcgogCi1T RUxFQ1QgKiBGUk9NIGd0ZXN0MXY7CitTRUxFQ1QgKiBGUk9NIGd0ZXN0MXYgT1JERVIgQlkg YTsKIERFTEVURSBGUk9NIGd0ZXN0MXYgV0hFUkUgYSA+PSA1OwogRFJPUCBWSUVXIGd0ZXN0 MXY7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJzLnNxbAppbmRleCBlYTM5ODE3ZWUzZC4u NmNlYjYxNjA4YWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyaWdnZXJz LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmlnZ2Vycy5zcWwKQEAgLTY2MCw3 ICs2NjAsOSBAQCBVUERBVEUgbWFpbl92aWV3IFNFVCBiID0gMzIgV0hFUkUgYSA9IDIxIEFO RCBiID0gMzEgUkVUVVJOSU5HIGEsIGI7CiBVUERBVEUgbWFpbl92aWV3IFNFVCBiID0gMCBX SEVSRSBmYWxzZTsKIAogLS0gRGVsZXRlIGZyb20gdmlldyB1c2luZyB0cmlnZ2VyCi1ERUxF VEUgRlJPTSBtYWluX3ZpZXcgV0hFUkUgYSBJTiAoMjAsMjEpOworREVMRVRFIEZST00gbWFp bl92aWV3IFdIRVJFIGEgPSAyMCBBTkQgYiA9IDMxOworREVMRVRFIEZST00gbWFpbl92aWV3 IFdIRVJFIGEgPSAyMSBBTkQgYiA9IDEwOworREVMRVRFIEZST00gbWFpbl92aWV3IFdIRVJF IGEgPSAyMSBBTkQgYiA9IDMyOwogREVMRVRFIEZST00gbWFpbl92aWV3IFdIRVJFIGEgPSAz MSBSRVRVUk5JTkcgYSwgYjsKIAogXHNldCBRVUlFVCB0cnVlCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Rz ZWFyY2guc3FsCmluZGV4IGRjNzRhYTBjODg5Li43N2FjNWZkM2M1YSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdHNlYXJjaC5zcWwKQEAgLTc1Miw3ICs3NTIsOCBAQCBTRUxFQ1QgdG9fdHN2ZWN0 b3IoJ1NLSUVTIE15IGJvb0tzJyk7CiBTRUxFQ1QgcGxhaW50b190c3F1ZXJ5KCdTS0lFUyBN eSBib29LcycpOwogU0VMRUNUIHRvX3RzcXVlcnkoJ1NLSUVTICYgTXkgfCBib29LcycpOwog Ci0tLXRyaWdnZXIKKy0tIHRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKCkgdXNlcyBoZWFwX21v ZGlmeV90dXBsZSgpIHRvIHNldCBjb2x1bW4gJ2EnCistLSB3aXRob3V0IGdvaW5nIHRocm91 Z2ggdGhlIGV4ZWN1dG9yJ3MgU0VULWNsYXVzZSB0cmFja2luZy4KIENSRUFURSBUUklHR0VS IHRzdmVjdG9ydXBkYXRlCiBCRUZPUkUgVVBEQVRFIE9SIElOU0VSVCBPTiB0ZXN0X3RzdmVj dG9yCiBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgdHN2ZWN0b3JfdXBkYXRlX3Ry aWdnZXIoYSwgJ3BnX2NhdGFsb2cuZW5nbGlzaCcsIHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3VwZGF0YWJsZV92aWV3cy5zcWwKaW5kZXggMTYzNWFkZGUyZDQuLjE2MGU3Nzk5NzE1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVfdmlld3Muc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5zcWwKQEAgLTEy NSw3ICsxMjUsNyBAQCBJTlNFUlQgSU5UTyByd192aWV3MTYgVkFMVUVTICgzLCAnUm93IDMn LCAzKTsgLS0gc2hvdWxkIGZhaWwKIElOU0VSVCBJTlRPIHJ3X3ZpZXcxNiAoYSwgYikgVkFM VUVTICgzLCAnUm93IDMnKTsgLS0gc2hvdWxkIGJlIE9LCiBVUERBVEUgcndfdmlldzE2IFNF VCBhPTMsIGFhPS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGZhaWwKIFVQREFURSByd192aWV3 MTYgU0VUIGFhPS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGJlIE9LCi1TRUxFQ1QgKiBGUk9N IGJhc2VfdGJsOworU0VMRUNUICogRlJPTSBiYXNlX3RibCBPUkRFUiBCWSBhOwogREVMRVRF IEZST00gcndfdmlldzE2IFdIRVJFIGE9LTM7IC0tIHNob3VsZCBiZSBPSwogLS0gUmVhZC1v bmx5IHZpZXdzCiBJTlNFUlQgSU5UTyByb192aWV3MTcgVkFMVUVTICgzLCAnUk9XIDMnKTsK LS0gCjIuNTEuMgoK --4c2f6a995cf94f2faf0e839bcfb553b4--