<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>39382</bug_id>
          
          <creation_ts>2010-05-19 15:34:22 -0700</creation_ts>
          <short_desc>Factor PageCache code out of FrameLoader into a PageCacheController</short_desc>
          <delta_ts>2010-06-09 13:51:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>228019</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-19 15:34:22 -0700</bug_when>
    <thetext>Most of the logic related to PageCache can get pulled out into a separate class.  There will still need to be some references to CachedPages and CachedFrames in FrameLoader, but it can cut a couple hundred lines out of the megaclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228064</commentid>
    <comment_count>1</comment_count>
      <attachid>56533</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-19 16:49:34 -0700</bug_when>
    <thetext>Created attachment 56533
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228111</commentid>
    <comment_count>2</comment_count>
      <attachid>56533</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-19 17:49:50 -0700</bug_when>
    <thetext>Comment on attachment 56533
patch

What&apos;s the relationship between the PageCache and the PageCacheController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228114</commentid>
    <comment_count>3</comment_count>
      <attachid>56533</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-19 17:52:09 -0700</bug_when>
    <thetext>Comment on attachment 56533
patch

WebCore/loader/PageCacheController.cpp:229
 +  bool PageCacheController::canCachePageContainingThisFrame(FrameLoader* frameLoader)
Probably should pass the Frame* here.

WebCore/loader/PageCacheController.cpp:328
 +  void PageCacheController::remove(HistoryItem* item)
Why does this method exist?

Maybe all or some of these methods should move onto the pageCache() object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228120</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-19 18:03:17 -0700</bug_when>
    <thetext>Attachment 56533 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2269337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228433</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-20 10:01:30 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 56533 [details])
&gt; WebCore/loader/PageCacheController.cpp:229
&gt;  +  bool PageCacheController::canCachePageContainingThisFrame(FrameLoader* frameLoader)
&gt; Probably should pass the Frame* here.

Yeah, I think you&apos;re right, will do.

&gt; 
&gt; WebCore/loader/PageCacheController.cpp:328
&gt;  +  void PageCacheController::remove(HistoryItem* item)
&gt; Why does this method exist?
&gt; 
&gt; Maybe all or some of these methods should move onto the pageCache() object?

My initial thought had been to try to full wrap pageCache() with PageCacheController, but that isn&apos;t necessary (and very well may not be desirable).

I think removing PageCacheController&apos;s get() and remove() functions makes a lot of sense (the logic of when to remove a stale page from the page cache probably belongs in PageCache).  The more I look at it though, yeah, I think there are some merits to moving all this logic into PageCache.  I&apos;m least certain about moving canCachePage() and its logging code into PageCache, but it doesn&apos;t make sense to have PageCacheController just for that, and better to have it in PageCache than FrameLoader :)

I&apos;ll go ahead and try moving all this to PageCacheController unless I hear objections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228597</commentid>
    <comment_count>6</comment_count>
      <attachid>56640</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-20 15:17:09 -0700</bug_when>
    <thetext>Created attachment 56640
Merged PageCacheController into PageCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228613</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-20 15:54:02 -0700</bug_when>
    <thetext>Attachment 56640 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2306381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228618</commentid>
    <comment_count>8</comment_count>
      <attachid>56643</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-20 16:03:13 -0700</bug_when>
    <thetext>Created attachment 56643
Hopefully with all the necessary #includes this time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230753</commentid>
    <comment_count>9</comment_count>
      <attachid>56643</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-26 10:10:03 -0700</bug_when>
    <thetext>Comment on attachment 56643
Hopefully with all the necessary #includes this time

This looks good, although it&apos;s a bit too complicated for me to say 100% that it&apos;s correct.  Some minor comments below.

WebCore/history/PageCache.cpp:53
 +  #ifndef NDEBUG
I think we want a space after this line.

WebCore/history/PageCache.cpp:220
 +  #endif 
Similarly, I think we want a space before this line.

WebCore/history/PageCache.cpp:354
 +      if (RefPtr&lt;CachedPage&gt; cachedPage = item-&gt;m_cachedPage.get()) {
Why is this a RefPtr?  If we need this reference, then we&apos;ll get in trouble on line 359 below where we return a raw pointer.  Oh, I see.  In the case where we return the raw pointer, we don&apos;t remove the CachedPage, but in the case where we do, we&apos;ll end up with the last reference and delete the CachedPage when we return.  Boo.  I&apos;m hoping to see these as minus lines later in the patch.

WebCore/loader/FrameLoader.cpp:2157
 +      Page* page = m_frame-&gt;page();
I&apos;m not sure it&apos;s worth storing this in a temporary, but it probably doesn&apos;t matter.

WebCore/loader/FrameLoader.cpp:2181
 +          cachedPage-&gt;restore(m_frame-&gt;page());
We have a |page| temporary we could use here.

WebCore/loader/FrameLoader.cpp: 
 +              return;
I see.  So the trickiness with RefPtr is new...  Might be worth adding a comment explaining what&apos;s going one.  PageCache isn&apos;t very well tested by DumpRenderTree, so we need to be careful when changing this code.  Have you looked in manual-tests to see if there are any good page cache tests you can run manually?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230968</commentid>
    <comment_count>10</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-26 15:33:48 -0700</bug_when>
    <thetext>&gt; I see.  So the trickiness with RefPtr is new...  Might be worth adding a comment explaining what&apos;s going one.  PageCache isn&apos;t very well tested by DumpRenderTree, so we need to be careful when changing this code.  Have you looked in manual-tests to see if there are any good page cache tests you can run manually?

Re: RefPtrs, I don&apos;t think there&apos;s any reason why it&apos;s necessary, I just got a bit careless in what code samples I modeled my patch after.  I removed them.


I ran the two manual tests I could find that related to page cache and they both pass, as do the layout tests that cover page cache.  I used the layout tests for verification of this change, because there were 8 or so tests that broke in spectacular ways with early versions of this cleanup. :-)

Will submit shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231026</commentid>
    <comment_count>11</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-05-26 18:03:32 -0700</bug_when>
    <thetext>Reverted r60256 for reason:

Causes fast/dom/prototype-inheritance-2.html to start crashing.

Committed r60263: &lt;http://trac.webkit.org/changeset/60263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231032</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-26 18:21:45 -0700</bug_when>
    <thetext>Here&apos;s a crash caused by this patch (null deref).

Program received signal:  “EXC_BAD_ACCESS”.

#0	0x100e749f0 in WTF::OwnPtr&lt;WebCore::DocLoader&gt;::get at OwnPtr.h:54
#1	0x100ef5808 in WebCore::Document::docLoader at Document.h:484
#2	0x100f93336 in WebCore::DocumentLoader::isLoadingInAPISense at DocumentLoader.cpp:394
#3	0x1010e5d10 in WebCore::FrameLoader::subframeIsLoading at FrameLoader.cpp:2596
#4	0x100f93396 in WebCore::DocumentLoader::isLoadingInAPISense at DocumentLoader.cpp:400
#5	0x101590bd0 in WebCore::logCanCacheFrameDecision at PageCache.cpp:141
#6	0x101590de2 in WebCore::logCanCacheFrameDecision at PageCache.cpp:166
#7	0x101590fe9 in WebCore::logCanCachePageDecision at PageCache.cpp:187
#8	0x1015912b6 in WebCore::PageCache::canCache at PageCache.cpp:286
#9	0x1010ed5c4 in WebCore::FrameLoader::commitProvisionalLoad at FrameLoader.cpp:2165
#10	0x100f93809 in WebCore::DocumentLoader::commitIfReady at DocumentLoader.cpp:258
#11	0x100f938d8 in WebCore::DocumentLoader::finishedLoading at DocumentLoader.cpp:265
#12	0x1010ea395 in WebCore::FrameLoader::init at FrameLoader.cpp:252
#13	0x100837947 in WebCore::Frame::init at Frame.h:369
#14	0x100834b2b in +[WebFrame(WebInternal) _createFrameWithPage:frameName:frameView:ownerElement:] at WebFrame.mm:270
#15	0x1008301c6 in +[WebFrame(WebInternal) _createSubframeWithOwnerElement:frameName:frameView:] at WebFrame.mm:284
#16	0x10083ad2c in WebFrameLoaderClient::createFrame at WebFrameLoaderClient.mm:1352
#17	0x1010f1da0 in WebCore::FrameLoader::loadSubframe at FrameLoader.cpp:429
#18	0x1010f20aa in WebCore::FrameLoader::requestFrame at FrameLoader.cpp:400
#19	0x101199133 in WebCore::HTMLFrameElementBase::openURL at HTMLFrameElementBase.cpp:114
#20	0x10119970b in WebCore::HTMLFrameElementBase::setNameAndOpenURL at HTMLFrameElementBase.cpp:173
#21	0x101199723 in WebCore::HTMLFrameElementBase::setNameAndOpenURLCallback at HTMLFrameElementBase.cpp:178
#22	0x100e3c4a8 in WebCore::ContainerNode::dispatchPostAttachCallbacks at ContainerNode.cpp:611
#23	0x100e3c5f0 in WebCore::ContainerNode::resumePostAttachCallbacks at ContainerNode.cpp:583
#24	0x10107ec4f in WebCore::Element::attach at Element.cpp:842
#25	0x101198c74 in WebCore::HTMLFrameElementBase::attach at HTMLFrameElementBase.cpp:219
#26	0x101198433 in WebCore::HTMLFrameElement::attach at HTMLFrameElement.cpp:73
#27	0x1011c641b in WebCore::HTMLParser::insertNode at HTMLParser.cpp:421
#28	0x1011cbd1c in WebCore::HTMLParser::insertNodeAfterLimitDepth at HTMLParser.cpp:247
#29	0x1011c8cc7 in WebCore::HTMLParser::parseToken at HTMLParser.cpp:319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231052</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-26 20:14:06 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60256 might have broken Leopard Intel Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232911</commentid>
    <comment_count>14</comment_count>
      <attachid>57582</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-01 12:46:40 -0700</bug_when>
    <thetext>Created attachment 57582
One option for a crash fix

So the crash in DocumentLoader::isLoadingInAPISense is triggered by trying to deref m_frame-&gt;document() when it is null.  The trivial fix for this is attached (null checking before using m_frame-&gt;document()). 

I make no claims that this is the right solution, but it&apos;s one option.  On the one hand, the return value of Frame::document() is not guaranteed to be valid and it gets null checked a bunch of other places.  On the other hand, I have yet to figure out what changed that we are hitting null cases now (I&apos;m guessing I inadvertently changed some timing/ordering).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233079</commentid>
    <comment_count>15</comment_count>
      <attachid>57582</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-01 22:25:15 -0700</bug_when>
    <thetext>Comment on attachment 57582
One option for a crash fix

I need to we need to understand this better before anding a random null check.  One thing I&apos;ve done in the past is break my change down into a ton of tiny steps to see where the bug got introduced.  Once you see a tiny change the cased the bug, you might have a better idea what the issue is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233157</commentid>
    <comment_count>16</comment_count>
      <attachid>56643</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 02:26:46 -0700</bug_when>
    <thetext>Comment on attachment 56643
Hopefully with all the necessary #includes this time

Cleared Adam Barth&apos;s review+ from obsolete attachment 56643 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233473</commentid>
    <comment_count>17</comment_count>
      <attachid>57709</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-02 15:40:58 -0700</bug_when>
    <thetext>Created attachment 57709
Only try to cache when the main frame is being committed

I hadn&apos;t realized that I had changed the assumption of when we would try to cache.  If we maintain the interface I introduced in this patch (canCache(Page*) instead of canCache(Frame*)), there&apos;s no way for canCache() to confirm that this was called due to a commit in the main frame.  It makes sense (to me anyway) that trying to cache from something other than the main frame is wrong, so this version just adds a !m_frame-&gt;tree()-&gt;parent() check before calling canCache() in FrameLoader::commitProvisionalLoad().



Unrelated:  In my digging into isLoadingInAPISense(), I&apos;ve noticed that it&apos;s recursive and checks all subframes.  Ergo, we&apos;re being unnecessarily O(n^2) when we call it on every subframe as well as the main frame.  Do we care?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233647</commentid>
    <comment_count>18</comment_count>
      <attachid>57709</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-03 00:26:09 -0700</bug_when>
    <thetext>Comment on attachment 57709
Only try to cache when the main frame is being committed

This patch is missing a ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233789</commentid>
    <comment_count>19</comment_count>
      <attachid>57779</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-03 09:30:23 -0700</bug_when>
    <thetext>Created attachment 57779
With ChangeLog

Hmm....I don&apos;t remember reverting the ChangeLog, sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233811</commentid>
    <comment_count>20</comment_count>
      <attachid>57779</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-03 10:23:13 -0700</bug_when>
    <thetext>Comment on attachment 57779
With ChangeLog

Ok.  I understood this patch better last time.  I wish we had interdiffs.  Thanks for sticking with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235984</commentid>
    <comment_count>21</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-09 13:51:57 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 57779 [details])
&gt; Ok.  I understood this patch better last time.  I wish we had interdiffs.  Thanks for sticking with it.

Forgot to close this: http://trac.webkit.org/changeset/60688</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56533</attachid>
            <date>2010-05-19 16:49:34 -0700</date>
            <delta_ts>2010-05-20 15:17:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>40364</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTc4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDUtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgUGFnZUNhY2hlIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEZyYW1lTG9hZGVyIGFuZCBpbnRv
