<?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>94107</bug_id>
          
          <creation_ts>2012-08-15 07:17:55 -0700</creation_ts>
          <short_desc>Refactoring: move EventHandler::targetNode into HitTestResult</short_desc>
          <delta_ts>2012-08-15 15:14:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Iain Merrick">husky</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>aboxhall</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>husky</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695982</commentid>
    <comment_count>0</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 07:17:55 -0700</bug_when>
    <thetext>Refactoring: move EventHandler::targetNode into HitTestResult</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695986</commentid>
    <comment_count>1</comment_count>
      <attachid>158566</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 07:23:09 -0700</bug_when>
    <thetext>Created attachment 158566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695989</commentid>
    <comment_count>2</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 07:26:33 -0700</bug_when>
    <thetext>Unfortunately had to modify lots of platform-specific files. Relying on EWS to catch any mistakes.

There are several places where we call targetNode() repeatedly; seems like it&apos;d be worth calling it once and caching the result. I have *not* done so in this patch but let me know if you&apos;d like me to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696036</commentid>
    <comment_count>3</comment_count>
      <attachid>158566</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-15 08:56:48 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review

&gt; Source/WebCore/rendering/HitTestResult.cpp:808
&gt; +    Node* node = innerNode();
&gt; +    if (!node)
&gt; +        return 0;
&gt; +    if (node-&gt;inDocument())
&gt; +        return node;
&gt; +
&gt; +    Element* element = node-&gt;parentElement();
&gt; +    if (element &amp;&amp; element-&gt;inDocument())
&gt; +        return element;

I&apos;m trying to understanding how this is different from innerNode.  In the context of an event, it makes sense to speak about the targetNode of an event, but outside the context of an event the word &quot;target&quot; doesn&apos;t mean that much.

Specifically, how can a node not be inDocument but its parentElement be inDocument?

&gt; Source/WebCore/rendering/HitTestResult.h:180
&gt; +    Node* targetNode() const;

I would move this function next to innerNode() so that it&apos;s clear that there is a choice between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696086</commentid>
    <comment_count>4</comment_count>
      <attachid>158566</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 10:00:36 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review

&gt;&gt; Source/WebCore/rendering/HitTestResult.cpp:808
&gt;&gt; +        return element;
&gt; 
&gt; I&apos;m trying to understanding how this is different from innerNode.  In the context of an event, it makes sense to speak about the targetNode of an event, but outside the context of an event the word &quot;target&quot; doesn&apos;t mean that much.
&gt; 
&gt; Specifically, how can a node not be inDocument but its parentElement be inDocument?

That&apos;s a great question, and I don&apos;t know! I&apos;m trying to understand this code by teasing apart the bits that look unnecessarily tangled-up.

Does inDocument() refer to the shadow DOM?

&gt;&gt; Source/WebCore/rendering/HitTestResult.h:180
&gt;&gt; +    Node* targetNode() const;
&gt; 
&gt; I would move this function next to innerNode() so that it&apos;s clear that there is a choice between the two.

Good idea, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696090</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:12:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 158566 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/HitTestResult.cpp:808
&gt; &gt;&gt; +        return element;
&gt; &gt; 
&gt; &gt; I&apos;m trying to understanding how this is different from innerNode.  In the context of an event, it makes sense to speak about the targetNode of an event, but outside the context of an event the word &quot;target&quot; doesn&apos;t mean that much.
&gt; &gt; 
&gt; &gt; Specifically, how can a node not be inDocument but its parentElement be inDocument?
&gt; 
&gt; That&apos;s a great question, and I don&apos;t know! I&apos;m trying to understand this code by teasing apart the bits that look unnecessarily tangled-up.
&gt; 
&gt; Does inDocument() refer to the shadow DOM?

No. It&apos;s a bit on a node that tracks whether a node is in a document tree (shadow DOM elements are  considered in-document for this purpose). It answer the question: is the node floating in space, or can you reach the document node by traversing its ancestor?

&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/HitTestResult.h:180
&gt; &gt;&gt; +    Node* targetNode() const;
&gt; &gt; 
&gt; &gt; I would move this function next to innerNode() so that it&apos;s clear that there is a choice between the two.
&gt; 
&gt; Good idea, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696091</commentid>
    <comment_count>6</comment_count>
      <attachid>158566</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:16:32 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review

&gt;&gt;&gt;&gt; Source/WebCore/rendering/HitTestResult.cpp:808
&gt;&gt;&gt;&gt; +        return element;
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m trying to understanding how this is different from innerNode.  In the context of an event, it makes sense to speak about the targetNode of an event, but outside the context of an event the word &quot;target&quot; doesn&apos;t mean that much.
&gt;&gt;&gt; 
&gt;&gt;&gt; Specifically, how can a node not be inDocument but its parentElement be inDocument?
&gt;&gt; 
&gt;&gt; That&apos;s a great question, and I don&apos;t know! I&apos;m trying to understand this code by teasing apart the bits that look unnecessarily tangled-up.
&gt;&gt; 
&gt;&gt; Does inDocument() refer to the shadow DOM?
&gt; 
&gt; No. It&apos;s a bit on a node that tracks whether a node is in a document tree (shadow DOM elements are  considered in-document for this purpose). It answer the question: is the node floating in space, or can you reach the document node by traversing its ancestor?

Ah, the difference is that the innerNode can be a non-Element for hit-testing purposes. For events, it has to be an element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696093</commentid>
    <comment_count>7</comment_count>
      <attachid>158566</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:17:43 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review

