<?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>41453</bug_id>
          
          <creation_ts>2010-07-01 03:44:54 -0700</creation_ts>
          <short_desc>HTMLTreeBuilder needs an adoption agency</short_desc>
          <delta_ts>2011-01-22 19:51:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>41123</blocked>
    
    <blocked>41581</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ian</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>245243</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-01 03:44:54 -0700</bug_when>
    <thetext>HTMLTreeBuilder needs an adoption agency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245244</commentid>
    <comment_count>1</comment_count>
      <attachid>60219</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-01 03:46:04 -0700</bug_when>
    <thetext>Created attachment 60219
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245863</commentid>
    <comment_count>2</comment_count>
      <attachid>60354</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-02 03:36:06 -0700</bug_when>
    <thetext>Created attachment 60354
compiles, but crashes.  nearly there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245869</commentid>
    <comment_count>3</comment_count>
      <attachid>60355</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-02 03:45:37 -0700</bug_when>
    <thetext>Created attachment 60355
runs, changes behavior, not sure if its right yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246214</commentid>
    <comment_count>4</comment_count>
      <attachid>60434</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-02 20:39:44 -0700</bug_when>
    <thetext>Created attachment 60434
another step forward</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246309</commentid>
    <comment_count>5</comment_count>
      <attachid>60450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 08:05:07 -0700</bug_when>
    <thetext>Created attachment 60450
ready for review, intrested in your comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246310</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 08:08:06 -0700</bug_when>
    <thetext>The sad part is, I suspect this change is one or two typos away from fixing a zillion sub-tests.  However this change is already too large, and keeping it locally longer doesn&apos;t help us move forward.

The adoption01.dat tests I wrote show that at least the foster parenting algorithm has a bug.

Getting the &quot;bookmarking&quot; functionality added to the list of active formatting elements will probably require moving to our own list instead of using a vector (so that we can insert elements w/o destroying all pointers.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246313</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-03 08:20:46 -0700</bug_when>
    <thetext>Attachment 60450 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3391144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246317</commentid>
    <comment_count>8</comment_count>
      <attachid>60451</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 08:56:30 -0700</bug_when>
    <thetext>Created attachment 60451
fix cr-linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246366</commentid>
    <comment_count>9</comment_count>
      <attachid>60451</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-03 16:46:47 -0700</bug_when>
    <thetext>Comment on attachment 60451
fix cr-linux

WebCore/html/HTMLElementStack.cpp:167
 +          recordAbove-&gt;next()-&gt;element()-&gt;beginParsingChildren(); // FIXME: Is this right?
I think so.

WebCore/html/HTMLElementStack.cpp:245
 +  #if ENABLE(SVG_FOREIGN_OBJECT)
We need to remove this ifdef eventually.

WebCore/html/HTMLElementStack.h:55
 +          ElementRecord* next() const { return m_next.get(); }
Blank line below.

WebCore/html/HTMLElementStack.cpp:229
 +      return find(element);
!!find ?

WebCore/html/HTMLFormattingElementList.cpp:106
 +          // This is somewhat of a hack, and is why this method can&apos;t be const.
Yeah, I&apos;d just use a loop here.  It&apos;s not like Vector::find is any smarter, and then we wouldn&apos;t need operator==, etc.

WebCore/html/HTMLTreeBuilder.cpp:810
 +          // !phrasing &amp;&amp; !formatting == special || scoping
Nit: The comment is in a different order than the code.

WebCore/html/HTMLTreeBuilder.cpp:831
 +          fosterParentElement = lastTableElementRecord-&gt;next()-&gt;element();
This code seems strange.  Do we really prefer the lastTableElement&apos;s actual parent in the DOM?  Keep in mind that DOM nodes can be moved around during parsing.  Usually we refer only to our own stack of open elements.

WebCore/html/HTMLTreeBuilder.cpp:846
 +          newParent-&gt;appendChild(child, ec);
No, this is no good.  You need to collect these up into a vector and hold references to them while you twiddle the DOM.  This fires mutation events, which can do all manner of bad things to you here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246367</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-03 16:47:13 -0700</bug_when>
    <thetext>I still need to read &quot;call the adoption agency&quot;, but I need to run now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246380</commentid>
    <comment_count>11</comment_count>
      <attachid>60451</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-03 20:44:25 -0700</bug_when>
    <thetext>Comment on attachment 60451
fix cr-linux

Sorry I don&apos;t see your bug.  Here are some comments though.

WebCore/html/HTMLTreeBuilder.cpp:860
 +              notImplemented(); // Check the stack of open elements for a more specific parse error.
&quot;if that node is also in the stack of open elements but the element is not in scope&quot;

You seem to be missing this text.

WebCore/html/HTMLTreeBuilder.cpp:805
 +      HTMLElementStack::ElementRecord* record = m_openElements.topRecord();
&quot;Let the furthest block be the topmost node in the stack of open elements that is lower in the stack than the formatting element, and is not an element in the phrasing or formatting categories. There might not be one.&quot;

Wow, that&apos;s super confusing.  Let me re-phrase.  We want the &quot;oldest&quot; (nee topmost) one that&apos;s &quot;younger&quot; (nee lower) that the formatting element.  You&apos;re walking the stack from the youngest (our top) and bailing when you hit the formatting element.  Ok.  That seems right.

WebCore/html/HTMLTreeBuilder.cpp:875
 +                  m_openElements.pop();
You can just call popUntil(formattingElement)

WebCore/html/HTMLTreeBuilder.cpp:881
 +          HTMLElementStack::ElementRecord* formattingElementRecord = m_openElements.find(formattingElement);
Lame that we need to search m_openElements again.  We just did that on line 863.

WebCore/html/HTMLTreeBuilder.cpp:897
 +                  m_openElements.remove(node-&gt;element());
Here we&apos;re depending on some very specific semantics of remove.  Also, this is quite inefficient since we&apos;re going to traverse the stack again.

WebCore/html/HTMLTreeBuilder.cpp:909
 +              AtomicHTMLToken fakeToken(HTMLToken::StartTag, node-&gt;element()-&gt;localName());
We&apos;re missing the attributes here.

WebCore/html/HTMLTreeBuilder.cpp:913
 +              HTMLFormattingElementList::Entry* nodeEntry = m_activeFormattingElements.find(node-&gt;element());
Another search.  Once we get this working, we need to get rid of all these extra searches.

WebCore/html/HTMLTreeBuilder.cpp:919
 +              node-&gt;element()-&gt;appendChild(lastNode-&gt;element(), ec);
Wow, that&apos;s scary.  I think it&apos;s ok because we&apos;re holding onto our datastructures here (and not the DOM&apos;s datastructures), but we to think really carefully about what can happen here.  I wish we could twiddle the DOM without firing off mutation events here.

WebCore/html/HTMLTreeBuilder.cpp:925
 +          const AtomicString&amp; commonAncestorTag = commonAncestor-&gt;localName();
commonAncestorName ?

WebCore/html/HTMLTreeBuilder.cpp:939
 +          AtomicHTMLToken fakeToken(HTMLToken::StartTag, formattingElement-&gt;localName());
Again, we&apos;re missing the attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246381</commentid>
    <comment_count>12</comment_count>
      <attachid>60451</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-03 20:52:23 -0700</bug_when>
    <thetext>Comment on attachment 60451
fix cr-linux

WebCore/html/HTMLTreeBuilder.cpp:832
 +      } else // fragment case
Maybe ASSERT that we&apos;re parsing a fragment?

WebCore/html/HTMLTreeBuilder.cpp:821
 +      HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
&quot;The foster parent element is the parent element of the last table element in the stack of open elements, if there is a table element and it has such a parent element.&quot;

Why do you think |last| means topmost?  It seems ambiguous to me.

WebCore/html/HTMLTreeBuilder.cpp:831
 +          fosterParentElement = lastTableElementRecord-&gt;next()-&gt;element();
I see.  You&apos;ve translated &quot;before&quot; to &quot;our-below&quot;, which is intuitive in this case since we&apos;re looking for the &quot;parent&quot;.  That means &quot;last&quot; would be &quot;most our-above,&quot; which means closet to our-top, which means topmost.  Maybe ask Hixie to clarify?  At least his-above and his-below is clear (if backwards).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246386</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-03 22:13:24 -0700</bug_when>
    <thetext>Rather than saving off the tokens, you might be able to use cloneNode(false).  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246394</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 22:44:44 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 60451 [details])
&gt; WebCore/html/HTMLElementStack.cpp:167
&gt;  +          recordAbove-&gt;next()-&gt;element()-&gt;beginParsingChildren(); // FIXME: Is this right?
&gt; I think so.

OK, removed.

&gt; WebCore/html/HTMLElementStack.cpp:245
&gt;  +  #if ENABLE(SVG_FOREIGN_OBJECT)
&gt; We need to remove this ifdef eventually.

Yup.

&gt; WebCore/html/HTMLElementStack.h:55
&gt;  +          ElementRecord* next() const { return m_next.get(); }
&gt; Blank line below.

Added.

&gt; WebCore/html/HTMLElementStack.cpp:229
&gt;  +      return find(element);
&gt; !!find ?

Changed.

&gt; WebCore/html/HTMLFormattingElementList.cpp:106
&gt;  +          // This is somewhat of a hack, and is why this method can&apos;t be const.
&gt; Yeah, I&apos;d just use a loop here.  It&apos;s not like Vector::find is any smarter, and then we wouldn&apos;t need operator==, etc.

It&apos;s not the loop.  Its the &amp;m_entries[x].  m_entries[x] returns a const reference because &quot;this&quot; is const.

&gt; WebCore/html/HTMLTreeBuilder.cpp:810
&gt;  +          // !phrasing &amp;&amp; !formatting == special || scoping
&gt; Nit: The comment is in a different order than the code.

Fixed.

&gt; WebCore/html/HTMLTreeBuilder.cpp:831
&gt;  +          fosterParentElement = lastTableElementRecord-&gt;next()-&gt;element();
&gt; This code seems strange.  Do we really prefer the lastTableElement&apos;s actual parent in the DOM?  Keep in mind that DOM nodes can be moved around during parsing.  Usually we refer only to our own stack of open elements.

I think so.  &quot;The foster parent element is the parent element of the last table element in the stack of open elements, if there is a table element and it has such a parent element&quot;

I filed http://www.w3.org/Bugs/Public/show_bug.cgi?id=10063 about the illegibility of that paragraph.

&gt; WebCore/html/HTMLTreeBuilder.cpp:846
&gt;  +          newParent-&gt;appendChild(child, ec);
&gt; No, this is no good.  You need to collect these up into a vector and hold references to them while you twiddle the DOM.  This fires mutation events, which can do all manner of bad things to you here.

Yeah, it sucks.  We need a parserAddChild which is reparenting aware.  I could write a wrapper around parserAddChild instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246397</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:10:39 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 60451 [details])
&gt; Sorry I don&apos;t see your bug.  Here are some comments though.

It&apos;s OK.  I&apos;ll see it eventually. :)

&gt; WebCore/html/HTMLTreeBuilder.cpp:860
&gt;  +              notImplemented(); // Check the stack of open elements for a more specific parse error.
&gt; &quot;if that node is also in the stack of open elements but the element is not in scope&quot;
&gt; 
&gt; You seem to be missing this text.

Ahha!  You might have found my bug. ;)

&gt; WebCore/html/HTMLTreeBuilder.cpp:805
&gt;  +      HTMLElementStack::ElementRecord* record = m_openElements.topRecord();
&gt; &quot;Let the furthest block be the topmost node in the stack of open elements that is lower in the stack than the formatting element, and is not an element in the phrasing or formatting categories. There might not be one.&quot;
&gt; 
&gt; Wow, that&apos;s super confusing.  Let me re-phrase.  We want the &quot;oldest&quot; (nee topmost) one that&apos;s &quot;younger&quot; (nee lower) that the formatting element.  You&apos;re walking the stack from the youngest (our top) and bailing when you hit the formatting element.  Ok.  That seems right.

Yup.  I wrote it wrong the first time.  :)  I shouted a few profanities at Hixie&apos;s broken stack and then wrote it two more times.  I think it&apos;s right now. :)

&gt; WebCore/html/HTMLTreeBuilder.cpp:875
&gt;  +                  m_openElements.pop();
&gt; You can just call popUntil(formattingElement)

Fixed.

&gt; WebCore/html/HTMLTreeBuilder.cpp:881
&gt;  +          HTMLElementStack::ElementRecord* formattingElementRecord = m_openElements.find(formattingElement);
&gt; Lame that we need to search m_openElements again.  We just did that on line 863.

Fixed.  (We have lots of over-searching.  I was just trying to get the damn thing *right* first.... still not quite there.)

&gt; WebCore/html/HTMLTreeBuilder.cpp:897
&gt;  +                  m_openElements.remove(node-&gt;element());
&gt; Here we&apos;re depending on some very specific semantics of remove.  Also, this is quite inefficient since we&apos;re going to traverse the stack again.

What? That it doesn&apos;t invalidate our saved node-&gt;next() pointer?   I think it&apos;s OK to depend on that.
It&apos;s impossible to avoid the second traversal unless we either make our list items hold bi-directional pointers, or we save &quot;node-&gt;previous()&quot; around so we can fix up the pointers.

&gt; WebCore/html/HTMLTreeBuilder.cpp:909
&gt;  +              AtomicHTMLToken fakeToken(HTMLToken::StartTag, node-&gt;element()-&gt;localName());
&gt; We&apos;re missing the attributes here.

Yes, that&apos;s what the FIXME is about.

&gt; WebCore/html/HTMLTreeBuilder.cpp:913
&gt;  +              HTMLFormattingElementList::Entry* nodeEntry = m_activeFormattingElements.find(node-&gt;element());
&gt; Another search.  Once we get this working, we need to get rid of all these extra searches.

This is a different data structure we&apos;re searching in here. :)

&gt; WebCore/html/HTMLTreeBuilder.cpp:919
&gt;  +              node-&gt;element()-&gt;appendChild(lastNode-&gt;element(), ec);
&gt; Wow, that&apos;s scary.  I think it&apos;s ok because we&apos;re holding onto our datastructures here (and not the DOM&apos;s datastructures), but we to think really carefully about what can happen here.  I wish we could twiddle the DOM without firing off mutation events here.

We don&apos;t want to use appendChild.  We want a parserAddChild which can handle reparenting.

&gt; WebCore/html/HTMLTreeBuilder.cpp:925
&gt;  +          const AtomicString&amp; commonAncestorTag = commonAncestor-&gt;localName();
&gt; commonAncestorName ?

I&apos;d rather use tag to be consistent with other code.  Also, theoretically we could/should use qualifiedNames here which would be called &quot;tags&quot;.

Actually, this check should just be a helper function.  I just didn&apos;t have a good name for it.

&gt; WebCore/html/HTMLTreeBuilder.cpp:939
&gt;  +          AtomicHTMLToken fakeToken(HTMLToken::StartTag, formattingElement-&gt;localName());
&gt; Again, we&apos;re missing the attributes.

Yup, same FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246398</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:14:37 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 60451 [details])
&gt; WebCore/html/HTMLTreeBuilder.cpp:832
&gt;  +      } else // fragment case
&gt; Maybe ASSERT that we&apos;re parsing a fragment?

Fixed.

&gt; WebCore/html/HTMLTreeBuilder.cpp:821
&gt;  +      HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
&gt; &quot;The foster parent element is the parent element of the last table element in the stack of open elements, if there is a table element and it has such a parent element.&quot;
&gt; 
&gt; Why do you think |last| means topmost?  It seems ambiguous to me.

I think so.  But I could be reading wrong.  Pile your lovin on http://www.w3.org/Bugs/Public/show_bug.cgi?id=10063.

Also CCing Ian so he can witness our stack-induced tears. :)

&gt; WebCore/html/HTMLTreeBuilder.cpp:831
&gt;  +          fosterParentElement = lastTableElementRecord-&gt;next()-&gt;element();
&gt; I see.  You&apos;ve translated &quot;before&quot; to &quot;our-below&quot;, which is intuitive in this case since we&apos;re looking for the &quot;parent&quot;.  That means &quot;last&quot; would be &quot;most our-above,&quot; which means closet to our-top, which means topmost.  Maybe ask Hixie to clarify?  At least his-above and his-below is clear (if backwards).

CC&apos;d Hixie.  I&apos;m clearly getting some foster parenting cases wrong, so something is wrong with my current implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246399</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:20:52 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; WebCore/html/HTMLTreeBuilder.cpp:860
&gt; &gt;  +              notImplemented(); // Check the stack of open elements for a more specific parse error.
&gt; &gt; &quot;if that node is also in the stack of open elements but the element is not in scope&quot;
&gt; &gt; 
&gt; &gt; You seem to be missing this text.
&gt; 
&gt; Ahha!  You might have found my bug. ;)

That fix changed behavior... positively I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246400</commentid>
    <comment_count>18</comment_count>
      <attachid>60468</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:30:12 -0700</bug_when>
    <thetext>Created attachment 60468
Addressed Adam&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246402</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:32:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; WebCore/html/HTMLTreeBuilder.cpp:821
&gt;  +      HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
&gt; &quot;The foster parent element is the parent element of the last table element in the stack of open elements, if there is a table element and it has such a parent element.&quot;
&gt; 
&gt; Why do you think |last| means topmost?  It seems ambiguous to me.

I read &quot;last&quot; as &quot;last added&quot;, which would be our &quot;topmost&quot; or hixie&apos;s &quot;bottommost&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246403</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-03 23:33:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Rather than saving off the tokens, you might be able to use cloneNode(false).  :)

Yeah, but that would get us in trouble if a &lt;script&gt; got to run in between (which it could do, I think...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246434</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-04 11:54:56 -0700</bug_when>
    <thetext>I found out that at least one of my new adoption tests is failing due to lack of InTable mode. :)

I believe the rest may be failing due to the lack of bookmark support in my adoption agency algorithm.  I can&apos;t (easily) add bookmark support until we change the list of active formatting elements to actually be a list instead of a vector.

I think I&apos;m done with this patch and going to start work on the other pieces (like InTable mode) before trying to find more bugs in this new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246440</commentid>
    <comment_count>22</comment_count>
      <attachid>60468</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-04 13:29:55 -0700</bug_when>
    <thetext>Comment on attachment 60468
Addressed Adam&apos;s feedback

Ok.  There&apos;s still work to do here around mutation events, etc, but we can do that in a subsequent patch.  Feel free to cq+ if you removed that notImplemented() mentioned below on purpose.

WebCore/html/HTMLTreeBuilder.cpp: 
 +              notImplemented();
I thought there was a reason I had this notImplemented here.

WebCore/html/HTMLTreeBuilder.cpp:843
 +  void HTMLTreeBuilder::reparentChildren(Element* oldParent, Element* newParent)
I&apos;m sad that this is still subject to mutation event tricks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246450</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-04 14:10:31 -0700</bug_when>
    <thetext>Yes, we&apos;ll go back and fix all the mutation event stuff in a separate patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246452</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-04 14:11:49 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 60468 [details])
&gt; Ok.  There&apos;s still work to do here around mutation events, etc, but we can do that in a subsequent patch.  Feel free to cq+ if you removed that notImplemented() mentioned below on purpose.
&gt; 
&gt; WebCore/html/HTMLTreeBuilder.cpp: 
&gt;  +              notImplemented();
&gt; I thought there was a reason I had this notImplemented here.

Oops.  I assume you mean line 424.  That was unintentional.  Will add it back. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246454</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-04 14:16:36 -0700</bug_when>
    <thetext>Committed r62468: &lt;http://trac.webkit.org/changeset/62468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246456</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-04 14:22:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62468 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246461</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-04 15:10:01 -0700</bug_when>
    <thetext>Committed r62470: &lt;http://trac.webkit.org/changeset/62470&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246469</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-04 16:38:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62470 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60219</attachid>
            <date>2010-07-01 03:46:04 -0700</date>
            <delta_ts>2010-07-02 03:36:03 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-41453-20100701034602.patch</filename>
            <type>text/plain</type>
            <size>17057</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzZhOTg5OWZmOTdhOThiODMwNGVkYzlkMTRmZjY4ZWRlZDVlZjZhOC4uY2YyZmNjODM4NjBiODdi
MmRhOTRkOTQ0OTgwYmZhMGIzYzZiZTcyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNy0wMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSFRNTFRyZWVCdWlsZGVyIG5lZWRzIGFuIGFkb3B0aW9uIGFn
ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0
NTMKKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLiAgT25jZSB0aGlzIHdvcmtzIGl0IGlzIGNv
dmVyZWQKKyAgICAgICAgYnkgbWFueSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1l
bnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
SXRlcmF0b3I6OkVsZW1lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmZpbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1l
bnRTdGFjay5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgICog
aHRtbC9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wNy0wMSAgWXVyeSBTZW1pa2hhdHNreSAg
PHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3BwIGIvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50U3RhY2suY3BwCmluZGV4IGM5ZTczYzJjZjhjNjU3ODc2ZGI1YzJjMjUx
NWJhNTUxMjI1MjdhZGYuLmJmNzM2ODY0Y2I0ZDc5MzljMmNhNjc3MjBiMjYwN2ZiZjU0ZWVhMzYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTU2LDYgKzU2LDQyIEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fbmV4dDsKIH07CiAKK0hUTUxFbGVtZW50U3Rh
Y2s6OkVsZW1lbnRJdGVyYXRvcjo6RWxlbWVudEl0ZXJhdG9yKEVsZW1lbnRSZWNvcmQqIHJlY29y
ZCkKKyAgICA6IG1fY3VycmVudChyZWNvcmQpCit7Cit9CisKK0VsZW1lbnQqIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6Z2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJy
ZW50LT5lbGVtZW50KCk7Cit9CisKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJ
dGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0KCk7Cit9CisKK0Vs
ZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdldCgpOworfQorCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
SXRlcmF0b3ImIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6b3BlcmF0b3IrKygp
Cit7CisgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50LT5uZXh0KCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitib29sIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6b3BlcmF0b3I9
PShjb25zdCBFbGVtZW50SXRlcmF0b3ImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBnZXQo
KSA9PSBvdGhlci5nZXQoKTsKK30KKworYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50SXRl
cmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgRWxlbWVudEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gZ2V0KCkgIT0gb3RoZXIuZ2V0KCk7Cit9CisKIEhUTUxFbGVtZW50U3RhY2s6
OkhUTUxFbGVtZW50U3RhY2soKQogICAgIDogbV9odG1sRWxlbWVudCgwKQogICAgICwgbV9oZWFk
RWxlbWVudCgwKQpAQCAtMTI3LDYgKzE2MywyNSBAQCBFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNr
Ojp0b3AoKSBjb25zdAogICAgIHJldHVybiBtX3RvcC0+ZWxlbWVudCgpOwogfQogCitIVE1MRWxl
bWVudFN0YWNrOjppdGVyYXRvciBIVE1MRWxlbWVudFN0YWNrOjpiZWdpbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEVsZW1lbnRJdGVyYXRvcihtX3RvcC5nZXQoKSk7Cit9CisKK0hUTUxFbGVtZW50
U3RhY2s6Oml0ZXJhdG9yIEhUTUxFbGVtZW50U3RhY2s6OmVuZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEVsZW1lbnRJdGVyYXRvcigwKTsKK30KKworSFRNTEVsZW1lbnRTdGFjazo6aXRlcmF0b3Ig
SFRNTEVsZW1lbnRTdGFjazo6ZmluZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGZv
ciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7IHBvczsgcG9zID0gcG9zLT5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKHBvcy0+ZWxlbWVudCgpID09IGVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gRWxlbWVudEl0ZXJhdG9yKHBvcyk7CisgICAgfQorICAgIHJldHVybiBlbmQoKTsK
K30KKwogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCA9PSBlbGVtZW50KTsKQEAg
LTE1MCw0MCArMjA1LDM1IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQq
IGVsZW1lbnQpCiAKIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKIHsKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgp
OyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgpKSB7Ci0gICAgICAgIGlmIChwb3MtPmVsZW1lbnQoKSA9
PSBlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gZmluZChlbGVtZW50KSAhPSBlbmQoKTsKIH0KIAogbmFtZXNwYWNl
IHsKIAotaW5saW5lIGJvb2wgaXNTY29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQor
aW5saW5lIGJvb2wgaXNTY29wZU1hcmtlcihFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVy
biBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShidXR0b25UYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoY2FwdGlv
blRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpCiAgICAgICAg
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShtYXJxdWVlVGFnKQorICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVj
dFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykKICAgICAgICAg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0ZFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZSh0aFRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShidXR0b25UYWcpCi0g
ICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykKLSAgICAgICAgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpCiAjaWYgRU5BQkxFKFNWR19GT1JFSUdOX09CSkVD
VCkKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVj
dFRhZykKICNlbmRpZgogICAgICAgICA7CiB9CiAKLWlubGluZSBib29sIGlzTGlzdEl0ZW1TY29w
ZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wgaXNMaXN0SXRlbVNj
b3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGlzU2NvcGVNYXJrZXIo
ZWxlbWVudCkKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvbFRhZykKICAgICAgICAg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZyk7CiB9Ci1pbmxpbmUgYm9vbCBpc1RhYmxlU2Nv
cGVNYXJrZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK2lubGluZSBib29sIGlzVGFibGVTY29w
ZU1hcmtlcihFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdO
YW1lKGh0bWxUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpOwpA
QCAtMTkxLDcgKzI0MSw3IEBAIGlubGluZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihjb25zdCBF
bGVtZW50KiBlbGVtZW50KQogCiB9CiAKLXRlbXBsYXRlIDxib29sIGlzTWFya2VyKGNvbnN0IEVs
ZW1lbnQqKT4KK3RlbXBsYXRlIDxib29sIGlzTWFya2VyKEVsZW1lbnQqKT4KIGJvb2wgaW5TY29w
ZUNvbW1vbihIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiB0b3AsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFyZ2V0VGFnKQogewogICAgIGZvciAoSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogcG9zID0gdG9wOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgpKSB7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50U3RhY2suaAppbmRleCAyNTNjMWFmZDg4MTIyOWQ1MzRjOGIxYmI0MjI5NTliYWZmYTZmNGJj
Li4yYWIwODg4NzZkMmRlMGY3NGUxOGFlYjg1ZmE3YjA1MzdkN2UyMjYzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudFN0YWNrLmgKQEAgLTQwLDcgKzQwLDMwIEBAIHB1YmxpYzoKICAgICBIVE1MRWxlbWVudFN0
YWNrKCk7CiAgICAgfkhUTUxFbGVtZW50U3RhY2soKTsKIAorICAgIGNsYXNzIEVsZW1lbnRSZWNv
cmQ7CisgICAgY2xhc3MgRWxlbWVudEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEVs
ZW1lbnRJdGVyYXRvcihFbGVtZW50UmVjb3JkKik7CisKKyAgICAgICAgRWxlbWVudCogZ2V0KCkg
Y29uc3Q7CisgICAgICAgIEVsZW1lbnQqIG9wZXJhdG9yKigpIGNvbnN0OworICAgICAgICBFbGVt
ZW50KiBvcGVyYXRvci0+KCkgY29uc3Q7CisKKyAgICAgICAgRWxlbWVudEl0ZXJhdG9yJiBvcGVy
YXRvcisrKCk7CisgICAgICAgIC8vIHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCisK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVsZW1lbnRJdGVyYXRvciYpIGNvbnN0Owor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRWxlbWVudEl0ZXJhdG9yJikgY29uc3Q7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgRWxlbWVudFJlY29yZCogbV9jdXJyZW50OworICAgIH07CisK
KyAgICB0eXBlZGVmIEVsZW1lbnRJdGVyYXRvciBpdGVyYXRvcjsKKwogICAgIEVsZW1lbnQqIHRv
cCgpIGNvbnN0OworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3Q7CisgICAgaXRlcmF0b3IgZmluZChFbGVtZW50KikgY29uc3Q7CiAKICAgICB2b2lk
IHB1c2goUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwdXNoSFRNTEh0bWxFbGVtZW50
KFBhc3NSZWZQdHI8RWxlbWVudD4pOwpAQCAtNjUsOCArODgsNiBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaGVhZEVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpOwogCi0gICAg
Ly8gUHVibGljIHNvIGZyZWUgZnVuY3Rpb25zIGNhbiB1c2UgaXQsIGJ1dCBkZWZpbmVkIHByaXZh
dGVseS4KLSAgICBjbGFzcyBFbGVtZW50UmVjb3JkOwogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hD
b21tb24oUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCmluZGV4IGE5YzU2ZTY1NGJjOTM0OGEw
ZWQyZGVmZDE1MjdkNGZlMWJmYjk4ZTAuLmNmM2M2ZGQ3NWNmNjg5MzdhOTA3MDYwM2UxN2ZjMThm
MDlkMzljNDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaApAQCAt
MzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0b21pY1N0cmlu
ZzsKIGNsYXNzIEVsZW1lbnQ7CiAKIC8vIFRoaXMgbWF5IGVuZCB1cCBtZXJnZWQgaW50byBIVE1M
RWxlbWVudFN0YWNrLgpAQCAtNDMsNyArNDQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZW50cmllcy5zaXplKCk7IH0KIAorICAgIEVsZW1lbnQqIGNsb3Nlc3RFbGVtZW50
SW5TY29wZVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOworCiAgICAgdm9pZCBhcHBlbmQo
RWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnQqKTsKICAgICB2b2lkIGNsZWFyVG9M
YXN0TWFya2VyKCk7CiAKICAgICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUsIGJ1
dCBIVE1MVHJlZUJ1aWxkZXIgaGFzIHRvIGNvb3JkaW5hdGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5j
cHAKaW5kZXggNjIyNTM1NWY3ODZkNTMxZTk0MTA0OTEyNGJlYzU1ZmY4YWQ1YWEzNC4uMWRjNWMz
MjFmM2E1ZDUwYzQyYTUzNzFjNTQ3MTRjYzllZTkxNjY3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRl
ci5jcHAKQEAgLTY0LDYgKzY0LDEzMiBAQCBib29sIHNob3VsZFVzZUxlZ2FjeVRyZWVCdWlsZGVy
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gIWRvY3VtZW50LT5zZXR0aW5ncygpIHx8
ICFkb2N1bWVudC0+c2V0dGluZ3MoKS0+aHRtbDVUcmVlQnVpbGRlckVuYWJsZWQoKTsKIH0KIAor
Ym9vbCBpc051bWJlcmVkSGVhZGVyVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sK
KyAgICByZXR1cm4gdGFnTmFtZSA9PSBoMVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGgyVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDNUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoNFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGg1VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDZU
YWc7Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNzcGVjaWFsCitib29sIGlzU3BlY2lhbFRhZyhj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYWRk
cmVzc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGFydGljbGVUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBhc2lkZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJhc2VUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBiYXNlZm9udFRhZworICAgICAgICB8fCB0YWdOYW1lID09ICJiZ3NvdW5k
IgorICAgICAgICB8fCB0YWdOYW1lID09IGJsb2NrcXVvdGVUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBib2R5VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYnJUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBidXR0b25UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjZW50ZXJUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBjb2xUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2xncm91cFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09ICJjb21tYW5kIgorICAgICAgICB8fCB0YWdOYW1lID09
IGRkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImRldGFpbHMiCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gZGlyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZGl2VGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gZGxUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkdFRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGVtYmVkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZmllbGRzZXRUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSAiZmlndXJlIgorICAgICAgICB8fCB0YWdOYW1lID09IGZvb3Rl
clRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZvcm1UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBmcmFtZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZyYW1lc2V0VGFnCisgICAgICAgIHx8
IGlzTnVtYmVyZWRIZWFkZXJUYWcodGFnTmFtZSkKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoZWFk
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaGVhZGVyVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gaGdyb3VwVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaHJUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBpZnJhbWVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBpbWdUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBpbnB1dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGlzaW5kZXhUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSBsaVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGxpbmtU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBsaXN0aW5nVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gbWVudVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG1ldGFUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBuYXZUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub2VtYmVkVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub3Njcmlw
dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IG9sVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
cFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHBhcmFtVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gcGxhaW50ZXh0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gcHJlVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gc2NyaXB0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc2VjdGlvblRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IHNlbGVjdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHN0
eWxlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGJvZHlUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSB0ZXh0YXJlYVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRmb290VGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gdGhlYWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0aXRsZVRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IHRyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdWxUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSB3YnJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB4bXBU
YWc7Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNzY29waW5nCisvLyBTYW1lIGFzIGlzU2NvcGlu
Z1RhZyBpbiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCisvLyBhbmQgaXNTY29wZU1hcmtlciBp
biBIVE1MRWxlbWVudFN0YWNrLmNwcAorYm9vbCBpc1Njb3BpbmdUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09IGFwcGxldFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGJ1dHRvblRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNhcHRpb25U
YWcKKyNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQorICAgICAgICB8fCB0YWdOYW1lID09
IFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnCisjZW5kaWYKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBodG1sVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbWFycXVlZVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IG9iamVjdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRhYmxlVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gdGRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0aFRhZzsKK30K
KworYm9vbCBpc05vbkFuY2hvckZvcm1hdHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09IGJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBiaWdUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2RlVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gZW1UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmb250VGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gaVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vYnJUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBzVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc21hbGxUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBzdHJpa2VUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzdHJvbmdUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSB0dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHVUYWc7
Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNmb3JtYXR0aW5nCitib29sIGlzRm9ybWF0dGluZ1Rh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0g
YVRhZyB8fCBpc05vbkFuY2hvckZvcm1hdHRpbmdUYWcodGFnTmFtZSk7Cit9CisKKy8vIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Bh
cnNpbmcuaHRtbCNwaHJhc2luZworYm9vbCBpc1BocmFzaW5nVGFnKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gIWlzU3BlY2lhbFRhZyh0YWdOYW1lKSAmJiAhaXNT
Y29waW5nVGFnKHRhZ05hbWUpICYmICFpc0Zvcm1hdHRpbmdUYWcodGFnTmFtZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlCiAKIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tl
bml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJv
cnMpCkBAIC00MDAsNyArNTI2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaW5zZXJ0RWxlbWVudCh0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBoMVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGgzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVU
YWcgfHwgdG9rZW4ubmFtZSgpID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVh
ZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTQ0Nyw3ICs1NzMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRGb3JtYXR0aW5nRWxlbWVu
dCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBiVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBiaWdUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IGNvZGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGVtVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBmb250VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3RyaWtlVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcgfHwgdG9rZW4ubmFtZSgpID09IHR0VGFnIHx8
IHRva2VuLm5hbWUoKSA9PSB1VGFnKSB7CisgICAgICAgIGlmIChpc05vbkFuY2hvckZvcm1hdHRp
bmdUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcmVjb25zdHJ1Y3RUaGVBY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgICAgIGluc2VydEZvcm1hdHRpbmdFbGVtZW50
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU5OCw2ICs3MjQsNTggQEAgYm9vbCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0VsZW1lbnQqIEhUTUxUcmVlQnVpbGRl
cjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVsZW1lbnQqIGZvcm1hdHRpbmdF
bGVtZW50KQoreworICAgIEVsZW1lbnQqIGZ1cnRoZXN0QmxvY2sgPSAwOworICAgIEhUTUxFbGVt
ZW50U3RhY2s6Oml0ZXJhdG9yIGl0ciA9IG1fb3BlbkVsZW1lbnRzLmZpbmQoZm9ybWF0dGluZ0Vs
ZW1lbnQpOworICAgIEhUTUxFbGVtZW50U3RhY2s6Oml0ZXJhdG9yIGVuZCA9IG1fb3BlbkVsZW1l
bnRzLmVuZCgpOworICAgIGZvciAoOyBpdHIgIT0gZW5kOyArK2l0cikgeworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gKml0cjsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
ID0gZWxlbWVudC0+bG9jYWxOYW1lKCk7CisgICAgICAgIC8vICFwaHJhc2luZyAmJiAhZm9ybWF0
dGluZyA9PSBzcGVjaWFsIHx8IHNjb3BpbmcKKyAgICAgICAgaWYgKGlzU2NvcGluZ1RhZyh0YWdO
YW1lKSB8fCBpc1NwZWNpYWxUYWcodGFnTmFtZSkpCisgICAgICAgICAgICBmdXJ0aGVzdEJsb2Nr
ID0gZWxlbWVudDsKKyAgICB9CisgICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7Cit9CisKKy8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3Rva2VuaXphdGlvbi5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkKK3ZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3sKKyAg
ICAvLyAxLgorICAgIEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV9hY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMuY2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4ubmFtZSgpKTsK
KyAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50KSB7CisgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBDaGVjayB0aGUgc3RhY2sgb2Ygb3BlbiBl
bGVtZW50cyBmb3IgYSBtb3JlIHNwZWNpZmljIHBhcnNlIGVycm9yLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICghbV9vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1l
bnQpKSB7CisgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICBtX2FjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudCAhPSBjdXJyZW50RWxlbWVudCgpKQor
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAvLyAyLgorICAgIEVsZW1lbnQqIGZ1cnRo
ZXN0QmxvY2sgPSBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0Vs
ZW1lbnQpOworICAgIC8vIDMuCisgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7CisgICAgICAgIHdo
aWxlIChjdXJyZW50RWxlbWVudCgpICE9IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAg
bV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOworICAg
ICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIDQuCisgICAgSFRNTEVsZW1lbnRTdGFj
azo6aXRlcmF0b3IgZm9ybWF0dGluZ0VsZW1lbnRQb3NpdGlvbiA9IG1fb3BlbkVsZW1lbnRzLmZp
bmQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgIEVsZW1lbnQqIGNvbW1vbkFuY2VzdG9yID0gKigr
K2Zvcm1hdHRpbmdFbGVtZW50UG9zaXRpb24pOworICAgIC8vIDUuCisgICAgbm90SW1wbGVtZW50
ZWQoKTsgLy8gYm9va21hcms/CisgICAgLy8gNi4KKyAgICBFbGVtZW50KiBub2RlID0gZnVydGhl
c3RCbG9jazsKKyAgICBFbGVtZW50KiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7Cit9CisKIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7CiAgICAgc3dpdGNoIChpbnNlcnRpb25Nb2RlKCkpIHsKQEAgLTcxMiw3ICs4OTAsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoMVRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgzVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGg2VGFn
KSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKICAg
ICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNzI4LDcgKzkwNiw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFn
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAv
LyBUYWtlIGEgZGVlcCBicmVhdGguCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBiVGFnIHx8
IHRva2VuLm5hbWUoKSA9PSBiaWdUYWcgfHwgdG9rZW4ubmFtZSgpID09IGNvZGVUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IGVtVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBmb250VGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBpVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBub2JyVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ry
aWtlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcgfHwgdG9rZW4ubmFtZSgpID09IHR0
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSB1VGFnKSB7CisgICAgICAgIGlmIChpc0Zvcm1hdHRpbmdU
YWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KHRv
a2VuKTsKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVGhlcmUncyBhIGNvbXBsaWNhdGVkIGFsZ29yaXRobSB0aGF0IGdvZXMgaGVyZS4KICAgICAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBmZDI4MGU2MTkxOTAxMGUy
M2Q1ODBiZjBjYWFjNzY2YjFjMDgzNDIxLi5iZjU3NTE3MTZhZDdlNWM4ZWFjOWVmMDQ5OTUyOTcx
MzBkNmRiZWU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0xMjUsNiArMTI1LDkgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJik7CiAKKyAgICBFbGVtZW50KiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQo
RWxlbWVudCopOworICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tl
biYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRUeXBlPgogICAgIFBhc3NSZWZQdHI8
Q2hpbGRUeXBlPiBhdHRhY2goTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxkVHlwZT4gcHJw
Q2hpbGQpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60354</attachid>
            <date>2010-07-02 03:36:06 -0700</date>
            <delta_ts>2010-07-02 03:45:32 -0700</delta_ts>
            <desc>compiles, but crashes.  nearly there</desc>
            <filename>bug-41453-20100702033605.patch</filename>
            <type>text/plain</type>
            <size>32232</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2RmNjliNTNlN2Y5ZWU0MjY2OGQ5M2I0MDA1MGZjODAwMDJkODZjZS4uYWZiYjNjZmEyMWNjZDg2
YzA2MWJhYTJmMmU4NGRkYWJjMWU0ODIwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNy0wMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSFRNTFRyZWVCdWlsZGVyIG5lZWRzIGFuIGFkb3B0aW9uIGFn
ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0
NTMKKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLiAgT25jZSB0aGlzIHdvcmtzIGl0IGlzIGNv
dmVyZWQKKyAgICAgICAgYnkgbWFueSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1l
bnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
SXRlcmF0b3I6OkVsZW1lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmZpbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1l
bnRTdGFjay5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgICog
aHRtbC9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wNy0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiM2Y2ZmNmNWQyYjk1MDRj
NDM2YzUyYmM3ZTRjZWZmY2ZjZDg2MzhkLi5jMjY2NjU0MTRkNmJjM2E5ODJjMDU1NjVjNjcxZTdi
YjQ5YjdiYmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjMwMCw4ICsyMzAwLDYgQEAKIAkJODlDRDAyOTMxMUM4NUI4NzAwNzBCNzkxIC8qIEpTQmxv
YkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODlDRDAyOTExMUM4NUI4NzAwNzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuY3BwICovOyB9Owog
CQk4OUNEMDI5NDExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODlDRDAyOTIxMUM4NUI4NzAwNzBC
NzkxIC8qIEpTQmxvYkJ1aWxkZXIuaCAqLzsgfTsKIAkJOEE4MUJGODUxMURDRkQ5MDAwREEyQjk4
IC8qIFJlc291cmNlTG9hZFRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOEE4MUJGODQxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9hZFRp
bWluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CThBODQ0Q0ZFMTFEM0MxN0MwMDE0MDY1QyAvKiBOYXZpZ2F0aW9uVGltaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0Q0ZCMTFEM0MxN0Mw
MDE0MDY1QyAvKiBOYXZpZ2F0aW9uVGltaW5nLmNwcCAqLzsgfTsKLQkJOEE4NDRDRkYxMUQzQzE3
QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0Q0ZDMTFEM0MxN0MwMDE0MDY1QyAvKiBOYXZpZ2F0
aW9uVGltaW5nLmggKi87IH07CiAJCThBODQ0RDA0MTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3Jt
YW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QTg0NEQwMTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuY3BwICovOyB9OwogCQk4QTg0
NEQwNTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAvKiBQ
ZXJmb3JtYW5jZS5oICovOyB9OwogCQk4QUY0RTU1NTExREM1QTM2MDAwRUQzREUgLyogTmF2aWdh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QUY0RTU1MjExREM1QTM2MDAwRUQzREUgLyogTmF2aWdhdGlvbi5jcHAgKi87IH07CkBAIC03OTc4
LDkgKzc5NzYsNiBAQAogCQk4OUNEMDI5MTExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVpbGRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Jsb2JCdWlsZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODlDRDAyOTIxMUM4NUI4NzAwNzBC
NzkxIC8qIEpTQmxvYkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNCbG9iQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTgxQkY4NDEx
RENGRDkwMDBEQTJCOTggLyogUmVzb3VyY2VMb2FkVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4QTg0NENGQjExRDNDMTdDMDAxNDA2NUMgLyogTmF2aWdhdGlvblRpbWluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0aW9uVGltaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEE4NDRDRkMxMUQzQzE3QzAwMTQw
NjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTmF2aWdhdGlvblRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4QTg0
NENGRDExRDNDMTdDMDAxNDA2NUMgLyogTmF2aWdhdGlvblRpbWluZy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gTmF2aWdhdGlvblRpbWluZy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThBODQ0RDAxMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3Jt
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTg0NEQwMzExRDNDMThFMDAxNDA2NUMgLyog
UGVyZm9ybWFuY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudFN0YWNrLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRl
eCBjOWU3M2MyY2Y4YzY1Nzg3NmRiNWMyYzI1MTViYTU1MTIyNTI3YWRmLi5lZjc4MmVhMDY5NGU3
Nzk1OThjMWQ2MDgzOWZiMzE2ZWUwNmFlNmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnRTdGFjay5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3Bw
CkBAIC0zOCwyMyArMzgsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1jbGFzcyBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQotICAg
ICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1fbmV4dChuZXh0KQotICAgIHsK
LSAgICB9CitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0
KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX25leHQobmV4dCkKK3sKK30KIAot
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0K
LSAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9
Ci0gICAgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG1f
bmV4dC5yZWxlYXNlKCk7IH0KLSAgICB2b2lkIHNldE5leHQoUGFzc093blB0cjxFbGVtZW50UmVj
b3JkPiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQ6On5FbGVtZW50UmVjb3JkKCkKK3sKK30KIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8RWxl
bWVudD4gbV9lbGVtZW50OwotICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX25leHQ7Ci19Owor
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudChQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNh
bGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPworICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7Cit9CisK
K2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVj
b3JkKiBvdGhlcikgY29uc3QKK3sKKyAgICBFbGVtZW50UmVjb3JkKiBiZWxvdyA9IG5leHQoKTsK
KyAgICB3aGlsZSAoYmVsb3cpIHsKKyAgICAgICAgaWYgKGJlbG93ID09IG90aGVyKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAogSFRNTEVs
ZW1lbnRTdGFjazo6SFRNTEVsZW1lbnRTdGFjaygpCiAgICAgOiBtX2h0bWxFbGVtZW50KDApCkBA
IC05MSw2ICs5OSw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWwoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKQogCiB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRt
bEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQogeworICAgIEFTU0VSVCghbV90
b3ApOyAvLyA8aHRtbD4gc2hvdWxkIGFsd2F5cyBiZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4K
ICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKICAg
ICBBU1NFUlQoIW1faHRtbEVsZW1lbnQpOwogICAgIG1faHRtbEVsZW1lbnQgPSBlbGVtZW50Lmdl
dCgpOwpAQCAtMTIyLDExICsxMzEsNDIgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoKFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKICAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOwogfQog
Cit2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCwgRWxlbWVudFJlY29yZCogcmVjb3JkQmVsb3cpCit7CisgICAgQVNTRVJUKG1fdG9w
KTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7
CisgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOwor
ICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAg
ICBBU1NFUlQobV9odG1sRWxlbWVudCk7CisgICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9wKQor
ICAgICAgICBwdXNoKGVsZW1lbnQpOworCisgICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmRB
Ym92ZSA9IG1fdG9wLT5uZXh0KCk7IHJlY29yZEFib3ZlOyByZWNvcmRBYm92ZSA9IHJlY29yZEFi
b3ZlLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJlY29yZEFib3ZlLT5uZXh0KCkgIT0gcmVjb3Jk
QmVsb3cpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZWNvcmRBYm92ZS0+c2V0
TmV4dChuZXcgRWxlbWVudFJlY29yZChlbGVtZW50LCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQo
KSkpOworICAgICAgICBlbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOyAvLyBGSVhNRTog
SXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTEVsZW1l
bnRTdGFjazo6dG9wUmVjb3JkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90b3AuZ2V0KCk7Cit9
CisKIEVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fdG9wLT5lbGVtZW50KCk7CiB9CiAKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvdHRv
bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGh0bWxFbGVtZW50KCk7Cit9CisKIHZvaWQgSFRNTEVs
ZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgQVNTRVJUKG1faGVhZEVsZW1lbnQgPT0gZWxlbWVudCk7CkBAIC0xMzUsNyArMTc1LDcgQEAg
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hlYWRFbGVtZW50ID0gMDsKLSAg
ICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICByZW1vdmVOb25Ub3BDb21tb24o
ZWxlbWVudCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQqIGVs
ZW1lbnQpCkBAIC0xNDUsNDUgKzE4NSw1OCBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92
ZShFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBwb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICByZW1vdmVOb25Ub3BD
b21tb24oZWxlbWVudCk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMoRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhU
TUxFbGVtZW50U3RhY2s6OmZpbmQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBmb3Ig
KEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgp
KSB7CiAgICAgICAgIGlmIChwb3MtPmVsZW1lbnQoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gcG9zOwogICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KSBjb25zdAoreworICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7IHBv
czsgcG9zID0gcG9zLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHBvcy0+ZWxlbWVudCgpLT5oYXNM
b2NhbE5hbWUodGFnTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpjb250YWlucyhFbGVtZW50KiBl
bGVtZW50KSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGVsZW1lbnQpOwogfQogCiBuYW1lc3Bh
Y2UgewogCi1pbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CitpbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKGJ1dHRvblRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShjYXB0
aW9uVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKICAgICAg
ICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKQorICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKG1hcnF1ZWVUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKQogICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKHRoVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRvblRhZykK
LSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShtYXJxdWVlVGFnKQotICAgICAgICB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykKICNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JK
RUNUKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2Jq
ZWN0VGFnKQogI2VuZGlmCiAgICAgICAgIDsKIH0KIAotaW5saW5lIGJvb2wgaXNMaXN0SXRlbVNj
b3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgYm9vbCBpc0xpc3RJdGVt
U2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gaXNTY29wZU1hcmtl
cihlbGVtZW50KQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKQogICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKTsKIH0KLWlubGluZSBib29sIGlzVGFibGVT
Y29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wgaXNUYWJsZVNj
b3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1Rh
Z05hbWUoaHRtbFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7
CkBAIC0xOTEsNyArMjQ0LDcgQEAgaW5saW5lIGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQpCiAKIH0KIAotdGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoY29uc3Qg
RWxlbWVudCopPgordGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoRWxlbWVudCopPgogYm9vbCBpblNj
b3BlQ29tbW9uKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHRvcCwgY29uc3QgQXRv
bWljU3RyaW5nJiB0YXJnZXRUYWcpCiB7CiAgICAgZm9yIChIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkKiBwb3MgPSB0b3A7IHBvczsgcG9zID0gcG9zLT5uZXh0KCkpIHsKQEAgLTIzMywx
OSArMjg2LDE5IEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5UYWJsZVNjb3BlKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFyZ2V0VGFnKSBjb25zdAogICAgIHJldHVybiBpblNjb3BlQ29tbW9uPGlz
VGFibGVTY29wZU1hcmtlcj4obV90b3AuZ2V0KCksIHRhcmdldFRhZyk7CiB9CiAKLUVsZW1lbnQq
IEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3Rh
Y2s6Omh0bWxFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9odG1sRWxlbWVudCk7CiAg
ICAgcmV0dXJuIG1faHRtbEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6
OmhlYWRFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmhlYWRFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCk7CiAgICAgcmV0dXJuIG1faGVhZEVs
ZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkKK0Vs
ZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9ib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fYm9keUVsZW1lbnQ7CkBAIC0yNTMsNiAr
MzA2LDcgQEAgRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9keUVsZW1lbnQoKQogCiB2b2lk
IEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24oUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50
KQogeworICAgIEFTU0VSVChtX2h0bWxFbGVtZW50KTsKICAgICBtX3RvcC5zZXQobmV3IEVsZW1l
bnRSZWNvcmQoZWxlbWVudCwgbV90b3AucmVsZWFzZSgpKSk7CiAgICAgdG9wKCktPmJlZ2luUGFy
c2luZ0NoaWxkcmVuKCk7CiB9CkBAIC0yNjUsNyArMzE5LDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0
YWNrOjpwb3BDb21tb24oKQogICAgIG1fdG9wID0gbV90b3AtPnJlbGVhc2VOZXh0KCk7CiB9CiAK
LXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uRmlyc3RDb21tb24oRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQq
IGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbFRhZykpOwogICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJv
ZHlUYWcpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmggYi9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDI1M2MxYWZkODgxMjI5ZDUzNGM4
YjFiYjQyMjk1OWJhZmZhNmY0YmMuLjcxZWIxNmY0MWIzOWFmOTg3NzAwMWU2NmU3MDdiM2M1Mzk4
NmJmZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaApAQCAtMjYsMjEgKzI2LDUyIEBACiAjaWZu
ZGVmIEhUTUxFbGVtZW50U3RhY2tfaAogI2RlZmluZSBIVE1MRWxlbWVudFN0YWNrX2gKIAotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0b21pY1N0
cmluZzsKIGNsYXNzIEVsZW1lbnQ7CiAKKy8vIE5PVEU6IFRoZSBIVE1MNSBzcGVjIHVzZXMgYSBi
YWNrd2FyZHMgKGdyb3dzIGRvd253YXJkKSBzdGFjay4gIFdlJ3JlIHVzaW5nCisvLyBtb3JlIHN0
YW5kYXJkIChncm93cyB1cHdhcmRzKSBzdGFjayB0ZXJtaW5vbG9neSBoZXJlLgogY2xhc3MgSFRN
TEVsZW1lbnRTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgSFRNTEVs
ZW1lbnRTdGFjaygpOwogICAgIH5IVE1MRWxlbWVudFN0YWNrKCk7CiAKKyAgICBjbGFzcyBFbGVt
ZW50UmVjb3JkIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5F
bGVtZW50UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQorICAgIAorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9Cisg
ICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CisKKyAgICAg
ICAgYm9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKKworICAgICAgICBFbGVtZW50
UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgcHJpdmF0
ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEhUTUxFbGVtZW50U3RhY2s7CisKKyAgICAgICAgRWxl
bWVudFJlY29yZChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+
KTsKKworICAgICAgICBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IHJlbGVhc2VOZXh0KCkgeyBy
ZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQorICAgICAgICB2b2lkIHNldE5leHQoUGFzc093blB0
cjxFbGVtZW50UmVjb3JkPiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKworICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgICAgICBPd25QdHI8RWxlbWVudFJlY29yZD4gbV9u
ZXh0OworICAgIH07CisgICAgCiAgICAgRWxlbWVudCogdG9wKCkgY29uc3Q7CisgICAgRWxlbWVu
dFJlY29yZCogdG9wUmVjb3JkKCkgY29uc3Q7CisgICAgRWxlbWVudCogYm90dG9tKCkgY29uc3Q7
CisgICAgRWxlbWVudFJlY29yZCogZmluZChFbGVtZW50KikgY29uc3Q7CisgICAgRWxlbWVudFJl
Y29yZCogdG9wbW9zdChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0OworCisgICAg
dm9pZCBpbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBFbGVtZW50UmVjb3JkKik7CiAK
ICAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwdXNoSFRNTEh0
bWxFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwpAQCAtNjEsMTYgKzkyLDE0IEBAIHB1Ymxp
YzoKICAgICBib29sIGluTGlzdEl0ZW1TY29wZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
IGNvbnN0OwogICAgIGJvb2wgaW5UYWJsZVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkgY29uc3Q7CiAKLSAgICBFbGVtZW50KiBodG1sRWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGhl
YWRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCogYm9keUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBo
dG1sRWxlbWVudCgpIGNvbnN0OworICAgIEVsZW1lbnQqIGhlYWRFbGVtZW50KCkgY29uc3Q7Cisg
ICAgRWxlbWVudCogYm9keUVsZW1lbnQoKSBjb25zdDsKIAotICAgIC8vIFB1YmxpYyBzbyBmcmVl
IGZ1bmN0aW9ucyBjYW4gdXNlIGl0LCBidXQgZGVmaW5lZCBwcml2YXRlbHkuCi0gICAgY2xhc3Mg
RWxlbWVudFJlY29yZDsKIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoQ29tbW9uKFBhc3NSZWZQdHI8
RWxlbWVudD4pOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7Ci0gICAgdm9pZCByZW1vdmVOb25GaXJz
dENvbW1vbihFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCop
OwogCiAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fdG9wOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggZTcwZGU0MmY0ZDJlMTYxN2YyOGJjZDA4
YzJjNDQ0MWRmMjg4MTYyNS4uNmM1MzYzM2FlMWJiMmZhNzhkMWI4YWNmZTNjNDBmYjViZTNjZmU4
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcApAQCAtNjQs
NiArNjQsMTYgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6cmVwbGFj
ZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW4KICAgICBtX2VsZW1lbnQgPSBlbGVt
ZW50OwogfQogCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVyYXRv
cj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpID09
IG90aGVyLmVsZW1lbnQoKTsKK30KKworYm9vbCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpF
bnRyeTo6b3BlcmF0b3IhPShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGVsZW1lbnQoKSAhPSBvdGhlci5lbGVtZW50KCk7Cit9CisKIEhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3Q6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QoKQogewogfQpAQCAtNzIsMTEgKzgyLDQ4
IEBAIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6On5IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
KCkKIHsKIH0KIAorRWxlbWVudCogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xvc2VzdEVs
ZW1lbnRJblNjb3BlV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXROYW1lKQorewor
ICAgIFZlY3RvcjxFbnRyeT46Oml0ZXJhdG9yIGl0ciA9IG1fZW50cmllcy5lbmQoKTsKKyAgICAt
LWl0cjsKKyAgICBmb3IgKDsgaXRyOyAtLWl0cikgeworICAgICAgICBjb25zdCBFbnRyeSYgZW50
cnkgPSAqaXRyOworICAgICAgICBpZiAoZW50cnkuaXNNYXJrZXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBpZiAoZW50cnkuZWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodGFyZ2V0
TmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZW50cnkuZWxlbWVudCgpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpjb250YWlucyhF
bGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiAhIWZpbmQoZWxlbWVudCk7Cit9CisKK0hU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpmaW5kKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZW50cmllcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fZW50cmllc1tpXS5pc01h
cmtlcigpICYmIG1fZW50cmllc1tpXS5lbGVtZW50KCkgPT0gZWxlbWVudCkgeworICAgICAgICAg
ICAgLy8gVGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2ssIGFuZCBpcyB3aHkgdGhpcyBtZXRob2Qg
Y2FuJ3QgYmUgY29uc3QuCisgICAgICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpXTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjphcHBlbmQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBtX2VudHJpZXMuYXBwZW5k
KGVsZW1lbnQpOwogfQogCit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnJlbW92ZShF
bGVtZW50KiBlbGVtZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5kKGVs
ZW1lbnQpOworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9lbnRyaWVzLnJl
bW92ZShpbmRleCk7Cit9CisKIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xlYXJU
b0xhc3RNYXJrZXIoKQogewogICAgIHdoaWxlIChtX2VudHJpZXMuc2l6ZSgpICYmICFtX2VudHJp
ZXMubGFzdCgpLmlzTWFya2VyKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QuaAppbmRleCBhOWM1NmU2NTRiYzkzNDhhMGVkMmRlZmQxNTI3ZDRmZTFiZmI5OGUwLi4zNmI5
ZDgzOTU0N2VjNWVkZjc0MjVmZDcxNWQyMjg0N2M4ZTg1NzUzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBFbGVtZW50OwogCiAvLyBUaGlz
IG1heSBlbmQgdXAgbWVyZ2VkIGludG8gSFRNTEVsZW1lbnRTdGFjay4KQEAgLTQwLDEyICs0MSw2
IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0KCk7CiAgICAgfkhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QoKTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFzaXplKCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmll
cy5zaXplKCk7IH0KLQotICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFy
VG9MYXN0TWFya2VyKCk7Ci0KICAgICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUs
IGJ1dCBIVE1MVHJlZUJ1aWxkZXIgaGFzIHRvIGNvb3JkaW5hdGUKICAgICAvLyBiZXR3ZWVuIHRo
ZSBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0IGFuZCBIVE1MRWxlbWVudFN0YWNrIGFuZCBuZWVk
cwogICAgIC8vIGFjY2VzcyB0byBFbnRyeTo6aXNNYXJrZXIoKSBhbmQgRW50cnk6OnJlcGxhY2VF
bGVtZW50KCkgdG8gZG8gc28uCkBAIC02MSwxMCArNTYsMjQgQEAgcHVibGljOgogICAgICAgICBF
bGVtZW50KiBlbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50Pik7CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5
JikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbnRyeSYpIGNvbnN0Owor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAgICB9
OwogCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzLnNpemUoKTsgfQorCisgICAgRWxl
bWVudCogY2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7
CisKKyAgICBFbnRyeSogZmluZChFbGVtZW50Kik7CisgICAgYm9vbCBjb250YWlucyhFbGVtZW50
Kik7CisgICAgdm9pZCBhcHBlbmQoRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnQq
KTsKKyAgICB2b2lkIGNsZWFyVG9MYXN0TWFya2VyKCk7CisKICAgICBjb25zdCBFbnRyeSYgb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzW2ldOyB9CiAgICAgRW50
cnkmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fZW50cmllc1tpXTsgfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDA4ZWUxN2M1YTMxMTdjNzEwNDBjNDUxYWQyMTY5Nzc2
YTliYTNiNWUuLmEwZjUzNDk5MzMxOGZiMTEzMTZkN2IxOWM4YjNmZmE5MTVmMGEyOTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC02NCw2ICs2NCwxMzIgQEAgYm9vbCBzaG91bGRVc2VM
ZWdhY3lUcmVlQnVpbGRlcihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuICFkb2N1bWVu
dC0+c2V0dGluZ3MoKSB8fCAhZG9jdW1lbnQtPnNldHRpbmdzKCktPmh0bWw1VHJlZUJ1aWxkZXJF
bmFibGVkKCk7CiB9CiAKK2Jvb2wgaXNOdW1iZXJlZEhlYWRlclRhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gaDFUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBoMlRhZworICAgICAgICB8fCB0YWdOYW1lID09IGgzVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gaDRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoNVRhZworICAgICAgICB8
fCB0YWdOYW1lID09IGg2VGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjc3BlY2lhbAorYm9v
bCBpc1NwZWNpYWxUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVy
biB0YWdOYW1lID09IGFkZHJlc3NUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBhcnRpY2xlVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gYXNpZGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBi
YXNlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSAiYmdzb3VuZCIKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBibG9ja3F1b3RlVGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gYm9keVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJyVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gYnV0dG9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
Y2VudGVyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29sVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gY29sZ3JvdXBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAiY29tbWFuZCIKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBkZFRhZworICAgICAgICB8fCB0YWdOYW1lID09ICJkZXRhaWxzIgor
ICAgICAgICB8fCB0YWdOYW1lID09IGRpclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGRpdlRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGRsVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZHRU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBlbWJlZFRhZworICAgICAgICB8fCB0YWdOYW1lID09
IGZpZWxkc2V0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImZpZ3VyZSIKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBmb290ZXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmb3JtVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gZnJhbWVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmcmFtZXNl
dFRhZworICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRhZ05hbWUpCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gaGVhZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGhlYWRlclRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IGhncm91cFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGhyVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gaWZyYW1lVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
aW1nVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaW5wdXRUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBpc2luZGV4VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBsaW5rVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlzdGluZ1RhZworICAg
ICAgICB8fCB0YWdOYW1lID09IG1lbnVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBtZXRhVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gbmF2VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9l
bWJlZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vZnJhbWVzVGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gbm9zY3JpcHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBvbFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IHBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwYXJhbVRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IHBsYWludGV4dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHBy
ZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHNjcmlwdFRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IHNlY3Rpb25UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzZWxlY3RUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBzdHlsZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRib2R5VGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gdGV4dGFyZWFUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0
Zm9vdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRoZWFkVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gdGl0bGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0clRhZworICAgICAgICB8fCB0
YWdOYW1lID09IHVsVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gd2JyVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0geG1wVGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjc2NvcGluZworLy8g
U2FtZSBhcyBpc1Njb3BpbmdUYWcgaW4gTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAorLy8gYW5k
IGlzU2NvcGVNYXJrZXIgaW4gSFRNTEVsZW1lbnRTdGFjay5jcHAKK2Jvb2wgaXNTY29waW5nVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBh
cHBsZXRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBidXR0b25UYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBjYXB0aW9uVGFnCisjaWYgRU5BQkxFKFNWR19GT1JFSUdOX09CSkVDVCkKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZworI2VuZGlmCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gaHRtbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IG1hcnF1ZWVU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBvYmplY3RUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSB0YWJsZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRkVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gdGhUYWc7Cit9CisKK2Jvb2wgaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBiVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gYmlnVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29kZVRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IGVtVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9udFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGlUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub2Jy
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IHNt
YWxsVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc3RyaWtlVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gc3Ryb25nVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdHRUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSB1VGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2Vi
LWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZm9ybWF0dGluZworYm9v
bCBpc0Zvcm1hdHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJl
dHVybiB0YWdOYW1lID09IGFUYWcgfHwgaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKHRhZ05hbWUp
OworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcGhyYXNpbmcKK2Jvb2wgaXNQaHJhc2luZ1RhZyhj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuICFpc1NwZWNpYWxUYWco
dGFnTmFtZSkgJiYgIWlzU2NvcGluZ1RhZyh0YWdOYW1lKSAmJiAhaXNGb3JtYXR0aW5nVGFnKHRh
Z05hbWUpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQs
IGJvb2wgcmVwb3J0RXJyb3JzKQpAQCAtNDA4LDkgKzUzNCw4IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IGluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaDFUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgyVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBoM1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDRUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IGg1VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNlRhZykgeworICAgICAgICBp
ZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwcm9j
ZXNzRmFrZVBFbmRUYWdJZlBJblNjb3BlKCk7Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgICAgICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTQ1OSw3ICs1ODQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRG
b3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBiaWdU
YWcgfHwgdG9rZW4ubmFtZSgpID09IGNvZGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGVtVGFnIHx8
IHRva2VuLm5hbWUoKSA9PSBmb250VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gc3RyaWtlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IHR0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSB1VGFnKSB7CisgICAgICAgIGlmIChpc05v
bkFuY2hvckZvcm1hdHRpbmdUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcmVjb25z
dHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgICAgIGluc2VydEZv
cm1hdHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTYyMCw2ICs3
NDUsMTUzIEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBGSVhN
RTogVGhpcyBwcm9iYWJseSBiZWxvbmdzIG9uIEhUTUxFbGVtZW50U3RhY2suCitIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKiBIVE1MVHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JG
b3JtYXR0aW5nRWxlbWVudChFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCkKK3sKKyAgICBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrID0gMDsKKyAgICBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3BS
ZWNvcmQoKTsKKyAgICBmb3IgKDsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgewor
ICAgICAgICBpZiAocmVjb3JkLT5lbGVtZW50KCkgPT0gZm9ybWF0dGluZ0VsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lID0g
cmVjb3JkLT5lbGVtZW50KCktPmxvY2FsTmFtZSgpOworICAgICAgICAvLyAhcGhyYXNpbmcgJiYg
IWZvcm1hdHRpbmcgPT0gc3BlY2lhbCB8fCBzY29waW5nCisgICAgICAgIGlmIChpc1Njb3BpbmdU
YWcodGFnTmFtZSkgfHwgaXNTcGVjaWFsVGFnKHRhZ05hbWUpKQorICAgICAgICAgICAgZnVydGhl
c3RCbG9jayA9IHJlY29yZDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpmaW5kRm9zdGVyUGFyZW50Rm9y
KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgRWxlbWVudCogZm9zdGVyUGFyZW50RWxlbWVudCA9
IDA7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdFRhYmxlRWxlbWVu
dFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxOYW1lKCkpOwor
ICAgIGlmIChsYXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CisgICAgICAgIEVsZW1lbnQqIGxhc3RU
YWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5lbGVtZW50KCk7CisgICAgICAg
IGlmIChsYXN0VGFibGVFbGVtZW50LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgZm9zdGVyUGFy
ZW50RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1lbnQ7CisgICAgICAgICAgICAvLyBGSVhNRTogV2ls
bCB0aGlzIHNlbmQgbXV0YXRpb24gZXZlbnRzPworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgICAgICBmb3N0ZXJQYXJlbnRFbGVtZW50LT5pbnNlcnRCZWZvcmUoZWxl
bWVudCwgbGFzdFRhYmxlRWxlbWVudCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9zdGVyUGFy
ZW50RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOwor
ICAgIH0gZWxzZSAvLyBmcmFnbWVudCBjYXNlCisgICAgICAgIGZvc3RlclBhcmVudEVsZW1lbnQg
PSBtX29wZW5FbGVtZW50cy5ib3R0b20oKTsgLy8gPGh0bWw+IGVsZW1lbnQKKyAgICAKKyAgICBm
b3N0ZXJQYXJlbnRFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChlbGVtZW50KTsKK30KKworLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGhhdmUgYSB3aGl0dHkgbmFtZS4KKy8vIEZJWE1FOiBUaGlzIG11c3Qg
YmUgaW1wbGVtZW50ZWQgaW4gbWFueSBvdGhlciBwbGFjZXMgaW4gV2ViQ29yZS4KK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpyZXBhcmVudENoaWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVu
dCogbmV3UGFyZW50KQoreworICAgIE5vZGUqIGNoaWxkID0gb2xkUGFyZW50LT5maXJzdENoaWxk
KCk7CisgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOworICAgICAgICBuZXdQYXJlbnQtPnBhcnNlckFkZENoaWxkKGNoaWxk
KTsKKyAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CisgICAgfQorfQorCisvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6
YXRpb24uaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5Cit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2Fs
bFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgLy8gMS4KKyAgICAgICAgRWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQg
PSBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFt
ZSh0b2tlbi5uYW1lKCkpOworICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50KSB7CisgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
IC8vIENoZWNrIHRoZSBzdGFjayBvZiBvcGVuIGVsZW1lbnRzIGZvciBhIG1vcmUgc3BlY2lmaWMg
cGFyc2UgZXJyb3IuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFtX29wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0dGluZ0VsZW1lbnQgIT0gY3VycmVudEVsZW1lbnQo
KSkKKyAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAvLyAyLgorICAgICAg
ICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrID0gZnVydGhl
c3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAg
Ly8gMy4KKyAgICAgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7CisgICAgICAgICAgICB3aGlsZSAo
Y3VycmVudEVsZW1lbnQoKSAhPSBmb3JtYXR0aW5nRWxlbWVudCkKKyAgICAgICAgICAgICAgICBt
X29wZW5FbGVtZW50cy5wb3AoKTsKKyAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOwor
ICAgICAgICAgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdF
bGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyA0Lgor
ICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmb3JtYXR0aW5nRWxlbWVu
dFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLmZpbmQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAg
ICBBU1NFUlQoZnVydGhlc3RCbG9jay0+aXNBYm92ZShmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkp
OworICAgICAgICBFbGVtZW50KiBjb21tb25BbmNlc3RvciA9IGZvcm1hdHRpbmdFbGVtZW50UmVj
b3JkLT5uZXh0KCktPmVsZW1lbnQoKTsKKyAgICAgICAgLy8gNS4KKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gYm9va21hcms/CisgICAgICAgIC8vIDYuCisgICAgICAgIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5vZGUgPSBmdXJ0aGVzdEJsb2NrOworICAgICAgICBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBuZXh0Tm9kZSA9IG5vZGUtPm5leHQoKTsKKyAg
ICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdE5vZGUgPSBmdXJ0aGVz
dEJsb2NrOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgLy8gNi4xCisgICAgICAg
ICAgICBub2RlID0gbmV4dE5vZGU7CisgICAgICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAg
ICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHQoKTsgLy8gU2F2ZSBub2RlLT5uZXh0KCkgZm9yIHRo
ZSBuZXh0IGl0ZXJhdGlvbiBpbiBjYXNlIG5vZGUgaXMgZGVsZXRlZCBpbiA2LjIuCisgICAgICAg
ICAgICAvLyA2LjIKKyAgICAgICAgICAgIGlmICghbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMu
Y29udGFpbnMobm9kZS0+ZWxlbWVudCgpKSkgeworICAgICAgICAgICAgICAgIG1fb3BlbkVsZW1l
bnRzLnJlbW92ZShub2RlLT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIG5vZGUgPSAwOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Ni4zCisgICAgICAgICAgICBpZiAobm9kZSA9PSBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIDYuNAorICAgICAgICAgICAgaWYg
KGxhc3ROb2RlID09IGZ1cnRoZXN0QmxvY2spIHsKKyAgICAgICAgICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOyAvLyBtb3ZlIGJvb2ttYXJrLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Ni41CisgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQgdG8gc2F2ZSB0aGUgb3Jp
Z2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGZh
a2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBub2RlLT5lbGVtZW50KCktPmxvY2FsTmFtZSgp
KTsKKyAgICAgICAgICAgIC8vIElzIGNyZWF0ZUVsZW1lbnQgY29ycmVjdD8gKGluc3RlYWQgb2Yg
aW5zZXJ0RWxlbWVudCkKKyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb2RlIGV2ZXIgbGVhdmUg
bmV3RWxlbWVudCB1bmF0dGFjaGVkPworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Vs
ZW1lbnQgPSBjcmVhdGVFbGVtZW50KGZha2VUb2tlbik7CisgICAgICAgICAgICBIVE1MRm9ybWF0
dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMuZmluZChub2RlLT5lbGVtZW50KCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBs
YWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VF
bGVtZW50KG5ld0VsZW1lbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIC8vIDYuNgorICAgICAg
ICAgICAgbm9kZS0+ZWxlbWVudCgpLT5wYXJzZXJBZGRDaGlsZChsYXN0Tm9kZS0+ZWxlbWVudCgp
KTsKKyAgICAgICAgICAgIC8vIDYuNworICAgICAgICAgICAgbGFzdE5vZGUgPSBub2RlOworICAg
ICAgICB9CisgICAgICAgIC8vIDcKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb21tb25B
bmNlc3RvclRhZyA9IGNvbW1vbkFuY2VzdG9yLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKGNv
bW1vbkFuY2VzdG9yVGFnID09IHRhYmxlVGFnCisgICAgICAgICAgICB8fCBjb21tb25BbmNlc3Rv
clRhZyA9PSB0Ym9keVRhZworICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdGZv
b3RUYWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFnID09IHRoZWFkVGFnCisgICAg
ICAgICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0clRhZykKKyAgICAgICAgICAgIGZpbmRG
b3N0ZXJQYXJlbnRGb3IobGFzdE5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvbW1vbkFuY2VzdG9yLT5wYXJzZXJBZGRDaGlsZChsYXN0Tm9kZS0+ZWxlbWVudCgp
KTsKKyAgICAgICAgLy8gOAorICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQgdG8gc2F2
ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICBBdG9taWNIVE1MVG9r
ZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGZvcm1hdHRpbmdFbGVtZW50LT5sb2Nh
bE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gY3JlYXRlRWxl
bWVudChmYWtlVG9rZW4pOworICAgICAgICAvLyA5CisgICAgICAgIHJlcGFyZW50Q2hpbGRyZW4o
ZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLCBuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgLy8g
MTAKKyAgICAgICAgZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLT5wYXJzZXJBZGRDaGlsZChuZXdF
bGVtZW50KTsKKyAgICAgICAgLy8gMTEKKyAgICAgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsg
Ly8gaW5zZXJ0IG5ldyBlbGVtZW50IGF0IGJvb2ttYXJrCisgICAgICAgIC8vIDEyCisgICAgICAg
IG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIG1fb3Bl
bkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOworICAgIH0K
K30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewpAQCAtNzM0LDcgKzEw
MDYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoMVRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgzVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUo
KSkpIHsKICAgICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5TY29wZSh0b2tlbi5uYW1l
KCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNzUwLDcgKzEwMjIsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gVGFrZSBhIGRlZXAgYnJlYXRoLgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBjb2Rl
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZm9udFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbm9iclRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykgeworICAgICAgICBpZiAoaXNG
b3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGNhbGxUaGVBZG9wdGlv
bkFnZW5jeSh0b2tlbik7CiAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBjb21wbGljYXRlZCBhbGdvcml0aG0gdGhhdCBnb2VzIGhl
cmUuCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRy
ZWVCdWlsZGVyLmggYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggZTgyMzAw
MTk5YWI3MDMyNDBjNTg5ZjVkYjdjMzEzYmZhMzE2NTA2Zi4uMWM2ZmVjY2EzMzA3MDE0ZGFmNGYw
MDg3MTBmZmJlMDY1NThhODcxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVp
bGRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtMTI1LDYgKzEy
NSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJblNjb3BlKCk7
CiAKKyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrRm9y
Rm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgZmluZEZvc3RlclBhcmVudEZv
cihFbGVtZW50Kik7CisgICAgdm9pZCByZXBhcmVudENoaWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVu
dCwgRWxlbWVudCogbmV3UGFyZW50KTsKKyAgICB2b2lkIGNhbGxUaGVBZG9wdGlvbkFnZW5jeShB
dG9taWNIVE1MVG9rZW4mKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KICAg
ICBQYXNzUmVmUHRyPENoaWxkVHlwZT4gYXR0YWNoKE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxD
aGlsZFR5cGU+IHBycENoaWxkKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60355</attachid>
            <date>2010-07-02 03:45:37 -0700</date>
            <delta_ts>2010-07-02 20:39:14 -0700</delta_ts>
            <desc>runs, changes behavior, not sure if its right yet</desc>
            <filename>bug-41453-20100702034536.patch</filename>
            <type>text/plain</type>
            <size>35135</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC1odG1sNS50
eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CmluZGV4
IDFiNGYxZWUyZmY1NzQ5M2VmYjliNWViNmI0MWJjMzhmZWUyYTdkYmIuLmM1YjRlOTRlMzA5N2U5
YzM3ZGU0MjdkNjMzZGUzNjI3NTAwMDYzNjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1
bGliL3J1bm5lci1leHBlY3RlZC1odG1sNS50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIv
cnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dApAQCAtMTMxLDcgKzEzMSw3IEBAIEdvdDoKIHwgICAg
ICAgICA8YT4KIHwgICAgICAgICAgIDxhPgogfCAgICAgICAgICAgICAiWSIKLXwgICAgICAgICAg
ICAgIloiCit8ICAgICAgICAgICAiWiIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4K
QEAgLTM5MSw3ICszOTEsNyBAQCBHb3Q6CiB8ICAgPGJvZHk+CiB8ICAgICA8Yj4KIHwgICAgICAg
PHA+Ci18ICAgICAgICAgIlRFU1QiCit8ICAgICAiVEVTVCIKIEV4cGVjdGVkOgogfCA8aHRtbD4K
IHwgICA8aGVhZD4KQEAgLTQzNyw3ICs0MzcsNyBAQCBHb3Q6CiB8ICAgICAgICAgPGZvbnQ+CiB8
ICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgImNydWVsIgotfCAgICAgICAgICAgICAid29y
bGQiCit8ICAgICAgICAgIndvcmxkIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpA
QCAtNTI5LDcgKzUyOSw3IEBAIEdvdDoKIHwgICAgICAgICAgICJCIgogfCAgICAgICAgICAgPGRp
dj4KIHwgICAgICAgICAgICAgIkMiCi18ICAgICAgICAgICAgICJEIgorfCAgICAgICAiRCIKIEV4
cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTU2NSw3ICs1NjUsNyBAQCBHb3Q6CiB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPgogfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxkaXY+CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
WCIKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJURVNUIgorfCAgICAgICAg
ICAgICAiVEVTVCIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTczMSw3ICs3
MzEsNyBAQCBHb3Q6CiB8ICAgICAgICAgICAgICIgZ2hpICIKIHwgICAgICAgICAgICAgPHA+CiB8
ICAgICAgICAgICAgICAgIiBqa2wgIgotfCAgICAgICAgICAgICAgICIgbW5vIgorfCAgICAgICAg
ICIgbW5vIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtNzYzLDcgKzc2Myw3
IEBAIEdvdDoKIHwgICAgICAgICAgICAgIiBnaGkgIgogfCAgICAgICAgICAgICA8cD4KIHwgICAg
ICAgICAgICAgICAiIGprbCAiCi18ICAgICAgICAgICAgICAgIiBtbm8gIgorfCAgICAgICAgICIg
bW5vICIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTc5Niw4ICs3OTYsOCBA
QCBHb3Q6CiB8ICAgICAgICAgICAgICIgZ2hpICIKIHwgICAgICAgICAgICAgPHA+CiB8ICAgICAg
ICAgICAgICAgIiBqa2wgIgotfCAgICAgICAgICAgICAgICIgbW5vICIKLXwgICAgICAgICAgICAg
ICAiIHBxciIKK3wgICAgICAgICAiIG1ubyAiCit8ICAgICAgICAgIiBwcXIiCiBFeHBlY3RlZDoK
IHwgPGh0bWw+CiB8ICAgPGhlYWQ+CkBAIC04MzEsOCArODMxLDggQEAgR290OgogfCAgICAgICAg
ICAgICAiIGdoaSAiCiB8ICAgICAgICAgICAgIDxwPgogfCAgICAgICAgICAgICAgICIgamtsICIK
LXwgICAgICAgICAgICAgICAiIG1ubyAiCi18ICAgICAgICAgICAgICAgIiBwcXIgIgorfCAgICAg
ICAgICIgbW5vICIKK3wgICAgICAgICAiIHBxciAiCiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8ICAg
PGhlYWQ+CkBAIC04NjYsOSArODY2LDkgQEAgR290OgogfCAgICAgICAgICAgICAiIGdoaSAiCiB8
ICAgICAgICAgICAgIDxwPgogfCAgICAgICAgICAgICAgICIgamtsICIKLXwgICAgICAgICAgICAg
ICAiIG1ubyAiCi18ICAgICAgICAgICAgICAgIiBwcXIgIgotfCAgICAgICAgICAgICAiIHN0dSIK
K3wgICAgICAgICAiIG1ubyAiCit8ICAgICAgICAgIiBwcXIgIgorfCAgICAgICAgICIgc3R1Igog
RXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTAxNCwxMCArMTAxNCw5IEBAIEdv
dDoKIHwgICAgIDxzdHJpa2U+CiB8ICAgICAgIDxzdHJpa2U+CiB8ICAgICAgICAgPGNvZGU+Ci18
ICAgICAgICAgICA8Y29kZT4KLXwgICAgICAgICAgICAgPGNvZGU+Ci18ICAgICAgICAgICAgICAg
PGNvZGU+Ci18ICAgICAgICAgICAgICAgICA8c3RyaWtlPgorfCAgICAgICA8Y29kZT4KK3wgICAg
ICAgICA8Y29kZT4KK3wgICAgICAgICAgIDxzdHJpa2U+CiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8
ICAgPGhlYWQ+CkBAIC0xMjY3LDcgKzEyNjYsNyBAQCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAg
IDxiPgogfCAgICAgICAgICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICAgICAgICAg
PGVtPgotfCAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+Cit8ICAgICAgICAgICAgICAgICAg
ICAgPGxpPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTkzMSw4ICsxOTMw
LDggQEAgR290OgogfCAgICAgPG5vYnI+CiB8ICAgICAgIDxub2JyPgogfCAgICAgICAgIDxub2Jy
PgorfCAgICAgICAgIDxub2JyPgogfCAgICAgICAgICAgPG5vYnI+Ci18ICAgICAgICAgICAgIDxu
b2JyPgogRXhwZWN0ZWQ6CiB8IDwhRE9DVFlQRSBodG1sPgogfCA8aHRtbD4KQEAgLTMxNjksNyAr
MzE2OCw3IEBAIEdvdDoKIHwgICAgICAgImEiCiB8ICAgICAgIDxkaXY+CiB8ICAgICAgIDxkaXY+
Ci18ICAgICAgICAgInkiCit8ICAgICAieSIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVh
ZD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggM2RmNjliNTNlN2Y5ZWU0MjY2OGQ5M2I0MDA1MGZjODAwMDJkODZjZS4uYWZiYjNjZmEyMWNj
ZDg2YzA2MWJhYTJmMmU4NGRkYWJjMWU0ODIwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNy0wMSAg
RXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTFRyZWVCdWlsZGVyIG5lZWRzIGFuIGFkb3B0aW9u
IGFnZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDE0NTMKKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLiAgT25jZSB0aGlzIHdvcmtzIGl0IGlz
IGNvdmVyZWQKKyAgICAgICAgYnkgbWFueSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEVs
ZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50SXRlcmF0b3I6OkVsZW1lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRv
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRT
dGFjazo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmZpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAqIGh0bWwvSFRNTEVs
ZW1lbnRTdGFjay5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5o
OgorICAgICAgICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAg
ICogaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wNy0wMiAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiM2Y2ZmNmNWQyYjk1
MDRjNDM2YzUyYmM3ZTRjZWZmY2ZjZDg2MzhkLi5jMjY2NjU0MTRkNmJjM2E5ODJjMDU1NjVjNjcx
ZTdiYjQ5YjdiYmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjMwMCw4ICsyMzAwLDYgQEAKIAkJODlDRDAyOTMxMUM4NUI4NzAwNzBCNzkxIC8qIEpT
QmxvYkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODlDRDAyOTExMUM4NUI4NzAwNzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuY3BwICovOyB9
OwogCQk4OUNEMDI5NDExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODlDRDAyOTIxMUM4NUI4NzAw
NzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuaCAqLzsgfTsKIAkJOEE4MUJGODUxMURDRkQ5MDAwREEy
Qjk4IC8qIFJlc291cmNlTG9hZFRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEE4MUJGODQxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9h
ZFRpbWluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCThBODQ0Q0ZFMTFEM0MxN0MwMDE0MDY1QyAvKiBOYXZpZ2F0aW9uVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0Q0ZCMTFEM0Mx
N0MwMDE0MDY1QyAvKiBOYXZpZ2F0aW9uVGltaW5nLmNwcCAqLzsgfTsKLQkJOEE4NDRDRkYxMUQz
QzE3QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0Q0ZDMTFEM0MxN0MwMDE0MDY1QyAvKiBOYXZp
Z2F0aW9uVGltaW5nLmggKi87IH07CiAJCThBODQ0RDA0MTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJm
b3JtYW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4QTg0NEQwMTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuY3BwICovOyB9OwogCQk4
QTg0NEQwNTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAv
KiBQZXJmb3JtYW5jZS5oICovOyB9OwogCQk4QUY0RTU1NTExREM1QTM2MDAwRUQzREUgLyogTmF2
aWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4QUY0RTU1MjExREM1QTM2MDAwRUQzREUgLyogTmF2aWdhdGlvbi5jcHAgKi87IH07CkBAIC03
OTc4LDkgKzc5NzYsNiBAQAogCQk4OUNEMDI5MTExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVp
bGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Jsb2JCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODlDRDAyOTIxMUM4NUI4NzAw
NzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNCbG9iQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTgxQkY4
NDExRENGRDkwMDBEQTJCOTggLyogUmVzb3VyY2VMb2FkVGltaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk4QTg0NENGQjExRDNDMTdDMDAxNDA2NUMgLyogTmF2aWdhdGlvblRpbWlu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0aW9uVGlt
aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEE4NDRDRkMxMUQzQzE3QzAw
MTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmF2aWdhdGlvblRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
QTg0NENGRDExRDNDMTdDMDAxNDA2NUMgLyogTmF2aWdhdGlvblRpbWluZy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gTmF2aWdhdGlvblRpbWluZy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCThBODQ0RDAxMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJm
b3JtYW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTg0NEQwMzExRDNDMThFMDAxNDA2NUMg
LyogUGVyZm9ybWFuY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudFN0YWNrLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcApp
bmRleCBjOWU3M2MyY2Y4YzY1Nzg3NmRiNWMyYzI1MTViYTU1MTIyNTI3YWRmLi5lZjc4MmVhMDY5
NGU3Nzk1OThjMWQ2MDgzOWZiMzE2ZWUwNmFlNmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2su
Y3BwCkBAIC0zOCwyMyArMzgsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1jbGFzcyBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBFbGVtZW50UmVjb3JkKFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQot
ICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1fbmV4dChuZXh0KQotICAg
IHsKLSAgICB9CitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3Jk
KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBu
ZXh0KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX25leHQobmV4dCkKK3sKK30K
IAotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7
IH0KLSAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgp
OyB9Ci0gICAgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJu
IG1fbmV4dC5yZWxlYXNlKCk7IH0KLSAgICB2b2lkIHNldE5leHQoUGFzc093blB0cjxFbGVtZW50
UmVjb3JkPiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6On5FbGVtZW50UmVjb3JkKCkKK3sKK30KIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8
RWxlbWVudD4gbV9lbGVtZW50OwotICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX25leHQ7Ci19
Owordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudChQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPworICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7Cit9
CisKK2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50
UmVjb3JkKiBvdGhlcikgY29uc3QKK3sKKyAgICBFbGVtZW50UmVjb3JkKiBiZWxvdyA9IG5leHQo
KTsKKyAgICB3aGlsZSAoYmVsb3cpIHsKKyAgICAgICAgaWYgKGJlbG93ID09IG90aGVyKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAogSFRN
TEVsZW1lbnRTdGFjazo6SFRNTEVsZW1lbnRTdGFjaygpCiAgICAgOiBtX2h0bWxFbGVtZW50KDAp
CkBAIC05MSw2ICs5OSw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWwoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKQogCiB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1M
SHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQogeworICAgIEFTU0VSVCgh
bV90b3ApOyAvLyA8aHRtbD4gc2hvdWxkIGFsd2F5cyBiZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFj
ay4KICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsK
ICAgICBBU1NFUlQoIW1faHRtbEVsZW1lbnQpOwogICAgIG1faHRtbEVsZW1lbnQgPSBlbGVtZW50
LmdldCgpOwpAQCAtMTIyLDExICsxMzEsNDIgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNo
KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKICAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOwog
fQogCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCwgRWxlbWVudFJlY29yZCogcmVjb3JkQmVsb3cpCit7CisgICAgQVNTRVJUKG1f
dG9wKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFn
KSk7CisgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykp
OworICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsK
KyAgICBBU1NFUlQobV9odG1sRWxlbWVudCk7CisgICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9w
KQorICAgICAgICBwdXNoKGVsZW1lbnQpOworCisgICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNv
cmRBYm92ZSA9IG1fdG9wLT5uZXh0KCk7IHJlY29yZEFib3ZlOyByZWNvcmRBYm92ZSA9IHJlY29y
ZEFib3ZlLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJlY29yZEFib3ZlLT5uZXh0KCkgIT0gcmVj
b3JkQmVsb3cpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZWNvcmRBYm92ZS0+
c2V0TmV4dChuZXcgRWxlbWVudFJlY29yZChlbGVtZW50LCByZWNvcmRBYm92ZS0+cmVsZWFzZU5l
eHQoKSkpOworICAgICAgICBlbGVtZW50LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOyAvLyBGSVhN
RTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTEVs
ZW1lbnRTdGFjazo6dG9wUmVjb3JkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90b3AuZ2V0KCk7
Cit9CisKIEVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdG9wLT5lbGVtZW50KCk7CiB9CiAKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJv
dHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGh0bWxFbGVtZW50KCk7Cit9CisKIHZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQgPT0gZWxlbWVudCk7CkBAIC0xMzUsNyArMTc1LDcg
QEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hlYWRFbGVtZW50ID0gMDsK
LSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICByZW1vdmVOb25Ub3BDb21t
b24oZWxlbWVudCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQq
IGVsZW1lbnQpCkBAIC0xNDUsNDUgKzE4NSw1OCBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJl
bW92ZShFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBwb3AoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICByZW1vdmVOb25U
b3BDb21tb24oZWxlbWVudCk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMo
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQq
IEhUTUxFbGVtZW50U3RhY2s6OmZpbmQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBm
b3IgKEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBvcy0+bmV4
dCgpKSB7CiAgICAgICAgIGlmIChwb3MtPmVsZW1lbnQoKSA9PSBlbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gcG9zOwogICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKSBjb25zdAoreworICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7
IHBvczsgcG9zID0gcG9zLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHBvcy0+ZWxlbWVudCgpLT5o
YXNMb2NhbE5hbWUodGFnTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpjb250YWlucyhFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGVsZW1lbnQpOwogfQogCiBuYW1l
c3BhY2UgewogCi1pbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpCitpbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGJ1dHRvblRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShj
YXB0aW9uVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKICAg
ICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKG1hcnF1ZWVUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKQogICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKHRoVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRvblRh
ZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShtYXJxdWVlVGFnKQotICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykKICNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05f
T0JKRUNUKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWdu
T2JqZWN0VGFnKQogI2VuZGlmCiAgICAgICAgIDsKIH0KIAotaW5saW5lIGJvb2wgaXNMaXN0SXRl
bVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgYm9vbCBpc0xpc3RJ
dGVtU2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gaXNTY29wZU1h
cmtlcihlbGVtZW50KQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKQogICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKTsKIH0KLWlubGluZSBib29sIGlzVGFi
bGVTY29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wgaXNUYWJs
ZVNjb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhh
c1RhZ05hbWUoaHRtbFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRh
Zyk7CkBAIC0xOTEsNyArMjQ0LDcgQEAgaW5saW5lIGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAKIH0KIAotdGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoY29u
c3QgRWxlbWVudCopPgordGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoRWxlbWVudCopPgogYm9vbCBp
blNjb3BlQ29tbW9uKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHRvcCwgY29uc3Qg
QXRvbWljU3RyaW5nJiB0YXJnZXRUYWcpCiB7CiAgICAgZm9yIChIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBwb3MgPSB0b3A7IHBvczsgcG9zID0gcG9zLT5uZXh0KCkpIHsKQEAgLTIz
MywxOSArMjg2LDE5IEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5UYWJsZVNjb3BlKGNvbnN0
IEF0b21pY1N0cmluZyYgdGFyZ2V0VGFnKSBjb25zdAogICAgIHJldHVybiBpblNjb3BlQ29tbW9u
PGlzVGFibGVTY29wZU1hcmtlcj4obV90b3AuZ2V0KCksIHRhcmdldFRhZyk7CiB9CiAKLUVsZW1l
bnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50
U3RhY2s6Omh0bWxFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9odG1sRWxlbWVudCk7
CiAgICAgcmV0dXJuIG1faHRtbEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3Rh
Y2s6OmhlYWRFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmhlYWRFbGVtZW50
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCk7CiAgICAgcmV0dXJuIG1faGVh
ZEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkK
K0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkgY29uc3QKIHsKICAgICBB
U1NFUlQobV9ib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fYm9keUVsZW1lbnQ7CkBAIC0yNTMs
NiArMzA2LDcgQEAgRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9keUVsZW1lbnQoKQogCiB2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24oUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50KQogeworICAgIEFTU0VSVChtX2h0bWxFbGVtZW50KTsKICAgICBtX3RvcC5zZXQobmV3IEVs
ZW1lbnRSZWNvcmQoZWxlbWVudCwgbV90b3AucmVsZWFzZSgpKSk7CiAgICAgdG9wKCktPmJlZ2lu
UGFyc2luZ0NoaWxkcmVuKCk7CiB9CkBAIC0yNjUsNyArMzE5LDcgQEAgdm9pZCBIVE1MRWxlbWVu
dFN0YWNrOjpwb3BDb21tb24oKQogICAgIG1fdG9wID0gbV90b3AtPnJlbGVhc2VOZXh0KCk7CiB9
CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uRmlyc3RDb21tb24oRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aHRtbFRhZykpOwogICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHlUYWcpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgg
Yi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDI1M2MxYWZkODgxMjI5ZDUz
NGM4YjFiYjQyMjk1OWJhZmZhNmY0YmMuLjcxZWIxNmY0MWIzOWFmOTg3NzAwMWU2NmU3MDdiM2M1
Mzk4NmJmZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaApAQCAtMjYsMjEgKzI2LDUyIEBACiAj
aWZuZGVmIEhUTUxFbGVtZW50U3RhY2tfaAogI2RlZmluZSBIVE1MRWxlbWVudFN0YWNrX2gKIAot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0b21p
Y1N0cmluZzsKIGNsYXNzIEVsZW1lbnQ7CiAKKy8vIE5PVEU6IFRoZSBIVE1MNSBzcGVjIHVzZXMg
YSBiYWNrd2FyZHMgKGdyb3dzIGRvd253YXJkKSBzdGFjay4gIFdlJ3JlIHVzaW5nCisvLyBtb3Jl
IHN0YW5kYXJkIChncm93cyB1cHdhcmRzKSBzdGFjayB0ZXJtaW5vbG9neSBoZXJlLgogY2xhc3Mg
SFRNTEVsZW1lbnRTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgSFRN
TEVsZW1lbnRTdGFjaygpOwogICAgIH5IVE1MRWxlbWVudFN0YWNrKCk7CiAKKyAgICBjbGFzcyBF
bGVtZW50UmVjb3JkIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IH5FbGVtZW50UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQorICAgIAorICAg
ICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9
CisgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CisKKyAg
ICAgICAgYm9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKKworICAgICAgICBFbGVt
ZW50UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgcHJp
dmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEhUTUxFbGVtZW50U3RhY2s7CisKKyAgICAgICAg
RWxlbWVudFJlY29yZChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNv
cmQ+KTsKKworICAgICAgICBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IHJlbGVhc2VOZXh0KCkg
eyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQorICAgICAgICB2b2lkIHNldE5leHQoUGFzc093
blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKworICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgICAgICBPd25QdHI8RWxlbWVudFJlY29yZD4g
bV9uZXh0OworICAgIH07CisgICAgCiAgICAgRWxlbWVudCogdG9wKCkgY29uc3Q7CisgICAgRWxl
bWVudFJlY29yZCogdG9wUmVjb3JkKCkgY29uc3Q7CisgICAgRWxlbWVudCogYm90dG9tKCkgY29u
c3Q7CisgICAgRWxlbWVudFJlY29yZCogZmluZChFbGVtZW50KikgY29uc3Q7CisgICAgRWxlbWVu
dFJlY29yZCogdG9wbW9zdChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0OworCisg
ICAgdm9pZCBpbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBFbGVtZW50UmVjb3JkKik7
CiAKICAgICB2b2lkIHB1c2goUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwdXNoSFRN
TEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwpAQCAtNjEsMTYgKzkyLDE0IEBAIHB1
YmxpYzoKICAgICBib29sIGluTGlzdEl0ZW1TY29wZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpIGNvbnN0OwogICAgIGJvb2wgaW5UYWJsZVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkgY29uc3Q7CiAKLSAgICBFbGVtZW50KiBodG1sRWxlbWVudCgpOwotICAgIEVsZW1lbnQq
IGhlYWRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCogYm9keUVsZW1lbnQoKTsKKyAgICBFbGVtZW50
KiBodG1sRWxlbWVudCgpIGNvbnN0OworICAgIEVsZW1lbnQqIGhlYWRFbGVtZW50KCkgY29uc3Q7
CisgICAgRWxlbWVudCogYm9keUVsZW1lbnQoKSBjb25zdDsKIAotICAgIC8vIFB1YmxpYyBzbyBm
cmVlIGZ1bmN0aW9ucyBjYW4gdXNlIGl0LCBidXQgZGVmaW5lZCBwcml2YXRlbHkuCi0gICAgY2xh
c3MgRWxlbWVudFJlY29yZDsKIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoQ29tbW9uKFBhc3NSZWZQ
dHI8RWxlbWVudD4pOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7Ci0gICAgdm9pZCByZW1vdmVOb25G
aXJzdENvbW1vbihFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVu
dCopOwogCiAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fdG9wOwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggZTcwZGU0MmY0ZDJlMTYxN2YyOGJj
ZDA4YzJjNDQ0MWRmMjg4MTYyNS4uYWRhNDNhMmU5MWQ5MGQ1ODAxZmVmNWFhMmQ3NDg0OTBlZDNk
YWE0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcApAQCAt
NjQsNiArNjQsMTYgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6cmVw
bGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW4KICAgICBtX2VsZW1lbnQgPSBl
bGVtZW50OwogfQogCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpvcGVy
YXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgp
ID09IG90aGVyLmVsZW1lbnQoKTsKK30KKworYm9vbCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeTo6b3BlcmF0b3IhPShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGVsZW1lbnQoKSAhPSBvdGhlci5lbGVtZW50KCk7Cit9CisKIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QoKQogewogfQpAQCAtNzIsMTEgKzgy
LDQ2IEBAIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6On5IVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0KCkKIHsKIH0KIAorRWxlbWVudCogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xvc2Vz
dEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXROYW1lKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbV9lbnRyaWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1ttX2VudHJpZXMuc2l6ZSgp
IC0gaV07CisgICAgICAgIGlmIChlbnRyeS5pc01hcmtlcigpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGlmIChlbnRyeS5lbGVtZW50KCktPmhhc0xvY2FsTmFtZSh0YXJnZXROYW1l
KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5lbGVtZW50KCk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNvbnRhaW5zKEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuICEhZmluZChlbGVtZW50KTsKK30KKworSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkqIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmZp
bmQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9l
bnRyaWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICghbV9lbnRyaWVzW2ldLmlzTWFya2Vy
KCkgJiYgbV9lbnRyaWVzW2ldLmVsZW1lbnQoKSA9PSBlbGVtZW50KSB7CisgICAgICAgICAgICAv
LyBUaGlzIGlzIHNvbWV3aGF0IG9mIGEgaGFjaywgYW5kIGlzIHdoeSB0aGlzIG1ldGhvZCBjYW4n
dCBiZSBjb25zdC4KKyAgICAgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2ldOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OmFwcGVuZChFbGVtZW50KiBlbGVtZW50KQogewogICAgIG1fZW50cmllcy5hcHBlbmQoZWxl
bWVudCk7CiB9CiAKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgc2l6ZV90IGluZGV4ID0gbV9lbnRyaWVzLmZpbmQoZWxlbWVu
dCk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBtX2VudHJpZXMucmVtb3Zl
KGluZGV4KTsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbGVhclRvTGFz
dE1hcmtlcigpCiB7CiAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkgJiYgIW1fZW50cmllcy5s
YXN0KCkuaXNNYXJrZXIoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5o
CmluZGV4IGE5YzU2ZTY1NGJjOTM0OGEwZWQyZGVmZDE1MjdkNGZlMWJmYjk4ZTAuLjM2YjlkODM5
NTQ3ZWM1ZWRmNzQyNWZkNzE1ZDIyODQ3YzhlODU3NTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
YXR0aW5nRWxlbWVudExpc3QuaApAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIEVsZW1lbnQ7CiAKIC8vIFRoaXMgbWF5
IGVuZCB1cCBtZXJnZWQgaW50byBIVE1MRWxlbWVudFN0YWNrLgpAQCAtNDAsMTIgKzQxLDYgQEAg
cHVibGljOgogICAgIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QoKTsKICAgICB+SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdCgpOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IXNpemUoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzLnNp
emUoKTsgfQotCi0gICAgdm9pZCBhcHBlbmQoRWxlbWVudCopOwotICAgIHZvaWQgY2xlYXJUb0xh
c3RNYXJrZXIoKTsKLQogICAgIC8vIElkZWFsbHkgRW50cnkgd291bGQgYmUgcHJpdmF0ZSwgYnV0
IEhUTUxUcmVlQnVpbGRlciBoYXMgdG8gY29vcmRpbmF0ZQogICAgIC8vIGJldHdlZW4gdGhlIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QgYW5kIEhUTUxFbGVtZW50U3RhY2sgYW5kIG5lZWRzCiAg
ICAgLy8gYWNjZXNzIHRvIEVudHJ5Ojppc01hcmtlcigpIGFuZCBFbnRyeTo6cmVwbGFjZUVsZW1l
bnQoKSB0byBkbyBzby4KQEAgLTYxLDEwICs1NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdDsKICAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVm
UHRyPEVsZW1lbnQ+KTsKIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRW50cnkmKSBj
b25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEVudHJ5JikgY29uc3Q7CisKICAg
ICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIH07CiAK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXMuc2l6ZSgpOyB9CisKKyAgICBFbGVtZW50
KiBjbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKwor
ICAgIEVudHJ5KiBmaW5kKEVsZW1lbnQqKTsKKyAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQqKTsK
KyAgICB2b2lkIGFwcGVuZChFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmUoRWxlbWVudCopOwor
ICAgIHZvaWQgY2xlYXJUb0xhc3RNYXJrZXIoKTsKKwogICAgIGNvbnN0IEVudHJ5JiBvcGVyYXRv
cltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXNbaV07IH0KICAgICBFbnRyeSYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9lbnRyaWVzW2ldOyB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxU
cmVlQnVpbGRlci5jcHAKaW5kZXggMDhlZTE3YzVhMzExN2M3MTA0MGM0NTFhZDIxNjk3NzZhOWJh
M2I1ZS4uYTBmNTM0OTkzMzE4ZmIxMTMxNmQ3YjE5YzhiM2ZmYTkxNWYwYTI5NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hU
TUxUcmVlQnVpbGRlci5jcHAKQEAgLTY0LDYgKzY0LDEzMiBAQCBib29sIHNob3VsZFVzZUxlZ2Fj
eVRyZWVCdWlsZGVyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gIWRvY3VtZW50LT5z
ZXR0aW5ncygpIHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKS0+aHRtbDVUcmVlQnVpbGRlckVuYWJs
ZWQoKTsKIH0KIAorYm9vbCBpc051bWJlcmVkSGVhZGVyVGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBoMVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IGgyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDNUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBoNFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGg1VGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gaDZUYWc7Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNzcGVjaWFsCitib29sIGlz
U3BlY2lhbFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRh
Z05hbWUgPT0gYWRkcmVzc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGFydGljbGVUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSBhc2lkZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJhc2VU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBiYXNlZm9udFRhZworICAgICAgICB8fCB0YWdOYW1l
ID09ICJiZ3NvdW5kIgorICAgICAgICB8fCB0YWdOYW1lID09IGJsb2NrcXVvdGVUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBib2R5VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYnJUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSBidXR0b25UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjZW50
ZXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2xUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBjb2xncm91cFRhZworICAgICAgICB8fCB0YWdOYW1lID09ICJjb21tYW5kIgorICAgICAgICB8
fCB0YWdOYW1lID09IGRkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImRldGFpbHMiCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gZGlyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZGl2VGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gZGxUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkdFRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IGVtYmVkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZmll
bGRzZXRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAiZmlndXJlIgorICAgICAgICB8fCB0YWdO
YW1lID09IGZvb3RlclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZvcm1UYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBmcmFtZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZyYW1lc2V0VGFn
CisgICAgICAgIHx8IGlzTnVtYmVyZWRIZWFkZXJUYWcodGFnTmFtZSkKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBoZWFkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaGVhZGVyVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gaGdyb3VwVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaHJUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSBpZnJhbWVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBpbWdU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBpbnB1dFRhZworICAgICAgICB8fCB0YWdOYW1lID09
IGlzaW5kZXhUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBsaVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IGxpbmtUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBsaXN0aW5nVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gbWVudVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG1ldGFUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSBuYXZUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub2VtYmVk
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBub3NjcmlwdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IG9sVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gcFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHBhcmFtVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gcGxhaW50ZXh0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gcHJlVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gc2NyaXB0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
c2VjdGlvblRhZworICAgICAgICB8fCB0YWdOYW1lID09IHNlbGVjdFRhZworICAgICAgICB8fCB0
YWdOYW1lID09IHN0eWxlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGJvZHlUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSB0ZXh0YXJlYVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRmb290
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGhlYWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSB0aXRsZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRyVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gdWxUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB3YnJUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSB4bXBUYWc7Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNzY29waW5nCisvLyBTYW1l
IGFzIGlzU2NvcGluZ1RhZyBpbiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCisvLyBhbmQgaXNT
Y29wZU1hcmtlciBpbiBIVE1MRWxlbWVudFN0YWNrLmNwcAorYm9vbCBpc1Njb3BpbmdUYWcoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09IGFwcGxl
dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJ1dHRvblRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGNhcHRpb25UYWcKKyNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQorICAgICAgICB8
fCB0YWdOYW1lID09IFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnCisjZW5kaWYKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBodG1sVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbWFycXVlZVRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IG9iamVjdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRh
YmxlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSB0aFRhZzsKK30KKworYm9vbCBpc05vbkFuY2hvckZvcm1hdHRpbmdUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09IGJUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBiaWdUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBjb2RlVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gZW1UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmb250VGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gaVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vYnJUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSBzVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc21hbGxU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzdHJpa2VUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBzdHJvbmdUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0dFRhZworICAgICAgICB8fCB0YWdO
YW1lID09IHVUYWc7Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBw
cy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNmb3JtYXR0aW5nCitib29sIGlz
Rm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJu
IHRhZ05hbWUgPT0gYVRhZyB8fCBpc05vbkFuY2hvckZvcm1hdHRpbmdUYWcodGFnTmFtZSk7Cit9
CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwaHJhc2luZworYm9vbCBpc1BocmFzaW5nVGFnKGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gIWlzU3BlY2lhbFRhZyh0YWdO
YW1lKSAmJiAhaXNTY29waW5nVGFnKHRhZ05hbWUpICYmICFpc0Zvcm1hdHRpbmdUYWcodGFnTmFt
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWls
ZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCByZXBvcnRFcnJvcnMpCkBAIC00MDgsOSArNTM0LDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaW5z
ZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoMVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwg
dG9rZW4ubmFtZSgpID09IGgzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gaDVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGg2VGFnKSB7CisgICAgICAgIGlmIChp
c051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHByb2Nlc3NG
YWtlUEVuZFRhZ0lmUEluU2NvcGUoKTsKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtNDU5LDcgKzU4NCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIGluc2VydEZvcm1h
dHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGJpZ1RhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gY29kZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZW1UYWcgfHwgdG9r
ZW4ubmFtZSgpID09IGZvbnRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGlUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IHNUYWcgfHwgdG9rZW4ubmFtZSgpID09IHNtYWxsVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBzdHJpa2VUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cm9uZ1RhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gdHRUYWcgfHwgdG9rZW4ubmFtZSgpID09IHVUYWcpIHsKKyAgICAgICAgaWYgKGlzTm9uQW5j
aG9yRm9ybWF0dGluZ1RhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICByZWNvbnN0cnVj
dFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICAgICAgaW5zZXJ0Rm9ybWF0
dGluZ0VsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjIwLDYgKzc0NSwx
NTMgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBU
aGlzIHByb2JhYmx5IGJlbG9uZ3Mgb24gSFRNTEVsZW1lbnRTdGFjay4KK0hUTUxFbGVtZW50U3Rh
Y2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxUcmVlQnVpbGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1h
dHRpbmdFbGVtZW50KEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50KQoreworICAgIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSAwOworICAgIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcFJlY29y
ZCgpOworICAgIGZvciAoOyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7CisgICAg
ICAgIGlmIChyZWNvcmQtPmVsZW1lbnQoKSA9PSBmb3JtYXR0aW5nRWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUgPSByZWNv
cmQtPmVsZW1lbnQoKS0+bG9jYWxOYW1lKCk7CisgICAgICAgIC8vICFwaHJhc2luZyAmJiAhZm9y
bWF0dGluZyA9PSBzcGVjaWFsIHx8IHNjb3BpbmcKKyAgICAgICAgaWYgKGlzU2NvcGluZ1RhZyh0
YWdOYW1lKSB8fCBpc1NwZWNpYWxUYWcodGFnTmFtZSkpCisgICAgICAgICAgICBmdXJ0aGVzdEJs
b2NrID0gcmVjb3JkOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmRGb3N0ZXJQYXJlbnRGb3IoRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBFbGVtZW50KiBmb3N0ZXJQYXJlbnRFbGVtZW50ID0gMDsK
KyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBsYXN0VGFibGVFbGVtZW50UmVj
b3JkID0gbV9vcGVuRWxlbWVudHMudG9wbW9zdCh0YWJsZVRhZy5sb2NhbE5hbWUoKSk7CisgICAg
aWYgKGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQpIHsKKyAgICAgICAgRWxlbWVudCogbGFzdFRhYmxl
RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPmVsZW1lbnQoKTsKKyAgICAgICAgaWYg
KGxhc3RUYWJsZUVsZW1lbnQtPnBhcmVudCgpKSB7CisgICAgICAgICAgICBmb3N0ZXJQYXJlbnRF
bGVtZW50ID0gbGFzdFRhYmxlRWxlbWVudDsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaWxsIHRo
aXMgc2VuZCBtdXRhdGlvbiBldmVudHM/CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgICAgIGZvc3RlclBhcmVudEVsZW1lbnQtPmluc2VydEJlZm9yZShlbGVtZW50
LCBsYXN0VGFibGVFbGVtZW50LCBlYyk7CisgICAgICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmb3N0ZXJQYXJlbnRF
bGVtZW50ID0gbGFzdFRhYmxlRWxlbWVudFJlY29yZC0+bmV4dCgpLT5lbGVtZW50KCk7CisgICAg
fSBlbHNlIC8vIGZyYWdtZW50IGNhc2UKKyAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9IG1f
b3BlbkVsZW1lbnRzLmJvdHRvbSgpOyAvLyA8aHRtbD4gZWxlbWVudAorICAgIAorICAgIGZvc3Rl
clBhcmVudEVsZW1lbnQtPnBhcnNlckFkZENoaWxkKGVsZW1lbnQpOworfQorCisvLyBGSVhNRTog
VGhpcyBzaG91bGQgaGF2ZSBhIHdoaXR0eSBuYW1lLgorLy8gRklYTUU6IFRoaXMgbXVzdCBiZSBp
bXBsZW1lbnRlZCBpbiBtYW55IG90aGVyIHBsYWNlcyBpbiBXZWJDb3JlLgordm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnJlcGFyZW50Q2hpbGRyZW4oRWxlbWVudCogb2xkUGFyZW50LCBFbGVtZW50KiBu
ZXdQYXJlbnQpCit7CisgICAgTm9kZSogY2hpbGQgPSBvbGRQYXJlbnQtPmZpcnN0Q2hpbGQoKTsK
KyAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgTm9kZSogbmV4dENoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgIG5ld1BhcmVudC0+cGFyc2VyQWRkQ2hpbGQoY2hpbGQpOwor
ICAgICAgICBjaGlsZCA9IG5leHRDaGlsZDsKKyAgICB9Cit9CisKKy8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlv
bi5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhl
QWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAoMSkg
eworICAgICAgICAvLyAxLgorICAgICAgICBFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1f
YWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRv
a2VuLm5hbWUoKSk7CisgICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQpIHsKKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8g
Q2hlY2sgdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJz
ZSBlcnJvci4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1f
b3BlbkVsZW1lbnRzLmNvbnRhaW5zKGZvcm1hdHRpbmdFbGVtZW50KSkgeworICAgICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudCAhPSBjdXJyZW50RWxlbWVudCgpKQor
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIC8vIDIuCisgICAgICAgIEhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSBmdXJ0aGVzdEJs
b2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAvLyAz
LgorICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJy
ZW50RWxlbWVudCgpICE9IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAgICAgIG1fb3Bl
bkVsZW1lbnRzLnBvcCgpOworICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAg
ICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1l
bnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIDQuCisgICAg
ICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZvcm1hdHRpbmdFbGVtZW50UmVj
b3JkID0gbV9vcGVuRWxlbWVudHMuZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEFT
U0VSVChmdXJ0aGVzdEJsb2NrLT5pc0Fib3ZlKGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7Cisg
ICAgICAgIEVsZW1lbnQqIGNvbW1vbkFuY2VzdG9yID0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQt
Pm5leHQoKS0+ZWxlbWVudCgpOworICAgICAgICAvLyA1LgorICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOyAvLyBib29rbWFyaz8KKyAgICAgICAgLy8gNi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZCogbm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAg
ICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0Qmxv
Y2s7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyA2LjEKKyAgICAgICAgICAg
IG5vZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAg
IG5leHROb2RlID0gbm9kZS0+bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5l
eHQgaXRlcmF0aW9uIGluIGNhc2Ugbm9kZSBpcyBkZWxldGVkIGluIDYuMi4KKyAgICAgICAgICAg
IC8vIDYuMgorICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250
YWlucyhub2RlLT5lbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMu
cmVtb3ZlKG5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjMK
KyAgICAgICAgICAgIGlmIChub2RlID09IGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gNi40CisgICAgICAgICAgICBpZiAobGFz
dE5vZGUgPT0gZnVydGhlc3RCbG9jaykgeworICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7IC8vIG1vdmUgYm9va21hcmsuCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjUK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBzdXBwb3NlZCB0byBzYXZlIHRoZSBvcmlnaW5h
bCB0b2tlbiBpbiB0aGUgZW50cnkuCisgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRv
a2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIG5vZGUtPmVsZW1lbnQoKS0+bG9jYWxOYW1lKCkpOwor
ICAgICAgICAgICAgLy8gSXMgY3JlYXRlRWxlbWVudCBjb3JyZWN0PyAoaW5zdGVhZCBvZiBpbnNl
cnRFbGVtZW50KQorICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvZGUgZXZlciBsZWF2ZSBuZXdF
bGVtZW50IHVuYXR0YWNoZWQ/CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVu
dCA9IGNyZWF0ZUVsZW1lbnQoZmFrZVRva2VuKTsKKyAgICAgICAgICAgIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OkVudHJ5KiBub2RlRW50cnkgPSBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cy5maW5kKG5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VF
bGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZUVsZW1l
bnQobmV3RWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgLy8gNi42CisgICAgICAgICAg
ICBub2RlLT5lbGVtZW50KCktPnBhcnNlckFkZENoaWxkKGxhc3ROb2RlLT5lbGVtZW50KCkpOwor
ICAgICAgICAgICAgLy8gNi43CisgICAgICAgICAgICBsYXN0Tm9kZSA9IG5vZGU7CisgICAgICAg
IH0KKyAgICAgICAgLy8gNworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbW1vbkFuY2Vz
dG9yVGFnID0gY29tbW9uQW5jZXN0b3ItPmxvY2FsTmFtZSgpOworICAgICAgICBpZiAoY29tbW9u
QW5jZXN0b3JUYWcgPT0gdGFibGVUYWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFn
ID09IHRib2R5VGFnCisgICAgICAgICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0Zm9vdFRh
ZworICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdGhlYWRUYWcKKyAgICAgICAg
ICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFnID09IHRyVGFnKQorICAgICAgICAgICAgZmluZEZvc3Rl
clBhcmVudEZvcihsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tbW9uQW5jZXN0b3ItPnBhcnNlckFkZENoaWxkKGxhc3ROb2RlLT5lbGVtZW50KCkpOwor
ICAgICAgICAvLyA4CisgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBzdXBwb3NlZCB0byBzYXZlIHRo
ZSBvcmlnaW5hbCB0b2tlbiBpbiB0aGUgZW50cnkuCisgICAgICAgIEF0b21pY0hUTUxUb2tlbiBm
YWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgZm9ybWF0dGluZ0VsZW1lbnQtPmxvY2FsTmFt
ZSgpKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50
KGZha2VUb2tlbik7CisgICAgICAgIC8vIDkKKyAgICAgICAgcmVwYXJlbnRDaGlsZHJlbihmdXJ0
aGVzdEJsb2NrLT5lbGVtZW50KCksIG5ld0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAvLyAxMAor
ICAgICAgICBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCktPnBhcnNlckFkZENoaWxkKG5ld0VsZW1l
bnQpOworICAgICAgICAvLyAxMQorICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5y
ZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBp
bnNlcnQgbmV3IGVsZW1lbnQgYXQgYm9va21hcmsKKyAgICAgICAgLy8gMTIKKyAgICAgICAgbV9v
cGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbV9vcGVuRWxl
bWVudHMuaW5zZXJ0QWJvdmUobmV3RWxlbWVudCwgZnVydGhlc3RCbG9jayk7CisgICAgfQorfQor
CiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogewogICAgIHN3aXRjaCAoaW5zZXJ0aW9uTW9kZSgpKSB7CkBAIC03MzQsNyArMTAwNiw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGgxVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBoMlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDNUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IGg0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
aDZUYWcpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkg
ewogICAgICAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5pblNjb3BlKHRva2VuLm5hbWUoKSkp
IHsKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC03NTAsNyArMTAyMiw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOyAvLyBUYWtlIGEgZGVlcCBicmVhdGguCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBi
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBiaWdUYWcgfHwgdG9rZW4ubmFtZSgpID09IGNvZGVUYWcg
fHwgdG9rZW4ubmFtZSgpID09IGVtVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBmb250VGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBpVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBub2JyVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gc3RyaWtlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IHR0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSB1VGFnKSB7CisgICAgICAgIGlmIChpc0Zvcm1h
dHRpbmdUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAgY2FsbFRoZUFkb3B0aW9uQWdl
bmN5KHRva2VuKTsKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgICAgICAv
LyBGSVhNRTogVGhlcmUncyBhIGNvbXBsaWNhdGVkIGFsZ29yaXRobSB0aGF0IGdvZXMgaGVyZS4K
ICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1
aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBlODIzMDAxOTlh
YjcwMzI0MGM1ODlmNWRiN2MzMTNiZmEzMTY1MDZmLi4xYzZmZWNjYTMzMDcwMTRkYWY0ZjAwODcx
MGZmYmUwNjU1OGE4NzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVy
LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0xMjUsNiArMTI1LDEx
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4mKTsKICAgICB2b2lkIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluU2NvcGUoKTsKIAor
ICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2tGb3JGb3Jt
YXR0aW5nRWxlbWVudChFbGVtZW50Kik7CisgICAgdm9pZCBmaW5kRm9zdGVyUGFyZW50Rm9yKEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHJlcGFyZW50Q2hpbGRyZW4oRWxlbWVudCogb2xkUGFyZW50LCBF
bGVtZW50KiBuZXdQYXJlbnQpOworICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21p
Y0hUTUxUb2tlbiYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRUeXBlPgogICAgIFBh
c3NSZWZQdHI8Q2hpbGRUeXBlPiBhdHRhY2goTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxk
VHlwZT4gcHJwQ2hpbGQpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60434</attachid>
            <date>2010-07-02 20:39:44 -0700</date>
            <delta_ts>2010-07-03 08:04:14 -0700</delta_ts>
            <desc>another step forward</desc>
            <filename>bug-41453-20100702203928.patch</filename>
            <type>text/plain</type>
            <size>34815</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC1odG1sNS50
eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CmluZGV4
IDFiNGYxZWUyZmY1NzQ5M2VmYjliNWViNmI0MWJjMzhmZWUyYTdkYmIuLjA2MWI2OTYwMjRlNTc1
ODFlNWY4ZTg4ZjM1ZWMxYTRhMjgxMTlmYWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1
bGliL3J1bm5lci1leHBlY3RlZC1odG1sNS50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIv
cnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dApAQCAtMTMxLDcgKzEzMSw3IEBAIEdvdDoKIHwgICAg
ICAgICA8YT4KIHwgICAgICAgICAgIDxhPgogfCAgICAgICAgICAgICAiWSIKLXwgICAgICAgICAg
ICAgIloiCit8ICAgICAgICAgICAiWiIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4K
QEAgLTE1Miw3ICsxNTIsOCBAQCBHb3Q6CiB8ICAgPGJvZHk+CiB8ICAgICA8Yj4KIHwgICAgICAg
PGI+Ci18ICAgICAgICAgPGJ1dHRvbj4KK3wgICAgICAgPGJ1dHRvbj4KK3wgICAgICAgICA8Yj4K
IEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTM5MCw3ICszOTEsOCBAQCBHb3Q6
CiB8ICAgPGhlYWQ+CiB8ICAgPGJvZHk+CiB8ICAgICA8Yj4KLXwgICAgICAgPHA+Cit8ICAgICA8
cD4KK3wgICAgICAgPGI+CiB8ICAgICAgICAgIlRFU1QiCiBFeHBlY3RlZDoKIHwgPGh0bWw+CkBA
IC00MzcsNyArNDM5LDcgQEAgR290OgogfCAgICAgICAgIDxmb250PgogfCAgICAgICAgICAgPGI+
CiB8ICAgICAgICAgICAgICJjcnVlbCIKLXwgICAgICAgICAgICAgIndvcmxkIgorfCAgICAgICAg
ICJ3b3JsZCIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTUyNyw5ICs1Mjks
MTAgQEAgR290OgogfCAgICAgICA8Yj4KIHwgICAgICAgICA8Y2l0ZT4KIHwgICAgICAgICAgICJC
IgotfCAgICAgICAgICAgPGRpdj4KLXwgICAgICAgICAgICAgIkMiCi18ICAgICAgICAgICAgICJE
IgorfCAgICAgICA8ZGl2PgorfCAgICAgICAgIDxiPgorfCAgICAgICAgICAgIkMiCit8ICAgICAg
ICAgICAiRCIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTU2Myw5ICs1NjYs
MTMgQEAgR290OgogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXRlPgogfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxpPgotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+Ci18ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiWCIKLXwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJURVNUIgorfCAgICAgICAgICAgICA8aT4KK3wgICAgICAgICAgICAgICA8aT4K
K3wgICAgICAgICAgICAgICAgIDxpPgorfCAgICAgICAgICAgICAgICAgICA8ZGl2PgorfCAgICAg
ICAgICAgICAgICAgICAgIDxiPgorfCAgICAgICAgICAgICAgICAgICAgICAgIlgiCit8ICAgICAg
ICAgICAgICAgICAgICAgICAiVEVTVCIKIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4K
QEAgLTY5OSw3ICs3MDYsOSBAQCBHb3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4K
IHwgICAgICAgICAgICAgIiBnaGkgIgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4K
K3wgICAgICAgICAgIDxwPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGpr
bCAiCiBFeHBlY3RlZDoKIHwgPGh0bWw+CkBAIC03MjksNyArNzM4LDkgQEAgR290OgogfCAgICAg
ICAgIDxiPgogfCAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAgICAg
ICAgICAgPHA+Cit8ICAgICAgICAgPGk+Cit8ICAgICAgICAgICA8cD4KK3wgICAgICAgICAgICAg
PGI+CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAgICAgICAgICIgbW5vIgogRXhw
ZWN0ZWQ6CkBAIC03NjEsNyArNzcyLDEwIEBAIEdvdDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAg
ICAgIDxpPgogfCAgICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAgIDxwPgorfCAgICAg
ICAgIDxpPgorfCAgICAgICAgIDxwPgorfCAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAgIDxi
PgogfCAgICAgICAgICAgICAgICIgamtsICIKIHwgICAgICAgICAgICAgICAiIG1ubyAiCiBFeHBl
Y3RlZDoKQEAgLTc5NCw3ICs4MDgsMTAgQEAgR290OgogfCAgICAgICAgIDxiPgogfCAgICAgICAg
ICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAgICAgICAgICAgPHA+Cit8ICAgICAg
ICAgPGk+Cit8ICAgICAgICAgPHA+Cit8ICAgICAgICAgICA8aT4KK3wgICAgICAgICAgICAgPGI+
CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAgICAgICAgICIgbW5vICIKIHwgICAg
ICAgICAgICAgICAiIHBxciIKQEAgLTgyOSw3ICs4NDYsMTAgQEAgR290OgogfCAgICAgICAgIDxi
PgogfCAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAgICAgICAgICAg
PHA+Cit8ICAgICAgICAgPGk+Cit8ICAgICAgICAgPHA+Cit8ICAgICAgICAgICA8aT4KK3wgICAg
ICAgICAgICAgPGI+CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAgICAgICAgICIg
bW5vICIKIHwgICAgICAgICAgICAgICAiIHBxciAiCkBAIC04NjQsMTEgKzg4NCwxNCBAQCBHb3Q6
CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBnaGkgIgot
fCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wgICAgICAg
ICAgIDxpPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8ICAg
ICAgICAgICAgICAgIiBtbm8gIgogfCAgICAgICAgICAgICAgICIgcHFyICIKLXwgICAgICAgICAg
ICAgIiBzdHUiCit8ICAgICAgICAgIiBzdHUiCiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8ICAgPGhl
YWQ+CkBAIC0xMDE0LDEwICsxMDM3LDkgQEAgR290OgogfCAgICAgPHN0cmlrZT4KIHwgICAgICAg
PHN0cmlrZT4KIHwgICAgICAgICA8Y29kZT4KLXwgICAgICAgICAgIDxjb2RlPgotfCAgICAgICAg
ICAgICA8Y29kZT4KLXwgICAgICAgICAgICAgICA8Y29kZT4KLXwgICAgICAgICAgICAgICAgIDxz
dHJpa2U+Cit8ICAgICAgIDxjb2RlPgorfCAgICAgICAgIDxjb2RlPgorfCAgICAgICAgICAgPHN0
cmlrZT4KIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTExNjUsNyArMTE4Nyw4
IEBAIEdvdDoKIHwgICA8Ym9keT4KIHwgICAgIDxiPgogfCAgICAgICA8Yj4KLXwgICAgICAgICA8
YnV0dG9uPgorfCAgICAgICA8YnV0dG9uPgorfCAgICAgICAgIDxiPgogRXhwZWN0ZWQ6CiB8IDxo
dG1sPgogfCAgIDxoZWFkPgpAQCAtMTI2Nyw3ICsxMjkwLDcgQEAgR290OgogfCAgICAgICAgICAg
ICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAg
ICAgICAgIDxlbT4KLXwgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorfCAgICAgICAgICAg
ICAgICAgICAgIDxsaT4KIEV4cGVjdGVkOgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTE5MzEs
OCArMTk1NCw4IEBAIEdvdDoKIHwgICAgIDxub2JyPgogfCAgICAgICA8bm9icj4KIHwgICAgICAg
ICA8bm9icj4KK3wgICAgICAgICA8bm9icj4KIHwgICAgICAgICAgIDxub2JyPgotfCAgICAgICAg
ICAgICA8bm9icj4KIEV4cGVjdGVkOgogfCA8IURPQ1RZUEUgaHRtbD4KIHwgPGh0bWw+CkBAIC0z
MTY4LDcgKzMxOTEsOCBAQCBHb3Q6CiB8ICAgICA8Yj4KIHwgICAgICAgImEiCiB8ICAgICAgIDxk
aXY+Ci18ICAgICAgIDxkaXY+Cit8ICAgICA8ZGl2PgorfCAgICAgICA8Yj4KIHwgICAgICAgICAi
eSIKIEV4cGVjdGVkOgogfCA8aHRtbD4KQEAgLTMxODgsNyArMzIxMiw4IEBAIEdvdDoKIHwgICA8
aGVhZD4KIHwgICA8Ym9keT4KIHwgICAgIDxhPgotfCAgICAgICA8ZGl2PgorfCAgICAgPGRpdj4K
K3wgICAgICAgPGE+CiB8ICAgICAgICAgPHA+CiBFeHBlY3RlZDoKIHwgPGh0bWw+CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZjY5YjUz
ZTdmOWVlNDI2NjhkOTNiNDAwNTBmYzgwMDAyZDg2Y2UuLmFmYmIzY2ZhMjFjY2Q4NmMwNjFiYWEy
ZjJlODRkZGFiYzFlNDgyMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDctMDEgIEVyaWMgU2VpZGVs
ICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEhUTUxUcmVlQnVpbGRlciBuZWVkcyBhbiBhZG9wdGlvbiBhZ2VuY3kKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDUzCisKKyAg
ICAgICAgV29yayBpbiBwcm9ncmVzcy4gIE9uY2UgdGhpcyB3b3JrcyBpdCBpcyBjb3ZlcmVkCisg
ICAgICAgIGJ5IG1hbnkgdGVzdHMuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9y
OjpFbGVtZW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudEl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50SXRlcmF0b3I6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudEl0ZXJhdG9y
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmJlZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OmNvbnRhaW5zKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2su
aDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAqIGh0bWwvSFRN
TFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMDctMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKaW5kZXggNGM0ZjIwODhlZDM1ZGRhOGJlNjM2YTBlM2IyNGI2MDNlZDk1MzVlZi4uNjUzOWU1
YjMwMjIxYzhmNzJhZTJjNGYyMWYyZWFhYWEyMmI4NjMyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAK
QEAgLTUzOSw2ICs1MzksNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBibwogCiB2b2lkIENvbnRh
aW5lck5vZGU6OmFkZENoaWxkQ29tbW9uKE5vZGUqIG5ld0NoaWxkKQogeworICAgIEFTU0VSVCgh
bmV3Q2hpbGQtPnBhcmVudCgpKTsgLy8gVXNlIGFwcGVuZENoaWxkIGlmIHlvdSBuZWVkIHRvIGhh
bmRsZSByZXBhcmVudGluZy4KICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgTm9kZSog
bGFzdCA9IG1fbGFzdENoaWxkOwogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgdGFr
ZSBhIFBhc3NSZWZQdHIuCkBAIC01NTUsNyArNTU2LDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjpw
YXJzZXJBZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogewogICAgIEFTU0VSVChu
ZXdDaGlsZCk7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZHVyaW5nIHBhcnNp
bmcuCi0gICAgLy8gSXQgZG9lcyBub3Qgc2VuZCBhbnkgRE9NIG11dGF0aW9uIGV2ZW50cy4KKyAg
ICAvLyBJdCBkb2VzIG5vdCBzZW5kIGFueSBET00gbXV0YXRpb24gZXZlbnRzIG9yIGhhbmRsZSBy
ZXBhcmVudGluZy4KIAogICAgIGFkZENoaWxkQ29tbW9uKG5ld0NoaWxkLmdldCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRleCBjOWU3M2MyY2Y4YzY1Nzg3NmRiNWMyYzI1MTVi
YTU1MTIyNTI3YWRmLi5mZTZlOTg0NWVjMmZkNTlkNDVjMmU2YzA1OTdkZTk5ZGQ2YjdhOTU1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3BwCkBAIC0zOCwyMyArMzgsMzIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1jbGFzcyBIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoK
LSAgICBFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc093blB0
cjxFbGVtZW50UmVjb3JkPiBuZXh0KQotICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAg
ICAgICAsIG1fbmV4dChuZXh0KQotICAgIHsKLSAgICB9CitIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkOjpFbGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFz
c093blB0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisg
ICAgLCBtX25leHQobmV4dCkKK3sKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKK30KIAotICAgIEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KLSAgICBF
bGVtZW50UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0gICAg
UGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5y
ZWxlYXNlKCk7IH0KLSAgICB2b2lkIHNldE5leHQoUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiBu
ZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6
On5FbGVtZW50UmVjb3JkKCkKK3sKK30KKwordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkOjpyZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjYWxsIGZpbmlz
aFBhcnNpbmdDaGlsZHJlbj8KKyAgICBtX2VsZW1lbnQgPSBlbGVtZW50OworfQogCi1wcml2YXRl
OgotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgT3duUHRyPEVsZW1lbnRSZWNv
cmQ+IG1fbmV4dDsKLX07Citib29sIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Omlz
QWJvdmUoRWxlbWVudFJlY29yZCogb3RoZXIpIGNvbnN0Cit7CisgICAgZm9yIChFbGVtZW50UmVj
b3JkKiBiZWxvdyA9IG5leHQoKTsgYmVsb3c7IGJlbG93ID0gYmVsb3ctPm5leHQoKSkgeworICAg
ICAgICBpZiAoYmVsb3cgPT0gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQogCiBIVE1MRWxlbWVudFN0YWNrOjpIVE1MRWxlbWVudFN0
YWNrKCkKICAgICA6IG1faHRtbEVsZW1lbnQoMCkKQEAgLTkxLDYgKzEwMCw3IEBAIHZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogCiB2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVt
ZW50PiBlbGVtZW50KQogeworICAgIEFTU0VSVCghbV90b3ApOyAvLyA8aHRtbD4gc2hvdWxkIGFs
d2F5cyBiZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4KICAgICBBU1NFUlQoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKICAgICBBU1NFUlQoIW1faHRtbEVsZW1lbnQp
OwogICAgIG1faHRtbEVsZW1lbnQgPSBlbGVtZW50LmdldCgpOwpAQCAtMTIyLDExICsxMzIsNDYg
QEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVu
dCkKICAgICBwdXNoQ29tbW9uKGVsZW1lbnQpOwogfQogCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6
Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgRWxlbWVudFJlY29yZCog
cmVjb3JkQmVsb3cpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIEFTU0VSVChyZWNvcmRC
ZWxvdyk7CisgICAgQVNTRVJUKG1fdG9wKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CisgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aGVhZFRhZykpOworICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQobV9odG1sRWxlbWVudCk7CisgICAgaWYg
KHJlY29yZEJlbG93ID09IG1fdG9wKSB7CisgICAgICAgIHB1c2goZWxlbWVudCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZEFib3ZlID0g
bV90b3AuZ2V0KCk7IHJlY29yZEFib3ZlOyByZWNvcmRBYm92ZSA9IHJlY29yZEFib3ZlLT5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKHJlY29yZEFib3ZlLT5uZXh0KCkgIT0gcmVjb3JkQmVsb3cpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChuZXcg
RWxlbWVudFJlY29yZChlbGVtZW50LCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkpOworICAg
ICAgICByZWNvcmRBYm92ZS0+bmV4dCgpLT5lbGVtZW50KCktPmJlZ2luUGFyc2luZ0NoaWxkcmVu
KCk7IC8vIEZJWE1FOiBJcyB0aGlzIHJpZ2h0PworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkKiBIVE1MRWxlbWVudFN0YWNrOjp0b3BSZWNvcmQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RvcC5nZXQoKTsKK30KKwogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6dG9wKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV90b3AtPmVsZW1lbnQoKTsKIH0KIAorRWxlbWVudCogSFRNTEVsZW1l
bnRTdGFjazo6Ym90dG9tKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaHRtbEVsZW1lbnQoKTsKK30K
Kwogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCA9PSBlbGVtZW50KTsKQEAgLTEz
NSw3ICsxODAsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGVhZEVs
ZW1lbnQgPSAwOwotICAgIHJlbW92ZU5vbkZpcnN0Q29tbW9uKGVsZW1lbnQpOworICAgIHJlbW92
ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1v
dmUoRWxlbWVudCogZWxlbWVudCkKQEAgLTE0NSw0NSArMTkwLDU4IEBAIHZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHBvcCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIHJlbW92ZU5vbkZpcnN0Q29tbW9uKGVsZW1lbnQpOworICAg
IHJlbW92ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudFN0YWNr
Ojpjb250YWlucyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAorSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6ZmluZChFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7IHBvczsgcG9z
ID0gcG9zLT5uZXh0KCkpIHsKICAgICAgICAgaWYgKHBvcy0+ZWxlbWVudCgpID09IGVsZW1lbnQp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBwb3M7CiAgICAg
fQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworSFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6dG9wbW9zdChjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgZm9yIChFbGVtZW50UmVjb3JkKiBwb3MgPSBt
X3RvcC5nZXQoKTsgcG9zOyBwb3MgPSBwb3MtPm5leHQoKSkgeworICAgICAgICBpZiAocG9zLT5l
bGVtZW50KCktPmhhc0xvY2FsTmFtZSh0YWdOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBwb3M7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitib29sIEhUTUxFbGVtZW50U3RhY2s6OmNvbnRh
aW5zKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmQoZWxlbWVudCk7
CiB9CiAKIG5hbWVzcGFjZSB7CiAKLWlubGluZSBib29sIGlzU2NvcGVNYXJrZXIoY29uc3QgRWxl
bWVudCogZWxlbWVudCkKK2lubGluZSBib29sIGlzU2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpCisgICAgICAg
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKGNhcHRpb25UYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBw
bGV0VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpCisgICAgICAg
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShvYmplY3RUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodGFi
bGVUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpCiAgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoYnV0dG9uVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcnF1ZWVUYWcp
Ci0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKQogI2lmIEVOQUJMRShT
VkdfRk9SRUlHTl9PQkpFQ1QpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmZvcmVpZ25PYmplY3RUYWcpCiAjZW5kaWYKICAgICAgICAgOwogfQogCi1pbmxpbmUgYm9v
bCBpc0xpc3RJdGVtU2NvcGVNYXJrZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK2lubGluZSBi
b29sIGlzTGlzdEl0ZW1TY29wZU1hcmtlcihFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVy
biBpc1Njb3BlTWFya2VyKGVsZW1lbnQpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
b2xUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodWxUYWcpOwogfQotaW5saW5l
IGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUg
Ym9vbCBpc1RhYmxlU2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4g
ZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKHRhYmxlVGFnKTsKQEAgLTE5MSw3ICsyNDksNyBAQCBpbmxpbmUgYm9vbCBpc1RhYmxlU2Nv
cGVNYXJrZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIAogfQogCi10ZW1wbGF0ZSA8Ym9vbCBp
c01hcmtlcihjb25zdCBFbGVtZW50Kik+Cit0ZW1wbGF0ZSA8Ym9vbCBpc01hcmtlcihFbGVtZW50
Kik+CiBib29sIGluU2NvcGVDb21tb24oSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCog
dG9wLCBjb25zdCBBdG9taWNTdHJpbmcmIHRhcmdldFRhZykKIHsKICAgICBmb3IgKEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHBvcyA9IHRvcDsgcG9zOyBwb3MgPSBwb3MtPm5leHQo
KSkgewpAQCAtMjMzLDE5ICsyOTEsMTkgQEAgYm9vbCBIVE1MRWxlbWVudFN0YWNrOjppblRhYmxl
U2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXRUYWcpIGNvbnN0CiAgICAgcmV0dXJuIGlu
U2NvcGVDb21tb248aXNUYWJsZVNjb3BlTWFya2VyPihtX3RvcC5nZXQoKSwgdGFyZ2V0VGFnKTsK
IH0KIAotRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQoKQorRWxlbWVudCog
SFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2h0
bWxFbGVtZW50KTsKICAgICByZXR1cm4gbV9odG1sRWxlbWVudDsKIH0KIAotRWxlbWVudCogSFRN
TEVsZW1lbnRTdGFjazo6aGVhZEVsZW1lbnQoKQorRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6
aGVhZEVsZW1lbnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hlYWRFbGVtZW50KTsKICAgICBy
ZXR1cm4gbV9oZWFkRWxlbWVudDsKIH0KIAotRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9k
eUVsZW1lbnQoKQorRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9keUVsZW1lbnQoKSBjb25z
dAogewogICAgIEFTU0VSVChtX2JvZHlFbGVtZW50KTsKICAgICByZXR1cm4gbV9ib2R5RWxlbWVu
dDsKQEAgLTI1Myw2ICszMTEsNyBAQCBFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpib2R5RWxl
bWVudCgpCiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaENvbW1vbihQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQpCiB7CisgICAgQVNTRVJUKG1faHRtbEVsZW1lbnQpOwogICAgIG1fdG9w
LnNldChuZXcgRWxlbWVudFJlY29yZChlbGVtZW50LCBtX3RvcC5yZWxlYXNlKCkpKTsKICAgICB0
b3AoKS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKIH0KQEAgLTI2NSwxMyArMzI0LDEyIEBAIHZv
aWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKICAgICBtX3RvcCA9IG1fdG9wLT5yZWxl
YXNlTmV4dCgpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZU5vbkZpcnN0Q29t
bW9uKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZU5vblRv
cENvbW1vbihFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKICAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7Ci0gICAgRWxlbWVudFJlY29yZCogcG9zID0gbV90b3Au
Z2V0KCk7Ci0gICAgQVNTRVJUKHBvcy0+ZWxlbWVudCgpICE9IGVsZW1lbnQpOwotICAgIHdoaWxl
IChwb3MtPm5leHQoKSkgeworICAgIEFTU0VSVCh0b3AoKSAhPSBlbGVtZW50KTsKKyAgICBmb3Ig
KEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgp
KSB7CiAgICAgICAgIGlmIChwb3MtPm5leHQoKS0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCBPSyB0byBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpCiAgICAgICAgICAgICAvLyB3aGVuIHRoZSBjaGlsZHJlbiBhcmVuJ3QgYWN0dWFsbHkgZmlu
aXNoZWQ/CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oIGIvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCAyNTNjMWFmZDg4MTIyOWQ1MzRjOGIx
YmI0MjI5NTliYWZmYTZmNGJjLi43MWViMTZmNDFiMzlhZjk4NzcwMDFlNjZlNzA3YjNjNTM5ODZi
ZmRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKQEAgLTI2LDIxICsyNiw1MiBAQAogI2lmbmRl
ZiBIVE1MRWxlbWVudFN0YWNrX2gKICNkZWZpbmUgSFRNTEVsZW1lbnRTdGFja19oCiAKLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdG9taWNTdHJp
bmc7CiBjbGFzcyBFbGVtZW50OwogCisvLyBOT1RFOiBUaGUgSFRNTDUgc3BlYyB1c2VzIGEgYmFj
a3dhcmRzIChncm93cyBkb3dud2FyZCkgc3RhY2suICBXZSdyZSB1c2luZworLy8gbW9yZSBzdGFu
ZGFyZCAoZ3Jvd3MgdXB3YXJkcykgc3RhY2sgdGVybWlub2xvZ3kgaGVyZS4KIGNsYXNzIEhUTUxF
bGVtZW50U3RhY2sgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIEhUTUxFbGVt
ZW50U3RhY2soKTsKICAgICB+SFRNTEVsZW1lbnRTdGFjaygpOwogCisgICAgY2xhc3MgRWxlbWVu
dFJlY29yZCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB+RWxl
bWVudFJlY29yZCgpOyAvLyBQdWJsaWMgZm9yIH5QYXNzT3duUHRyKCkKKyAgICAKKyAgICAgICAg
RWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQorICAg
ICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOworCisgICAgICAg
IGJvb2wgaXNBYm92ZShFbGVtZW50UmVjb3JkKikgY29uc3Q7CisKKyAgICAgICAgRWxlbWVudFJl
Y29yZCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIHByaXZhdGU6
CisgICAgICAgIGZyaWVuZCBjbGFzcyBIVE1MRWxlbWVudFN0YWNrOworCisgICAgICAgIEVsZW1l
bnRSZWNvcmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPik7
CisKKyAgICAgICAgUGFzc093blB0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsgcmV0
dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KKyAgICAgICAgdm9pZCBzZXROZXh0KFBhc3NPd25QdHI8
RWxlbWVudFJlY29yZD4gbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CisKKyAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IG1fZWxlbWVudDsKKyAgICAgICAgT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG1fbmV4
dDsKKyAgICB9OworICAgIAogICAgIEVsZW1lbnQqIHRvcCgpIGNvbnN0OworICAgIEVsZW1lbnRS
ZWNvcmQqIHRvcFJlY29yZCgpIGNvbnN0OworICAgIEVsZW1lbnQqIGJvdHRvbSgpIGNvbnN0Owor
ICAgIEVsZW1lbnRSZWNvcmQqIGZpbmQoRWxlbWVudCopIGNvbnN0OworICAgIEVsZW1lbnRSZWNv
cmQqIHRvcG1vc3QoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdDsKKworICAgIHZv
aWQgaW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxFbGVtZW50PiwgRWxlbWVudFJlY29yZCopOwogCiAg
ICAgdm9pZCBwdXNoKFBhc3NSZWZQdHI8RWxlbWVudD4pOwogICAgIHZvaWQgcHVzaEhUTUxIdG1s
RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKQEAgLTYxLDE2ICs5MiwxNCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpbkxpc3RJdGVtU2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKSBj
b25zdDsKICAgICBib29sIGluVGFibGVTY29wZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
IGNvbnN0OwogCi0gICAgRWxlbWVudCogaHRtbEVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBoZWFk
RWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGJvZHlFbGVtZW50KCk7CisgICAgRWxlbWVudCogaHRt
bEVsZW1lbnQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBoZWFkRWxlbWVudCgpIGNvbnN0OworICAg
IEVsZW1lbnQqIGJvZHlFbGVtZW50KCkgY29uc3Q7CiAKLSAgICAvLyBQdWJsaWMgc28gZnJlZSBm
dW5jdGlvbnMgY2FuIHVzZSBpdCwgYnV0IGRlZmluZWQgcHJpdmF0ZWx5LgotICAgIGNsYXNzIEVs
ZW1lbnRSZWNvcmQ7CiBwcml2YXRlOgogICAgIHZvaWQgcHVzaENvbW1vbihQYXNzUmVmUHRyPEVs
ZW1lbnQ+KTsKICAgICB2b2lkIHBvcENvbW1vbigpOwotICAgIHZvaWQgcmVtb3ZlTm9uRmlyc3RD
b21tb24oRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQqKTsK
IAogICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBtX3RvcDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCmluZGV4IGU3MGRlNDJmNGQyZTE2MTdmMjhiY2QwOGMy
YzQ0NDFkZjI4ODE2MjUuLmFkYTQzYTJlOTFkOTBkNTgwMWZlZjVhYTJkNzQ4NDkwZWQzZGFhNDAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTY0LDYg
KzY0LDE2IEBAIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VF
bGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVuCiAgICAgbV9lbGVtZW50ID0gZWxlbWVu
dDsKIH0KIAorYm9vbCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6b3BlcmF0b3I9
PShjb25zdCBFbnRyeSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnQoKSA9PSBv
dGhlci5lbGVtZW50KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50
cnk6Om9wZXJhdG9yIT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBl
bGVtZW50KCkgIT0gb3RoZXIuZWxlbWVudCgpOworfQorCiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0OjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0KCkKIHsKIH0KQEAgLTcyLDExICs4Miw0NiBA
QCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojp+SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCgp
CiB7CiB9CiAKK0VsZW1lbnQqIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNsb3Nlc3RFbGVt
ZW50SW5TY29wZVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgdGFyZ2V0TmFtZSkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG1fZW50cmllcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBFbnRyeSYgZW50cnkgPSBtX2VudHJpZXNbbV9lbnRyaWVzLnNpemUoKSAtIGld
OworICAgICAgICBpZiAoZW50cnkuaXNNYXJrZXIoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBpZiAoZW50cnkuZWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodGFyZ2V0TmFtZSkpCisg
ICAgICAgICAgICByZXR1cm4gZW50cnkuZWxlbWVudCgpOworICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpjb250YWlucyhFbGVtZW50KiBl
bGVtZW50KQoreworICAgIHJldHVybiAhIWZpbmQoZWxlbWVudCk7Cit9CisKK0hUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpmaW5kKEVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmll
cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fZW50cmllc1tpXS5pc01hcmtlcigpICYm
IG1fZW50cmllc1tpXS5lbGVtZW50KCkgPT0gZWxlbWVudCkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyBzb21ld2hhdCBvZiBhIGhhY2ssIGFuZCBpcyB3aHkgdGhpcyBtZXRob2QgY2FuJ3QgYmUg
Y29uc3QuCisgICAgICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpXTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojph
cHBlbmQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVsZW1lbnQp
OwogfQogCit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBl
bGVtZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5kKGVsZW1lbnQpOwor
ICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9lbnRyaWVzLnJlbW92ZShpbmRl
eCk7Cit9CisKIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xlYXJUb0xhc3RNYXJr
ZXIoKQogewogICAgIHdoaWxlIChtX2VudHJpZXMuc2l6ZSgpICYmICFtX2VudHJpZXMubGFzdCgp
LmlzTWFya2VyKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRl
eCBhOWM1NmU2NTRiYzkzNDhhMGVkMmRlZmQxNTI3ZDRmZTFiZmI5OGUwLi4zNmI5ZDgzOTU0N2Vj
NWVkZjc0MjVmZDcxNWQyMjg0N2M4ZTg1NzUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBFbGVtZW50OwogCiAvLyBUaGlzIG1heSBlbmQg
dXAgbWVyZ2VkIGludG8gSFRNTEVsZW1lbnRTdGFjay4KQEAgLTQwLDEyICs0MSw2IEBAIHB1Ymxp
YzoKICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0KCk7CiAgICAgfkhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3QoKTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5zaXplKCk7
IH0KLQotICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFyVG9MYXN0TWFy
a2VyKCk7Ci0KICAgICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUsIGJ1dCBIVE1M
VHJlZUJ1aWxkZXIgaGFzIHRvIGNvb3JkaW5hdGUKICAgICAvLyBiZXR3ZWVuIHRoZSBIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0IGFuZCBIVE1MRWxlbWVudFN0YWNrIGFuZCBuZWVkcwogICAgIC8v
IGFjY2VzcyB0byBFbnRyeTo6aXNNYXJrZXIoKSBhbmQgRW50cnk6OnJlcGxhY2VFbGVtZW50KCkg
dG8gZG8gc28uCkBAIC02MSwxMCArNTYsMjQgQEAgcHVibGljOgogICAgICAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50Pik7CiAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JikgY29uc3Q7
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbnRyeSYpIGNvbnN0OworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAgICB9OwogCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzLnNpemUoKTsgfQorCisgICAgRWxlbWVudCogY2xv
c2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICBF
bnRyeSogZmluZChFbGVtZW50Kik7CisgICAgYm9vbCBjb250YWlucyhFbGVtZW50Kik7CisgICAg
dm9pZCBhcHBlbmQoRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnQqKTsKKyAgICB2
b2lkIGNsZWFyVG9MYXN0TWFya2VyKCk7CisKICAgICBjb25zdCBFbnRyeSYgb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzW2ldOyB9CiAgICAgRW50cnkmIG9wZXJh
dG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fZW50cmllc1tpXTsgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1
aWxkZXIuY3BwCmluZGV4IDA4ZWUxN2M1YTMxMTdjNzEwNDBjNDUxYWQyMTY5Nzc2YTliYTNiNWUu
LjkzNGM0MTc1OGIxOTlhODkzYzhlZDhiNmVkYzhhZjcwY2IxNWE0OGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCkBAIC02NCw2ICs2NCwxMzIgQEAgYm9vbCBzaG91bGRVc2VMZWdhY3lUcmVl
QnVpbGRlcihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuICFkb2N1bWVudC0+c2V0dGlu
Z3MoKSB8fCAhZG9jdW1lbnQtPnNldHRpbmdzKCktPmh0bWw1VHJlZUJ1aWxkZXJFbmFibGVkKCk7
CiB9CiAKK2Jvb2wgaXNOdW1iZXJlZEhlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gaDFUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBoMlRhZworICAgICAgICB8fCB0YWdOYW1lID09IGgzVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gaDRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoNVRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGg2VGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjc3BlY2lhbAorYm9vbCBpc1NwZWNp
YWxUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1l
ID09IGFkZHJlc3NUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBhcnRpY2xlVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gYXNpZGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBiYXNlVGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAi
Ymdzb3VuZCIKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBibG9ja3F1b3RlVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gYm9keVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJyVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gYnV0dG9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY2VudGVyVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29sVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29s
Z3JvdXBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAiY29tbWFuZCIKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBkZFRhZworICAgICAgICB8fCB0YWdOYW1lID09ICJkZXRhaWxzIgorICAgICAgICB8
fCB0YWdOYW1lID09IGRpclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGRpdlRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGRsVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZHRUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBlbWJlZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZpZWxkc2V0
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImZpZ3VyZSIKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBmb290ZXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmb3JtVGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gZnJhbWVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmcmFtZXNldFRhZworICAg
ICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRhZ05hbWUpCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gaGVhZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGhlYWRlclRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGhncm91cFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGhyVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gaWZyYW1lVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaW1nVGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gaW5wdXRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBpc2lu
ZGV4VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBsaW5rVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlzdGluZ1RhZworICAgICAgICB8fCB0
YWdOYW1lID09IG1lbnVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBtZXRhVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gbmF2VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9lbWJlZFRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IG5vZnJhbWVzVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
bm9zY3JpcHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBvbFRhZworICAgICAgICB8fCB0YWdO
YW1lID09IHBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwYXJhbVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IHBsYWludGV4dFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHByZVRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IHNjcmlwdFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHNlY3Rp
b25UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzZWxlY3RUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBzdHlsZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRib2R5VGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gdGV4dGFyZWFUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0Zm9vdFRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09IHRoZWFkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGl0
bGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0clRhZworICAgICAgICB8fCB0YWdOYW1lID09
IHVsVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gd2JyVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0geG1wVGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjc2NvcGluZworLy8gU2FtZSBhcyBp
c1Njb3BpbmdUYWcgaW4gTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAorLy8gYW5kIGlzU2NvcGVN
YXJrZXIgaW4gSFRNTEVsZW1lbnRTdGFjay5jcHAKK2Jvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBhcHBsZXRUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSBidXR0b25UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBj
YXB0aW9uVGFnCisjaWYgRU5BQkxFKFNWR19GT1JFSUdOX09CSkVDVCkKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZworI2VuZGlmCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gaHRtbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IG1hcnF1ZWVUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBvYmplY3RUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0YWJsZVRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHRkVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGhU
YWc7Cit9CisKK2Jvb2wgaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBiVGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gYmlnVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29kZVRhZworICAgICAgICB8
fCB0YWdOYW1lID09IGVtVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9udFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGlUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub2JyVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IHNtYWxsVGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gc3RyaWtlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc3Ry
b25nVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSB1VGFnOworfQorCisvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZm9ybWF0dGluZworYm9vbCBpc0Zvcm1h
dHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdO
YW1lID09IGFUYWcgfHwgaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKHRhZ05hbWUpOworfQorCisv
LyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9wYXJzaW5nLmh0bWwjcGhyYXNpbmcKK2Jvb2wgaXNQaHJhc2luZ1RhZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuICFpc1NwZWNpYWxUYWcodGFnTmFtZSkg
JiYgIWlzU2NvcGluZ1RhZyh0YWdOYW1lKSAmJiAhaXNGb3JtYXR0aW5nVGFnKHRhZ05hbWUpOwor
fQorCiB9IC8vIG5hbWVzcGFjZQogCiBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihI
VE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVw
b3J0RXJyb3JzKQpAQCAtNDA4LDkgKzUzNCw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIGluc2VydEVs
ZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaDFUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgyVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBoM1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDRUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGg1VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNlRhZykgeworICAgICAgICBpZiAoaXNOdW1i
ZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwcm9jZXNzRmFrZVBF
bmRUYWdJZlBJblNjb3BlKCk7Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgICAg
ICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTQ1OSw3ICs1ODQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRGb3JtYXR0aW5n
RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBiVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBiaWdUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IGNvZGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGVtVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBmb250VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzbWFsbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ry
aWtlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcgfHwgdG9rZW4ubmFtZSgpID09IHR0
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSB1VGFnKSB7CisgICAgICAgIGlmIChpc05vbkFuY2hvckZv
cm1hdHRpbmdUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcmVjb25zdHJ1Y3RUaGVB
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgICAgIGluc2VydEZvcm1hdHRpbmdF
bGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTYyMCw2ICs3NDUsMTYwIEBA
IGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBGSVhNRTogVGhpcyBw
cm9iYWJseSBiZWxvbmdzIG9uIEhUTUxFbGVtZW50U3RhY2suCitIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBIVE1MVHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5n
RWxlbWVudChFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCkKK3sKKyAgICBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrID0gMDsKKyAgICBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3BSZWNvcmQoKTsK
KyAgICBmb3IgKDsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgeworICAgICAgICBp
ZiAocmVjb3JkLT5lbGVtZW50KCkgPT0gZm9ybWF0dGluZ0VsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZnVydGhlc3RCbG9jazsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
ID0gcmVjb3JkLT5lbGVtZW50KCktPmxvY2FsTmFtZSgpOworICAgICAgICAvLyAhcGhyYXNpbmcg
JiYgIWZvcm1hdHRpbmcgPT0gc3BlY2lhbCB8fCBzY29waW5nCisgICAgICAgIGlmIChpc1Njb3Bp
bmdUYWcodGFnTmFtZSkgfHwgaXNTcGVjaWFsVGFnKHRhZ05hbWUpKQorICAgICAgICAgICAgZnVy
dGhlc3RCbG9jayA9IHJlY29yZDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpmaW5kRm9zdGVyUGFyZW50
Rm9yKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgRWxlbWVudCogZm9zdGVyUGFyZW50RWxlbWVu
dCA9IDA7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdFRhYmxlRWxl
bWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxOYW1lKCkp
OworICAgIGlmIChsYXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CisgICAgICAgIEVsZW1lbnQqIGxh
c3RUYWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5lbGVtZW50KCk7CisgICAg
ICAgIGlmIChsYXN0VGFibGVFbGVtZW50LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgZm9zdGVy
UGFyZW50RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1lbnQ7CisgICAgICAgICAgICAvLyBGSVhNRTog
V2lsbCB0aGlzIHNlbmQgbXV0YXRpb24gZXZlbnRzPworICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgICAgICAgICBmb3N0ZXJQYXJlbnRFbGVtZW50LT5pbnNlcnRCZWZvcmUo
ZWxlbWVudCwgbGFzdFRhYmxlRWxlbWVudCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9zdGVyUGFyZW50RWxl
bWVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOworICAgIH0g
ZWxzZSAvLyBmcmFnbWVudCBjYXNlCisgICAgICAgIGZvc3RlclBhcmVudEVsZW1lbnQgPSBtX29w
ZW5FbGVtZW50cy5ib3R0b20oKTsgLy8gPGh0bWw+IGVsZW1lbnQKKyAgICAKKyAgICBmb3N0ZXJQ
YXJlbnRFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChlbGVtZW50KTsKK30KKworLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGhhdmUgYSB3aGl0dHkgbmFtZS4KKy8vIEZJWE1FOiBUaGlzIG11c3QgYmUgaW1w
bGVtZW50ZWQgaW4gbWFueSBvdGhlciBwbGFjZXMgaW4gV2ViQ29yZS4KK3ZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpyZXBhcmVudENoaWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVudCogbmV3
UGFyZW50KQoreworICAgIE5vZGUqIGNoaWxkID0gb2xkUGFyZW50LT5maXJzdENoaWxkKCk7Cisg
ICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBuZXdQYXJlbnQt
PmFwcGVuZENoaWxkKGNoaWxkLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgICAgICBj
aGlsZCA9IG5leHRDaGlsZDsKKyAgICB9Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9z
cGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3Bh
cnNpbmctbWFpbi1pbmJvZHkKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25B
Z2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICAvLyAxLgorICAgICAgICBFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1fYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzLmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLm5hbWUo
KSk7CisgICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQpIHsKKyAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hlY2sgdGhl
IHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBlcnJvci4K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fb3BlbkVsZW1l
bnRzLmNvbnRhaW5zKGZvcm1hdHRpbmdFbGVtZW50KSkgeworICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CisgICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUo
Zm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudCAhPSBjdXJyZW50RWxlbWVudCgpKQorICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIC8vIDIuCisgICAgICAgIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSBmdXJ0aGVzdEJsb2NrRm9yRm9y
bWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAvLyAzLgorICAgICAg
ICBpZiAoIWZ1cnRoZXN0QmxvY2spIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVu
dCgpICE9IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRz
LnBvcCgpOworICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBt
X2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIDQuCisgICAgICAgIEhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkID0gbV9v
cGVuRWxlbWVudHMuZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChmdXJ0
aGVzdEJsb2NrLT5pc0Fib3ZlKGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7CisgICAgICAgIEVs
ZW1lbnQqIGNvbW1vbkFuY2VzdG9yID0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPm5leHQoKS0+
ZWxlbWVudCgpOworICAgICAgICAvLyA1LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBi
b29rbWFyaz8KKyAgICAgICAgLy8gNi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogbm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQqIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAgICBIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyA2LjEKKyAgICAgICAgICAgIG5vZGUgPSBu
ZXh0Tm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIG5leHROb2Rl
ID0gbm9kZS0+bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQgaXRlcmF0
aW9uIGluIGNhc2Ugbm9kZSBpcyBkZWxldGVkIGluIDYuMi4KKyAgICAgICAgICAgIC8vIDYuMgor
ICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250YWlucyhub2Rl
LT5lbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucmVtb3ZlKG5v
ZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjMKKyAgICAgICAg
ICAgIGlmIChub2RlID09IGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgLy8gNi40CisgICAgICAgICAgICBpZiAobGFzdE5vZGUgPT0g
ZnVydGhlc3RCbG9jaykKKyAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBtb3Zl
IGJvb2ttYXJrLgorICAgICAgICAgICAgLy8gNi41CisgICAgICAgICAgICAvLyBGSVhNRTogV2Un
cmUgc3VwcG9zZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAg
ICAgICAgICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBu
b2RlLT5lbGVtZW50KCktPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIC8vIElzIGNyZWF0ZUVs
ZW1lbnQgY29ycmVjdD8gKGluc3RlYWQgb2YgaW5zZXJ0RWxlbWVudCkKKyAgICAgICAgICAgIC8v
IERvZXMgdGhpcyBjb2RlIGV2ZXIgbGVhdmUgbmV3RWxlbWVudCB1bmF0dGFjaGVkPworICAgICAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGZha2VUb2tl
bik7CisgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVu
dHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZmluZChub2RlLT5lbGVtZW50KCkpOwor
ICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsK
KyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIC8vIDYuNgorICAgICAgICAgICAgLy8gVXNlIGFwcGVuZENoaWxkIGluc3Rl
YWQgb2YgcGFyc2VyQWRkQ2hpbGQgdG8gaGFuZGxlIHBvc3NpYmxlIHJlcGFyZW50aW5nLgorICAg
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIG5vZGUtPmVsZW1lbnQoKS0+
YXBwZW5kQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNTRVJU
KCFlYyk7CisgICAgICAgICAgICAvLyA2LjcKKyAgICAgICAgICAgIGxhc3ROb2RlID0gbm9kZTsK
KyAgICAgICAgfQorICAgICAgICAvLyA3CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29t
bW9uQW5jZXN0b3JUYWcgPSBjb21tb25BbmNlc3Rvci0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlm
IChjb21tb25BbmNlc3RvclRhZyA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgY29tbW9uQW5j
ZXN0b3JUYWcgPT0gdGJvZHlUYWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFnID09
IHRmb290VGFnCisgICAgICAgICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0aGVhZFRhZwor
ICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdHJUYWcpCisgICAgICAgICAgICBm
aW5kRm9zdGVyUGFyZW50Rm9yKGxhc3ROb2RlLT5lbGVtZW50KCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBjb21tb25BbmNlc3Rv
ci0+YXBwZW5kQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNT
RVJUKCFlYyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gOAorICAgICAgICAvLyBGSVhNRTogV2Un
cmUgc3VwcG9zZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAg
ICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGZvcm1h
dHRpbmdFbGVtZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdF
bGVtZW50ID0gY3JlYXRlRWxlbWVudChmYWtlVG9rZW4pOworICAgICAgICAvLyA5CisgICAgICAg
IHJlcGFyZW50Q2hpbGRyZW4oZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLCBuZXdFbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgLy8gMTAKKyAgICAgICAgZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLT5w
YXJzZXJBZGRDaGlsZChuZXdFbGVtZW50KTsKKyAgICAgICAgLy8gMTEKKyAgICAgICAgbV9hY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsgLy8gaW5zZXJ0IG5ldyBlbGVtZW50IGF0IGJvb2ttYXJrCisgICAg
ICAgIC8vIDEyCisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVu
dCk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRo
ZXN0QmxvY2spOworICAgIH0KK30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUo
KSkgewpAQCAtNzM0LDcgKzEwMTMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMu
cG9wKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBoMVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGgzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVU
YWcgfHwgdG9rZW4ubmFtZSgpID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVh
ZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMu
aW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzUwLDcgKzEwMjksOCBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gVGFrZSBhIGRlZXAgYnJlYXRoLgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBjb2RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gZm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gbm9iclRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21h
bGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ry
b25nVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykg
eworICAgICAgICBpZiAoaXNGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAg
ICAgIGNhbGxUaGVBZG9wdGlvbkFnZW5jeSh0b2tlbik7CiAgICAgICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBjb21wbGljYXRlZCBhbGdv
cml0aG0gdGhhdCBnb2VzIGhlcmUuCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmggYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWls
ZGVyLmgKaW5kZXggZTgyMzAwMTk5YWI3MDMyNDBjNTg5ZjVkYjdjMzEzYmZhMzE2NTA2Zi4uMWM2
ZmVjY2EzMzA3MDE0ZGFmNGYwMDg3MTBmZmJlMDY1NThhODcxNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxk
ZXIuaApAQCAtMTI1LDYgKzEyNSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgcHJvY2Vzc0JvZHlF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBF
bmRUYWdJZlBJblNjb3BlKCk7CiAKKyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQg
ZmluZEZvc3RlclBhcmVudEZvcihFbGVtZW50Kik7CisgICAgdm9pZCByZXBhcmVudENoaWxkcmVu
KEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVudCogbmV3UGFyZW50KTsKKyAgICB2b2lkIGNhbGxU
aGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mKTsKKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoaWxkVHlwZT4KICAgICBQYXNzUmVmUHRyPENoaWxkVHlwZT4gYXR0YWNoKE5vZGUqIHBh
cmVudCwgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IHBycENoaWxkKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60450</attachid>
            <date>2010-07-03 08:05:07 -0700</date>
            <delta_ts>2010-07-03 08:56:01 -0700</delta_ts>
            <desc>ready for review, intrested in your comments</desc>
            <filename>bug-41453-20100703080427.patch</filename>
            <type>text/plain</type>
            <size>42919</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNzM3MDAwYmZhN2U0MGE5MzE1NTFmOTA4OWI5MmJkNjNhN2NhZDk5Li40MmJmNWQ5
YjU4Yjc3ZTQyYTU1YmMxN2FjYTU5ZTU4MmM2NGZjNDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDctMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUxUcmVlQnVpbGRlciBuZWVk
cyBhbiBhZG9wdGlvbiBhZ2VuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDUzCisKKyAgICAgICAgQWRkZWQgbmV3IGFkb3B0aW9uMDEgc3VpdGUg
Zm9yIHRlc3RpbmcgYWRvcHRpb24gYWdlbmN5CisgICAgICAgIGJ1Z3MuICBSaWdodCBub3cgb25s
eSB0aGUgc2ltcGxlc3QgYWRvcHRpb24gdGVzdCBwYXNzZXMuCisgICAgICAgIEknbGwgYmUgYWRk
aW5nIG1vcmUgaW4gZnV0dXJlIGNvbW1pdHMuCisKKyAgICAgICAgKiBodG1sNWxpYi9yZXNvdXJj
ZXMvYWRvcHRpb24wMS5kYXQ6IEFkZGVkLgorICAgICAgICAqIGh0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC1odG1sNS50eHQ6CisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBodG1sNWxpYi9ydW5uZXIuaHRtbDoKKwogMjAxMC0wNy0wMyAgUm9iZXJ0IEhv
Z2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBVcGRhdGUgUXQgZXhwZWN0
ZWQgcmVzdWx0cyBhZnRlciByNjI0NDQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGli
L3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBiL0xheW91dFRlc3RzL2h0bWw1bGliL3Jlc291cmNl
cy9hZG9wdGlvbjAxLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzRmN2FmNzNkNWNjMGJiMTU5OGQ4MTY5YjZk
Mjg5MjBmNmUwOTlmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcmVz
b3VyY2VzL2Fkb3B0aW9uMDEuZGF0CkBAIC0wLDAgKzEsODQgQEAKKyNkYXRhCis8YT48cD48L2E+
PC9wPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICA8cD4KK3wgICAgICAgPGE+CisKKyNkYXRhCis8YT4xPHA+Mjwv
YT4zPC9wPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxi
b2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAg
ICAgICAgICIyIgorfCAgICAgICAiMyIKKworI2RhdGEKKzxhPjE8YnV0dG9uPjI8L2E+MzwvYnV0
dG9uPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgICA8YnV0dG9uPgorfCAgICAgICAgICIy
IgorfCAgICAgIjMiCisKKyNkYXRhCis8YT4xPGI+MjwvYT4zPC9iPgorI2Vycm9ycworI2RvY3Vt
ZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAg
ICIxIgorfCAgICAgICA8Yj4KK3wgICAgICAgICAiMiIKK3wgICAgIDxiPgorfCAgICAgICAiMyIK
KworI2RhdGEKKzxhPjE8ZGl2PjI8ZGl2PjM8L2E+NDwvZGl2PjU8L2Rpdj4KKyNlcnJvcnMKKyNk
b2N1bWVudAorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAg
ICAgICAiMSIKK3wgICAgIDxkaXY+Cit8ICAgICAgIDxhPgorfCAgICAgICAgICIyIgorfCAgICAg
ICA8ZGl2PgorfCAgICAgICAgIDxhPgorfCAgICAgICAgICAgIjMiCit8ICAgICAgICAgIjQiCit8
ICAgICAgICI1IgorCisjZGF0YQorPHRhYmxlPjxhPjE8cD4yPC9hPjM8L3A+CisjZXJyb3JzCisj
ZG9jdW1lbnQKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wg
ICAgICAgIjEiCit8ICAgICA8cD4KK3wgICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAg
ICIzIgorfCAgICAgPHRhYmxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVu
bmVyLWV4cGVjdGVkLWh0bWw1LnR4dCBiL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC1odG1sNS50eHQKaW5kZXggMGQ4Mjk0NThhN2M0NTZhYzg0Y2IyMTAyYjg5OGVmNjQzZWM2
NmI3YS4uM2U0MmJhODM1MmE1M2NhNTNlN2ZkOTliYWMyNDk0NzM4MmFjNWUyMCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dAorKysgYi9M
YXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CkBAIC0xMjksNyAr
MTI5LDcgQEAgR290OgogfCAgICAgICAgIDxhPgogfCAgICAgICAgICAgPGE+CiB8ICAgICAgICAg
ICAgICJZIgotfCAgICAgICAgICAgICAiWiIKK3wgICAgICAgICAgICJaIgogRXhwZWN0ZWQ6CiB8
IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTUwLDcgKzE1MCw4IEBAIEdvdDoKIHwgICA8Ym9keT4K
IHwgICAgIDxiPgogfCAgICAgICA8Yj4KLXwgICAgICAgICA8YnV0dG9uPgorfCAgICAgICA8YnV0
dG9uPgorfCAgICAgICAgIDxiPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAt
Mzg4LDcgKzM4OSw4IEBAIEdvdDoKIHwgICA8aGVhZD4KIHwgICA8Ym9keT4KIHwgICAgIDxiPgot
fCAgICAgICA8cD4KK3wgICAgIDxwPgorfCAgICAgICA8Yj4KIHwgICAgICAgICAiVEVTVCIKIEV4
cGVjdGVkOgogfCA8aHRtbD4KQEAgLTQzNSw3ICs0MzcsNyBAQCBHb3Q6CiB8ICAgICAgICAgPGZv
bnQ+CiB8ICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgImNydWVsIgotfCAgICAgICAgICAg
ICAid29ybGQiCit8ICAgICAgICAgIndvcmxkIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxo
ZWFkPgpAQCAtNTI1LDkgKzUyNywxMCBAQCBHb3Q6CiB8ICAgICAgIDxiPgogfCAgICAgICAgIDxj
aXRlPgogfCAgICAgICAgICAgIkIiCi18ICAgICAgICAgICA8ZGl2PgotfCAgICAgICAgICAgICAi
QyIKLXwgICAgICAgICAgICAgIkQiCit8ICAgICAgIDxkaXY+Cit8ICAgICAgICAgPGI+Cit8ICAg
ICAgICAgICAiQyIKK3wgICAgICAgICAgICJEIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxo
ZWFkPgpAQCAtNTYxLDkgKzU2NCwxMyBAQCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGNpdGU+CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT4KIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGk+Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGRpdj4KLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYIgotfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRFU1QiCit8ICAgICAgICAgICAgIDxpPgor
fCAgICAgICAgICAgICAgIDxpPgorfCAgICAgICAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAg
ICAgICAgIDxkaXY+Cit8ICAgICAgICAgICAgICAgICAgICAgPGI+Cit8ICAgICAgICAgICAgICAg
ICAgICAgICAiWCIKK3wgICAgICAgICAgICAgICAgICAgICAgICJURVNUIgogRXhwZWN0ZWQ6CiB8
IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtNjk3LDcgKzcwNCw5IEBAIEdvdDoKIHwgICAgICAgICA8
Yj4KIHwgICAgICAgICAgIDxpPgogfCAgICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAg
IDxwPgorfCAgICAgICAgIDxpPgorfCAgICAgICAgICAgPHA+Cit8ICAgICAgICAgICAgIDxiPgog
fCAgICAgICAgICAgICAgICIgamtsICIKIEV4cGVjdGVkOgogfCA8aHRtbD4KQEAgLTcyNyw3ICs3
MzYsOSBAQCBHb3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAg
ICAgIiBnaGkgIgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICAg
IDxwPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8ICAgICAg
ICAgICAgICAgIiBtbm8iCiBFeHBlY3RlZDoKQEAgLTc1OSw3ICs3NzAsMTAgQEAgR290OgogfCAg
ICAgICAgIDxiPgogfCAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAg
ICAgICAgICAgPHA+Cit8ICAgICAgICAgPGk+Cit8ICAgICAgICAgPHA+Cit8ICAgICAgICAgICA8
aT4KK3wgICAgICAgICAgICAgPGI+CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAg
ICAgICAgICIgbW5vICIKIEV4cGVjdGVkOgpAQCAtNzkyLDcgKzgwNiwxMCBAQCBHb3Q6CiB8ICAg
ICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBnaGkgIgotfCAgICAg
ICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wgICAgICAgICAgIDxp
PgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8ICAgICAgICAg
ICAgICAgIiBtbm8gIgogfCAgICAgICAgICAgICAgICIgcHFyIgpAQCAtODI3LDcgKzg0NCwxMCBA
QCBHb3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBn
aGkgIgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wg
ICAgICAgICAgIDxpPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAi
CiB8ICAgICAgICAgICAgICAgIiBtbm8gIgogfCAgICAgICAgICAgICAgICIgcHFyICIKQEAgLTg2
MiwxMSArODgyLDE0IEBAIEdvdDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAgICAgIDxpPgogfCAg
ICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAgIDxwPgorfCAgICAgICAgIDxpPgorfCAg
ICAgICAgIDxwPgorfCAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAgIDxiPgogfCAgICAgICAg
ICAgICAgICIgamtsICIKIHwgICAgICAgICAgICAgICAiIG1ubyAiCiB8ICAgICAgICAgICAgICAg
IiBwcXIgIgotfCAgICAgICAgICAgICAiIHN0dSIKK3wgICAgICAgICAiIHN0dSIKIEV4cGVjdGVk
OgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTEwMTIsMTAgKzEwMzUsOSBAQCBHb3Q6CiB8ICAg
ICA8c3RyaWtlPgogfCAgICAgICA8c3RyaWtlPgogfCAgICAgICAgIDxjb2RlPgotfCAgICAgICAg
ICAgPGNvZGU+Ci18ICAgICAgICAgICAgIDxjb2RlPgotfCAgICAgICAgICAgICAgIDxjb2RlPgot
fCAgICAgICAgICAgICAgICAgPHN0cmlrZT4KK3wgICAgICAgPGNvZGU+Cit8ICAgICAgICAgPGNv
ZGU+Cit8ICAgICAgICAgICA8c3RyaWtlPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFk
PgpAQCAtMTE0OSw3ICsxMTcxLDggQEAgR290OgogfCAgIDxib2R5PgogfCAgICAgPGI+CiB8ICAg
ICAgIDxiPgotfCAgICAgICAgIDxidXR0b24+Cit8ICAgICAgIDxidXR0b24+Cit8ICAgICAgICAg
PGI+CiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8ICAgPGhlYWQ+CkBAIC0xMjUxLDcgKzEyNzQsNyBA
QCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICAgICAgIDxi
PgogfCAgICAgICAgICAgICAgICAgICAgICAgPGVtPgotfCAgICAgICAgICAgICAgICAgICAgICAg
ICA8bGk+Cit8ICAgICAgICAgICAgICAgICAgICAgPGxpPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgog
fCAgIDxoZWFkPgpAQCAtMTkwMCw4ICsxOTIzLDggQEAgR290OgogfCAgICAgPG5vYnI+CiB8ICAg
ICAgIDxub2JyPgogfCAgICAgICAgIDxub2JyPgorfCAgICAgICAgIDxub2JyPgogfCAgICAgICAg
ICAgPG5vYnI+Ci18ICAgICAgICAgICAgIDxub2JyPgogRXhwZWN0ZWQ6CiB8IDwhRE9DVFlQRSBo
dG1sPgogfCA8aHRtbD4KQEAgLTMxMDAsNyArMzEyMyw4IEBAIEdvdDoKIHwgICAgIDxiPgogfCAg
ICAgICAiYSIKIHwgICAgICAgPGRpdj4KLXwgICAgICAgPGRpdj4KK3wgICAgIDxkaXY+Cit8ICAg
ICAgIDxiPgogfCAgICAgICAgICJ5IgogRXhwZWN0ZWQ6CiB8IDxodG1sPgpAQCAtMzEyMCw3ICsz
MTQ0LDggQEAgR290OgogfCAgIDxoZWFkPgogfCAgIDxib2R5PgogfCAgICAgPGE+Ci18ICAgICAg
IDxkaXY+Cit8ICAgICA8ZGl2PgorfCAgICAgICA8YT4KIHwgICAgICAgICA8cD4KIEV4cGVjdGVk
OgogfCA8aHRtbD4KQEAgLTU0ODgsNCArNTUxMywxMjkgQEAgRXhwZWN0ZWQ6CiByZXNvdXJjZXMv
ZW50aXRpZXMwMi5kYXQ6IFBBU1MKIAogcmVzb3VyY2VzL2NvbW1lbnRzMDEuZGF0OiBQQVNTCisK
K3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdDoKKzIKKzMKKzQKKzUKKzYKKworVGVzdCAyIG9mIDYg
aW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0IGZhaWxlZC4gSW5wdXQ6Cis8YT4xPHA+MjwvYT4z
PC9wPgorR290OgorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgor
fCAgICAgICAiMSIKK3wgICAgIDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAg
ICAgICAiMyIKK0V4cGVjdGVkOgorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wg
ICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgIDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAi
MiIKK3wgICAgICAgIjMiCisKK1Rlc3QgMyBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRh
dCBmYWlsZWQuIElucHV0OgorPGE+MTxidXR0b24+MjwvYT4zPC9idXR0b24+CitHb3Q6Cit8IDxo
dG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAg
ICAgICA8YT4KK3wgICAgICAgPGJ1dHRvbj4KK3wgICAgICAgICA8YT4KK3wgICAgICAgICAgICIy
IgorfCAgICAgICAgICAgIjMiCitFeHBlY3RlZDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAg
PGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICAgIDxidXR0b24+Cit8ICAgICAg
ICAgIjIiCit8ICAgICAiMyIKKworVGVzdCA0IG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEu
ZGF0IGZhaWxlZC4gSW5wdXQ6Cis8YT4xPGI+MjwvYT4zPC9iPgorR290OgorfCA8aHRtbD4KK3wg
ICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgICAgPGE+
Cit8ICAgICAgICAgPGI+Cit8ICAgICAgICAgICAiMiIKK3wgICAgICAgIjMiCitFeHBlY3RlZDoK
K3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEi
Cit8ICAgICAgIDxiPgorfCAgICAgICAgICIyIgorfCAgICAgPGI+Cit8ICAgICAgICIzIgorCitU
ZXN0IDUgb2YgNiBpbiByZXNvdXJjZXMvYWRvcHRpb24wMS5kYXQgZmFpbGVkLiBJbnB1dDoKKzxh
PjE8ZGl2PjI8ZGl2PjM8L2E+NDwvZGl2PjU8L2Rpdj4KK0dvdDoKK3wgPGh0bWw+Cit8ICAgPGhl
YWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICA8ZGl2PgorfCAg
ICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgICA8ZGl2PgorfCAgICAgICAgICAgIjMi
Cit8ICAgICAgICAgICAiNCIKK3wgICAgICI1IgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxo
ZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPGRpdj4KK3wg
ICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAgIDxkaXY+Cit8ICAgICAgICAgPGE+Cit8
ICAgICAgICAgICAiMyIKK3wgICAgICAgICAiNCIKK3wgICAgICAgIjUiCisKK1Rlc3QgNiBvZiA2
IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgorPHRhYmxlPjxhPjE8
cD4yPC9hPjM8L3A+CitHb3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAg
ICAgPHRhYmxlPgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5Pgor
fCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAgICAgICAg
ICIyIgorfCAgICAgICAiMyIKK3wgICAgIDx0YWJsZT4KICNFT0YKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxp
Yi9ydW5uZXItZXhwZWN0ZWQudHh0CmluZGV4IDMwMTk3ZWQ1NmQxZTJjZjBhZWNkOGFlNDMyNWU5
N2FiODE4MTBmZDcuLjNjYjM3NjhjNTg1NjA4ZjhhNmQ1Y2JlZTE1MTA5MmZhZDJjNDI1NTMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dApAQCAtNDg1OSwzICs0ODU5
LDQ4IEBAIEV4cGVjdGVkOgogcmVzb3VyY2VzL2VudGl0aWVzMDIuZGF0OiBQQVNTCiAKIHJlc291
cmNlcy9jb21tZW50czAxLmRhdDogUEFTUworCityZXNvdXJjZXMvYWRvcHRpb24wMS5kYXQ6Cisx
Cis2CisKK1Rlc3QgMSBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElu
cHV0OgorPGE+PHA+PC9hPjwvcD4KK0dvdDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJv
ZHk+Cit8ICAgICA8YT4KK3wgICAgIDxwPgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxoZWFk
PgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICA8cD4KK3wgICAgICAgPGE+CisKK1Rlc3Qg
NiBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgorPHRhYmxl
PjxhPjE8cD4yPC9hPjM8L3A+CitHb3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgICA8cD4KK3wgICAgICAgICAiMiIKK3wg
ICAgICAgICAiMyIKK3wgICAgIDx0YWJsZT4KK3wgICAgICAgPHRib2R5PgorRXhwZWN0ZWQ6Cit8
IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgor
fCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAgICAgICAgICIyIgorfCAgICAgICAiMyIKK3wgICAg
IDx0YWJsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci5odG1sIGIv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKaW5kZXggOWY3NDU2ODAzMmMwZGNkYzYy
NWViZTc5YWIzMGNhODk3Y2RmNDVlYy4uZjMwNTJmMDkzZmU0NGJhNWEzOWQzZTFmOGJhNGJkMTkz
NzcxNTQxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKQEAgLTU4LDcgKzU4LDggQEAgdmFy
IHRlc3RfZmlsZXMgPSBbCiAgICAgICAgICdyZXNvdXJjZXMvc2NyaXB0ZGF0YTAxLmRhdCcsCiAg
ICAgICAgICdyZXNvdXJjZXMvZW50aXRpZXMwMS5kYXQnLAogICAgICAgICAncmVzb3VyY2VzL2Vu
dGl0aWVzMDIuZGF0JywKLSAgICAgICAgJ3Jlc291cmNlcy9jb21tZW50czAxLmRhdCcKKyAgICAg
ICAgJ3Jlc291cmNlcy9jb21tZW50czAxLmRhdCcsCisgICAgICAgICdyZXNvdXJjZXMvYWRvcHRp
b24wMS5kYXQnCiAgICAgXSwKICAgICB0ZXN0cyA9IFtdLAogICAgIGlmcmFtZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKVswXSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWIzYTE2MzAxNjY4NTNjNzIzMTYz
MDNkYzdiOWU2Yzg0NDY3ZDFkMy4uM2E2NTIwMzNlNDcwZjRiMjc5MDUxYjJjZWZiN2NiMjQxYjAz
MDFmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wNy0wMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SFRNTFRyZWVCdWlsZGVyIG5lZWRzIGFuIGFkb3B0aW9uIGFnZW5jeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0NTMKKworICAgICAgICBUaGlzIGNo
YW5nZXMgc29tZSB0ZXN0IHJlc3VsdHMsIGJ1dCBvbmx5IG1ha2VzIHRoZSBzaW1wbGVzdAorICAg
ICAgICBhZG9wdGlvbiBhZ2VuY3kgY2FzZXMgcGFzcy4gIEkgdGhpbmsgdGhlIGNvZGUgaXMgbGlr
ZWx5CisgICAgICAgIHZlcnkgY2xvc2UsIGJ1dCBmdXJ0aGVyIGl0ZXJhdGlvbiB0byBtYWtlIHRo
aXMgY2hhbmdlIGxhcmdlcgorICAgICAgICBzZWVtcyBjb3VudGVyLXByb2R1Y3RpdmUuICBJIHJl
Y29tbWVuZCB3ZSBjaGVjayBpbiB0aGlzCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCB3b3JrIGZy
b20gaGVyZS4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OmFkZENoaWxkQ29tbW9uKToKKyAgICAgICAgIC0gTWFrZSBz
dXJlIGNhbGxlcnMgZG9uJ3QgYXNzdW1lIHRoaXMgd2lsbCByZXBhcmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKToKKyAgICAgICAgIC0gVXBkYXRl
IGNvbW1lbnQgdG8gZG9jdW1lbnQgbGFjayBvZiByZXBhcmVudGluZyBiZWhhdmlvci4KKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6RWxlbWVudFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkOjppc0Fib3ZlKToKKyAgICAgICAgIC0gQWRkZWQgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUpOgorICAgICAgICAgLSBO
ZWVkZWQgZm9yIHRoZSBhZG9wdGlvbiBhZ2VuY3kuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjp0b3BSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6Ym90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhU
TUxIZWFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjp0b3Btb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50U3RhY2s6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6Omh0bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3Rh
Y2s6OmhlYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmJv
ZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21t
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29t
bW9uKToKKyAgICAgICAgIC0gRml4IHRoZSBuYW1lIHRvIG1hdGNoIHRvcC9ib3R0b20uCisgICAg
ICAgICogaHRtbC9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVsZWFzZU5leHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6c2V0TmV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmZpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKToK
KyAgICAgICAgKiBodG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c2l6ZSk6CisgICAgICAgICogaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpmdXJ0
aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQpOgorICAgICAgICAgLSBQYXJ0IG9mIHRoZSBB
ZG9wdGlvbiBBZ2VuY3kgYWxnb3JpdGhtLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpmaW5kRm9zdGVyUGFyZW50Rm9yKToKKyAgICAgICAgIC0gVXNlZCB0byBtb3ZlIG1pcy1u
ZXN0ZWQgY29udGVudCBvdXQgb2YgdGFibGVzLgorICAgICAgICAgICBUaGlzIGRvZXNuJ3Qgc2Vl
bSB0byB3b3JrIHF1aXRlIHJpZ2h0IHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cmVwYXJlbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgICAtIFRoZSByaWRpY3Vsb3VzbHkg
bG9uZy9jb21wbGljYXRlZCBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtIGZyb20gSFRNTDUuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAg
ICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMDctMDMgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAppbmRleCA0YzRmMjA4OGVkMzVkZGE4YmU2MzZhMGUzYjI0YjYwM2Vk
OTUzNWVmLi42NTM5ZTViMzAyMjFjOGY3MmFlMmM0ZjIxZjJlYWFhYTIyYjg2MzIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcApAQCAtNTM5LDYgKzUzOSw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBw
ZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJv
CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6YWRkQ2hpbGRDb21tb24oTm9kZSogbmV3Q2hpbGQpCiB7
CisgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAvLyBVc2UgYXBwZW5kQ2hpbGQgaWYg
eW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nLgogICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2go
KTsKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0
aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KQEAgLTU1NSw3ICs1NTYsNyBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQpCiB7
CiAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNl
ZCBkdXJpbmcgcGFyc2luZy4KLSAgICAvLyBJdCBkb2VzIG5vdCBzZW5kIGFueSBET00gbXV0YXRp
b24gZXZlbnRzLgorICAgIC8vIEl0IGRvZXMgbm90IHNlbmQgYW55IERPTSBtdXRhdGlvbiBldmVu
dHMgb3IgaGFuZGxlIHJlcGFyZW50aW5nLgogCiAgICAgYWRkQ2hpbGRDb21tb24obmV3Q2hpbGQu
Z2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3BwCmluZGV4IDcwNzYxYzZlMjA0MzJm
YTgxMTBiYmNlMWM4YTNkMzlkNGJkMGIxNGYuLjI3NGM2Nzg0YzUyYWJkN2NhZjI4ZGI0NWIyN2M5
ZWQ2MjdhZmJlMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTM4LDIzICszOCwz
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LWNsYXNzIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQgOiBwdWJsaWMgTm9uY29weWFi
bGUgewotcHVibGljOgotICAgIEVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpCi0gICAgICAgIDogbV9lbGVtZW50
KGVsZW1lbnQpCi0gICAgICAgICwgbV9uZXh0KG5leHQpCi0gICAgewotICAgIH0KK0hUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpCisgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKKyAgICAsIG1fbmV4dChuZXh0KQoreworICAgIEFTU0VSVChtX2VsZW1lbnQp
OworfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5n
ZXQoKTsgfQotICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQu
Z2V0KCk7IH0KLSAgICBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IHJlbGVhc2VOZXh0KCkgeyBy
ZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQotICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPEVs
ZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQoreworfQorCit2b2lkIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgLy8gRklYTUU6IFNob3VsZCB0
aGlzIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPworICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7
Cit9CiAKLXByaXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBPd25Q
dHI8RWxlbWVudFJlY29yZD4gbV9uZXh0OwotfTsKK2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBvdGhlcikgY29uc3QKK3sKKyAgICBm
b3IgKEVsZW1lbnRSZWNvcmQqIGJlbG93ID0gbmV4dCgpOyBiZWxvdzsgYmVsb3cgPSBiZWxvdy0+
bmV4dCgpKSB7CisgICAgICAgIGlmIChiZWxvdyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIEhUTUxFbGVtZW50U3RhY2s6
OkhUTUxFbGVtZW50U3RhY2soKQogICAgIDogbV9odG1sRWxlbWVudCgwKQpAQCAtMTA0LDYgKzEx
Myw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWwoRWxlbWVudCogZWxlbWVudCkK
IAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKIHsKKyAgICBBU1NFUlQoIW1fdG9wKTsgLy8gPGh0bWw+IHNob3Vs
ZCBhbHdheXMgYmUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCiAgICAgQVNTRVJUKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCFtX2h0bWxFbGVt
ZW50KTsKICAgICBtX2h0bWxFbGVtZW50ID0gZWxlbWVudC5nZXQoKTsKQEAgLTEzNSwxMSArMTQ1
LDQ2IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQpCiAgICAgcHVzaENvbW1vbihlbGVtZW50KTsKIH0KIAordm9pZCBIVE1MRWxlbWVudFN0
YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEVsZW1lbnRSZWNv
cmQqIHJlY29yZEJlbG93KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQocmVj
b3JkQmVsb3cpOworICAgIEFTU0VSVChtX3RvcCk7CisgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CisgICAgQVNTRVJUKG1faHRtbEVsZW1lbnQpOworICAg
IGlmIChyZWNvcmRCZWxvdyA9PSBtX3RvcCkgeworICAgICAgICBwdXNoKGVsZW1lbnQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmRBYm92
ZSA9IG1fdG9wLmdldCgpOyByZWNvcmRBYm92ZTsgcmVjb3JkQWJvdmUgPSByZWNvcmRBYm92ZS0+
bmV4dCgpKSB7CisgICAgICAgIGlmIChyZWNvcmRBYm92ZS0+bmV4dCgpICE9IHJlY29yZEJlbG93
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVjb3JkQWJvdmUtPnNldE5leHQo
bmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwgcmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKTsK
KyAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdDaGls
ZHJlbigpOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6dG9wUmVjb3JkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90b3AuZ2V0KCk7Cit9CisKIEVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fdG9wLT5lbGVtZW50KCk7CiB9CiAKK0VsZW1lbnQqIEhUTUxF
bGVtZW50U3RhY2s6OmJvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGh0bWxFbGVtZW50KCk7
Cit9CisKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQgPT0gZWxlbWVudCk7CkBA
IC0xNDgsNyArMTkzLDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hl
YWRFbGVtZW50ID0gMDsKLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICBy
ZW1vdmVOb25Ub3BDb21tb24oZWxlbWVudCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0xNTgsNDUgKzIwMyw1OCBAQCB2b2lkIEhUTUxF
bGVtZW50U3RhY2s6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBwb3AoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsK
KyAgICByZW1vdmVOb25Ub3BDb21tb24oZWxlbWVudCk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRT
dGFjazo6Y29udGFpbnMoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK0hUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OmZpbmQoRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKICAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7
IHBvcyA9IHBvcy0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChwb3MtPmVsZW1lbnQoKSA9PSBlbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gcG9zOwog
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKK0hUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdAoreworICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9z
ID0gbV90b3AuZ2V0KCk7IHBvczsgcG9zID0gcG9zLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHBv
cy0+ZWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodGFnTmFtZSkpCisgICAgICAgICAgICByZXR1cm4g
cG9zOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpj
b250YWlucyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGVsZW1l
bnQpOwogfQogCiBuYW1lc3BhY2UgewogCi1pbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRvblRhZykKICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKQorICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcnF1ZWVUYWcpCisgICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KHRhYmxlVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKQogICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKGJ1dHRvblRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShtYXJxdWVl
VGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykKICNpZiBFTkFC
TEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2VuZGlmCiAgICAgICAgIDsKIH0KIAotaW5saW5l
IGJvb2wgaXNMaXN0SXRlbVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxp
bmUgYm9vbCBpc0xpc3RJdGVtU2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBy
ZXR1cm4gaXNTY29wZU1hcmtlcihlbGVtZW50KQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKG9sVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKTsKIH0KLWlu
bGluZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5s
aW5lIGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZSh0YWJsZVRhZyk7CkBAIC0yMDQsNyArMjYyLDcgQEAgaW5saW5lIGJvb2wgaXNUYWJs
ZVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAKIH0KIAotdGVtcGxhdGUgPGJv
b2wgaXNNYXJrZXIoY29uc3QgRWxlbWVudCopPgordGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoRWxl
bWVudCopPgogYm9vbCBpblNjb3BlQ29tbW9uKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIHRvcCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXRUYWcpCiB7CiAgICAgZm9yIChIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBwb3MgPSB0b3A7IHBvczsgcG9zID0gcG9zLT5u
ZXh0KCkpIHsKQEAgLTI0NiwxOSArMzA0LDE5IEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5U
YWJsZVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFyZ2V0VGFnKSBjb25zdAogICAgIHJldHVy
biBpblNjb3BlQ29tbW9uPGlzVGFibGVTY29wZU1hcmtlcj4obV90b3AuZ2V0KCksIHRhcmdldFRh
Zyk7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkKK0VsZW1l
bnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9odG1sRWxlbWVudCk7CiAgICAgcmV0dXJuIG1faHRtbEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQq
IEhUTUxFbGVtZW50U3RhY2s6OmhlYWRFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3Rh
Y2s6OmhlYWRFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCk7CiAg
ICAgcmV0dXJuIG1faGVhZEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6
OmJvZHlFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9ib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fYm9keUVs
ZW1lbnQ7CkBAIC0yNjYsNiArMzI0LDcgQEAgRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9k
eUVsZW1lbnQoKQogCiB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24oUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50KQogeworICAgIEFTU0VSVChtX2h0bWxFbGVtZW50KTsKICAgICBt
X3RvcC5zZXQobmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwgbV90b3AucmVsZWFzZSgpKSk7CiAg
ICAgdG9wKCktPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CiB9CkBAIC0yNzksMTMgKzMzOCwxMiBA
QCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcENvbW1vbigpCiAgICAgbV90b3AgPSBtX3RvcC0+
cmVsZWFzZU5leHQoKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25GaXJz
dENvbW1vbihFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVO
b25Ub3BDb21tb24oRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwotICAgIEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1f
dG9wLmdldCgpOwotICAgIEFTU0VSVChwb3MtPmVsZW1lbnQoKSAhPSBlbGVtZW50KTsKLSAgICB3
aGlsZSAocG9zLT5uZXh0KCkpIHsKKyAgICBBU1NFUlQodG9wKCkgIT0gZWxlbWVudCk7CisgICAg
Zm9yIChFbGVtZW50UmVjb3JkKiBwb3MgPSBtX3RvcC5nZXQoKTsgcG9zOyBwb3MgPSBwb3MtPm5l
eHQoKSkgewogICAgICAgICBpZiAocG9zLT5uZXh0KCktPmVsZW1lbnQoKSA9PSBlbGVtZW50KSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdG8gY2FsbCBmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKQogICAgICAgICAgICAgLy8gd2hlbiB0aGUgY2hpbGRyZW4gYXJlbid0IGFjdHVhbGx5
IGZpbmlzaGVkPwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaCBi
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKaW5kZXggOGNhN2M4MWMzZjczZTdmN2Q2
Zjc1OTZlZTJlMjJlNjhiN2M0ODc1YS4uNTUzNDg0ZjM4MThjNjY5OTRlMWNkOGYxZWU1ZjRmZDg4
YzBjYjNlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCkBAIC0yNiwyMSArMjYsNTIgQEAKICNp
Zm5kZWYgSFRNTEVsZW1lbnRTdGFja19oCiAjZGVmaW5lIEhUTUxFbGVtZW50U3RhY2tfaAogCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXRvbWlj
U3RyaW5nOwogY2xhc3MgRWxlbWVudDsKIAorLy8gTk9URTogVGhlIEhUTUw1IHNwZWMgdXNlcyBh
IGJhY2t3YXJkcyAoZ3Jvd3MgZG93bndhcmQpIHN0YWNrLiAgV2UncmUgdXNpbmcKKy8vIG1vcmUg
c3RhbmRhcmQgKGdyb3dzIHVwd2FyZHMpIHN0YWNrIHRlcm1pbm9sb2d5IGhlcmUuCiBjbGFzcyBI
VE1MRWxlbWVudFN0YWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBIVE1M
RWxlbWVudFN0YWNrKCk7CiAgICAgfkhUTUxFbGVtZW50U3RhY2soKTsKIAorICAgIGNsYXNzIEVs
ZW1lbnRSZWNvcmQgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
fkVsZW1lbnRSZWNvcmQoKTsgLy8gUHVibGljIGZvciB+UGFzc093blB0cigpCisgICAgCisgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0K
KyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKworICAg
ICAgICBib29sIGlzQWJvdmUoRWxlbWVudFJlY29yZCopIGNvbnN0OworCisgICAgICAgIEVsZW1l
bnRSZWNvcmQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBwcml2
YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKKworICAgICAgICBF
bGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29y
ZD4pOworCisgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVsZWFzZU5leHQoKSB7
IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CisgICAgICAgIHZvaWQgc2V0TmV4dChQYXNzT3du
UHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorCisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBt
X25leHQ7CisgICAgfTsKKyAgICAKICAgICBFbGVtZW50KiB0b3AoKSBjb25zdDsKKyAgICBFbGVt
ZW50UmVjb3JkKiB0b3BSZWNvcmQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBib3R0b20oKSBjb25z
dDsKKyAgICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKKyAgICBFbGVtZW50
UmVjb3JkKiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CisKKyAg
ICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsK
IAogICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIHB1c2hIVE1M
SHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CkBAIC02MywxNiArOTQsMTQgQEAgcHVi
bGljOgogICAgIGJvb2wgaW5MaXN0SXRlbVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkgY29uc3Q7CiAgICAgYm9vbCBpblRhYmxlU2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIGh0bWxFbGVtZW50KCk7Ci0gICAgRWxlbWVudCog
aGVhZEVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpOworICAgIEVsZW1lbnQq
IGh0bWxFbGVtZW50KCkgY29uc3Q7CisgICAgRWxlbWVudCogaGVhZEVsZW1lbnQoKSBjb25zdDsK
KyAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpIGNvbnN0OwogCi0gICAgLy8gUHVibGljIHNvIGZy
ZWUgZnVuY3Rpb25zIGNhbiB1c2UgaXQsIGJ1dCBkZWZpbmVkIHByaXZhdGVseS4KLSAgICBjbGFz
cyBFbGVtZW50UmVjb3JkOwogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0
cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKLSAgICB2b2lkIHJlbW92ZU5vbkZp
cnN0Q29tbW9uKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50
Kik7CiAKICAgICBPd25QdHI8RWxlbWVudFJlY29yZD4gbV90b3A7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAppbmRleCBlNzBkZTQyZjRkMmUxNjE3ZjI4YmNk
MDhjMmM0NDQxZGYyODgxNjI1Li5mOGUxZGQ1ZDU5YWZlMDVlMDE0NmFhMTYwN2FlYmFiZTNkYjI4
OWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC02
NCw2ICs2NCwxNiBAQCB2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpyZXBs
YWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbgogICAgIG1fZWxlbWVudCA9IGVs
ZW1lbnQ7CiB9CiAKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJh
dG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCkg
PT0gb3RoZXIuZWxlbWVudCgpOworfQorCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OkVudHJ5OjpvcGVyYXRvciE9KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gZWxlbWVudCgpICE9IG90aGVyLmVsZW1lbnQoKTsKK30KKwogSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCgpCiB7CiB9CkBAIC03MiwxMSArODIs
NDUgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6fkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QoKQogewogfQogCitFbGVtZW50KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0
RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHRhcmdldE5hbWUpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21fZW50cmllcy5zaXplKCkg
LSBpXTsKKyAgICAgICAgaWYgKGVudHJ5LmlzTWFya2VyKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKGVudHJ5LmVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRhcmdldE5hbWUp
KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmVsZW1lbnQoKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y29udGFpbnMoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gISFmaW5kKGVsZW1lbnQpOworfQorCitIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Zmlu
ZChFbGVtZW50KiBlbGVtZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5k
KGVsZW1lbnQpOworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICAvLyBUaGlz
IGlzIHNvbWV3aGF0IG9mIGEgaGFjaywgYW5kIGlzIHdoeSB0aGlzIG1ldGhvZCBjYW4ndCBiZSBj
b25zdC4KKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaW5kZXhdOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjphcHBlbmQoRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVsZW1lbnQpOwogfQogCit2b2lk
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5kKGVsZW1lbnQpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9lbnRyaWVzLnJlbW92ZShpbmRleCk7Cit9CisKIHZv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xlYXJUb0xhc3RNYXJrZXIoKQogewogICAg
IHdoaWxlIChtX2VudHJpZXMuc2l6ZSgpICYmICFtX2VudHJpZXMubGFzdCgpLmlzTWFya2VyKCkp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRleCBhOWM1NmU2NTRi
YzkzNDhhMGVkMmRlZmQxNTI3ZDRmZTFiZmI5OGUwLi5kNjEzYTg2NDAxZDNjZmMyN2NmOWI4MTg1
MTZiOWNlYzIzMzczNjk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdG9t
aWNTdHJpbmc7CiBjbGFzcyBFbGVtZW50OwogCiAvLyBUaGlzIG1heSBlbmQgdXAgbWVyZ2VkIGlu
dG8gSFRNTEVsZW1lbnRTdGFjay4KQEAgLTQwLDEyICs0MSw2IEBAIHB1YmxpYzoKICAgICBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0KCk7CiAgICAgfkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5zaXplKCk7IH0KLQotICAgIHZv
aWQgYXBwZW5kKEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFyVG9MYXN0TWFya2VyKCk7Ci0KICAg
ICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUsIGJ1dCBIVE1MVHJlZUJ1aWxkZXIg
aGFzIHRvIGNvb3JkaW5hdGUKICAgICAvLyBiZXR3ZWVuIHRoZSBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0IGFuZCBIVE1MRWxlbWVudFN0YWNrIGFuZCBuZWVkcwogICAgIC8vIGFjY2VzcyB0byBF
bnRyeTo6aXNNYXJrZXIoKSBhbmQgRW50cnk6OnJlcGxhY2VFbGVtZW50KCkgdG8gZG8gc28uCkBA
IC02MSwxMCArNTYsMjUgQEAgcHVibGljOgogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAK
KyAgICAgICAgLy8gTmVlZGVkIGZvciB1c2Ugd2l0aCBWZWN0b3IuCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFbnRyeSYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRW50cnkmKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFbGVtZW50
PiBtX2VsZW1lbnQ7CiAgICAgfTsKIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5z
aXplKCk7IH0KKworICAgIEVsZW1lbnQqIGNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYpOworCisgICAgRW50cnkqIGZpbmQoRWxlbWVudCopOworICAgIGJv
b2wgY29udGFpbnMoRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKKyAgICB2
b2lkIHJlbW92ZShFbGVtZW50Kik7CisgICAgdm9pZCBjbGVhclRvTGFzdE1hcmtlcigpOworCiAg
ICAgY29uc3QgRW50cnkmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fZW50
cmllc1tpXTsgfQogICAgIEVudHJ5JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX2Vu
dHJpZXNbaV07IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA5NjA2MTU2NjA3Mzhl
ZDdkMjQwOGJiMWZlNTY5NmEzYjU1YTFmNmI1Li42NTk2NTNiYzdiNTcyOGJhZDY0OThhNjBmN2I2
NmFmMjgxNTg2NTA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNjQsNiArNjQsMTMy
IEBAIGJvb2wgc2hvdWxkVXNlTGVnYWN5VHJlZUJ1aWxkZXIoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIHJldHVybiAhZG9jdW1lbnQtPnNldHRpbmdzKCkgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygp
LT5odG1sNVRyZWVCdWlsZGVyRW5hYmxlZCgpOwogfQogCitib29sIGlzTnVtYmVyZWRIZWFkZXJU
YWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09
IGgxVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBoM1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGg0VGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gaDVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoNlRhZzsKK30KKworLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2lu
Zy5odG1sI3NwZWNpYWwKK2Jvb2wgaXNTcGVjaWFsVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBhZGRyZXNzVGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gYXJ0aWNsZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGFzaWRlVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gYmFzZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJhc2Vmb250
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImJnc291bmQiCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJvZHlUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBiclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJ1dHRvblRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IGNlbnRlclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNvbFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGNvbGdyb3VwVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gImNvbW1hbmQiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZGRUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSAiZGV0YWlscyIKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkaXJUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBkaXZUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkbFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGR0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZW1iZWRUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSBmaWVsZHNldFRhZworICAgICAgICB8fCB0YWdOYW1lID09ICJm
aWd1cmUiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9vdGVyVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gZm9ybVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZyYW1lVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gZnJhbWVzZXRUYWcKKyAgICAgICAgfHwgaXNOdW1iZXJlZEhlYWRlclRhZyh0
YWdOYW1lKQorICAgICAgICB8fCB0YWdOYW1lID09IGhlYWRUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBoZWFkZXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoZ3JvdXBUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBoclRhZworICAgICAgICB8fCB0YWdOYW1lID09IGlmcmFtZVRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IGltZ1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGlucHV0VGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gaXNpbmRleFRhZworICAgICAgICB8fCB0YWdOYW1lID09
IGxpVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlua1RhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBtZW51VGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gbWV0YVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5hdlRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IG5vZW1iZWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBub2ZyYW1l
c1RhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vc2NyaXB0VGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gb2xUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gcGFyYW1UYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwbGFpbnRleHRUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBwcmVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzY3JpcHRUYWcK
KyAgICAgICAgfHwgdGFnTmFtZSA9PSBzZWN0aW9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
c2VsZWN0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gc3R5bGVUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSB0Ym9keVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRleHRhcmVhVGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gdGZvb3RUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0aGVhZFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHRpdGxlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
dHJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB1bFRhZworICAgICAgICB8fCB0YWdOYW1lID09
IHdiclRhZworICAgICAgICB8fCB0YWdOYW1lID09IHhtcFRhZzsKK30KKworLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2lu
Zy5odG1sI3Njb3BpbmcKKy8vIFNhbWUgYXMgaXNTY29waW5nVGFnIGluIExlZ2FjeUhUTUxUcmVl
QnVpbGRlci5jcHAKKy8vIGFuZCBpc1Njb3BlTWFya2VyIGluIEhUTUxFbGVtZW50U3RhY2suY3Bw
Citib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAg
cmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYnV0dG9u
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY2FwdGlvblRhZworI2lmIEVOQUJMRShTVkdfRk9S
RUlHTl9PQkpFQ1QpCisgICAgICAgIHx8IHRhZ05hbWUgPT0gU1ZHTmFtZXM6OmZvcmVpZ25PYmpl
Y3RUYWcKKyNlbmRpZgorICAgICAgICB8fCB0YWdOYW1lID09IGh0bWxUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBtYXJxdWVlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gb2JqZWN0VGFnCisg
ICAgICAgIHx8IHRhZ05hbWUgPT0gdGFibGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0ZFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHRoVGFnOworfQorCitib29sIGlzTm9uQW5jaG9yRm9y
bWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRh
Z05hbWUgPT0gYlRhZworICAgICAgICB8fCB0YWdOYW1lID09IGJpZ1RhZworICAgICAgICB8fCB0
YWdOYW1lID09IGNvZGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBlbVRhZworICAgICAgICB8
fCB0YWdOYW1lID09IGZvbnRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBpVGFnCisgICAgICAg
IHx8IHRhZ05hbWUgPT0gbm9iclRhZworICAgICAgICB8fCB0YWdOYW1lID09IHNUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBzbWFsbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHN0cmlrZVRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHN0cm9uZ1RhZworICAgICAgICB8fCB0YWdOYW1lID09
IHR0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRhZzsKK30KKworLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5o
dG1sI2Zvcm1hdHRpbmcKK2Jvb2wgaXNGb3JtYXR0aW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBhVGFnIHx8IGlzTm9uQW5jaG9yRm9y
bWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3BocmFzaW5nCiti
b29sIGlzUGhyYXNpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJl
dHVybiAhaXNTcGVjaWFsVGFnKHRhZ05hbWUpICYmICFpc1Njb3BpbmdUYWcodGFnTmFtZSkgJiYg
IWlzRm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogSFRNTFRy
ZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1M
RG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKQEAgLTQxOSw5ICs1NDUsOCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGgxVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBoMlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDNUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IGg0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
aDZUYWcpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkg
ewogICAgICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwotICAgICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NzAsNyArNTk1LDcgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICAgICAgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYlRhZyB8fCB0
b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBjb2RlVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZm9udFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21h
bGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ry
b25nVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykg
eworICAgICAgICBpZiAoaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAg
ICAgICAgICAgICBpbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC02NzIsNiArNzk3LDE1OSBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBvbiBIVE1MRWxlbWVu
dFN0YWNrLgorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTFRyZWVCdWlsZGVy
OjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCogZm9ybWF0dGluZ0Vs
ZW1lbnQpCit7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RC
bG9jayA9IDA7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcmVjb3JkID0g
bV9vcGVuRWxlbWVudHMudG9wUmVjb3JkKCk7CisgICAgZm9yICg7IHJlY29yZDsgcmVjb3JkID0g
cmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJlY29yZC0+ZWxlbWVudCgpID09IGZvcm1h
dHRpbmdFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IHJlY29yZC0+ZWxlbWVudCgpLT5sb2NhbE5h
bWUoKTsKKyAgICAgICAgLy8gIXBocmFzaW5nICYmICFmb3JtYXR0aW5nID09IHNwZWNpYWwgfHwg
c2NvcGluZworICAgICAgICBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpIHx8IGlzU3BlY2lhbFRh
Zyh0YWdOYW1lKSkKKyAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSByZWNvcmQ7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6ZmluZEZvc3RlclBhcmVudEZvcihFbGVtZW50KiBlbGVtZW50KQoreworICAg
IEVsZW1lbnQqIGZvc3RlclBhcmVudEVsZW1lbnQgPSAwOworICAgIEhUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQgPSBtX29wZW5FbGVtZW50cy50
b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKKyAgICBpZiAobGFzdFRhYmxlRWxlbWVudFJl
Y29yZCkgeworICAgICAgICBFbGVtZW50KiBsYXN0VGFibGVFbGVtZW50ID0gbGFzdFRhYmxlRWxl
bWVudFJlY29yZC0+ZWxlbWVudCgpOworICAgICAgICBpZiAobGFzdFRhYmxlRWxlbWVudC0+cGFy
ZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaWxsIHRoaXMgc2VuZCBtdXRhdGlvbiBl
dmVudHM/CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIGxh
c3RUYWJsZUVsZW1lbnQtPnBhcmVudCgpLT5pbnNlcnRCZWZvcmUoZWxlbWVudCwgbGFzdFRhYmxl
RWxlbWVudCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9IGxhc3RUYWJsZUVs
ZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOworICAgIH0gZWxzZSAvLyBmcmFnbWVudCBj
YXNlCisgICAgICAgIGZvc3RlclBhcmVudEVsZW1lbnQgPSBtX29wZW5FbGVtZW50cy5ib3R0b20o
KTsgLy8gPGh0bWw+IGVsZW1lbnQKKyAgICAKKyAgICBmb3N0ZXJQYXJlbnRFbGVtZW50LT5wYXJz
ZXJBZGRDaGlsZChlbGVtZW50KTsKK30KKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgYSB3
aGl0dHkgbmFtZS4KKy8vIEZJWE1FOiBUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gbWFueSBv
dGhlciBwbGFjZXMgaW4gV2ViQ29yZS4KK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXBhcmVudENo
aWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVudCogbmV3UGFyZW50KQoreworICAgIE5v
ZGUqIGNoaWxkID0gb2xkUGFyZW50LT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGNoaWxkKSB7
CisgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBuZXdQYXJlbnQtPmFwcGVuZENoaWxkKGNoaWxk
LCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAgICAgICBjaGlsZCA9IG5leHRDaGlsZDsK
KyAgICB9Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkK
K3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAoMSkgeworICAgICAgICAvLyAxLgorICAgICAgICBF
bGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNs
b3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLm5hbWUoKSk7CisgICAgICAgIGlmICgh
Zm9ybWF0dGluZ0VsZW1lbnQpIHsKKyAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hlY2sgdGhlIHN0YWNrIG9mIG9wZW4gZWxl
bWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBlcnJvci4KKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmNvbnRhaW5zKGZvcm1h
dHRpbmdFbGVtZW50KSkgeworICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAg
ICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXR0aW5n
RWxlbWVudCAhPSBjdXJyZW50RWxlbWVudCgpKQorICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CisgICAgICAgIC8vIDIuCisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIGZ1cnRoZXN0QmxvY2sgPSBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9y
bWF0dGluZ0VsZW1lbnQpOworICAgICAgICAvLyAzLgorICAgICAgICBpZiAoIWZ1cnRoZXN0Qmxv
Y2spIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCgpICE9IGZvcm1hdHRpbmdF
bGVtZW50KQorICAgICAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOworICAgICAgICAg
ICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdF
bGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIC8vIDQuCisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQqIGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkID0gbV9vcGVuRWxlbWVudHMuZmluZChm
b3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChmdXJ0aGVzdEJsb2NrLT5pc0Fib3Zl
KGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7CisgICAgICAgIEVsZW1lbnQqIGNvbW1vbkFuY2Vz
dG9yID0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOworICAgICAg
ICAvLyA1LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBib29rbWFyaz8KKyAgICAgICAg
Ly8gNi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbm9kZSA9IGZ1
cnRoZXN0QmxvY2s7CisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5l
eHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgICAgICAvLyA2LjEKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOyAv
LyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIGluIGNhc2Ugbm9kZSBp
cyBkZWxldGVkIGluIDYuMi4KKyAgICAgICAgICAgIC8vIDYuMgorICAgICAgICAgICAgaWYgKCFt
X2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250YWlucyhub2RlLT5lbGVtZW50KCkpKSB7Cisg
ICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucmVtb3ZlKG5vZGUtPmVsZW1lbnQoKSk7Cisg
ICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjMKKyAgICAgICAgICAgIGlmIChub2RlID09IGZv
cm1hdHRpbmdFbGVtZW50UmVjb3JkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gNi40CisgICAgICAgICAgICBpZiAobGFzdE5vZGUgPT0gZnVydGhlc3RCbG9jaykKKyAg
ICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBtb3ZlIGJvb2ttYXJrLgorICAgICAg
ICAgICAgLy8gNi41CisgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQgdG8gc2F2
ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICAgICAgQXRvbWljSFRN
TFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBub2RlLT5lbGVtZW50KCktPmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgICAgIC8vIElzIGNyZWF0ZUVsZW1lbnQgY29ycmVjdD8gKGlu
c3RlYWQgb2YgaW5zZXJ0RWxlbWVudCkKKyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb2RlIGV2
ZXIgbGVhdmUgbmV3RWxlbWVudCB1bmF0dGFjaGVkPworICAgICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGZha2VUb2tlbik7CisgICAgICAgICAgICBI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0gbV9hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMuZmluZChub2RlLT5lbGVtZW50KCkpOworICAgICAgICAgICAgbm9kZUVu
dHJ5LT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIG5vZGUt
PnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIC8vIDYu
NgorICAgICAgICAgICAgLy8gVXNlIGFwcGVuZENoaWxkIGluc3RlYWQgb2YgcGFyc2VyQWRkQ2hp
bGQgdG8gaGFuZGxlIHBvc3NpYmxlIHJlcGFyZW50aW5nLgorICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICAgICAgICAgIG5vZGUtPmVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQobGFzdE5v
ZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgICAg
ICAvLyA2LjcKKyAgICAgICAgICAgIGxhc3ROb2RlID0gbm9kZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyA3CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29tbW9uQW5jZXN0b3JUYWcgPSBj
b21tb25BbmNlc3Rvci0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmIChjb21tb25BbmNlc3RvclRh
ZyA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdGJvZHlU
YWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFnID09IHRmb290VGFnCisgICAgICAg
ICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0aGVhZFRhZworICAgICAgICAgICAgfHwgY29t
bW9uQW5jZXN0b3JUYWcgPT0gdHJUYWcpCisgICAgICAgICAgICBmaW5kRm9zdGVyUGFyZW50Rm9y
KGxhc3ROb2RlLT5lbGVtZW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgICAgICAgICBjb21tb25BbmNlc3Rvci0+YXBwZW5kQ2hpbGQobGFz
dE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gOAorICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQgdG8gc2F2
ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICBBdG9taWNIVE1MVG9r
ZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGZvcm1hdHRpbmdFbGVtZW50LT5sb2Nh
bE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gY3JlYXRlRWxl
bWVudChmYWtlVG9rZW4pOworICAgICAgICAvLyA5CisgICAgICAgIHJlcGFyZW50Q2hpbGRyZW4o
ZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLCBuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAgLy8g
MTAKKyAgICAgICAgZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLT5wYXJzZXJBZGRDaGlsZChuZXdF
bGVtZW50KTsKKyAgICAgICAgLy8gMTEKKyAgICAgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsg
Ly8gaW5zZXJ0IG5ldyBlbGVtZW50IGF0IGJvb2ttYXJrCisgICAgICAgIC8vIDEyCisgICAgICAg
IG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIG1fb3Bl
bkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2spOworICAgIH0K
K30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewpAQCAtNzg2LDcgKzEw
NjQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoMVRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgzVGFnIHx8IHRva2Vu
Lm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5hbWUo
KSkpIHsKICAgICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5TY29wZSh0b2tlbi5uYW1l
KCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtODAyLDkgKzEwODAsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gVGFrZSBhIGRlZXAgYnJlYXRoLgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBjb2Rl
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZm9udFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbm9iclRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykgewotICAgICAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgY29tcGxpY2F0
ZWQgYWxnb3JpdGhtIHRoYXQgZ29lcyBoZXJlLgorICAgICAgICBpZiAoaXNGb3JtYXR0aW5nVGFn
KHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGNhbGxUaGVBZG9wdGlvbkFnZW5jeSh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4u
bmFtZSgpID09IG9iamVjdFRhZykgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVl
QnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IGY1MTNmMmFm
NWIzMzY1MDcxOGZhNzgyODU0MTFjZGM1ZWY0NTk0YjIuLmJiNzZiOWNhMzUxYzA5NjBmODZjYWM0
ZjcyMTZkYjI2MWE1NjVmYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxk
ZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTEyNSw2ICsxMjUs
MTEgQEAgcHJpdmF0ZToKICAgICBib29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwog
CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9ja0ZvckZv
cm1hdHRpbmdFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGZpbmRGb3N0ZXJQYXJlbnRGb3Io
RWxlbWVudCopOworICAgIHZvaWQgcmVwYXJlbnRDaGlsZHJlbihFbGVtZW50KiBvbGRQYXJlbnQs
IEVsZW1lbnQqIG5ld1BhcmVudCk7CisgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRv
bWljSFRNTFRva2VuJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZFR5cGU+CiAgICAg
UGFzc1JlZlB0cjxDaGlsZFR5cGU+IGF0dGFjaChOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8Q2hp
bGRUeXBlPiBwcnBDaGlsZCkKICAgICB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmZWUwN2RkZGU1NzExNGI2ZmUzNGNl
Y2Y4ZDAyZmY1NTYzNmVmZDZhLi5mMmVkZDkzODg1ZmE2ZGVjMzhlZjJkYzIwMjZhYjEyOTdmMGFi
ZjQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKQEAgLTE1Miw2ICsxNTIsNyBAQCBpbmxpbmUgRnJhbWU6OkZyYW1lKFBhZ2Uq
IHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxvYWRlcgog
ICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKICAgICAsIG1fZXhjbHVkZUZyb21UZXh0U2Vh
cmNoKGZhbHNlKQogeworICAgIEFTU0VSVChwYWdlKTsKICAgICBBdG9taWNTdHJpbmc6OmluaXQo
KTsKICAgICBIVE1MTmFtZXM6OmluaXQoKTsKICAgICBRdWFsaWZpZWROYW1lOjppbml0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60451</attachid>
            <date>2010-07-03 08:56:30 -0700</date>
            <delta_ts>2010-07-03 23:28:54 -0700</delta_ts>
            <desc>fix cr-linux</desc>
            <filename>bug-41453-20100703085617.patch</filename>
            <type>text/plain</type>
            <size>43570</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNzM3MDAwYmZhN2U0MGE5MzE1NTFmOTA4OWI5MmJkNjNhN2NhZDk5Li40MmJmNWQ5
YjU4Yjc3ZTQyYTU1YmMxN2FjYTU5ZTU4MmM2NGZjNDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDctMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUxUcmVlQnVpbGRlciBuZWVk
cyBhbiBhZG9wdGlvbiBhZ2VuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDUzCisKKyAgICAgICAgQWRkZWQgbmV3IGFkb3B0aW9uMDEgc3VpdGUg
Zm9yIHRlc3RpbmcgYWRvcHRpb24gYWdlbmN5CisgICAgICAgIGJ1Z3MuICBSaWdodCBub3cgb25s
eSB0aGUgc2ltcGxlc3QgYWRvcHRpb24gdGVzdCBwYXNzZXMuCisgICAgICAgIEknbGwgYmUgYWRk
aW5nIG1vcmUgaW4gZnV0dXJlIGNvbW1pdHMuCisKKyAgICAgICAgKiBodG1sNWxpYi9yZXNvdXJj
ZXMvYWRvcHRpb24wMS5kYXQ6IEFkZGVkLgorICAgICAgICAqIGh0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC1odG1sNS50eHQ6CisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBodG1sNWxpYi9ydW5uZXIuaHRtbDoKKwogMjAxMC0wNy0wMyAgUm9iZXJ0IEhv
Z2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBVcGRhdGUgUXQgZXhwZWN0
ZWQgcmVzdWx0cyBhZnRlciByNjI0NDQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGli
L3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBiL0xheW91dFRlc3RzL2h0bWw1bGliL3Jlc291cmNl
cy9hZG9wdGlvbjAxLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzRmN2FmNzNkNWNjMGJiMTU5OGQ4MTY5YjZk
Mjg5MjBmNmUwOTlmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcmVz
b3VyY2VzL2Fkb3B0aW9uMDEuZGF0CkBAIC0wLDAgKzEsODQgQEAKKyNkYXRhCis8YT48cD48L2E+
PC9wPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICA8cD4KK3wgICAgICAgPGE+CisKKyNkYXRhCis8YT4xPHA+Mjwv
YT4zPC9wPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxi
b2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAg
ICAgICAgICIyIgorfCAgICAgICAiMyIKKworI2RhdGEKKzxhPjE8YnV0dG9uPjI8L2E+MzwvYnV0
dG9uPgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgICA8YnV0dG9uPgorfCAgICAgICAgICIy
IgorfCAgICAgIjMiCisKKyNkYXRhCis8YT4xPGI+MjwvYT4zPC9iPgorI2Vycm9ycworI2RvY3Vt
ZW50Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAg
ICIxIgorfCAgICAgICA8Yj4KK3wgICAgICAgICAiMiIKK3wgICAgIDxiPgorfCAgICAgICAiMyIK
KworI2RhdGEKKzxhPjE8ZGl2PjI8ZGl2PjM8L2E+NDwvZGl2PjU8L2Rpdj4KKyNlcnJvcnMKKyNk
b2N1bWVudAorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAg
ICAgICAiMSIKK3wgICAgIDxkaXY+Cit8ICAgICAgIDxhPgorfCAgICAgICAgICIyIgorfCAgICAg
ICA8ZGl2PgorfCAgICAgICAgIDxhPgorfCAgICAgICAgICAgIjMiCit8ICAgICAgICAgIjQiCit8
ICAgICAgICI1IgorCisjZGF0YQorPHRhYmxlPjxhPjE8cD4yPC9hPjM8L3A+CisjZXJyb3JzCisj
ZG9jdW1lbnQKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wg
ICAgICAgIjEiCit8ICAgICA8cD4KK3wgICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAg
ICIzIgorfCAgICAgPHRhYmxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVu
bmVyLWV4cGVjdGVkLWh0bWw1LnR4dCBiL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC1odG1sNS50eHQKaW5kZXggMGQ4Mjk0NThhN2M0NTZhYzg0Y2IyMTAyYjg5OGVmNjQzZWM2
NmI3YS4uM2U0MmJhODM1MmE1M2NhNTNlN2ZkOTliYWMyNDk0NzM4MmFjNWUyMCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dAorKysgYi9M
YXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CkBAIC0xMjksNyAr
MTI5LDcgQEAgR290OgogfCAgICAgICAgIDxhPgogfCAgICAgICAgICAgPGE+CiB8ICAgICAgICAg
ICAgICJZIgotfCAgICAgICAgICAgICAiWiIKK3wgICAgICAgICAgICJaIgogRXhwZWN0ZWQ6CiB8
IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTUwLDcgKzE1MCw4IEBAIEdvdDoKIHwgICA8Ym9keT4K
IHwgICAgIDxiPgogfCAgICAgICA8Yj4KLXwgICAgICAgICA8YnV0dG9uPgorfCAgICAgICA8YnV0
dG9uPgorfCAgICAgICAgIDxiPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAt
Mzg4LDcgKzM4OSw4IEBAIEdvdDoKIHwgICA8aGVhZD4KIHwgICA8Ym9keT4KIHwgICAgIDxiPgot
fCAgICAgICA8cD4KK3wgICAgIDxwPgorfCAgICAgICA8Yj4KIHwgICAgICAgICAiVEVTVCIKIEV4
cGVjdGVkOgogfCA8aHRtbD4KQEAgLTQzNSw3ICs0MzcsNyBAQCBHb3Q6CiB8ICAgICAgICAgPGZv
bnQ+CiB8ICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgImNydWVsIgotfCAgICAgICAgICAg
ICAid29ybGQiCit8ICAgICAgICAgIndvcmxkIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxo
ZWFkPgpAQCAtNTI1LDkgKzUyNywxMCBAQCBHb3Q6CiB8ICAgICAgIDxiPgogfCAgICAgICAgIDxj
aXRlPgogfCAgICAgICAgICAgIkIiCi18ICAgICAgICAgICA8ZGl2PgotfCAgICAgICAgICAgICAi
QyIKLXwgICAgICAgICAgICAgIkQiCit8ICAgICAgIDxkaXY+Cit8ICAgICAgICAgPGI+Cit8ICAg
ICAgICAgICAiQyIKK3wgICAgICAgICAgICJEIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxo
ZWFkPgpAQCAtNTYxLDkgKzU2NCwxMyBAQCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGNpdGU+CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT4KIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGk+Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGRpdj4KLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYIgotfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRFU1QiCit8ICAgICAgICAgICAgIDxpPgor
fCAgICAgICAgICAgICAgIDxpPgorfCAgICAgICAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAg
ICAgICAgIDxkaXY+Cit8ICAgICAgICAgICAgICAgICAgICAgPGI+Cit8ICAgICAgICAgICAgICAg
ICAgICAgICAiWCIKK3wgICAgICAgICAgICAgICAgICAgICAgICJURVNUIgogRXhwZWN0ZWQ6CiB8
IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtNjk3LDcgKzcwNCw5IEBAIEdvdDoKIHwgICAgICAgICA8
Yj4KIHwgICAgICAgICAgIDxpPgogfCAgICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAg
IDxwPgorfCAgICAgICAgIDxpPgorfCAgICAgICAgICAgPHA+Cit8ICAgICAgICAgICAgIDxiPgog
fCAgICAgICAgICAgICAgICIgamtsICIKIEV4cGVjdGVkOgogfCA8aHRtbD4KQEAgLTcyNyw3ICs3
MzYsOSBAQCBHb3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAg
ICAgIiBnaGkgIgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICAg
IDxwPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8ICAgICAg
ICAgICAgICAgIiBtbm8iCiBFeHBlY3RlZDoKQEAgLTc1OSw3ICs3NzAsMTAgQEAgR290OgogfCAg
ICAgICAgIDxiPgogfCAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAg
ICAgICAgICAgPHA+Cit8ICAgICAgICAgPGk+Cit8ICAgICAgICAgPHA+Cit8ICAgICAgICAgICA8
aT4KK3wgICAgICAgICAgICAgPGI+CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAg
ICAgICAgICIgbW5vICIKIEV4cGVjdGVkOgpAQCAtNzkyLDcgKzgwNiwxMCBAQCBHb3Q6CiB8ICAg
ICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBnaGkgIgotfCAgICAg
ICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wgICAgICAgICAgIDxp
PgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8ICAgICAgICAg
ICAgICAgIiBtbm8gIgogfCAgICAgICAgICAgICAgICIgcHFyIgpAQCAtODI3LDcgKzg0NCwxMCBA
QCBHb3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBn
aGkgIgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wg
ICAgICAgICAgIDxpPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAi
CiB8ICAgICAgICAgICAgICAgIiBtbm8gIgogfCAgICAgICAgICAgICAgICIgcHFyICIKQEAgLTg2
MiwxMSArODgyLDE0IEBAIEdvdDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAgICAgIDxpPgogfCAg
ICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAgIDxwPgorfCAgICAgICAgIDxpPgorfCAg
ICAgICAgIDxwPgorfCAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAgIDxiPgogfCAgICAgICAg
ICAgICAgICIgamtsICIKIHwgICAgICAgICAgICAgICAiIG1ubyAiCiB8ICAgICAgICAgICAgICAg
IiBwcXIgIgotfCAgICAgICAgICAgICAiIHN0dSIKK3wgICAgICAgICAiIHN0dSIKIEV4cGVjdGVk
OgogfCA8aHRtbD4KIHwgICA8aGVhZD4KQEAgLTEwMTIsMTAgKzEwMzUsOSBAQCBHb3Q6CiB8ICAg
ICA8c3RyaWtlPgogfCAgICAgICA8c3RyaWtlPgogfCAgICAgICAgIDxjb2RlPgotfCAgICAgICAg
ICAgPGNvZGU+Ci18ICAgICAgICAgICAgIDxjb2RlPgotfCAgICAgICAgICAgICAgIDxjb2RlPgot
fCAgICAgICAgICAgICAgICAgPHN0cmlrZT4KK3wgICAgICAgPGNvZGU+Cit8ICAgICAgICAgPGNv
ZGU+Cit8ICAgICAgICAgICA8c3RyaWtlPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFk
PgpAQCAtMTE0OSw3ICsxMTcxLDggQEAgR290OgogfCAgIDxib2R5PgogfCAgICAgPGI+CiB8ICAg
ICAgIDxiPgotfCAgICAgICAgIDxidXR0b24+Cit8ICAgICAgIDxidXR0b24+Cit8ICAgICAgICAg
PGI+CiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8ICAgPGhlYWQ+CkBAIC0xMjUxLDcgKzEyNzQsNyBA
QCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICAgICAgIDxi
PgogfCAgICAgICAgICAgICAgICAgICAgICAgPGVtPgotfCAgICAgICAgICAgICAgICAgICAgICAg
ICA8bGk+Cit8ICAgICAgICAgICAgICAgICAgICAgPGxpPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgog
fCAgIDxoZWFkPgpAQCAtMTkwMCw4ICsxOTIzLDggQEAgR290OgogfCAgICAgPG5vYnI+CiB8ICAg
ICAgIDxub2JyPgogfCAgICAgICAgIDxub2JyPgorfCAgICAgICAgIDxub2JyPgogfCAgICAgICAg
ICAgPG5vYnI+Ci18ICAgICAgICAgICAgIDxub2JyPgogRXhwZWN0ZWQ6CiB8IDwhRE9DVFlQRSBo
dG1sPgogfCA8aHRtbD4KQEAgLTMxMDAsNyArMzEyMyw4IEBAIEdvdDoKIHwgICAgIDxiPgogfCAg
ICAgICAiYSIKIHwgICAgICAgPGRpdj4KLXwgICAgICAgPGRpdj4KK3wgICAgIDxkaXY+Cit8ICAg
ICAgIDxiPgogfCAgICAgICAgICJ5IgogRXhwZWN0ZWQ6CiB8IDxodG1sPgpAQCAtMzEyMCw3ICsz
MTQ0LDggQEAgR290OgogfCAgIDxoZWFkPgogfCAgIDxib2R5PgogfCAgICAgPGE+Ci18ICAgICAg
IDxkaXY+Cit8ICAgICA8ZGl2PgorfCAgICAgICA8YT4KIHwgICAgICAgICA8cD4KIEV4cGVjdGVk
OgogfCA8aHRtbD4KQEAgLTU0ODgsNCArNTUxMywxMjkgQEAgRXhwZWN0ZWQ6CiByZXNvdXJjZXMv
ZW50aXRpZXMwMi5kYXQ6IFBBU1MKIAogcmVzb3VyY2VzL2NvbW1lbnRzMDEuZGF0OiBQQVNTCisK
K3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdDoKKzIKKzMKKzQKKzUKKzYKKworVGVzdCAyIG9mIDYg
aW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0IGZhaWxlZC4gSW5wdXQ6Cis8YT4xPHA+MjwvYT4z
PC9wPgorR290OgorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgor
fCAgICAgICAiMSIKK3wgICAgIDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAg
ICAgICAiMyIKK0V4cGVjdGVkOgorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wg
ICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgIDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAi
MiIKK3wgICAgICAgIjMiCisKK1Rlc3QgMyBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRh
dCBmYWlsZWQuIElucHV0OgorPGE+MTxidXR0b24+MjwvYT4zPC9idXR0b24+CitHb3Q6Cit8IDxo
dG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAg
ICAgICA8YT4KK3wgICAgICAgPGJ1dHRvbj4KK3wgICAgICAgICA8YT4KK3wgICAgICAgICAgICIy
IgorfCAgICAgICAgICAgIjMiCitFeHBlY3RlZDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAg
PGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICAgIDxidXR0b24+Cit8ICAgICAg
ICAgIjIiCit8ICAgICAiMyIKKworVGVzdCA0IG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEu
ZGF0IGZhaWxlZC4gSW5wdXQ6Cis8YT4xPGI+MjwvYT4zPC9iPgorR290OgorfCA8aHRtbD4KK3wg
ICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgICAgPGE+
Cit8ICAgICAgICAgPGI+Cit8ICAgICAgICAgICAiMiIKK3wgICAgICAgIjMiCitFeHBlY3RlZDoK
K3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEi
Cit8ICAgICAgIDxiPgorfCAgICAgICAgICIyIgorfCAgICAgPGI+Cit8ICAgICAgICIzIgorCitU
ZXN0IDUgb2YgNiBpbiByZXNvdXJjZXMvYWRvcHRpb24wMS5kYXQgZmFpbGVkLiBJbnB1dDoKKzxh
PjE8ZGl2PjI8ZGl2PjM8L2E+NDwvZGl2PjU8L2Rpdj4KK0dvdDoKK3wgPGh0bWw+Cit8ICAgPGhl
YWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICA8ZGl2PgorfCAg
ICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgICA8ZGl2PgorfCAgICAgICAgICAgIjMi
Cit8ICAgICAgICAgICAiNCIKK3wgICAgICI1IgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxo
ZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPGRpdj4KK3wg
ICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAgIDxkaXY+Cit8ICAgICAgICAgPGE+Cit8
ICAgICAgICAgICAiMyIKK3wgICAgICAgICAiNCIKK3wgICAgICAgIjUiCisKK1Rlc3QgNiBvZiA2
IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgorPHRhYmxlPjxhPjE8
cD4yPC9hPjM8L3A+CitHb3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAg
ICAgPHRhYmxlPgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5Pgor
fCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAgICAgICAg
ICIyIgorfCAgICAgICAiMyIKK3wgICAgIDx0YWJsZT4KICNFT0YKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odG1sNWxp
Yi9ydW5uZXItZXhwZWN0ZWQudHh0CmluZGV4IDMwMTk3ZWQ1NmQxZTJjZjBhZWNkOGFlNDMyNWU5
N2FiODE4MTBmZDcuLjNjYjM3NjhjNTg1NjA4ZjhhNmQ1Y2JlZTE1MTA5MmZhZDJjNDI1NTMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dApAQCAtNDg1OSwzICs0ODU5
LDQ4IEBAIEV4cGVjdGVkOgogcmVzb3VyY2VzL2VudGl0aWVzMDIuZGF0OiBQQVNTCiAKIHJlc291
cmNlcy9jb21tZW50czAxLmRhdDogUEFTUworCityZXNvdXJjZXMvYWRvcHRpb24wMS5kYXQ6Cisx
Cis2CisKK1Rlc3QgMSBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElu
cHV0OgorPGE+PHA+PC9hPjwvcD4KK0dvdDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJv
ZHk+Cit8ICAgICA8YT4KK3wgICAgIDxwPgorRXhwZWN0ZWQ6Cit8IDxodG1sPgorfCAgIDxoZWFk
PgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICA8cD4KK3wgICAgICAgPGE+CisKK1Rlc3Qg
NiBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgorPHRhYmxl
PjxhPjE8cD4yPC9hPjM8L3A+CitHb3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgICA8cD4KK3wgICAgICAgICAiMiIKK3wg
ICAgICAgICAiMyIKK3wgICAgIDx0YWJsZT4KK3wgICAgICAgPHRib2R5PgorRXhwZWN0ZWQ6Cit8
IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgor
fCAgICAgPHA+Cit8ICAgICAgIDxhPgorfCAgICAgICAgICIyIgorfCAgICAgICAiMyIKK3wgICAg
IDx0YWJsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci5odG1sIGIv
TGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKaW5kZXggOWY3NDU2ODAzMmMwZGNkYzYy
NWViZTc5YWIzMGNhODk3Y2RmNDVlYy4uZjMwNTJmMDkzZmU0NGJhNWEzOWQzZTFmOGJhNGJkMTkz
NzcxNTQxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLmh0bWwKQEAgLTU4LDcgKzU4LDggQEAgdmFy
IHRlc3RfZmlsZXMgPSBbCiAgICAgICAgICdyZXNvdXJjZXMvc2NyaXB0ZGF0YTAxLmRhdCcsCiAg
ICAgICAgICdyZXNvdXJjZXMvZW50aXRpZXMwMS5kYXQnLAogICAgICAgICAncmVzb3VyY2VzL2Vu
dGl0aWVzMDIuZGF0JywKLSAgICAgICAgJ3Jlc291cmNlcy9jb21tZW50czAxLmRhdCcKKyAgICAg
ICAgJ3Jlc291cmNlcy9jb21tZW50czAxLmRhdCcsCisgICAgICAgICdyZXNvdXJjZXMvYWRvcHRp
b24wMS5kYXQnCiAgICAgXSwKICAgICB0ZXN0cyA9IFtdLAogICAgIGlmcmFtZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpZnJhbWUiKVswXSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWIzYTE2MzAxNjY4NTNjNzIzMTYz
MDNkYzdiOWU2Yzg0NDY3ZDFkMy4uM2E2NTIwMzNlNDcwZjRiMjc5MDUxYjJjZWZiN2NiMjQxYjAz
MDFmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wNy0wMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SFRNTFRyZWVCdWlsZGVyIG5lZWRzIGFuIGFkb3B0aW9uIGFnZW5jeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE0NTMKKworICAgICAgICBUaGlzIGNo
YW5nZXMgc29tZSB0ZXN0IHJlc3VsdHMsIGJ1dCBvbmx5IG1ha2VzIHRoZSBzaW1wbGVzdAorICAg
ICAgICBhZG9wdGlvbiBhZ2VuY3kgY2FzZXMgcGFzcy4gIEkgdGhpbmsgdGhlIGNvZGUgaXMgbGlr
ZWx5CisgICAgICAgIHZlcnkgY2xvc2UsIGJ1dCBmdXJ0aGVyIGl0ZXJhdGlvbiB0byBtYWtlIHRo
aXMgY2hhbmdlIGxhcmdlcgorICAgICAgICBzZWVtcyBjb3VudGVyLXByb2R1Y3RpdmUuICBJIHJl
Y29tbWVuZCB3ZSBjaGVjayBpbiB0aGlzCisgICAgICAgIHByb2dyZXNzaW9uIGFuZCB3b3JrIGZy
b20gaGVyZS4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OmFkZENoaWxkQ29tbW9uKToKKyAgICAgICAgIC0gTWFrZSBz
dXJlIGNhbGxlcnMgZG9uJ3QgYXNzdW1lIHRoaXMgd2lsbCByZXBhcmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKToKKyAgICAgICAgIC0gVXBkYXRl
IGNvbW1lbnQgdG8gZG9jdW1lbnQgbGFjayBvZiByZXBhcmVudGluZyBiZWhhdmlvci4KKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6RWxlbWVudFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkOjppc0Fib3ZlKToKKyAgICAgICAgIC0gQWRkZWQgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUpOgorICAgICAgICAgLSBO
ZWVkZWQgZm9yIHRoZSBhZG9wdGlvbiBhZ2VuY3kuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjp0b3BSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6Ym90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhU
TUxIZWFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjp0b3Btb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50U3RhY2s6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50U3RhY2s6Omh0bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3Rh
Y2s6OmhlYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmJv
ZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21t
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29t
bW9uKToKKyAgICAgICAgIC0gRml4IHRoZSBuYW1lIHRvIG1hdGNoIHRvcC9ib3R0b20uCisgICAg
ICAgICogaHRtbC9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVsZWFzZU5leHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6c2V0TmV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmZpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKToK
KyAgICAgICAgKiBodG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c2l6ZSk6CisgICAgICAgICogaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpmdXJ0
aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQpOgorICAgICAgICAgLSBQYXJ0IG9mIHRoZSBB
ZG9wdGlvbiBBZ2VuY3kgYWxnb3JpdGhtLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpmaW5kRm9zdGVyUGFyZW50Rm9yKToKKyAgICAgICAgIC0gVXNlZCB0byBtb3ZlIG1pcy1u
ZXN0ZWQgY29udGVudCBvdXQgb2YgdGFibGVzLgorICAgICAgICAgICBUaGlzIGRvZXNuJ3Qgc2Vl
bSB0byB3b3JrIHF1aXRlIHJpZ2h0IHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6cmVwYXJlbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxk
ZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgICAtIFRoZSByaWRpY3Vsb3VzbHkg
bG9uZy9jb21wbGljYXRlZCBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtIGZyb20gSFRNTDUuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAg
ICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmg6CisKIDIwMTAtMDctMDMgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAppbmRleCA0YzRmMjA4OGVkMzVkZGE4YmU2MzZhMGUzYjI0YjYwM2Vk
OTUzNWVmLi42NTM5ZTViMzAyMjFjOGY3MmFlMmM0ZjIxZjJlYWFhYTIyYjg2MzIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcApAQCAtNTM5LDYgKzUzOSw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBw
ZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJv
CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6YWRkQ2hpbGRDb21tb24oTm9kZSogbmV3Q2hpbGQpCiB7
CisgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAvLyBVc2UgYXBwZW5kQ2hpbGQgaWYg
eW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nLgogICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2go
KTsKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0
aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KQEAgLTU1NSw3ICs1NTYsNyBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQpCiB7
CiAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNl
ZCBkdXJpbmcgcGFyc2luZy4KLSAgICAvLyBJdCBkb2VzIG5vdCBzZW5kIGFueSBET00gbXV0YXRp
b24gZXZlbnRzLgorICAgIC8vIEl0IGRvZXMgbm90IHNlbmQgYW55IERPTSBtdXRhdGlvbiBldmVu
dHMgb3IgaGFuZGxlIHJlcGFyZW50aW5nLgogCiAgICAgYWRkQ2hpbGRDb21tb24obmV3Q2hpbGQu
Z2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3BwCmluZGV4IDcwNzYxYzZlMjA0MzJm
YTgxMTBiYmNlMWM4YTNkMzlkNGJkMGIxNGYuLjI3NGM2Nzg0YzUyYWJkN2NhZjI4ZGI0NWIyN2M5
ZWQ2MjdhZmJlMTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTM4LDIzICszOCwz
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LWNsYXNzIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQgOiBwdWJsaWMgTm9uY29weWFi
bGUgewotcHVibGljOgotICAgIEVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpCi0gICAgICAgIDogbV9lbGVtZW50
KGVsZW1lbnQpCi0gICAgICAgICwgbV9uZXh0KG5leHQpCi0gICAgewotICAgIH0KK0hUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpCisgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKKyAgICAsIG1fbmV4dChuZXh0KQoreworICAgIEFTU0VSVChtX2VsZW1lbnQp
OworfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5n
ZXQoKTsgfQotICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQu
Z2V0KCk7IH0KLSAgICBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IHJlbGVhc2VOZXh0KCkgeyBy
ZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQotICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPEVs
ZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQoreworfQorCit2b2lkIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgLy8gRklYTUU6IFNob3VsZCB0
aGlzIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPworICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7
Cit9CiAKLXByaXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBPd25Q
dHI8RWxlbWVudFJlY29yZD4gbV9uZXh0OwotfTsKK2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBvdGhlcikgY29uc3QKK3sKKyAgICBm
b3IgKEVsZW1lbnRSZWNvcmQqIGJlbG93ID0gbmV4dCgpOyBiZWxvdzsgYmVsb3cgPSBiZWxvdy0+
bmV4dCgpKSB7CisgICAgICAgIGlmIChiZWxvdyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIEhUTUxFbGVtZW50U3RhY2s6
OkhUTUxFbGVtZW50U3RhY2soKQogICAgIDogbV9odG1sRWxlbWVudCgwKQpAQCAtMTA0LDYgKzEx
Myw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWwoRWxlbWVudCogZWxlbWVudCkK
IAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKIHsKKyAgICBBU1NFUlQoIW1fdG9wKTsgLy8gPGh0bWw+IHNob3Vs
ZCBhbHdheXMgYmUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCiAgICAgQVNTRVJUKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCFtX2h0bWxFbGVt
ZW50KTsKICAgICBtX2h0bWxFbGVtZW50ID0gZWxlbWVudC5nZXQoKTsKQEAgLTEzNSwxMSArMTQ1
LDQ2IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQpCiAgICAgcHVzaENvbW1vbihlbGVtZW50KTsKIH0KIAordm9pZCBIVE1MRWxlbWVudFN0
YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEVsZW1lbnRSZWNv
cmQqIHJlY29yZEJlbG93KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQocmVj
b3JkQmVsb3cpOworICAgIEFTU0VSVChtX3RvcCk7CisgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CisgICAgQVNTRVJUKG1faHRtbEVsZW1lbnQpOworICAg
IGlmIChyZWNvcmRCZWxvdyA9PSBtX3RvcCkgeworICAgICAgICBwdXNoKGVsZW1lbnQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmRBYm92
ZSA9IG1fdG9wLmdldCgpOyByZWNvcmRBYm92ZTsgcmVjb3JkQWJvdmUgPSByZWNvcmRBYm92ZS0+
bmV4dCgpKSB7CisgICAgICAgIGlmIChyZWNvcmRBYm92ZS0+bmV4dCgpICE9IHJlY29yZEJlbG93
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVjb3JkQWJvdmUtPnNldE5leHQo
bmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwgcmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKTsK
KyAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdDaGls
ZHJlbigpOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6dG9wUmVjb3JkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90b3AuZ2V0KCk7Cit9CisKIEVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fdG9wLT5lbGVtZW50KCk7CiB9CiAKK0VsZW1lbnQqIEhUTUxF
bGVtZW50U3RhY2s6OmJvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGh0bWxFbGVtZW50KCk7
Cit9CisKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQgPT0gZWxlbWVudCk7CkBA
IC0xNDgsNyArMTkzLDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2hl
YWRFbGVtZW50ID0gMDsKLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsKKyAgICBy
ZW1vdmVOb25Ub3BDb21tb24oZWxlbWVudCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0xNTgsNDUgKzIwMyw1OCBAQCB2b2lkIEhUTUxF
bGVtZW50U3RhY2s6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBwb3AoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZW1vdmVOb25GaXJzdENvbW1vbihlbGVtZW50KTsK
KyAgICByZW1vdmVOb25Ub3BDb21tb24oZWxlbWVudCk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRT
dGFjazo6Y29udGFpbnMoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK0hUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OmZpbmQoRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKICAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7
IHBvcyA9IHBvcy0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChwb3MtPmVsZW1lbnQoKSA9PSBlbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gcG9zOwog
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKK0hUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdAoreworICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9z
ID0gbV90b3AuZ2V0KCk7IHBvczsgcG9zID0gcG9zLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHBv
cy0+ZWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodGFnTmFtZSkpCisgICAgICAgICAgICByZXR1cm4g
cG9zOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpj
b250YWlucyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGVsZW1l
bnQpOwogfQogCiBuYW1lc3BhY2UgewogCi1pbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgYm9vbCBpc1Njb3BlTWFya2VyKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKQorICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGJ1dHRvblRhZykKICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKQorICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcnF1ZWVUYWcpCisgICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KHRhYmxlVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKQogICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKGJ1dHRvblRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShtYXJxdWVl
VGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykKICNpZiBFTkFC
TEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKQogI2VuZGlmCiAgICAgICAgIDsKIH0KIAotaW5saW5l
IGJvb2wgaXNMaXN0SXRlbVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCitpbmxp
bmUgYm9vbCBpc0xpc3RJdGVtU2NvcGVNYXJrZXIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBy
ZXR1cm4gaXNTY29wZU1hcmtlcihlbGVtZW50KQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKG9sVGFnKQogICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKTsKIH0KLWlu
bGluZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5s
aW5lIGJvb2wgaXNUYWJsZVNjb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZSh0YWJsZVRhZyk7CkBAIC0yMDQsNyArMjYyLDcgQEAgaW5saW5lIGJvb2wgaXNUYWJs
ZVNjb3BlTWFya2VyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAKIH0KIAotdGVtcGxhdGUgPGJv
b2wgaXNNYXJrZXIoY29uc3QgRWxlbWVudCopPgordGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoRWxl
bWVudCopPgogYm9vbCBpblNjb3BlQ29tbW9uKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIHRvcCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXRUYWcpCiB7CiAgICAgZm9yIChIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBwb3MgPSB0b3A7IHBvczsgcG9zID0gcG9zLT5u
ZXh0KCkpIHsKQEAgLTI0NiwxOSArMzA0LDE5IEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5U
YWJsZVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFyZ2V0VGFnKSBjb25zdAogICAgIHJldHVy
biBpblNjb3BlQ29tbW9uPGlzVGFibGVTY29wZU1hcmtlcj4obV90b3AuZ2V0KCksIHRhcmdldFRh
Zyk7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkKK0VsZW1l
bnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9odG1sRWxlbWVudCk7CiAgICAgcmV0dXJuIG1faHRtbEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQq
IEhUTUxFbGVtZW50U3RhY2s6OmhlYWRFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3Rh
Y2s6OmhlYWRFbGVtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCk7CiAg
ICAgcmV0dXJuIG1faGVhZEVsZW1lbnQ7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6
OmJvZHlFbGVtZW50KCkKK0VsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9ib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fYm9keUVs
ZW1lbnQ7CkBAIC0yNjYsNiArMzI0LDcgQEAgRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6Ym9k
eUVsZW1lbnQoKQogCiB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24oUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50KQogeworICAgIEFTU0VSVChtX2h0bWxFbGVtZW50KTsKICAgICBt
X3RvcC5zZXQobmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwgbV90b3AucmVsZWFzZSgpKSk7CiAg
ICAgdG9wKCktPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CiB9CkBAIC0yNzksMTMgKzMzOCwxMiBA
QCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcENvbW1vbigpCiAgICAgbV90b3AgPSBtX3RvcC0+
cmVsZWFzZU5leHQoKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25GaXJz
dENvbW1vbihFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVO
b25Ub3BDb21tb24oRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwotICAgIEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1f
dG9wLmdldCgpOwotICAgIEFTU0VSVChwb3MtPmVsZW1lbnQoKSAhPSBlbGVtZW50KTsKLSAgICB3
aGlsZSAocG9zLT5uZXh0KCkpIHsKKyAgICBBU1NFUlQodG9wKCkgIT0gZWxlbWVudCk7CisgICAg
Zm9yIChFbGVtZW50UmVjb3JkKiBwb3MgPSBtX3RvcC5nZXQoKTsgcG9zOyBwb3MgPSBwb3MtPm5l
eHQoKSkgewogICAgICAgICBpZiAocG9zLT5uZXh0KCktPmVsZW1lbnQoKSA9PSBlbGVtZW50KSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdG8gY2FsbCBmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKQogICAgICAgICAgICAgLy8gd2hlbiB0aGUgY2hpbGRyZW4gYXJlbid0IGFjdHVhbGx5
IGZpbmlzaGVkPwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaCBi
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKaW5kZXggOGNhN2M4MWMzZjczZTdmN2Q2
Zjc1OTZlZTJlMjJlNjhiN2M0ODc1YS4uNTUzNDg0ZjM4MThjNjY5OTRlMWNkOGYxZWU1ZjRmZDg4
YzBjYjNlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCkBAIC0yNiwyMSArMjYsNTIgQEAKICNp
Zm5kZWYgSFRNTEVsZW1lbnRTdGFja19oCiAjZGVmaW5lIEhUTUxFbGVtZW50U3RhY2tfaAogCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXRvbWlj
U3RyaW5nOwogY2xhc3MgRWxlbWVudDsKIAorLy8gTk9URTogVGhlIEhUTUw1IHNwZWMgdXNlcyBh
IGJhY2t3YXJkcyAoZ3Jvd3MgZG93bndhcmQpIHN0YWNrLiAgV2UncmUgdXNpbmcKKy8vIG1vcmUg
c3RhbmRhcmQgKGdyb3dzIHVwd2FyZHMpIHN0YWNrIHRlcm1pbm9sb2d5IGhlcmUuCiBjbGFzcyBI
VE1MRWxlbWVudFN0YWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBIVE1M
RWxlbWVudFN0YWNrKCk7CiAgICAgfkhUTUxFbGVtZW50U3RhY2soKTsKIAorICAgIGNsYXNzIEVs
ZW1lbnRSZWNvcmQgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
fkVsZW1lbnRSZWNvcmQoKTsgLy8gUHVibGljIGZvciB+UGFzc093blB0cigpCisgICAgCisgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0K
KyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKworICAg
ICAgICBib29sIGlzQWJvdmUoRWxlbWVudFJlY29yZCopIGNvbnN0OworCisgICAgICAgIEVsZW1l
bnRSZWNvcmQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBwcml2
YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKKworICAgICAgICBF
bGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29y
ZD4pOworCisgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVsZWFzZU5leHQoKSB7
IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CisgICAgICAgIHZvaWQgc2V0TmV4dChQYXNzT3du
UHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorCisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBt
X25leHQ7CisgICAgfTsKKyAgICAKICAgICBFbGVtZW50KiB0b3AoKSBjb25zdDsKKyAgICBFbGVt
ZW50UmVjb3JkKiB0b3BSZWNvcmQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBib3R0b20oKSBjb25z
dDsKKyAgICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKKyAgICBFbGVtZW50
UmVjb3JkKiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CisKKyAg
ICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsK
IAogICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIHB1c2hIVE1M
SHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CkBAIC02MywxNiArOTQsMTQgQEAgcHVi
bGljOgogICAgIGJvb2wgaW5MaXN0SXRlbVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkgY29uc3Q7CiAgICAgYm9vbCBpblRhYmxlU2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIGh0bWxFbGVtZW50KCk7Ci0gICAgRWxlbWVudCog
aGVhZEVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpOworICAgIEVsZW1lbnQq
IGh0bWxFbGVtZW50KCkgY29uc3Q7CisgICAgRWxlbWVudCogaGVhZEVsZW1lbnQoKSBjb25zdDsK
KyAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpIGNvbnN0OwogCi0gICAgLy8gUHVibGljIHNvIGZy
ZWUgZnVuY3Rpb25zIGNhbiB1c2UgaXQsIGJ1dCBkZWZpbmVkIHByaXZhdGVseS4KLSAgICBjbGFz
cyBFbGVtZW50UmVjb3JkOwogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0
cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKLSAgICB2b2lkIHJlbW92ZU5vbkZp
cnN0Q29tbW9uKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50
Kik7CiAKICAgICBPd25QdHI8RWxlbWVudFJlY29yZD4gbV90b3A7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAppbmRleCBlNzBkZTQyZjRkMmUxNjE3ZjI4YmNk
MDhjMmM0NDQxZGYyODgxNjI1Li5mOGUxZGQ1ZDU5YWZlMDVlMDE0NmFhMTYwN2FlYmFiZTNkYjI4
OWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC02
NCw2ICs2NCwxNiBAQCB2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpyZXBs
YWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbgogICAgIG1fZWxlbWVudCA9IGVs
ZW1lbnQ7CiB9CiAKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJh
dG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCkg
PT0gb3RoZXIuZWxlbWVudCgpOworfQorCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OkVudHJ5OjpvcGVyYXRvciE9KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gZWxlbWVudCgpICE9IG90aGVyLmVsZW1lbnQoKTsKK30KKwogSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCgpCiB7CiB9CkBAIC03MiwxMSArODIs
NDUgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6fkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QoKQogewogfQogCitFbGVtZW50KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0
RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHRhcmdldE5hbWUpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21fZW50cmllcy5zaXplKCkg
LSBpXTsKKyAgICAgICAgaWYgKGVudHJ5LmlzTWFya2VyKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKGVudHJ5LmVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRhcmdldE5hbWUp
KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmVsZW1lbnQoKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y29udGFpbnMoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gISFmaW5kKGVsZW1lbnQpOworfQorCitIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Zmlu
ZChFbGVtZW50KiBlbGVtZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5k
KGVsZW1lbnQpOworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICAvLyBUaGlz
IGlzIHNvbWV3aGF0IG9mIGEgaGFjaywgYW5kIGlzIHdoeSB0aGlzIG1ldGhvZCBjYW4ndCBiZSBj
b25zdC4KKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaW5kZXhdOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjphcHBlbmQoRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVsZW1lbnQpOwogfQogCit2b2lk
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5kKGVsZW1lbnQpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9lbnRyaWVzLnJlbW92ZShpbmRleCk7Cit9CisKIHZv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xlYXJUb0xhc3RNYXJrZXIoKQogewogICAg
IHdoaWxlIChtX2VudHJpZXMuc2l6ZSgpICYmICFtX2VudHJpZXMubGFzdCgpLmlzTWFya2VyKCkp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRleCBhOWM1NmU2NTRi
YzkzNDhhMGVkMmRlZmQxNTI3ZDRmZTFiZmI5OGUwLi5kNjEzYTg2NDAxZDNjZmMyN2NmOWI4MTg1
MTZiOWNlYzIzMzczNjk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdG9t
aWNTdHJpbmc7CiBjbGFzcyBFbGVtZW50OwogCiAvLyBUaGlzIG1heSBlbmQgdXAgbWVyZ2VkIGlu
dG8gSFRNTEVsZW1lbnRTdGFjay4KQEAgLTQwLDEyICs0MSw2IEBAIHB1YmxpYzoKICAgICBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0KCk7CiAgICAgfkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5zaXplKCk7IH0KLQotICAgIHZv
aWQgYXBwZW5kKEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFyVG9MYXN0TWFya2VyKCk7Ci0KICAg
ICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUsIGJ1dCBIVE1MVHJlZUJ1aWxkZXIg
aGFzIHRvIGNvb3JkaW5hdGUKICAgICAvLyBiZXR3ZWVuIHRoZSBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0IGFuZCBIVE1MRWxlbWVudFN0YWNrIGFuZCBuZWVkcwogICAgIC8vIGFjY2VzcyB0byBF
bnRyeTo6aXNNYXJrZXIoKSBhbmQgRW50cnk6OnJlcGxhY2VFbGVtZW50KCkgdG8gZG8gc28uCkBA
IC02MSwxMCArNTYsMjUgQEAgcHVibGljOgogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAK
KyAgICAgICAgLy8gTmVlZGVkIGZvciB1c2Ugd2l0aCBWZWN0b3IuCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFbnRyeSYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRW50cnkmKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFbGVtZW50
PiBtX2VsZW1lbnQ7CiAgICAgfTsKIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5z
aXplKCk7IH0KKworICAgIEVsZW1lbnQqIGNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYpOworCisgICAgRW50cnkqIGZpbmQoRWxlbWVudCopOworICAgIGJv
b2wgY29udGFpbnMoRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKKyAgICB2
b2lkIHJlbW92ZShFbGVtZW50Kik7CisgICAgdm9pZCBjbGVhclRvTGFzdE1hcmtlcigpOworCiAg
ICAgY29uc3QgRW50cnkmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fZW50
cmllc1tpXTsgfQogICAgIEVudHJ5JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX2Vu
dHJpZXNbaV07IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA5NjA2MTU2NjA3Mzhl
ZDdkMjQwOGJiMWZlNTY5NmEzYjU1YTFmNmI1Li42M2MxYzYyMDU1NGRiODRhNzU5NjQxNDU2NWJl
OTVlZTQzZjUwMjhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzEsMTggKzMxLDE5
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCi0jaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIApAQCAtNjQsNiArNjUsMTMyIEBAIGJvb2wgc2hvdWxkVXNlTGVnYWN5VHJlZUJ1aWxk
ZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiAhZG9jdW1lbnQtPnNldHRpbmdzKCkg
fHwgIWRvY3VtZW50LT5zZXR0aW5ncygpLT5odG1sNVRyZWVCdWlsZGVyRW5hYmxlZCgpOwogfQog
Citib29sIGlzTnVtYmVyZWRIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQor
eworICAgIHJldHVybiB0YWdOYW1lID09IGgxVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDJU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoM1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGg0
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBo
NlRhZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3NwZWNpYWwKK2Jvb2wgaXNTcGVjaWFsVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBh
ZGRyZXNzVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYXJ0aWNsZVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYmFzZVRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGJhc2Vmb250VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImJnc291
bmQiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IGJvZHlUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBiclRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGJ1dHRvblRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNlbnRlclRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IGNvbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNvbGdyb3Vw
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImNvbW1hbmQiCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gZGRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAiZGV0YWlscyIKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBkaXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkaXZUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBkbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGR0VGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gZW1iZWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmaWVsZHNldFRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09ICJmaWd1cmUiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9v
dGVyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9ybVRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGZyYW1lVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZnJhbWVzZXRUYWcKKyAgICAgICAg
fHwgaXNOdW1iZXJlZEhlYWRlclRhZyh0YWdOYW1lKQorICAgICAgICB8fCB0YWdOYW1lID09IGhl
YWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoZWFkZXJUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBoZ3JvdXBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoclRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGlmcmFtZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGltZ1RhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGlucHV0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaXNpbmRleFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGxpVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlu
a1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBtZW51VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbWV0YVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IG5hdlRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vZW1iZWRUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBub2ZyYW1lc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vc2Ny
aXB0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gb2xUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBwVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gcGFyYW1UYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBwbGFpbnRleHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwcmVUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBzY3JpcHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzZWN0aW9uVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gc2VsZWN0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
c3R5bGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0Ym9keVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IHRleHRhcmVhVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGZvb3RUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSB0aGVhZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRpdGxlVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gdHJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB1bFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHdiclRhZworICAgICAgICB8fCB0YWdOYW1lID09IHht
cFRhZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3Njb3BpbmcKKy8vIFNhbWUgYXMgaXNTY29w
aW5nVGFnIGluIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAKKy8vIGFuZCBpc1Njb3BlTWFya2Vy
IGluIEhUTUxFbGVtZW50U3RhY2suY3BwCitib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gYnV0dG9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY2FwdGlv
blRhZworI2lmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcKKyNlbmRpZgorICAgICAgICB8fCB0YWdOYW1l
ID09IGh0bWxUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBtYXJxdWVlVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gb2JqZWN0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGFibGVUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSB0ZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRoVGFnOwor
fQorCitib29sIGlzTm9uQW5jaG9yRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYlRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGJpZ1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGNvZGVUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBlbVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZvbnRUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBpVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9iclRhZworICAgICAgICB8
fCB0YWdOYW1lID09IHNUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzbWFsbFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IHN0cmlrZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHN0cm9uZ1Rh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHR0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRh
ZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2Zvcm1hdHRpbmcKK2Jvb2wgaXNGb3JtYXR0aW5n
VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9
PSBhVGFnIHx8IGlzTm9uQW5jaG9yRm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKworLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
cGFyc2luZy5odG1sI3BocmFzaW5nCitib29sIGlzUGhyYXNpbmdUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiAhaXNTcGVjaWFsVGFnKHRhZ05hbWUpICYmICFp
c1Njb3BpbmdUYWcodGFnTmFtZSkgJiYgIWlzRm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UKIAogSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRv
a2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVy
cm9ycykKQEAgLTQxOSw5ICs1NDYsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRFbGVtZW50
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGgxVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoMlRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gaDNUYWcgfHwgdG9rZW4ubmFtZSgpID09IGg0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBo
NVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDZUYWcpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyZWRI
ZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFn
SWZQSW5TY29wZSgpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgICAg
IGluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC00NzAsNyArNTk2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBjb2RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gZm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1Rh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cmlrZVRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykgeworICAgICAgICBpZiAoaXNOb25BbmNob3JGb3JtYXR0
aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgICAgICBpbnNlcnRGb3JtYXR0aW5nRWxlbWVu
dCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC02NzIsNiArNzk4LDE1OSBAQCBib29s
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IFRoaXMgcHJvYmFi
bHkgYmVsb25ncyBvbiBIVE1MRWxlbWVudFN0YWNrLgorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogSFRNTFRyZWVCdWlsZGVyOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1l
bnQoRWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQpCit7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9jayA9IDA7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogcmVjb3JkID0gbV9vcGVuRWxlbWVudHMudG9wUmVjb3JkKCk7CisgICAg
Zm9yICg7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJl
Y29yZC0+ZWxlbWVudCgpID09IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IHJl
Y29yZC0+ZWxlbWVudCgpLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgLy8gIXBocmFzaW5nICYmICFm
b3JtYXR0aW5nID09IHNwZWNpYWwgfHwgc2NvcGluZworICAgICAgICBpZiAoaXNTY29waW5nVGFn
KHRhZ05hbWUpIHx8IGlzU3BlY2lhbFRhZyh0YWdOYW1lKSkKKyAgICAgICAgICAgIGZ1cnRoZXN0
QmxvY2sgPSByZWNvcmQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZmluZEZvc3RlclBhcmVudEZvcihF
bGVtZW50KiBlbGVtZW50KQoreworICAgIEVsZW1lbnQqIGZvc3RlclBhcmVudEVsZW1lbnQgPSAw
OworICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVsZW1lbnRS
ZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKKyAg
ICBpZiAobGFzdFRhYmxlRWxlbWVudFJlY29yZCkgeworICAgICAgICBFbGVtZW50KiBsYXN0VGFi
bGVFbGVtZW50ID0gbGFzdFRhYmxlRWxlbWVudFJlY29yZC0+ZWxlbWVudCgpOworICAgICAgICBp
ZiAobGFzdFRhYmxlRWxlbWVudC0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
aWxsIHRoaXMgc2VuZCBtdXRhdGlvbiBldmVudHM/CisgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgICAgIGxhc3RUYWJsZUVsZW1lbnQtPnBhcmVudCgpLT5pbnNlcnRC
ZWZvcmUoZWxlbWVudCwgbGFzdFRhYmxlRWxlbWVudCwgZWMpOworICAgICAgICAgICAgQVNTRVJU
KCFlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9zdGVyUGFy
ZW50RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOwor
ICAgIH0gZWxzZSAvLyBmcmFnbWVudCBjYXNlCisgICAgICAgIGZvc3RlclBhcmVudEVsZW1lbnQg
PSBtX29wZW5FbGVtZW50cy5ib3R0b20oKTsgLy8gPGh0bWw+IGVsZW1lbnQKKyAgICAKKyAgICBm
b3N0ZXJQYXJlbnRFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChlbGVtZW50KTsKK30KKworLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGhhdmUgYSB3aGl0dHkgbmFtZS4KKy8vIEZJWE1FOiBUaGlzIG11c3Qg
YmUgaW1wbGVtZW50ZWQgaW4gbWFueSBvdGhlciBwbGFjZXMgaW4gV2ViQ29yZS4KK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpyZXBhcmVudENoaWxkcmVuKEVsZW1lbnQqIG9sZFBhcmVudCwgRWxlbWVu
dCogbmV3UGFyZW50KQoreworICAgIE5vZGUqIGNoaWxkID0gb2xkUGFyZW50LT5maXJzdENoaWxk
KCk7CisgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBuZXdQ
YXJlbnQtPmFwcGVuZENoaWxkKGNoaWxkLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworICAg
ICAgICBjaGlsZCA9IG5leHRDaGlsZDsKKyAgICB9Cit9CisKKy8vIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5o
dG1sI3BhcnNpbmctbWFpbi1pbmJvZHkKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRv
cHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAoMSkgewor
ICAgICAgICAvLyAxLgorICAgICAgICBFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1fYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2Vu
Lm5hbWUoKSk7CisgICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQpIHsKKyAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hl
Y2sgdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBl
cnJvci4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fb3Bl
bkVsZW1lbnRzLmNvbnRhaW5zKGZvcm1hdHRpbmdFbGVtZW50KSkgeworICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7CisgICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5y
ZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudCAhPSBjdXJyZW50RWxlbWVudCgpKQorICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIC8vIDIuCisgICAgICAgIEhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSBmdXJ0aGVzdEJsb2Nr
Rm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAvLyAzLgor
ICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50
RWxlbWVudCgpICE9IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAgICAgIG1fb3BlbkVs
ZW1lbnRzLnBvcCgpOworICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAg
ICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIDQuCisgICAgICAg
IEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZvcm1hdHRpbmdFbGVtZW50UmVjb3Jk
ID0gbV9vcGVuRWxlbWVudHMuZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEFTU0VS
VChmdXJ0aGVzdEJsb2NrLT5pc0Fib3ZlKGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7CisgICAg
ICAgIEVsZW1lbnQqIGNvbW1vbkFuY2VzdG9yID0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPm5l
eHQoKS0+ZWxlbWVudCgpOworICAgICAgICAvLyA1LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OyAvLyBib29rbWFyaz8KKyAgICAgICAgLy8gNi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogbm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAgICBI
VE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7
CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvLyA2LjEKKyAgICAgICAgICAgIG5v
ZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIG5l
eHROb2RlID0gbm9kZS0+bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQg
aXRlcmF0aW9uIGluIGNhc2Ugbm9kZSBpcyBkZWxldGVkIGluIDYuMi4KKyAgICAgICAgICAgIC8v
IDYuMgorICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250YWlu
cyhub2RlLT5lbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucmVt
b3ZlKG5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjMKKyAg
ICAgICAgICAgIGlmIChub2RlID09IGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gNi40CisgICAgICAgICAgICBpZiAobGFzdE5v
ZGUgPT0gZnVydGhlc3RCbG9jaykKKyAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAv
LyBtb3ZlIGJvb2ttYXJrLgorICAgICAgICAgICAgLy8gNi41CisgICAgICAgICAgICAvLyBGSVhN
RTogV2UncmUgc3VwcG9zZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5
LgorICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0
VGFnLCBub2RlLT5lbGVtZW50KCktPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIC8vIElzIGNy
ZWF0ZUVsZW1lbnQgY29ycmVjdD8gKGluc3RlYWQgb2YgaW5zZXJ0RWxlbWVudCkKKyAgICAgICAg
ICAgIC8vIERvZXMgdGhpcyBjb2RlIGV2ZXIgbGVhdmUgbmV3RWxlbWVudCB1bmF0dGFjaGVkPwor
ICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGZh
a2VUb2tlbik7CisgICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSog
bm9kZUVudHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZmluZChub2RlLT5lbGVtZW50
KCkpOworICAgICAgICAgICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIC8vIDYuNgorICAgICAgICAgICAgLy8gVXNlIGFwcGVuZENoaWxk
IGluc3RlYWQgb2YgcGFyc2VyQWRkQ2hpbGQgdG8gaGFuZGxlIHBvc3NpYmxlIHJlcGFyZW50aW5n
LgorICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIG5vZGUtPmVsZW1l
bnQoKS0+YXBwZW5kQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAg
QVNTRVJUKCFlYyk7CisgICAgICAgICAgICAvLyA2LjcKKyAgICAgICAgICAgIGxhc3ROb2RlID0g
bm9kZTsKKyAgICAgICAgfQorICAgICAgICAvLyA3CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgY29tbW9uQW5jZXN0b3JUYWcgPSBjb21tb25BbmNlc3Rvci0+bG9jYWxOYW1lKCk7CisgICAg
ICAgIGlmIChjb21tb25BbmNlc3RvclRhZyA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgY29t
bW9uQW5jZXN0b3JUYWcgPT0gdGJvZHlUYWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9y
VGFnID09IHRmb290VGFnCisgICAgICAgICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0aGVh
ZFRhZworICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdHJUYWcpCisgICAgICAg
ICAgICBmaW5kRm9zdGVyUGFyZW50Rm9yKGxhc3ROb2RlLT5lbGVtZW50KCkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBjb21tb25B
bmNlc3Rvci0+YXBwZW5kQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAg
ICAgQVNTRVJUKCFlYyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gOAorICAgICAgICAvLyBGSVhN
RTogV2UncmUgc3VwcG9zZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5
LgorICAgICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcs
IGZvcm1hdHRpbmdFbGVtZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50
PiBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudChmYWtlVG9rZW4pOworICAgICAgICAvLyA5Cisg
ICAgICAgIHJlcGFyZW50Q2hpbGRyZW4oZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLCBuZXdFbGVt
ZW50LmdldCgpKTsKKyAgICAgICAgLy8gMTAKKyAgICAgICAgZnVydGhlc3RCbG9jay0+ZWxlbWVu
dCgpLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50KTsKKyAgICAgICAgLy8gMTEKKyAgICAgICAg
bV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gaW5zZXJ0IG5ldyBlbGVtZW50IGF0IGJvb2ttYXJr
CisgICAgICAgIC8vIDEyCisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5n
RWxlbWVudCk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQs
IGZ1cnRoZXN0QmxvY2spOworICAgIH0KK30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBzd2l0Y2ggKGluc2VydGlv
bk1vZGUoKSkgewpAQCAtNzg2LDcgKzEwNjUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9vcGVuRWxl
bWVudHMucG9wKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBoMVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4u
bmFtZSgpID09IGgzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gaDVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJl
cmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIGlmICghbV9vcGVuRWxl
bWVudHMuaW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtODAyLDkgKzEwODEsOCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gVGFrZSBhIGRlZXAgYnJlYXRoLgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBjb2RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0
b2tlbi5uYW1lKCkgPT0gZm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gbm9iclRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gc21hbGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gc3Ryb25nVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
dVRhZykgewotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGVyZSdzIGEgY29tcGxpY2F0ZWQgYWxnb3JpdGhtIHRoYXQgZ29lcyBoZXJlLgorICAg
ICAgICBpZiAoaXNGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGNh
bGxUaGVBZG9wdGlvbkFnZW5jeSh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4ubmFtZSgpID09IG9iamVjdFRhZykgewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVl
QnVpbGRlci5oCmluZGV4IGY1MTNmMmFmNWIzMzY1MDcxOGZhNzgyODU0MTFjZGM1ZWY0NTk0YjIu
LmJiNzZiOWNhMzUxYzA5NjBmODZjYWM0ZjcyMTZkYjI2MWE1NjVmYWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVC
dWlsZGVyLmgKQEAgLTEyNSw2ICsxMjUsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIHByb2Nlc3NC
b2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgcHJvY2Vzc0Zh
a2VQRW5kVGFnSWZQSW5TY29wZSgpOwogCisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJl
Y29yZCogZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2
b2lkIGZpbmRGb3N0ZXJQYXJlbnRGb3IoRWxlbWVudCopOworICAgIHZvaWQgcmVwYXJlbnRDaGls
ZHJlbihFbGVtZW50KiBvbGRQYXJlbnQsIEVsZW1lbnQqIG5ld1BhcmVudCk7CisgICAgdm9pZCBj
YWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJik7CisKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGlsZFR5cGU+CiAgICAgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IGF0dGFjaChOb2Rl
KiBwYXJlbnQsIFBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBwcnBDaGlsZCkKICAgICB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRl
eCBmZWUwN2RkZGU1NzExNGI2ZmUzNGNlY2Y4ZDAyZmY1NTYzNmVmZDZhLi5mMmVkZDkzODg1ZmE2
ZGVjMzhlZjJkYzIwMjZhYjEyOTdmMGFiZjQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTE1Miw2ICsxNTIsNyBAQCBp
bmxpbmUgRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50LCBGcmFtZUxvYWRlcgogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKICAg
ICAsIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoKGZhbHNlKQogeworICAgIEFTU0VSVChwYWdlKTsK
ICAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKICAgICBIVE1MTmFtZXM6OmluaXQoKTsKICAgICBR
dWFsaWZpZWROYW1lOjppbml0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60468</attachid>
            <date>2010-07-03 23:30:12 -0700</date>
            <delta_ts>2011-01-22 19:51:14 -0800</delta_ts>
            <desc>Addressed Adam&apos;s feedback</desc>
            <filename>bug-41453-20100703232957.patch</filename>
            <type>text/plain</type>
            <size>43270</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzY2Y1MjJiZjZiYjRiNTA5ZTIxZGMxMWE2ODE1YmMwNWFjMmMzN2ZlLi43NDg4ZjRl
ZDEwMTM4ZjkyMTAwMDFkNTJjYmZiYWNlNDk5YzBiOTAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDctMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUxUcmVlQnVpbGRlciBuZWVk
cyBhbiBhZG9wdGlvbiBhZ2VuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDUzCisKKyAgICAgICAgQWRkZWQgbmV3IGFkb3B0aW9uMDEgc3VpdGUg
Zm9yIHRlc3RpbmcgYWRvcHRpb24gYWdlbmN5CisgICAgICAgIGJ1Z3MuICBSaWdodCBub3cgb25s
eSB0aGUgc2ltcGxlc3QgYWRvcHRpb24gdGVzdCBwYXNzZXMuCisgICAgICAgIEknbGwgYmUgYWRk
aW5nIG1vcmUgaW4gZnV0dXJlIGNvbW1pdHMuCisKKyAgICAgICAgKiBodG1sNWxpYi9yZXNvdXJj
ZXMvYWRvcHRpb24wMS5kYXQ6IEFkZGVkLgorICAgICAgICAqIGh0bWw1bGliL3J1bm5lci1leHBl
Y3RlZC1odG1sNS50eHQ6CisgICAgICAgICogaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBodG1sNWxpYi9ydW5uZXIuaHRtbDoKKwogMjAxMC0wNy0wMyAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFj
aG93aWFrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcmVzb3VyY2VzL2Fkb3B0
aW9uMDEuZGF0IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY3NGY3YWY3M2Q1Y2MwYmIxNTk4ZDgxNjliNmQyODkyMGY2ZTA5OWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9yZXNvdXJjZXMvYWRvcHRpb24w
MS5kYXQKQEAgLTAsMCArMSw4NCBAQAorI2RhdGEKKzxhPjxwPjwvYT48L3A+CisjZXJyb3JzCisj
ZG9jdW1lbnQKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wg
ICAgIDxwPgorfCAgICAgICA8YT4KKworI2RhdGEKKzxhPjE8cD4yPC9hPjM8L3A+CisjZXJyb3Jz
CisjZG9jdW1lbnQKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4K
K3wgICAgICAgIjEiCit8ICAgICA8cD4KK3wgICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAg
ICAgICIzIgorCisjZGF0YQorPGE+MTxidXR0b24+MjwvYT4zPC9idXR0b24+CisjZXJyb3JzCisj
ZG9jdW1lbnQKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wg
ICAgICAgIjEiCit8ICAgICAgIDxidXR0b24+Cit8ICAgICAgICAgIjIiCit8ICAgICAiMyIKKwor
I2RhdGEKKzxhPjE8Yj4yPC9hPjM8L2I+CisjZXJyb3JzCisjZG9jdW1lbnQKK3wgPGh0bWw+Cit8
ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICAgIDxi
PgorfCAgICAgICAgICIyIgorfCAgICAgPGI+Cit8ICAgICAgICIzIgorCisjZGF0YQorPGE+MTxk
aXY+MjxkaXY+MzwvYT40PC9kaXY+NTwvZGl2PgorI2Vycm9ycworI2RvY3VtZW50Cit8IDxodG1s
PgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAg
PGRpdj4KK3wgICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAgIDxkaXY+Cit8ICAgICAg
ICAgPGE+Cit8ICAgICAgICAgICAiMyIKK3wgICAgICAgICAiNCIKK3wgICAgICAgIjUiCisKKyNk
YXRhCis8dGFibGU+PGE+MTxwPjI8L2E+MzwvcD4KKyNlcnJvcnMKKyNkb2N1bWVudAorfCA8aHRt
bD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAg
IDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgIjMiCit8ICAgICA8dGFi
bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRt
bDUudHh0IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLWh0bWw1LnR4dApp
bmRleCBmYWMyODVmNWYxZWU3ZjU1ODlkOGZiNTEwMGVhOTIzNjVhNWE3NDYzLi41YTNiOGQ4Njk1
MTU5MzJiNmRkMTYyYzA0ZWYxNWQyZDFlMDRiZGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQtaHRtbDUudHh0CisrKyBiL0xheW91dFRlc3RzL2h0bWw1
bGliL3J1bm5lci1leHBlY3RlZC1odG1sNS50eHQKQEAgLTEyOSw3ICsxMjksNyBAQCBHb3Q6CiB8
ICAgICAgICAgPGE+CiB8ICAgICAgICAgICA8YT4KIHwgICAgICAgICAgICAgIlkiCi18ICAgICAg
ICAgICAgICJaIgorfCAgICAgICAgICAgIloiCiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8ICAgPGhl
YWQ+CkBAIC0zODgsNyArMzg4LDggQEAgR290OgogfCAgIDxoZWFkPgogfCAgIDxib2R5PgogfCAg
ICAgPGI+Ci18ICAgICAgIDxwPgorfCAgICAgPHA+Cit8ICAgICAgIDxiPgogfCAgICAgICAgICJU
RVNUIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgpAQCAtNDM1LDcgKzQzNiw3IEBAIEdvdDoKIHwgICAg
ICAgICA8Zm9udD4KIHwgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAiY3J1ZWwiCi18ICAg
ICAgICAgICAgICJ3b3JsZCIKK3wgICAgICAgICAid29ybGQiCiBFeHBlY3RlZDoKIHwgPGh0bWw+
CiB8ICAgPGhlYWQ+CkBAIC01MjUsOSArNTI2LDEwIEBAIEdvdDoKIHwgICAgICAgPGI+CiB8ICAg
ICAgICAgPGNpdGU+CiB8ICAgICAgICAgICAiQiIKLXwgICAgICAgICAgIDxkaXY+Ci18ICAgICAg
ICAgICAgICJDIgotfCAgICAgICAgICAgICAiRCIKK3wgICAgICAgPGRpdj4KK3wgICAgICAgICA8
Yj4KK3wgICAgICAgICAgICJDIgorfCAgICAgICAgICAgIkQiCiBFeHBlY3RlZDoKIHwgPGh0bWw+
CiB8ICAgPGhlYWQ+CkBAIC01NjEsOSArNTYzLDEzIEBAIEdvdDoKIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8Y2l0ZT4KIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPgogfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT4KLXwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8ZGl2PgotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlgi
Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEVTVCIKK3wgICAgICAgICAg
ICAgPGk+Cit8ICAgICAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAgICAgICA8aT4KK3wgICAg
ICAgICAgICAgICAgICAgPGRpdj4KK3wgICAgICAgICAgICAgICAgICAgICA8Yj4KK3wgICAgICAg
ICAgICAgICAgICAgICAgICJYIgorfCAgICAgICAgICAgICAgICAgICAgICAgIlRFU1QiCiBFeHBl
Y3RlZDoKIHwgPGh0bWw+CiB8ICAgPGhlYWQ+CkBAIC02OTcsNyArNzAzLDkgQEAgR290OgogfCAg
ICAgICAgIDxiPgogfCAgICAgICAgICAgPGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAg
ICAgICAgICAgPHA+Cit8ICAgICAgICAgPGk+Cit8ICAgICAgICAgICA8cD4KK3wgICAgICAgICAg
ICAgPGI+CiB8ICAgICAgICAgICAgICAgIiBqa2wgIgogRXhwZWN0ZWQ6CiB8IDxodG1sPgpAQCAt
NzI3LDcgKzczNSw5IEBAIEdvdDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAgICAgIDxpPgogfCAg
ICAgICAgICAgICAiIGdoaSAiCi18ICAgICAgICAgICAgIDxwPgorfCAgICAgICAgIDxpPgorfCAg
ICAgICAgICAgPHA+Cit8ICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICIgamtsICIK
IHwgICAgICAgICAgICAgICAiIG1ubyIKIEV4cGVjdGVkOgpAQCAtNzU5LDcgKzc2OSwxMCBAQCBH
b3Q6CiB8ICAgICAgICAgPGI+CiB8ICAgICAgICAgICA8aT4KIHwgICAgICAgICAgICAgIiBnaGkg
IgotfCAgICAgICAgICAgICA8cD4KK3wgICAgICAgICA8aT4KK3wgICAgICAgICA8cD4KK3wgICAg
ICAgICAgIDxpPgorfCAgICAgICAgICAgICA8Yj4KIHwgICAgICAgICAgICAgICAiIGprbCAiCiB8
ICAgICAgICAgICAgICAgIiBtbm8gIgogRXhwZWN0ZWQ6CkBAIC03OTIsNyArODA1LDEwIEBAIEdv
dDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAgICAgIDxpPgogfCAgICAgICAgICAgICAiIGdoaSAi
Ci18ICAgICAgICAgICAgIDxwPgorfCAgICAgICAgIDxpPgorfCAgICAgICAgIDxwPgorfCAgICAg
ICAgICAgPGk+Cit8ICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICIgamtsICIKIHwg
ICAgICAgICAgICAgICAiIG1ubyAiCiB8ICAgICAgICAgICAgICAgIiBwcXIiCkBAIC04MjcsNyAr
ODQzLDEwIEBAIEdvdDoKIHwgICAgICAgICA8Yj4KIHwgICAgICAgICAgIDxpPgogfCAgICAgICAg
ICAgICAiIGdoaSAiCi18ICAgICAgICAgICAgIDxwPgorfCAgICAgICAgIDxpPgorfCAgICAgICAg
IDxwPgorfCAgICAgICAgICAgPGk+Cit8ICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAg
ICIgamtsICIKIHwgICAgICAgICAgICAgICAiIG1ubyAiCiB8ICAgICAgICAgICAgICAgIiBwcXIg
IgpAQCAtODYyLDExICs4ODEsMTQgQEAgR290OgogfCAgICAgICAgIDxiPgogfCAgICAgICAgICAg
PGk+CiB8ICAgICAgICAgICAgICIgZ2hpICIKLXwgICAgICAgICAgICAgPHA+Cit8ICAgICAgICAg
PGk+Cit8ICAgICAgICAgPHA+Cit8ICAgICAgICAgICA8aT4KK3wgICAgICAgICAgICAgPGI+CiB8
ICAgICAgICAgICAgICAgIiBqa2wgIgogfCAgICAgICAgICAgICAgICIgbW5vICIKIHwgICAgICAg
ICAgICAgICAiIHBxciAiCi18ICAgICAgICAgICAgICIgc3R1IgorfCAgICAgICAgICIgc3R1Igog
RXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTAxMiwxMCArMTAzNCw5IEBAIEdv
dDoKIHwgICAgIDxzdHJpa2U+CiB8ICAgICAgIDxzdHJpa2U+CiB8ICAgICAgICAgPGNvZGU+Ci18
ICAgICAgICAgICA8Y29kZT4KLXwgICAgICAgICAgICAgPGNvZGU+Ci18ICAgICAgICAgICAgICAg
PGNvZGU+Ci18ICAgICAgICAgICAgICAgICA8c3RyaWtlPgorfCAgICAgICA8Y29kZT4KK3wgICAg
ICAgICA8Y29kZT4KK3wgICAgICAgICAgIDxzdHJpa2U+CiBFeHBlY3RlZDoKIHwgPGh0bWw+CiB8
ICAgPGhlYWQ+CkBAIC0xMjUxLDcgKzEyNzIsNyBAQCBHb3Q6CiB8ICAgICAgICAgICAgICAgICAg
IDxiPgogfCAgICAgICAgICAgICAgICAgICAgIDxiPgogfCAgICAgICAgICAgICAgICAgICAgICAg
PGVtPgotfCAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+Cit8ICAgICAgICAgICAgICAgICAg
ICAgPGxpPgogRXhwZWN0ZWQ6CiB8IDxodG1sPgogfCAgIDxoZWFkPgpAQCAtMTkwMCw4ICsxOTIx
LDggQEAgR290OgogfCAgICAgPG5vYnI+CiB8ICAgICAgIDxub2JyPgogfCAgICAgICAgIDxub2Jy
PgorfCAgICAgICAgIDxub2JyPgogfCAgICAgICAgICAgPG5vYnI+Ci18ICAgICAgICAgICAgIDxu
b2JyPgogRXhwZWN0ZWQ6CiB8IDwhRE9DVFlQRSBodG1sPgogfCA8aHRtbD4KQEAgLTMxMDAsNyAr
MzEyMSw4IEBAIEdvdDoKIHwgICAgIDxiPgogfCAgICAgICAiYSIKIHwgICAgICAgPGRpdj4KLXwg
ICAgICAgPGRpdj4KK3wgICAgIDxkaXY+Cit8ICAgICAgIDxiPgogfCAgICAgICAgICJ5IgogRXhw
ZWN0ZWQ6CiB8IDxodG1sPgpAQCAtMzEyMCw3ICszMTQyLDggQEAgR290OgogfCAgIDxoZWFkPgog
fCAgIDxib2R5PgogfCAgICAgPGE+Ci18ICAgICAgIDxkaXY+Cit8ICAgICA8ZGl2PgorfCAgICAg
ICA8YT4KIHwgICAgICAgICA8cD4KIEV4cGVjdGVkOgogfCA8aHRtbD4KQEAgLTU0ODgsNCArNTUx
MSwxMjggQEAgRXhwZWN0ZWQ6CiByZXNvdXJjZXMvZW50aXRpZXMwMi5kYXQ6IFBBU1MKIAogcmVz
b3VyY2VzL2NvbW1lbnRzMDEuZGF0OiBQQVNTCisKK3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdDoK
KzIKKzMKKzQKKzUKKzYKKworVGVzdCAyIG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0
IGZhaWxlZC4gSW5wdXQ6Cis8YT4xPHA+MjwvYT4zPC9wPgorR290OgorfCA8aHRtbD4KK3wgICA8
aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgIDxwPgorfCAg
ICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgICAiMyIKK0V4cGVjdGVkOgorfCA8aHRt
bD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAg
IDxwPgorfCAgICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgIjMiCisKK1Rlc3QgMyBv
ZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBmYWlsZWQuIElucHV0OgorPGE+MTxidXR0
b24+MjwvYT4zPC9idXR0b24+CitHb3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5
PgorfCAgICAgPGE+Cit8ICAgICAgICIxIgorfCAgICAgICA8YT4KK3wgICAgICAgICA8YnV0dG9u
PgorfCAgICAgICAgICAgIjIiCit8ICAgICAgICAgICAiMyIKK0V4cGVjdGVkOgorfCA8aHRtbD4K
K3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIKK3wgICAgICAg
PGJ1dHRvbj4KK3wgICAgICAgICAiMiIKK3wgICAgICIzIgorCitUZXN0IDQgb2YgNiBpbiByZXNv
dXJjZXMvYWRvcHRpb24wMS5kYXQgZmFpbGVkLiBJbnB1dDoKKzxhPjE8Yj4yPC9hPjM8L2I+CitH
b3Q6Cit8IDxodG1sPgorfCAgIDxoZWFkPgorfCAgIDxib2R5PgorfCAgICAgPGE+Cit8ICAgICAg
ICIxIgorfCAgICAgICA8YT4KK3wgICAgICAgICA8Yj4KK3wgICAgICAgICAgICIyIgorfCAgICAg
ICAiMyIKK0V4cGVjdGVkOgorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAg
IDxhPgorfCAgICAgICAiMSIKK3wgICAgICAgPGI+Cit8ICAgICAgICAgIjIiCit8ICAgICA8Yj4K
K3wgICAgICAgIjMiCisKK1Rlc3QgNSBvZiA2IGluIHJlc291cmNlcy9hZG9wdGlvbjAxLmRhdCBm
YWlsZWQuIElucHV0OgorPGE+MTxkaXY+MjxkaXY+MzwvYT40PC9kaXY+NTwvZGl2PgorR290Ogor
fCA8aHRtbD4KK3wgICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgICAiMSIK
K3wgICAgIDxkaXY+Cit8ICAgICAgIDxhPgorfCAgICAgICAgICIyIgorfCAgICAgICAgIDxkaXY+
Cit8ICAgICAgICAgICAiMyIKK3wgICAgICAgICAgICI0IgorfCAgICAgIjUiCitFeHBlY3RlZDoK
K3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEi
Cit8ICAgICA8ZGl2PgorfCAgICAgICA8YT4KK3wgICAgICAgICAiMiIKK3wgICAgICAgPGRpdj4K
K3wgICAgICAgICA8YT4KK3wgICAgICAgICAgICIzIgorfCAgICAgICAgICI0IgorfCAgICAgICAi
NSIKKworVGVzdCA2IG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0IGZhaWxlZC4gSW5w
dXQ6Cis8dGFibGU+PGE+MTxwPjI8L2E+MzwvcD4KK0dvdDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+
Cit8ICAgPGJvZHk+Cit8ICAgICA8dGFibGU+CitFeHBlY3RlZDoKK3wgPGh0bWw+Cit8ICAgPGhl
YWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICA8cD4KK3wgICAg
ICAgPGE+Cit8ICAgICAgICAgIjIiCit8ICAgICAgICIzIgorfCAgICAgPHRhYmxlPgogI0VPRgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2h0bWw1bGliL3J1bm5lci1leHBlY3RlZC50eHQKaW5kZXggOTdhMmNlYjRlYzgx
OWFmNWQyM2EwNjdmMWM2MDRhZjk2MDkwZjRhNy4uZDliZTU4ZTNmNDE5NDQ5ZDQ2MjllZWYyZjZl
M2Q3ZmQwZWUzMGM0NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcnVubmVyLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXItZXhwZWN0ZWQudHh0
CkBAIC00ODkwLDMgKzQ4OTAsNDggQEAgRXhwZWN0ZWQ6CiByZXNvdXJjZXMvZW50aXRpZXMwMi5k
YXQ6IFBBU1MKIAogcmVzb3VyY2VzL2NvbW1lbnRzMDEuZGF0OiBQQVNTCisKK3Jlc291cmNlcy9h
ZG9wdGlvbjAxLmRhdDoKKzEKKzYKKworVGVzdCAxIG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9u
MDEuZGF0IGZhaWxlZC4gSW5wdXQ6Cis8YT48cD48L2E+PC9wPgorR290OgorfCA8aHRtbD4KK3wg
ICA8aGVhZD4KK3wgICA8Ym9keT4KK3wgICAgIDxhPgorfCAgICAgPHA+CitFeHBlY3RlZDoKK3wg
PGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgIDxwPgorfCAg
ICAgICA8YT4KKworVGVzdCA2IG9mIDYgaW4gcmVzb3VyY2VzL2Fkb3B0aW9uMDEuZGF0IGZhaWxl
ZC4gSW5wdXQ6Cis8dGFibGU+PGE+MTxwPjI8L2E+MzwvcD4KK0dvdDoKK3wgPGh0bWw+Cit8ICAg
PGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8YT4KK3wgICAgICAgIjEiCit8ICAgICAgIDxwPgor
fCAgICAgICAgICIyIgorfCAgICAgICAgICIzIgorfCAgICAgPHRhYmxlPgorfCAgICAgICA8dGJv
ZHk+CitFeHBlY3RlZDoKK3wgPGh0bWw+Cit8ICAgPGhlYWQ+Cit8ICAgPGJvZHk+Cit8ICAgICA8
YT4KK3wgICAgICAgIjEiCit8ICAgICA8cD4KK3wgICAgICAgPGE+Cit8ICAgICAgICAgIjIiCit8
ICAgICAgICIzIgorfCAgICAgPHRhYmxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHRtbDVs
aWIvcnVubmVyLmh0bWwgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXIuaHRtbAppbmRleCA5
Zjc0NTY4MDMyYzBkY2RjNjI1ZWJlNzlhYjMwY2E4OTdjZGY0NWVjLi5mMzA1MmYwOTNmZTQ0YmE1
YTM5ZDNlMWY4YmE0YmQxOTM3NzE1NDE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odG1sNWxp
Yi9ydW5uZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odG1sNWxpYi9ydW5uZXIuaHRtbApAQCAt
NTgsNyArNTgsOCBAQCB2YXIgdGVzdF9maWxlcyA9IFsKICAgICAgICAgJ3Jlc291cmNlcy9zY3Jp
cHRkYXRhMDEuZGF0JywKICAgICAgICAgJ3Jlc291cmNlcy9lbnRpdGllczAxLmRhdCcsCiAgICAg
ICAgICdyZXNvdXJjZXMvZW50aXRpZXMwMi5kYXQnLAotICAgICAgICAncmVzb3VyY2VzL2NvbW1l
bnRzMDEuZGF0JworICAgICAgICAncmVzb3VyY2VzL2NvbW1lbnRzMDEuZGF0JywKKyAgICAgICAg
J3Jlc291cmNlcy9hZG9wdGlvbjAxLmRhdCcKICAgICBdLAogICAgIHRlc3RzID0gW10sCiAgICAg
aWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlmcmFtZSIpWzBdLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMmZi
MjYxMTY3MTAwMjJhMzgwZTIzMzYxMDEyZDJhYTA2ZDAxZDc0Li5iNmM5NmU1YjNjM2M2MGI4NWI0
ZTQ3NDU0YzU4MjQwZjhiYjBhOWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEwLTA3LTAxICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBIVE1MVHJlZUJ1aWxkZXIgbmVlZHMgYW4gYWRvcHRpb24gYWdlbmN5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQ1Mwor
CisgICAgICAgIFRoaXMgY2hhbmdlcyBzb21lIHRlc3QgcmVzdWx0cywgYnV0IG9ubHkgbWFrZXMg
dGhlIHNpbXBsZXN0CisgICAgICAgIGFkb3B0aW9uIGFnZW5jeSBjYXNlcyBwYXNzLiAgSSB0aGlu
ayB0aGUgY29kZSBpcyBsaWtlbHkKKyAgICAgICAgdmVyeSBjbG9zZSwgYnV0IGZ1cnRoZXIgaXRl
cmF0aW9uIHRvIG1ha2UgdGhpcyBjaGFuZ2UgbGFyZ2VyCisgICAgICAgIHNlZW1zIGNvdW50ZXIt
cHJvZHVjdGl2ZS4gIEkgcmVjb21tZW5kIHdlIGNoZWNrIGluIHRoaXMKKyAgICAgICAgcHJvZ3Jl
c3Npb24gYW5kIHdvcmsgZnJvbSBoZXJlLgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YWRkQ2hpbGRDb21tb24pOgor
ICAgICAgICAgLSBNYWtlIHN1cmUgY2FsbGVycyBkb24ndCBhc3N1bWUgdGhpcyB3aWxsIHJlcGFy
ZW50LgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgor
ICAgICAgICAgLSBVcGRhdGUgY29tbWVudCB0byBkb2N1bWVudCBsYWNrIG9mIHJlcGFyZW50aW5n
IGJlaGF2aW9yLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6On5F
bGVtZW50UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmlzQWJvdmUpOgorICAgICAgICAgLSBBZGRlZCBmb3IgZGVi
dWdnaW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIdG1s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92
ZSk6CisgICAgICAgICAtIE5lZWRlZCBmb3IgdGhlIGFkb3B0aW9uIGFnZW5jeS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnRvcFJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpib3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRTdGFjazo6aGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6Ym9keUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6cHVzaENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
OjpyZW1vdmVOb25Ub3BDb21tb24pOgorICAgICAgICAgLSBGaXggdGhlIG5hbWUgdG8gbWF0Y2gg
dG9wL2JvdHRvbS4KKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2suaDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6bmV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpyZWxlYXNl
TmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
OjpzZXROZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xvc2VzdEVs
ZW1lbnRJblNjb3BlV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdDo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjpyZW1vdmUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpzaXplKToK
KyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAg
ICAtIFBhcnQgb2YgdGhlIEFkb3B0aW9uIEFnZW5jeSBhbGdvcml0aG0uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmZpbmRGb3N0ZXJQYXJlbnRGb3IpOgorICAgICAgICAgLSBV
c2VkIHRvIG1vdmUgbWlzLW5lc3RlZCBjb250ZW50IG91dCBvZiB0YWJsZXMuCisgICAgICAgICAg
IFRoaXMgZG9lc24ndCBzZWVtIHRvIHdvcmsgcXVpdGUgcmlnaHQgeWV0LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXBhcmVudENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAgICAgIC0g
VGhlIHJpZGljdWxvdXNseSBsb25nL2NvbXBsaWNhdGVkIGFkb3B0aW9uIGFnZW5jeSBhbGdvcml0
aG0gZnJvbSBIVE1MNS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZyk6CisgICAgICAgICogaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaDoKKwogMjAxMC0wNy0w
MyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCA0YzRmMjA4OGVkMzVk
ZGE4YmU2MzZhMGUzYjI0YjYwM2VkOTUzNWVmLi42NTM5ZTViMzAyMjFjOGY3MmFlMmM0ZjIxZjJl
YWFhYTIyYjg2MzIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtNTM5LDYgKzUzOSw3IEBAIGJv
b2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwg
RXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6YWRkQ2hpbGRDb21t
b24oTm9kZSogbmV3Q2hpbGQpCiB7CisgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAv
LyBVc2UgYXBwZW5kQ2hpbGQgaWYgeW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nLgogICAg
IGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAg
ICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KQEAgLTU1
NSw3ICs1NTYsNyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4gbmV3Q2hpbGQpCiB7CiAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBkdXJpbmcgcGFyc2luZy4KLSAgICAvLyBJdCBkb2VzIG5v
dCBzZW5kIGFueSBET00gbXV0YXRpb24gZXZlbnRzLgorICAgIC8vIEl0IGRvZXMgbm90IHNlbmQg
YW55IERPTSBtdXRhdGlvbiBldmVudHMgb3IgaGFuZGxlIHJlcGFyZW50aW5nLgogCiAgICAgYWRk
Q2hpbGRDb21tb24obmV3Q2hpbGQuZ2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50U3RhY2suY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suY3Bw
CmluZGV4IDcwNzYxYzZlMjA0MzJmYTgxMTBiYmNlMWM4YTNkMzlkNGJkMGIxNGYuLjM4NjU4OTdi
NDlkZWNlYzM2OGI4YTcwZjQ1YTlhNTcwYWFkNmJhMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFj
ay5jcHAKQEAgLTM4LDIzICszOCwzMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLWNsYXNzIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIEVsZW1lbnRSZWNvcmQoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQp
Ci0gICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgbV9uZXh0KG5leHQpCi0g
ICAgewotICAgIH0KK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OkVsZW1lbnRSZWNv
cmQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+
IG5leHQpCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fbmV4dChuZXh0KQorewor
ICAgIEFTU0VSVChtX2VsZW1lbnQpOworfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQotICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBj
b25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KLSAgICBQYXNzT3duUHRyPEVsZW1lbnRSZWNv
cmQ+IHJlbGVhc2VOZXh0KCkgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQotICAgIHZvaWQg
c2V0TmV4dChQYXNzT3duUHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsg
fQorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQorewor
fQorCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50
KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPworICAg
IG1fZWxlbWVudCA9IGVsZW1lbnQ7Cit9CiAKLXByaXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+
IG1fZWxlbWVudDsKLSAgICBPd25QdHI8RWxlbWVudFJlY29yZD4gbV9uZXh0OwotfTsKK2Jvb2wg
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBv
dGhlcikgY29uc3QKK3sKKyAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIGJlbG93ID0gbmV4dCgpOyBi
ZWxvdzsgYmVsb3cgPSBiZWxvdy0+bmV4dCgpKSB7CisgICAgICAgIGlmIChiZWxvdyA9PSBvdGhl
cikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKIEhUTUxFbGVtZW50U3RhY2s6OkhUTUxFbGVtZW50U3RhY2soKQogICAgIDogbV9odG1sRWxl
bWVudCgwKQpAQCAtMTA0LDYgKzExMyw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50
aWwoRWxlbWVudCogZWxlbWVudCkKIAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0
bWxFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKIHsKKyAgICBBU1NFUlQoIW1f
dG9wKTsgLy8gPGh0bWw+IHNob3VsZCBhbHdheXMgYmUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2su
CiAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAg
ICAgQVNTRVJUKCFtX2h0bWxFbGVtZW50KTsKICAgICBtX2h0bWxFbGVtZW50ID0gZWxlbWVudC5n
ZXQoKTsKQEAgLTEzNSwxMSArMTQ1LDQ2IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCiAgICAgcHVzaENvbW1vbihlbGVtZW50KTsKIH0K
IAordm9pZCBIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQsIEVsZW1lbnRSZWNvcmQqIHJlY29yZEJlbG93KQoreworICAgIEFTU0VSVChlbGVt
ZW50KTsKKyAgICBBU1NFUlQocmVjb3JkQmVsb3cpOworICAgIEFTU0VSVChtX3RvcCk7CisgICAg
QVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFT
U0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsKKyAgICBBU1NF
UlQoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CisgICAgQVNTRVJU
KG1faHRtbEVsZW1lbnQpOworICAgIGlmIChyZWNvcmRCZWxvdyA9PSBtX3RvcCkgeworICAgICAg
ICBwdXNoKGVsZW1lbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChFbGVt
ZW50UmVjb3JkKiByZWNvcmRBYm92ZSA9IG1fdG9wLmdldCgpOyByZWNvcmRBYm92ZTsgcmVjb3Jk
QWJvdmUgPSByZWNvcmRBYm92ZS0+bmV4dCgpKSB7CisgICAgICAgIGlmIChyZWNvcmRBYm92ZS0+
bmV4dCgpICE9IHJlY29yZEJlbG93KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
cmVjb3JkQWJvdmUtPnNldE5leHQobmV3IEVsZW1lbnRSZWNvcmQoZWxlbWVudCwgcmVjb3JkQWJv
dmUtPnJlbGVhc2VOZXh0KCkpKTsKKyAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVu
dCgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkKiBIVE1MRWxlbWVudFN0YWNrOjp0b3BSZWNvcmQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RvcC5nZXQoKTsKK30KKwogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6dG9wKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV90b3AtPmVsZW1lbnQoKTsKIH0KIAorRWxlbWVudCogSFRNTEVsZW1l
bnRTdGFjazo6Ym90dG9tKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaHRtbEVsZW1lbnQoKTsKK30K
Kwogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9oZWFkRWxlbWVudCA9PSBlbGVtZW50KTsKQEAgLTE0
OCw3ICsxOTMsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faGVhZEVs
ZW1lbnQgPSAwOwotICAgIHJlbW92ZU5vbkZpcnN0Q29tbW9uKGVsZW1lbnQpOworICAgIHJlbW92
ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1v
dmUoRWxlbWVudCogZWxlbWVudCkKQEAgLTE1OCw0NSArMjAzLDU4IEBAIHZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHBvcCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIHJlbW92ZU5vbkZpcnN0Q29tbW9uKGVsZW1lbnQpOworICAg
IHJlbW92ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudFN0YWNr
Ojpjb250YWlucyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAorSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6ZmluZChFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIGZvciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7IHBvczsgcG9z
ID0gcG9zLT5uZXh0KCkpIHsKICAgICAgICAgaWYgKHBvcy0+ZWxlbWVudCgpID09IGVsZW1lbnQp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBwb3M7CiAgICAg
fQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworSFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6dG9wbW9zdChjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgZm9yIChFbGVtZW50UmVjb3JkKiBwb3MgPSBt
X3RvcC5nZXQoKTsgcG9zOyBwb3MgPSBwb3MtPm5leHQoKSkgeworICAgICAgICBpZiAocG9zLT5l
bGVtZW50KCktPmhhc0xvY2FsTmFtZSh0YWdOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBwb3M7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitib29sIEhUTUxFbGVtZW50U3RhY2s6OmNvbnRh
aW5zKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhZmluZChlbGVtZW50
KTsKIH0KIAogbmFtZXNwYWNlIHsKIAotaW5saW5lIGJvb2wgaXNTY29wZU1hcmtlcihjb25zdCBF
bGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wgaXNTY29wZU1hcmtlcihFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKKyAgICAg
ICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShidXR0b25UYWcpCiAgICAgICAgIHx8IGVsZW1lbnQt
Pmhhc1RhZ05hbWUoY2FwdGlvblRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykKKyAgICAg
ICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShtYXJxdWVlVGFnKQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0
YWJsZVRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0ZFRhZykKICAgICAgICAg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShidXR0b25UYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUobWFycXVlZVRh
ZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpCiAjaWYgRU5BQkxF
KFNWR19GT1JFSUdOX09CSkVDVCkKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdO
YW1lczo6Zm9yZWlnbk9iamVjdFRhZykKICNlbmRpZgogICAgICAgICA7CiB9CiAKLWlubGluZSBi
b29sIGlzTGlzdEl0ZW1TY29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5l
IGJvb2wgaXNMaXN0SXRlbVNjb3BlTWFya2VyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIGlzU2NvcGVNYXJrZXIoZWxlbWVudCkKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShvbFRhZykKICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZyk7CiB9Ci1pbmxp
bmUgYm9vbCBpc1RhYmxlU2NvcGVNYXJrZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK2lubGlu
ZSBib29sIGlzVGFibGVTY29wZU1hcmtlcihFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVy
biBlbGVtZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpCiAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUodGFibGVUYWcpOwpAQCAtMjA0LDcgKzI2Miw3IEBAIGlubGluZSBib29sIGlzVGFibGVT
Y29wZU1hcmtlcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQogCiB9CiAKLXRlbXBsYXRlIDxib29s
IGlzTWFya2VyKGNvbnN0IEVsZW1lbnQqKT4KK3RlbXBsYXRlIDxib29sIGlzTWFya2VyKEVsZW1l
bnQqKT4KIGJvb2wgaW5TY29wZUNvbW1vbihIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiB0b3AsIGNvbnN0IEF0b21pY1N0cmluZyYgdGFyZ2V0VGFnKQogewogICAgIGZvciAoSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogcG9zID0gdG9wOyBwb3M7IHBvcyA9IHBvcy0+bmV4
dCgpKSB7CkBAIC0yNDYsMTkgKzMwNCwxOSBAQCBib29sIEhUTUxFbGVtZW50U3RhY2s6OmluVGFi
bGVTY29wZShjb25zdCBBdG9taWNTdHJpbmcmIHRhcmdldFRhZykgY29uc3QKICAgICByZXR1cm4g
aW5TY29wZUNvbW1vbjxpc1RhYmxlU2NvcGVNYXJrZXI+KG1fdG9wLmdldCgpLCB0YXJnZXRUYWcp
OwogfQogCi1FbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxlbWVudCgpCitFbGVtZW50
KiBIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1f
aHRtbEVsZW1lbnQpOwogICAgIHJldHVybiBtX2h0bWxFbGVtZW50OwogfQogCi1FbGVtZW50KiBI
VE1MRWxlbWVudFN0YWNrOjpoZWFkRWxlbWVudCgpCitFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNr
OjpoZWFkRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQpOwogICAg
IHJldHVybiBtX2hlYWRFbGVtZW50OwogfQogCi1FbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpi
b2R5RWxlbWVudCgpCitFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpib2R5RWxlbWVudCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKG1fYm9keUVsZW1lbnQpOwogICAgIHJldHVybiBtX2JvZHlFbGVt
ZW50OwpAQCAtMjY2LDYgKzMyNCw3IEBAIEVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlF
bGVtZW50KCkKIAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKIHsKKyAgICBBU1NFUlQobV9odG1sRWxlbWVudCk7CiAgICAgbV90
b3Auc2V0KG5ldyBFbGVtZW50UmVjb3JkKGVsZW1lbnQsIG1fdG9wLnJlbGVhc2UoKSkpOwogICAg
IHRvcCgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwogfQpAQCAtMjc5LDEzICszMzgsMTIgQEAg
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BDb21tb24oKQogICAgIG1fdG9wID0gbV90b3AtPnJl
bGVhc2VOZXh0KCk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uRmlyc3RD
b21tb24oRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9u
VG9wQ29tbW9uKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOwogICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKLSAgICBFbGVtZW50UmVjb3JkKiBwb3MgPSBtX3Rv
cC5nZXQoKTsKLSAgICBBU1NFUlQocG9zLT5lbGVtZW50KCkgIT0gZWxlbWVudCk7Ci0gICAgd2hp
bGUgKHBvcy0+bmV4dCgpKSB7CisgICAgQVNTRVJUKHRvcCgpICE9IGVsZW1lbnQpOworICAgIGZv
ciAoRWxlbWVudFJlY29yZCogcG9zID0gbV90b3AuZ2V0KCk7IHBvczsgcG9zID0gcG9zLT5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHBvcy0+bmV4dCgpLT5lbGVtZW50KCkgPT0gZWxlbWVudCkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElzIGl0IE9LIHRvIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCkKICAgICAgICAgICAgIC8vIHdoZW4gdGhlIGNoaWxkcmVuIGFyZW4ndCBhY3R1YWxseSBm
aW5pc2hlZD8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmggYi9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDhjYTdjODFjM2Y3M2U3ZjdkNmY3
NTk2ZWUyZTIyZTY4YjdjNDg3NWEuLmRmMjkwZDQ4NDFlYjhkYzQ3ZTkxYTZlMDBlOTJiYzRkMzQy
ZGJiZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudFN0YWNrLmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50U3RhY2suaApAQCAtMjYsMjEgKzI2LDUzIEBACiAjaWZu
ZGVmIEhUTUxFbGVtZW50U3RhY2tfaAogI2RlZmluZSBIVE1MRWxlbWVudFN0YWNrX2gKIAotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0b21pY1N0
cmluZzsKIGNsYXNzIEVsZW1lbnQ7CiAKKy8vIE5PVEU6IFRoZSBIVE1MNSBzcGVjIHVzZXMgYSBi
YWNrd2FyZHMgKGdyb3dzIGRvd253YXJkKSBzdGFjay4gIFdlJ3JlIHVzaW5nCisvLyBtb3JlIHN0
YW5kYXJkIChncm93cyB1cHdhcmRzKSBzdGFjayB0ZXJtaW5vbG9neSBoZXJlLgogY2xhc3MgSFRN
TEVsZW1lbnRTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgSFRNTEVs
ZW1lbnRTdGFjaygpOwogICAgIH5IVE1MRWxlbWVudFN0YWNrKCk7CiAKKyAgICBjbGFzcyBFbGVt
ZW50UmVjb3JkIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5F
bGVtZW50UmVjb3JkKCk7IC8vIFB1YmxpYyBmb3IgflBhc3NPd25QdHIoKQorICAgIAorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9Cisg
ICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CisKKyAgICAg
ICAgYm9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKKworICAgICAgICBFbGVtZW50
UmVjb3JkKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRTdGFjazsKKworICAgICAgICBF
bGVtZW50UmVjb3JkKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NPd25QdHI8RWxlbWVudFJlY29y
ZD4pOworCisgICAgICAgIFBhc3NPd25QdHI8RWxlbWVudFJlY29yZD4gcmVsZWFzZU5leHQoKSB7
IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CisgICAgICAgIHZvaWQgc2V0TmV4dChQYXNzT3du
UHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorCisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgICAgIE93blB0cjxFbGVtZW50UmVjb3JkPiBt
X25leHQ7CisgICAgfTsKKyAgICAKICAgICBFbGVtZW50KiB0b3AoKSBjb25zdDsKKyAgICBFbGVt
ZW50UmVjb3JkKiB0b3BSZWNvcmQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBib3R0b20oKSBjb25z
dDsKKyAgICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQqKSBjb25zdDsKKyAgICBFbGVtZW50
UmVjb3JkKiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CisKKyAg
ICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8RWxlbWVudD4sIEVsZW1lbnRSZWNvcmQqKTsK
IAogICAgIHZvaWQgcHVzaChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIHB1c2hIVE1M
SHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CkBAIC02MywxNiArOTUsMTQgQEAgcHVi
bGljOgogICAgIGJvb2wgaW5MaXN0SXRlbVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkgY29uc3Q7CiAgICAgYm9vbCBpblRhYmxlU2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKSBjb25zdDsKIAotICAgIEVsZW1lbnQqIGh0bWxFbGVtZW50KCk7Ci0gICAgRWxlbWVudCog
aGVhZEVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpOworICAgIEVsZW1lbnQq
IGh0bWxFbGVtZW50KCkgY29uc3Q7CisgICAgRWxlbWVudCogaGVhZEVsZW1lbnQoKSBjb25zdDsK
KyAgICBFbGVtZW50KiBib2R5RWxlbWVudCgpIGNvbnN0OwogCi0gICAgLy8gUHVibGljIHNvIGZy
ZWUgZnVuY3Rpb25zIGNhbiB1c2UgaXQsIGJ1dCBkZWZpbmVkIHByaXZhdGVseS4KLSAgICBjbGFz
cyBFbGVtZW50UmVjb3JkOwogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hDb21tb24oUGFzc1JlZlB0
cjxFbGVtZW50Pik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKLSAgICB2b2lkIHJlbW92ZU5vbkZp
cnN0Q29tbW9uKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50
Kik7CiAKICAgICBPd25QdHI8RWxlbWVudFJlY29yZD4gbV90b3A7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAppbmRleCBlNzBkZTQyZjRkMmUxNjE3ZjI4YmNk
MDhjMmM0NDQxZGYyODgxNjI1Li5mOGUxZGQ1ZDU5YWZlMDVlMDE0NmFhMTYwN2FlYmFiZTNkYjI4
OWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC02
NCw2ICs2NCwxNiBAQCB2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpyZXBs
YWNlRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbgogICAgIG1fZWxlbWVudCA9IGVs
ZW1lbnQ7CiB9CiAKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJh
dG9yPT0oY29uc3QgRW50cnkmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCkg
PT0gb3RoZXIuZWxlbWVudCgpOworfQorCitib29sIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OkVudHJ5OjpvcGVyYXRvciE9KGNvbnN0IEVudHJ5JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gZWxlbWVudCgpICE9IG90aGVyLmVsZW1lbnQoKTsKK30KKwogSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCgpCiB7CiB9CkBAIC03MiwxMSArODIs
NDUgQEAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6fkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QoKQogewogfQogCitFbGVtZW50KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0
RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHRhcmdldE5hbWUpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW21fZW50cmllcy5zaXplKCkg
LSBpXTsKKyAgICAgICAgaWYgKGVudHJ5LmlzTWFya2VyKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKGVudHJ5LmVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRhcmdldE5hbWUp
KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmVsZW1lbnQoKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y29udGFpbnMoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gISFmaW5kKGVsZW1lbnQpOworfQorCitIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Zmlu
ZChFbGVtZW50KiBlbGVtZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5k
KGVsZW1lbnQpOworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICAvLyBUaGlz
IGlzIHNvbWV3aGF0IG9mIGEgaGFjaywgYW5kIGlzIHdoeSB0aGlzIG1ldGhvZCBjYW4ndCBiZSBj
b25zdC4KKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaW5kZXhdOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwogdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjphcHBlbmQoRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBtX2VudHJpZXMuYXBwZW5kKGVsZW1lbnQpOwogfQogCit2b2lk
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnJlbW92ZShFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5maW5kKGVsZW1lbnQpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9lbnRyaWVzLnJlbW92ZShpbmRleCk7Cit9CisKIHZv
aWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xlYXJUb0xhc3RNYXJrZXIoKQogewogICAg
IHdoaWxlIChtX2VudHJpZXMuc2l6ZSgpICYmICFtX2VudHJpZXMubGFzdCgpLmlzTWFya2VyKCkp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaAppbmRleCBhOWM1NmU2NTRi
YzkzNDhhMGVkMmRlZmQxNTI3ZDRmZTFiZmI5OGUwLi5kNjEzYTg2NDAxZDNjZmMyN2NmOWI4MTg1
MTZiOWNlYzIzMzczNjk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
LmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdG9t
aWNTdHJpbmc7CiBjbGFzcyBFbGVtZW50OwogCiAvLyBUaGlzIG1heSBlbmQgdXAgbWVyZ2VkIGlu
dG8gSFRNTEVsZW1lbnRTdGFjay4KQEAgLTQwLDEyICs0MSw2IEBAIHB1YmxpYzoKICAgICBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0KCk7CiAgICAgfkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5zaXplKCk7IH0KLQotICAgIHZv
aWQgYXBwZW5kKEVsZW1lbnQqKTsKLSAgICB2b2lkIGNsZWFyVG9MYXN0TWFya2VyKCk7Ci0KICAg
ICAvLyBJZGVhbGx5IEVudHJ5IHdvdWxkIGJlIHByaXZhdGUsIGJ1dCBIVE1MVHJlZUJ1aWxkZXIg
aGFzIHRvIGNvb3JkaW5hdGUKICAgICAvLyBiZXR3ZWVuIHRoZSBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0IGFuZCBIVE1MRWxlbWVudFN0YWNrIGFuZCBuZWVkcwogICAgIC8vIGFjY2VzcyB0byBF
bnRyeTo6aXNNYXJrZXIoKSBhbmQgRW50cnk6OnJlcGxhY2VFbGVtZW50KCkgdG8gZG8gc28uCkBA
IC02MSwxMCArNTYsMjUgQEAgcHVibGljOgogICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAK
KyAgICAgICAgLy8gTmVlZGVkIGZvciB1c2Ugd2l0aCBWZWN0b3IuCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFbnRyeSYpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRW50cnkmKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFbGVtZW50
PiBtX2VsZW1lbnQ7CiAgICAgfTsKIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5z
aXplKCk7IH0KKworICAgIEVsZW1lbnQqIGNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYpOworCisgICAgRW50cnkqIGZpbmQoRWxlbWVudCopOworICAgIGJv
b2wgY29udGFpbnMoRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kKEVsZW1lbnQqKTsKKyAgICB2
b2lkIHJlbW92ZShFbGVtZW50Kik7CisgICAgdm9pZCBjbGVhclRvTGFzdE1hcmtlcigpOworCiAg
ICAgY29uc3QgRW50cnkmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fZW50
cmllc1tpXTsgfQogICAgIEVudHJ5JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX2Vu
dHJpZXNbaV07IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAyNDU1NmMxNjI2NjI4
ZTUyM2Y2ZWFmYTZhMGFiOWE4ODkxMjVlZGM3Li44MTFhNTVlZjlkM2M2Yjk5ZDk2YzYxYWRkOTRh
MzliNmU5NmRjYmViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzEsMTggKzMxLDE5
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCi0jaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIApAQCAtNjQsNiArNjUsMTMyIEBAIGJvb2wgc2hvdWxkVXNlTGVnYWN5VHJlZUJ1aWxk
ZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiAhZG9jdW1lbnQtPnNldHRpbmdzKCkg
fHwgIWRvY3VtZW50LT5zZXR0aW5ncygpLT5odG1sNVRyZWVCdWlsZGVyRW5hYmxlZCgpOwogfQog
Citib29sIGlzTnVtYmVyZWRIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQor
eworICAgIHJldHVybiB0YWdOYW1lID09IGgxVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDJU
YWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoM1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGg0
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaDVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBo
NlRhZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3NwZWNpYWwKK2Jvb2wgaXNTcGVjaWFsVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBh
ZGRyZXNzVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYXJ0aWNsZVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYmFzZVRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGJhc2Vmb250VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImJnc291
bmQiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IGJvZHlUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBiclRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGJ1dHRvblRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNlbnRlclRhZworICAg
ICAgICB8fCB0YWdOYW1lID09IGNvbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGNvbGdyb3Vw
VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gImNvbW1hbmQiCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gZGRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSAiZGV0YWlscyIKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBkaXJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBkaXZUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBkbFRhZworICAgICAgICB8fCB0YWdOYW1lID09IGR0VGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gZW1iZWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBmaWVsZHNldFRhZwor
ICAgICAgICB8fCB0YWdOYW1lID09ICJmaWd1cmUiCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9v
dGVyVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZm9ybVRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGZyYW1lVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gZnJhbWVzZXRUYWcKKyAgICAgICAg
fHwgaXNOdW1iZXJlZEhlYWRlclRhZyh0YWdOYW1lKQorICAgICAgICB8fCB0YWdOYW1lID09IGhl
YWRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoZWFkZXJUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBoZ3JvdXBUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBoclRhZworICAgICAgICB8fCB0
YWdOYW1lID09IGlmcmFtZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGltZ1RhZworICAgICAg
ICB8fCB0YWdOYW1lID09IGlucHV0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gaXNpbmRleFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IGxpVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbGlu
a1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBtZW51VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbWV0YVRhZworICAgICAgICB8fCB0
YWdOYW1lID09IG5hdlRhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vZW1iZWRUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSBub2ZyYW1lc1RhZworICAgICAgICB8fCB0YWdOYW1lID09IG5vc2Ny
aXB0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gb2xUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9
PSBwVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gcGFyYW1UYWcKKyAgICAgICAgfHwgdGFnTmFt
ZSA9PSBwbGFpbnRleHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBwcmVUYWcKKyAgICAgICAg
fHwgdGFnTmFtZSA9PSBzY3JpcHRUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzZWN0aW9uVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gc2VsZWN0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0g
c3R5bGVUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB0Ym9keVRhZworICAgICAgICB8fCB0YWdO
YW1lID09IHRleHRhcmVhVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGZvb3RUYWcKKyAgICAg
ICAgfHwgdGFnTmFtZSA9PSB0aGVhZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRpdGxlVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gdHJUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSB1bFRh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHdiclRhZworICAgICAgICB8fCB0YWdOYW1lID09IHht
cFRhZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3Njb3BpbmcKKy8vIFNhbWUgYXMgaXNTY29w
aW5nVGFnIGluIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAKKy8vIGFuZCBpc1Njb3BlTWFya2Vy
IGluIEhUTUxFbGVtZW50U3RhY2suY3BwCitib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnCisgICAg
ICAgIHx8IHRhZ05hbWUgPT0gYnV0dG9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY2FwdGlv
blRhZworI2lmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcKKyNlbmRpZgorICAgICAgICB8fCB0YWdOYW1l
ID09IGh0bWxUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBtYXJxdWVlVGFnCisgICAgICAgIHx8
IHRhZ05hbWUgPT0gb2JqZWN0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdGFibGVUYWcKKyAg
ICAgICAgfHwgdGFnTmFtZSA9PSB0ZFRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRoVGFnOwor
fQorCitib29sIGlzTm9uQW5jaG9yRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYlRhZworICAgICAgICB8fCB0YWdOYW1l
ID09IGJpZ1RhZworICAgICAgICB8fCB0YWdOYW1lID09IGNvZGVUYWcKKyAgICAgICAgfHwgdGFn
TmFtZSA9PSBlbVRhZworICAgICAgICB8fCB0YWdOYW1lID09IGZvbnRUYWcKKyAgICAgICAgfHwg
dGFnTmFtZSA9PSBpVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9iclRhZworICAgICAgICB8
fCB0YWdOYW1lID09IHNUYWcKKyAgICAgICAgfHwgdGFnTmFtZSA9PSBzbWFsbFRhZworICAgICAg
ICB8fCB0YWdOYW1lID09IHN0cmlrZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHN0cm9uZ1Rh
ZworICAgICAgICB8fCB0YWdOYW1lID09IHR0VGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRh
ZzsKK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2Zvcm1hdHRpbmcKK2Jvb2wgaXNGb3JtYXR0aW5n
VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9
PSBhVGFnIHx8IGlzTm9uQW5jaG9yRm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKworLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
cGFyc2luZy5odG1sI3BocmFzaW5nCitib29sIGlzUGhyYXNpbmdUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiAhaXNTcGVjaWFsVGFnKHRhZ05hbWUpICYmICFp
c1Njb3BpbmdUYWcodGFnTmFtZSkgJiYgIWlzRm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UKIAogSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRv
a2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVy
cm9ycykKQEAgLTQxOSw5ICs1NDYsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBpbnNlcnRFbGVtZW50
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGgxVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoMlRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gaDNUYWcgfHwgdG9rZW4ubmFtZSgpID09IGg0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBo
NVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDZUYWcpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyZWRI
ZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFn
SWZQSW5TY29wZSgpOwotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgICAg
IGluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC00NzAsNyArNTk2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBjb2RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gZm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1Rh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IHN0cmlrZVRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykgeworICAgICAgICBpZiAoaXNOb25BbmNob3JGb3JtYXR0
aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgICAgICBpbnNlcnRGb3JtYXR0aW5nRWxlbWVu
dCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC02NzMsNiArNzk5LDE2MCBAQCBib29s
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IFRoaXMgcHJvYmFi
bHkgYmVsb25ncyBvbiBIVE1MRWxlbWVudFN0YWNrLgorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogSFRNTFRyZWVCdWlsZGVyOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1l
bnQoRWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQpCit7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9jayA9IDA7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogcmVjb3JkID0gbV9vcGVuRWxlbWVudHMudG9wUmVjb3JkKCk7CisgICAg
Zm9yICg7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJl
Y29yZC0+ZWxlbWVudCgpID09IGZvcm1hdHRpbmdFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IHJl
Y29yZC0+ZWxlbWVudCgpLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgLy8gIXBocmFzaW5nICYmICFm
b3JtYXR0aW5nID09IHNjb3BpbmcgfHwgc3BlY2lhbAorICAgICAgICBpZiAoaXNTY29waW5nVGFn
KHRhZ05hbWUpIHx8IGlzU3BlY2lhbFRhZyh0YWdOYW1lKSkKKyAgICAgICAgICAgIGZ1cnRoZXN0
QmxvY2sgPSByZWNvcmQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZmluZEZvc3RlclBhcmVudEZvcihF
bGVtZW50KiBlbGVtZW50KQoreworICAgIEVsZW1lbnQqIGZvc3RlclBhcmVudEVsZW1lbnQgPSAw
OworICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVsZW1lbnRS
ZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKKyAg
ICBpZiAobGFzdFRhYmxlRWxlbWVudFJlY29yZCkgeworICAgICAgICBFbGVtZW50KiBsYXN0VGFi
bGVFbGVtZW50ID0gbGFzdFRhYmxlRWxlbWVudFJlY29yZC0+ZWxlbWVudCgpOworICAgICAgICBp
ZiAobGFzdFRhYmxlRWxlbWVudC0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIGFuIGluc2VydEVsZW1lbnQgd2hpY2ggZG9lcyBub3Qgc2VuZCBtdXRhdGlvbiBldmVu
dHMuCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIGxhc3RU
YWJsZUVsZW1lbnQtPnBhcmVudCgpLT5pbnNlcnRCZWZvcmUoZWxlbWVudCwgbGFzdFRhYmxlRWxl
bWVudCwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9IGxhc3RUYWJsZUVsZW1l
bnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VS
VChtX2lzUGFyc2luZ0ZyYWdtZW50KTsKKyAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9IG1f
b3BlbkVsZW1lbnRzLmJvdHRvbSgpOyAvLyA8aHRtbD4gZWxlbWVudAorICAgIH0KKworICAgIGZv
c3RlclBhcmVudEVsZW1lbnQtPnBhcnNlckFkZENoaWxkKGVsZW1lbnQpOworfQorCisvLyBGSVhN
RTogVGhpcyBzaG91bGQgaGF2ZSBhIHdoaXR0eSBuYW1lLgorLy8gRklYTUU6IFRoaXMgbXVzdCBi
ZSBpbXBsZW1lbnRlZCBpbiBtYW55IG90aGVyIHBsYWNlcyBpbiBXZWJDb3JlLgordm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnJlcGFyZW50Q2hpbGRyZW4oRWxlbWVudCogb2xkUGFyZW50LCBFbGVtZW50
KiBuZXdQYXJlbnQpCit7CisgICAgTm9kZSogY2hpbGQgPSBvbGRQYXJlbnQtPmZpcnN0Q2hpbGQo
KTsKKyAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgTm9kZSogbmV4dENoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG5ld1Bh
cmVudC0+YXBwZW5kQ2hpbGQoY2hpbGQsIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAg
ICAgIGNoaWxkID0gbmV4dENoaWxkOworICAgIH0KK30KKworLy8gaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0
bWwjcGFyc2luZy1tYWluLWluYm9keQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9w
dGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQoreworICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgIC8vIDEuCisgICAgICAgIEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV9hY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMuY2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4u
bmFtZSgpKTsKKyAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudCB8fCAhbV9vcGVuRWxlbWVu
dHMuaW5TY29wZShmb3JtYXR0aW5nRWxlbWVudCkpIHsKKyAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hlY2sgdGhlIHN0YWNr
IG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBlcnJvci4KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkKiBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLmZpbmQo
Zm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50UmVjb3Jk
KSB7CisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgICAgIG1fYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdHRpbmdFbGVtZW50ICE9IGN1
cnJlbnRFbGVtZW50KCkpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAg
Ly8gMi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RC
bG9jayA9IGZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChmb3JtYXR0aW5nRWxlbWVu
dCk7CisgICAgICAgIC8vIDMuCisgICAgICAgIGlmICghZnVydGhlc3RCbG9jaykgeworICAgICAg
ICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWwoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAg
ICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIC8vIDQuCisgICAgICAgIEFTU0VSVChmdXJ0aGVzdEJsb2Nr
LT5pc0Fib3ZlKGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7CisgICAgICAgIEVsZW1lbnQqIGNv
bW1vbkFuY2VzdG9yID0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgp
OworICAgICAgICAvLyA1LgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBib29rbWFyaz8K
KyAgICAgICAgLy8gNi4KKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCog
bm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQqIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOworICAgICAgICBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkKiBsYXN0Tm9kZSA9IGZ1cnRoZXN0QmxvY2s7CisgICAgICAgIHdoaWxl
ICgxKSB7CisgICAgICAgICAgICAvLyA2LjEKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIG5leHROb2RlID0gbm9kZS0+
bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIGluIGNh
c2Ugbm9kZSBpcyBkZWxldGVkIGluIDYuMi4KKyAgICAgICAgICAgIC8vIDYuMgorICAgICAgICAg
ICAgaWYgKCFtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250YWlucyhub2RlLT5lbGVtZW50
KCkpKSB7CisgICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucmVtb3ZlKG5vZGUtPmVsZW1l
bnQoKSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IDA7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA2LjMKKyAgICAgICAgICAgIGlmIChu
b2RlID09IGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgLy8gNi40CisgICAgICAgICAgICBpZiAobGFzdE5vZGUgPT0gZnVydGhlc3RC
bG9jaykKKyAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBtb3ZlIGJvb2ttYXJr
LgorICAgICAgICAgICAgLy8gNi41CisgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9z
ZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICAgICAg
QXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBub2RlLT5lbGVt
ZW50KCktPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIC8vIElzIGNyZWF0ZUVsZW1lbnQgY29y
cmVjdD8gKGluc3RlYWQgb2YgaW5zZXJ0RWxlbWVudCkKKyAgICAgICAgICAgIC8vIERvZXMgdGhp
cyBjb2RlIGV2ZXIgbGVhdmUgbmV3RWxlbWVudCB1bmF0dGFjaGVkPworICAgICAgICAgICAgUmVm
UHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGZha2VUb2tlbik7CisgICAg
ICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0gbV9h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZmluZChub2RlLT5lbGVtZW50KCkpOworICAgICAgICAg
ICAgbm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKKyAgICAgICAg
ICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQucmVsZWFzZSgpKTsKKyAgICAgICAg
ICAgIC8vIDYuNgorICAgICAgICAgICAgLy8gVXNlIGFwcGVuZENoaWxkIGluc3RlYWQgb2YgcGFy
c2VyQWRkQ2hpbGQgdG8gaGFuZGxlIHBvc3NpYmxlIHJlcGFyZW50aW5nLgorICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIG5vZGUtPmVsZW1lbnQoKS0+YXBwZW5kQ2hp
bGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7Cisg
ICAgICAgICAgICAvLyA2LjcKKyAgICAgICAgICAgIGxhc3ROb2RlID0gbm9kZTsKKyAgICAgICAg
fQorICAgICAgICAvLyA3CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29tbW9uQW5jZXN0
b3JUYWcgPSBjb21tb25BbmNlc3Rvci0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmIChjb21tb25B
bmNlc3RvclRhZyA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgY29tbW9uQW5jZXN0b3JUYWcg
PT0gdGJvZHlUYWcKKyAgICAgICAgICAgIHx8IGNvbW1vbkFuY2VzdG9yVGFnID09IHRmb290VGFn
CisgICAgICAgICAgICB8fCBjb21tb25BbmNlc3RvclRhZyA9PSB0aGVhZFRhZworICAgICAgICAg
ICAgfHwgY29tbW9uQW5jZXN0b3JUYWcgPT0gdHJUYWcpCisgICAgICAgICAgICBmaW5kRm9zdGVy
UGFyZW50Rm9yKGxhc3ROb2RlLT5lbGVtZW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBjb21tb25BbmNlc3Rvci0+YXBwZW5k
Q2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gOAorICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9z
ZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgorICAgICAgICBBdG9t
aWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGZvcm1hdHRpbmdFbGVt
ZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0g
Y3JlYXRlRWxlbWVudChmYWtlVG9rZW4pOworICAgICAgICAvLyA5CisgICAgICAgIHJlcGFyZW50
Q2hpbGRyZW4oZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLCBuZXdFbGVtZW50LmdldCgpKTsKKyAg
ICAgICAgLy8gMTAKKyAgICAgICAgZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpLT5wYXJzZXJBZGRD
aGlsZChuZXdFbGVtZW50KTsKKyAgICAgICAgLy8gMTEKKyAgICAgICAgbV9hY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gaW5zZXJ0IG5ldyBlbGVtZW50IGF0IGJvb2ttYXJrCisgICAgICAgIC8vIDEy
CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7CisgICAg
ICAgIG1fb3BlbkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2sp
OworICAgIH0KK30KKwogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewpAQCAt
Nzg3LDcgKzEwNjcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBoMVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGgzVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBoNFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaDVUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IGg2VGFnKSB7CisgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRv
a2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5TY29wZSh0
b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtODAzLDkgKzEwODMsOCBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsgLy8gVGFrZSBhIGRlZXAgYnJlYXRoLgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnIHx8IHRva2VuLm5hbWUo
KSA9PSBjb2RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
Zm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbm9iclRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc21hbGxUYWcgfHwg
dG9rZW4ubmFtZSgpID09IHN0cmlrZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnIHx8
IHRva2VuLm5hbWUoKSA9PSB0dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZykgewotICAgICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEg
Y29tcGxpY2F0ZWQgYWxnb3JpdGhtIHRoYXQgZ29lcyBoZXJlLgorICAgICAgICBpZiAoaXNGb3Jt
YXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGNhbGxUaGVBZG9wdGlvbkFn
ZW5jeSh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcg
fHwgdG9rZW4ubmFtZSgpID09IG9iamVjdFRhZykgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4
IGY1MTNmMmFmNWIzMzY1MDcxOGZhNzgyODU0MTFjZGM1ZWY0NTk0YjIuLmJiNzZiOWNhMzUxYzA5
NjBmODZjYWM0ZjcyMTZkYjI2MWE1NjVmYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
VHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTEy
NSw2ICsxMjUsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5T
Y29wZSgpOwogCisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RC
bG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGZpbmRGb3N0ZXJQ
YXJlbnRGb3IoRWxlbWVudCopOworICAgIHZvaWQgcmVwYXJlbnRDaGlsZHJlbihFbGVtZW50KiBv
bGRQYXJlbnQsIEVsZW1lbnQqIG5ld1BhcmVudCk7CisgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25B
Z2VuY3koQXRvbWljSFRNTFRva2VuJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZFR5
cGU+CiAgICAgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IGF0dGFjaChOb2RlKiBwYXJlbnQsIFBhc3NS
ZWZQdHI8Q2hpbGRUeXBlPiBwcnBDaGlsZCkKICAgICB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmZWUwN2RkZGU1NzEx
NGI2ZmUzNGNlY2Y4ZDAyZmY1NTYzNmVmZDZhLi5mMmVkZDkzODg1ZmE2ZGVjMzhlZjJkYzIwMjZh
YjEyOTdmMGFiZjQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTE1Miw2ICsxNTIsNyBAQCBpbmxpbmUgRnJhbWU6OkZy
YW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFt
ZUxvYWRlcgogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKICAgICAsIG1fZXhjbHVkZUZy
b21UZXh0U2VhcmNoKGZhbHNlKQogeworICAgIEFTU0VSVChwYWdlKTsKICAgICBBdG9taWNTdHJp
bmc6OmluaXQoKTsKICAgICBIVE1MTmFtZXM6OmluaXQoKTsKICAgICBRdWFsaWZpZWROYW1lOjpp
bml0KCk7Cg==
</data>
<flag name="review"
          id="47992"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>