CisgICAgICAgIGEgc2VwYXJhdGUgUGFnZUNhY2hlQ29udHJvbGxlciBjbGFzcy4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkzODIKKworICAgICAg
ICBSZWZhY3RvciBvbmx5LCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6cHJlcGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om5hdmlnYXRlVG9EaWZmZXJlbnREb2N1bWVu
dCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6cXVpY2tSZWRpcmVjdENvbWluZyk6CisgICAgICAgICogbG9hZGVyL1BhZ2VD
YWNoZUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhZ2VDYWNoZUxv
Z1ByZWZpeCk6CisgICAgICAgIChXZWJDb3JlOjpwYWdlQ2FjaGVMb2cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNhY2hlQ29udHJvbGxlcjo6bG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlQ29udHJvbGxlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZUNvbnRyb2xsZXI6OmNhbkNhY2hlUGFn
ZUNvbnRhaW5pbmdUaGlzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlQ29udHJv
bGxlcjo6Y2FuQ2FjaGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZUNvbnRyb2xs
ZXI6OmNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVDb250cm9sbGVyOjpj
YWNoZWREb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVDb250cm9s
bGVyOjpsb2FkRnJvbUNhY2hlZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlQ29u
dHJvbGxlcjo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZUNvbnRyb2xsZXI6OnJl
bW92ZSk6CisgICAgICAgICogbG9hZGVyL1BhZ2VDYWNoZUNvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKwogMjAxMC0wNS0xOSAgRW5yaWNh
IENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SHlhdHQuCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA1OTc4NSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY4LDcgKzI2OCw3IEBACiAgICAgICAgIGxvYWRlci0+c2V0Rm9yY2VkU2FuZGJveEZsYWdzKFNh
bmRib3hBbGwpOwogICAgICAgICBsb2FkZXItPmxvYWQoZmFrZVJlcXVlc3QsIGZhbHNlKTsgLy8g
TWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCiAgICAgICAgIGxvYWRlci0+
cG9saWN5Q2hlY2tlcigpLT5jYW5jZWxDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVj
a3MKLSAgICAgICAgbG9hZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7CisgICAgICAgIGxv
YWRlci0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiAgICAgICAgIGxvYWRlci0+d3JpdGVyKCkt
PnNldE1JTUVUeXBlKCJpbWFnZS9zdmcreG1sIik7CiAgICAgICAgIGxvYWRlci0+d3JpdGVyKCkt
PmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKICAgICAgICAgbG9h
ZGVyLT53cml0ZXIoKS0+YWRkRGF0YShkYXRhKCktPmRhdGEoKSwgZGF0YSgpLT5zaXplKCkpOwpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDU5Nzg1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTQ4MjMsNiArNDgyMyw4IEBACiAJCUNFRjQxOENGMTE3OTY3OEMwMDlE
MTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJn
dW1lbnRzLmggKi87IH07CiAJCUQwMUEyN0FEMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0
U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAqLzsgfTsK
IAkJRDAxQTI3QUUxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMUEyN0FDMTBDOUJGRDgw
MDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRDA0NTgzQjYxMUE0NTM4NjAwOTM0NEFFIC8qIFBhZ2VD
YWNoZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDA0NTgzQjQxMUE0NTM4NjAwOTM0NEFFIC8qIFBhZ2VDYWNoZUNvbnRyb2xsZXIu
Y3BwICovOyB9OworCQlEMDQ1ODNCNzExQTQ1Mzg2MDA5MzQ0QUUgLyogUGFnZUNhY2hlQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA0
NTgzQjUxMUE0NTM4NjAwOTM0NEFFIC8qIFBhZ2VDYWNoZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJ
RDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyNzBBNDBCQjJD
MDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLzsgfTsKIAkJRDA1Q0VEMkEwQTQw
QkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZv
cm1hdEJsb2NrQ29tbWFuZC5oICovOyB9OwogCQlEMDZDMEQ4RjBDRkQxMTQ2MDA2NUY0M0YgLyog
UmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENvbW1h
bmQuaCAqLzsgfTsKQEAgLTEwMzIyLDYgKzEwMzI0LDggQEAKIAkJQ0VGNDE4Q0QxMTc5Njc4QzAw
OUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYWNlU3BsaXRTdHJpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDFBMjdBQzEwQzlCRkQ4MDAwMjZBNDIgLyogU3Bh
Y2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFjZVNw
bGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwNDU4M0I0MTFBNDUz
ODYwMDkzNDRBRSAvKiBQYWdlQ2FjaGVDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDYWNoZUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlEMDQ1ODNCNTExQTQ1Mzg2MDA5MzQ0QUUgLyogUGFnZUNhY2hlQ29u
dHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2FjaGVDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNUNFRDI3MEE0MEJCMkMw
MEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvcm1hdEJsb2NrQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwNUNFRDI4MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1h
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1hdEJsb2NrQ29tbWFu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0
M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdmVGb3JtYXRDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNTUzNiw2ICsxNTU0MCw4IEBACiAJCUJDQjE2QkZCMDk3OUMzODcwMDQ2Nzc0MSAvKiBsb2Fk
ZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUQwNDU4
M0I0MTFBNDUzODYwMDkzNDRBRSAvKiBQYWdlQ2FjaGVDb250cm9sbGVyLmNwcCAqLywKKwkJCQlE
MDQ1ODNCNTExQTQ1Mzg2MDA5MzQ0QUUgLyogUGFnZUNhY2hlQ29udHJvbGxlci5oICovLAogCQkJ
CTFBOEY2QkIwMERCNTVDREMwMDFEQjc5NCAvKiBhcHBjYWNoZSAqLywKIAkJCQk1MTJERDhFODBE
OTFFNjkxMDAwRjg5RUUgLyogYXJjaGl2ZSAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVGMDA1QzI5
RkEgLyogaWNvbiAqLywKQEAgLTE5MjcwLDYgKzE5Mjc2LDcgQEAKIAkJCQk5N0U4QjNDMzExQTI4
OTA4MDAxNjk0MDkgLyogSFRNTDVUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MTAzOEIx
MUEyOTQ3MDAwREJENTBFIC8qIEhUTUw1VG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUgLyogU2lua0RvY3VtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlEMDQ1ODNCNzExQTQ1Mzg2MDA5MzQ0QUUgLyogUGFnZUNhY2hlQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0yMTU1Myw2ICsyMTU2MCw3IEBACiAJCQkJOTdFOEIzNTYxMUEyM0NF
MjAwMTY5NDA5IC8qIEhUTUw1TGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MTAzOEEx
MUEyOTQ3MDAwREJENTBFIC8qIEhUTUw1VG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxMzI3RDYxMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRDA0NTgzQjYxMUE0NTM4NjAwOTM0NEFFIC8qIFBhZ2VDYWNoZUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9QYWdlQ2FjaGVDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QYWdlQ2FjaGVDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL1BhZ2VDYWNoZUNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VDYWNoZUNvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQmFj
a0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgorI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOREVCVUcKK3N0YXRp
YyBTdHJpbmcmIHBhZ2VDYWNoZUxvZ1ByZWZpeChpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgc3Rh
dGljIGludCBwcmV2aW91c0luZGVudCA9IC0xOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBwcmVmaXgsICgpKTsKKyAgICAKKyAgICBpZiAoaW5kZW50TGV2ZWwgIT0gcHJldmlvdXNJ
bmRlbnQpIHsgICAgCisgICAgICAgIHByZXZpb3VzSW5kZW50ID0gaW5kZW50TGV2ZWw7CisgICAg
ICAgIHByZWZpeC50cnVuY2F0ZSgwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
aW91c0luZGVudDsgKytpKQorICAgICAgICAgICAgcHJlZml4ICs9ICIgICAgIjsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHByZWZpeDsKK30KKworc3RhdGljIHZvaWQgcGFnZUNhY2hlTG9nKGNv
bnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgTE9HKFBh
Z2VDYWNoZSwgIiVzJXMiLCBwcmVmaXgudXRmOCgpLmRhdGEoKSwgbWVzc2FnZS51dGY4KCkuZGF0
YSgpKTsKK30KKworI2RlZmluZSBQQ0xPRyguLi4pIHBhZ2VDYWNoZUxvZyhwYWdlQ2FjaGVMb2dQ
cmVmaXgoaW5kZW50TGV2ZWwpLCBTdHJpbmc6OmZvcm1hdChfX1ZBX0FSR1NfXykpCisKK3N0YXRp
YyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikK
K3sKKyAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZyYW1lcyB0aGF0IGhhdmUg
YWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCisgICAgaWYgKGZyYW1lTG9hZGVyLT5j
cmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBLVVJM
IGN1cnJlbnRVUkwgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lTG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsKKyAgICBpZiAoY3VycmVudFVSTC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgaW5kZW50TGV2ZWwgPSAw
OworICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hl
ZDoiKTsKKyAgICAKKyAgICBib29sIGNhbm5vdENhY2hlID0gIWxvZ0NhbkNhY2hlRnJhbWVEZWNp
c2lvbihmcmFtZUxvYWRlciwgMSk7CisgICAgCisgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9
IGZyYW1lTG9hZGVyLT5sb2FkVHlwZSgpOworICAgIGlmIChmcmFtZUxvYWRlci0+ZnJhbWUoKS0+
dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBhIHBhcmVu
dCBmcmFtZSIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmICgh
ZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZXJl
IGlzIG5vIFBhZ2Ugb2JqZWN0Iik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGlmICghZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+
YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBi
YWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxlZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRy
dWU7CisgICAgfQorICAgIGlmICghKGZyYW1lTG9hZGVyLT5mcmFtZSgpLT5wYWdlKCktPmJhY2tG
b3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1UaGUg
YmFjay9mb3J3YXJkIGxpc3QgaGFzIGEgMCBjYXBhY2l0eSIpOworICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7CisgICAgfQorICAgIGlmICghZnJhbWVMb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtUGFnZSBz
ZXR0aW5ncyBzYXlzIGIvZiBjYWNoZSBkaXNhYmxlZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9
IHRydWU7CisgICAgfQorICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKSB7
CisgICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsKKyAgICAgICAgY2Fu
bm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlw
ZVJlbG9hZEZyb21PcmlnaW4pIHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJl
bG9hZCBmcm9tIG9yaWdpbiIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQor
ICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkgeworICAgICAgICBQQ0xPRygi
ICAgLUxvYWQgdHlwZSBpczogU2FtZSIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Cisg
ICAgfQorICAgIAorICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBjYWNo
ZWRcbi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworfQorCitz
dGF0aWMgdm9pZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWVMb2FkZXIqIGZyYW1lTG9h
ZGVyLCBpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3Ig
ZnJhbWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KKyAgICBp
ZiAoZnJhbWVMb2FkZXItPmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEtVUkwgY3VycmVudFVSTCA9IGZyYW1lTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpID8gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgp
OworICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIFBDTE9HKCIrLS0tIik7CisgICAgS1VSTCBuZXdVUkwgPSBmcmFtZUxvYWRlci0+
cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpID8gZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgaWYgKCFuZXdVUkwuaXNFbXB0eSgp
KQorICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIGZyYW1lIGNhbiBiZSBjYWNoZWQgbmF2
aWdhdGluZyBmcm9tICglcykgdG8gKCVzKToiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIG5ld1VSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAg
IFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJhbWUgd2l0aCBVUkwgKCVzKSBjYW4gYmUgY2Fj
aGVkOiIsIGN1cnJlbnRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgYm9v
bCBjYW5ub3RDYWNoZSA9IGZhbHNlOworCisgICAgaWYgKCFmcmFtZUxvYWRlci0+ZG9jdW1lbnRM
b2FkZXIoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVy
IG9iamVjdCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1l
bnRFcnJvcigpLmlzTnVsbCgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtTWFpbiBkb2N1bWVudCBo
YXMgYW4gZXJyb3IiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoZnJhbWVMb2FkZXItPmNvbnRhaW5zUGx1Z2lucygpKSB7CisgICAgICAgIFBDTE9HKCIgICAt
RnJhbWUgY29udGFpbnMgcGx1Z2lucyIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Cisg
ICAgfQorICAgIGlmIChmcmFtZUxvYWRlci0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSkgewor
ICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGlzIEhUVFBTIik7CisgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGZyYW1lTG9hZGVyLT5mcmFtZSgpLT5kb21XaW5kb3co
KSAmJiBmcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJz
KGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1GcmFtZSBo
YXMgYW4gdW5sb2FkIGV2ZW50IGxpc3RlbmVyIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKKyAgICB9CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIGlmIChmcmFtZUxvYWRlci0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpKSB7CisgICAgICAgIFBDTE9HKCIg
ICAtRnJhbWUgaGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOworICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAg
IGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZyYW1lTG9hZGVy
LT5mcmFtZSgpLT5kb2N1bWVudCgpKSkgeworICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBh
c3NvY2lhdGVkIFNoYXJlZFdvcmtlcnMiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwor
ICAgIH0KKyNlbmRpZgorICAgIGlmIChmcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
dXNpbmdHZW9sb2NhdGlvbigpKSB7CisgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgdXNlcyBHZW9s
b2NhdGlvbiIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmICgh
ZnJhbWVMb2FkZXItPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkgeworICAgICAgICBQQ0xPRygi
ICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKGZyYW1lTG9hZGVyLT5xdWlja1JlZGlyZWN0Q29taW5nKCkpIHsK
KyAgICAgICAgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsKKyAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAoZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkgeworICAgICAgICBQQ0xPRygiICAgLURv
Y3VtZW50TG9hZGVyIGlzIHN0aWxsIGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7CisgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGZyYW1lTG9hZGVyLT5kb2N1bWVudExv
YWRlcigpLT5pc1N0b3BwaW5nKCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRl
ciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7CisgICAgICAgIGNhbm5vdENhY2hlID0g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFmcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBk
b2N1bWVudCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7CisgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgUENMT0co
IiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNoZSIpOworICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFmcmFtZUxv
YWRlci0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtVGhl
IGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOworICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7IAorICAgIH0KKyAgICAKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZy
YW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYgKCFsb2dDYW5DYWNoZUZy
YW1lRGVjaXNpb24oY2hpbGQtPmxvYWRlcigpLCBpbmRlbnRMZXZlbCArIDEpKQorICAgICAgICAg
ICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIAorICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBG
cmFtZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIpOworICAgIFBD
TE9HKCIrLS0tIik7CisgICAgCisgICAgcmV0dXJuICFjYW5ub3RDYWNoZTsKK30KKyNlbmRpZiAK
KworYm9vbCBQYWdlQ2FjaGVDb250cm9sbGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0Zy
YW1lKEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikKK3sKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9
IGZyYW1lTG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hl
UGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoY2hpbGQtPmxvYWRlcigpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZyYW1lTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpCisgICAgICAgICYmIGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5tYWlu
RG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpCisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIGNo
YW5nZSB0aGlzIHNvIHRoYXQgZnJhbWVzIHdpdGggcGx1Zy1pbnMgd2lsbCBiZSBjYWNoZWQsCisg
ICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgY2FjaGUgZnJhbWVz
IHRoYXQgaGF2ZSBvdXRzdGFuZGluZyBOUE9iamVjdHMKKyAgICAgICAgLy8gKG9iamVjdHMgY3Jl
YXRlZCBieSB0aGUgcGx1Zy1pbikuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBwYXVzZS9yZXN1
bWUgYSBOZXRzY2FwZSBwbHVnLWluLAorICAgICAgICAvLyB0aGV5IHdvdWxkIG5lZWQgdG8gYmUg
ZGVzdHJveWVkIGFuZCB0aGVuIHJlY3JlYXRlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0IHdl
IGNhbiByZWNyZWF0ZQorICAgICAgICAvLyB0aGUgcmlnaHQgTlBPYmplY3RzLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzUxOTcwNDE+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAmJiAhZnJh
bWVMb2FkZXItPmNvbnRhaW5zUGx1Z2lucygpCisgICAgICAgICYmICFmcmFtZUxvYWRlci0+dXJs
KCkucHJvdG9jb2xJcygiaHR0cHMiKQorICAgICAgICAmJiAoIWZyYW1lTG9hZGVyLT5mcmFtZSgp
LT5kb21XaW5kb3coKSB8fCAhZnJhbWVMb2FkZXItPmZyYW1lKCktPmRvbVdpbmRvdygpLT5oYXNF
dmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQorI2lmIEVOQUJMRShEQVRB
QkFTRSkKKyAgICAgICAgJiYgIWZyYW1lTG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5oYXNP
cGVuRGF0YWJhc2VzKCkKKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAg
ICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoZnJhbWVMb2Fk
ZXItPmZyYW1lKCktPmRvY3VtZW50KCkpCisjZW5kaWYKKyAgICAgICAgJiYgIWZyYW1lTG9hZGVy
LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCkKKyAgICAgICAgJiYgZnJh
bWVMb2FkZXItPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQorICAgICAgICAmJiAhZnJhbWVMb2Fk
ZXItPnF1aWNrUmVkaXJlY3RDb21pbmcoKQorICAgICAgICAmJiAhZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKQorICAgICAgICAmJiAhZnJhbWVMb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKQorICAgICAgICAmJiBmcmFtZUxvYWRl
ci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRl
ZAorICAgICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzU5MTc4OTk+
IHRyYWNrcyB0aGF0IHdvcmsuCisgICAgICAgICYmIGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKKyNlbmRp
ZgorI2lmIEVOQUJMRShXTUwpCisgICAgICAgICYmICFmcmFtZUxvYWRlci0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+Y29udGFpbnNXTUxDb250ZW50KCkKKyAgICAgICAgJiYgIWZyYW1lTG9hZGVyLT5m
cmFtZSgpLT5kb2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCk7CisjZW5kaWYKKyAgICAgICAgJiYg
ZnJhbWVMb2FkZXItPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKTsKK30KKworCitib29sIFBhZ2VD
YWNoZUNvbnRyb2xsZXI6OmNhbkNhY2hlUGFnZShQYWdlKiBwYWdlKQoreworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWZuZGVmIE5ERUJVRworICAgIGxvZ0NhbkNh
Y2hlUGFnZURlY2lzaW9uKHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKSk7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgLy8gQ2FjaGUgdGhlIHBhZ2UsIGlmIHBvc3NpYmxlLgorICAgIC8vIERvbid0
IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNl
IHdlIHdpbGwgd2FudCB0bworICAgIC8vIHN0b3JlIHRoZSBmaW5hbCBwYWdlIHdlIGVuZCB1cCBv
bi4KKyAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCBvciBs
b2FkU2FtZSwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlCisgICAgLy8gb3ZlciBpdCBhZ2FpbiB3
aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4
ODY1OTI+IC0gV2Ugc2hvdWxkIHdvcmsgb3V0IHRoZSBjb21wbGV4aXRpZXMgb2YgY2FjaGluZyBw
YWdlcyB3aXRoIGZyYW1lcyBhcyB0aGV5CisgICAgLy8gYXJlIHRoZSBtb3N0IGludGVyZXN0aW5n
IHBhZ2VzIG9uIHRoZSB3ZWIsIGFuZCBvZnRlbiB0aG9zZSB0aGF0IHdvdWxkIGJlbmVmaXQgdGhl
IG1vc3QgZnJvbSBjYWNoaW5nIQorICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIGNhbkNh
Y2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpKQor
ICAgICAgICAmJiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpCisgICAgICAgICYm
IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMAorICAgICAgICAmJiBwYWdl
LT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkKKyAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJh
bWVMb2FkVHlwZVJlbG9hZCAKKyAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJl
bG9hZEZyb21PcmlnaW4KKyAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVNhbWU7
Cit9CisKK3ZvaWQgUGFnZUNhY2hlQ29udHJvbGxlcjo6Y2FjaGVQYWdlKFBhZ2UqIHBhZ2UsIEhp
c3RvcnlJdGVtKiBpdGVtKQoreworICAgIEFTU0VSVChjYW5DYWNoZVBhZ2UocGFnZSkpOworICAg
IEFTU0VSVCghaXRlbS0+aXNJblBhZ2VDYWNoZSgpKTsKKyAgICAKKyAgICBSZWZQdHI8Q2FjaGVk
UGFnZT4gY2FjaGVkUGFnZSA9IENhY2hlZFBhZ2U6OmNyZWF0ZShwYWdlKTsKKyAgICBwYWdlQ2Fj
aGUoKS0+YWRkKGl0ZW0sIGNhY2hlZFBhZ2UucmVsZWFzZSgpKTsKK30KKworYm9vbCBQYWdlQ2Fj
aGVDb250cm9sbGVyOjpjYW5Mb2FkRnJvbUNhY2hlKEhpc3RvcnlJdGVtKiBpdGVtKQoreworICAg
IFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gZ2V0KGl0ZW0pOworICAgIHJldHVybiBj
YWNoZWRQYWdlICYmIGNhY2hlZFBhZ2UtPmRvY3VtZW50KCk7Cit9CisgICAgCitSZWZQdHI8Q2Fj
aGVkUGFnZT4gUGFnZUNhY2hlQ29udHJvbGxlcjo6Z2V0KEhpc3RvcnlJdGVtKiBpdGVtKQorewor
ICAgIGlmIChSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQo
aXRlbSkpIHsKKyAgICAgICAgLy8gRklYTUU6IDE4MDAgc2hvdWxkIG5vdCBiZSBoYXJkY29kZWQs
IGl0IHNob3VsZCBjb21lIGZyb20KKyAgICAgICAgLy8gV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4
cGlyYXRpb25JbnRlcnZhbEtleSBpbiBXZWJLaXQuCisgICAgICAgIC8vIE9yIHdlIHNob3VsZCBy
ZW1vdmUgV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleS4KKyAgICAg
ICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBjYWNoZWRQYWdlLT50aW1lU3RhbXAoKSA8PSAxODAwKQor
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CisgICAgICAgIAorICAgICAgICBMT0coUGFn
ZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNo
ZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKyAgICAKK3ZvaWQgUGFnZUNhY2hlQ29udHJvbGxlcjo6cmVt
b3ZlKEhpc3RvcnlJdGVtKiBpdGVtKQoreworICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRlbSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDU5Nzg1KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGVDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgog
I2luY2x1ZGUgIlBsYWNlaG9sZGVyRG9jdW1lbnQuaCIKQEAgLTE0MTMsMjA4ICsxNDEzLDYgQEAK
IH0KICNlbmRpZgogCi1ib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKCkKLXsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7
Ci0gICAgICAgIGlmICghY2hpbGQtPmxvYWRlcigpLT5jYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICAgICAgICAg
Ci0gICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIKLSAgICAgICAgJiYgbV9kb2N1bWVudExvYWRl
ci0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKQotICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
ZXZlciBjaGFuZ2UgdGhpcyBzbyB0aGF0IGZyYW1lcyB3aXRoIHBsdWctaW5zIHdpbGwgYmUgY2Fj
aGVkLAotICAgICAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGNhY2hl
IGZyYW1lcyB0aGF0IGhhdmUgb3V0c3RhbmRpbmcgTlBPYmplY3RzCi0gICAgICAgIC8vIChvYmpl
Y3RzIGNyZWF0ZWQgYnkgdGhlIHBsdWctaW4pLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcGF1
c2UvcmVzdW1lIGEgTmV0c2NhcGUgcGx1Zy1pbiwKLSAgICAgICAgLy8gdGhleSB3b3VsZCBuZWVk
IHRvIGJlIGRlc3Ryb3llZCBhbmQgdGhlbiByZWNyZWF0ZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkg
dGhhdCB3ZSBjYW4gcmVjcmVhdGUKLSAgICAgICAgLy8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS81MTk3MDQxPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAg
JiYgIW1fY29udGFpbnNQbHVnSW5zCi0gICAgICAgICYmICFtX1VSTC5wcm90b2NvbElzKCJodHRw
cyIpCi0gICAgICAgICYmICghbV9mcmFtZS0+ZG9tV2luZG93KCkgfHwgIW1fZnJhbWUtPmRvbVdp
bmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQotI2lm
IEVOQUJMRShEQVRBQkFTRSkKLSAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc09w
ZW5EYXRhYmFzZXMoKQotI2VuZGlmCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgICAg
ICAmJiAhU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhtX2ZyYW1lLT5k
b2N1bWVudCgpKQotI2VuZGlmCi0gICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2lu
Z0dlb2xvY2F0aW9uKCkKLSAgICAgICAgJiYgaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpCi0gICAg
ICAgICYmICFtX3F1aWNrUmVkaXJlY3RDb21pbmcKLSAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2Fk
ZXItPmlzTG9hZGluZ0luQVBJU2Vuc2UoKQotICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+
aXNTdG9wcGluZygpCi0gICAgICAgICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRB
Y3RpdmVET01PYmplY3RzKCkKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQot
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMg
dGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKLSAgICAgICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxy
ZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3MgdGhhdCB3b3JrLgotICAgICAgICAmJiBtX2Rv
Y3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hl
KCkKLSNlbmRpZgotI2lmIEVOQUJMRShXTUwpCi0gICAgICAgICYmICFmcmFtZUNvbnRhaW5zV01M
Q29udGVudChtX2ZyYW1lKQotI2VuZGlmCi0gICAgICAgICYmIG1fY2xpZW50LT5jYW5DYWNoZVBh
Z2UoKQotICAgICAgICA7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZSgpCi17
Ci0jaWZuZGVmIE5ERUJVRwotICAgIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKCk7Ci0jZW5kaWYK
LSAgICAKLSAgICAvLyBDYWNoZSB0aGUgcGFnZSwgaWYgcG9zc2libGUuCi0gICAgLy8gRG9uJ3Qg
d3JpdGUgdG8gdGhlIGNhY2hlIGlmIGluIHRoZSBtaWRkbGUgb2YgYSByZWRpcmVjdCwgc2luY2Ug
d2Ugd2lsbCB3YW50IHRvCi0gICAgLy8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5kIHVwIG9u
LgotICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVsb2FkIG9yIGxv
YWRTYW1lLCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUKLSAgICAvLyBvdmVyIGl0IGFnYWluIHdo
ZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgotICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDg4
NjU5Mj4gLSBXZSBzaG91bGQgd29yayBvdXQgdGhlIGNvbXBsZXhpdGllcyBvZiBjYWNoaW5nIHBh
Z2VzIHdpdGggZnJhbWVzIGFzIHRoZXkKLSAgICAvLyBhcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcg
cGFnZXMgb24gdGhlIHdlYiwgYW5kIG9mdGVuIHRob3NlIHRoYXQgd291bGQgYmVuZWZpdCB0aGUg
bW9zdCBmcm9tIGNhY2hpbmchCi0gICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHRoaXMtPmxv
YWRUeXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuICFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpCi0g
ICAgICAgICYmIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKQotICAgICAgICAmJiBt
X2ZyYW1lLT5wYWdlKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExp
c3QoKS0+ZW5hYmxlZCgpCi0gICAgICAgICYmIG1fZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRM
aXN0KCktPmNhcGFjaXR5KCkgPiAwCi0gICAgICAgICYmIG1fZnJhbWUtPnBhZ2UoKS0+c2V0dGlu
Z3MoKS0+dXNlc1BhZ2VDYWNoZSgpCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5
cGVSZWxvYWQgCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9t
T3JpZ2luCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVTYW1lCi0gICAgICAg
IDsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBTdHJpbmcmIHBhZ2VDYWNoZUxvZ1ByZWZp
eChpbnQgaW5kZW50TGV2ZWwpCi17Ci0gICAgc3RhdGljIGludCBwcmV2aW91c0luZGVudCA9IC0x
OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBwcmVmaXgsICgpKTsKLSAgICAKLSAg
ICBpZiAoaW5kZW50TGV2ZWwgIT0gcHJldmlvdXNJbmRlbnQpIHsgICAgCi0gICAgICAgIHByZXZp
b3VzSW5kZW50ID0gaW5kZW50TGV2ZWw7Ci0gICAgICAgIHByZWZpeC50cnVuY2F0ZSgwKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2aW91c0luZGVudDsgKytpKQotICAgICAgICAg
ICAgcHJlZml4ICs9ICIgICAgIjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByZWZpeDsKLX0K
LQotc3RhdGljIHZvaWQgcGFnZUNhY2hlTG9nKGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgTE9HKFBhZ2VDYWNoZSwgIiVzJXMiLCBwcmVmaXgudXRm
OCgpLmRhdGEoKSwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotI2RlZmluZSBQQ0xPRygu
Li4pIHBhZ2VDYWNoZUxvZyhwYWdlQ2FjaGVMb2dQcmVmaXgoaW5kZW50TGV2ZWwpLCBTdHJpbmc6
OmZvcm1hdChfX1ZBX0FSR1NfXykpCi0KLXZvaWQgRnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlUGFn
ZURlY2lzaW9uKCkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZyYW1l
cyB0aGF0IGhhdmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCi0gICAgaWYgKG1f
Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIEtVUkwg
Y3VycmVudFVSTCA9IG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT51cmwoKSA6
IEtVUkwoKTsKLSAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludCBpbmRlbnRMZXZlbCA9IDA7Ci0gICAgUENMT0coIi0tLS0tLS0tXG4gRGV0ZXJt
aW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOwotCi0gICAgYm9vbCBjYW5ub3RDYWNoZSA9
ICFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oMSk7Ci0gICAgICAgIAotICAgIEZyYW1lTG9hZFR5
cGUgbG9hZFR5cGUgPSB0aGlzLT5sb2FkVHlwZSgpOwotICAgIGRvIHsKLSAgICAgICAgaWYgKG1f
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUg
aGFzIGEgcGFyZW50IGZyYW1lIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAo
IW1fZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBQ
YWdlIG9iamVjdCIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCktPmJhY2tG
b3J3YXJkTGlzdCgpLT5lbmFibGVkKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGJh
Y2svZm9yd2FyZCBsaXN0IGlzIGRpc2FibGVkIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAg
ICAgICBpZiAoIShtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgp
ID4gMCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGJhY2svZm9yd2FyZCBsaXN0IGhh
cyBhIDAgY2FwYWNpdHkiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghbV9m
cmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpCi0gICAgICAgICAgICB7
IFBDTE9HKCIgICAtUGFnZSBzZXR0aW5ncyBzYXlzIGIvZiBjYWNoZSBkaXNhYmxlZCIpOyBjYW5u
b3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVS
ZWxvYWQpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsg
Y2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRU
eXBlUmVsb2FkRnJvbU9yaWdpbikKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Mb2FkIHR5cGUg
aXM6IFJlbG9hZCBmcm9tIG9yaWdpbiIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAg
aWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVTYW1lKQotICAgICAgICAgICAgeyBQQ0xPRygi
ICAgLUxvYWQgdHlwZSBpczogU2FtZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICB9IHdo
aWxlIChmYWxzZSk7Ci0gICAgCi0gICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIFBhZ2UgQ0FOTk9U
IGJlIGNhY2hlZFxuLS0tLS0tLS0iIDogIiBQYWdlIENBTiBiZSBjYWNoZWRcbi0tLS0tLS0tIik7
Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihpbnQgaW5k
ZW50TGV2ZWwpCi17Ci0gICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3IgZnJhbWVzIHRoYXQg
aGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KLSAgICBpZiAobV9jcmVhdGlu
Z0luaXRpYWxFbXB0eURvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgS1VSTCBj
dXJyZW50VVJMID0gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPnVybCgpIDog
S1VSTCgpOwotICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgUENMT0coIistLS0iKTsKLSAgICBLVVJMIG5ld1VSTCA9IG1fcHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlciA/IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+dXJsKCkgOiBL
VVJMKCk7Ci0gICAgaWYgKCFuZXdVUkwuaXNFbXB0eSgpKQotICAgICAgICBQQ0xPRygiIERldGVy
bWluaW5nIGlmIGZyYW1lIGNhbiBiZSBjYWNoZWQgbmF2aWdhdGluZyBmcm9tICglcykgdG8gKCVz
KToiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG5ld1VSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYg
c3ViZnJhbWUgd2l0aCBVUkwgKCVzKSBjYW4gYmUgY2FjaGVkOiIsIGN1cnJlbnRVUkwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIAotICAgIGJvb2wgY2Fubm90Q2FjaGUgPSBmYWxz
ZTsKLQotICAgIGRvIHsKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyKSB7Ci0gICAgICAg
ICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9iamVjdCIpOwotICAg
ICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpLmlz
TnVsbCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVy
cm9yIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9jb250YWluc1BsdWdJ
bnMpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgY29udGFpbnMgcGx1Z2lucyIpOyBj
YW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fVVJMLnByb3RvY29sSXMoImh0dHBz
IikpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX2ZyYW1lLT5kb21XaW5kb3coKSAmJiBtX2ZyYW1l
LT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50
KSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxp
c3RlbmVyIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAg
ICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMoKSkKLSAgICAg
ICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBoYXMgb3BlbiBkYXRhYmFzZSBoYW5kbGVzIik7IGNh
bm5vdENhY2hlID0gdHJ1ZTsgfQotI2VuZGlmCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQot
ICAgICAgICBpZiAoU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhtX2Zy
YW1lLT5kb2N1bWVudCgpKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBoYXMgYXNz
b2NpYXRlZCBTaGFyZWRXb3JrZXJzIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotI2VuZGlmCi0g
ICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCkpCi0gICAg
ICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFoaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkpCi0gICAg
ICAgICAgICB7IFBDTE9HKCIgICAtTm8gY3VycmVudCBoaXN0b3J5IGl0ZW0iKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX3F1aWNrUmVkaXJlY3RDb21pbmcpCi0gICAgICAg
ICAgICB7IFBDTE9HKCIgICAtUXVpY2sgcmVkaXJlY3QgaXMgY29taW5nIik7IGNhbm5vdENhY2hl
ID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+aXNMb2FkaW5nSW5BUElT
ZW5zZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLURvY3VtZW50TG9hZGVyIGlzIHN0aWxs
IGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBp
ZiAobV9kb2N1bWVudExvYWRlci0+aXNTdG9wcGluZygpKQotICAgICAgICAgICAgeyBQQ0xPRygi
ICAgLURvY3VtZW50TG9hZGVyIGlzIGluIHRoZSBtaWRkbGUgb2Ygc3RvcHBpbmciKTsgY2Fubm90
Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHMoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgZG9j
dW1lbnQgY2Fubm90IHN1c3BlY3QgaXRzIGFjdGl2ZSBET00gT2JqZWN0cyIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAg
ICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hl
SW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2Fk
ZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNoZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNl
bmRpZgotICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5DYWNoZVBhZ2UoKSkKLSAgICAgICAgICAg
IHsgUENMT0coIiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVk
Iik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgIH0gd2hpbGUgKGZhbHNlKTsKLQotICAgIGZv
ciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmICghY2hpbGQt
PmxvYWRlcigpLT5sb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oaW5kZW50TGV2ZWwgKyAxKSkKLSAg
ICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAKLSAgICBQQ0xPRyhjYW5ub3RDYWNo
ZSA/ICIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIgOiAiIEZyYW1lIENBTiBiZSBjYWNoZWQiKTsK
LSAgICBQQ0xPRygiKy0tLSIpOwotCi0gICAgcmV0dXJuICFjYW5ub3RDYWNoZTsKLX0KLSNlbmRp
ZgotCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVGaXJzdFBhcnR5Rm9yQ29va2llcygpCiB7CiAg
ICAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCkBAIC0yMzQ2LDkgKzIxNDQsOSBAQAog
ICAgIHNldFN0YXRlKEZyYW1lU3RhdGVDb21wbGV0ZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6
OmNvbW1pdFByb3Zpc2lvbmFsTG9hZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IHBycENhY2hlZFBh
Z2UpCit2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogewotICAgIFJl
ZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gcHJwQ2FjaGVkUGFnZTsKKyAgICBSZWZQdHI8
Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlID8gUGFnZUNh
Y2hlQ29udHJvbGxlcjo6Z2V0KGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCkpIDogMDsKICAg
ICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHBkbCA9IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
cjsKIAogICAgIExPRyhQYWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29t
bWl0IHByb3Zpc2lvbmFsIGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICcl
cyciLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX1VS
TC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAKQEAgLTIzNTYsNyArMjE1NCwxMiBAQAogCiAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2FjaGUgdGhlIHBhZ2Ugd2UgYXJlIG5hdmln
YXRpbmcgYXdheSBmcm9tIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICAvLyBXZSBh
cmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGF0IGEgbmV3IHBh
Z2UgaXMgYWJvdXQgdG8gYmUgbG9hZGVkLgotICAgIGNhY2hlUGFnZUZvckhpc3RvcnlJdGVtKGhp
c3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KTsKKyAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKKyAg
ICBpZiAoUGFnZUNhY2hlQ29udHJvbGxlcjo6Y2FuQ2FjaGVQYWdlKHBhZ2UpICYmICFpdGVtLT5p
c0luUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgcGFnZUhpZGRlbigpOworICAgICAgICBQYWdlQ2Fj
aGVDb250cm9sbGVyOjpjYWNoZVBhZ2UocGFnZSwgaXRlbSk7CisgICAgfQogICAgIAogICAgIGlm
IChtX2xvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZXBsYWNlKQogICAgICAgICBjbG9zZU9sZERh
dGFTb3VyY2VzKCk7CkBAIC0yMzczLDkgKzIxNzYsMTEgQEAKICAgICBpZiAobV9zZW50UmVkaXJl
Y3ROb3RpZmljYXRpb24pCiAgICAgICAgIGNsaWVudFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hl
ZChmYWxzZSk7CiAgICAgCi0gICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2FjaGVkUGFnZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgb3BlbigqY2FjaGVkUGFnZSk7Ci0gICAgZWxzZSB7ICAgICAgICAKKyAg
ICBpZiAoY2FjaGVkUGFnZSAmJiBjYWNoZWRQYWdlLT5kb2N1bWVudCgpKSB7CisgICAgICAgIHBy
ZXBhcmVGb3JDYWNoZWRQYWdlUmVzdG9yZSgpOworICAgICAgICBjYWNoZWRQYWdlLT5yZXN0b3Jl
KG1fZnJhbWUtPnBhZ2UoKSk7CisgICAgICAgIGNoZWNrQ29tcGxldGVkKCk7CisgICAgfSBlbHNl
IHsgICAgICAgIAogICAgICAgICBLVVJMIHVybCA9IHBkbC0+c3Vic3RpdHV0ZURhdGEoKS5yZXNw
b25zZVVSTCgpOwogICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHVybCA9
IHBkbC0+dXJsKCk7CkBAIC0yNDEzLDcgKzIyMTgsNyBAQAogICAgICAgICAgICAgbm90aWZpZXIo
KS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwg
aWRlbnRpZmllciwgcmVzcG9uc2UsIHN0YXRpY19jYXN0PGludD4ocmVzcG9uc2UuZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKCkpLCBlcnJvcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHBh
Z2VDYWNoZSgpLT5yZW1vdmUoaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKKyAgICAgICAgUGFn
ZUNhY2hlQ29udHJvbGxlcjo6cmVtb3ZlKGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CiAKICAg
ICAgICAgbV9kb2N1bWVudExvYWRlci0+c2V0UHJpbWFyeUxvYWRDb21wbGV0ZSh0cnVlKTsKIApA
QCAtMjU5MSw3ICsyMzk2LDcgQEAKICAgICBtX2NsaWVudC0+c2V0TWFpbkZyYW1lRG9jdW1lbnRS
ZWFkeShmYWxzZSk7IC8vIHN0b3AgZ2l2aW5nIG91dCB0aGUgYWN0dWFsIERPTURvY3VtZW50IHRv
IG9ic2VydmVycwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZFBhZ2UmIGNhY2hl
ZFBhZ2UpCit2b2lkIEZyYW1lTG9hZGVyOjpwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKQog
ewogICAgIEFTU0VSVCghbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSk7CiAgICAgQVNTRVJUKG1f
ZnJhbWUtPnBhZ2UoKSk7CkBAIC0yNjA3LDEwICsyNDEyLDYgQEAKICAgICAgICAgbV9mcmFtZS0+
c2V0SlNTdGF0dXNCYXJUZXh0KFN0cmluZygpKTsKICAgICAgICAgbV9mcmFtZS0+c2V0SlNEZWZh
dWx0U3RhdHVzQmFyVGV4dChTdHJpbmcoKSk7CiAgICAgfQotCi0gICAgY2FjaGVkUGFnZS5yZXN0
b3JlKG1fZnJhbWUtPnBhZ2UoKSk7Ci0KLSAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZEZyYW1lQmFzZSYgY2FjaGVkRnJhbWUpCkBAIC0zNDY1
LDggKzMyNjYsMTAgQEAKIAogICAgIHNldFBvbGljeURvY3VtZW50TG9hZGVyKDApOwogCi0gICAg
aWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0eXBlKSAmJiBsb2FkUHJvdmlzaW9uYWxJdGVtRnJv
bUNhY2hlZFBhZ2UoKSkKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKHR5cGUpICYmIFBh
Z2VDYWNoZUNvbnRyb2xsZXI6OmNhbkxvYWRGcm9tQ2FjaGUoaGlzdG9yeSgpLT5wcm92aXNpb25h
bEl0ZW0oKSkpIHsKKyAgICAgICAgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCk7
CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoZm9ybVN0YXRlKQogICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSgmUG9saWN5Q2hlY2tlcjo6Y29udGludWVM
b2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSwgZm9ybVN0YXRlKTsKQEAgLTM1NzksMzggKzMzODIsMTkg
QEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXI6OmxvYWRQcm92aXNp
b25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkUHJvdmlzaW9u
YWxJdGVtRnJvbUNhY2hlZFBhZ2UoKQogewotICAgIFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQ
YWdlID0gcGFnZUNhY2hlKCktPmdldChoaXN0b3J5KCktPnByb3Zpc2lvbmFsSXRlbSgpKTsKLSAg
ICBpZiAoIWNhY2hlZFBhZ2UgfHwgIWNhY2hlZFBhZ2UtPmRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBEb2N1bWVudExvYWRlciogcHJvdmlzaW9uYWxMb2FkZXIgPSBwcm92
aXNpb25hbERvY3VtZW50TG9hZGVyKCk7CisgICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVQYWdl
Q2FjaGU6IExvYWRpbmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXIgJXAgd2l0aCBVUkwgJyVz
JyBmcm9tIENhY2hlZFBhZ2UiLCBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCksIHByb3Zpc2lv
bmFsRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAg
ICBEb2N1bWVudExvYWRlciAqcHJvdmlzaW9uYWxMb2FkZXIgPSBwcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKCk7Ci0gICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVQYWdlQ2FjaGU6IEZyYW1lTG9h
ZGVyICVwIGxvYWRpbmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXIgJXAgd2l0aCBVUkwgJyVz
JyBmcm9tIENhY2hlZFBhZ2UgJXAiLCB0aGlzLCBwcm92aXNpb25hbExvYWRlciwgcHJvdmlzaW9u
YWxMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNhY2hlZFBhZ2UuZ2V0KCkp
OwotICAgIAogICAgIHByb3Zpc2lvbmFsTG9hZGVyLT5wcmVwYXJlRm9yTG9hZFN0YXJ0KCk7CiAK
ICAgICBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSA9IHRydWU7CiAKICAgICBwcm92aXNpb25hbExv
YWRlci0+c2V0Q29tbWl0dGVkKHRydWUpOwotICAgIGNvbW1pdFByb3Zpc2lvbmFsTG9hZChjYWNo
ZWRQYWdlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb21taXRQcm92aXNpb25hbExv
YWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oSGlz
dG9yeUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFjYW5DYWNoZVBhZ2UoKSB8fCBpdGVtLT5pc0lu
UGFnZUNhY2hlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhZ2VIaWRkZW4oKTsKLSAgICAK
LSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBSZWZQdHI8
Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IENhY2hlZFBhZ2U6OmNyZWF0ZShwYWdlKTsKLSAgICAg
ICAgcGFnZUNhY2hlKCktPmFkZChpdGVtLCBjYWNoZWRQYWdlLnJlbGVhc2UoKSk7Ci0gICAgfQot
fQotCiB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKCkKIHsKICAgICBtX3BhZ2VEaXNtaXNz
YWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IHRydWU7CkBAIC0zNjc2LDIxICszNDYwLDEwIEBACiB7
CiAgICAgLy8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNhbiB0cmF2ZXJzZSBhbnkgY2hpbGQg
aXRlbXMgYXMgY2hpbGQgZnJhbWVzIGxvYWQKICAgICBoaXN0b3J5KCktPnNldFByb3Zpc2lvbmFs
SXRlbShpdGVtKTsKLSAgICAKLSAgICAvLyBDaGVjayBpZiB3ZSdsbCBiZSB1c2luZyB0aGUgcGFn
ZSBjYWNoZS4gIFdlIG9ubHkgdXNlIHRoZSBwYWdlIGNhY2hlCi0gICAgLy8gaWYgb25lIGV4aXN0
cyBhbmQgaXQgaXMgbGVzcyB0aGFuIF9iYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbkludGVydmFs
Ci0gICAgLy8gc2Vjb25kcyBvbGQuICBJZiB0aGUgY2FjaGUgaXMgZXhwaXJlZCBpdCBnZXRzIGZs
dXNoZWQgaGVyZS4KLSAgICBpZiAoUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBwYWdl
Q2FjaGUoKS0+Z2V0KGl0ZW0pKSB7Ci0gICAgICAgIC8vIEZJWE1FOiAxODAwIHNob3VsZCBub3Qg
YmUgaGFyZGNvZGVkLCBpdCBzaG91bGQgY29tZSBmcm9tCi0gICAgICAgIC8vIFdlYktpdEJhY2tG
b3J3YXJkQ2FjaGVFeHBpcmF0aW9uSW50ZXJ2YWxLZXkgaW4gV2ViS2l0LgotICAgICAgICAvLyBP
ciB3ZSBzaG91bGQgcmVtb3ZlIFdlYktpdEJhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0aW9uSW50ZXJ2
YWxLZXkuCi0gICAgICAgIGlmIChjdXJyZW50VGltZSgpIC0gY2FjaGVkUGFnZS0+dGltZVN0YW1w
KCkgPD0gMTgwMCkgewotICAgICAgICAgICAgbG9hZFdpdGhEb2N1bWVudExvYWRlcihjYWNoZWRQ
YWdlLT5kb2N1bWVudExvYWRlcigpLCBsb2FkVHlwZSwgMCk7ICAgCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVz
dG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUg
ZW50cnkgaGFzIGV4cGlyZWQiLCBoaXN0b3J5KCktPnByb3Zpc2lvbmFsSXRlbSgpLT51cmwoKS5z
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUoaXRl
bSk7CisKKyAgICBpZiAoUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGVD
b250cm9sbGVyOjpnZXQoaXRlbSkpIHsKKyAgICAgICAgbG9hZFdpdGhEb2N1bWVudExvYWRlcihj
YWNoZWRQYWdlLT5kb2N1bWVudExvYWRlcigpLCBsb2FkVHlwZSwgMCk7ICAgCisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBLVVJMIGl0ZW1VUkwgPSBpdGVtLT51cmwoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1BhZ2VDYWNoZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9QYWdlQ2FjaGVDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xv
YWRlci9QYWdlQ2FjaGVDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VDYWNoZUNvbnRyb2xsZXJfaAorI2RlZmlu
ZSBQYWdlQ2FjaGVDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUGFnZTsKK2NsYXNzIERvY3VtZW50
TG9hZGVyOworY2xhc3MgRnJhbWVMb2FkZXI7CitjbGFzcyBIaXN0b3J5SXRlbTsKK2NsYXNzIFBh
Z2U7CisKK2NsYXNzIFBhZ2VDYWNoZUNvbnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q2FjaGVkUGFnZT4gZ2V0KEhpc3RvcnlJdGVtKik7
CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKEhpc3RvcnlJdGVtKik7CisgICAgc3RhdGljIGJvb2wg
Y2FuTG9hZEZyb21DYWNoZShIaXN0b3J5SXRlbSopOworICAgIHN0YXRpYyBib29sIGNhbkNhY2hl
UGFnZShQYWdlKik7CisgICAgc3RhdGljIHZvaWQgY2FjaGVQYWdlKFBhZ2UqLCBIaXN0b3J5SXRl
bSopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUoRnJhbWVMb2FkZXIqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFBhZ2VDYWNoZUNvbnRyb2xsZXJfaApJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkocmV2aXNpb24gNTk3ODUpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogICAgIGlmIChtX2dv
dEZpcnN0Qnl0ZSAmJiAhbV9jb21taXR0ZWQpIHsKICAgICAgICAgbV9jb21taXR0ZWQgPSB0cnVl
OwotICAgICAgICBmcmFtZUxvYWRlcigpLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7CisgICAg
ICAgIGZyYW1lTG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgIH0KIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1OTc4NSkKKysrIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgIHZv
aWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0IFN0
cmluZyYpOwogCi0gICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNo
ZWRQYWdlPik7CisgICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoKTsKICAgICBib29sIGlz
TG9hZGluZ0Zyb21DYWNoZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nRnJvbUNhY2hl
ZFBhZ2U7IH0KIAogICAgIGJvb2wgY29tbWl0dGluZ0ZpcnN0UmVhbExvYWQoKSBjb25zdCB7IHJl
dHVybiAhbV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50ICYmICFtX2NvbW1pdHRlZEZpcnN0
UmVhbERvY3VtZW50TG9hZDsgfQpAQCAtMzUxLDcgKzM1MSw5IEBACiAgICAgYm9vbCBpc0Rpc3Bs
YXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5aW5n
SW5pdGlhbEVtcHR5RG9jdW1lbnQ7IH0KIAogICAgIHZvaWQgY2xlYXIoYm9vbCBjbGVhcldpbmRv
d1Byb3BlcnRpZXMgPSB0cnVlLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cyA9IHRydWUsIGJvb2wg
Y2xlYXJGcmFtZVZpZXcgPSB0cnVlKTsKLSAgICAKKworICAgIGJvb2wgcXVpY2tSZWRpcmVjdENv
bWluZygpIGNvbnN0IHsgcmV0dXJuIG1fcXVpY2tSZWRpcmVjdENvbWluZzsgfQorCiAgICAgYm9v
bCBzaG91bGRDbG9zZSgpOwogCiBwcml2YXRlOgpAQCAtMzcyLDggKzM3NCw3IEBACiAgICAgdm9p
ZCBuYXZpZ2F0ZVdpdGhpbkRvY3VtZW50KEhpc3RvcnlJdGVtKik7CiAgICAgdm9pZCBuYXZpZ2F0
ZVRvRGlmZmVyZW50RG9jdW1lbnQoSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKICAgICAK
LSAgICBib29sIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwotICAgIHZvaWQg
Y2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKTsKKyAgICB2b2lkIGxvYWRQcm92
aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwogICAgIHZvaWQgcGFnZUhpZGRlbigpOwogCiAg
ICAgdm9pZCByZWNlaXZlZEZpcnN0RGF0YSgpOwpAQCAtNDE0LDcgKzQxNSw3IEBACiAgICAgdm9p
ZCBzZXRTdGF0ZShGcmFtZVN0YXRlKTsKIAogICAgIHZvaWQgY2xvc2VPbGREYXRhU291cmNlcygp
OwotICAgIHZvaWQgb3BlbihDYWNoZWRQYWdlJik7CisgICAgdm9pZCBwcmVwYXJlRm9yQ2FjaGVk
UGFnZVJlc3RvcmUoKTsKIAogICAgIHZvaWQgdXBkYXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJl
Y3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56640</attachid>
            <date>2010-05-20 15:17:09 -0700</date>
            <delta_ts>2010-05-20 16:03:13 -0700</delta_ts>
            <desc>Merged PageCacheController into PageCache</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>32112</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTg2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDUtMjAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgUGFnZUNhY2hlIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEZyYW1lTG9hZGVyIGFuZCBpbnRv