&gt;&gt;&gt;&gt;&gt; Source/WebCore/rendering/HitTestResult.cpp:808
&gt;&gt;&gt;&gt;&gt; +        return element;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I&apos;m trying to understanding how this is different from innerNode.  In the context of an event, it makes sense to speak about the targetNode of an event, but outside the context of an event the word &quot;target&quot; doesn&apos;t mean that much.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Specifically, how can a node not be inDocument but its parentElement be inDocument?
&gt;&gt;&gt; 
&gt;&gt;&gt; That&apos;s a great question, and I don&apos;t know! I&apos;m trying to understand this code by teasing apart the bits that look unnecessarily tangled-up.
&gt;&gt;&gt; 
&gt;&gt;&gt; Does inDocument() refer to the shadow DOM?
&gt;&gt; 
&gt;&gt; No. It&apos;s a bit on a node that tracks whether a node is in a document tree (shadow DOM elements are  considered in-document for this purpose). It answer the question: is the node floating in space, or can you reach the document node by traversing its ancestor?
&gt; 
&gt; Ah, the difference is that the innerNode can be a non-Element for hit-testing purposes. For events, it has to be an element.

I don&apos;t know why we&apos;re checking for element-&gt;inDocument there though. I think we should just zap that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696098</commentid>
    <comment_count>8</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 10:21:15 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Ah, the difference is that the innerNode can be a non-Element for hit-testing purposes. For events, it has to be an element.

Could we give this a better name, then? innerElement?

&gt; I don&apos;t know why we&apos;re checking for element-&gt;inDocument there though. I think we should just zap that.

So just &quot;return element ? element : node;&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696104</commentid>
    <comment_count>9</comment_count>
      <attachid>158566</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:25:59 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

I am actually just totally confused about what this code does. Let me dig up some history...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696106</commentid>
    <comment_count>10</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 10:27:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 158566 [details])
&gt; I am actually just totally confused about what this code does. Let me dig up some history...

Glad it&apos;s not just me. Thanks for your patience. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696108</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:28:35 -0700</bug_when>
    <thetext>First off, it looks like you&apos;re reverting the change that Alice made: https://bugs.webkit.org/show_bug.cgi?id=57921</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696111</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:34:38 -0700</bug_when>
    <thetext>The archeology sheds no light. I think we should do this:

1) work on this patch
2) file a bug to refurbish targetNode function and fix it.

Also -- why exactly do you need targetNode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696114</commentid>
    <comment_count>13</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 10:38:45 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; First off, it looks like you&apos;re reverting the change that Alice made: https://bugs.webkit.org/show_bug.cgi?id=57921

Hmm, true. I&apos;d argue that this is a different way of doing the same thing (moving the method from MouseEventWithHitTestResults -&gt; HitTestResult, instead of MouseEventWithHitTestResults -&gt; EventHandler); and now that WebFrameImpl is calling this same method, HitTestResult is a more natural location.

Please feel free to push back if you think this refactoring isn&apos;t worthwhile. But it looks to me (coming to this code fresh and not fully understanding it yet) like EventHandler has accumulated some cruft.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696119</commentid>
    <comment_count>14</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-15 10:41:30 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; The archeology sheds no light. I think we should do this:
&gt; 
&gt; 1) work on this patch
&gt; 2) file a bug to refurbish targetNode function and fix it.
&gt; 
&gt; Also -- why exactly do you need targetNode?

My main focus here is unforking some Android-specific relating to text selection -- see https://bugs.webkit.org/show_bug.cgi?id=93998