CisgICAgICAgIGEgc2VwYXJhdGUgUGFnZUNhY2hlQ29udHJvbGxlciBjbGFzcy4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkzODIKKworICAgICAg
ICBSZWZhY3RvciBvbmx5LCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBoaXN0b3J5L1Bh
Z2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWdlQ2FjaGVMb2dQcmVmaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFnZUNhY2hlTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0NhbkNh
Y2hlRnJhbWVEZWNpc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpsb2dDYW5DYWNoZVBhZ2VEZWNp
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmNhbkNhY2hlUGFnZUNvbnRhaW5p
bmdUaGlzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlOjpjYW5DYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2FjaGU6OmdldCk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuaDoKKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwcmVwYXJlRm9yQ2FjaGVkUGFnZVJl
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVy
TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFBy
b3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpuYXZpZ2F0ZVRvRGlmZmVyZW50RG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnF1aWNrUmVkaXJlY3RD
b21pbmcpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisKIDIwMTAtMDUt
MjAgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCShyZXZpc2lvbiA1OTg2
MikKKysrIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMSArMjYsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUu
aCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQmFja0Zv
cndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogCkBAIC00MCw2ICs0OCwxNzUgQEAKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBhdXRvcmVs
ZWFzZUludGVydmFsID0gMzsKIAorI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBTdHJpbmcmIHBhZ2VD
YWNoZUxvZ1ByZWZpeChpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgc3RhdGljIGludCBwcmV2aW91
c0luZGVudCA9IC0xOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBwcmVmaXgsICgp
KTsKKyAgICAKKyAgICBpZiAoaW5kZW50TGV2ZWwgIT0gcHJldmlvdXNJbmRlbnQpIHsgICAgCisg
ICAgICAgIHByZXZpb3VzSW5kZW50ID0gaW5kZW50TGV2ZWw7CisgICAgICAgIHByZWZpeC50cnVu
Y2F0ZSgwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2aW91c0luZGVudDsgKytp
KQorICAgICAgICAgICAgcHJlZml4ICs9ICIgICAgIjsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHByZWZpeDsKK30KKworc3RhdGljIHZvaWQgcGFnZUNhY2hlTG9nKGNvbnN0IFN0cmluZyYgcHJl
Zml4LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgTE9HKFBhZ2VDYWNoZSwgIiVzJXMi
LCBwcmVmaXgudXRmOCgpLmRhdGEoKSwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKK30KKyAgICAK
KyNkZWZpbmUgUENMT0coLi4uKSBwYWdlQ2FjaGVMb2cocGFnZUNhY2hlTG9nUHJlZml4KGluZGVu
dExldmVsKSwgU3RyaW5nOjpmb3JtYXQoX19WQV9BUkdTX18pKQorICAgIAorc3RhdGljIGJvb2wg
bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKEZyYW1lKiBmcmFtZSwgaW50IGluZGVudExldmVsKQor
eworICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIGZyYW1lcyB0aGF0IGhhdmUgYWN0dWFs
bHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCisgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y3Jl
YXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
S1VSTCBjdXJyZW50VVJMID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID8gZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsKKyAgICBpZiAo
Y3VycmVudFVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBQ
Q0xPRygiKy0tLSIpOworICAgIEtVUkwgbmV3VVJMID0gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNp
b25hbERvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgaWYgKCFuZXdVUkwuaXNFbXB0eSgpKQor
ICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIGZyYW1lIGNhbiBiZSBjYWNoZWQgbmF2aWdh
dGluZyBmcm9tICglcykgdG8gKCVzKToiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIG5ld1VSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIFBD
TE9HKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJhbWUgd2l0aCBVUkwgKCVzKSBjYW4gYmUgY2FjaGVk
OiIsIGN1cnJlbnRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgYm9vbCBj
YW5ub3RDYWNoZSA9IGZhbHNlOworICAgIAorICAgIGRvIHsKKyAgICAgICAgaWYgKCFmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtVGhl
cmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7CisgICAgICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051
bGwoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJv
ciIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKSB7CisgICAgICAgICAgICBQ
Q0xPRygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKKyAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT51cmwo
KS5wcm90b2NvbElzKCJodHRwcyIpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGlz
IEhUVFBTIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZyYW1lLT5kb21XaW5kb3coKSAmJiBmcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpIHsKKyAgICAgICAgICAgIFBD
TE9HKCIgICAtRnJhbWUgaGFzIGFuIHVubG9hZCBldmVudCBsaXN0ZW5lciIpOworICAgICAgICAg
ICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisjaWYgRU5BQkxFKERBVEFCQVNFKQor
ICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMoKSkgeworICAg
ICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgb3BlbiBkYXRhYmFzZSBoYW5kbGVzIik7Cisg
ICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIEVO
QUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAgaWYgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6
Omhhc1NoYXJlZFdvcmtlcnMoZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBQQ0xP
RygiICAgLUZyYW1lIGhhcyBhc3NvY2lhdGVkIFNoYXJlZFdvcmtlcnMiKTsKKyAgICAgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKSB7CisgICAgICAgICAgICBQQ0xPRygi
ICAgLUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5jdXJyZW50SXRlbSgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlz
dG9yeSBpdGVtIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+cXVpY2tSZWRpcmVjdENvbWluZygpKSB7Cisg
ICAgICAgICAgICBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOworICAgICAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkgeworICAg
ICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5nIGluIEFQ
SSBzZW5zZSIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmco
KSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBpbiB0aGUgbWlk
ZGxlIG9mIHN0b3BwaW5nIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90
IHN1c3BlY3QgaXRzIGFjdGl2ZSBET00gT2JqZWN0cyIpOworICAgICAgICAgICAgY2Fubm90Q2Fj
aGUgPSB0cnVlOworICAgICAgICB9CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKSkgeworICAgICAgICAgICAg
UENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNoZSIp
OworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKSkgewor
ICAgICAgICAgICAgUENMT0coIiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3Qg
YmUgY2FjaGVkIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7IAorICAgICAgICB9
CisgICAgfSB3aGlsZSAoZmFsc2UpOworICAgIAorICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJh
bWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5u
ZXh0U2libGluZygpKQorICAgICAgICBpZiAoIWxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihjaGls
ZCwgaW5kZW50TGV2ZWwgKyAxKSkKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAg
ICAKKyAgICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIgOiAi
IEZyYW1lIENBTiBiZSBjYWNoZWQiKTsKKyAgICBQQ0xPRygiKy0tLSIpOworICAgIAorICAgIHJl
dHVybiAhY2Fubm90Q2FjaGU7Cit9CisgICAgCitzdGF0aWMgdm9pZCBsb2dDYW5DYWNoZVBhZ2VE
ZWNpc2lvbihQYWdlKiBwYWdlKQoreworICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIG1h
aW4gZnJhbWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KKyAg
ICBpZiAocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBLVVJMIGN1cnJlbnRVUkwgPSBwYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPyBwYWdlLT5tYWluRnJhbWUo
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOworICAgIGlmIChj
dXJyZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCBpbmRl
bnRMZXZlbCA9IDA7ICAgIAorICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBh
Z2UgY2FuIGJlIGNhY2hlZDoiKTsKKyAgICAKKyAgICBib29sIGNhbm5vdENhY2hlID0gIWxvZ0Nh
bkNhY2hlRnJhbWVEZWNpc2lvbihwYWdlLT5tYWluRnJhbWUoKSwgMSk7CisgICAgCisgICAgRnJh
bWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5
cGUoKTsKKyAgICBpZiAocGFnZS0+bWFpbkZyYW1lKCktPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAg
ICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgYSBwYXJlbnQgZnJhbWUiKTsKKyAgICAgICAgY2Fu
bm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgp
LT5lbmFibGVkKCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3Qg
aXMgZGlzYWJsZWQiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoIShwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDApKSB7CisgICAgICAg
IFBDTE9HKCIgICAtVGhlIGJhY2svZm9yd2FyZCBsaXN0IGhhcyBhIDAgY2FwYWNpdHkiKTsKKyAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXBhZ2UtPnNldHRpbmdz
KCktPnVzZXNQYWdlQ2FjaGUoKSkgeworICAgICAgICBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mg
c2F5cyBiL2YgY2FjaGUgZGlzYWJsZWQiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwor
ICAgIH0KKyAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCkgeworICAgICAg
ICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIik7CisgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWRG
cm9tT3JpZ2luKSB7CisgICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQgZnJv
bSBvcmlnaW4iKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAo
bG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVNhbWUpIHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2Fk
IHR5cGUgaXM6IFNhbWUiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgUGFnZSBDQU5OT1QgYmUgY2FjaGVkXG4tLS0t
LS0tLSIgOiAiIFBhZ2UgQ0FOIGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsKK30KKyNlbmRpZiAKKwog
UGFnZUNhY2hlKiBwYWdlQ2FjaGUoKQogewogICAgIHN0YXRpYyBQYWdlQ2FjaGUqIHN0YXRpY1Bh
Z2VDYWNoZSA9IG5ldyBQYWdlQ2FjaGU7CkBAIC01NCw2ICsyMzEsNzQgQEAKICAgICAsIG1fYXV0
b3JlbGVhc2VUaW1lcih0aGlzLCAmUGFnZUNhY2hlOjpyZWxlYXNlQXV0b3JlbGVhc2VkUGFnZXNO
b3dPclJlc2NoZWR1bGUpCiB7CiB9CisgICAgCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdl
Q29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgZm9yIChGcmFtZSogY2hp
bGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50
cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250YWlu
aW5nVGhpc0ZyYW1lKGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKQorICAgICAg
ICAmJiBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5Eb2N1bWVudEVycm9y
KCkuaXNOdWxsKCkKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGV2ZXIgY2hhbmdlIHRoaXMgc28g
dGhhdCBmcmFtZXMgd2l0aCBwbHVnLWlucyB3aWxsIGJlIGNhY2hlZCwKKyAgICAgICAgLy8gd2Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBjYWNoZSBmcmFtZXMgdGhhdCBoYXZlIG91
dHN0YW5kaW5nIE5QT2JqZWN0cworICAgICAgICAvLyAob2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBw
bHVnLWluKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHBhdXNlL3Jlc3VtZSBhIE5ldHNjYXBl
IHBsdWctaW4sCisgICAgICAgIC8vIHRoZXkgd291bGQgbmVlZCB0byBiZSBkZXN0cm95ZWQgYW5k
IHRoZW4gcmVjcmVhdGVkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIHJlY3JlYXRl
CisgICAgICAgIC8vIHRoZSByaWdodCBOUE9iamVjdHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNTE5
NzA0MT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVyKCkt
PmNvbnRhaW5zUGx1Z2lucygpCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVyKCktPnVybCgpLnBy
b3RvY29sSXMoImh0dHBzIikKKyAgICAgICAgJiYgKCFmcmFtZS0+ZG9tV2luZG93KCkgfHwgIWZy
YW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2
ZW50KSkKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQo
KS0+aGFzT3BlbkRhdGFiYXNlcygpCisjZW5kaWYKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
CisgICAgICAgICYmICFTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZy
YW1lLT5kb2N1bWVudCgpKQorI2VuZGlmCisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+
dXNpbmdHZW9sb2NhdGlvbigpCisgICAgICAgICYmIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5jdXJyZW50SXRlbSgpCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVyKCktPnF1aWNrUmVkaXJl
Y3RDb21pbmcoKQorICAgICAgICAmJiAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpCisgICAgICAgICYmIGZyYW1lLT5kb2N1bWVudCgp
LT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNh
Y2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCisgICAgICAgIC8vIGFwcGxpY2F0
aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQgd29yay4KKyAg
ICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNh
Y2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKKyNlbmRpZgorI2lmIEVOQUJMRShXTUwp
CisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGFpbnNXTUxDb250ZW50KCkKKyAg
ICAgICAgJiYgIWZyYW1lLT5kb2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCk7CisjZW5kaWYKKyAg
ICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCk7Cit9Cisg
ICAgCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgbG9n
Q2FuQ2FjaGVQYWdlRGVjaXNpb24ocGFnZSk7CisjZW5kaWYKKyAgICAKKyAgICAvLyBDYWNoZSB0
aGUgcGFnZSwgaWYgcG9zc2libGUuCisgICAgLy8gRG9uJ3Qgd3JpdGUgdG8gdGhlIGNhY2hlIGlm
IGluIHRoZSBtaWRkbGUgb2YgYSByZWRpcmVjdCwgc2luY2Ugd2Ugd2lsbCB3YW50IHRvCisgICAg
Ly8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5kIHVwIG9uLgorICAgIC8vIE5vIHBvaW50IHdy
aXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVsb2FkIG9yIGxvYWRTYW1lLCBzaW5jZSB3ZSB3aWxs
IGp1c3Qgd3JpdGUKKyAgICAvLyBvdmVyIGl0IGFnYWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdl
LgorICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDg4NjU5Mj4gLSBXZSBzaG91bGQgd29y
ayBvdXQgdGhlIGNvbXBsZXhpdGllcyBvZiBjYWNoaW5nIHBhZ2VzIHdpdGggZnJhbWVzIGFzIHRo
ZXkKKyAgICAvLyBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFnZXMgb24gdGhlIHdlYiwgYW5k
IG9mdGVuIHRob3NlIHRoYXQgd291bGQgYmVuZWZpdCB0aGUgbW9zdCBmcm9tIGNhY2hpbmchCisg
ICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+
bG9hZFR5cGUoKTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNG
cmFtZShwYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCktPmVuYWJsZWQoKQorICAgICAgICAmJiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Y2FwYWNp
dHkoKSA+IDAKKyAgICAgICAgJiYgcGFnZS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpCisg
ICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWQgCisgICAgICAgICYmIGxv
YWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luCisgICAgICAgICYmIGxvYWRU
eXBlICE9IEZyYW1lTG9hZFR5cGVTYW1lOworfQogCiB2b2lkIFBhZ2VDYWNoZTo6c2V0Q2FwYWNp
dHkoaW50IGNhcGFjaXR5KQogewpAQCAtODAsMTAgKzMyNSwxMSBAQAogICAgIHJldHVybiBtX2F1
dG9yZWxlYXNlU2V0LnNpemUoKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6OmFkZChQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBwcnBJdGVtLCBQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2Up
Cit2b2lkIFBhZ2VDYWNoZTo6YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIFBh
Z2UqIHBhZ2UpCiB7CiAgICAgQVNTRVJUKHBycEl0ZW0pOwotICAgIEFTU0VSVChjYWNoZWRQYWdl
KTsKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNTRVJUKGNhbkNhY2hlKHBhZ2UpKTsKICAgICAK
ICAgICBIaXN0b3J5SXRlbSogaXRlbSA9IHBycEl0ZW0ucmVsZWFzZVJlZigpOyAvLyBCYWxhbmNl
ZCBpbiByZW1vdmUoKS4KIApAQCAtOTEsMTMgKzMzNywzMSBAQAogICAgIGlmIChpdGVtLT5tX2Nh
Y2hlZFBhZ2UpCiAgICAgICAgIHJlbW92ZShpdGVtKTsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFn
ZSA9IGNhY2hlZFBhZ2U7CisgICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gQ2FjaGVkUGFnZTo6Y3Jl
YXRlKHBhZ2UpOwogICAgIGFkZFRvTFJVTGlzdChpdGVtKTsKICAgICArK21fc2l6ZTsKICAgICAK
ICAgICBwcnVuZSgpOwogfQogCitDYWNoZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRl
bSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gaXRlbS0+bV9jYWNoZWRQYWdlLmdldCgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiAxODAwIHNob3VsZCBub3QgYmUgaGFyZGNvZGVkLCBpdCBz
aG91bGQgY29tZSBmcm9tCisgICAgICAgIC8vIFdlYktpdEJhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0
aW9uSW50ZXJ2YWxLZXkgaW4gV2ViS2l0LgorICAgICAgICAvLyBPciB3ZSBzaG91bGQgcmVtb3Zl
IFdlYktpdEJhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0aW9uSW50ZXJ2YWxLZXkuCisgICAgICAgIGlm
IChjdXJyZW50VGltZSgpIC0gY2FjaGVkUGFnZS0+dGltZVN0YW1wKCkgPD0gMTgwMCkKKyAgICAg
ICAgICAgIHJldHVybiBjYWNoZWRQYWdlLmdldCgpOworICAgICAgICAKKyAgICAgICAgTE9HKFBh
Z2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2Fj
aGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0tPnVybCgpLnN0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtKTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0
ZW0qIGl0ZW0pCiB7CiAgICAgLy8gU2FmZWx5IGlnbm9yZSBhdHRlbXB0cyB0byByZW1vdmUgaXRl
bXMgbm90IGluIHRoZSBjYWNoZS4KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgJKHJldmlzaW9uIDU5ODYy
KQorKysgV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
OCArMzUsMjIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENhY2hlZFBhZ2U7
CisgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CisgICAgY2xhc3MgUGFn
ZTsKICAgICAKICAgICBjbGFzcyBQYWdlQ2FjaGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIFBhZ2VDYWNoZSogcGFnZUNhY2hlKCk7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZShQYWdlKik7CiAKICAgICAgICAgdm9pZCBz
ZXRDYXBhY2l0eShpbnQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUKICAgICAgICAgaW50
IGNhcGFjaXR5KCkgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQogICAgICAgICAKLSAgICAgICAgdm9p
ZCBhZGQoUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4sIFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4pOyAv
LyBQcnVuZXMgaWYgY2FwYWNpdHkoKSBpcyBleGNlZWRlZC4KKyAgICAgICAgdm9pZCBhZGQoUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4sIFBhZ2UqKTsgLy8gUHJ1bmVzIGlmIGNhcGFjaXR5KCkgaXMg
ZXhjZWVkZWQuCiAgICAgICAgIHZvaWQgcmVtb3ZlKEhpc3RvcnlJdGVtKik7Ci0gICAgICAgIENh
Y2hlZFBhZ2UqIGdldChIaXN0b3J5SXRlbSogaXRlbSkgeyByZXR1cm4gaXRlbSA/IGl0ZW0tPm1f
Y2FjaGVkUGFnZS5nZXQoKSA6IDA7IH0KKyAgICAgICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJ
dGVtKiBpdGVtKTsKIAogICAgICAgICB2b2lkIHJlbGVhc2VBdXRvcmVsZWFzZWRQYWdlc05vdygp
OwogICAgICAgICAKQEAgLTU5LDYgKzYzLDggQEAKIAogICAgICAgICBQYWdlQ2FjaGUoKTsgLy8g
VXNlIHBhZ2VDYWNoZSgpIGluc3RlYWQuCiAgICAgICAgIH5QYWdlQ2FjaGUoKTsgLy8gTm90IGlt
cGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAt
LSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorICAgICAgICAKKyAgICAgICAg
c3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSopOwogCiAg
ICAgICAgIHZvaWQgYWRkVG9MUlVMaXN0KEhpc3RvcnlJdGVtKik7IC8vIEFkZHMgdG8gdGhlIGhl
YWQgb2YgdGhlIGxpc3QuCiAgICAgICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0
ZW0qKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDU5ODYyKQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjgsNyArMjY4LDcgQEAKICAgICAgICAgbG9hZGVyLT5zZXRGb3JjZWRTYW5kYm94RmxhZ3MoU2Fu
ZGJveEFsbCk7CiAgICAgICAgIGxvYWRlci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBN
YWtlIHN1cmUgdGhlIERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKICAgICAgICAgbG9hZGVyLT5w
b2xpY3lDaGVja2VyKCktPmNhbmNlbENoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNr
cwotICAgICAgICBsb2FkZXItPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICAgICAgbG9h
ZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoKTsKICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+
c2V0TUlNRVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+
YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAogICAgICAgICBsb2Fk
ZXItPndyaXRlcigpLT5hZGREYXRhKGRhdGEoKS0+ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA1OTg2MikKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMywyMDggKzE0MTMsNiBA
QAogfQogI2VuZGlmCiAKLWJvb2wgRnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUoKQotewotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgaWYgKCFjaGlsZC0+bG9hZGVyKCktPmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgICAgICAg
ICAKLSAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlcgotICAgICAgICAmJiBtX2RvY3VtZW50TG9h
ZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3
ZSBldmVyIGNoYW5nZSB0aGlzIHNvIHRoYXQgZnJhbWVzIHdpdGggcGx1Zy1pbnMgd2lsbCBiZSBj
YWNoZWQsCi0gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgY2Fj
aGUgZnJhbWVzIHRoYXQgaGF2ZSBvdXRzdGFuZGluZyBOUE9iamVjdHMKLSAgICAgICAgLy8gKG9i
amVjdHMgY3JlYXRlZCBieSB0aGUgcGx1Zy1pbikuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBw
YXVzZS9yZXN1bWUgYSBOZXRzY2FwZSBwbHVnLWluLAotICAgICAgICAvLyB0aGV5IHdvdWxkIG5l
ZWQgdG8gYmUgZGVzdHJveWVkIGFuZCB0aGVuIHJlY3JlYXRlZCwgYW5kIHRoZXJlIGlzIG5vIHdh
eSB0aGF0IHdlIGNhbiByZWNyZWF0ZQotICAgICAgICAvLyB0aGUgcmlnaHQgTlBPYmplY3RzLiBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTcwNDE+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAg
ICAmJiAhbV9jb250YWluc1BsdWdJbnMKLSAgICAgICAgJiYgIW1fVVJMLnByb3RvY29sSXMoImh0
dHBzIikKLSAgICAgICAgJiYgKCFtX2ZyYW1lLT5kb21XaW5kb3coKSB8fCAhbV9mcmFtZS0+ZG9t
V2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCi0j
aWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFz
T3BlbkRhdGFiYXNlcygpCi0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAg
ICAgICYmICFTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKG1fZnJhbWUt
PmRvY3VtZW50KCkpCi0jZW5kaWYKLSAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPnVz
aW5nR2VvbG9jYXRpb24oKQotICAgICAgICAmJiBoaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkKLSAg
ICAgICAgJiYgIW1fcXVpY2tSZWRpcmVjdENvbWluZwotICAgICAgICAmJiAhbV9kb2N1bWVudExv
YWRlci0+aXNMb2FkaW5nSW5BUElTZW5zZSgpCi0gICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVy
LT5pc1N0b3BwaW5nKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHMoKQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1l
cyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZAotICAgICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4g
PHJkYXI6Ly9wcm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdvcmsuCi0gICAgICAgICYmIG1f
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2Fj
aGUoKQotI2VuZGlmCi0jaWYgRU5BQkxFKFdNTCkKLSAgICAgICAgJiYgIWZyYW1lQ29udGFpbnNX
TUxDb250ZW50KG1fZnJhbWUpCi0jZW5kaWYKLSAgICAgICAgJiYgbV9jbGllbnQtPmNhbkNhY2hl
UGFnZSgpCi0gICAgICAgIDsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlKCkK
LXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oKTsKLSNlbmRp
ZgotICAgIAotICAgIC8vIENhY2hlIHRoZSBwYWdlLCBpZiBwb3NzaWJsZS4KLSAgICAvLyBEb24n
dCB3cml0ZSB0byB0aGUgY2FjaGUgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZGlyZWN0LCBzaW5j
ZSB3ZSB3aWxsIHdhbnQgdG8KLSAgICAvLyBzdG9yZSB0aGUgZmluYWwgcGFnZSB3ZSBlbmQgdXAg
b24uCi0gICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2FjaGUgb24gYSByZWxvYWQgb3Ig
bG9hZFNhbWUsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZQotICAgIC8vIG92ZXIgaXQgYWdhaW4g
d2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCi0gICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80
ODg2NTkyPiAtIFdlIHNob3VsZCB3b3JrIG91dCB0aGUgY29tcGxleGl0aWVzIG9mIGNhY2hpbmcg
cGFnZXMgd2l0aCBmcmFtZXMgYXMgdGhleQotICAgIC8vIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGlu
ZyBwYWdlcyBvbiB0aGUgd2ViLCBhbmQgb2Z0ZW4gdGhvc2UgdGhhdCB3b3VsZCBiZW5lZml0IHRo
ZSBtb3N0IGZyb20gY2FjaGluZyEKLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gdGhpcy0+
bG9hZFR5cGUoKTsKLSAgICAKLSAgICByZXR1cm4gIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkK
LSAgICAgICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpCi0gICAgICAgICYm
IG1fZnJhbWUtPnBhZ2UoKQotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJk
TGlzdCgpLT5lbmFibGVkKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2Fy
ZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDAKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5zZXR0
aW5ncygpLT51c2VzUGFnZUNhY2hlKCkKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2Fk
VHlwZVJlbG9hZCAKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZy
b21PcmlnaW4KLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVNhbWUKLSAgICAg
ICAgOwotfQotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIFN0cmluZyYgcGFnZUNhY2hlTG9nUHJl
Zml4KGludCBpbmRlbnRMZXZlbCkKLXsKLSAgICBzdGF0aWMgaW50IHByZXZpb3VzSW5kZW50ID0g
LTE7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHByZWZpeCwgKCkpOwotICAgIAot
ICAgIGlmIChpbmRlbnRMZXZlbCAhPSBwcmV2aW91c0luZGVudCkgeyAgICAKLSAgICAgICAgcHJl
dmlvdXNJbmRlbnQgPSBpbmRlbnRMZXZlbDsKLSAgICAgICAgcHJlZml4LnRydW5jYXRlKDApOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZpb3VzSW5kZW50OyArK2kpCi0gICAgICAg
ICAgICBwcmVmaXggKz0gIiAgICAiOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJlZml4Owot
fQotCi1zdGF0aWMgdm9pZCBwYWdlQ2FjaGVMb2coY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBMT0coUGFnZUNhY2hlLCAiJXMlcyIsIHByZWZpeC51
dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotfQotCi0jZGVmaW5lIFBDTE9H
KC4uLikgcGFnZUNhY2hlTG9nKHBhZ2VDYWNoZUxvZ1ByZWZpeChpbmRlbnRMZXZlbCksIFN0cmlu
Zzo6Zm9ybWF0KF9fVkFfQVJHU19fKSkKLQotdm9pZCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVQ
YWdlRGVjaXNpb24oKQotewotICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIG1haW4gZnJh
bWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KLSAgICBpZiAo
bV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgS1VS
TCBjdXJyZW50VVJMID0gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPnVybCgp
IDogS1VSTCgpOwotICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IGluZGVudExldmVsID0gMDsKLSAgICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRl
cm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7Ci0KLSAgICBib29sIGNhbm5vdENhY2hl
ID0gIWxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbigxKTsKLSAgICAgICAgCi0gICAgRnJhbWVMb2Fk
VHlwZSBsb2FkVHlwZSA9IHRoaXMtPmxvYWRUeXBlKCk7Ci0gICAgZG8gewotICAgICAgICBpZiAo
bV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFt
ZSBoYXMgYSBwYXJlbnQgZnJhbWUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlm
ICghbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5v
IFBhZ2Ugb2JqZWN0Iik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKS0+YmFj
a0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUg
YmFjay9mb3J3YXJkIGxpc3QgaXMgZGlzYWJsZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0g
ICAgICAgIGlmICghKG1fZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCktPmNhcGFjaXR5
KCkgPiAwKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3Qg
aGFzIGEgMCBjYXBhY2l0eSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFt
X2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKSkKLSAgICAgICAgICAg
IHsgUENMT0coIiAgIC1QYWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7IGNh
bm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlw
ZVJlbG9hZCkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCIp
OyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9h
ZFR5cGVSZWxvYWRGcm9tT3JpZ2luKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUxvYWQgdHlw
ZSBpczogUmVsb2FkIGZyb20gb3JpZ2luIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAg
ICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVNhbWUpCi0gICAgICAgICAgICB7IFBDTE9H
KCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgIH0g
d2hpbGUgKGZhbHNlKTsKLSAgICAKLSAgICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgUGFnZSBDQU5O
T1QgYmUgY2FjaGVkXG4tLS0tLS0tLSIgOiAiIFBhZ2UgQ0FOIGJlIGNhY2hlZFxuLS0tLS0tLS0i
KTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGludCBp
bmRlbnRMZXZlbCkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBmcmFtZXMgdGhh
dCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChtX2NyZWF0
aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBLVVJM
IGN1cnJlbnRVUkwgPSBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRlci0+dXJsKCkg
OiBLVVJMKCk7Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBQQ0xPRygiKy0tLSIpOwotICAgIEtVUkwgbmV3VVJMID0gbV9wcm92aXNp
b25hbERvY3VtZW50TG9hZGVyID8gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT51cmwoKSA6
IEtVUkwoKTsKLSAgICBpZiAoIW5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIFBDTE9HKCIgRGV0
ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCVzKSB0byAo
JXMpOiIsIGN1cnJlbnRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbmV3VVJMLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBp
ZiBzdWJmcmFtZSB3aXRoIFVSTCAoJXMpIGNhbiBiZSBjYWNoZWQ6IiwgY3VycmVudFVSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgCi0gICAgYm9vbCBjYW5ub3RDYWNoZSA9IGZh
bHNlOwotCi0gICAgZG8gewotICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAg
ICAgICAgIFBDTE9HKCIgICAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7Ci0g
ICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCku
aXNOdWxsKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtTWFpbiBkb2N1bWVudCBoYXMgYW4g
ZXJyb3IiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX2NvbnRhaW5zUGx1
Z0lucykKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBwbHVnaW5zIik7
IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9VUkwucHJvdG9jb2xJcygiaHR0
cHMiKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBpcyBIVFRQUyIpOyBjYW5ub3RD
YWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpICYmIG1fZnJh
bWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZl
bnQpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhbiB1bmxvYWQgZXZlbnQg
bGlzdGVuZXIiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jaWYgRU5BQkxFKERBVEFCQVNFKQot
ICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpKQotICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBvcGVuIGRhdGFiYXNlIGhhbmRsZXMiKTsg
Y2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
Ci0gICAgICAgIGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKG1f
ZnJhbWUtPmRvY3VtZW50KCkpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBh
c3NvY2lhdGVkIFNoYXJlZFdvcmtlcnMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYK
LSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2VvbG9jYXRpb24oKSkKLSAg
ICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSB1c2VzIEdlb2xvY2F0aW9uIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAoIWhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkKLSAg
ICAgICAgICAgIHsgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOyBjYW5ub3RD
YWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fcXVpY2tSZWRpcmVjdENvbWluZykKLSAgICAg
ICAgICAgIHsgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQ
SVNlbnNlKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3Rp
bGwgbG9hZGluZyBpbiBBUEkgc2Vuc2UiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAg
IGlmIChtX2RvY3VtZW50TG9hZGVyLT5pc1N0b3BwaW5nKCkpCi0gICAgICAgICAgICB7IFBDTE9H
KCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOyBjYW5u
b3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5T
dXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBk
b2N1bWVudCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAg
ICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2Fj
aGVJblBhZ2VDYWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExv
YWRlciB1c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQot
I2VuZGlmCi0gICAgICAgIGlmICghbV9jbGllbnQtPmNhbkNhY2hlUGFnZSgpKQotICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNo
ZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgfSB3aGlsZSAoZmFsc2UpOwotCi0gICAg
Zm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKCFjaGls
ZC0+bG9hZGVyKCktPmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihpbmRlbnRMZXZlbCArIDEpKQot
ICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENh
Y2hlID8gIiBGcmFtZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIp
OwotICAgIFBDTE9HKCIrLS0tIik7Ci0KLSAgICByZXR1cm4gIWNhbm5vdENhY2hlOwotfQotI2Vu
ZGlmCi0KIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlGb3JDb29raWVzKCkKIHsK
ICAgICBpZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKQEAgLTIzNDYsOSArMjE0NCw5IEBA
CiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZUNvbXBsZXRlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
cjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVk
UGFnZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiB7Ci0gICAg
UmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBwcnBDYWNoZWRQYWdlOworICAgIFJlZlB0
cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgPyBwYWdl
Q2FjaGUoKS0+Z2V0KGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCkpIDogMDsKICAgICBSZWZQ
dHI8RG9jdW1lbnRMb2FkZXI+IHBkbCA9IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcjsKIAog
ICAgIExPRyhQYWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29tbWl0IHBy
b3Zpc2lvbmFsIGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICclcyciLCBt
X2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX1VSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCAKQEAgLTIzNTYsNyArMjE1NCwxMiBAQAogCiAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2FjaGUgdGhlIHBhZ2Ugd2UgYXJlIG5hdmlnYXRpbmcg
YXdheSBmcm9tIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICAvLyBXZSBhcmUgZG9p
bmcgdGhpcyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGF0IGEgbmV3IHBhZ2UgaXMg
YWJvdXQgdG8gYmUgbG9hZGVkLgotICAgIGNhY2hlUGFnZUZvckhpc3RvcnlJdGVtKGhpc3Rvcnko
KS0+Y3VycmVudEl0ZW0oKSk7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAg
ICBIaXN0b3J5SXRlbSogaXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKKyAgICBpZiAo
UGFnZUNhY2hlOjpjYW5DYWNoZShwYWdlKSAmJiAhaXRlbS0+aXNJblBhZ2VDYWNoZSgpKSB7Cisg
ICAgICAgIHBhZ2VIaWRkZW4oKTsKKyAgICAgICAgcGFnZUNhY2hlKCktPmFkZChpdGVtLCBwYWdl
KTsKKyAgICB9CiAgICAgCiAgICAgaWYgKG1fbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJlcGxh
Y2UpCiAgICAgICAgIGNsb3NlT2xkRGF0YVNvdXJjZXMoKTsKQEAgLTIzNzMsOSArMjE3NiwxMSBA
QAogICAgIGlmIChtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlvbikKICAgICAgICAgY2xpZW50UmVk
aXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGZhbHNlKTsKICAgICAKLSAgICBpZiAoY2FjaGVkUGFn
ZSAmJiBjYWNoZWRQYWdlLT5kb2N1bWVudCgpKQotICAgICAgICBvcGVuKCpjYWNoZWRQYWdlKTsK
LSAgICBlbHNlIHsgICAgICAgIAorICAgIGlmIChjYWNoZWRQYWdlICYmIGNhY2hlZFBhZ2UtPmRv
Y3VtZW50KCkpIHsKKyAgICAgICAgcHJlcGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKCk7CisgICAg
ICAgIGNhY2hlZFBhZ2UtPnJlc3RvcmUobV9mcmFtZS0+cGFnZSgpKTsKKyAgICAgICAgY2hlY2tD
b21wbGV0ZWQoKTsKKyAgICB9IGVsc2UgeyAgICAgICAgCiAgICAgICAgIEtVUkwgdXJsID0gcGRs
LT5zdWJzdGl0dXRlRGF0YSgpLnJlc3BvbnNlVVJMKCk7CiAgICAgICAgIGlmICh1cmwuaXNFbXB0
eSgpKQogICAgICAgICAgICAgdXJsID0gcGRsLT51cmwoKTsKQEAgLTI1OTEsNyArMjM5Niw3IEBA
CiAgICAgbV9jbGllbnQtPnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoZmFsc2UpOyAvLyBzdG9w
IGdpdmluZyBvdXQgdGhlIGFjdHVhbCBET01Eb2N1bWVudCB0byBvYnNlcnZlcnMKIH0KIAotdm9p
ZCBGcmFtZUxvYWRlcjo6b3BlbihDYWNoZWRQYWdlJiBjYWNoZWRQYWdlKQordm9pZCBGcmFtZUxv
YWRlcjo6cHJlcGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKCkKIHsKICAgICBBU1NFUlQoIW1fZnJh
bWUtPnRyZWUoKS0+cGFyZW50KCkpOwogICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOwpAQCAt
MjYwNywxMCArMjQxMiw2IEBACiAgICAgICAgIG1fZnJhbWUtPnNldEpTU3RhdHVzQmFyVGV4dChT
dHJpbmcoKSk7CiAgICAgICAgIG1fZnJhbWUtPnNldEpTRGVmYXVsdFN0YXR1c0JhclRleHQoU3Ry
aW5nKCkpOwogICAgIH0KLQotICAgIGNhY2hlZFBhZ2UucmVzdG9yZShtX2ZyYW1lLT5wYWdlKCkp
OwotCi0gICAgY2hlY2tDb21wbGV0ZWQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6b3BlbihD
YWNoZWRGcmFtZUJhc2UmIGNhY2hlZEZyYW1lKQpAQCAtMzQ2NSw4ICszMjY2LDEwIEBACiAKICAg
ICBzZXRQb2xpY3lEb2N1bWVudExvYWRlcigwKTsKIAotICAgIGlmIChpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUodHlwZSkgJiYgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkpCisgICAg
aWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0eXBlKSAmJiBoaXN0b3J5KCktPnByb3Zpc2lvbmFs
SXRlbSgpLT5pc0luUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgbG9hZFByb3Zpc2lvbmFsSXRlbUZy
b21DYWNoZWRQYWdlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoZm9ybVN0
YXRlKQogICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSgmUG9saWN5Q2hl
Y2tlcjo6Y29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSwgZm9ybVN0YXRlKTsKQEAgLTM1
NzksMzggKzMzODIsMTkgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVMb2Fk
ZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpCit2b2lkIEZyYW1lTG9hZGVy
Ojpsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKQogewotICAgIFJlZlB0cjxDYWNo
ZWRQYWdlPiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChoaXN0b3J5KCktPnByb3Zpc2lv
bmFsSXRlbSgpKTsKLSAgICBpZiAoIWNhY2hlZFBhZ2UgfHwgIWNhY2hlZFBhZ2UtPmRvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBEb2N1bWVudExvYWRlciogcHJvdmlzaW9u
YWxMb2FkZXIgPSBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCk7CisgICAgTE9HKFBhZ2VDYWNo
ZSwgIldlYkNvcmVQYWdlQ2FjaGU6IExvYWRpbmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXIg
JXAgd2l0aCBVUkwgJyVzJyBmcm9tIENhY2hlZFBhZ2UiLCBwcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyKCksIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICBEb2N1bWVudExvYWRlciAqcHJvdmlzaW9uYWxMb2FkZXIgPSBwcm92
aXNpb25hbERvY3VtZW50TG9hZGVyKCk7Ci0gICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVQYWdl
Q2FjaGU6IEZyYW1lTG9hZGVyICVwIGxvYWRpbmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXIg
JXAgd2l0aCBVUkwgJyVzJyBmcm9tIENhY2hlZFBhZ2UgJXAiLCB0aGlzLCBwcm92aXNpb25hbExv
YWRlciwgcHJvdmlzaW9uYWxMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNh
Y2hlZFBhZ2UuZ2V0KCkpOwotICAgIAogICAgIHByb3Zpc2lvbmFsTG9hZGVyLT5wcmVwYXJlRm9y
TG9hZFN0YXJ0KCk7CiAKICAgICBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSA9IHRydWU7CiAKICAg
ICBwcm92aXNpb25hbExvYWRlci0+c2V0Q29tbWl0dGVkKHRydWUpOwotICAgIGNvbW1pdFByb3Zp
c2lvbmFsTG9hZChjYWNoZWRQYWdlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb21t
aXRQcm92aXNpb25hbExvYWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2FjaGVQYWdlRm9y
SGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFjYW5DYWNoZVBhZ2Uo
KSB8fCBpdGVtLT5pc0luUGFnZUNhY2hlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhZ2VI
aWRkZW4oKTsKLSAgICAKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewot
ICAgICAgICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IENhY2hlZFBhZ2U6OmNyZWF0
ZShwYWdlKTsKLSAgICAgICAgcGFnZUNhY2hlKCktPmFkZChpdGVtLCBjYWNoZWRQYWdlLnJlbGVh
c2UoKSk7Ci0gICAgfQotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKCkKIHsKICAg
ICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IHRydWU7CkBAIC0zNjc2LDIx
ICszNDYwLDEwIEBACiB7CiAgICAgLy8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNhbiB0cmF2
ZXJzZSBhbnkgY2hpbGQgaXRlbXMgYXMgY2hpbGQgZnJhbWVzIGxvYWQKICAgICBoaXN0b3J5KCkt
PnNldFByb3Zpc2lvbmFsSXRlbShpdGVtKTsKLSAgICAKLSAgICAvLyBDaGVjayBpZiB3ZSdsbCBi
ZSB1c2luZyB0aGUgcGFnZSBjYWNoZS4gIFdlIG9ubHkgdXNlIHRoZSBwYWdlIGNhY2hlCi0gICAg
Ly8gaWYgb25lIGV4aXN0cyBhbmQgaXQgaXMgbGVzcyB0aGFuIF9iYWNrRm9yd2FyZENhY2hlRXhw
aXJhdGlvbkludGVydmFsCi0gICAgLy8gc2Vjb25kcyBvbGQuICBJZiB0aGUgY2FjaGUgaXMgZXhw
aXJlZCBpdCBnZXRzIGZsdXNoZWQgaGVyZS4KKwogICAgIGlmIChSZWZQdHI8Q2FjaGVkUGFnZT4g
Y2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQoaXRlbSkpIHsKLSAgICAgICAgLy8gRklYTUU6
IDE4MDAgc2hvdWxkIG5vdCBiZSBoYXJkY29kZWQsIGl0IHNob3VsZCBjb21lIGZyb20KLSAgICAg
ICAgLy8gV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleSBpbiBXZWJL
aXQuCi0gICAgICAgIC8vIE9yIHdlIHNob3VsZCByZW1vdmUgV2ViS2l0QmFja0ZvcndhcmRDYWNo
ZUV4cGlyYXRpb25JbnRlcnZhbEtleS4KLSAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBjYWNo
ZWRQYWdlLT50aW1lU3RhbXAoKSA8PSAxODAwKSB7Ci0gICAgICAgICAgICBsb2FkV2l0aERvY3Vt
ZW50TG9hZGVyKGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCksIGxvYWRUeXBlLCAwKTsgICAK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTE9HKFBh
Z2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2Fj
aGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGhpc3RvcnkoKS0+cHJvdmlzaW9u
YWxJdGVtKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcGFnZUNh
Y2hlKCktPnJlbW92ZShpdGVtKTsKKyAgICAgICAgbG9hZFdpdGhEb2N1bWVudExvYWRlcihjYWNo
ZWRQYWdlLT5kb2N1bWVudExvYWRlcigpLCBsb2FkVHlwZSwgMCk7ICAgCisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBLVVJMIGl0ZW1VUkwgPSBpdGVtLT51cmwoKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDU5ODYyKQorKysgV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsK
ICAgICBpZiAobV9nb3RGaXJzdEJ5dGUgJiYgIW1fY29tbWl0dGVkKSB7CiAgICAgICAgIG1fY29t
bWl0dGVkID0gdHJ1ZTsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y29tbWl0UHJvdmlzaW9uYWxM
b2FkKDApOworICAgICAgICBmcmFtZUxvYWRlcigpLT5jb21taXRQcm92aXNpb25hbExvYWQoKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNTk4NjIpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNyArMzA3
LDcgQEAKICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SWNv
blVSTChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKFBh
c3NSZWZQdHI8Q2FjaGVkUGFnZT4pOworICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7
CiAgICAgYm9vbCBpc0xvYWRpbmdGcm9tQ2FjaGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9h
ZGluZ0Zyb21DYWNoZWRQYWdlOyB9CiAKICAgICBib29sIGNvbW1pdHRpbmdGaXJzdFJlYWxMb2Fk
KCkgY29uc3QgeyByZXR1cm4gIW1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiAhbV9j
b21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQ7IH0KQEAgLTM1MSw3ICszNTEsOSBAQAogICAg
IGJvb2wgaXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2lzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50OyB9CiAKICAgICB2b2lkIGNsZWFyKGJv
b2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzID0gdHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMg
PSB0cnVlLCBib29sIGNsZWFyRnJhbWVWaWV3ID0gdHJ1ZSk7Ci0gICAgCisKKyAgICBib29sIHF1
aWNrUmVkaXJlY3RDb21pbmcoKSBjb25zdCB7IHJldHVybiBtX3F1aWNrUmVkaXJlY3RDb21pbmc7
IH0KKwogICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKIAogcHJpdmF0ZToKQEAgLTM3Miw4ICszNzQs
NyBAQAogICAgIHZvaWQgbmF2aWdhdGVXaXRoaW5Eb2N1bWVudChIaXN0b3J5SXRlbSopOwogICAg
IHZvaWQgbmF2aWdhdGVUb0RpZmZlcmVudERvY3VtZW50KEhpc3RvcnlJdGVtKiwgRnJhbWVMb2Fk
VHlwZSk7CiAgICAgCi0gICAgYm9vbCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2Uo
KTsKLSAgICB2b2lkIGNhY2hlUGFnZUZvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKik7CisgICAg
dm9pZCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKICAgICB2b2lkIHBhZ2VI
aWRkZW4oKTsKIAogICAgIHZvaWQgcmVjZWl2ZWRGaXJzdERhdGEoKTsKQEAgLTQxNCw3ICs0MTUs
NyBAQAogICAgIHZvaWQgc2V0U3RhdGUoRnJhbWVTdGF0ZSk7CiAKICAgICB2b2lkIGNsb3NlT2xk
RGF0YVNvdXJjZXMoKTsKLSAgICB2b2lkIG9wZW4oQ2FjaGVkUGFnZSYpOworICAgIHZvaWQgcHJl
cGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKCk7CiAKICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlBZnRl
ckNsaWVudFJlZGlyZWN0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56643</attachid>
            <date>2010-05-20 16:03:13 -0700</date>
            <delta_ts>2010-06-02 02:26:45 -0700</delta_ts>
            <desc>Hopefully with all the necessary #includes this time</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>32159</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTg2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDUtMjAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgUGFnZUNhY2hlIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEZyYW1lTG9hZGVyIGFuZCBpbnRv
CisgICAgICAgIGEgc2VwYXJhdGUgUGFnZUNhY2hlQ29udHJvbGxlciBjbGFzcy4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkzODIKKworICAgICAg
ICBSZWZhY3RvciBvbmx5LCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBoaXN0b3J5L1Bh
Z2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWdlQ2FjaGVMb2dQcmVmaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFnZUNhY2hlTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ0NhbkNh
Y2hlRnJhbWVEZWNpc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpsb2dDYW5DYWNoZVBhZ2VEZWNp
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmNhbkNhY2hlUGFnZUNvbnRhaW5p
bmdUaGlzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlOjpjYW5DYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2FjaGU6OmdldCk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuaDoKKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwcmVwYXJlRm9yQ2FjaGVkUGFnZVJl
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVy
TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFBy
b3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpuYXZpZ2F0ZVRvRGlmZmVyZW50RG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnF1aWNrUmVkaXJlY3RD
b21pbmcpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisKIDIwMTAtMDUt
MjAgIEp1c3RpbiBTY2h1aCAgPGpzY2h1aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCShyZXZpc2lvbiA1OTg2
MikKKysrIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMSArMjYsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUu
aCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQmFja0Zv
cndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgi
CisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhpc3Rv
cnlJdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNp
bmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAg
LTQwLDYgKzUwLDE3NSBAQAogCiBzdGF0aWMgY29uc3QgZG91YmxlIGF1dG9yZWxlYXNlSW50ZXJ2
YWwgPSAzOwogCisjaWZuZGVmIE5ERUJVRworc3RhdGljIFN0cmluZyYgcGFnZUNhY2hlTG9nUHJl
Zml4KGludCBpbmRlbnRMZXZlbCkKK3sKKyAgICBzdGF0aWMgaW50IHByZXZpb3VzSW5kZW50ID0g
LTE7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHByZWZpeCwgKCkpOworICAgIAor
ICAgIGlmIChpbmRlbnRMZXZlbCAhPSBwcmV2aW91c0luZGVudCkgeyAgICAKKyAgICAgICAgcHJl
dmlvdXNJbmRlbnQgPSBpbmRlbnRMZXZlbDsKKyAgICAgICAgcHJlZml4LnRydW5jYXRlKDApOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZpb3VzSW5kZW50OyArK2kpCisgICAgICAg
ICAgICBwcmVmaXggKz0gIiAgICAiOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcHJlZml4Owor
fQorCitzdGF0aWMgdm9pZCBwYWdlQ2FjaGVMb2coY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBMT0coUGFnZUNhY2hlLCAiJXMlcyIsIHByZWZpeC51
dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOworfQorICAgIAorI2RlZmluZSBQ
Q0xPRyguLi4pIHBhZ2VDYWNoZUxvZyhwYWdlQ2FjaGVMb2dQcmVmaXgoaW5kZW50TGV2ZWwpLCBT
dHJpbmc6OmZvcm1hdChfX1ZBX0FSR1NfXykpCisgICAgCitzdGF0aWMgYm9vbCBsb2dDYW5DYWNo
ZUZyYW1lRGVjaXNpb24oRnJhbWUqIGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgLy8g
T25seSBib3RoZXIgbG9nZ2luZyBmb3IgZnJhbWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQg
YW5kIGhhdmUgY29udGVudC4KKyAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jcmVhdGluZ0luaXRp
YWxFbXB0eURvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBLVVJMIGN1cnJl
bnRVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOworICAgIGlmIChjdXJyZW50VVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFBDTE9HKCIrLS0t
Iik7CisgICAgS1VSTCBuZXdVUkwgPSBmcmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKSA/IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigp
LT51cmwoKSA6IEtVUkwoKTsKKyAgICBpZiAoIW5ld1VSTC5pc0VtcHR5KCkpCisgICAgICAgIFBD
TE9HKCIgRGV0ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20g
KCVzKSB0byAoJXMpOiIsIGN1cnJlbnRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbmV3VVJM
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgUENMT0coIiBEZXRl
cm1pbmluZyBpZiBzdWJmcmFtZSB3aXRoIFVSTCAoJXMpIGNhbiBiZSBjYWNoZWQ6IiwgY3VycmVu
dFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICBib29sIGNhbm5vdENhY2hl
ID0gZmFsc2U7CisgICAgCisgICAgZG8geworICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBE
b2N1bWVudExvYWRlciBvYmplY3QiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpKSB7Cisg
ICAgICAgICAgICBQQ0xPRygiICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVycm9yIik7CisgICAg
ICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYW1l
LT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAt
RnJhbWUgY29udGFpbnMgcGx1Z2lucyIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPnVybCgpLnByb3RvY29s
SXMoImh0dHBzIikpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsK
KyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZnJhbWUtPmRvbVdpbmRvdygpICYmIGZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1G
cmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxpc3RlbmVyIik7CisgICAgICAgICAgICBjYW5ub3RD
YWNoZSA9IHRydWU7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpKSB7CisgICAgICAgICAgICBQ
Q0xPRygiICAgLUZyYW1lIGhhcyBvcGVuIGRhdGFiYXNlIGhhbmRsZXMiKTsKKyAgICAgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJF
RF9XT1JLRVJTKQorICAgICAgICBpZiAoU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVk
V29ya2VycyhmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJh
bWUgaGFzIGFzc29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOworICAgICAgICAgICAgY2Fubm90Q2Fj
aGUgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpLT51c2luZ0dlb2xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUg
dXNlcyBHZW9sb2NhdGlvbiIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJ
dGVtKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtTm8gY3VycmVudCBoaXN0b3J5IGl0ZW0i
KTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZnJhbWUtPmxvYWRlcigpLT5xdWlja1JlZGlyZWN0Q29taW5nKCkpIHsKKyAgICAgICAgICAg
IFBDTE9HKCIgICAtUXVpY2sgcmVkaXJlY3QgaXMgY29taW5nIik7CisgICAgICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpKSB7CisgICAgICAgICAgICBQ
Q0xPRygiICAgLURvY3VtZW50TG9hZGVyIGlzIHN0aWxsIGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7
CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSB7CisgICAg
ICAgICAgICBQQ0xPRygiICAgLURvY3VtZW50TG9hZGVyIGlzIGluIHRoZSBtaWRkbGUgb2Ygc3Rv
cHBpbmciKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygp
KSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLVRoZSBkb2N1bWVudCBjYW5ub3Qgc3VzcGVjdCBp
dHMgYWN0aXZlIERPTSBPYmplY3RzIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7
CisgICAgICAgIH0KKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAg
ICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAg
LVRoZSBEb2N1bWVudExvYWRlciB1c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7CisgICAgICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgpKSB7CisgICAgICAgICAg
ICBQQ0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQi
KTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsgCisgICAgICAgIH0KKyAgICB9IHdo
aWxlIChmYWxzZSk7CisgICAgCisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5n
KCkpCisgICAgICAgIGlmICghbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGNoaWxkLCBpbmRlbnRM
ZXZlbCArIDEpKQorICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgIAorICAgIFBD
TE9HKGNhbm5vdENhY2hlID8gIiBGcmFtZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FO
IGJlIGNhY2hlZCIpOworICAgIFBDTE9HKCIrLS0tIik7CisgICAgCisgICAgcmV0dXJuICFjYW5u
b3RDYWNoZTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKFBh
Z2UqIHBhZ2UpCit7CisgICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3IgbWFpbiBmcmFtZXMg
dGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgorICAgIGlmIChwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEtVUkwgY3VycmVudFVSTCA9IHBhZ2UtPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgaWYgKGN1cnJlbnRVUkwu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IGluZGVudExldmVsID0g
MDsgICAgCisgICAgUENMT0coIi0tLS0tLS0tXG4gRGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUg
Y2FjaGVkOiIpOworICAgIAorICAgIGJvb2wgY2Fubm90Q2FjaGUgPSAhbG9nQ2FuQ2FjaGVGcmFt
ZURlY2lzaW9uKHBhZ2UtPm1haW5GcmFtZSgpLCAxKTsKKyAgICAKKyAgICBGcmFtZUxvYWRUeXBl
IGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5sb2FkVHlwZSgpOworICAg
IGlmIChwYWdlLT5tYWluRnJhbWUoKS0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAgICBQQ0xP
RygiICAgLUZyYW1lIGhhcyBhIHBhcmVudCBmcmFtZSIpOworICAgICAgICBjYW5ub3RDYWNoZSA9
IHRydWU7CisgICAgfQorICAgIGlmICghcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQo
KSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxl
ZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmICghKHBhZ2Ut
PmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMCkpIHsKKyAgICAgICAgUENMT0coIiAg
IC1UaGUgYmFjay9mb3J3YXJkIGxpc3QgaGFzIGEgMCBjYXBhY2l0eSIpOworICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmICghcGFnZS0+c2V0dGluZ3MoKS0+dXNlc1Bh
Z2VDYWNoZSgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtUGFnZSBzZXR0aW5ncyBzYXlzIGIvZiBj
YWNoZSBkaXNhYmxlZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAg
IGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKSB7CisgICAgICAgIFBDTE9HKCIg
ICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsKKyAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwor
ICAgIH0KKyAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4p
IHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCBmcm9tIG9yaWdpbiIp
OworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmIChsb2FkVHlwZSA9
PSBGcmFtZUxvYWRUeXBlU2FtZSkgeworICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczog
U2FtZSIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIAorICAgIFBD
TE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0tIiA6ICIg
UGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworfQorI2VuZGlmIAorCiBQYWdlQ2FjaGUq
IHBhZ2VDYWNoZSgpCiB7CiAgICAgc3RhdGljIFBhZ2VDYWNoZSogc3RhdGljUGFnZUNhY2hlID0g
bmV3IFBhZ2VDYWNoZTsKQEAgLTU0LDYgKzIzMyw3NCBAQAogICAgICwgbV9hdXRvcmVsZWFzZVRp
bWVyKHRoaXMsICZQYWdlQ2FjaGU6OnJlbGVhc2VBdXRvcmVsZWFzZWRQYWdlc05vd09yUmVzY2hl
ZHVsZSkKIHsKIH0KKyAgICAKK2Jvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5n
VGhpc0ZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1l
LT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpCisgICAgICAgICYmIGZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwo
KQorICAgICAgICAvLyBGSVhNRTogSWYgd2UgZXZlciBjaGFuZ2UgdGhpcyBzbyB0aGF0IGZyYW1l
cyB3aXRoIHBsdWctaW5zIHdpbGwgYmUgY2FjaGVkLAorICAgICAgICAvLyB3ZSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGF0IHdlIGRvbid0IGNhY2hlIGZyYW1lcyB0aGF0IGhhdmUgb3V0c3RhbmRpbmcg
TlBPYmplY3RzCisgICAgICAgIC8vIChvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIHBsdWctaW4pLiBT
aW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcGF1c2UvcmVzdW1lIGEgTmV0c2NhcGUgcGx1Zy1pbiwK
KyAgICAgICAgLy8gdGhleSB3b3VsZCBuZWVkIHRvIGJlIGRlc3Ryb3llZCBhbmQgdGhlbiByZWNy
ZWF0ZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gcmVjcmVhdGUKKyAgICAgICAg
Ly8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS81MTk3MDQxPiBmb3Ig
bW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQ
bHVnaW5zKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygi
aHR0cHMiKQorICAgICAgICAmJiAoIWZyYW1lLT5kb21XaW5kb3coKSB8fCAhZnJhbWUtPmRvbVdp
bmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQorI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgJiYgIWZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVu
RGF0YWJhc2VzKCkKKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAg
JiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoZnJhbWUtPmRvY3Vt
ZW50KCkpCisjZW5kaWYKKyAgICAgICAgJiYgIWZyYW1lLT5kb2N1bWVudCgpLT51c2luZ0dlb2xv
Y2F0aW9uKCkKKyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJ
dGVtKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+cXVpY2tSZWRpcmVjdENvbWluZygp
CisgICAgICAgICYmICFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKQorICAgICAgICAmJiAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5pc1N0b3BwaW5nKCkKKyAgICAgICAgJiYgZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3Bl
bmRBY3RpdmVET01PYmplY3RzKCkKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFt
ZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKKyAgICAgICAgLy8gYXBwbGljYXRpb24gY2FjaGUu
IDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3MgdGhhdCB3b3JrLgorICAgICAgICAmJiBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkt
PmNhbkNhY2hlSW5QYWdlQ2FjaGUoKQorI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAg
JiYgIWZyYW1lLT5kb2N1bWVudCgpLT5jb250YWluc1dNTENvbnRlbnQoKQorICAgICAgICAmJiAh
ZnJhbWUtPmRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQoKTsKKyNlbmRpZgorICAgICAgICAmJiBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKTsKK30KKyAgICAKK2Jvb2wg
UGFnZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKQoreworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBsb2dDYW5DYWNoZVBh
Z2VEZWNpc2lvbihwYWdlKTsKKyNlbmRpZgorICAgIAorICAgIC8vIENhY2hlIHRoZSBwYWdlLCBp
ZiBwb3NzaWJsZS4KKyAgICAvLyBEb24ndCB3cml0ZSB0byB0aGUgY2FjaGUgaWYgaW4gdGhlIG1p
ZGRsZSBvZiBhIHJlZGlyZWN0LCBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8KKyAgICAvLyBzdG9yZSB0
aGUgZmluYWwgcGFnZSB3ZSBlbmQgdXAgb24uCisgICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0
aGUgY2FjaGUgb24gYSByZWxvYWQgb3IgbG9hZFNhbWUsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0
ZQorICAgIC8vIG92ZXIgaXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCisgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODg2NTkyPiAtIFdlIHNob3VsZCB3b3JrIG91dCB0aGUg
Y29tcGxleGl0aWVzIG9mIGNhY2hpbmcgcGFnZXMgd2l0aCBmcmFtZXMgYXMgdGhleQorICAgIC8v
IGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBwYWdlcyBvbiB0aGUgd2ViLCBhbmQgb2Z0ZW4gdGhv
c2UgdGhhdCB3b3VsZCBiZW5lZml0IHRoZSBtb3N0IGZyb20gY2FjaGluZyEKKyAgICBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5sb2FkVHlwZSgp
OworICAgIAorICAgIHJldHVybiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKHBhZ2Ut
Pm1haW5GcmFtZSgpKQorICAgICAgICAmJiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxl
ZCgpCisgICAgICAgICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMAor
ICAgICAgICAmJiBwYWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkKKyAgICAgICAgJiYg
bG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJlbG9hZCAKKyAgICAgICAgJiYgbG9hZFR5cGUgIT0g
RnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4KKyAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJh
bWVMb2FkVHlwZVNhbWU7Cit9CiAKIHZvaWQgUGFnZUNhY2hlOjpzZXRDYXBhY2l0eShpbnQgY2Fw
YWNpdHkpCiB7CkBAIC04MCwxMCArMzI3LDExIEBACiAgICAgcmV0dXJuIG1fYXV0b3JlbGVhc2VT
ZXQuc2l6ZSgpOwogfQogCi12b2lkIFBhZ2VDYWNoZTo6YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IHBycEl0ZW0sIFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKK3ZvaWQgUGFn
ZUNhY2hlOjphZGQoUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSwgUGFnZSogcGFnZSkK
IHsKICAgICBBU1NFUlQocHJwSXRlbSk7Ci0gICAgQVNTRVJUKGNhY2hlZFBhZ2UpOworICAgIEFT
U0VSVChwYWdlKTsKKyAgICBBU1NFUlQoY2FuQ2FjaGUocGFnZSkpOwogICAgIAogICAgIEhpc3Rv
cnlJdGVtKiBpdGVtID0gcHJwSXRlbS5yZWxlYXNlUmVmKCk7IC8vIEJhbGFuY2VkIGluIHJlbW92
ZSgpLgogCkBAIC05MSwxMyArMzM5LDMxIEBACiAgICAgaWYgKGl0ZW0tPm1fY2FjaGVkUGFnZSkK
ICAgICAgICAgcmVtb3ZlKGl0ZW0pOwogCi0gICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gY2FjaGVk
UGFnZTsKKyAgICBpdGVtLT5tX2NhY2hlZFBhZ2UgPSBDYWNoZWRQYWdlOjpjcmVhdGUocGFnZSk7
CiAgICAgYWRkVG9MUlVMaXN0KGl0ZW0pOwogICAgICsrbV9zaXplOwogICAgIAogICAgIHBydW5l
KCk7CiB9CiAKK0NhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtKiBpdGVtKQor
eworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoUmVmUHRyPENh
Y2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBpdGVtLT5tX2NhY2hlZFBhZ2UuZ2V0KCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IDE4MDAgc2hvdWxkIG5vdCBiZSBoYXJkY29kZWQsIGl0IHNob3VsZCBjb21l
IGZyb20KKyAgICAgICAgLy8gV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZh
bEtleSBpbiBXZWJLaXQuCisgICAgICAgIC8vIE9yIHdlIHNob3VsZCByZW1vdmUgV2ViS2l0QmFj
a0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleS4KKyAgICAgICAgaWYgKGN1cnJlbnRU
aW1lKCkgLSBjYWNoZWRQYWdlLT50aW1lU3RhbXAoKSA8PSAxODAwKQorICAgICAgICAgICAgcmV0
dXJuIGNhY2hlZFBhZ2UuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBMT0coUGFnZUNhY2hlLCAi
Tm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNl
IGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwogdm9pZCBQYWdlQ2FjaGU6OnJlbW92ZShIaXN0b3J5SXRlbSogaXRlbSkK
IHsKICAgICAvLyBTYWZlbHkgaWdub3JlIGF0dGVtcHRzIHRvIHJlbW92ZSBpdGVtcyBub3QgaW4g
dGhlIGNhY2hlLgpJbmRleDogV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAkocmV2aXNpb24gNTk4NjIpCisrKyBXZWJD
b3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyMiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVkUGFnZTsKKyAgICBjbGFz
cyBGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKKyAgICBjbGFzcyBQYWdlOwogICAgIAog
ICAgIGNsYXNzIFBhZ2VDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBmcmllbmQgUGFnZUNhY2hlKiBwYWdlQ2FjaGUoKTsKKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBib29sIGNhbkNhY2hlKFBhZ2UqKTsKIAogICAgICAgICB2b2lkIHNldENhcGFjaXR5
KGludCk7IC8vIG51bWJlciBvZiBwYWdlcyB0byBjYWNoZQogICAgICAgICBpbnQgY2FwYWNpdHko
KSB7IHJldHVybiBtX2NhcGFjaXR5OyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGFkZChQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFzc1JlZlB0cjxDYWNoZWRQYWdlPik7IC8vIFBydW5lcyBp
ZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVkLgorICAgICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPEhp
c3RvcnlJdGVtPiwgUGFnZSopOyAvLyBQcnVuZXMgaWYgY2FwYWNpdHkoKSBpcyBleGNlZWRlZC4K
ICAgICAgICAgdm9pZCByZW1vdmUoSGlzdG9yeUl0ZW0qKTsKLSAgICAgICAgQ2FjaGVkUGFnZSog
Z2V0KEhpc3RvcnlJdGVtKiBpdGVtKSB7IHJldHVybiBpdGVtID8gaXRlbS0+bV9jYWNoZWRQYWdl
LmdldCgpIDogMDsgfQorICAgICAgICBDYWNoZWRQYWdlKiBnZXQoSGlzdG9yeUl0ZW0qIGl0ZW0p
OwogCiAgICAgICAgIHZvaWQgcmVsZWFzZUF1dG9yZWxlYXNlZFBhZ2VzTm93KCk7CiAgICAgICAg
IApAQCAtNTksNiArNjMsOCBAQAogCiAgICAgICAgIFBhZ2VDYWNoZSgpOyAvLyBVc2UgcGFnZUNh
Y2hlKCkgaW5zdGVhZC4KICAgICAgICAgflBhZ2VDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQg
dG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUg
ZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9v
bCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lKik7CiAKICAgICAgICAgdm9p
ZCBhZGRUb0xSVUxpc3QoSGlzdG9yeUl0ZW0qKTsgLy8gQWRkcyB0byB0aGUgaGVhZCBvZiB0aGUg
bGlzdC4KICAgICAgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5SXRlbSopOwpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNTk4NjIpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgs
NyBAQAogICAgICAgICBsb2FkZXItPnNldEZvcmNlZFNhbmRib3hGbGFncyhTYW5kYm94QWxsKTsK
ICAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VSZXF1ZXN0LCBmYWxzZSk7IC8vIE1ha2Ugc3VyZSB0
aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAogICAgICAgICBsb2FkZXItPnBvbGljeUNoZWNr
ZXIoKS0+Y2FuY2VsQ2hlY2soKTsgLy8gY2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCi0gICAgICAg
IGxvYWRlci0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOworICAgICAgICBsb2FkZXItPmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCgpOwogICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlw
ZSgiaW1hZ2Uvc3ZnK3htbCIpOwogICAgICAgICBsb2FkZXItPndyaXRlcigpLT5iZWdpbihLVVJM
KCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CiAgICAgICAgIGxvYWRlci0+d3JpdGVy
KCktPmFkZERhdGEoZGF0YSgpLT5kYXRhKCksIGRhdGEoKS0+c2l6ZSgpKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDU5ODYyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEzLDIwOCArMTQxMyw2IEBACiB9CiAjZW5k
aWYKIAotYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgp
Ci17Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAoIWNoaWxkLT5sb2FkZXIoKS0+Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgICAgIAotICAgIHJl
dHVybiBtX2RvY3VtZW50TG9hZGVyCi0gICAgICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPm1haW5E
b2N1bWVudEVycm9yKCkuaXNOdWxsKCkKLSAgICAgICAgLy8gRklYTUU6IElmIHdlIGV2ZXIgY2hh
bmdlIHRoaXMgc28gdGhhdCBmcmFtZXMgd2l0aCBwbHVnLWlucyB3aWxsIGJlIGNhY2hlZCwKLSAg
ICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBjYWNoZSBmcmFtZXMg
dGhhdCBoYXZlIG91dHN0YW5kaW5nIE5QT2JqZWN0cwotICAgICAgICAvLyAob2JqZWN0cyBjcmVh
dGVkIGJ5IHRoZSBwbHVnLWluKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHBhdXNlL3Jlc3Vt
ZSBhIE5ldHNjYXBlIHBsdWctaW4sCi0gICAgICAgIC8vIHRoZXkgd291bGQgbmVlZCB0byBiZSBk
ZXN0cm95ZWQgYW5kIHRoZW4gcmVjcmVhdGVkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2Ug
Y2FuIHJlY3JlYXRlCi0gICAgICAgIC8vIHRoZSByaWdodCBOUE9iamVjdHMuIFNlZSA8cmRhcjov
L3Byb2JsZW0vNTE5NzA0MT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICYmICFtX2Nv
bnRhaW5zUGx1Z0lucwotICAgICAgICAmJiAhbV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKQotICAg
ICAgICAmJiAoIW1fZnJhbWUtPmRvbVdpbmRvdygpIHx8ICFtX2ZyYW1lLT5kb21XaW5kb3coKS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKLSNpZiBFTkFCTEUo
REFUQUJBU0UpCi0gICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJh
c2VzKCkKLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAgJiYgIVNo
YXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQo
KSkKLSNlbmRpZgotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2Nh
dGlvbigpCi0gICAgICAgICYmIGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQotICAgICAgICAmJiAh
bV9xdWlja1JlZGlyZWN0Q29taW5nCi0gICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCkKLSAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBp
bmcoKQotICAgICAgICAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9N
T2JqZWN0cygpCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2
ZSBhbiBhc3NvY2lhdGVkCi0gICAgICAgIC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3By
b2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQgd29yay4KLSAgICAgICAgJiYgbV9kb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCi0jZW5k
aWYKLSNpZiBFTkFCTEUoV01MKQotICAgICAgICAmJiAhZnJhbWVDb250YWluc1dNTENvbnRlbnQo
bV9mcmFtZSkKLSNlbmRpZgotICAgICAgICAmJiBtX2NsaWVudC0+Y2FuQ2FjaGVQYWdlKCkKLSAg
ICAgICAgOwotfQotCi1ib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2UoKQotewotI2lmbmRl
ZiBOREVCVUcKLSAgICBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpOwotI2VuZGlmCi0gICAgCi0g
ICAgLy8gQ2FjaGUgdGhlIHBhZ2UsIGlmIHBvc3NpYmxlLgotICAgIC8vIERvbid0IHdyaXRlIHRv
IHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwg
d2FudCB0bwotICAgIC8vIHN0b3JlIHRoZSBmaW5hbCBwYWdlIHdlIGVuZCB1cCBvbi4KLSAgICAv
LyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCBvciBsb2FkU2FtZSwg
c2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlCi0gICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxl
YXZlIHRoYXQgcGFnZS4KLSAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4ODY1OTI+IC0g
V2Ugc2hvdWxkIHdvcmsgb3V0IHRoZSBjb21wbGV4aXRpZXMgb2YgY2FjaGluZyBwYWdlcyB3aXRo
IGZyYW1lcyBhcyB0aGV5Ci0gICAgLy8gYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhZ2VzIG9u
IHRoZSB3ZWIsIGFuZCBvZnRlbiB0aG9zZSB0aGF0IHdvdWxkIGJlbmVmaXQgdGhlIG1vc3QgZnJv
bSBjYWNoaW5nIQotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSB0aGlzLT5sb2FkVHlwZSgp
OwotICAgIAotICAgIHJldHVybiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKQotICAgICAgICAm
JiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+
cGFnZSgpCi0gICAgICAgICYmIG1fZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCktPmVu
YWJsZWQoKQotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgpLT5j
YXBhY2l0eSgpID4gMAotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnVz
ZXNQYWdlQ2FjaGUoKQotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2Fk
IAotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbgot
ICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlU2FtZQotICAgICAgICA7Ci19Ci0K
LSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgU3RyaW5nJiBwYWdlQ2FjaGVMb2dQcmVmaXgoaW50IGlu
ZGVudExldmVsKQotewotICAgIHN0YXRpYyBpbnQgcHJldmlvdXNJbmRlbnQgPSAtMTsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHJlZml4LCAoKSk7Ci0gICAgCi0gICAgaWYgKGlu
ZGVudExldmVsICE9IHByZXZpb3VzSW5kZW50KSB7ICAgIAotICAgICAgICBwcmV2aW91c0luZGVu
dCA9IGluZGVudExldmVsOwotICAgICAgICBwcmVmaXgudHJ1bmNhdGUoMCk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcHJldmlvdXNJbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIHByZWZp
eCArPSAiICAgICI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhZ2VDYWNoZUxvZyhjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIExPRyhQYWdlQ2FjaGUsICIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRh
KCksIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLSNkZWZpbmUgUENMT0coLi4uKSBwYWdl
Q2FjaGVMb2cocGFnZUNhY2hlTG9nUHJlZml4KGluZGVudExldmVsKSwgU3RyaW5nOjpmb3JtYXQo
X19WQV9BUkdTX18pKQotCi12b2lkIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZVBhZ2VEZWNpc2lv
bigpCi17Ci0gICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3IgbWFpbiBmcmFtZXMgdGhhdCBo
YXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChtX2NyZWF0aW5n
SW5pdGlhbEVtcHR5RG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBLVVJMIGN1cnJlbnRV
UkwgPSBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCk7
Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnQgaW5kZW50TGV2ZWwgPSAwOwotICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlm
IHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKLQotICAgIGJvb2wgY2Fubm90Q2FjaGUgPSAhbG9nQ2Fu
Q2FjaGVGcmFtZURlY2lzaW9uKDEpOwotICAgICAgICAKLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRU
eXBlID0gdGhpcy0+bG9hZFR5cGUoKTsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLT50
cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhIHBh
cmVudCBmcmFtZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlcmUgaXMgbm8gUGFnZSBvYmpl
Y3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExp
c3QoKS0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBiYWNrL2Zvcndh
cmQgbGlzdCBpcyBkaXNhYmxlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYg
KCEobV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDApKQot
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlzdCBoYXMgYSAwIGNh
cGFjaXR5Iik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPnBh
Z2UoKS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygi
ICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2YgY2FjaGUgZGlzYWJsZWQiKTsgY2Fubm90Q2FjaGUg
PSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKQot
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9h
ZEZyb21PcmlnaW4pCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxv
YWQgZnJvbSBvcmlnaW4iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2Fk
VHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Mb2Fk
IHR5cGUgaXM6IFNhbWUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgfSB3aGlsZSAoZmFs
c2UpOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBjYWNo
ZWRcbi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOwotfQotCi1i
b29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oaW50IGluZGVudExldmVs
KQotewotICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIGZyYW1lcyB0aGF0IGhhdmUgYWN0
dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCi0gICAgaWYgKG1fY3JlYXRpbmdJbml0aWFs
RW1wdHlEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtVUkwgY3VycmVudFVS
TCA9IG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKTsK
LSAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgS1VSTCBuZXdVUkwgPSBtX3Byb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIgPyBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpOwot
ICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBp
ZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmlnYXRpbmcgZnJvbSAoJXMpIHRvICglcyk6IiwgY3Vy
cmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBuZXdVUkwuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIHN1YmZyYW1l
IHdpdGggVVJMICglcykgY2FuIGJlIGNhY2hlZDoiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICAKLSAgICBib29sIGNhbm5vdENhY2hlID0gZmFsc2U7Ci0KLSAg
ICBkbyB7Ci0gICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlcikgewotICAgICAgICAgICAgUENM
T0coIiAgIC1UaGVyZSBpcyBubyBEb2N1bWVudExvYWRlciBvYmplY3QiKTsKLSAgICAgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKSkK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJvciIpOyBj
YW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fY29udGFpbnNQbHVnSW5zKQotICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX1VSTC5wcm90b2NvbElzKCJodHRwcyIpKQotICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGlzIEhUVFBTIik7IGNhbm5vdENhY2hlID0gdHJ1
ZTsgfQotICAgICAgICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkgJiYgbV9mcmFtZS0+ZG9tV2lu
ZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCi0gICAg
ICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIGFuIHVubG9hZCBldmVudCBsaXN0ZW5lciIp
OyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpCi0gICAgICAgICAgICB7
IFBDTE9HKCIgICAtRnJhbWUgaGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAg
aWYgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9j
dW1lbnQoKSkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIGFzc29jaWF0ZWQg
U2hhcmVkV29ya2VycyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNlbmRpZgotICAgICAgICBp
ZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKQotICAgICAgICAgICAg
eyBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVl
OyB9Ci0gICAgICAgIGlmICghaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKQotICAgICAgICAgICAg
eyBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7IGNhbm5vdENhY2hlID0gdHJ1
ZTsgfQotICAgICAgICBpZiAobV9xdWlja1JlZGlyZWN0Q29taW5nKQotICAgICAgICAgICAgeyBQ
Q0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7
IH0KLSAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5n
IGluIEFQSSBzZW5zZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZG9j
dW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Eb2N1
bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNh
bm5vdCBzdXNwZWN0IGl0cyBhY3RpdmUgRE9NIE9iamVjdHMiKTsgY2Fubm90Q2FjaGUgPSB0cnVl
OyB9Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgaWYgKCFt
X2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNh
Y2hlKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9hZGVyIHVzZXMg
YW4gYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2FjaGVQYWdlKCkpCi0gICAgICAgICAgICB7IFBDTE9H
KCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOyBjYW5u
b3RDYWNoZSA9IHRydWU7IH0KLSAgICB9IHdoaWxlIChmYWxzZSk7Ci0KLSAgICBmb3IgKEZyYW1l
KiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoIWNoaWxkLT5sb2FkZXIo
KS0+bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGluZGVudExldmVsICsgMSkpCi0gICAgICAgICAg
ICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgCi0gICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIEZy
YW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU4gYmUgY2FjaGVkIik7Ci0gICAgUENM
T0coIistLS0iKTsKLQotICAgIHJldHVybiAhY2Fubm90Q2FjaGU7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBGcmFtZUxvYWRlcjo6dXBkYXRlRmlyc3RQYXJ0eUZvckNvb2tpZXMoKQogewogICAgIGlmICht
X2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpAQCAtMjM0Niw5ICsyMTQ0LDkgQEAKICAgICBzZXRT
dGF0ZShGcmFtZVN0YXRlQ29tcGxldGUpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQ
cm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdlPiBwcnBDYWNoZWRQYWdlKQordm9p
ZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKIHsKLSAgICBSZWZQdHI8Q2Fj
aGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBycENhY2hlZFBhZ2U7CisgICAgUmVmUHRyPENhY2hlZFBh
Z2U+IGNhY2hlZFBhZ2UgPSBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSA/IHBhZ2VDYWNoZSgpLT5n
ZXQoaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKSkgOiAwOwogICAgIFJlZlB0cjxEb2N1bWVu
dExvYWRlcj4gcGRsID0gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyOwogCiAgICAgTE9HKFBh
Z2VDYWNoZSwgIldlYkNvcmVMb2FkaW5nICVzOiBBYm91dCB0byBjb21taXQgcHJvdmlzaW9uYWwg
bG9hZCBmcm9tIHByZXZpb3VzIFVSTCAnJXMnIHRvIG5ldyBVUkwgJyVzJyIsIG1fZnJhbWUtPnRy
ZWUoKS0+bmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fVVJMLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIApAQCAtMjM1Niw3ICsyMTU0LDEyIEBACiAKICAgICAvLyBDaGVjayB0byBzZWUg
aWYgd2UgbmVlZCB0byBjYWNoZSB0aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20g
aW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhl
cmUgYmVjYXVzZSB3ZSBrbm93IGZvciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBi
ZSBsb2FkZWQuCi0gICAgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oaGlzdG9yeSgpLT5jdXJyZW50
SXRlbSgpKTsKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworICAgIGlmIChQYWdlQ2FjaGU6
OmNhbkNhY2hlKHBhZ2UpICYmICFpdGVtLT5pc0luUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgcGFn
ZUhpZGRlbigpOworICAgICAgICBwYWdlQ2FjaGUoKS0+YWRkKGl0ZW0sIHBhZ2UpOworICAgIH0K
ICAgICAKICAgICBpZiAobV9sb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVwbGFjZSkKICAgICAg
ICAgY2xvc2VPbGREYXRhU291cmNlcygpOwpAQCAtMjM3Myw5ICsyMTc2LDExIEBACiAgICAgaWYg
KG1fc2VudFJlZGlyZWN0Tm90aWZpY2F0aW9uKQogICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNl
bGxlZE9yRmluaXNoZWQoZmFsc2UpOwogICAgIAotICAgIGlmIChjYWNoZWRQYWdlICYmIGNhY2hl
ZFBhZ2UtPmRvY3VtZW50KCkpCi0gICAgICAgIG9wZW4oKmNhY2hlZFBhZ2UpOwotICAgIGVsc2Ug
eyAgICAgICAgCisgICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2FjaGVkUGFnZS0+ZG9jdW1lbnQoKSkg
eworICAgICAgICBwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKTsKKyAgICAgICAgY2FjaGVk
UGFnZS0+cmVzdG9yZShtX2ZyYW1lLT5wYWdlKCkpOworICAgICAgICBjaGVja0NvbXBsZXRlZCgp
OworICAgIH0gZWxzZSB7ICAgICAgICAKICAgICAgICAgS1VSTCB1cmwgPSBwZGwtPnN1YnN0aXR1
dGVEYXRhKCkucmVzcG9uc2VVUkwoKTsKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICB1cmwgPSBwZGwtPnVybCgpOwpAQCAtMjU5MSw3ICsyMzk2LDcgQEAKICAgICBtX2Ns
aWVudC0+c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShmYWxzZSk7IC8vIHN0b3AgZ2l2aW5nIG91
dCB0aGUgYWN0dWFsIERPTURvY3VtZW50IHRvIG9ic2VydmVycwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyOjpvcGVuKENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UpCit2b2lkIEZyYW1lTG9hZGVyOjpwcmVw
YXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKQogewogICAgIEFTU0VSVCghbV9mcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7CkBAIC0yNjA3LDEwICsy
NDEyLDYgQEAKICAgICAgICAgbV9mcmFtZS0+c2V0SlNTdGF0dXNCYXJUZXh0KFN0cmluZygpKTsK
ICAgICAgICAgbV9mcmFtZS0+c2V0SlNEZWZhdWx0U3RhdHVzQmFyVGV4dChTdHJpbmcoKSk7CiAg
ICAgfQotCi0gICAgY2FjaGVkUGFnZS5yZXN0b3JlKG1fZnJhbWUtPnBhZ2UoKSk7Ci0KLSAgICBj
aGVja0NvbXBsZXRlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZEZyYW1l
QmFzZSYgY2FjaGVkRnJhbWUpCkBAIC0zNDY1LDggKzMyNjYsMTAgQEAKIAogICAgIHNldFBvbGlj
eURvY3VtZW50TG9hZGVyKDApOwogCi0gICAgaWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0eXBl
KSAmJiBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKSkKKyAgICBpZiAoaXNCYWNr
Rm9yd2FyZExvYWRUeXBlKHR5cGUpICYmIGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCktPmlz
SW5QYWdlQ2FjaGUoKSkgeworICAgICAgICBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBh
Z2UoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChmb3JtU3RhdGUpCiAgICAg
ICAgIG1fY2xpZW50LT5kaXNwYXRjaFdpbGxTdWJtaXRGb3JtKCZQb2xpY3lDaGVja2VyOjpjb250
aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtLCBmb3JtU3RhdGUpOwpAQCAtMzU3OSwzOCArMzM4
MiwxOSBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGcmFtZUxvYWRlcjo6bG9hZFBy
b3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQcm92
aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpCiB7Ci0gICAgUmVmUHRyPENhY2hlZFBhZ2U+IGNh
Y2hlZFBhZ2UgPSBwYWdlQ2FjaGUoKS0+Z2V0KGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCkp
OwotICAgIGlmICghY2FjaGVkUGFnZSB8fCAhY2FjaGVkUGFnZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIERvY3VtZW50TG9hZGVyKiBwcm92aXNpb25hbExvYWRlciA9
IHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKTsKKyAgICBMT0coUGFnZUNhY2hlLCAiV2ViQ29y
ZVBhZ2VDYWNoZTogTG9hZGluZyBwcm92aXNpb25hbCBEb2N1bWVudExvYWRlciAlcCB3aXRoIFVS
TCAnJXMnIGZyb20gQ2FjaGVkUGFnZSIsIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSwgcHJv
dmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IAotICAgIERvY3VtZW50TG9hZGVyICpwcm92aXNpb25hbExvYWRlciA9IHByb3Zpc2lvbmFsRG9j
dW1lbnRMb2FkZXIoKTsKLSAgICBMT0coUGFnZUNhY2hlLCAiV2ViQ29yZVBhZ2VDYWNoZTogRnJh
bWVMb2FkZXIgJXAgbG9hZGluZyBwcm92aXNpb25hbCBEb2N1bWVudExvYWRlciAlcCB3aXRoIFVS
TCAnJXMnIGZyb20gQ2FjaGVkUGFnZSAlcCIsIHRoaXMsIHByb3Zpc2lvbmFsTG9hZGVyLCBwcm92
aXNpb25hbExvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY2FjaGVkUGFnZS5n
ZXQoKSk7Ci0gICAgCiAgICAgcHJvdmlzaW9uYWxMb2FkZXItPnByZXBhcmVGb3JMb2FkU3RhcnQo
KTsKIAogICAgIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlID0gdHJ1ZTsKIAogICAgIHByb3Zpc2lv
bmFsTG9hZGVyLT5zZXRDb21taXR0ZWQodHJ1ZSk7Ci0gICAgY29tbWl0UHJvdmlzaW9uYWxMb2Fk
KGNhY2hlZFBhZ2UpOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIGNvbW1pdFByb3Zpc2lv
bmFsTG9hZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjYWNoZVBhZ2VGb3JIaXN0b3J5SXRl
bShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWNhbkNhY2hlUGFnZSgpIHx8IGl0ZW0t
PmlzSW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFnZUhpZGRlbigpOwot
ICAgIAotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gQ2FjaGVkUGFnZTo6Y3JlYXRlKHBhZ2UpOwot
ICAgICAgICBwYWdlQ2FjaGUoKS0+YWRkKGl0ZW0sIGNhY2hlZFBhZ2UucmVsZWFzZSgpKTsKLSAg
ICB9Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnBhZ2VIaWRkZW4oKQogewogICAgIG1fcGFnZURp
c21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKQEAgLTM2NzYsMjEgKzM0NjAsMTAg
QEAKIHsKICAgICAvLyBSZW1lbWJlciB0aGlzIGl0ZW0gc28gd2UgY2FuIHRyYXZlcnNlIGFueSBj
aGlsZCBpdGVtcyBhcyBjaGlsZCBmcmFtZXMgbG9hZAogICAgIGhpc3RvcnkoKS0+c2V0UHJvdmlz
aW9uYWxJdGVtKGl0ZW0pOwotICAgIAotICAgIC8vIENoZWNrIGlmIHdlJ2xsIGJlIHVzaW5nIHRo
ZSBwYWdlIGNhY2hlLiAgV2Ugb25seSB1c2UgdGhlIHBhZ2UgY2FjaGUKLSAgICAvLyBpZiBvbmUg
ZXhpc3RzIGFuZCBpdCBpcyBsZXNzIHRoYW4gX2JhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0aW9uSW50
ZXJ2YWwKLSAgICAvLyBzZWNvbmRzIG9sZC4gIElmIHRoZSBjYWNoZSBpcyBleHBpcmVkIGl0IGdl
dHMgZmx1c2hlZCBoZXJlLgorCiAgICAgaWYgKFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdl
ID0gcGFnZUNhY2hlKCktPmdldChpdGVtKSkgewotICAgICAgICAvLyBGSVhNRTogMTgwMCBzaG91
bGQgbm90IGJlIGhhcmRjb2RlZCwgaXQgc2hvdWxkIGNvbWUgZnJvbQotICAgICAgICAvLyBXZWJL
aXRCYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbkludGVydmFsS2V5IGluIFdlYktpdC4KLSAgICAg
ICAgLy8gT3Igd2Ugc2hvdWxkIHJlbW92ZSBXZWJLaXRCYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlv
bkludGVydmFsS2V5LgotICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAtIGNhY2hlZFBhZ2UtPnRp
bWVTdGFtcCgpIDw9IDE4MDApIHsKLSAgICAgICAgICAgIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIo
Y2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5cGUsIDApOyAgIAotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMT0coUGFnZUNhY2hlLCAi
Tm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNl
IGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKS0+
dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVt
b3ZlKGl0ZW0pOworICAgICAgICBsb2FkV2l0aERvY3VtZW50TG9hZGVyKGNhY2hlZFBhZ2UtPmRv
Y3VtZW50TG9hZGVyKCksIGxvYWRUeXBlLCAwKTsgICAKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIEtVUkwgaXRlbVVSTCA9IGl0ZW0tPnVybCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkocmV2aXNpb24gNTk4NjIpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogICAgIGlmICht
X2dvdEZpcnN0Qnl0ZSAmJiAhbV9jb21taXR0ZWQpIHsKICAgICAgICAgbV9jb21taXR0ZWQgPSB0
cnVlOwotICAgICAgICBmcmFtZUxvYWRlcigpLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7Cisg
ICAgICAgIGZyYW1lTG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgIH0KIH0K
IApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1OTg2MikKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNyBAQAogICAg
IHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxD
YWNoZWRQYWdlPik7CisgICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoKTsKICAgICBib29s
IGlzTG9hZGluZ0Zyb21DYWNoZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nRnJvbUNh
Y2hlZFBhZ2U7IH0KIAogICAgIGJvb2wgY29tbWl0dGluZ0ZpcnN0UmVhbExvYWQoKSBjb25zdCB7
IHJldHVybiAhbV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50ICYmICFtX2NvbW1pdHRlZEZp
cnN0UmVhbERvY3VtZW50TG9hZDsgfQpAQCAtMzUxLDcgKzM1MSw5IEBACiAgICAgYm9vbCBpc0Rp
c3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5
aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7IH0KIAogICAgIHZvaWQgY2xlYXIoYm9vbCBjbGVhcldp
bmRvd1Byb3BlcnRpZXMgPSB0cnVlLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cyA9IHRydWUsIGJv
b2wgY2xlYXJGcmFtZVZpZXcgPSB0cnVlKTsKLSAgICAKKworICAgIGJvb2wgcXVpY2tSZWRpcmVj
dENvbWluZygpIGNvbnN0IHsgcmV0dXJuIG1fcXVpY2tSZWRpcmVjdENvbWluZzsgfQorCiAgICAg
Ym9vbCBzaG91bGRDbG9zZSgpOwogCiBwcml2YXRlOgpAQCAtMzcyLDggKzM3NCw3IEBACiAgICAg
dm9pZCBuYXZpZ2F0ZVdpdGhpbkRvY3VtZW50KEhpc3RvcnlJdGVtKik7CiAgICAgdm9pZCBuYXZp
Z2F0ZVRvRGlmZmVyZW50RG9jdW1lbnQoSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKICAg
ICAKLSAgICBib29sIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwotICAgIHZv
aWQgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKTsKKyAgICB2b2lkIGxvYWRQ
cm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwogICAgIHZvaWQgcGFnZUhpZGRlbigpOwog
CiAgICAgdm9pZCByZWNlaXZlZEZpcnN0RGF0YSgpOwpAQCAtNDE0LDcgKzQxNSw3IEBACiAgICAg
dm9pZCBzZXRTdGF0ZShGcmFtZVN0YXRlKTsKIAogICAgIHZvaWQgY2xvc2VPbGREYXRhU291cmNl
cygpOwotICAgIHZvaWQgb3BlbihDYWNoZWRQYWdlJik7CisgICAgdm9pZCBwcmVwYXJlRm9yQ2Fj
aGVkUGFnZVJlc3RvcmUoKTsKIAogICAgIHZvaWQgdXBkYXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVk
aXJlY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57582</attachid>
            <date>2010-06-01 12:46:40 -0700</date>
            <delta_ts>2010-06-02 15:40:58 -0700</delta_ts>
            <desc>One option for a crash fix</desc>
            <filename>patch4.txt</filename>
            <type>text/plain</type>
            <size>31356</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCShyZXZpc2lvbiA2MDQ4MCkKKysrIFdlYkNvcmUvaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMjEgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKIAorI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5j
bHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1l
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTQwLDYgKzUwLDE3NyBAQAog
CiBzdGF0aWMgY29uc3QgZG91YmxlIGF1dG9yZWxlYXNlSW50ZXJ2YWwgPSAzOwogCisjaWZuZGVm
IE5ERUJVRworCitzdGF0aWMgU3RyaW5nJiBwYWdlQ2FjaGVMb2dQcmVmaXgoaW50IGluZGVudExl
dmVsKQoreworICAgIHN0YXRpYyBpbnQgcHJldmlvdXNJbmRlbnQgPSAtMTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgcHJlZml4LCAoKSk7CisgICAgCisgICAgaWYgKGluZGVudExl
dmVsICE9IHByZXZpb3VzSW5kZW50KSB7ICAgIAorICAgICAgICBwcmV2aW91c0luZGVudCA9IGlu
ZGVudExldmVsOworICAgICAgICBwcmVmaXgudHJ1bmNhdGUoMCk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcHJldmlvdXNJbmRlbnQ7ICsraSkKKyAgICAgICAgICAgIHByZWZpeCArPSAi
ICAgICI7CisgICAgfQorICAgIAorICAgIHJldHVybiBwcmVmaXg7Cit9CisKK3N0YXRpYyB2b2lk
IHBhZ2VDYWNoZUxvZyhjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIExPRyhQYWdlQ2FjaGUsICIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIG1l
c3NhZ2UudXRmOCgpLmRhdGEoKSk7Cit9CisgICAgCisjZGVmaW5lIFBDTE9HKC4uLikgcGFnZUNh
Y2hlTG9nKHBhZ2VDYWNoZUxvZ1ByZWZpeChpbmRlbnRMZXZlbCksIFN0cmluZzo6Zm9ybWF0KF9f
VkFfQVJHU19fKSkKKyAgICAKK3N0YXRpYyBib29sIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihG
cmFtZSogZnJhbWUsIGludCBpbmRlbnRMZXZlbCkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciBsb2dn
aW5nIGZvciBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50
LgorICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEtVUkwgY3VycmVudFVSTCA9IGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUENMT0coIistLS0iKTsKKyAgICBLVVJMIG5l
d1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpID8gZnJh
bWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgp
OworICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgUENMT0coIiBEZXRlcm1pbmlu
ZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmlnYXRpbmcgZnJvbSAoJXMpIHRvICglcyk6Iiwg
Y3VycmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBuZXdVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIHN1YmZy
YW1lIHdpdGggVVJMICglcykgY2FuIGJlIGNhY2hlZDoiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIAorICAgIGJvb2wgY2Fubm90Q2FjaGUgPSBmYWxzZTsKKyAgICAK
KyAgICBkbyB7CisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
KSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9i
amVjdCIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFBDTE9H
KCIgICAtTWFpbiBkb2N1bWVudCBoYXMgYW4gZXJyb3IiKTsKKyAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jb250
YWluc1BsdWdpbnMoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBw
bHVnaW5zIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSkgewor
ICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBpcyBIVFRQUyIpOworICAgICAgICAgICAgY2Fu
bm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+ZG9tV2luZG93
KCkgJiYgZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
dW5sb2FkRXZlbnQpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBhbiB1bmxv
YWQgZXZlbnQgbGlzdGVuZXIiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAg
ICAgICAgfQorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUg
aGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAg
ICAgIGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZyYW1lLT5k
b2N1bWVudCgpKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgYXNzb2NpYXRl
ZCBTaGFyZWRXb3JrZXJzIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2VvbG9j
YXRpb24oKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSB1c2VzIEdlb2xvY2F0aW9u
Iik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkgeworICAgICAg
ICAgICAgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOworICAgICAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+bG9hZGVy
KCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1RdWlj
ayByZWRpcmVjdCBpcyBjb21pbmciKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRG9jdW1l
bnRMb2FkZXIgaXMgc3RpbGwgbG9hZGluZyBpbiBBUEkgc2Vuc2UiKTsKKyAgICAgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIg
ICAtRG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOworICAgICAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghZnJhbWUt
PmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpIHsKKyAgICAgICAgICAg
IFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3RpdmUgRE9NIE9i
amVjdHMiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAgIGlmICghZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNo
ZUluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9h
ZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtVGhl
IGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOworICAgICAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOyAKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGZhbHNlKTsKKyAg
ICAKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYg
KCFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSkpCisgICAg
ICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgCisgICAgUENMT0coY2Fubm90Q2FjaGUg
PyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU4gYmUgY2FjaGVkIik7Cisg
ICAgUENMT0coIistLS0iKTsKKyAgICAKKyAgICByZXR1cm4gIWNhbm5vdENhY2hlOworfQorICAg
IAorc3RhdGljIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oUGFnZSogcGFnZSkKK3sKKyAg
ICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZyYW1lcyB0aGF0IGhhdmUgYWN0dWFs
bHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCisgICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgpLT5s
b2FkZXIoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisgICAgS1VSTCBjdXJyZW50VVJMID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpID8gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT51cmwoKSA6IEtVUkwoKTsKKyAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOyAgICAKKyAgICBQQ0xP
RygiLS0tLS0tLS1cbiBEZXRlcm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7CisgICAg
CisgICAgYm9vbCBjYW5ub3RDYWNoZSA9ICFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24ocGFnZS0+
bWFpbkZyYW1lKCksIDEpOworICAgIAorICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCk7CisgICAgaWYgKHBhZ2UtPm1haW5G
cmFtZSgpLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFz
IGEgcGFyZW50IGZyYW1lIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKCFwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpKSB7CisgICAgICAgIFBD
TE9HKCIgICAtVGhlIGJhY2svZm9yd2FyZCBsaXN0IGlzIGRpc2FibGVkIik7CisgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCEocGFnZS0+YmFja0ZvcndhcmRMaXN0
KCktPmNhcGFjaXR5KCkgPiAwKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBiYWNrL2Zvcndh
cmQgbGlzdCBoYXMgYSAwIGNhcGFjaXR5Iik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKCFwYWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpIHsKKyAg
ICAgICAgUENMT0coIiAgIC1QYWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7
CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGxvYWRUeXBlID09
IEZyYW1lTG9hZFR5cGVSZWxvYWQpIHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6
IFJlbG9hZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmIChs
b2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgeworICAgICAgICBQQ0xP
RygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIGZyb20gb3JpZ2luIik7CisgICAgICAgIGNhbm5v
dENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVT
YW1lKSB7CisgICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7CisgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgUENMT0coY2Fubm90Q2FjaGUg
PyAiIFBhZ2UgQ0FOTk9UIGJlIGNhY2hlZFxuLS0tLS0tLS0iIDogIiBQYWdlIENBTiBiZSBjYWNo
ZWRcbi0tLS0tLS0tIik7Cit9CisKKyNlbmRpZiAKKwogUGFnZUNhY2hlKiBwYWdlQ2FjaGUoKQog
ewogICAgIHN0YXRpYyBQYWdlQ2FjaGUqIHN0YXRpY1BhZ2VDYWNoZSA9IG5ldyBQYWdlQ2FjaGU7
CkBAIC01NCw2ICsyMzUsNzQgQEAKICAgICAsIG1fYXV0b3JlbGVhc2VUaW1lcih0aGlzLCAmUGFn
ZUNhY2hlOjpyZWxlYXNlQXV0b3JlbGVhc2VkUGFnZXNOb3dPclJlc2NoZWR1bGUpCiB7CiB9Cisg
ICAgCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFt
ZSogZnJhbWUpCit7CisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKGNoaWxkKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKQorICAgICAgICAmJiBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkKKyAgICAgICAgLy8g
RklYTUU6IElmIHdlIGV2ZXIgY2hhbmdlIHRoaXMgc28gdGhhdCBmcmFtZXMgd2l0aCBwbHVnLWlu
cyB3aWxsIGJlIGNhY2hlZCwKKyAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBkb24ndCBjYWNoZSBmcmFtZXMgdGhhdCBoYXZlIG91dHN0YW5kaW5nIE5QT2JqZWN0cworICAg
ICAgICAvLyAob2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBwbHVnLWluKS4gU2luY2UgdGhlcmUgaXMg
bm8gd2F5IHRvIHBhdXNlL3Jlc3VtZSBhIE5ldHNjYXBlIHBsdWctaW4sCisgICAgICAgIC8vIHRo
ZXkgd291bGQgbmVlZCB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZW4gcmVjcmVhdGVkLCBhbmQgdGhl
cmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIHJlY3JlYXRlCisgICAgICAgIC8vIHRoZSByaWdodCBO
UE9iamVjdHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNTE5NzA0MT4gZm9yIG1vcmUgaW5mb3JtYXRp
b24uCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpCisgICAg
ICAgICYmICFmcmFtZS0+bG9hZGVyKCktPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikKKyAgICAg
ICAgJiYgKCFmcmFtZS0+ZG9tV2luZG93KCkgfHwgIWZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKKyNpZiBFTkFCTEUoREFUQUJB
U0UpCisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpCisj
ZW5kaWYKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAgICAgICYmICFTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZyYW1lLT5kb2N1bWVudCgpKQorI2VuZGlm
CisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCisgICAg
ICAgICYmIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpCisgICAgICAg
ICYmICFmcmFtZS0+bG9hZGVyKCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKQorICAgICAgICAmJiAh
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkK
KyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGlu
ZygpCisgICAgICAgICYmIGZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0cygpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBh
biBhc3NvY2lhdGVkCisgICAgICAgIC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2Js
ZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQgd29yay4KKyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFn
ZUNhY2hlKCkKKyNlbmRpZgorI2lmIEVOQUJMRShXTUwpCisgICAgICAgICYmICFmcmFtZS0+ZG9j
dW1lbnQoKS0+Y29udGFpbnNXTUxDb250ZW50KCkKKyAgICAgICAgJiYgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pc1dNTERvY3VtZW50KCk7CisjZW5kaWYKKyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCk7Cit9CisgICAgCitib29sIFBhZ2VDYWNoZTo6Y2Fu
Q2FjaGUoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24ocGFn
ZSk7CisjZW5kaWYKKyAgICAKKyAgICAvLyBDYWNoZSB0aGUgcGFnZSwgaWYgcG9zc2libGUuCisg
ICAgLy8gRG9uJ3Qgd3JpdGUgdG8gdGhlIGNhY2hlIGlmIGluIHRoZSBtaWRkbGUgb2YgYSByZWRp
cmVjdCwgc2luY2Ugd2Ugd2lsbCB3YW50IHRvCisgICAgLy8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ug
d2UgZW5kIHVwIG9uLgorICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEg
cmVsb2FkIG9yIGxvYWRTYW1lLCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUKKyAgICAvLyBvdmVy
IGl0IGFnYWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgorICAgIC8vIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vNDg4NjU5Mj4gLSBXZSBzaG91bGQgd29yayBvdXQgdGhlIGNvbXBsZXhpdGllcyBv
ZiBjYWNoaW5nIHBhZ2VzIHdpdGggZnJhbWVzIGFzIHRoZXkKKyAgICAvLyBhcmUgdGhlIG1vc3Qg
aW50ZXJlc3RpbmcgcGFnZXMgb24gdGhlIHdlYiwgYW5kIG9mdGVuIHRob3NlIHRoYXQgd291bGQg
YmVuZWZpdCB0aGUgbW9zdCBmcm9tIGNhY2hpbmchCisgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlw
ZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKKyAgICAKKyAgICBy
ZXR1cm4gY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShwYWdlLT5tYWluRnJhbWUoKSkK
KyAgICAgICAgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKQorICAgICAgICAm
JiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDAKKyAgICAgICAgJiYgcGFn
ZS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpCisgICAgICAgICYmIGxvYWRUeXBlICE9IEZy
YW1lTG9hZFR5cGVSZWxvYWQgCisgICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVS
ZWxvYWRGcm9tT3JpZ2luCisgICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVTYW1l
OworfQogCiB2b2lkIFBhZ2VDYWNoZTo6c2V0Q2FwYWNpdHkoaW50IGNhcGFjaXR5KQogewpAQCAt
ODAsMTAgKzMyOSwxMSBAQAogICAgIHJldHVybiBtX2F1dG9yZWxlYXNlU2V0LnNpemUoKTsKIH0K
IAotdm9pZCBQYWdlQ2FjaGU6OmFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtLCBQ
YXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCit2b2lkIFBhZ2VDYWNoZTo6YWRkKFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIFBhZ2UqIHBhZ2UpCiB7CiAgICAgQVNTRVJU
KHBycEl0ZW0pOwotICAgIEFTU0VSVChjYWNoZWRQYWdlKTsKKyAgICBBU1NFUlQocGFnZSk7Cisg
ICAgQVNTRVJUKGNhbkNhY2hlKHBhZ2UpKTsKICAgICAKICAgICBIaXN0b3J5SXRlbSogaXRlbSA9
IHBycEl0ZW0ucmVsZWFzZVJlZigpOyAvLyBCYWxhbmNlZCBpbiByZW1vdmUoKS4KIApAQCAtOTEs
MTMgKzM0MSwzMSBAQAogICAgIGlmIChpdGVtLT5tX2NhY2hlZFBhZ2UpCiAgICAgICAgIHJlbW92
ZShpdGVtKTsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IGNhY2hlZFBhZ2U7CisgICAgaXRl
bS0+bV9jYWNoZWRQYWdlID0gQ2FjaGVkUGFnZTo6Y3JlYXRlKHBhZ2UpOwogICAgIGFkZFRvTFJV
TGlzdChpdGVtKTsKICAgICArK21fc2l6ZTsKICAgICAKICAgICBwcnVuZSgpOwogfQogCitDYWNo
ZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0
ZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2Ug
PSBpdGVtLT5tX2NhY2hlZFBhZ2UuZ2V0KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IDE4MDAgc2hv
dWxkIG5vdCBiZSBoYXJkY29kZWQsIGl0IHNob3VsZCBjb21lIGZyb20KKyAgICAgICAgLy8gV2Vi
S2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleSBpbiBXZWJLaXQuCisgICAg
ICAgIC8vIE9yIHdlIHNob3VsZCByZW1vdmUgV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRp
b25JbnRlcnZhbEtleS4KKyAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBjYWNoZWRQYWdlLT50
aW1lU3RhbXAoKSA8PSAxODAwKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CisgICAg
ICAgIAorICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBm
cm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwg
aXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBwYWdlQ2FjaGUo
KS0+cmVtb3ZlKGl0ZW0pOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBQYWdlQ2Fj
aGU6OnJlbW92ZShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICAvLyBTYWZlbHkgaWdub3JlIGF0
dGVtcHRzIHRvIHJlbW92ZSBpdGVtcyBub3QgaW4gdGhlIGNhY2hlLgpJbmRleDogV2ViQ29yZS9o
aXN0b3J5L1BhZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGUuaAkocmV2aXNpb24gNjA0ODApCisrKyBXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQ2FjaGVkUGFnZTsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5
SXRlbTsKKyAgICBjbGFzcyBQYWdlOwogICAgIAogICAgIGNsYXNzIFBhZ2VDYWNoZSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBmcmllbmQgUGFnZUNhY2hlKiBw
YWdlQ2FjaGUoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBib29sIGNhbkNhY2hlKFBhZ2Uq
KTsKIAogICAgICAgICB2b2lkIHNldENhcGFjaXR5KGludCk7IC8vIG51bWJlciBvZiBwYWdlcyB0
byBjYWNoZQogICAgICAgICBpbnQgY2FwYWNpdHkoKSB7IHJldHVybiBtX2NhcGFjaXR5OyB9CiAg
ICAgICAgIAotICAgICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFzc1Jl
ZlB0cjxDYWNoZWRQYWdlPik7IC8vIFBydW5lcyBpZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVkLgor
ICAgICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFnZSopOyAvLyBQcnVu
ZXMgaWYgY2FwYWNpdHkoKSBpcyBleGNlZWRlZC4KICAgICAgICAgdm9pZCByZW1vdmUoSGlzdG9y
eUl0ZW0qKTsKLSAgICAgICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtKiBpdGVtKSB7IHJl
dHVybiBpdGVtID8gaXRlbS0+bV9jYWNoZWRQYWdlLmdldCgpIDogMDsgfQorICAgICAgICBDYWNo
ZWRQYWdlKiBnZXQoSGlzdG9yeUl0ZW0qIGl0ZW0pOwogCiAgICAgICAgIHZvaWQgcmVsZWFzZUF1
dG9yZWxlYXNlZFBhZ2VzTm93KCk7CiAgICAgICAgIApAQCAtNTksNiArNjMsOCBAQAogCiAgICAg
ICAgIFBhZ2VDYWNoZSgpOyAvLyBVc2UgcGFnZUNhY2hlKCkgaW5zdGVhZC4KICAgICAgICAgflBh
Z2VDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVu
dGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMu
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKEZyYW1lKik7CiAKICAgICAgICAgdm9pZCBhZGRUb0xSVUxpc3QoSGlzdG9yeUl0ZW0q
KTsgLy8gQWRkcyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KICAgICAgICAgdm9pZCByZW1vdmVG
cm9tTFJVTGlzdChIaXN0b3J5SXRlbSopOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAkocmV2aXNpb24gNjA0ODApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgICAgICBsb2FkZXItPnNldEZv
cmNlZFNhbmRib3hGbGFncyhTYW5kYm94QWxsKTsKICAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VS
ZXF1ZXN0LCBmYWxzZSk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRl
ZAogICAgICAgICBsb2FkZXItPnBvbGljeUNoZWNrZXIoKS0+Y2FuY2VsQ2hlY2soKTsgLy8gY2Fu
Y2VsIGFueSBwb2xpY3kgY2hlY2tzCi0gICAgICAgIGxvYWRlci0+Y29tbWl0UHJvdmlzaW9uYWxM
b2FkKDApOworICAgICAgICBsb2FkZXItPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgICAg
ICBsb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwogICAgICAg
ICBsb2FkZXItPndyaXRlcigpLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRv
Y3VtZW50CiAgICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmFkZERhdGEoZGF0YSgpLT5kYXRhKCks
IGRhdGEoKS0+c2l6ZSgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDYw
NDgwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDEzLDIwOCArMTQxMyw2IEBACiB9CiAjZW5kaWYKIAotYm9vbCBGcmFtZUxvYWRlcjo6Y2Fu
Q2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpCi17Ci0gICAgZm9yIChGcmFtZSogY2hpbGQg
PSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNoaWxkLT5sb2FkZXIoKS0+Y2Fu
Q2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAgICAgICAgIAotICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyCi0gICAg
ICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkKLSAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGV2ZXIgY2hhbmdlIHRoaXMgc28gdGhhdCBmcmFtZXMgd2l0
aCBwbHVnLWlucyB3aWxsIGJlIGNhY2hlZCwKLSAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB3ZSBkb24ndCBjYWNoZSBmcmFtZXMgdGhhdCBoYXZlIG91dHN0YW5kaW5nIE5QT2Jq
ZWN0cwotICAgICAgICAvLyAob2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBwbHVnLWluKS4gU2luY2Ug
dGhlcmUgaXMgbm8gd2F5IHRvIHBhdXNlL3Jlc3VtZSBhIE5ldHNjYXBlIHBsdWctaW4sCi0gICAg
ICAgIC8vIHRoZXkgd291bGQgbmVlZCB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZW4gcmVjcmVhdGVk
LCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY2FuIHJlY3JlYXRlCi0gICAgICAgIC8vIHRo
ZSByaWdodCBOUE9iamVjdHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNTE5NzA0MT4gZm9yIG1vcmUg
aW5mb3JtYXRpb24uCi0gICAgICAgICYmICFtX2NvbnRhaW5zUGx1Z0lucwotICAgICAgICAmJiAh
bV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKQotICAgICAgICAmJiAoIW1fZnJhbWUtPmRvbVdpbmRv
dygpIHx8ICFtX2ZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLnVubG9hZEV2ZW50KSkKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgICYmICFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkKLSNlbmRpZgotI2lmIEVOQUJMRShT
SEFSRURfV09SS0VSUykKLSAgICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1No
YXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSNlbmRpZgotICAgICAgICAmJiAhbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCi0gICAgICAgICYmIGhpc3Rvcnko
KS0+Y3VycmVudEl0ZW0oKQotICAgICAgICAmJiAhbV9xdWlja1JlZGlyZWN0Q29taW5nCi0gICAg
ICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkKLSAgICAgICAg
JiYgIW1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKQotICAgICAgICAmJiBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCi0jaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3Rp
Z2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCi0gICAgICAgIC8v
IGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQg
d29yay4KLSAgICAgICAgJiYgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCi0jZW5kaWYKLSNpZiBFTkFCTEUoV01MKQotICAgICAg
ICAmJiAhZnJhbWVDb250YWluc1dNTENvbnRlbnQobV9mcmFtZSkKLSNlbmRpZgotICAgICAgICAm
JiBtX2NsaWVudC0+Y2FuQ2FjaGVQYWdlKCkKLSAgICAgICAgOwotfQotCi1ib29sIEZyYW1lTG9h
ZGVyOjpjYW5DYWNoZVBhZ2UoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBsb2dDYW5DYWNoZVBh
Z2VEZWNpc2lvbigpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gQ2FjaGUgdGhlIHBhZ2UsIGlmIHBv
c3NpYmxlLgotICAgIC8vIERvbid0IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlkZGxl
IG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwgd2FudCB0bwotICAgIC8vIHN0b3JlIHRoZSBm
aW5hbCBwYWdlIHdlIGVuZCB1cCBvbi4KLSAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBj
YWNoZSBvbiBhIHJlbG9hZCBvciBsb2FkU2FtZSwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlCi0g
ICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KLSAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzQ4ODY1OTI+IC0gV2Ugc2hvdWxkIHdvcmsgb3V0IHRoZSBjb21w
bGV4aXRpZXMgb2YgY2FjaGluZyBwYWdlcyB3aXRoIGZyYW1lcyBhcyB0aGV5Ci0gICAgLy8gYXJl
IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhZ2VzIG9uIHRoZSB3ZWIsIGFuZCBvZnRlbiB0aG9zZSB0
aGF0IHdvdWxkIGJlbmVmaXQgdGhlIG1vc3QgZnJvbSBjYWNoaW5nIQotICAgIEZyYW1lTG9hZFR5
cGUgbG9hZFR5cGUgPSB0aGlzLT5sb2FkVHlwZSgpOwotICAgIAotICAgIHJldHVybiAhbV9mcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKQotICAgICAgICAmJiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpCi0gICAgICAgICYmIG1fZnJhbWUt
PnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKQotICAgICAgICAmJiBtX2ZyYW1l
LT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMAotICAgICAgICAmJiBt
X2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKQotICAgICAgICAmJiBs
b2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2FkIAotICAgICAgICAmJiBsb2FkVHlwZSAhPSBG
cmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbgotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFt
ZUxvYWRUeXBlU2FtZQotICAgICAgICA7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgU3Ry
aW5nJiBwYWdlQ2FjaGVMb2dQcmVmaXgoaW50IGluZGVudExldmVsKQotewotICAgIHN0YXRpYyBp
bnQgcHJldmlvdXNJbmRlbnQgPSAtMTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
cHJlZml4LCAoKSk7Ci0gICAgCi0gICAgaWYgKGluZGVudExldmVsICE9IHByZXZpb3VzSW5kZW50
KSB7ICAgIAotICAgICAgICBwcmV2aW91c0luZGVudCA9IGluZGVudExldmVsOwotICAgICAgICBw
cmVmaXgudHJ1bmNhdGUoMCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldmlvdXNJ
bmRlbnQ7ICsraSkKLSAgICAgICAgICAgIHByZWZpeCArPSAiICAgICI7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhZ2VDYWNoZUxvZyhjb25zdCBT
dHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIExPRyhQYWdlQ2Fj
aGUsICIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KLSNkZWZpbmUgUENMT0coLi4uKSBwYWdlQ2FjaGVMb2cocGFnZUNhY2hlTG9nUHJlZml4
KGluZGVudExldmVsKSwgU3RyaW5nOjpmb3JtYXQoX19WQV9BUkdTX18pKQotCi12b2lkIEZyYW1l
TG9hZGVyOjpsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpCi17Ci0gICAgLy8gT25seSBib3RoZXIg
bG9nZ2luZyBmb3IgbWFpbiBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2
ZSBjb250ZW50LgotICAgIGlmIChtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBLVVJMIGN1cnJlbnRVUkwgPSBtX2RvY3VtZW50TG9hZGVyID8gbV9k
b2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCk7Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOwotICAgIFBD
TE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKLQot
ICAgIGJvb2wgY2Fubm90Q2FjaGUgPSAhbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKDEpOwotICAg
ICAgICAKLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gdGhpcy0+bG9hZFR5cGUoKTsKLSAg
ICBkbyB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhIHBhcmVudCBmcmFtZSIpOyBjYW5ub3RDYWNoZSA9
IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgICAgIFBD
TE9HKCIgICAtVGhlcmUgaXMgbm8gUGFnZSBvYmplY3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
bV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpKQotICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxlZCIpOyBjYW5u
b3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCEobV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9y
d2FyZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDApKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRo
ZSBiYWNrL2ZvcndhcmQgbGlzdCBoYXMgYSAwIGNhcGFjaXR5Iik7IGNhbm5vdENhY2hlID0gdHJ1
ZTsgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VD
YWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2Yg
Y2FjaGUgZGlzYWJsZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2Fk
VHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUxv
YWQgdHlwZSBpczogUmVsb2FkIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAo
bG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pCi0gICAgICAgICAgICB7
IFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQgZnJvbSBvcmlnaW4iKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFNhbWUiKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9Ci0gICAgfSB3aGlsZSAoZmFsc2UpOwotICAgIAotICAgIFBDTE9HKGNhbm5v
dENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4g
YmUgY2FjaGVkXG4tLS0tLS0tLSIpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNo
ZUZyYW1lRGVjaXNpb24oaW50IGluZGVudExldmVsKQotewotICAgIC8vIE9ubHkgYm90aGVyIGxv
Z2dpbmcgZm9yIGZyYW1lcyB0aGF0IGhhdmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRl
bnQuCi0gICAgaWYgKG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIEtVUkwgY3VycmVudFVSTCA9IG1fZG9jdW1lbnRMb2FkZXIgPyBtX2Rv
Y3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKTsKLSAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgS1VS
TCBuZXdVUkwgPSBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIgPyBtX3Byb3Zpc2lvbmFsRG9j
dW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpOwotICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkK
LSAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmln
YXRpbmcgZnJvbSAoJXMpIHRvICglcyk6IiwgY3VycmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBuZXdVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBQ
Q0xPRygiIERldGVybWluaW5nIGlmIHN1YmZyYW1lIHdpdGggVVJMICglcykgY2FuIGJlIGNhY2hl
ZDoiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAKLSAgICBi
b29sIGNhbm5vdENhY2hlID0gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlmICghbV9kb2N1
bWVudExvYWRlcikgewotICAgICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBEb2N1bWVu
dExvYWRlciBvYmplY3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+
bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1N
YWluIGRvY3VtZW50IGhhcyBhbiBlcnJvciIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAg
ICAgaWYgKG1fY29udGFpbnNQbHVnSW5zKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1l
IGNvbnRhaW5zIHBsdWdpbnMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICht
X1VSTC5wcm90b2NvbElzKCJodHRwcyIpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1l
IGlzIEhUVFBTIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9mcmFtZS0+
ZG9tV2luZG93KCkgJiYgbV9mcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUg
aGFzIGFuIHVubG9hZCBldmVudCBsaXN0ZW5lciIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNP
cGVuRGF0YWJhc2VzKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIG9wZW4g
ZGF0YWJhc2UgaGFuZGxlcyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNlbmRpZgotI2lmIEVO
QUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAgaWYgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6
Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpCi0gICAgICAgICAgICB7IFBD
TE9HKCIgICAtRnJhbWUgaGFzIGFzc29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSNlbmRpZgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNp
bmdHZW9sb2NhdGlvbigpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2Vv
bG9jYXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghaGlzdG9yeSgp
LT5jdXJyZW50SXRlbSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlz
dG9yeSBpdGVtIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9xdWlja1Jl
ZGlyZWN0Q29taW5nKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlz
IGNvbWluZyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZG9jdW1lbnRM
b2FkZXItPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1E
b2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5nIGluIEFQSSBzZW5zZSIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKSkK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxl
IG9mIHN0b3BwaW5nIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAoIW1fZnJh
bWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpCi0gICAgICAgICAg
ICB7IFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3RpdmUgRE9N
IE9iamVjdHMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpCi0gICAgICAgICAgICB7IFBDTE9H
KCIgICAtVGhlIERvY3VtZW50TG9hZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fu
bm90Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2Fj
aGVQYWdlKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMg
ZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICB9IHdo
aWxlIChmYWxzZSk7Ci0KLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygp
KQotICAgICAgICBpZiAoIWNoaWxkLT5sb2FkZXIoKS0+bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9u
KGluZGVudExldmVsICsgMSkpCi0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAg
Ci0gICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBG
cmFtZSBDQU4gYmUgY2FjaGVkIik7Ci0gICAgUENMT0coIistLS0iKTsKLQotICAgIHJldHVybiAh
Y2Fubm90Q2FjaGU7Ci19Ci0jZW5kaWYKLQogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlRmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKQogewogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpA
QCAtMjM1MSw5ICsyMTQ5LDkgQEAKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlQ29tcGxldGUpOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxD
YWNoZWRQYWdlPiBwcnBDYWNoZWRQYWdlKQordm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKCkKIHsKLSAgICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBycENh
Y2hlZFBhZ2U7CisgICAgUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBtX2xvYWRpbmdG
cm9tQ2FjaGVkUGFnZSA/IHBhZ2VDYWNoZSgpLT5nZXQoaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0
ZW0oKSkgOiAwOwogICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcGRsID0gbV9wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyOwogCiAgICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVMb2FkaW5nICVz
OiBBYm91dCB0byBjb21taXQgcHJvdmlzaW9uYWwgbG9hZCBmcm9tIHByZXZpb3VzIFVSTCAnJXMn
IHRvIG5ldyBVUkwgJyVzJyIsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIG1fVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIApAQCAtMjM2MSw3ICsyMTU5
LDExIEBACiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0aGUgcGFn
ZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSBrbm93IGZvciBzdXJl
IHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBiZSBsb2FkZWQuCi0gICAgY2FjaGVQYWdlRm9y
SGlzdG9yeUl0ZW0oaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKKyAgICBIaXN0b3J5SXRlbSog
aXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKKyAgICBpZiAoUGFnZUNhY2hlOjpjYW5D
YWNoZShtX2ZyYW1lLT5wYWdlKCkpICYmICFpdGVtLT5pc0luUGFnZUNhY2hlKCkpIHsKKyAgICAg
ICAgcGFnZUhpZGRlbigpOworICAgICAgICBwYWdlQ2FjaGUoKS0+YWRkKGl0ZW0sIG1fZnJhbWUt
PnBhZ2UoKSk7CisgICAgfQogICAgIAogICAgIGlmIChtX2xvYWRUeXBlICE9IEZyYW1lTG9hZFR5
cGVSZXBsYWNlKQogICAgICAgICBjbG9zZU9sZERhdGFTb3VyY2VzKCk7CkBAIC0yMzc4LDkgKzIx
ODAsMTEgQEAKICAgICBpZiAobV9zZW50UmVkaXJlY3ROb3RpZmljYXRpb24pCiAgICAgICAgIGNs
aWVudFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChmYWxzZSk7CiAgICAgCi0gICAgaWYgKGNh
Y2hlZFBhZ2UgJiYgY2FjaGVkUGFnZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgb3BlbigqY2FjaGVk
UGFnZSk7Ci0gICAgZWxzZSB7ICAgICAgICAKKyAgICBpZiAoY2FjaGVkUGFnZSAmJiBjYWNoZWRQ
YWdlLT5kb2N1bWVudCgpKSB7CisgICAgICAgIHByZXBhcmVGb3JDYWNoZWRQYWdlUmVzdG9yZSgp
OworICAgICAgICBjYWNoZWRQYWdlLT5yZXN0b3JlKG1fZnJhbWUtPnBhZ2UoKSk7CisgICAgICAg
IGNoZWNrQ29tcGxldGVkKCk7CisgICAgfSBlbHNlIHsgICAgICAgIAogICAgICAgICBLVVJMIHVy
bCA9IHBkbC0+c3Vic3RpdHV0ZURhdGEoKS5yZXNwb25zZVVSTCgpOwogICAgICAgICBpZiAodXJs
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHVybCA9IHBkbC0+dXJsKCk7CkBAIC0yNTk2LDcgKzI0
MDAsNyBAQAogICAgIG1fY2xpZW50LT5zZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGZhbHNlKTsg
Ly8gc3RvcCBnaXZpbmcgb3V0IHRoZSBhY3R1YWwgRE9NRG9jdW1lbnQgdG8gb2JzZXJ2ZXJzCiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSkKK3ZvaWQg
RnJhbWVMb2FkZXI6OnByZXBhcmVGb3JDYWNoZWRQYWdlUmVzdG9yZSgpCiB7CiAgICAgQVNTRVJU
KCFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKTsKICAgICBBU1NFUlQobV9mcmFtZS0+cGFnZSgp
KTsKQEAgLTI2MTIsMTAgKzI0MTYsNiBAQAogICAgICAgICBtX2ZyYW1lLT5zZXRKU1N0YXR1c0Jh
clRleHQoU3RyaW5nKCkpOwogICAgICAgICBtX2ZyYW1lLT5zZXRKU0RlZmF1bHRTdGF0dXNCYXJU
ZXh0KFN0cmluZygpKTsKICAgICB9Ci0KLSAgICBjYWNoZWRQYWdlLnJlc3RvcmUobV9mcmFtZS0+
cGFnZSgpKTsKLQotICAgIGNoZWNrQ29tcGxldGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
Om9wZW4oQ2FjaGVkRnJhbWVCYXNlJiBjYWNoZWRGcmFtZSkKQEAgLTM0NzAsOCArMzI3MCwxMCBA
QAogCiAgICAgc2V0UG9saWN5RG9jdW1lbnRMb2FkZXIoMCk7CiAKLSAgICBpZiAoaXNCYWNrRm9y
d2FyZExvYWRUeXBlKHR5cGUpICYmIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgp
KQorICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgJiYgaGlzdG9yeSgpLT5wcm92
aXNpb25hbEl0ZW0oKS0+aXNJblBhZ2VDYWNoZSgpKSB7CisgICAgICAgIGxvYWRQcm92aXNpb25h
bEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYg
KGZvcm1TdGF0ZSkKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oJlBv
bGljeUNoZWNrZXI6OmNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0sIGZvcm1TdGF0ZSk7
CkBAIC0zNTg0LDM4ICszMzg2LDE5IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZy
YW1lTG9hZGVyOjpsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKQordm9pZCBGcmFt
ZUxvYWRlcjo6bG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkKIHsKLSAgICBSZWZQ
dHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQoaGlzdG9yeSgpLT5w
cm92aXNpb25hbEl0ZW0oKSk7Ci0gICAgaWYgKCFjYWNoZWRQYWdlIHx8ICFjYWNoZWRQYWdlLT5k
b2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRG9jdW1lbnRMb2FkZXIqIHBy
b3Zpc2lvbmFsTG9hZGVyID0gcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpOworICAgIExPRyhQ
YWdlQ2FjaGUsICJXZWJDb3JlUGFnZUNhY2hlOiBMb2FkaW5nIHByb3Zpc2lvbmFsIERvY3VtZW50
TG9hZGVyICVwIHdpdGggVVJMICclcycgZnJvbSBDYWNoZWRQYWdlIiwgcHJvdmlzaW9uYWxEb2N1
bWVudExvYWRlcigpLCBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgRG9jdW1lbnRMb2FkZXIgKnByb3Zpc2lvbmFsTG9hZGVy
ID0gcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpOwotICAgIExPRyhQYWdlQ2FjaGUsICJXZWJD
b3JlUGFnZUNhY2hlOiBGcmFtZUxvYWRlciAlcCBsb2FkaW5nIHByb3Zpc2lvbmFsIERvY3VtZW50
TG9hZGVyICVwIHdpdGggVVJMICclcycgZnJvbSBDYWNoZWRQYWdlICVwIiwgdGhpcywgcHJvdmlz
aW9uYWxMb2FkZXIsIHByb3Zpc2lvbmFsTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBjYWNoZWRQYWdlLmdldCgpKTsKLSAgICAKICAgICBwcm92aXNpb25hbExvYWRlci0+cHJl
cGFyZUZvckxvYWRTdGFydCgpOwogCiAgICAgbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgPSB0cnVl
OwogCiAgICAgcHJvdmlzaW9uYWxMb2FkZXItPnNldENvbW1pdHRlZCh0cnVlKTsKLSAgICBjb21t
aXRQcm92aXNpb25hbExvYWQoY2FjaGVkUGFnZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNhY2hl
UGFnZUZvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGlmICghY2FuQ2Fj
aGVQYWdlKCkgfHwgaXRlbS0+aXNJblBhZ2VDYWNoZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwYWdlSGlkZGVuKCk7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpIHsKLSAgICAgICAgUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBDYWNoZWRQYWdl
OjpjcmVhdGUocGFnZSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5hZGQoaXRlbSwgY2FjaGVkUGFn
ZS5yZWxlYXNlKCkpOwotICAgIH0KLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6cGFnZUhpZGRlbigp
CiB7CiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0cnVlOwpAQCAt
MzY4MSwyMSArMzQ2NCwxMCBAQAogewogICAgIC8vIFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBj
YW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0ZW1zIGFzIGNoaWxkIGZyYW1lcyBsb2FkCiAgICAgaGlz
dG9yeSgpLT5zZXRQcm92aXNpb25hbEl0ZW0oaXRlbSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgaWYg
d2UnbGwgYmUgdXNpbmcgdGhlIHBhZ2UgY2FjaGUuICBXZSBvbmx5IHVzZSB0aGUgcGFnZSBjYWNo
ZQotICAgIC8vIGlmIG9uZSBleGlzdHMgYW5kIGl0IGlzIGxlc3MgdGhhbiBfYmFja0ZvcndhcmRD
YWNoZUV4cGlyYXRpb25JbnRlcnZhbAotICAgIC8vIHNlY29uZHMgb2xkLiAgSWYgdGhlIGNhY2hl
IGlzIGV4cGlyZWQgaXQgZ2V0cyBmbHVzaGVkIGhlcmUuCi0gICAgaWYgKFJlZlB0cjxDYWNoZWRQ
YWdlPiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChpdGVtKSkgewotICAgICAgICAvLyBG
SVhNRTogMTgwMCBzaG91bGQgbm90IGJlIGhhcmRjb2RlZCwgaXQgc2hvdWxkIGNvbWUgZnJvbQot
ICAgICAgICAvLyBXZWJLaXRCYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbkludGVydmFsS2V5IGlu
IFdlYktpdC4KLSAgICAgICAgLy8gT3Igd2Ugc2hvdWxkIHJlbW92ZSBXZWJLaXRCYWNrRm9yd2Fy
ZENhY2hlRXhwaXJhdGlvbkludGVydmFsS2V5LgotICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAt
IGNhY2hlZFBhZ2UtPnRpbWVTdGFtcCgpIDw9IDE4MDApIHsKLSAgICAgICAgICAgIGxvYWRXaXRo
RG9jdW1lbnRMb2FkZXIoY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5cGUsIDAp
OyAgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBM
T0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2Fy
ZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaGlzdG9yeSgpLT5wcm92
aXNpb25hbEl0ZW0oKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBw
YWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOworCisgICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBh
Z2UgPSBwYWdlQ2FjaGUoKS0+Z2V0KGl0ZW0pKSB7CisgICAgICAgIGxvYWRXaXRoRG9jdW1lbnRM
b2FkZXIoY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5cGUsIDApOyAgIAorICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgS1VSTCBpdGVtVVJMID0gaXRlbS0+dXJsKCk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA2MDQ4MCkKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1
NSw3IEBACiB7CiAgICAgaWYgKG1fZ290Rmlyc3RCeXRlICYmICFtX2NvbW1pdHRlZCkgewogICAg
ICAgICBtX2NvbW1pdHRlZCA9IHRydWU7Ci0gICAgICAgIGZyYW1lTG9hZGVyKCktPmNvbW1pdFBy
b3Zpc2lvbmFsTG9hZCgwKTsKKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y29tbWl0UHJvdmlzaW9u
YWxMb2FkKCk7CiAgICAgfQogfQogCkBAIC0zOTAsMTIgKzM5MCwxMyBAQAogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghbV9zdWJyZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIERvY3VtZW50KiBkb2MgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENv
dW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKFRva2VuaXplciog
dG9rID0gZG9jLT50b2tlbml6ZXIoKSkKLSAgICAgICAgICAgIGlmICh0b2stPnByb2Nlc3NpbmdE
YXRhKCkpCisgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgaWYgKGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDb3VudCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKFRva2VuaXplciogdG9r
ID0gZG9jLT50b2tlbml6ZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAodG9rLT5wcm9jZXNzaW5n
RGF0YSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+c3ViZnJhbWVJc0xvYWRpbmcoKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNjA0ODApCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICB2b2lk
IHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SWNvblVSTChjb25zdCBTdHJp
bmcmKTsKIAotICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVk
UGFnZT4pOworICAgIHZvaWQgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiAgICAgYm9vbCBpc0xv
YWRpbmdGcm9tQ2FjaGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZGluZ0Zyb21DYWNoZWRQ
YWdlOyB9CiAKICAgICBib29sIGNvbW1pdHRpbmdGaXJzdFJlYWxMb2FkKCkgY29uc3QgeyByZXR1
cm4gIW1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCAmJiAhbV9jb21taXR0ZWRGaXJzdFJl
YWxEb2N1bWVudExvYWQ7IH0KQEAgLTM1MSw3ICszNTEsOSBAQAogICAgIGJvb2wgaXNEaXNwbGF5
aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGlzcGxheWluZ0lu
aXRpYWxFbXB0eURvY3VtZW50OyB9CiAKICAgICB2b2lkIGNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQ
cm9wZXJ0aWVzID0gdHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVlLCBib29sIGNs
ZWFyRnJhbWVWaWV3ID0gdHJ1ZSk7Ci0gICAgCisKKyAgICBib29sIHF1aWNrUmVkaXJlY3RDb21p
bmcoKSBjb25zdCB7IHJldHVybiBtX3F1aWNrUmVkaXJlY3RDb21pbmc7IH0KKwogICAgIGJvb2wg
c2hvdWxkQ2xvc2UoKTsKIAogcHJpdmF0ZToKQEAgLTM3Miw4ICszNzQsNyBAQAogICAgIHZvaWQg
bmF2aWdhdGVXaXRoaW5Eb2N1bWVudChIaXN0b3J5SXRlbSopOwogICAgIHZvaWQgbmF2aWdhdGVU
b0RpZmZlcmVudERvY3VtZW50KEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgCi0g
ICAgYm9vbCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKLSAgICB2b2lkIGNh
Y2hlUGFnZUZvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKik7CisgICAgdm9pZCBsb2FkUHJvdmlz
aW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKICAgICB2b2lkIHBhZ2VIaWRkZW4oKTsKIAogICAg
IHZvaWQgcmVjZWl2ZWRGaXJzdERhdGEoKTsKQEAgLTQxNCw3ICs0MTUsNyBAQAogICAgIHZvaWQg
c2V0U3RhdGUoRnJhbWVTdGF0ZSk7CiAKICAgICB2b2lkIGNsb3NlT2xkRGF0YVNvdXJjZXMoKTsK
LSAgICB2b2lkIG9wZW4oQ2FjaGVkUGFnZSYpOworICAgIHZvaWQgcHJlcGFyZUZvckNhY2hlZFBh
Z2VSZXN0b3JlKCk7CiAKICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlBZnRlckNsaWVudFJlZGlyZWN0
KCk7CiAK
</data>
<flag name="review"
          id="42210"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57709</attachid>
            <date>2010-06-02 15:40:58 -0700</date>
            <delta_ts>2010-06-03 09:30:23 -0700</delta_ts>
            <desc>Only try to cache when the main frame is being committed</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>30595</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCShyZXZpc2lvbiA2MDQ4MCkKKysrIFdlYkNvcmUvaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMjEgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKIAorI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5j
bHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1l
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTQwLDYgKzUwLDE3MyBAQAog
CiBzdGF0aWMgY29uc3QgZG91YmxlIGF1dG9yZWxlYXNlSW50ZXJ2YWwgPSAzOwogCisjaWZuZGVm
IE5ERUJVRworCitzdGF0aWMgU3RyaW5nJiBwYWdlQ2FjaGVMb2dQcmVmaXgoaW50IGluZGVudExl
dmVsKQoreworICAgIHN0YXRpYyBpbnQgcHJldmlvdXNJbmRlbnQgPSAtMTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgcHJlZml4LCAoKSk7CisgICAgCisgICAgaWYgKGluZGVudExl
dmVsICE9IHByZXZpb3VzSW5kZW50KSB7ICAgIAorICAgICAgICBwcmV2aW91c0luZGVudCA9IGlu
ZGVudExldmVsOworICAgICAgICBwcmVmaXgudHJ1bmNhdGUoMCk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcHJldmlvdXNJbmRlbnQ7ICsraSkKKyAgICAgICAgICAgIHByZWZpeCArPSAi
ICAgICI7CisgICAgfQorICAgIAorICAgIHJldHVybiBwcmVmaXg7Cit9CisKK3N0YXRpYyB2b2lk
IHBhZ2VDYWNoZUxvZyhjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIExPRyhQYWdlQ2FjaGUsICIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIG1l
c3NhZ2UudXRmOCgpLmRhdGEoKSk7Cit9CisgICAgCisjZGVmaW5lIFBDTE9HKC4uLikgcGFnZUNh
Y2hlTG9nKHBhZ2VDYWNoZUxvZ1ByZWZpeChpbmRlbnRMZXZlbCksIFN0cmluZzo6Zm9ybWF0KF9f
VkFfQVJHU19fKSkKKyAgICAKK3N0YXRpYyBib29sIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihG
cmFtZSogZnJhbWUsIGludCBpbmRlbnRMZXZlbCkKK3sKKyAgICAvLyBPbmx5IGJvdGhlciBsb2dn
aW5nIGZvciBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50
LgorICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEtVUkwgY3VycmVudFVSTCA9IGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUENMT0coIistLS0iKTsKKyAgICBLVVJMIG5l
d1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpID8gZnJh
bWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgp
OworICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgUENMT0coIiBEZXRlcm1pbmlu
ZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmlnYXRpbmcgZnJvbSAoJXMpIHRvICglcyk6Iiwg
Y3VycmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBuZXdVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIHN1YmZy
YW1lIHdpdGggVVJMICglcykgY2FuIGJlIGNhY2hlZDoiLCBjdXJyZW50VVJMLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIAorICAgIGJvb2wgY2Fubm90Q2FjaGUgPSBmYWxzZTsKKyAgICAK
KyAgICBkbyB7CisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
KSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9i
amVjdCIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFBDTE9H
KCIgICAtTWFpbiBkb2N1bWVudCBoYXMgYW4gZXJyb3IiKTsKKyAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jb250
YWluc1BsdWdpbnMoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBw
bHVnaW5zIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSkgewor
ICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBpcyBIVFRQUyIpOworICAgICAgICAgICAgY2Fu
bm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+ZG9tV2luZG93
KCkgJiYgZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
dW5sb2FkRXZlbnQpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBhbiB1bmxv
YWQgZXZlbnQgbGlzdGVuZXIiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAg
ICAgICAgfQorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUg
aGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAg
ICAgIGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZyYW1lLT5k
b2N1bWVudCgpKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgYXNzb2NpYXRl
ZCBTaGFyZWRXb3JrZXJzIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2VvbG9j
YXRpb24oKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSB1c2VzIEdlb2xvY2F0aW9u
Iik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkgeworICAgICAg
ICAgICAgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOworICAgICAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmcmFtZS0+bG9hZGVy
KCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1RdWlj
ayByZWRpcmVjdCBpcyBjb21pbmciKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRG9jdW1l
bnRMb2FkZXIgaXMgc3RpbGwgbG9hZGluZyBpbiBBUEkgc2Vuc2UiKTsKKyAgICAgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIg
ICAtRG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOworICAgICAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghZnJhbWUt
PmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpIHsKKyAgICAgICAgICAg
IFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3RpdmUgRE9NIE9i
amVjdHMiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAgIGlmICghZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNo
ZUluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9h
ZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtVGhl
IGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOworICAgICAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOyAKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGZhbHNlKTsKKyAg
ICAKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYg
KCFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSkpCisgICAg
ICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgCisgICAgUENMT0coY2Fubm90Q2FjaGUg
PyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU4gYmUgY2FjaGVkIik7Cisg
ICAgUENMT0coIistLS0iKTsKKyAgICAKKyAgICByZXR1cm4gIWNhbm5vdENhY2hlOworfQorICAg
IAorc3RhdGljIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oUGFnZSogcGFnZSkKK3sKKyAg
ICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZyYW1lcyB0aGF0IGhhdmUgYWN0dWFs
bHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCisgICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgpLT5s
b2FkZXIoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47
CisgICAgS1VSTCBjdXJyZW50VVJMID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpID8gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT51cmwoKSA6IEtVUkwoKTsKKyAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOyAgICAKKyAgICBQQ0xP
RygiLS0tLS0tLS1cbiBEZXRlcm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7CisgICAg
CisgICAgYm9vbCBjYW5ub3RDYWNoZSA9ICFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24ocGFnZS0+
bWFpbkZyYW1lKCksIDEpOworICAgIAorICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCk7CisgICAgaWYgKCFwYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtVGhlIGJhY2sv
Zm9yd2FyZCBsaXN0IGlzIGRpc2FibGVkIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKCEocGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmNhcGFjaXR5KCkgPiAw
KSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlzdCBoYXMgYSAwIGNh
cGFjaXR5Iik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFw
YWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1Q
YWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7CisgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxv
YWQpIHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCIpOworICAgICAg
ICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxv
YWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgeworICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBp
czogUmVsb2FkIGZyb20gb3JpZ2luIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVTYW1lKSB7CisgICAgICAgIFBD
TE9HKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7CisgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIFBhZ2UgQ0FOTk9UIGJl
IGNhY2hlZFxuLS0tLS0tLS0iIDogIiBQYWdlIENBTiBiZSBjYWNoZWRcbi0tLS0tLS0tIik7Cit9
CisKKyNlbmRpZiAKKwogUGFnZUNhY2hlKiBwYWdlQ2FjaGUoKQogewogICAgIHN0YXRpYyBQYWdl
Q2FjaGUqIHN0YXRpY1BhZ2VDYWNoZSA9IG5ldyBQYWdlQ2FjaGU7CkBAIC01NCw2ICsyMzEsNzQg
QEAKICAgICAsIG1fYXV0b3JlbGVhc2VUaW1lcih0aGlzLCAmUGFnZUNhY2hlOjpyZWxlYXNlQXV0
b3JlbGVhc2VkUGFnZXNOb3dPclJlc2NoZWR1bGUpCiB7CiB9CisgICAgCitib29sIFBhZ2VDYWNo
ZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAg
Zm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjYW5D
YWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKQorICAgICAgICAmJiBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1h
aW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGV2ZXIg
Y2hhbmdlIHRoaXMgc28gdGhhdCBmcmFtZXMgd2l0aCBwbHVnLWlucyB3aWxsIGJlIGNhY2hlZCwK
KyAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBjYWNoZSBmcmFt
ZXMgdGhhdCBoYXZlIG91dHN0YW5kaW5nIE5QT2JqZWN0cworICAgICAgICAvLyAob2JqZWN0cyBj
cmVhdGVkIGJ5IHRoZSBwbHVnLWluKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHBhdXNlL3Jl
c3VtZSBhIE5ldHNjYXBlIHBsdWctaW4sCisgICAgICAgIC8vIHRoZXkgd291bGQgbmVlZCB0byBi
ZSBkZXN0cm95ZWQgYW5kIHRoZW4gcmVjcmVhdGVkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRoYXQg
d2UgY2FuIHJlY3JlYXRlCisgICAgICAgIC8vIHRoZSByaWdodCBOUE9iamVjdHMuIFNlZSA8cmRh
cjovL3Byb2JsZW0vNTE5NzA0MT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICYmICFm
cmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpCisgICAgICAgICYmICFmcmFtZS0+bG9h
ZGVyKCktPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikKKyAgICAgICAgJiYgKCFmcmFtZS0+ZG9t
V2luZG93KCkgfHwgIWZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLnVubG9hZEV2ZW50KSkKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgICYmICFm
cmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpCisjZW5kaWYKKyNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCisgICAgICAgICYmICFTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNT
aGFyZWRXb3JrZXJzKGZyYW1lLT5kb2N1bWVudCgpKQorI2VuZGlmCisgICAgICAgICYmICFmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCisgICAgICAgICYmIGZyYW1lLT5sb2Fk
ZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVy
KCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKQorICAgICAgICAmJiAhZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkKKyAgICAgICAgJiYgIWZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpCisgICAgICAgICYmIGZy
YW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCisjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBp
bnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCisgICAg
ICAgIC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tz
IHRoYXQgd29yay4KKyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKKyNlbmRpZgor
I2lmIEVOQUJMRShXTUwpCisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGFpbnNX
TUxDb250ZW50KCkKKyAgICAgICAgJiYgIWZyYW1lLT5kb2N1bWVudCgpLT5pc1dNTERvY3VtZW50
KCk7CisjZW5kaWYKKyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2FuQ2Fj
aGVQYWdlKCk7Cit9CisgICAgCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUoUGFnZSogcGFnZSkK
K3sKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24ocGFnZSk7CisjZW5kaWYKKyAgICAK
KyAgICAvLyBDYWNoZSB0aGUgcGFnZSwgaWYgcG9zc2libGUuCisgICAgLy8gRG9uJ3Qgd3JpdGUg
dG8gdGhlIGNhY2hlIGlmIGluIHRoZSBtaWRkbGUgb2YgYSByZWRpcmVjdCwgc2luY2Ugd2Ugd2ls
bCB3YW50IHRvCisgICAgLy8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5kIHVwIG9uLgorICAg
IC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVsb2FkIG9yIGxvYWRTYW1l
LCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUKKyAgICAvLyBvdmVyIGl0IGFnYWluIHdoZW4gd2Ug
bGVhdmUgdGhhdCBwYWdlLgorICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDg4NjU5Mj4g
LSBXZSBzaG91bGQgd29yayBvdXQgdGhlIGNvbXBsZXhpdGllcyBvZiBjYWNoaW5nIHBhZ2VzIHdp
dGggZnJhbWVzIGFzIHRoZXkKKyAgICAvLyBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFnZXMg
b24gdGhlIHdlYiwgYW5kIG9mdGVuIHRob3NlIHRoYXQgd291bGQgYmVuZWZpdCB0aGUgbW9zdCBm
cm9tIGNhY2hpbmchCisgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ2FjaGVQYWdl
Q29udGFpbmluZ1RoaXNGcmFtZShwYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgJiYgcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKQorICAgICAgICAmJiBwYWdlLT5iYWNrRm9yd2Fy
ZExpc3QoKS0+Y2FwYWNpdHkoKSA+IDAKKyAgICAgICAgJiYgcGFnZS0+c2V0dGluZ3MoKS0+dXNl
c1BhZ2VDYWNoZSgpCisgICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWQg
CisgICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luCisg
ICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVTYW1lOworfQogCiB2b2lkIFBhZ2VD
YWNoZTo6c2V0Q2FwYWNpdHkoaW50IGNhcGFjaXR5KQogewpAQCAtODAsMTAgKzMyNSwxMSBAQAog
ICAgIHJldHVybiBtX2F1dG9yZWxlYXNlU2V0LnNpemUoKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6
OmFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtLCBQYXNzUmVmUHRyPENhY2hlZFBh
Z2U+IGNhY2hlZFBhZ2UpCit2b2lkIFBhZ2VDYWNoZTo6YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IHBycEl0ZW0sIFBhZ2UqIHBhZ2UpCiB7CiAgICAgQVNTRVJUKHBycEl0ZW0pOwotICAgIEFT
U0VSVChjYWNoZWRQYWdlKTsKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQVNTRVJUKGNhbkNhY2hl
KHBhZ2UpKTsKICAgICAKICAgICBIaXN0b3J5SXRlbSogaXRlbSA9IHBycEl0ZW0ucmVsZWFzZVJl
ZigpOyAvLyBCYWxhbmNlZCBpbiByZW1vdmUoKS4KIApAQCAtOTEsMTMgKzMzNywzMSBAQAogICAg
IGlmIChpdGVtLT5tX2NhY2hlZFBhZ2UpCiAgICAgICAgIHJlbW92ZShpdGVtKTsKIAotICAgIGl0
ZW0tPm1fY2FjaGVkUGFnZSA9IGNhY2hlZFBhZ2U7CisgICAgaXRlbS0+bV9jYWNoZWRQYWdlID0g
Q2FjaGVkUGFnZTo6Y3JlYXRlKHBhZ2UpOwogICAgIGFkZFRvTFJVTGlzdChpdGVtKTsKICAgICAr
K21fc2l6ZTsKICAgICAKICAgICBwcnVuZSgpOwogfQogCitDYWNoZWRQYWdlKiBQYWdlQ2FjaGU6
OmdldChIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBpdGVtLT5tX2NhY2hlZFBh
Z2UuZ2V0KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IDE4MDAgc2hvdWxkIG5vdCBiZSBoYXJkY29k
ZWQsIGl0IHNob3VsZCBjb21lIGZyb20KKyAgICAgICAgLy8gV2ViS2l0QmFja0ZvcndhcmRDYWNo
ZUV4cGlyYXRpb25JbnRlcnZhbEtleSBpbiBXZWJLaXQuCisgICAgICAgIC8vIE9yIHdlIHNob3Vs
ZCByZW1vdmUgV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleS4KKyAg
ICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBjYWNoZWRQYWdlLT50aW1lU3RhbXAoKSA8PSAxODAw
KQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CisgICAgICAgIAorICAgICAgICBMT0co
UGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBj
YWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBQYWdlQ2FjaGU6OnJlbW92ZShIaXN0b3J5
SXRlbSogaXRlbSkKIHsKICAgICAvLyBTYWZlbHkgaWdub3JlIGF0dGVtcHRzIHRvIHJlbW92ZSBp
dGVtcyBub3QgaW4gdGhlIGNhY2hlLgpJbmRleDogV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAkocmV2aXNpb24gNjA0
ODApCisrKyBXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE4ICszNSwyMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVkUGFn
ZTsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKKyAgICBjbGFzcyBQ
YWdlOwogICAgIAogICAgIGNsYXNzIFBhZ2VDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBmcmllbmQgUGFnZUNhY2hlKiBwYWdlQ2FjaGUoKTsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBib29sIGNhbkNhY2hlKFBhZ2UqKTsKIAogICAgICAgICB2b2lk
IHNldENhcGFjaXR5KGludCk7IC8vIG51bWJlciBvZiBwYWdlcyB0byBjYWNoZQogICAgICAgICBp
bnQgY2FwYWNpdHkoKSB7IHJldHVybiBtX2NhcGFjaXR5OyB9CiAgICAgICAgIAotICAgICAgICB2
b2lkIGFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFzc1JlZlB0cjxDYWNoZWRQYWdlPik7
IC8vIFBydW5lcyBpZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVkLgorICAgICAgICB2b2lkIGFkZChQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFnZSopOyAvLyBQcnVuZXMgaWYgY2FwYWNpdHkoKSBp
cyBleGNlZWRlZC4KICAgICAgICAgdm9pZCByZW1vdmUoSGlzdG9yeUl0ZW0qKTsKLSAgICAgICAg
Q2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtKiBpdGVtKSB7IHJldHVybiBpdGVtID8gaXRlbS0+
bV9jYWNoZWRQYWdlLmdldCgpIDogMDsgfQorICAgICAgICBDYWNoZWRQYWdlKiBnZXQoSGlzdG9y
eUl0ZW0qIGl0ZW0pOwogCiAgICAgICAgIHZvaWQgcmVsZWFzZUF1dG9yZWxlYXNlZFBhZ2VzTm93
KCk7CiAgICAgICAgIApAQCAtNTksNiArNjMsOCBAQAogCiAgICAgICAgIFBhZ2VDYWNoZSgpOyAv
LyBVc2UgcGFnZUNhY2hlKCkgaW5zdGVhZC4KICAgICAgICAgflBhZ2VDYWNoZSgpOyAvLyBOb3Qg
aW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRl
IC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lKik7CiAK
ICAgICAgICAgdm9pZCBhZGRUb0xSVUxpc3QoSGlzdG9yeUl0ZW0qKTsgLy8gQWRkcyB0byB0aGUg
aGVhZCBvZiB0aGUgbGlzdC4KICAgICAgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5
SXRlbSopOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNjA0ODAp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2OCw3ICsyNjgsNyBAQAogICAgICAgICBsb2FkZXItPnNldEZvcmNlZFNhbmRib3hGbGFncyhT
YW5kYm94QWxsKTsKICAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VSZXF1ZXN0LCBmYWxzZSk7IC8v
IE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAogICAgICAgICBsb2FkZXIt
PnBvbGljeUNoZWNrZXIoKS0+Y2FuY2VsQ2hlY2soKTsgLy8gY2FuY2VsIGFueSBwb2xpY3kgY2hl
Y2tzCi0gICAgICAgIGxvYWRlci0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOworICAgICAgICBs
b2FkZXItPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgICAgICBsb2FkZXItPndyaXRlcigp
LT5zZXRNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwogICAgICAgICBsb2FkZXItPndyaXRlcigp
LT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CiAgICAgICAgIGxv
YWRlci0+d3JpdGVyKCktPmFkZERhdGEoZGF0YSgpLT5kYXRhKCksIGRhdGEoKS0+c2l6ZSgpKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDYwNDgwKQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEzLDIwOCArMTQxMyw2
IEBACiB9CiAjZW5kaWYKIAotYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmlu
Z1RoaXNGcmFtZSgpCi17Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoIWNoaWxkLT5sb2FkZXIoKS0+Y2FuQ2FjaGVQYWdlQ29udGFpbmlu
Z1RoaXNGcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAg
ICAgIAotICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyCi0gICAgICAgICYmIG1fZG9jdW1lbnRM
b2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkKLSAgICAgICAgLy8gRklYTUU6IElm
IHdlIGV2ZXIgY2hhbmdlIHRoaXMgc28gdGhhdCBmcmFtZXMgd2l0aCBwbHVnLWlucyB3aWxsIGJl
IGNhY2hlZCwKLSAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBj
YWNoZSBmcmFtZXMgdGhhdCBoYXZlIG91dHN0YW5kaW5nIE5QT2JqZWN0cwotICAgICAgICAvLyAo
b2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBwbHVnLWluKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRv
IHBhdXNlL3Jlc3VtZSBhIE5ldHNjYXBlIHBsdWctaW4sCi0gICAgICAgIC8vIHRoZXkgd291bGQg
bmVlZCB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZW4gcmVjcmVhdGVkLCBhbmQgdGhlcmUgaXMgbm8g
d2F5IHRoYXQgd2UgY2FuIHJlY3JlYXRlCi0gICAgICAgIC8vIHRoZSByaWdodCBOUE9iamVjdHMu
IFNlZSA8cmRhcjovL3Byb2JsZW0vNTE5NzA0MT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAg
ICAgICYmICFtX2NvbnRhaW5zUGx1Z0lucwotICAgICAgICAmJiAhbV9VUkwucHJvdG9jb2xJcygi
aHR0cHMiKQotICAgICAgICAmJiAoIW1fZnJhbWUtPmRvbVdpbmRvdygpIHx8ICFtX2ZyYW1lLT5k
b21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkK
LSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5o
YXNPcGVuRGF0YWJhc2VzKCkKLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAg
ICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFt
ZS0+ZG9jdW1lbnQoKSkKLSNlbmRpZgotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXNpbmdHZW9sb2NhdGlvbigpCi0gICAgICAgICYmIGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQot
ICAgICAgICAmJiAhbV9xdWlja1JlZGlyZWN0Q29taW5nCi0gICAgICAgICYmICFtX2RvY3VtZW50
TG9hZGVyLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkKLSAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2Fk
ZXItPmlzU3RvcHBpbmcoKQotICAgICAgICAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cygpCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJh
bWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCi0gICAgICAgIC8vIGFwcGxpY2F0aW9uIGNhY2hl
LiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQgd29yay4KLSAgICAgICAgJiYg
bV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VD
YWNoZSgpCi0jZW5kaWYKLSNpZiBFTkFCTEUoV01MKQotICAgICAgICAmJiAhZnJhbWVDb250YWlu
c1dNTENvbnRlbnQobV9mcmFtZSkKLSNlbmRpZgotICAgICAgICAmJiBtX2NsaWVudC0+Y2FuQ2Fj
aGVQYWdlKCkKLSAgICAgICAgOwotfQotCi1ib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2Uo
KQotewotI2lmbmRlZiBOREVCVUcKLSAgICBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpOwotI2Vu
ZGlmCi0gICAgCi0gICAgLy8gQ2FjaGUgdGhlIHBhZ2UsIGlmIHBvc3NpYmxlLgotICAgIC8vIERv
bid0IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNp
bmNlIHdlIHdpbGwgd2FudCB0bwotICAgIC8vIHN0b3JlIHRoZSBmaW5hbCBwYWdlIHdlIGVuZCB1
cCBvbi4KLSAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCBv
ciBsb2FkU2FtZSwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlCi0gICAgLy8gb3ZlciBpdCBhZ2Fp
biB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KLSAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzQ4ODY1OTI+IC0gV2Ugc2hvdWxkIHdvcmsgb3V0IHRoZSBjb21wbGV4aXRpZXMgb2YgY2FjaGlu
ZyBwYWdlcyB3aXRoIGZyYW1lcyBhcyB0aGV5Ci0gICAgLy8gYXJlIHRoZSBtb3N0IGludGVyZXN0
aW5nIHBhZ2VzIG9uIHRoZSB3ZWIsIGFuZCBvZnRlbiB0aG9zZSB0aGF0IHdvdWxkIGJlbmVmaXQg
dGhlIG1vc3QgZnJvbSBjYWNoaW5nIQotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSB0aGlz
LT5sb2FkVHlwZSgpOwotICAgIAotICAgIHJldHVybiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KQotICAgICAgICAmJiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCkKLSAgICAgICAg
JiYgbV9mcmFtZS0+cGFnZSgpCi0gICAgICAgICYmIG1fZnJhbWUtPnBhZ2UoKS0+YmFja0Zvcndh
cmRMaXN0KCktPmVuYWJsZWQoKQotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3
YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMAotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPnNl
dHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKQotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxv
YWRUeXBlUmVsb2FkIAotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2Fk
RnJvbU9yaWdpbgotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlU2FtZQotICAg
ICAgICA7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgU3RyaW5nJiBwYWdlQ2FjaGVMb2dQ
cmVmaXgoaW50IGluZGVudExldmVsKQotewotICAgIHN0YXRpYyBpbnQgcHJldmlvdXNJbmRlbnQg
PSAtMTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHJlZml4LCAoKSk7Ci0gICAg
Ci0gICAgaWYgKGluZGVudExldmVsICE9IHByZXZpb3VzSW5kZW50KSB7ICAgIAotICAgICAgICBw
cmV2aW91c0luZGVudCA9IGluZGVudExldmVsOwotICAgICAgICBwcmVmaXgudHJ1bmNhdGUoMCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldmlvdXNJbmRlbnQ7ICsraSkKLSAgICAg
ICAgICAgIHByZWZpeCArPSAiICAgICI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcmVmaXg7
Ci19Ci0KLXN0YXRpYyB2b2lkIHBhZ2VDYWNoZUxvZyhjb25zdCBTdHJpbmcmIHByZWZpeCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIExPRyhQYWdlQ2FjaGUsICIlcyVzIiwgcHJlZml4
LnV0ZjgoKS5kYXRhKCksIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLSNkZWZpbmUgUENM
T0coLi4uKSBwYWdlQ2FjaGVMb2cocGFnZUNhY2hlTG9nUHJlZml4KGluZGVudExldmVsKSwgU3Ry
aW5nOjpmb3JtYXQoX19WQV9BUkdTX18pKQotCi12b2lkIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNo
ZVBhZ2VEZWNpc2lvbigpCi17Ci0gICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3IgbWFpbiBm
cmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlm
IChtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBL
VVJMIGN1cnJlbnRVUkwgPSBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRlci0+dXJs
KCkgOiBLVVJMKCk7Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOwotICAgIFBDTE9HKCItLS0tLS0tLVxuIERl
dGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKLQotICAgIGJvb2wgY2Fubm90Q2Fj
aGUgPSAhbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKDEpOwotICAgICAgICAKLSAgICBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlID0gdGhpcy0+bG9hZFR5cGUoKTsKLSAgICBkbyB7Ci0gICAgICAgIGlm
IChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZy
YW1lIGhhcyBhIHBhcmVudCBmcmFtZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAg
aWYgKCFtX2ZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlcmUgaXMg
bm8gUGFnZSBvYmplY3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9mcmFtZS0+cGFnZSgpLT5i
YWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRo
ZSBiYWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0K
LSAgICAgICAgaWYgKCEobV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKS0+Y2FwYWNp
dHkoKSA+IDApKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlz
dCBoYXMgYSAwIGNhcGFjaXR5Iik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAo
IW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKQotICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2YgY2FjaGUgZGlzYWJsZWQiKTsg
Y2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRU
eXBlUmVsb2FkKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2Fk
Iik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVM
b2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtTG9hZCB0
eXBlIGlzOiBSZWxvYWQgZnJvbSBvcmlnaW4iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAg
ICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkKLSAgICAgICAgICAgIHsgUENM
T0coIiAgIC1Mb2FkIHR5cGUgaXM6IFNhbWUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAg
fSB3aGlsZSAoZmFsc2UpOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENB
Tk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0t
LSIpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oaW50
IGluZGVudExldmVsKQotewotICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIGZyYW1lcyB0
aGF0IGhhdmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCi0gICAgaWYgKG1fY3Jl
YXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtV
UkwgY3VycmVudFVSTCA9IG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT51cmwo
KSA6IEtVUkwoKTsKLSAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgS1VSTCBuZXdVUkwgPSBtX3Byb3Zp
c2lvbmFsRG9jdW1lbnRMb2FkZXIgPyBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnVybCgp
IDogS1VSTCgpOwotICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgUENMT0coIiBE
ZXRlcm1pbmluZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmlnYXRpbmcgZnJvbSAoJXMpIHRv
ICglcyk6IiwgY3VycmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBuZXdVUkwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBQQ0xPRygiIERldGVybWluaW5n
IGlmIHN1YmZyYW1lIHdpdGggVVJMICglcykgY2FuIGJlIGNhY2hlZDoiLCBjdXJyZW50VVJMLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAKLSAgICBib29sIGNhbm5vdENhY2hlID0g
ZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlcikgewotICAg
ICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBEb2N1bWVudExvYWRlciBvYmplY3QiKTsK
LSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3Io
KS5pc051bGwoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBh
biBlcnJvciIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fY29udGFpbnNQ
bHVnSW5zKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMi
KTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX1VSTC5wcm90b2NvbElzKCJo
dHRwcyIpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGlzIEhUVFBTIik7IGNhbm5v
dENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkgJiYgbV9m
cmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRF
dmVudCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIGFuIHVubG9hZCBldmVu
dCBsaXN0ZW5lciIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNpZiBFTkFCTEUoREFUQUJBU0Up
Ci0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpCi0g
ICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIp
OyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VS
UykKLSAgICAgICAgaWYgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMo
bV9mcmFtZS0+ZG9jdW1lbnQoKSkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFz
IGFzc29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSNlbmRp
ZgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKQot
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsgY2Fubm90
Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKQot
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7IGNhbm5v
dENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9xdWlja1JlZGlyZWN0Q29taW5nKQotICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOyBjYW5ub3RD
YWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ0lu
QVBJU2Vuc2UoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBz
dGlsbCBsb2FkaW5nIGluIEFQSSBzZW5zZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAg
ICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKSkKLSAgICAgICAgICAgIHsgUENM
T0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7IGNh
bm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCktPmNh
blN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhl
IGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3RpdmUgRE9NIE9iamVjdHMiKTsgY2Fubm90
Q2FjaGUgPSB0cnVlOyB9Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAg
ICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5D
YWNoZUluUGFnZUNhY2hlKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIERvY3VtZW50
TG9hZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9
Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2FjaGVQYWdlKCkpCi0gICAgICAg
ICAgICB7IFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNh
Y2hlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICB9IHdoaWxlIChmYWxzZSk7Ci0KLSAg
ICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoIWNo
aWxkLT5sb2FkZXIoKS0+bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGluZGVudExldmVsICsgMSkp
Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgCi0gICAgUENMT0coY2Fubm90
Q2FjaGUgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU4gYmUgY2FjaGVk
Iik7Ci0gICAgUENMT0coIistLS0iKTsKLQotICAgIHJldHVybiAhY2Fubm90Q2FjaGU7Ci19Ci0j
ZW5kaWYKLQogdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlRmlyc3RQYXJ0eUZvckNvb2tpZXMoKQog
ewogICAgIGlmIChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpAQCAtMjM1MSw5ICsyMTQ5LDkg
QEAKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlQ29tcGxldGUpOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdlPiBwcnBDYWNo
ZWRQYWdlKQordm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKIHsKLSAg
ICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBycENhY2hlZFBhZ2U7CisgICAgUmVm
UHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSA/IHBh
Z2VDYWNoZSgpLT5nZXQoaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKSkgOiAwOwogICAgIFJl
ZlB0cjxEb2N1bWVudExvYWRlcj4gcGRsID0gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyOwog
CiAgICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVMb2FkaW5nICVzOiBBYm91dCB0byBjb21taXQg
cHJvdmlzaW9uYWwgbG9hZCBmcm9tIHByZXZpb3VzIFVSTCAnJXMnIHRvIG5ldyBVUkwgJyVzJyIs
IG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fVVJMLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIApAQCAtMjM2MSw3ICsyMTU5LDExIEBACiAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGlu
ZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIC8vIFdlIGFyZSBk
b2luZyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSBrbm93IGZvciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBp
cyBhYm91dCB0byBiZSBsb2FkZWQuCi0gICAgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oaGlzdG9y
eSgpLT5jdXJyZW50SXRlbSgpKTsKKyAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGhpc3RvcnkoKS0+
Y3VycmVudEl0ZW0oKTsKKyAgICBpZiAoIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgJiYgUGFn
ZUNhY2hlOjpjYW5DYWNoZShtX2ZyYW1lLT5wYWdlKCkpICYmICFpdGVtLT5pc0luUGFnZUNhY2hl
KCkpIHsKKyAgICAgICAgcGFnZUhpZGRlbigpOworICAgICAgICBwYWdlQ2FjaGUoKS0+YWRkKGl0
ZW0sIG1fZnJhbWUtPnBhZ2UoKSk7CisgICAgfQogICAgIAogICAgIGlmIChtX2xvYWRUeXBlICE9
IEZyYW1lTG9hZFR5cGVSZXBsYWNlKQogICAgICAgICBjbG9zZU9sZERhdGFTb3VyY2VzKCk7CkBA
IC0yMzc4LDkgKzIxODAsMTEgQEAKICAgICBpZiAobV9zZW50UmVkaXJlY3ROb3RpZmljYXRpb24p
CiAgICAgICAgIGNsaWVudFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChmYWxzZSk7CiAgICAg
Ci0gICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2FjaGVkUGFnZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
b3BlbigqY2FjaGVkUGFnZSk7Ci0gICAgZWxzZSB7ICAgICAgICAKKyAgICBpZiAoY2FjaGVkUGFn
ZSAmJiBjYWNoZWRQYWdlLT5kb2N1bWVudCgpKSB7CisgICAgICAgIHByZXBhcmVGb3JDYWNoZWRQ
YWdlUmVzdG9yZSgpOworICAgICAgICBjYWNoZWRQYWdlLT5yZXN0b3JlKG1fZnJhbWUtPnBhZ2Uo
KSk7CisgICAgICAgIGNoZWNrQ29tcGxldGVkKCk7CisgICAgfSBlbHNlIHsgICAgICAgIAogICAg
ICAgICBLVVJMIHVybCA9IHBkbC0+c3Vic3RpdHV0ZURhdGEoKS5yZXNwb25zZVVSTCgpOwogICAg
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHVybCA9IHBkbC0+dXJsKCk7CkBA
IC0yNTk2LDcgKzI0MDAsNyBAQAogICAgIG1fY2xpZW50LT5zZXRNYWluRnJhbWVEb2N1bWVudFJl
YWR5KGZhbHNlKTsgLy8gc3RvcCBnaXZpbmcgb3V0IHRoZSBhY3R1YWwgRE9NRG9jdW1lbnQgdG8g
b2JzZXJ2ZXJzCiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVkUGFnZSYgY2FjaGVk
UGFnZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OnByZXBhcmVGb3JDYWNoZWRQYWdlUmVzdG9yZSgpCiB7
CiAgICAgQVNTRVJUKCFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKTsKICAgICBBU1NFUlQobV9m
cmFtZS0+cGFnZSgpKTsKQEAgLTI2MTIsMTAgKzI0MTYsNiBAQAogICAgICAgICBtX2ZyYW1lLT5z
ZXRKU1N0YXR1c0JhclRleHQoU3RyaW5nKCkpOwogICAgICAgICBtX2ZyYW1lLT5zZXRKU0RlZmF1
bHRTdGF0dXNCYXJUZXh0KFN0cmluZygpKTsKICAgICB9Ci0KLSAgICBjYWNoZWRQYWdlLnJlc3Rv
cmUobV9mcmFtZS0+cGFnZSgpKTsKLQotICAgIGNoZWNrQ29tcGxldGVkKCk7CiB9CiAKIHZvaWQg
RnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVkRnJhbWVCYXNlJiBjYWNoZWRGcmFtZSkKQEAgLTM0NzAs
OCArMzI3MCwxMCBAQAogCiAgICAgc2V0UG9saWN5RG9jdW1lbnRMb2FkZXIoMCk7CiAKLSAgICBp
ZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKHR5cGUpICYmIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9t
Q2FjaGVkUGFnZSgpKQorICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgJiYgaGlz
dG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKS0+aXNJblBhZ2VDYWNoZSgpKSB7CisgICAgICAgIGxv
YWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwogICAgICAgICByZXR1cm47CisgICAg
fQogCiAgICAgaWYgKGZvcm1TdGF0ZSkKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoV2lsbFN1
Ym1pdEZvcm0oJlBvbGljeUNoZWNrZXI6OmNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0s
IGZvcm1TdGF0ZSk7CkBAIC0zNTg0LDM4ICszMzg2LDE5IEBACiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIEZyYW1lTG9hZGVyOjpsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2Uo
KQordm9pZCBGcmFtZUxvYWRlcjo6bG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkK
IHsKLSAgICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQo
aGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKSk7Ci0gICAgaWYgKCFjYWNoZWRQYWdlIHx8ICFj
YWNoZWRQYWdlLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRG9jdW1l
bnRMb2FkZXIqIHByb3Zpc2lvbmFsTG9hZGVyID0gcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigp
OworICAgIExPRyhQYWdlQ2FjaGUsICJXZWJDb3JlUGFnZUNhY2hlOiBMb2FkaW5nIHByb3Zpc2lv
bmFsIERvY3VtZW50TG9hZGVyICVwIHdpdGggVVJMICclcycgZnJvbSBDYWNoZWRQYWdlIiwgcHJv
dmlzaW9uYWxEb2N1bWVudExvYWRlcigpLCBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgRG9jdW1lbnRMb2FkZXIgKnByb3Zp
c2lvbmFsTG9hZGVyID0gcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpOwotICAgIExPRyhQYWdl
Q2FjaGUsICJXZWJDb3JlUGFnZUNhY2hlOiBGcmFtZUxvYWRlciAlcCBsb2FkaW5nIHByb3Zpc2lv
bmFsIERvY3VtZW50TG9hZGVyICVwIHdpdGggVVJMICclcycgZnJvbSBDYWNoZWRQYWdlICVwIiwg
dGhpcywgcHJvdmlzaW9uYWxMb2FkZXIsIHByb3Zpc2lvbmFsTG9hZGVyLT51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBjYWNoZWRQYWdlLmdldCgpKTsKLSAgICAKICAgICBwcm92aXNpb25h
bExvYWRlci0+cHJlcGFyZUZvckxvYWRTdGFydCgpOwogCiAgICAgbV9sb2FkaW5nRnJvbUNhY2hl
ZFBhZ2UgPSB0cnVlOwogCiAgICAgcHJvdmlzaW9uYWxMb2FkZXItPnNldENvbW1pdHRlZCh0cnVl
KTsKLSAgICBjb21taXRQcm92aXNpb25hbExvYWQoY2FjaGVkUGFnZSk7Ci0gICAgCi0gICAgcmV0
dXJuIHRydWU7CisgICAgY29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXI6OmNhY2hlUGFnZUZvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAg
IGlmICghY2FuQ2FjaGVQYWdlKCkgfHwgaXRlbS0+aXNJblBhZ2VDYWNoZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwYWdlSGlkZGVuKCk7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2Ug
PSBDYWNoZWRQYWdlOjpjcmVhdGUocGFnZSk7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5hZGQoaXRl
bSwgY2FjaGVkUGFnZS5yZWxlYXNlKCkpOwotICAgIH0KLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6
cGFnZUhpZGRlbigpCiB7CiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQg
PSB0cnVlOwpAQCAtMzY4MSwyMSArMzQ2NCwxMCBAQAogewogICAgIC8vIFJlbWVtYmVyIHRoaXMg
aXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0ZW1zIGFzIGNoaWxkIGZyYW1lcyBs
b2FkCiAgICAgaGlzdG9yeSgpLT5zZXRQcm92aXNpb25hbEl0ZW0oaXRlbSk7Ci0gICAgCi0gICAg
Ly8gQ2hlY2sgaWYgd2UnbGwgYmUgdXNpbmcgdGhlIHBhZ2UgY2FjaGUuICBXZSBvbmx5IHVzZSB0
aGUgcGFnZSBjYWNoZQotICAgIC8vIGlmIG9uZSBleGlzdHMgYW5kIGl0IGlzIGxlc3MgdGhhbiBf
YmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbAotICAgIC8vIHNlY29uZHMgb2xkLiAg
SWYgdGhlIGNhY2hlIGlzIGV4cGlyZWQgaXQgZ2V0cyBmbHVzaGVkIGhlcmUuCi0gICAgaWYgKFJl
ZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChpdGVtKSkgewot
ICAgICAgICAvLyBGSVhNRTogMTgwMCBzaG91bGQgbm90IGJlIGhhcmRjb2RlZCwgaXQgc2hvdWxk
IGNvbWUgZnJvbQotICAgICAgICAvLyBXZWJLaXRCYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbklu
dGVydmFsS2V5IGluIFdlYktpdC4KLSAgICAgICAgLy8gT3Igd2Ugc2hvdWxkIHJlbW92ZSBXZWJL
aXRCYWNrRm9yd2FyZENhY2hlRXhwaXJhdGlvbkludGVydmFsS2V5LgotICAgICAgICBpZiAoY3Vy
cmVudFRpbWUoKSAtIGNhY2hlZFBhZ2UtPnRpbWVTdGFtcCgpIDw9IDE4MDApIHsKLSAgICAgICAg
ICAgIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwg
bG9hZFR5cGUsIDApOyAgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9t
IGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaGlz
dG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOworCisgICAgaWYgKENhY2hlZFBh
Z2UqIGNhY2hlZFBhZ2UgPSBwYWdlQ2FjaGUoKS0+Z2V0KGl0ZW0pKSB7CisgICAgICAgIGxvYWRX
aXRoRG9jdW1lbnRMb2FkZXIoY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5cGUs
IDApOyAgIAorICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgS1VSTCBpdGVtVVJMID0gaXRl
bS0+dXJsKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA2MDQ4
MCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDcgKzI1NSw3IEBACiB7CiAgICAgaWYgKG1fZ290Rmlyc3RCeXRlICYmICFtX2NvbW1p
dHRlZCkgewogICAgICAgICBtX2NvbW1pdHRlZCA9IHRydWU7Ci0gICAgICAgIGZyYW1lTG9hZGVy
KCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y29t
bWl0UHJvdmlzaW9uYWxMb2FkKCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJ
KHJldmlzaW9uIDYwNDgwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHNldEljb25VUkwoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIGNv
bW1pdFByb3Zpc2lvbmFsTG9hZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+KTsKKyAgICB2b2lkIGNv
bW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgIGJvb2wgaXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsgfQogCiAgICAgYm9vbCBj
b21taXR0aW5nRmlyc3RSZWFsTG9hZCgpIGNvbnN0IHsgcmV0dXJuICFtX2NyZWF0aW5nSW5pdGlh
bEVtcHR5RG9jdW1lbnQgJiYgIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOyB9CkBA
IC0zNTEsNyArMzUxLDkgQEAKICAgICBib29sIGlzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudDsg
fQogCiAgICAgdm9pZCBjbGVhcihib29sIGNsZWFyV2luZG93UHJvcGVydGllcyA9IHRydWUsIGJv
b2wgY2xlYXJTY3JpcHRPYmplY3RzID0gdHJ1ZSwgYm9vbCBjbGVhckZyYW1lVmlldyA9IHRydWUp
OwotICAgIAorCisgICAgYm9vbCBxdWlja1JlZGlyZWN0Q29taW5nKCkgY29uc3QgeyByZXR1cm4g
bV9xdWlja1JlZGlyZWN0Q29taW5nOyB9CisKICAgICBib29sIHNob3VsZENsb3NlKCk7CiAKIHBy
aXZhdGU6CkBAIC0zNzIsOCArMzc0LDcgQEAKICAgICB2b2lkIG5hdmlnYXRlV2l0aGluRG9jdW1l
bnQoSGlzdG9yeUl0ZW0qKTsKICAgICB2b2lkIG5hdmlnYXRlVG9EaWZmZXJlbnREb2N1bWVudChI
aXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOwogICAgIAotICAgIGJvb2wgbG9hZFByb3Zpc2lv
bmFsSXRlbUZyb21DYWNoZWRQYWdlKCk7Ci0gICAgdm9pZCBjYWNoZVBhZ2VGb3JIaXN0b3J5SXRl
bShIaXN0b3J5SXRlbSopOworICAgIHZvaWQgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQ
YWdlKCk7CiAgICAgdm9pZCBwYWdlSGlkZGVuKCk7CiAKICAgICB2b2lkIHJlY2VpdmVkRmlyc3RE
YXRhKCk7CkBAIC00MTQsNyArNDE1LDcgQEAKICAgICB2b2lkIHNldFN0YXRlKEZyYW1lU3RhdGUp
OwogCiAgICAgdm9pZCBjbG9zZU9sZERhdGFTb3VyY2VzKCk7Ci0gICAgdm9pZCBvcGVuKENhY2hl
ZFBhZ2UmKTsKKyAgICB2b2lkIHByZXBhcmVGb3JDYWNoZWRQYWdlUmVzdG9yZSgpOwogCiAgICAg
dm9pZCB1cGRhdGVIaXN0b3J5QWZ0ZXJDbGllbnRSZWRpcmVjdCgpOwogCg==
</data>
<flag name="review"
          id="42351"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57779</attachid>
            <date>2010-06-03 09:30:23 -0700</date>
            <delta_ts>2010-06-03 10:23:12 -0700</delta_ts>
            <desc>With ChangeLog</desc>
            <filename>patch6.txt</filename>
            <type>text/plain</type>
            <size>32183</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDYyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDYtMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgUGFnZUNhY2hlIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEZyYW1lTG9hZGVyIGFuZCBpbnRv