I figured it was worth trying to clean up the campground a little at the same time. (Our Android changes are a bit hacky and need cleaning up anyway.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696140</commentid>
    <comment_count>15</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 10:57:33 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; First off, it looks like you&apos;re reverting the change that Alice made: https://bugs.webkit.org/show_bug.cgi?id=57921
&gt; 
&gt; Hmm, true. I&apos;d argue that this is a different way of doing the same thing (moving the method from MouseEventWithHitTestResults -&gt; HitTestResult, instead of MouseEventWithHitTestResults -&gt; EventHandler); and now that WebFrameImpl is calling this same method, HitTestResult is a more natural location.
&gt; 
&gt; Please feel free to push back if you think this refactoring isn&apos;t worthwhile. But it looks to me (coming to this code fresh and not fully understanding it yet) like EventHandler has accumulated some cruft.

No, I think this makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696149</commentid>
    <comment_count>16</comment_count>
      <attachid>158566</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-15 11:02:54 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=158566&amp;action=review

I am ok with this. Ryosuke, any comments before we land?

&gt; Source/WebCore/rendering/HitTestResult.cpp:798
&gt; +Node* HitTestResult::targetNode() const

Let&apos;s file a separate bug to refurbish this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696197</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 11:32:39 -0700</bug_when>
    <thetext>I don&apos;t think &quot;targetNode&quot; is a descriptive name. The whole point of this function is to preferring an attached node when the inner node is detached from the document. To make it even more ad-hoc, it only moves up one level in the tree. The function name should at least reflect that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696415</commentid>
    <comment_count>18</comment_count>
      <attachid>158566</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-15 15:14:21 -0700</bug_when>
    <thetext>Comment on attachment 158566
Patch

Clearing flags on attachment: 158566

Committed r125715: &lt;http://trac.webkit.org/changeset/125715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696416</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-15 15:14:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158566</attachid>
            <date>2012-08-15 07:23:09 -0700</date>
            <delta_ts>2012-08-15 15:14:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94107-20120815152235.patch</filename>
            <type>text/plain</type>
            <size>26603</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzM0Nzc2NjQ1NTVkYTMx
ZjRkNTA3ZDBhMDY5MDIyNWJlNmYxYWVkYy4uZmFhYTYzMWJmM2ZmNzM3MjU1YzAwYTcxNTE5OWM1
YzkxNWMwMWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA4LTE1ICBJYWlu
IE1lcnJpY2sgIDxodXNreUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVmYWN0b3Jpbmc6IG1v
dmUgRXZlbnRIYW5kbGVyOjp0YXJnZXROb2RlIGludG8gSGl0VGVzdFJlc3VsdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHN0YXRpYyBoZWxwZXIg
bWV0aG9kIGluIEV2ZW50SGFuZGxlciB3YXMgbWFkZSBwdWJsaWMgc28gdGhhdAorICAgICAgICBX
ZWJGcmFtZUltcGwgY2FuIGNhbGwgaXQuIFRoYXQncyB1bnRpZHkgYmVjYXVzZSBFdmVudEhhbmRs
ZXIgaXNuJ3QKKyAgICAgICAgcmVhbGx5IGludm9sdmVkLiBUaGlzIHBhdGNoIHR1cm5zIGl0IGlu
dG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9mCisgICAgICAgIEhpdFRlc3RSZXN1bHQgKHdpdGggYSB3
cmFwcGVyIGluIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdCBmb3IKKyAgICAgICAgY29udmVu
aWVuY2UpLgorICAgIAorICAgICAgICBQdXJlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UsIG5vIG5ldyB0ZXN0IG5lZWRlZC4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9t
TW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nl
c3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWcp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVzdFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCk6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAg
ICAgICogcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmg6CisgICAgICAgIChXZWJD
b3JlOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKToKKyAgICAgICAg
KiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dCk6CisgICAgICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgor
ICAgICAgICAqIHBhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAg
ICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKyAgICAg
ICAgKiBwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnRhcmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKEhpdFRlc3RSZXN1bHQpOgorCiAyMDEyLTA4LTE1
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAg
ICAgICAgIFJlbGF0aXZlIHVuaXRzIGFyZSBub3Qgc2V0IHdoZW4gdGhlIGNhbnZhcyBoYXMgbm90
IHBhcmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3Zjc4ZGRlZGJkZjVkOWRiZmVh
MWZmZTk3NjIyMjY3ZGM1MmQyNzcyLi44NjM5MTk2ODliNjNhMzNjYjcwODg1ZGI3MmIwMTM5OGE2
MmM5YTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEy
LTA4LTE1ICBJYWluIE1lcnJpY2sgIDxodXNreUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVm
YWN0b3Jpbmc6IG1vdmUgRXZlbnRIYW5kbGVyOjp0YXJnZXROb2RlIGludG8gSGl0VGVzdFJlc3Vs
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHN0
YXRpYyBoZWxwZXIgbWV0aG9kIGluIEV2ZW50SGFuZGxlciB3YXMgbWFkZSBwdWJsaWMgc28gdGhh
dAorICAgICAgICBXZWJGcmFtZUltcGwgY2FuIGNhbGwgaXQuIFRoYXQncyB1bnRpZHkgYmVjYXVz
ZSBFdmVudEhhbmRsZXIgaXNuJ3QKKyAgICAgICAgcmVhbGx5IGludm9sdmVkLiBUaGlzIHBhdGNo
IHR1cm5zIGl0IGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9mCisgICAgICAgIEhpdFRlc3RSZXN1
bHQgKHdpdGggYSB3cmFwcGVyIGluIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdCBmb3IKKyAg
ICAgICAgY29udmVuaWVuY2UpLgorCisgICAgICAgIFB1cmUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2
aW9yIGNoYW5nZSwgbm8gbmV3IHRlc3QgbmVlZGVkLgorCisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQpOgorCiAyMDEyLTA4LTE0ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFNoYXJlIGNvbW1vbiBjb2RlIGJldHdlZW4gY2FsZW5kYXIg
cGlja2VyIGFuZCBjb2xvciBzdWdnZXN0aW9uIHBpY2tlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IDNkZmZiOWZhNGY2ZDBlMTA1YTc0ZGI2ODFhNmM0ZjE3Y2RmZDEwZDIu
LjA0YTg4MjhjM2M2NTcwMjFjYmEzMzM3NzBmN2EwYWU2NmQ0YWVhYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTQxNyw3ICs0MTcsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydChOb2Rl
KiB0YXJnZQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VF
dmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiByZXN1bHQpCiB7Ci0gICAg
Tm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1bHQpOworICAgIE5vZGUqIGlubmVyTm9k
ZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rp
b247CiAKICAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21v
dXNlRG93bk1heVN0YXJ0U2VsZWN0KSB7CkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBFdmVudEhh
bmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VF
dmVudFdpdGhIaXQKICAgICBpZiAoIXJlc3VsdC5oaXRUZXN0UmVzdWx0KCkuaXNMaXZlTGluaygp
KQogICAgICAgICByZXR1cm4gc2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VFdmVudChyZXN1bHQp
OwogCi0gICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1bHQpOworICAgIE5vZGUq
IGlubmVyTm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CiAKICAgICBpZiAoaW5uZXJOb2RlICYm
IGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0KSB7CiAg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwpAQCAtNDc1LDcgKzQ3NSw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAgICAgaWYgKGV2ZW50LmV2ZW50KCkuYnV0dG9uKCkg
IT0gTGVmdEJ1dHRvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIE5vZGUqIGlu
bmVyTm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOworICAgIE5vZGUqIGlubmVyTm9kZSA9IGV2ZW50
LnRhcmdldE5vZGUoKTsKICAgICBpZiAoIShpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJl
cigpICYmIG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IHRleHREaXN0YW5jZShjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0
Tm9kZShldmVudCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwog
ICAgIGlmICghKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURv
d25NYXlTdGFydFNlbGVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTgwLDcgKzU4
MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAKICAgICAvLyBJZiB3ZSBnb3QgdGhlIGV2
ZW50IGJhY2ssIHRoYXQgbXVzdCBtZWFuIGl0IHdhc24ndCBwcmV2ZW50ZWQsCiAgICAgLy8gc28g
aXQncyBhbGxvd2VkIHRvIHN0YXJ0IGEgZHJhZyBvciBzZWxlY3Rpb24uCi0gICAgbV9tb3VzZURv
d25NYXlTdGFydFNlbGVjdCA9IGNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KHRhcmdldE5vZGUoZXZl
bnQpKTsKKyAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gY2FuTW91c2VEb3duU3RhcnRT
ZWxlY3QoZXZlbnQudGFyZ2V0Tm9kZSgpKTsKICAgICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogICAgIC8vIENhcmVmdWwgdGhhdCB0aGUgZHJhZyBzdGFydGluZyBsb2dpYyBzdGF5cyBpbiBz
eW5jIHdpdGggZXZlbnRNYXlTdGFydERyYWcoKQpAQCAtNjEwLDcgKzYxMCw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgZXZlCiAgICAgaWYgKHNpbmdsZUNsaWNrKQogICAgICAgICBmb2N1c0RvY3Vt
ZW50VmlldygpOwogCi0gICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7Cisg
ICAgTm9kZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwogCiAgICAgbV9tb3VzZVBy
ZXNzTm9kZSA9IGlubmVyTm9kZTsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNjY3LDcg
KzY2Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURyYWdnZWRFdmVudChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBlCiAgICAgaWYgKCFtX21vdXNlUHJlc3Nl
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9kZSogdGFyZ2V0Tm9kZSA9IEV2ZW50
SGFuZGxlcjo6dGFyZ2V0Tm9kZShldmVudCk7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50
LnRhcmdldE5vZGUoKTsKICAgICBpZiAoZXZlbnQuZXZlbnQoKS5idXR0b24oKSAhPSBMZWZ0QnV0
dG9uIHx8ICF0YXJnZXROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTc4Miw3ICs3
ODIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKGNv
bnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bAogICAgIGlmICghbV9tb3VzZURvd25NYXlT
dGFydFNlbGVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogdGFyZ2V0ID0gdGFyZ2V0
Tm9kZShoaXRUZXN0UmVzdWx0KTsKKyAgICBOb2RlKiB0YXJnZXQgPSBoaXRUZXN0UmVzdWx0LnRh
cmdldE5vZGUoKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCkBAIC04NzUs
NyArODc1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGUKICAgICAgICAgICAgICYmIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkKICAgICAgICAgICAgICYmIGV2ZW50LmV2ZW50KCku
YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdT
ZWxlY3Rpb247Ci0gICAgICAgIE5vZGUqIG5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKKyAgICAg
ICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICAgICAgYm9vbCBjYXJldEJy
b3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJl
dEJyb3dzaW5nRW5hYmxlZCgpOwogICAgICAgICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8
fCBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgJiYgbm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9u
Rm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKTsKQEAgLTEyNTAsNyArMTI1MCw3IEBAIEZyYW1l
KiBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzCiB7CiAgICAgaWYgKCFoaXRUZXN0UmVzdWx0LmlzT3ZlcldpZGdl
dCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3ViZnJhbWVGb3JUYXJnZXROb2Rl
KHRhcmdldE5vZGUoaGl0VGVzdFJlc3VsdCkpOworICAgIHJldHVybiBzdWJmcmFtZUZvclRhcmdl
dE5vZGUoaGl0VGVzdFJlc3VsdC50YXJnZXROb2RlKCkpOwogfQogCiBGcmFtZSogRXZlbnRIYW5k
bGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKQEAgLTEyOTEsNyArMTI5MSw3
IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAgICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+bV9wYW5TY3JvbGxJblByb2dyZXNzKQogICAgICAgICByZXR1cm4gTm9D
dXJzb3JDaGFuZ2U7CiAKLSAgICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CisgICAg
Tm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwogICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9yaXpvbnRh
bFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CkBAIC0x
NDYxLDI3ICsxNDYxLDYgQEAgc3RhdGljIExheW91dFBvaW50IGRvY3VtZW50UG9pbnRGb3JXaW5k
b3dQb2ludChGcmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiB3aW4KICAgICByZXR1cm4gdmll
dyA/IHZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpIDogd2luZG93UG9pbnQ7CiB9
CiAKLU5vZGUqIEV2ZW50SGFuZGxlcjo6dGFyZ2V0Tm9kZShjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBldmVudCkKLXsKLSAgICByZXR1cm4gdGFyZ2V0Tm9kZShldmVudC5oaXRU
ZXN0UmVzdWx0KCkpOwotfQotCi1Ob2RlKiBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKLXsKLSAgICBOb2RlKiBub2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBub2RlOwotCi0gICAg
RWxlbWVudCogZWxlbWVudCA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotCi0g
ICAgcmV0dXJuIG5vZGU7Ci0KLX0KLQogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJl
c3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiB7CiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0xNTI3LDEyICsx
NTA2LDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgIExheW91dFBvaW50IGRvY3VtZW50
UG9pbnQgPSBkb2N1bWVudFBvaW50Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgbW91c2VFdmVudC5w
b3NpdGlvbigpKTsKICAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGRvY3VtZW50UG9pbnQs
IG1vdXNlRXZlbnQpOwogCi0gICAgaWYgKCF0YXJnZXROb2RlKG1ldikpIHsKKyAgICBpZiAoIW1l
di50YXJnZXROb2RlKCkpIHsKICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX21vdXNlUHJlc3NOb2RlID0gdGFyZ2V0Tm9kZSht
ZXYpOworICAgIG1fbW91c2VQcmVzc05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgpOwogCiAgICAgRnJh
bWUqIHN1YmZyYW1lID0gc3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KG1ldik7CiAgICAgaWYgKHN1
YmZyYW1lICYmIHBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpKSB7
CkBAIC0xNTQwLDcgKzE1MTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVz
c0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgLy8g
dGhlIG1fbW91c2VQcmVzc2VkIGZsYWcsIHdoaWNoIG1heSBoYXBwZW4gaWYgYW4gQXBwS2l0IHdp
ZGdldCBlbnRlcmVkIGEgbW9kYWwgZXZlbnQgbG9vcC4KICAgICAgICAgbV9jYXB0dXJlc0RyYWdn
aW5nID0gc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jYXB0dXJlc0RyYWdnaW5nKCk7CiAgICAg
ICAgIGlmIChtX21vdXNlUHJlc3NlZCAmJiBtX2NhcHR1cmVzRHJhZ2dpbmcpIHsKLSAgICAgICAg
ICAgIG1fY2FwdHVyaW5nTW91c2VFdmVudHNOb2RlID0gdGFyZ2V0Tm9kZShtZXYpOworICAgICAg
ICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgpOwogICAg
ICAgICAgICAgbV9ldmVudEhhbmRsZXJXaWxsUmVzZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUg
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGludmFsaWRhdGVDbGljaygpOwpAQCAtMTU2Miw3
ICsxNTQxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAjZW5kaWYKIAogICAgIG1fY2xpY2tD
b3VudCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpOwotICAgIG1fY2xpY2tOb2RlID0gdGFyZ2V0
Tm9kZShtZXYpOworICAgIG1fY2xpY2tOb2RlID0gbWV2LnRhcmdldE5vZGUoKTsKIAogICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgUmVuZGVyTGF5
ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkgPyBtX2NsaWNrTm9kZS0+cmVuZGVy
ZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IDA7CkBAIC0xNTc4LDcgKzE1NTcsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCkKIAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRDYXJldEJsaW5r
aW5nU3VzcGVuZGVkKHRydWUpOwogCi0gICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1v
dXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCB0YXJnZXROb2RlKG1ldiksIHRy
dWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgYm9vbCBzd2FsbG93RXZl
bnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogICAg
IG1fY2FwdHVyZXNEcmFnZ2luZyA9ICFzd2FsbG93RXZlbnQgfHwgbWV2LnNjcm9sbGJhcigpOwog
CiAgICAgLy8gSWYgdGhlIGhpdCB0ZXN0aW5nIG9yaWdpbmFsbHkgZGV0ZXJtaW5lZCB0aGUgZXZl
bnQgd2FzIGluIGEgc2Nyb2xsYmFyLCByZWZldGNoIHRoZSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzCkBAIC0xNjA0LDcgKzE1ODMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAg
ICAgLy8gSWYgYSBtb3VzZSBldmVudCBoYW5kbGVyIGNoYW5nZXMgdGhlIGlucHV0IGVsZW1lbnQg
dHlwZSB0byBvbmUgdGhhdCBoYXMgYSB3aWRnZXQgYXNzb2NpYXRlZCwKICAgICAgICAgLy8gd2Un
ZCBsaWtlIHRvIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50IHRvIHBhc3MgdGhl
IGV2ZW50IHRvIHRoZSB3aWRnZXQgYW5kIHRodXMgdGhlCiAgICAgICAgIC8vIGV2ZW50IHRhcmdl
dCBub2RlIGNhbid0IHN0aWxsIGJlIHRoZSBzaGFkb3cgbm9kZS4KLSAgICAgICAgaWYgKHRhcmdl
dE5vZGUobWV2KS0+aXNTaGFkb3dSb290KCkgJiYgdG9TaGFkb3dSb290KHRhcmdldE5vZGUobWV2
KSktPmhvc3QoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgaWYgKG1ldi50YXJn
ZXROb2RlKCktPmlzU2hhZG93Um9vdCgpICYmIHRvU2hhZG93Um9vdChtZXYudGFyZ2V0Tm9kZSgp
KS0+aG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgSGl0VGVzdFJl
cXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6
QWN0aXZlKTsKICAgICAgICAgICAgIG1ldiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVN
b3VzZUV2ZW50KHJlcXVlc3QsIGRvY3VtZW50UG9pbnQsIG1vdXNlRXZlbnQpOwogICAgICAgICB9
CkBAIC0xNjQ2LDkgKzE2MjUsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3Vi
bGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIG1fY2xpY2tDb3VudCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgp
OwotICAgIGJvb2wgc3dhbGxvd01vdXNlVXBFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3Vu
dCwgbW91c2VFdmVudCwgZmFsc2UpOworICAgIGJvb2wgc3dhbGxvd01vdXNlVXBFdmVudCA9IGRp
c3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBtZXYudGFyZ2V0Tm9k
ZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKIAotICAgIGJvb2wg
c3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYm
IHRhcmdldE5vZGUobWV2KSA9PSBtX2NsaWNrTm9kZSAmJiBkaXNwYXRjaE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbW91c2VF
dmVudC5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBtZXYudGFyZ2V0Tm9kZSgpID09IG1fY2xp
Y2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbWV2
LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKIAog
ICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlKQogICAgICAgICBzd2FsbG93TW91c2VV
cEV2ZW50ID0gbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+bW91c2VVcChtb3VzZUV2ZW50KTsK
QEAgLTE3OTcsNyArMTc3Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAKICAgICBpZiAo
bmV3U3ViZnJhbWUpIHsKICAgICAgICAgLy8gVXBkYXRlIG92ZXIvb3V0IHN0YXRlIGJlZm9yZSBw
YXNzaW5nIHRoZSBldmVudCB0byB0aGUgc3ViZnJhbWUuCi0gICAgICAgIHVwZGF0ZU1vdXNlRXZl
bnRUYXJnZXROb2RlKHRhcmdldE5vZGUobWV2KSwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgICAg
IHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKG1ldi50YXJnZXROb2RlKCksIG1vdXNlRXZlbnQs
IHRydWUpOwogICAgICAgICAKICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggaW4gdXBkYXRlTW91
c2VFdmVudFRhcmdldE5vZGUgbWF5IGhhdmUgY2F1c2VkIHRoZSBzdWJmcmFtZSBvZiB0aGUgdGFy
Z2V0CiAgICAgICAgIC8vIG5vZGUgdG8gYmUgZGV0YWNoZWQgZnJvbSBpdHMgRnJhbWVWaWV3LCBp
biB3aGljaCBjYXNlIHRoZSBldmVudCBzaG91bGQgbm90IGJlIHBhc3NlZC4KQEAgLTE4MTgsNyAr
MTc5Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgaWYgKHN3YWxsb3dFdmVudCkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hN
b3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCBm
YWxzZSwgMCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hN
b3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwg
ZmFsc2UsIDAsIG1vdXNlRXZlbnQsIHRydWUpOwogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAg
ICAgaWYgKCFzd2FsbG93RXZlbnQpCiAgICAgICAgIHN3YWxsb3dFdmVudCA9IGhhbmRsZU1vdXNl
RHJhZ2dlZEV2ZW50KG1ldik7CkBAIC0xODgwLDE0ICsxODU5LDE0IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQpCiAgICAgaWYgKHN1YmZyYW1lICYmIHBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3Vi
ZnJhbWUobWV2LCBzdWJmcmFtZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBz
d2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50
LCBmYWxzZSk7CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2
ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1f
Y2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2UpOwogCi0gICAgTm9kZSogY2xpY2tUYXJnZXQg
PSB0YXJnZXROb2RlKG1ldik7CisgICAgTm9kZSogY2xpY2tUYXJnZXQgPSBtZXYudGFyZ2V0Tm9k
ZSgpOwogICAgIGlmIChjbGlja1RhcmdldCkKICAgICAgICAgY2xpY2tUYXJnZXQgPSBjbGlja1Rh
cmdldC0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgTm9kZSogYWRqdXN0ZWRDbGlja05vZGUg
PSBtX2NsaWNrTm9kZSA/IG1fY2xpY2tOb2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAK
LSAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAmJiBtb3VzZUV2
ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIGNsaWNrVGFyZ2V0ID09IGFkanVzdGVkQ2xp
Y2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgdGFy
Z2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAg
IGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtX2NsaWNrQ291bnQgPiAwICYmIG1vdXNlRXZlbnQu
YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgY2xpY2tUYXJnZXQgPT0gYWRqdXN0ZWRDbGlja05v
ZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFy
Z2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAg
aWYgKG1fcmVzaXplTGF5ZXIpIHsKICAgICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVN
b2RlKGZhbHNlKTsKQEAgLTE5ODcsNyArMTk2Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRh
dGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQq
CiAgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVu
dChyZXF1ZXN0LCBldmVudCk7CiAKICAgICAvLyBEcmFnIGV2ZW50cyBzaG91bGQgbmV2ZXIgZ28g
dG8gdGV4dCBub2RlcyAoZm9sbG93aW5nIElFLCBhbmQgcHJvcGVyIG1vdXNlb3Zlci9vdXQgZGlz
cGF0Y2gpCi0gICAgUmVmUHRyPE5vZGU+IG5ld1RhcmdldCA9IHRhcmdldE5vZGUobWV2KTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbmV3VGFyZ2V0ID0gbWV2LnRhcmdldE5vZGUoKTsKICAgICBpZiAobmV3
VGFyZ2V0ICYmIG5ld1RhcmdldC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBuZXdUYXJnZXQgPSBu
ZXdUYXJnZXQtPnBhcmVudE5vZGUoKTsKIApAQCAtMjQyNSw3ICsyNDA0LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYg
Z2VzdHVyZUV2ZW50KQogCiAgICAgaWYgKCFldmVudFRhcmdldCkgewogICAgICAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlv
bigpLCBmYWxzZSwgZmFsc2UsIERvbnRIaXRUZXN0U2Nyb2xsYmFycywgSGl0VGVzdFJlcXVlc3Q6
OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7Ci0gICAgICAgIGV2ZW50VGFyZ2V0
ID0gdGFyZ2V0Tm9kZShyZXN1bHQpOworICAgICAgICBldmVudFRhcmdldCA9IHJlc3VsdC50YXJn
ZXROb2RlKCk7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7CkBAIC0yNTgwLDEyICsy
NTU5LDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGVkaXRh
YmxlIGNhc2UsIHdvcmQgc2VsZWN0aW9uIHNvbWV0aW1lcyBzZWxlY3RzIGNvbnRlbnQgdGhhdCBp
c24ndCB1bmRlcm5lYXRoIHRoZSBtb3VzZS4KICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBp
cyBub24tZWRpdGFibGUsIHdlIGRvIHdvcmQgc2VsZWN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRv
IHVzZSB0aGUgY29udGV4dHVhbCBtZW51IGl0ZW1zCiAgICAgICAgIC8vIGF2YWlsYWJsZSBmb3Ig
dGV4dCBzZWxlY3Rpb25zLiAgQnV0IG9ubHkgaWYgd2UncmUgYWJvdmUgdGV4dC4KLSAgICAgICAg
JiYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICh0YXJnZXRO
b2RlKG1ldikgJiYgdGFyZ2V0Tm9kZShtZXYpLT5pc1RleHROb2RlKCkpKSkgeworICAgICAgICAm
JiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1ldi50YXJn
ZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsKICAgICAgICAg
bV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCA9IHRydWU7IC8vIGNvbnRleHQgbWVudSBldmVudHMg
YXJlIGFsd2F5cyBhbGxvd2VkIHRvIHBlcmZvcm0gYSBzZWxlY3Rpb24KICAgICAgICAgc2VsZWN0
Q2xvc2VzdFdvcmRPckxpbmtGcm9tTW91c2VFdmVudChtZXYpOwogICAgIH0KIAotICAgIHN3YWxs
b3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVu
dCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCAwLCBldmVudCwgZmFsc2UpOworICAgIHN3YWxsb3dF
dmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCwg
bWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgMCwgZXZlbnQsIGZhbHNlKTsKICAgICAKICAgICByZXR1
cm4gc3dhbGxvd0V2ZW50OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMjlk
ZDljZTM4M2UwOTgxN2E0MDM1NmQzMzJkMmE3MWJhMWJmMWJmMS4uYjJlOTdiNDhmZDY4ODYwNjJk
NjNhM2RhMjc2MjRmNTM2YThjMDM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBA
IC0yMzAsOCArMjMwLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKICNlbmRpZgogCi0gICAgc3RhdGljIE5vZGUqIHRhcmdl
dE5vZGUoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwotCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCiAgICAgc3RhdGljIERyYWdTdGF0ZSYgZHJhZ1N0YXRlKCk7CkBAIC0yNDcsOCAr
MjQ1LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCi0gICAgc3RhdGljIE5vZGUqIHRhcmdldE5v
ZGUoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwotCiAgICAgYm9vbCBoYW5k
bGVNb3VzZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwog
ICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50RG91
YmxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaAppbmRleCAx
MTgyZTkwNDBjODEzMGQ1NmRkNTNiYzllNTk3NzE4NWM3Zjk2ZmE2Li5lMjA3OTAwMzJkZjY3MDVk
OTIyOGMzZTgxZDYxY2U4N2IxMTU1M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaApAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6
CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RSZXN1
bHQuc2Nyb2xsYmFyKCk7IH0KICAgICBib29sIGlzT3ZlckxpbmsoKSBjb25zdDsKICAgICBib29s
IGlzT3ZlcldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdC5pc092ZXJXaWRn
ZXQoKTsgfQorICAgIE5vZGUqIHRhcmdldE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RS
ZXN1bHQudGFyZ2V0Tm9kZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IG1fZXZlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRI
YW5kbGVyQ2hyb21pdW0uY3BwCmluZGV4IDA1MDgwZjYyOTIxYmZmMzUwOTQwY2ZkN2NiODAzYzgx
Y2RiYjAyZGIuLjExMmIwZTViZGU2OWIxMzk2ZjhjYzkxZjc5OGYzNWQ0YTM4ZTk0NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21p
dW0uY3BwCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVz
c0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtCiAgICAgSW50
UG9pbnQgcCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhtZXYuZXZlbnQoKS5w
b3NpdGlvbigpKTsKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmNvbnRhaW5zKHApKSB7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKAotICAgICAgICAgICAgdGFyZ2V0
Tm9kZShtZXYpLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KG1ldi5sb2NhbFBvaW50KCkp
KTsKKyAgICAgICAgICAgIG1ldi50YXJnZXROb2RlKCktPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9y
UG9pbnQobWV2LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKQEAgLTEwMyw5ICsxMDMs
OSBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdl
dE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2
ZW50IHRvLgotICAgIGlmICghdGFyZ2V0Tm9kZShldmVudCkgfHwgIXRhcmdldE5vZGUoZXZlbnQp
LT5yZW5kZXJlcigpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKS0+aXNXaWRnZXQo
KSkKKyAgICBpZiAoIWV2ZW50LnRhcmdldE5vZGUoKSB8fCAhZXZlbnQudGFyZ2V0Tm9kZSgpLT5y
ZW5kZXJlcigpIHx8ICFldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCkpLT53aWRn
ZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lk
Z2V0KGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0KIAogYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKaW5kZXggYmRk
Mzc2MDNkMDEzN2ZlOTI5OGQ2OGRlMjgzMjE5NTE0NGVmMzAxZi4uYTU4NTkwOGUxZDU3NWZmM2E5
MzExZGY3OTJhNDU5ODkxOWU1OTRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9l
ZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVu
dEhhbmRsZXJFZmwuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1
c0RvY3VtZW50VmlldygpCiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkK
IHsKLSAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0
Tm9kZShldmVudCktPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsK
IAogICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCmlu
ZGV4IDdlODNlYjYxMGNmNzg3ZjA1YjFkYWEzNjdkZDhkMzBhYTFmMjUwOGYuLjM2OGNmZTAxOWFm
MWQyMjJmNGFiZDE4MWY0ODg3NTdlNzNlYzQ3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9n
dGsvRXZlbnRIYW5kbGVyR3RrLmNwcApAQCAtNTksNyArNTksNyBAQCB2b2lkIEV2ZW50SGFuZGxl
cjo6Zm9jdXNEb2N1bWVudFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2
ZW50KQogewogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0
by4KLSAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0
Tm9kZShldmVudCktPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsK
ICAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lk
Z2V0KHRhcmdldCktPndpZGdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQppbmRleCBkZmVlMDQ0YWJlM2IxN2QwN2VhN2YxNDg1NDllZjlhMTlmNGY2MzZh
Li43NjI0NWRhYjZlODk1OWIyNTFhODg2YTc1Y2Y0ZTU3OWFkMzNiNTRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKIGJvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiBldmVudCkKIHsKICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2Vu
ZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSB0YXJnZXROb2RlKGV2
ZW50KSA/IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJPYmpl
Y3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVu
ZGVyZXIoKSA6IDA7CiAgICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMzUyLDcgKzM1Miw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgZXZlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAg
IGNhc2UgTlNMZWZ0TW91c2VEb3duOiB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gdGFyZ2V0
Tm9kZShldmVudCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgp
OwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAppbmRleCAwNmI2MDM2OTgy
YTUzOTgzNTI5NDZkNTA3YzQ2YWM5MzUwN2I3NDljLi4xNjdjYzkzMGE3YWIzNzM2NmE4Mzc2M2Q4
YzgwOTg0NDFlZWExNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50
SGFuZGxlcld4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4
LmNwcApAQCAtNjMsMTAgKzYzLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxl
YXNlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmCiBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgotICAgIGlmICghdGFyZ2V0Tm9kZShldmVudCkg
fHwgIXRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+
cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkKKyAgICBpZiAoIWV2ZW50LnRhcmdldE5vZGUoKSB8fCAh
ZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIHx8ICFldmVudC50YXJnZXROb2RlKCktPnJl
bmRlcmVyKCktPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBy
ZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0Tm9k
ZShldmVudCktPnJlbmRlcmVyKCkpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURv
d25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVy
ZXIoKSktPndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDQ0YjE3NDc4ZmUzNWQ0MmMz
ZDgxOGM0OTZlMzQ1ZjE5OWE5NjQ3ZjkuLjA3NDU3NjNkMTU0OGE4ZTZkOWMzMDk2MWMzOTI5YjFk
M2EwNzdkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAK
QEAgLTc5NSw0ICs3OTUsMTkgQEAgVmVjdG9yPFN0cmluZz4gSGl0VGVzdFJlc3VsdDo6ZGljdGF0
aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5kaWN0
YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIobWFya2VyKTsKIH0KIAorTm9kZSogSGl0VGVzdFJl
c3VsdDo6dGFyZ2V0Tm9kZSgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IGlubmVyTm9kZSgp
OworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG5vZGUtPmluRG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
bm9kZS0+cGFyZW50RWxlbWVudCgpOworICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmluRG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisKKyAgICByZXR1cm4gbm9kZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgKaW5kZXggMDVjYTkwZGMxNTJjMzhkNTg5YTBlMjI1NTM4NmI0NDE0ZmM2ZmI0ZS4u
OWQxNmJmMDQyMGQ3OGQwN2E2MGY5OGYyM2UzOWU1OTY4YThmZTA2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCkBAIC0xNzcsNiArMTc3LDggQEAgcHVibGljOgog
CiAgICAgVmVjdG9yPFN0cmluZz4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3Q7CiAKKyAg
ICBOb2RlKiB0YXJnZXROb2RlKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgTm9kZVNldCYgbXV0
YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQoKTsgLy8gU2VlIGFib3ZlLgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCBhMWYzZWFiNzVhOWQxNjBhNzVm
OThiZmMxNTEzOTRmYTdiNmM5Y2UyLi5hOThhMzMzYzEzN2ZjYjVlZWYzYWNkNGQ4NmU3OWVkNmYy
MjRiN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAK
QEAgLTE1MDMsNyArMTUwMyw3IEBAIFZpc2libGVQb3NpdGlvbiBXZWJGcmFtZUltcGw6OnZpc2li
bGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGNvbnN0IFdlYlBvaW50JiBwb2luCiAKICAgICBmcmFt
ZSgpLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwg
cmVzdWx0KTsKIAotICAgIE5vZGUqIG5vZGUgPSBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUocmVz
dWx0KTsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>