CisgICAgICAgIFBhZ2VDYWNoZSBpdHNlbGYuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MzgyCisKKyAgICAgICAgUmVmYWN0b3Igb25seSwgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFnZUNhY2hlTG9nUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OnBhZ2VD
YWNoZUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6bG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6Y2FuQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlOjpnZXQpOgorICAgICAg
ICAqIGhpc3RvcnkvUGFnZUNhY2hlLmg6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpjb21taXRJZlJlYWR5KToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6cHJlcGFyZUZvckNhY2hlZFBhZ2VSZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bmF2aWdhdGVUb0RpZmZlcmVudERv
Y3VtZW50KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpxdWlja1JlZGlyZWN0Q29taW5nKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFu
Z2VkKToKKwogMjAxMC0wNi0wMyAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBX
ZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlLmNwcAkocmV2aXNpb24gNjA0ODApCisrKyBXZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDIxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAKKyNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlSG9zdC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkNh
Y2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00MCw2ICs1MCwxNzMgQEAKIAogc3RhdGlj
IGNvbnN0IGRvdWJsZSBhdXRvcmVsZWFzZUludGVydmFsID0gMzsKIAorI2lmbmRlZiBOREVCVUcK
Kworc3RhdGljIFN0cmluZyYgcGFnZUNhY2hlTG9nUHJlZml4KGludCBpbmRlbnRMZXZlbCkKK3sK
KyAgICBzdGF0aWMgaW50IHByZXZpb3VzSW5kZW50ID0gLTE7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHByZWZpeCwgKCkpOworICAgIAorICAgIGlmIChpbmRlbnRMZXZlbCAhPSBw
cmV2aW91c0luZGVudCkgeyAgICAKKyAgICAgICAgcHJldmlvdXNJbmRlbnQgPSBpbmRlbnRMZXZl
bDsKKyAgICAgICAgcHJlZml4LnRydW5jYXRlKDApOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByZXZpb3VzSW5kZW50OyArK2kpCisgICAgICAgICAgICBwcmVmaXggKz0gIiAgICAiOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gcHJlZml4OworfQorCitzdGF0aWMgdm9pZCBwYWdlQ2Fj
aGVMb2coY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBMT0coUGFnZUNhY2hlLCAiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0
ZjgoKS5kYXRhKCkpOworfQorICAgIAorI2RlZmluZSBQQ0xPRyguLi4pIHBhZ2VDYWNoZUxvZyhw
YWdlQ2FjaGVMb2dQcmVmaXgoaW5kZW50TGV2ZWwpLCBTdHJpbmc6OmZvcm1hdChfX1ZBX0FSR1Nf
XykpCisgICAgCitzdGF0aWMgYm9vbCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUqIGZy
YW1lLCBpbnQgaW5kZW50TGV2ZWwpCit7CisgICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3Ig
ZnJhbWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KKyAgICBp
ZiAoZnJhbWUtPmxvYWRlcigpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVy
bCgpIDogS1VSTCgpOworICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIFBDTE9HKCIrLS0tIik7CisgICAgS1VSTCBuZXdVUkwgPSBm
cmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5sb2Fk
ZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsKKyAgICBp
ZiAoIW5ld1VSTC5pc0VtcHR5KCkpCisgICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgZnJh
bWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCVzKSB0byAoJXMpOiIsIGN1cnJlbnRV
Ukwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbmV3VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGVsc2UKKyAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBzdWJmcmFtZSB3aXRo
IFVSTCAoJXMpIGNhbiBiZSBjYWNoZWQ6IiwgY3VycmVudFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAKKyAgICBib29sIGNhbm5vdENhY2hlID0gZmFsc2U7CisgICAgCisgICAgZG8g
eworICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkgeworICAg
ICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBEb2N1bWVudExvYWRlciBvYmplY3QiKTsK
KyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5t
YWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLU1h
aW4gZG9jdW1lbnQgaGFzIGFuIGVycm9yIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQbHVn
aW5zKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgY29udGFpbnMgcGx1Z2lucyIp
OworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChmcmFtZS0+bG9hZGVyKCktPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikpIHsKKyAgICAgICAg
ICAgIFBDTE9HKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmRvbVdpbmRvdygpICYmIGZy
YW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2
ZW50KSkgeworICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50
IGxpc3RlbmVyIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0K
KyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+aGFz
T3BlbkRhdGFiYXNlcygpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBvcGVu
IGRhdGFiYXNlIGhhbmRsZXMiKTsKKyAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKKyAg
ICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgICAgICBpZiAo
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhmcmFtZS0+ZG9jdW1lbnQo
KSkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFzIGFzc29jaWF0ZWQgU2hhcmVk
V29ya2VycyIpOworICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCkp
IHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOworICAg
ICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkpIHsKKyAgICAgICAgICAgIFBD
TE9HKCIgICAtTm8gY3VycmVudCBoaXN0b3J5IGl0ZW0iKTsKKyAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5xdWlj
a1JlZGlyZWN0Q29taW5nKCkpIHsKKyAgICAgICAgICAgIFBDTE9HKCIgICAtUXVpY2sgcmVkaXJl
Y3QgaXMgY29taW5nIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2Fk
aW5nSW5BUElTZW5zZSgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLURvY3VtZW50TG9hZGVy
IGlzIHN0aWxsIGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7CisgICAgICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLURvY3Vt
ZW50TG9hZGVyIGlzIGluIHRoZSBtaWRkbGUgb2Ygc3RvcHBpbmciKTsKKyAgICAgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVu
dCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpKSB7CisgICAgICAgICAgICBQQ0xPRygi
ICAgLVRoZSBkb2N1bWVudCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7
CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgICAgIH0KKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VD
YWNoZSgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExvYWRlciB1c2Vz
IGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7CisgICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7
CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNhbkNhY2hlUGFnZSgpKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgLVRoZSBjbGllbnQg
c2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsKKyAgICAgICAgICAgIGNhbm5vdENh
Y2hlID0gdHJ1ZTsgCisgICAgICAgIH0KKyAgICB9IHdoaWxlIChmYWxzZSk7CisgICAgCisgICAg
Zm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGlmICghbG9nQ2Fu
Q2FjaGVGcmFtZURlY2lzaW9uKGNoaWxkLCBpbmRlbnRMZXZlbCArIDEpKQorICAgICAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOworICAgIAorICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBGcmFt
ZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIpOworICAgIFBDTE9H
KCIrLS0tIik7CisgICAgCisgICAgcmV0dXJuICFjYW5ub3RDYWNoZTsKK30KKyAgICAKK3N0YXRp
YyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKFBhZ2UqIHBhZ2UpCit7CisgICAgLy8gT25s
eSBib3RoZXIgbG9nZ2luZyBmb3IgbWFpbiBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRl
ZCBhbmQgaGF2ZSBjb250ZW50LgorICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkt
PmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEtV
UkwgY3VycmVudFVSTCA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSA/IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJs
KCkgOiBLVVJMKCk7CisgICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaW50IGluZGVudExldmVsID0gMDsgICAgCisgICAgUENMT0coIi0tLS0t
LS0tXG4gRGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOworICAgIAorICAgIGJv
b2wgY2Fubm90Q2FjaGUgPSAhbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKHBhZ2UtPm1haW5GcmFt
ZSgpLCAxKTsKKyAgICAKKyAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZy
YW1lKCktPmxvYWRlcigpLT5sb2FkVHlwZSgpOworICAgIGlmICghcGFnZS0+YmFja0ZvcndhcmRM
aXN0KCktPmVuYWJsZWQoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQg
bGlzdCBpcyBkaXNhYmxlZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQor
ICAgIGlmICghKHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jYXBhY2l0eSgpID4gMCkpIHsKKyAg
ICAgICAgUENMT0coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3QgaGFzIGEgMCBjYXBhY2l0eSIp
OworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAgIGlmICghcGFnZS0+c2V0
dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKSB7CisgICAgICAgIFBDTE9HKCIgICAtUGFnZSBzZXR0
aW5ncyBzYXlzIGIvZiBjYWNoZSBkaXNhYmxlZCIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRy
dWU7CisgICAgfQorICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKSB7Cisg
ICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsKKyAgICAgICAgY2Fubm90
Q2FjaGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJl
bG9hZEZyb21PcmlnaW4pIHsKKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9h
ZCBmcm9tIG9yaWdpbiIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAgfQorICAg
IGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkgeworICAgICAgICBQQ0xPRygiICAg
LUxvYWQgdHlwZSBpczogU2FtZSIpOworICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7CisgICAg
fQorICAgIAorICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBjYWNoZWRc
bi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworfQorCisjZW5k
aWYgCisKIFBhZ2VDYWNoZSogcGFnZUNhY2hlKCkKIHsKICAgICBzdGF0aWMgUGFnZUNhY2hlKiBz
dGF0aWNQYWdlQ2FjaGUgPSBuZXcgUGFnZUNhY2hlOwpAQCAtNTQsNiArMjMxLDc0IEBACiAgICAg
LCBtX2F1dG9yZWxlYXNlVGltZXIodGhpcywgJlBhZ2VDYWNoZTo6cmVsZWFzZUF1dG9yZWxlYXNl
ZFBhZ2VzTm93T3JSZXNjaGVkdWxlKQogewogfQorICAgIAorYm9vbCBQYWdlQ2FjaGU6OmNhbkNh
Y2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGZvciAoRnJh
bWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY2FuQ2FjaGVQYWdl
Q29udGFpbmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkK
KyAgICAgICAgJiYgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1l
bnRFcnJvcigpLmlzTnVsbCgpCisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIGNoYW5nZSB0
aGlzIHNvIHRoYXQgZnJhbWVzIHdpdGggcGx1Zy1pbnMgd2lsbCBiZSBjYWNoZWQsCisgICAgICAg
IC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgY2FjaGUgZnJhbWVzIHRoYXQg
aGF2ZSBvdXRzdGFuZGluZyBOUE9iamVjdHMKKyAgICAgICAgLy8gKG9iamVjdHMgY3JlYXRlZCBi
eSB0aGUgcGx1Zy1pbikuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBwYXVzZS9yZXN1bWUgYSBO
ZXRzY2FwZSBwbHVnLWluLAorICAgICAgICAvLyB0aGV5IHdvdWxkIG5lZWQgdG8gYmUgZGVzdHJv
eWVkIGFuZCB0aGVuIHJlY3JlYXRlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0IHdlIGNhbiBy
ZWNyZWF0ZQorICAgICAgICAvLyB0aGUgcmlnaHQgTlBPYmplY3RzLiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzUxOTcwNDE+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAmJiAhZnJhbWUtPmxv
YWRlcigpLT5jb250YWluc1BsdWdpbnMoKQorICAgICAgICAmJiAhZnJhbWUtPmxvYWRlcigpLT51
cmwoKS5wcm90b2NvbElzKCJodHRwcyIpCisgICAgICAgICYmICghZnJhbWUtPmRvbVdpbmRvdygp
IHx8ICFmcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51
bmxvYWRFdmVudCkpCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAgICAmJiAhZnJhbWUtPmRv
Y3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMoKQorI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9X
T1JLRVJTKQorICAgICAgICAmJiAhU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29y
a2VycyhmcmFtZS0+ZG9jdW1lbnQoKSkKKyNlbmRpZgorICAgICAgICAmJiAhZnJhbWUtPmRvY3Vt
ZW50KCktPnVzaW5nR2VvbG9jYXRpb24oKQorICAgICAgICAmJiBmcmFtZS0+bG9hZGVyKCktPmhp
c3RvcnkoKS0+Y3VycmVudEl0ZW0oKQorICAgICAgICAmJiAhZnJhbWUtPmxvYWRlcigpLT5xdWlj
a1JlZGlyZWN0Q29taW5nKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpCisgICAgICAgICYmICFmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKQorICAgICAgICAmJiBmcmFtZS0+ZG9j
dW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdh
dGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZAorICAgICAgICAvLyBh
cHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdv
cmsuCisgICAgICAgICYmIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCisjZW5kaWYKKyNpZiBFTkFC
TEUoV01MKQorICAgICAgICAmJiAhZnJhbWUtPmRvY3VtZW50KCktPmNvbnRhaW5zV01MQ29udGVu
dCgpCisgICAgICAgICYmICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpOworI2Vu
ZGlmCisgICAgICAgICYmIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgp
OworfQorICAgIAorYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpCit7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisjaWZuZGVmIE5ERUJVRwor
ICAgIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKHBhZ2UpOworI2VuZGlmCisgICAgCisgICAgLy8g
Q2FjaGUgdGhlIHBhZ2UsIGlmIHBvc3NpYmxlLgorICAgIC8vIERvbid0IHdyaXRlIHRvIHRoZSBj
YWNoZSBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwgd2FudCB0
bworICAgIC8vIHN0b3JlIHRoZSBmaW5hbCBwYWdlIHdlIGVuZCB1cCBvbi4KKyAgICAvLyBObyBw
b2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCBvciBsb2FkU2FtZSwgc2luY2Ug
d2Ugd2lsbCBqdXN0IHdyaXRlCisgICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRo
YXQgcGFnZS4KKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4ODY1OTI+IC0gV2Ugc2hv
dWxkIHdvcmsgb3V0IHRoZSBjb21wbGV4aXRpZXMgb2YgY2FjaGluZyBwYWdlcyB3aXRoIGZyYW1l
cyBhcyB0aGV5CisgICAgLy8gYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhZ2VzIG9uIHRoZSB3
ZWIsIGFuZCBvZnRlbiB0aG9zZSB0aGF0IHdvdWxkIGJlbmVmaXQgdGhlIG1vc3QgZnJvbSBjYWNo
aW5nIQorICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+bG9h
ZGVyKCktPmxvYWRUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIGNhbkNhY2hlUGFnZUNvbnRhaW5p
bmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgICYmIHBhZ2UtPmJhY2tGb3J3
YXJkTGlzdCgpLT5lbmFibGVkKCkKKyAgICAgICAgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmNhcGFjaXR5KCkgPiAwCisgICAgICAgICYmIHBhZ2UtPnNldHRpbmdzKCktPnVzZXNQYWdlQ2Fj
aGUoKQorICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2FkIAorICAgICAg
ICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbgorICAgICAgICAm
JiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlU2FtZTsKK30KIAogdm9pZCBQYWdlQ2FjaGU6OnNl
dENhcGFjaXR5KGludCBjYXBhY2l0eSkKIHsKQEAgLTgwLDEwICszMjUsMTEgQEAKICAgICByZXR1
cm4gbV9hdXRvcmVsZWFzZVNldC5zaXplKCk7CiB9CiAKLXZvaWQgUGFnZUNhY2hlOjphZGQoUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSwgUGFzc1JlZlB0cjxDYWNoZWRQYWdlPiBjYWNo
ZWRQYWdlKQordm9pZCBQYWdlQ2FjaGU6OmFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJ
dGVtLCBQYWdlKiBwYWdlKQogewogICAgIEFTU0VSVChwcnBJdGVtKTsKLSAgICBBU1NFUlQoY2Fj
aGVkUGFnZSk7CisgICAgQVNTRVJUKHBhZ2UpOworICAgIEFTU0VSVChjYW5DYWNoZShwYWdlKSk7
CiAgICAgCiAgICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBwcnBJdGVtLnJlbGVhc2VSZWYoKTsgLy8g
QmFsYW5jZWQgaW4gcmVtb3ZlKCkuCiAKQEAgLTkxLDEzICszMzcsMzEgQEAKICAgICBpZiAoaXRl
bS0+bV9jYWNoZWRQYWdlKQogICAgICAgICByZW1vdmUoaXRlbSk7CiAKLSAgICBpdGVtLT5tX2Nh
Y2hlZFBhZ2UgPSBjYWNoZWRQYWdlOworICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IENhY2hlZFBh
Z2U6OmNyZWF0ZShwYWdlKTsKICAgICBhZGRUb0xSVUxpc3QoaXRlbSk7CiAgICAgKyttX3NpemU7
CiAgICAgCiAgICAgcHJ1bmUoKTsKIH0KIAorQ2FjaGVkUGFnZSogUGFnZUNhY2hlOjpnZXQoSGlz
dG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChDYWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gaXRlbS0+bV9jYWNoZWRQYWdlLmdldCgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiAxODAwIHNob3VsZCBub3QgYmUgaGFyZGNvZGVkLCBpdCBz
aG91bGQgY29tZSBmcm9tCisgICAgICAgIC8vIFdlYktpdEJhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0
aW9uSW50ZXJ2YWxLZXkgaW4gV2ViS2l0LgorICAgICAgICAvLyBPciB3ZSBzaG91bGQgcmVtb3Zl
IFdlYktpdEJhY2tGb3J3YXJkQ2FjaGVFeHBpcmF0aW9uSW50ZXJ2YWxLZXkuCisgICAgICAgIGlm
IChjdXJyZW50VGltZSgpIC0gY2FjaGVkUGFnZS0+dGltZVN0YW1wKCkgPD0gMTgwMCkKKyAgICAg
ICAgICAgIHJldHVybiBjYWNoZWRQYWdlOworICAgICAgICAKKyAgICAgICAgTE9HKFBhZ2VDYWNo
ZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVj
YXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0tPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtKTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgUGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0ZW0qIGl0
ZW0pCiB7CiAgICAgLy8gU2FmZWx5IGlnbm9yZSBhdHRlbXB0cyB0byByZW1vdmUgaXRlbXMgbm90
IGluIHRoZSBjYWNoZS4KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgJKHJldmlzaW9uIDYwNDgwKQorKysg
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOCArMzUs
MjIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENhY2hlZFBhZ2U7CisgICAg
Y2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CisgICAgY2xhc3MgUGFnZTsKICAg
ICAKICAgICBjbGFzcyBQYWdlQ2FjaGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgZnJpZW5kIFBhZ2VDYWNoZSogcGFnZUNhY2hlKCk7CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZShQYWdlKik7CiAKICAgICAgICAgdm9pZCBzZXRDYXBh
Y2l0eShpbnQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUKICAgICAgICAgaW50IGNhcGFj
aXR5KCkgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4sIFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4pOyAvLyBQcnVu
ZXMgaWYgY2FwYWNpdHkoKSBpcyBleGNlZWRlZC4KKyAgICAgICAgdm9pZCBhZGQoUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4sIFBhZ2UqKTsgLy8gUHJ1bmVzIGlmIGNhcGFjaXR5KCkgaXMgZXhjZWVk
ZWQuCiAgICAgICAgIHZvaWQgcmVtb3ZlKEhpc3RvcnlJdGVtKik7Ci0gICAgICAgIENhY2hlZFBh
Z2UqIGdldChIaXN0b3J5SXRlbSogaXRlbSkgeyByZXR1cm4gaXRlbSA/IGl0ZW0tPm1fY2FjaGVk
UGFnZS5nZXQoKSA6IDA7IH0KKyAgICAgICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtKiBp
dGVtKTsKIAogICAgICAgICB2b2lkIHJlbGVhc2VBdXRvcmVsZWFzZWRQYWdlc05vdygpOwogICAg
ICAgICAKQEAgLTU5LDYgKzYzLDggQEAKIAogICAgICAgICBQYWdlQ2FjaGUoKTsgLy8gVXNlIHBh
Z2VDYWNoZSgpIGluc3RlYWQuCiAgICAgICAgIH5QYWdlQ2FjaGUoKTsgLy8gTm90IGltcGxlbWVu
dGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJD
b3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSopOwogCiAgICAgICAg
IHZvaWQgYWRkVG9MUlVMaXN0KEhpc3RvcnlJdGVtKik7IC8vIEFkZHMgdG8gdGhlIGhlYWQgb2Yg
dGhlIGxpc3QuCiAgICAgICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0ZW0qKTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDYwNDgwKQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNyAr
MjY4LDcgQEAKICAgICAgICAgbG9hZGVyLT5zZXRGb3JjZWRTYW5kYm94RmxhZ3MoU2FuZGJveEFs
bCk7CiAgICAgICAgIGxvYWRlci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1
cmUgdGhlIERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKICAgICAgICAgbG9hZGVyLT5wb2xpY3lD
aGVja2VyKCktPmNhbmNlbENoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwotICAg
ICAgICBsb2FkZXItPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICAgICAgbG9hZGVyLT5j
b21taXRQcm92aXNpb25hbExvYWQoKTsKICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0TUlN
RVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+YmVnaW4o
S1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAogICAgICAgICBsb2FkZXItPndy
aXRlcigpLT5hZGREYXRhKGRhdGEoKS0+ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MDQ4MCkKKysrIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMywyMDggKzE0MTMsNiBAQAogfQog
I2VuZGlmCiAKLWJvb2wgRnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoKQotewotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKCFjaGlsZC0+bG9hZGVyKCktPmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAg
ICByZXR1cm4gbV9kb2N1bWVudExvYWRlcgotICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5t
YWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVy
IGNoYW5nZSB0aGlzIHNvIHRoYXQgZnJhbWVzIHdpdGggcGx1Zy1pbnMgd2lsbCBiZSBjYWNoZWQs
Ci0gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgY2FjaGUgZnJh
bWVzIHRoYXQgaGF2ZSBvdXRzdGFuZGluZyBOUE9iamVjdHMKLSAgICAgICAgLy8gKG9iamVjdHMg
Y3JlYXRlZCBieSB0aGUgcGx1Zy1pbikuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBwYXVzZS9y
ZXN1bWUgYSBOZXRzY2FwZSBwbHVnLWluLAotICAgICAgICAvLyB0aGV5IHdvdWxkIG5lZWQgdG8g
YmUgZGVzdHJveWVkIGFuZCB0aGVuIHJlY3JlYXRlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0
IHdlIGNhbiByZWNyZWF0ZQotICAgICAgICAvLyB0aGUgcmlnaHQgTlBPYmplY3RzLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzUxOTcwNDE+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAmJiAh
bV9jb250YWluc1BsdWdJbnMKLSAgICAgICAgJiYgIW1fVVJMLnByb3RvY29sSXMoImh0dHBzIikK
LSAgICAgICAgJiYgKCFtX2ZyYW1lLT5kb21XaW5kb3coKSB8fCAhbV9mcmFtZS0+ZG9tV2luZG93
KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCi0jaWYgRU5B
QkxFKERBVEFCQVNFKQotICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRh
dGFiYXNlcygpCi0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgICAgICYm
ICFTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKG1fZnJhbWUtPmRvY3Vt
ZW50KCkpCi0jZW5kaWYKLSAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2Vv
bG9jYXRpb24oKQotICAgICAgICAmJiBoaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkKLSAgICAgICAg
JiYgIW1fcXVpY2tSZWRpcmVjdENvbWluZwotICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+
aXNMb2FkaW5nSW5BUElTZW5zZSgpCi0gICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc1N0
b3BwaW5nKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2
ZURPTU9iamVjdHMoKQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0
IGhhdmUgYW4gYXNzb2NpYXRlZAotICAgICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6
Ly9wcm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdvcmsuCi0gICAgICAgICYmIG1fZG9jdW1l
bnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKQot
I2VuZGlmCi0jaWYgRU5BQkxFKFdNTCkKLSAgICAgICAgJiYgIWZyYW1lQ29udGFpbnNXTUxDb250
ZW50KG1fZnJhbWUpCi0jZW5kaWYKLSAgICAgICAgJiYgbV9jbGllbnQtPmNhbkNhY2hlUGFnZSgp
Ci0gICAgICAgIDsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlKCkKLXsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oKTsKLSNlbmRpZgotICAg
IAotICAgIC8vIENhY2hlIHRoZSBwYWdlLCBpZiBwb3NzaWJsZS4KLSAgICAvLyBEb24ndCB3cml0
ZSB0byB0aGUgY2FjaGUgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZGlyZWN0LCBzaW5jZSB3ZSB3
aWxsIHdhbnQgdG8KLSAgICAvLyBzdG9yZSB0aGUgZmluYWwgcGFnZSB3ZSBlbmQgdXAgb24uCi0g
ICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2FjaGUgb24gYSByZWxvYWQgb3IgbG9hZFNh
bWUsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZQotICAgIC8vIG92ZXIgaXQgYWdhaW4gd2hlbiB3
ZSBsZWF2ZSB0aGF0IHBhZ2UuCi0gICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODg2NTky
PiAtIFdlIHNob3VsZCB3b3JrIG91dCB0aGUgY29tcGxleGl0aWVzIG9mIGNhY2hpbmcgcGFnZXMg
d2l0aCBmcmFtZXMgYXMgdGhleQotICAgIC8vIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBwYWdl
cyBvbiB0aGUgd2ViLCBhbmQgb2Z0ZW4gdGhvc2UgdGhhdCB3b3VsZCBiZW5lZml0IHRoZSBtb3N0
IGZyb20gY2FjaGluZyEKLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gdGhpcy0+bG9hZFR5
cGUoKTsKLSAgICAKLSAgICByZXR1cm4gIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkKLSAgICAg
ICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpCi0gICAgICAgICYmIG1fZnJh
bWUtPnBhZ2UoKQotICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgp
LT5lbmFibGVkKCkKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3Qo
KS0+Y2FwYWNpdHkoKSA+IDAKLSAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygp
LT51c2VzUGFnZUNhY2hlKCkKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJl
bG9hZCAKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21Pcmln
aW4KLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVNhbWUKLSAgICAgICAgOwot
fQotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIFN0cmluZyYgcGFnZUNhY2hlTG9nUHJlZml4KGlu
dCBpbmRlbnRMZXZlbCkKLXsKLSAgICBzdGF0aWMgaW50IHByZXZpb3VzSW5kZW50ID0gLTE7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHByZWZpeCwgKCkpOwotICAgIAotICAgIGlm
IChpbmRlbnRMZXZlbCAhPSBwcmV2aW91c0luZGVudCkgeyAgICAKLSAgICAgICAgcHJldmlvdXNJ
bmRlbnQgPSBpbmRlbnRMZXZlbDsKLSAgICAgICAgcHJlZml4LnRydW5jYXRlKDApOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZpb3VzSW5kZW50OyArK2kpCi0gICAgICAgICAgICBw
cmVmaXggKz0gIiAgICAiOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1z
dGF0aWMgdm9pZCBwYWdlQ2FjaGVMb2coY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBMT0coUGFnZUNhY2hlLCAiJXMlcyIsIHByZWZpeC51dGY4KCku
ZGF0YSgpLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotfQotCi0jZGVmaW5lIFBDTE9HKC4uLikg
cGFnZUNhY2hlTG9nKHBhZ2VDYWNoZUxvZ1ByZWZpeChpbmRlbnRMZXZlbCksIFN0cmluZzo6Zm9y
bWF0KF9fVkFfQVJHU19fKSkKLQotdm9pZCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVQYWdlRGVj
aXNpb24oKQotewotICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIG1haW4gZnJhbWVzIHRo
YXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KLSAgICBpZiAobV9jcmVh
dGluZ0luaXRpYWxFbXB0eURvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgS1VSTCBjdXJy
ZW50VVJMID0gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VS
TCgpOwotICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IGluZGVudExldmVsID0gMDsKLSAgICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRlcm1pbmlu
ZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7Ci0KLSAgICBib29sIGNhbm5vdENhY2hlID0gIWxv
Z0NhbkNhY2hlRnJhbWVEZWNpc2lvbigxKTsKLSAgICAgICAgCi0gICAgRnJhbWVMb2FkVHlwZSBs
b2FkVHlwZSA9IHRoaXMtPmxvYWRUeXBlKCk7Ci0gICAgZG8gewotICAgICAgICBpZiAobV9mcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBoYXMg
YSBwYXJlbnQgZnJhbWUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghbV9m
cmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIFBhZ2Ug
b2JqZWN0Iik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKS0+YmFja0Zvcndh
cmRMaXN0KCktPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgYmFjay9m
b3J3YXJkIGxpc3QgaXMgZGlzYWJsZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAg
IGlmICghKG1fZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCktPmNhcGFjaXR5KCkgPiAw
KSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3QgaGFzIGEg
MCBjYXBhY2l0eSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCktPnNldHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKSkKLSAgICAgICAgICAgIHsgUENM
T0coIiAgIC1QYWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9h
ZCkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCIpOyBjYW5u
b3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVS
ZWxvYWRGcm9tT3JpZ2luKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczog
UmVsb2FkIGZyb20gb3JpZ2luIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAo
bG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVNhbWUpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAt
TG9hZCB0eXBlIGlzOiBTYW1lIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotICAgIH0gd2hpbGUg
KGZhbHNlKTsKLSAgICAKLSAgICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgUGFnZSBDQU5OT1QgYmUg
Y2FjaGVkXG4tLS0tLS0tLSIgOiAiIFBhZ2UgQ0FOIGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsKLX0K
LQotYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGludCBpbmRlbnRM
ZXZlbCkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBmcmFtZXMgdGhhdCBoYXZl
IGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChtX2NyZWF0aW5nSW5p
dGlhbEVtcHR5RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBLVVJMIGN1cnJl
bnRVUkwgPSBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJM
KCk7Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBQQ0xPRygiKy0tLSIpOwotICAgIEtVUkwgbmV3VVJMID0gbV9wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyID8gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwo
KTsKLSAgICBpZiAoIW5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5p
bmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCVzKSB0byAoJXMpOiIs
IGN1cnJlbnRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbmV3VVJMLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBzdWJm
cmFtZSB3aXRoIFVSTCAoJXMpIGNhbiBiZSBjYWNoZWQ6IiwgY3VycmVudFVSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgCi0gICAgYm9vbCBjYW5ub3RDYWNoZSA9IGZhbHNlOwot
Ci0gICAgZG8gewotICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAgICAg
IFBDTE9HKCIgICAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7Ci0gICAgICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxs
KCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtTWFpbiBkb2N1bWVudCBoYXMgYW4gZXJyb3Ii
KTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX2NvbnRhaW5zUGx1Z0lucykK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBwbHVnaW5zIik7IGNhbm5v
dENhY2hlID0gdHJ1ZTsgfQotICAgICAgICBpZiAobV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKSkK
LSAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSBpcyBIVFRQUyIpOyBjYW5ub3RDYWNoZSA9
IHRydWU7IH0KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpICYmIG1fZnJhbWUtPmRv
bVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQot
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhbiB1bmxvYWQgZXZlbnQgbGlzdGVu
ZXIiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAg
ICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpKQotICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBvcGVuIGRhdGFiYXNlIGhhbmRsZXMiKTsgY2Fubm90
Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAg
ICAgIGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKG1fZnJhbWUt
PmRvY3VtZW50KCkpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhc3NvY2lh
dGVkIFNoYXJlZFdvcmtlcnMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2VvbG9jYXRpb24oKSkKLSAgICAgICAg
ICAgIHsgUENMT0coIiAgIC1GcmFtZSB1c2VzIEdlb2xvY2F0aW9uIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQotICAgICAgICBpZiAoIWhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkKLSAgICAgICAg
ICAgIHsgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOyBjYW5ub3RDYWNoZSA9
IHRydWU7IH0KLSAgICAgICAgaWYgKG1fcXVpY2tSZWRpcmVjdENvbWluZykKLSAgICAgICAgICAg
IHsgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsgY2Fubm90Q2FjaGUgPSB0
cnVlOyB9Ci0gICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQSVNlbnNl
KCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9h
ZGluZyBpbiBBUEkgc2Vuc2UiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICht
X2RvY3VtZW50TG9hZGVyLT5pc1N0b3BwaW5nKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAt
RG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5k
QWN0aXZlRE9NT2JqZWN0cygpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBkb2N1bWVu
dCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIGlm
ICghbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBh
Z2VDYWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExvYWRlciB1
c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQotI2VuZGlm
Ci0gICAgICAgIGlmICghbV9jbGllbnQtPmNhbkNhY2hlUGFnZSgpKQotICAgICAgICAgICAgeyBQ
Q0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsg
Y2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgfSB3aGlsZSAoZmFsc2UpOwotCi0gICAgZm9yIChG
cmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKCFjaGlsZC0+bG9h
ZGVyKCktPmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihpbmRlbnRMZXZlbCArIDEpKQotICAgICAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hlID8g
IiBGcmFtZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIpOwotICAg
IFBDTE9HKCIrLS0tIik7Ci0KLSAgICByZXR1cm4gIWNhbm5vdENhY2hlOwotfQotI2VuZGlmCi0K
IHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlGb3JDb29raWVzKCkKIHsKICAgICBp
ZiAobV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKQEAgLTIzNTEsOSArMjE0OSw5IEBACiAgICAg
c2V0U3RhdGUoRnJhbWVTdGF0ZUNvbXBsZXRlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y29t
bWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVkUGFnZSkK
K3ZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiB7Ci0gICAgUmVmUHRy
PENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBwcnBDYWNoZWRQYWdlOworICAgIFJlZlB0cjxDYWNo
ZWRQYWdlPiBjYWNoZWRQYWdlID0gbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgPyBwYWdlQ2FjaGUo
KS0+Z2V0KGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCkpIDogMDsKICAgICBSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+IHBkbCA9IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcjsKIAogICAgIExP
RyhQYWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29tbWl0IHByb3Zpc2lv
bmFsIGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICclcyciLCBtX2ZyYW1l
LT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX1VSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCAKQEAgLTIzNjEsNyArMjE1OSwxMSBAQAogCiAgICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIHdlIG5lZWQgdG8gY2FjaGUgdGhlIHBhZ2Ugd2UgYXJlIG5hdmlnYXRpbmcgYXdheSBm
cm9tIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICAvLyBXZSBhcmUgZG9pbmcgdGhp
cyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGF0IGEgbmV3IHBhZ2UgaXMgYWJvdXQg
dG8gYmUgbG9hZGVkLgotICAgIGNhY2hlUGFnZUZvckhpc3RvcnlJdGVtKGhpc3RvcnkoKS0+Y3Vy
cmVudEl0ZW0oKSk7CisgICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBoaXN0b3J5KCktPmN1cnJlbnRJ
dGVtKCk7CisgICAgaWYgKCFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6
Y2FuQ2FjaGUobV9mcmFtZS0+cGFnZSgpKSAmJiAhaXRlbS0+aXNJblBhZ2VDYWNoZSgpKSB7Cisg
ICAgICAgIHBhZ2VIaWRkZW4oKTsKKyAgICAgICAgcGFnZUNhY2hlKCktPmFkZChpdGVtLCBtX2Zy
YW1lLT5wYWdlKCkpOworICAgIH0KICAgICAKICAgICBpZiAobV9sb2FkVHlwZSAhPSBGcmFtZUxv
YWRUeXBlUmVwbGFjZSkKICAgICAgICAgY2xvc2VPbGREYXRhU291cmNlcygpOwpAQCAtMjM3OCw5
ICsyMTgwLDExIEBACiAgICAgaWYgKG1fc2VudFJlZGlyZWN0Tm90aWZpY2F0aW9uKQogICAgICAg
ICBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQoZmFsc2UpOwogICAgIAotICAgIGlm
IChjYWNoZWRQYWdlICYmIGNhY2hlZFBhZ2UtPmRvY3VtZW50KCkpCi0gICAgICAgIG9wZW4oKmNh
Y2hlZFBhZ2UpOwotICAgIGVsc2UgeyAgICAgICAgCisgICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2Fj
aGVkUGFnZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3Rv
cmUoKTsKKyAgICAgICAgY2FjaGVkUGFnZS0+cmVzdG9yZShtX2ZyYW1lLT5wYWdlKCkpOworICAg
ICAgICBjaGVja0NvbXBsZXRlZCgpOworICAgIH0gZWxzZSB7ICAgICAgICAKICAgICAgICAgS1VS
TCB1cmwgPSBwZGwtPnN1YnN0aXR1dGVEYXRhKCkucmVzcG9uc2VVUkwoKTsKICAgICAgICAgaWYg
KHVybC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmwgPSBwZGwtPnVybCgpOwpAQCAtMjU5Niw3
ICsyNDAwLDcgQEAKICAgICBtX2NsaWVudC0+c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShmYWxz
ZSk7IC8vIHN0b3AgZ2l2aW5nIG91dCB0aGUgYWN0dWFsIERPTURvY3VtZW50IHRvIG9ic2VydmVy
cwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UpCit2
b2lkIEZyYW1lTG9hZGVyOjpwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKQogewogICAgIEFT
U0VSVCghbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPnBh
Z2UoKSk7CkBAIC0yNjEyLDEwICsyNDE2LDYgQEAKICAgICAgICAgbV9mcmFtZS0+c2V0SlNTdGF0
dXNCYXJUZXh0KFN0cmluZygpKTsKICAgICAgICAgbV9mcmFtZS0+c2V0SlNEZWZhdWx0U3RhdHVz
QmFyVGV4dChTdHJpbmcoKSk7CiAgICAgfQotCi0gICAgY2FjaGVkUGFnZS5yZXN0b3JlKG1fZnJh
bWUtPnBhZ2UoKSk7Ci0KLSAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyOjpvcGVuKENhY2hlZEZyYW1lQmFzZSYgY2FjaGVkRnJhbWUpCkBAIC0zNDcwLDggKzMyNzAs
MTAgQEAKIAogICAgIHNldFBvbGljeURvY3VtZW50TG9hZGVyKDApOwogCi0gICAgaWYgKGlzQmFj
a0ZvcndhcmRMb2FkVHlwZSh0eXBlKSAmJiBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBh
Z2UoKSkKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKHR5cGUpICYmIGhpc3RvcnkoKS0+
cHJvdmlzaW9uYWxJdGVtKCktPmlzSW5QYWdlQ2FjaGUoKSkgeworICAgICAgICBsb2FkUHJvdmlz
aW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IGlmIChmb3JtU3RhdGUpCiAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaFdpbGxTdWJtaXRGb3Jt
KCZQb2xpY3lDaGVja2VyOjpjb250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtLCBmb3JtU3Rh
dGUpOwpAQCAtMzU4NCwzOCArMzM4NiwxOSBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBGcmFtZUxvYWRlcjo6bG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkKK3ZvaWQg
RnJhbWVMb2FkZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpCiB7Ci0gICAg
UmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBwYWdlQ2FjaGUoKS0+Z2V0KGhpc3Rvcnko
KS0+cHJvdmlzaW9uYWxJdGVtKCkpOwotICAgIGlmICghY2FjaGVkUGFnZSB8fCAhY2FjaGVkUGFn
ZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIERvY3VtZW50TG9hZGVy
KiBwcm92aXNpb25hbExvYWRlciA9IHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKTsKKyAgICBM
T0coUGFnZUNhY2hlLCAiV2ViQ29yZVBhZ2VDYWNoZTogTG9hZGluZyBwcm92aXNpb25hbCBEb2N1
bWVudExvYWRlciAlcCB3aXRoIFVSTCAnJXMnIGZyb20gQ2FjaGVkUGFnZSIsIHByb3Zpc2lvbmFs
RG9jdW1lbnRMb2FkZXIoKSwgcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIERvY3VtZW50TG9hZGVyICpwcm92aXNpb25hbExv
YWRlciA9IHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKTsKLSAgICBMT0coUGFnZUNhY2hlLCAi
V2ViQ29yZVBhZ2VDYWNoZTogRnJhbWVMb2FkZXIgJXAgbG9hZGluZyBwcm92aXNpb25hbCBEb2N1
bWVudExvYWRlciAlcCB3aXRoIFVSTCAnJXMnIGZyb20gQ2FjaGVkUGFnZSAlcCIsIHRoaXMsIHBy
b3Zpc2lvbmFsTG9hZGVyLCBwcm92aXNpb25hbExvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgY2FjaGVkUGFnZS5nZXQoKSk7Ci0gICAgCiAgICAgcHJvdmlzaW9uYWxMb2FkZXIt
PnByZXBhcmVGb3JMb2FkU3RhcnQoKTsKIAogICAgIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlID0g
dHJ1ZTsKIAogICAgIHByb3Zpc2lvbmFsTG9hZGVyLT5zZXRDb21taXR0ZWQodHJ1ZSk7Ci0gICAg
Y29tbWl0UHJvdmlzaW9uYWxMb2FkKGNhY2hlZFBhZ2UpOwotICAgIAotICAgIHJldHVybiB0cnVl
OworICAgIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpj
YWNoZVBhZ2VGb3JIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWNh
bkNhY2hlUGFnZSgpIHx8IGl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGFnZUhpZGRlbigpOwotICAgIAotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+
cGFnZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gQ2FjaGVk
UGFnZTo6Y3JlYXRlKHBhZ2UpOwotICAgICAgICBwYWdlQ2FjaGUoKS0+YWRkKGl0ZW0sIGNhY2hl
ZFBhZ2UucmVsZWFzZSgpKTsKLSAgICB9Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnBhZ2VIaWRk
ZW4oKQogewogICAgIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsK
QEAgLTM2ODEsMjEgKzM0NjQsMTAgQEAKIHsKICAgICAvLyBSZW1lbWJlciB0aGlzIGl0ZW0gc28g
d2UgY2FuIHRyYXZlcnNlIGFueSBjaGlsZCBpdGVtcyBhcyBjaGlsZCBmcmFtZXMgbG9hZAogICAg
IGhpc3RvcnkoKS0+c2V0UHJvdmlzaW9uYWxJdGVtKGl0ZW0pOwotICAgIAotICAgIC8vIENoZWNr
IGlmIHdlJ2xsIGJlIHVzaW5nIHRoZSBwYWdlIGNhY2hlLiAgV2Ugb25seSB1c2UgdGhlIHBhZ2Ug
Y2FjaGUKLSAgICAvLyBpZiBvbmUgZXhpc3RzIGFuZCBpdCBpcyBsZXNzIHRoYW4gX2JhY2tGb3J3
YXJkQ2FjaGVFeHBpcmF0aW9uSW50ZXJ2YWwKLSAgICAvLyBzZWNvbmRzIG9sZC4gIElmIHRoZSBj
YWNoZSBpcyBleHBpcmVkIGl0IGdldHMgZmx1c2hlZCBoZXJlLgotICAgIGlmIChSZWZQdHI8Q2Fj
aGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQoaXRlbSkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IDE4MDAgc2hvdWxkIG5vdCBiZSBoYXJkY29kZWQsIGl0IHNob3VsZCBjb21lIGZy
b20KLSAgICAgICAgLy8gV2ViS2l0QmFja0ZvcndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtl
eSBpbiBXZWJLaXQuCi0gICAgICAgIC8vIE9yIHdlIHNob3VsZCByZW1vdmUgV2ViS2l0QmFja0Zv
cndhcmRDYWNoZUV4cGlyYXRpb25JbnRlcnZhbEtleS4KLSAgICAgICAgaWYgKGN1cnJlbnRUaW1l
KCkgLSBjYWNoZWRQYWdlLT50aW1lU3RhbXAoKSA8PSAxODAwKSB7Ci0gICAgICAgICAgICBsb2Fk
V2l0aERvY3VtZW50TG9hZGVyKGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCksIGxvYWRUeXBl
LCAwKTsgICAKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2Zv
cndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGhpc3RvcnkoKS0+
cHJvdmlzaW9uYWxJdGVtKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAg
ICAgcGFnZUNhY2hlKCktPnJlbW92ZShpdGVtKTsKKworICAgIGlmIChDYWNoZWRQYWdlKiBjYWNo
ZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChpdGVtKSkgeworICAgICAgICBsb2FkV2l0aERvY3Vt
ZW50TG9hZGVyKGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCksIGxvYWRUeXBlLCAwKTsgICAK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEtVUkwgaXRlbVVSTCA9IGl0ZW0tPnVybCgp
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNjA0ODApCisrKyBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3
ICsyNTUsNyBAQAogewogICAgIGlmIChtX2dvdEZpcnN0Qnl0ZSAmJiAhbV9jb21taXR0ZWQpIHsK
ICAgICAgICAgbV9jb21taXR0ZWQgPSB0cnVlOwotICAgICAgICBmcmFtZUxvYWRlcigpLT5jb21t
aXRQcm92aXNpb25hbExvYWQoMCk7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPmNvbW1pdFByb3Zp
c2lvbmFsTG9hZCgpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lv
biA2MDQ4MCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwNyw3ICszMDcsNyBAQAogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCBjb21taXRQcm92
aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdlPik7CisgICAgdm9pZCBjb21taXRQcm92
aXNpb25hbExvYWQoKTsKICAgICBib29sIGlzTG9hZGluZ0Zyb21DYWNoZWRQYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2U7IH0KIAogICAgIGJvb2wgY29tbWl0dGlu
Z0ZpcnN0UmVhbExvYWQoKSBjb25zdCB7IHJldHVybiAhbV9jcmVhdGluZ0luaXRpYWxFbXB0eURv
Y3VtZW50ICYmICFtX2NvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZDsgfQpAQCAtMzUxLDcg
KzM1MSw5IEBACiAgICAgYm9vbCBpc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQ7IH0KIAogICAg
IHZvaWQgY2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMgPSB0cnVlLCBib29sIGNsZWFy
U2NyaXB0T2JqZWN0cyA9IHRydWUsIGJvb2wgY2xlYXJGcmFtZVZpZXcgPSB0cnVlKTsKLSAgICAK
KworICAgIGJvb2wgcXVpY2tSZWRpcmVjdENvbWluZygpIGNvbnN0IHsgcmV0dXJuIG1fcXVpY2tS
ZWRpcmVjdENvbWluZzsgfQorCiAgICAgYm9vbCBzaG91bGRDbG9zZSgpOwogCiBwcml2YXRlOgpA
QCAtMzcyLDggKzM3NCw3IEBACiAgICAgdm9pZCBuYXZpZ2F0ZVdpdGhpbkRvY3VtZW50KEhpc3Rv
cnlJdGVtKik7CiAgICAgdm9pZCBuYXZpZ2F0ZVRvRGlmZmVyZW50RG9jdW1lbnQoSGlzdG9yeUl0
ZW0qLCBGcmFtZUxvYWRUeXBlKTsKICAgICAKLSAgICBib29sIGxvYWRQcm92aXNpb25hbEl0ZW1G
cm9tQ2FjaGVkUGFnZSgpOwotICAgIHZvaWQgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oSGlzdG9y
eUl0ZW0qKTsKKyAgICB2b2lkIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwog
ICAgIHZvaWQgcGFnZUhpZGRlbigpOwogCiAgICAgdm9pZCByZWNlaXZlZEZpcnN0RGF0YSgpOwpA
QCAtNDE0LDcgKzQxNSw3IEBACiAgICAgdm9pZCBzZXRTdGF0ZShGcmFtZVN0YXRlKTsKIAogICAg
IHZvaWQgY2xvc2VPbGREYXRhU291cmNlcygpOwotICAgIHZvaWQgb3BlbihDYWNoZWRQYWdlJik7
CisgICAgdm9pZCBwcmVwYXJlRm9yQ2FjaGVkUGFnZVJlc3RvcmUoKTsKIAogICAgIHZvaWQgdXBk
YXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3QoKTsKIAo=
</data>
<flag name="review"
          id="42426"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>