<?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>78617</bug_id>
          
          <creation_ts>2012-02-14 10:20:52 -0800</creation_ts>
          <short_desc>MathML internals - embellished operators, getBase() accessor functions</short_desc>
          <delta_ts>2012-02-17 15:33:27 -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>MathML</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="Dave Barton">dbarton</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>fred.wang</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556384</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-14 10:20:52 -0800</bug_when>
    <thetext>MathML internals - embellished operators, getBase() accessor functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556391</commentid>
    <comment_count>1</comment_count>
      <attachid>126997</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-14 10:31:17 -0800</bug_when>
    <thetext>Created attachment 126997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556420</commentid>
    <comment_count>2</comment_count>
      <attachid>126997</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 11:12:40 -0800</bug_when>
    <thetext>Comment on attachment 126997
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.h:54
&gt; +    virtual const RenderMathMLOperator* unembellishedOperator() const { return 0; }

I don&apos;t think a const pointer will help you much here.  Since you won&apos;t be able to retain it...  For RefCounted objects (like Node) we normally don&apos;t bother with const much.

&gt; Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp:57
&gt; +RenderBoxModelObject* RenderMathMLSubSup::getBase() const

Normaly we don&apos;t use &quot;get&quot; in function names.  Since base() here would convey the same meaning.

It&apos;s unclear to me what &quot;base&quot; is here?  Also, it looks like you used it irght, but just to be clear, RenderBoxModelObject is the base class for all CSS-box-model renderers, this is in contrast to SVG-model renderers (which although uses CSS, does not participate in the CSS box model), which use RenderSVGModelObject.  Sometimes folks want RenderObject (to mean any kind of renderer) and sometimes they want RenderBoxModelObject (to mean only CSS-box-model renderers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556425</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2012-02-14 11:14:42 -0800</bug_when>
    <thetext>I don&apos;t know the webkit code, but here are some comments.

Be sure to consider all the elements that can be embellished operators:
http://www.w3.org/TR/MathML/chapter3.html#id.3.2.5.7.3

Some reftests for embellished op (I think Webkit supports reftest?):
http://devel.mathjax.org/testing/testsuite/MathMLToDisplay/Topics/EmbellishedOp/

In Mozilla, instead of using functions, we store pointers on the MathML frames (pointing to the core frame). Actually, we store a structure with such a pointer and other info relevant to operator stretching. I don&apos;t know why that was done that way, but the stretchy data may depend on several elements/attributes in the MathML tree, so it may be expensive to have to compute them if they are used several times. I don&apos;t know what is the best for Webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556491</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 12:26:52 -0800</bug_when>
    <thetext>Translation: &quot;frame&quot; in mozilla is basically &quot;renderer&quot; in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556875</commentid>
    <comment_count>5</comment_count>
      <attachid>126997</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-14 19:25:00 -0800</bug_when>
    <thetext>Comment on attachment 126997
Patch

Thanks for all the expert comments! My wife seems to think it&apos;s Valentine&apos;s Day so I&apos;ll say more tomorrow. :-) I&apos;ll submit a revised patch after that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557028</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 01:21:07 -0800</bug_when>
    <thetext>Attachment 126997 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
 + 2ce77d7...a9730c4 master     -&gt; origin/master  (forced update)
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168753 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/wk2/Skipped
Auto-merging Source/WebCore/ChangeLog
Auto-merging Source/WebCore/css/CSSCalculationValue.cpp
Auto-merging Source/WebCore/css/CSSCalculationValue.h
Auto-merging Source/WebCore/css/CSSParser.cpp
Auto-merging Source/WebKit/mac/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit/mac/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557278</commentid>
    <comment_count>7</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2012-02-15 07:57:24 -0800</bug_when>
    <thetext>FYI, here is how it is implemented in Mozilla. I hope that can help you to implement it in Webkit.

First we have a data structure to describe embellished operators:
http://mxr.mozilla.org/mozilla-central/source/layout/mathml/nsIMathMLFrame.h#239

This embellish data is initialized for each frame (renderer) from bottom to top using TransmitAutomaticData. For example they are initialized for the &lt;mo&gt;, based on various info (attributes, operator dictionary etc). An &lt;msup&gt; element takes the EmbellishData from its base (first child):

http://mxr.mozilla.org/mozilla-central/source/layout/mathml/nsMathMLmsupFrame.cpp#65

and similarly for the other cases described in the MathML REC:

http://www.w3.org/TR/MathML/chapter3.html#id.3.2.5.7.3

The non-trivial case is for mrow-like elements (mrow, mstyle, mphantom...). To do that, first we store on the frame a boolean property indicating whether the element is &quot;space-like&quot;:

http://www.w3.org/TR/MathML/chapter3.html#id.3.2.7.4

which is also initialized from bottom to top. So for example mtext and mspace are initialized to be space-like per the MathML REC. Finally, for mrow-like elements the EmbellishData and the space-like property are initialized at the same time using TransmitAutomaticDataForMrowLikeElement:

http://mxr.mozilla.org/mozilla-central/source/layout/mathml/nsMathMLContainerFrame.cpp#1482</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557367</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-15 10:27:55 -0800</bug_when>
    <thetext>I&apos;ll remove the &quot;const&quot; and &quot;get&quot;, and add comments to the code summarizing or referring to our discussions here.

&quot;base&quot; here omits a subscript and/or superscript, or an underscript and/or overscript. In legal MathML, the result will still be MathML, hence a RenderMathMLBlock or RenderInline, both of which derive from RenderBoxModelObject. We do need to be able to work with the base, e.g. compute its offsetHeight.

I&apos;m not an SVG expert, but you raise a basic design question for MathML in WebKit. Currently RenderMathMLBlock, which is used by most MathML elements, derives from RenderBlock. We get a lot of horizontal and vertical formatting for free that way, hit-testing, probably a lot of other things(?). Also MathML elements are probably most like inline-block elements, which are implemented by RenderBlock. However, one might argue it&apos;d be cleaner to not derive from RenderBlock, and reimplement layout() and other functionality for some base RenderMathML class. This effort is probably beyond the time I have available though.

Even more fundamental is the question of whether MathML objects obey the CSS box model, or whether they should. The MathML spec suggests that one ought to be able to style MathML with CSS in environments that support CSS, presumably including using the box model.

For now, I am indeed using a simplified definition of &quot;embellished operator&quot;. I think it&apos;s best to simplify the current RenderMathML* classes before we add things to them. Also, I don&apos;t agree with larger definition, FWIW. Is there a reference explaining more fully the rationale for always treating an &lt;mrow&gt; of one argument, and without attributes, as a special case? I&apos;ve written a MathML generator, jqMath, and it was actually simpler to not do this. Also checking specially for space-like elements adds complications and an unnecessary inconsistency, in my opinion. This requirement pre-dates CSS. Just as many presentational attributes in HTML were deprecated and replaced by CSS, I think many in MathML should be also, and the definition of &quot;embellished operator&quot; should be simplified as well. But having said all that, if the spec isn&apos;t changed, then I agree that WebKit MathML should eventually implement a mechanism similar to Mozilla&apos;s.

Thanks for the pointers to the tests. We definitely should include these tests, and/or tests from the w3c mathml committee, at some point.

This careful review from you experts is invaluable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557497</commentid>
    <comment_count>9</comment_count>
      <attachid>127224</attachid>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-15 13:18:18 -0800</bug_when>
    <thetext>Created attachment 127224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559312</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Barton">dbarton</who>
    <bug_when>2012-02-17 10:38:38 -0800</bug_when>
    <thetext>I asked Neil Soiffer, arguably the world&apos;s #1 authority on these matters (MathML committee major author for 15 years, Mathematica front end &amp; IE MathPlayer implementer, authority for Frédéric Wang and others on w3c&apos;s mathml mailing list), about the rules for mrow and embellished operators in MathML and got this response:

``It&apos;s hard to remember back why all of the things that are in MathML are in there.  Some have good solid technical reasons and some were political compromises -- I hate mfenced, which is duplicates other things and isn&apos;t as powerful and causes problems for things like CSS because drawn items are buried in attributes.  Anyway...

mrow with one arg were added because authoring tool editors felt that it was more natural to always have mrows around subexpression, such as a numerator of a fraction.  Hand authoring, which was still popular (and remains popular by HTML developers to this day) pushed towards not always requiring the mrows.  That&apos;s also the reason for the implicit mrows in some places such as msqrt.  In the implementations I&apos;ve done, I&apos;ve typically &quot;normalized&quot; them away so the rendering code never sees it.  This normalization is either explicit (tree is changed) or virtual via a &quot;getChild&quot; method that checks if the child is an mrow with a single child, and if so, calls itself recursively.

The embellished operators rules are a bit complicated, but grew out of use cases.  I think (not 100% positive -- I&apos;d need to check the code), that like mrow, embellished operators were virtualized in my code in the sense that there is a &quot;isOperator&quot; call that checks to see if something is a script (etc), and if so, calls itself on the base of the script.  In that way, they turned out not to be much of an exception to the layout logic -- any value you ask for of  an operator could be asked of an embellished operator without needing to know about details of the embellished operator.  I will admit that in my linebreaking code, I repeatedly forgot to call the higher level function and that led to many bugs, all of which were trivial to fix but still bugs nonetheless.  I do remember there being a lot of discussion about the embellished operator/mrow/space-like children rule, but it was too long ago to remember the rationale.  If needed, I could go through the list archives...&apos;&apos;

So it sounds like Neil&apos;s probably gone the virtual function route for tracking embellished operators, instead of the Mozilla method of adding extra data. The extra data has the drawback of needing to be updated whenever the DOM changes. I&apos;m not sure it really saves much time in practice.

I find all this fascinating. The whole &lt;mrow&gt; of one argument must be equivalent in all ways to the argument itself seems crazy to me. This would be like saying that &lt;span&gt; of one argument must behave like the argument alone in all ways, e.g. CSS child selector rules. This would be nuts, IMHO. To justify it by saying that the numerator argument to &lt;mfrac&gt; should always be an &lt;mrow&gt; in some editor is like saying everything inside a &lt;p&gt; tag should always be wrapped in a &lt;span&gt;. This just doesn&apos;t make any sense to me. Perhaps this is part of why MathML never caught on in 15 years. I understand that it&apos;s our job to implement all of the spec, not just the parts we like, but I also think eventually someone from WebKit should be on the w3c mathml committee and ask about deprecating some of these features (bugs?) from 15 years ago, when for instance CSS didn&apos;t even exist.

But the real point is we are a long way away from even worrying about things like this. WebKit doesn&apos;t yet have mmultiscripts, semantics, mstyle, mphantom, mpadded, or maction elements, or almost any kind of space-like element (and is arbitrary mtext really space-like?). Thus almost all the clauses about embellished operators that Frédéric Wang refers to don&apos;t yet apply to us. I have flagged &quot;embellished operators&quot; as a FIXME comment in the code in this patch, and I suppose we could file a bug for it also, but there are dozens of other things in MathML that we don&apos;t have yet either, and we don&apos;t have bug reports for them.

I just want to fix WebKit&apos;s stretching of operators, including ones with subscripts/superscripts/underscripts/overscripts, for example integral signs with limits. I&apos;d like to do (most of) this in my next patch, eliminating the current nonOperatorHeight() and hasBase() functions entirely, which don&apos;t conform at all to either the MathML spec or standard mathematical typesetting.

WebKit&apos;s MathML implementation is currently minimal (a partial implementation), nonstandard, buggy, and perhaps insecure. In my opinion, we&apos;ll never fix all this if we insist on small patches, and then compare each one to everything in Mozilla and the MathML spec. Even if I or someone else was able to put in unlimited hours of programming for free, no one at webkit would review or commit the patches. The current system is difficult enough - break patches into tiny pieces, and then hope they will be reviewed within a few days each. Not only will it take years to implement MathML at this pace, it&apos;s just plain hard to program when taking breaks of a few days or longer between each tiny bit of programming.

I think we need to either review this patch + or - soon, or else admit that this development model isn&apos;t working. Do we need to wait for WebKit companies to decide whether MathML is worth paying a committer to read parts of the MathML spec and spend a few hours per week reviewing patches, to help sell devices to literally hundreds of millions of students, scientists, and engineers that will want to use MathML in WebKit in the next few years? I respectfully await your reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559453</commentid>
    <comment_count>11</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2012-02-17 13:00:39 -0800</bug_when>
    <thetext>&gt; So it sounds like Neil&apos;s probably gone the virtual function route for tracking embellished operators, instead of the Mozilla method of adding extra data. The extra data has the drawback of needing to be updated whenever the DOM changes. I&apos;m not sure it really saves much time in practice.

I think the idea of the data is the following. If you have

&lt;munder&gt;
  &lt;msub&gt;
    &lt;mo&gt;→&lt;/mo&gt;
    &lt;mi&gt;0&lt;/mi&gt;
  &lt;/msub&gt;
  &lt;mtext&gt;text&lt;/mtext&gt;
&lt;/munder&gt;

Each time you must redraw the arrow (for example when you modify the mtext, or zoom, or resize the window...), you can directly use the pointer instead of having to call a function to find it. Of course, this does not seem very helpful on this trivial example and one may argue that the embellished operator subtree is not really deep in general, which is certainly true. But the point is that we have actually more data to compute than simply the pointer to the core frame and the data may depend on many other elements/attributes so that&apos;s better to compute the whole thing once and let the frames communicate their infos to each other. So the drawback of the data is just a slight memory overhead but it is intended to make the whole thing faster. I don&apos;t claim that it is actually true in practice, I didn&apos;t make experiments to verify this assertion and didn&apos;t write the Mozilla code. Again, I don&apos;t know the Webkit code and just gave you a suggestion. Webkit folks know better than me which design is appropriate for their code.


&gt; 
&gt; I find all this fascinating. The whole &lt;mrow&gt; of one argument must be equivalent in all ways to the argument itself seems crazy to me. This would be like saying that &lt;span&gt; of one argument must behave like the argument alone in all ways, e.g. CSS child selector rules. This would be nuts, IMHO. To justify it by saying that the numerator argument to &lt;mfrac&gt; should always be an &lt;mrow&gt; in some editor is like saying everything inside a &lt;p&gt; tag should always be wrapped in a &lt;span&gt;. This just doesn&apos;t make any sense to me. Perhaps this is part of why MathML never caught on in 15 years. I understand that it&apos;s our job to implement all of the spec, not just the parts we like, but I also think eventually someone from WebKit should be on the w3c mathml committee and ask about deprecating some of these features (bugs?) from 15 years ago, when for instance CSS didn&apos;t even exist.
&gt; 


Well, I think there are other deeper reasons for MathML not having been used as much as other web languages than this &lt;mrow&gt; property,  but that seems a bit off topic... And BTW this property seems quite reasonable to me actually, since &lt;mrow&gt; is only here to group elements. If you group a single element, I can&apos;t see any reason to change its properties (of course this grouping is useless, but you can&apos;t prevent people from writing/generating such code)...

&gt; But the real point is we are a long way away from even worrying about things like this. WebKit doesn&apos;t yet have mmultiscripts, semantics, mstyle, mphantom, mpadded, or maction elements, or almost any kind of space-like element (and is arbitrary mtext really space-like?). Thus almost all the clauses about embellished operators that Frédéric Wang refers to don&apos;t yet apply to us. I have flagged &quot;embellished operators&quot; as a FIXME comment in the code in this patch, and I suppose we could file a bug for it also, but there are dozens of other things in MathML that we don&apos;t have yet either, and we don&apos;t have bug reports for them.
&gt; 

I don&apos;t know which elements Webkit implements or not, I just wanted to make you aware of the embellished op details. Obviously, that makes sense to make embellished op work just for the elements that are already implemented in Webkit.


&gt; I just want to fix WebKit&apos;s stretching of operators, including ones with subscripts/superscripts/underscripts/overscripts, for example integral signs with limits. I&apos;d like to do (most of) this in my next patch, eliminating the current nonOperatorHeight() and hasBase() functions entirely, which don&apos;t conform at all to either the MathML spec or standard mathematical typesetting.
&gt; 
&gt; WebKit&apos;s MathML implementation is currently minimal (a partial implementation), nonstandard, buggy, and perhaps insecure. In my opinion, we&apos;ll never fix all this if we insist on small patches, and then compare each one to everything in Mozilla and the MathML spec. Even if I or someone else was able to put in unlimited hours of programming for free, no one at webkit would review or commit the patches. The current system is difficult enough - break patches into tiny pieces, and then hope they will be reviewed within a few days each. Not only will it take years to implement MathML at this pace, it&apos;s just plain hard to program when taking breaks of a few days or longer between each tiny bit of programming.
&gt; 
&gt; I think we need to either review this patch + or - soon, or else admit that this development model isn&apos;t working. Do we need to wait for WebKit companies to decide whether MathML is worth paying a committer to read parts of the MathML spec and spend a few hours per week reviewing patches, to help sell devices to literally hundreds of millions of students, scientists, and engineers that will want to use MathML in WebKit in the next few years? I respectfully await your reply.

I can&apos;t speak for Webkit, but I think the purpose of the review system is to ensure code quality (and that&apos;s already a work for Webkit people to do that...). Sometimes it is best not to go too fast and to do things carefully... Currently, code refactoring is needed in Mozilla MathML code because things were implemented in a very bad way (for example attributes added to the DOM to simulate style properties). Similarly, my comparison with the MathML REC and Mozilla code was intended to help you, not to delay your work on MathML. You&apos;ll have to find the balance between prioritizing the things that have to be implemented and to deliver a good MathML support for Webkit...

Also, there are tools to handle several patches at the same time (for example, Mercurial has an extension called &quot;Mercurial Queues&quot;). This is very convenient to break down the work in small pieces but still being able to modify a large portions of code simultaneously. You should definitely have a look to them.

Good luck for your MathML work in Webkit!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559596</commentid>
    <comment_count>12</comment_count>
      <attachid>127224</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 15:33:22 -0800</bug_when>
    <thetext>Comment on attachment 127224
Patch

Clearing flags on attachment: 127224

Committed r108136: &lt;http://trac.webkit.org/changeset/108136&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559597</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 15:33:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126997</attachid>
            <date>2012-02-14 10:31:17 -0800</date>
            <delta_ts>2012-02-14 19:24:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78617-20120214103115.patch</filename>
            <type>text/plain</type>
            <size>13075</size>
            <attacher name="Dave Barton">dbarton</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzcxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTE0ICBEYXZpZCBC
YXJ0b24gIDxkYmFydG9uQG1hdGhzY3JpYmUuY29tPgorCisgICAgICAgIE1hdGhNTCBpbnRlcm5h
bHMgLSBlbWJlbGxpc2hlZCBvcGVyYXRvcnMsIGdldEJhc2UoKSBhY2Nlc3NvciBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIGZ1
bmN0aW9ucyB0aGF0IHJldHVybiBhbiB1bmVtYmVsbGlzaGVkICJiYXNlIiwgYnkgb21pdHRpbmcK
KyAgICAgICAgc3Vic2NyaXB0cy9zdXBlcnNjcmlwdHMsIHVuZGVyc2NyaXB0cy9vdmVyc2NyaXB0
cywgb3IgZGVub21pbmF0b3JzLiBUaGlzIGlzIG5lZWRlZCBpbgorICAgICAgICBzdWJzZXF1ZW50
IHBhdGNoZXMgYm90aCBmb3IgY29ycmVjdCBvcGVyYXRvciBzdHJldGNoaW5nIGFuZCBzaW1wbGUg
Y29kZSBmYWN0b3JpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChSZW5kZXJNYXRoTUxCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxCbG9jazo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTEZyYWN0aW9uOjp1bmVtYmVsbGlzaGVkT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOgorICAg
ICAgICAoUmVuZGVyTWF0aE1MRnJhY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjp1bmVtYmVsbGlzaGVkT3BlcmF0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFN1YlN1cDo6Z2V0QmFzZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTFN1YlN1cDo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6c3RyZXRjaFRvSGVpZ2h0KToKKyAgICAgICAgICAg
IC0gcmVuYW1lZCBhIHZhcmlhYmxlIGZvciBjbGFyaXR5LCBlc3BlY2lhbGx5IGluIGxhdGVyIHBh
dGNoZXMKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6bGF5b3V0KToKKyAg
ICAgICAgICAgIC0gcmVuYW1lZCBhIHZhcmlhYmxlIGZvciBjbGFyaXR5LCBlc3BlY2lhbGx5IGlu
IGxhdGVyIHBhdGNoZXMKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1
YlN1cC5oOgorICAgICAgICAoUmVuZGVyTWF0aE1MU3ViU3VwKToKKyAgICAgICAgKiByZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxVbmRlck92ZXI6OmdldEJhc2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnVuZW1iZWxsaXNoZWRPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnN0cmV0Y2hUb0hl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIu
aDoKKyAgICAgICAgKFJlbmRlck1hdGhNTFVuZGVyT3Zlcik6CisKIDIwMTItMDItMTQgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBUeXBvIGZpeCBhZnRl
ciByMTA3NzA3LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suaAkocmV2aXNpb24gMTA3NTEzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKK2NsYXNzIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOworCiBjbGFzcyBSZW5kZXJNYXRoTUxCbG9jayA6IHB1YmxpYyBSZW5k
ZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MQmxvY2soTm9kZSogY29udGFpbmVy
KTsKQEAgLTQzLDYgKzQ1LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJN
YXRoTUxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAK
KyAgICAvLyBNYXRoTUwgZGVmaW5lcyBhbiAiZW1iZWxsaXNoZWQgb3BlcmF0b3IiIGFzIHJvdWdo
bHkgYW4gPG1vPiB0aGF0IG1heSBoYXZlIHN1YnNjcmlwdHMsCisgICAgLy8gc3VwZXJzY3JpcHRz
LCB1bmRlcnNjcmlwdHMsIG92ZXJzY3JpcHRzLCBvciBhIGRlbm9taW5hdG9yIChhcyBpbiBkL2R4
LCB3aGVyZSAiZCIgaXMgc29tZQorICAgIC8vIGRpZmZlcmVudGlhbCBvcGVyYXRvcikuIFRoZSBw
YWRkaW5nLCBwcmVjZWRlbmNlLCBhbmQgc3RyZXRjaGluZXNzIG9mIHRoZSBiYXNlIDxtbz4gc2hv
dWxkCisgICAgLy8gYXBwbHkgdG8gdGhlIGVtYmVsbGlzaGVkIG9wZXJhdG9yIGFzIGEgd2hvbGUu
IHVuZW1iZWxsaXNoZWRPcGVyYXRvcigpIGNoZWNrcyBmb3IgYmVpbmcgYW4KKyAgICAvLyBlbWJl
bGxpc2hlZCBvcGVyYXRvciwgYW5kIHJldHVybnMgaXRzIGJhc2U6CisgICAgdmlydHVhbCBjb25z
dCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNCYXNlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGludCBub25PcGVyYXRvckhlaWdodCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IGhlaWdodCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9u
LmNwcAkocmV2aXNpb24gMTA3NTEzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTks
MTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YWRkQ2hpbGQoUmVuZAogICAgIHVwZGF0
ZUZyb21FbGVtZW50KCk7CiB9CiAKK2NvbnN0IFJlbmRlck1hdGhNTE9wZXJhdG9yKiBSZW5kZXJN
YXRoTUxGcmFjdGlvbjo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJPYmplY3QqIG51bWVyYXRvcldyYXBwZXIgPSBmaXJzdENoaWxkKCk7CisgICAgaWYgKCFudW1l
cmF0b3JXcmFwcGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZW5kZXJPYmplY3QqIG51bWVy
YXRvciA9IG51bWVyYXRvcldyYXBwZXItPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIW51bWVyYXRv
ciB8fCAhbnVtZXJhdG9yLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiB0b1JlbmRlck1hdGhNTEJsb2NrKG51bWVyYXRvciktPnVuZW1iZWxsaXNo
ZWRPcGVyYXRvcigpOworfQorCiB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpsYXlvdXQoKQog
ewogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCShyZXZpc2lvbiAx
MDc1MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZy
YWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEwICszOCwxNCBAQCBwdWJsaWM6CiAgICAg
UmVuZGVyTWF0aE1MRnJhY3Rpb24oRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgCisgICAgdmlydHVhbCBj
b25zdCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgY29uc3Q7
CisgICAgCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUg
PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OyAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJNYXRoTUxGcmFjdGlvbiI7IH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHJldmlzaW9uIDEwNzUxMykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3IoRWxl
bWVudCopOwogICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yKE5vZGUqLCBVQ2hhciBvcGVyYXRvckNo
YXIpOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIHVu
ZW1iZWxsaXNoZWRPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc3RyZXRjaFRvSGVpZ2h0KGludCBwaXhlbEhlaWdodCk7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7IAogICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcAkocmV2
aXNpb24gMTA3NTEzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTdWJTdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNyBAQCBSZW5kZXJN
YXRoTUxTdWJTdXA6OlJlbmRlck1hdGhNTFN1YlN1cChFCiAgICAgfQogfQogCitSZW5kZXJCb3hN
b2RlbE9iamVjdCogUmVuZGVyTWF0aE1MU3ViU3VwOjpnZXRCYXNlKCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIGJhc2VXcmFwcGVyID0gZmlyc3RDaGlsZCgpOworICAgIGlmICghYmFzZVdy
YXBwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIFJlbmRlck9iamVjdCogYmFzZSA9IGJhc2VX
cmFwcGVyLT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFiYXNlIHx8ICFiYXNlLT5pc0JveE1vZGVs
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KGJhc2UpOworfQorCiB2b2lkIFJlbmRlck1hdGhNTFN1YlN1cDo6YWRkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICAvLyBO
b3RlOiBUaGUgUmVuZGVyTWF0aE1MQmxvY2sgb25seSBhbGxvd3MgZWxlbWVudCBjaGlsZHJlbiB0
byBiZSBhZGRlZC4KQEAgLTEwNCwxNCArMTE1LDIyIEBAIHZvaWQgUmVuZGVyTWF0aE1MU3ViU3Vw
OjphZGRDaGlsZChSZW5kZXIKICAgICB9CiB9CiAKK2NvbnN0IFJlbmRlck1hdGhNTE9wZXJhdG9y
KiBSZW5kZXJNYXRoTUxTdWJTdXA6OnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpIGNvbnN0Cit7Cisg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJhc2UgPSBnZXRCYXNlKCk7CisgICAgaWYgKCFiYXNl
IHx8ICFiYXNlLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiB0b1JlbmRlck1hdGhNTEJsb2NrKGJhc2UpLT51bmVtYmVsbGlzaGVkT3BlcmF0b3Io
KTsKK30KKwogdm9pZCBSZW5kZXJNYXRoTUxTdWJTdXA6OnN0cmV0Y2hUb0hlaWdodChpbnQgaGVp
Z2h0KQogewotICAgIFJlbmRlck9iamVjdCogYmFzZSA9IGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAo
IWJhc2UgfHwgIWJhc2UtPmZpcnN0Q2hpbGQoKSkKKyAgICBSZW5kZXJPYmplY3QqIGJhc2VXcmFw
cGVyID0gZmlyc3RDaGlsZCgpOworICAgIGlmICghYmFzZVdyYXBwZXIgfHwgIWJhc2VXcmFwcGVy
LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoYmFzZS0+Zmly
c3RDaGlsZCgpICYmIGJhc2UtPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7
Ci0gICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1MQmxvY2so
YmFzZS0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAoYmFzZVdyYXBwZXItPmZpcnN0Q2hpbGQoKSAm
JiBiYXNlV3JhcHBlci0+Zmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKKyAg
ICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhiYXNl
V3JhcHBlci0+Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgYmxvY2stPnN0cmV0Y2hUb0hlaWdodChz
dGF0aWNfY2FzdDxpbnQ+KGdTdWJTdXBTdHJldGNoICogaGVpZ2h0KSk7CiAgICAgICAgIAogICAg
ICAgICAvLyBBZGp1c3QgdGhlIHNjcmlwdCBwbGFjZW1lbnQgYWZ0ZXIgd2Ugc3RyZXRjaApAQCAt
MTUzLDkgKzE3Miw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3ViU3VwOjpsYXlvdXQoKSAKICAgICBS
ZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAgICAgCiAgICAgaWYgKG1fa2luZCA9PSBTdWJTdXApIHsK
LSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYmFzZSA9IGZpcnN0Q2hpbGQoKSkgeworICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBiYXNlV3JhcHBlciA9IGZpcnN0Q2hpbGQoKSkgewogICAgICAg
ICAgICAgTGF5b3V0VW5pdCBtYXhIZWlnaHQgPSAwOwotICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gYmFzZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gYmFzZVdyYXBwZXItPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50KSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBnZXRCb3hN
b2RlbE9iamVjdEhlaWdodChjdXJyZW50KTsKICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID4g
bWF4SGVpZ2h0KQpAQCAtMTY1LDggKzE4NCw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3ViU3VwOjps
YXlvdXQoKSAKICAgICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IG1fc2NyaXB0cyA/
IChtX3NjcmlwdHMtPm9mZnNldEhlaWdodCgpIC0gbWF4SGVpZ2h0KSAvIDIgOiAwOwogICAgICAg
ICAgICAgaWYgKGhlaWdodERpZmYgPCAwKSAKICAgICAgICAgICAgICAgICBoZWlnaHREaWZmID0g
MDsKLSAgICAgICAgICAgIGJhc2UtPnN0eWxlKCktPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGhlaWdo
dERpZmYsIEZpeGVkKSk7Ci0gICAgICAgICAgICBiYXNlLT5zZXROZWVkc0xheW91dCh0cnVlKTsK
KyAgICAgICAgICAgIGJhc2VXcmFwcGVyLT5zdHlsZSgpLT5zZXRQYWRkaW5nVG9wKExlbmd0aCho
ZWlnaHREaWZmLCBGaXhlZCkpOworICAgICAgICAgICAgYmFzZVdyYXBwZXItPnNldE5lZWRzTGF5
b3V0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogICAg
ICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmgJKHJldmlzaW9uIDEwNzUx
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3Vw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAgY2xhc3MgUmVuZGVyTWF0aE1MU3Vi
U3VwIDogcHVibGljIFJlbmRlcgogcHVibGljOgogICAgIFJlbmRlck1hdGhNTFN1YlN1cChFbGVt
ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKKyAgICAKKyAgICB2aXJ0dWFsIGNvbnN0IFJl
bmRlck1hdGhNTE9wZXJhdG9yKiB1bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGludCBub25PcGVyYXRvckhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNo
VG9IZWlnaHQoaW50IHBpeGVsSGVpZ2h0KTsKQEAgLTQ3LDYgKzQ5LDggQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyTWF0aE1MU3ViU3VwIjsgfQogCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGdldEJhc2UoKSBjb25zdDsKKyAgICAKICAgICBlbnVtIFN1YlN1cFR5cGUgeyBTdWIsIFN1cCwg
U3ViU3VwIH07CiAgICAgU3ViU3VwVHlwZSBtX2tpbmQ7CiAgICAgUmVuZGVyQmxvY2sqIG1fc2Ny
aXB0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
VW5kZXJPdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAJKHJldmlzaW9uIDEwNzUxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTkgQEAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpSZW5k
ZXJNYXRoTUxVbmRlcgogICAgIH0KIH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck1h
dGhNTFVuZGVyT3Zlcjo6Z2V0QmFzZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyT2JqZWN0KiBiYXNl
V3JhcHBlciA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoKG1fa2luZCA9PSBPdmVyIHx8IG1fa2lu
ZCA9PSBVbmRlck92ZXIpICYmIGJhc2VXcmFwcGVyKQorICAgICAgICBiYXNlV3JhcHBlciA9IGJh
c2VXcmFwcGVyLT5uZXh0U2libGluZygpOworICAgIGlmICghYmFzZVdyYXBwZXIpCisgICAgICAg
IHJldHVybiAwOworICAgIFJlbmRlck9iamVjdCogYmFzZSA9IGJhc2VXcmFwcGVyLT5maXJzdENo
aWxkKCk7CisgICAgaWYgKCFiYXNlIHx8ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2UpOwor
fQorCiB2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsgICAgCiAgICAgUmVuZGVyTWF0aE1M
QmxvY2sqIHJvdyA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2sobm9kZSgp
KTsKQEAgLTEwNiw2ICsxMTksMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmFkZENo
aWxkKFJlbgogICAgIHJvdy0+YWRkQ2hpbGQoY2hpbGQpOyAgICAKIH0KIAorY29uc3QgUmVuZGVy
TWF0aE1MT3BlcmF0b3IqIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6dW5lbWJlbGxpc2hlZE9wZXJh
dG9yKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmFzZSA9IGdldEJhc2Uo
KTsKKyAgICBpZiAoIWJhc2UgfHwgIWJhc2UtPmlzUmVuZGVyTWF0aE1MQmxvY2soKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVuZGVyTWF0aE1MQmxvY2soYmFzZSktPnVuZW1i
ZWxsaXNoZWRPcGVyYXRvcigpOworfQorCiBpbmxpbmUgaW50IGdldE9mZnNldEhlaWdodChSZW5k
ZXJPYmplY3QqIG9iaikgCiB7CiAgICAgaWYgKG9iai0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CkBA
IC0xMTgsMjEgKzEzOSw3IEBAIGlubGluZSBpbnQgZ2V0T2Zmc2V0SGVpZ2h0KFJlbmRlck9iamVj
dCoKIAogdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnN0cmV0Y2hUb0hlaWdodChpbnQgaGVp
Z2h0KQogewotCi0gICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gZmlyc3RDaGlsZCgpOwotICAgIGlm
ICghYmFzZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGb3Igb3ZlciBvciB1
bmRlcm92ZXIsIHRoZSBiYXNlIGlzIHRoZSBzaWJsaW5nIG9mIHRoZSBmaXJzdCBjaGlsZAotICAg
IGlmIChtX2tpbmQgIT0gVW5kZXIpIAotICAgICAgICBiYXNlID0gYmFzZS0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgCi0gICAgaWYgKCFiYXNlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIC8vIHVzZSB0aGUgY2hpbGQgb2YgdGhlIHJvdyB3aGljaCBpcyB0aGUgYWN0dWFsIGJhc2UK
LSAgICBiYXNlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwotICAgIAorICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBiYXNlID0gZ2V0QmFzZSgpOwogICAgIGlmIChiYXNlICYmIGJhc2UtPmlzUmVuZGVy
TWF0aE1MQmxvY2soKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxvY2sgPSB0b1Jl
bmRlck1hdGhNTEJsb2NrKGJhc2UpOwogICAgICAgICBibG9jay0+c3RyZXRjaFRvSGVpZ2h0KGhl
aWdodCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFVuZGVyT3Zlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgJKHJldmlzaW9uIDEwNzUxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDE0ICszNiwxOSBAQCBjbGFzcyBSZW5kZXJNYXRoTUxVbmRlck92ZXIgOiBw
dWJsaWMgUmVuCiBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyKEVsZW1lbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIAorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyTWF0
aE1MT3BlcmF0b3IqIHVuZW1iZWxsaXNoZWRPcGVyYXRvcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQmFzZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGludCBub25PcGVyYXRvckhlaWdodCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZXRjaFRvSGVpZ2h0
KGludCBwaXhlbEhlaWdodCk7CisgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJNYXRoTUxVbmRlck92ZXIiOyB9
CiAKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogZ2V0QmFzZSgpIGNvbnN0OworICAgIAogICAg
IGVudW0gVW5kZXJPdmVyVHlwZSB7IFVuZGVyLCBPdmVyLCBVbmRlck92ZXIgfTsKICAgICBVbmRl
ck92ZXJUeXBlIG1fa2luZDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127224</attachid>
            <date>2012-02-15 13:18:18 -0800</date>
            <delta_ts>2012-02-17 15:33:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78617-20120215131816.patch</filename>
            <type>text/plain</type>
            <size>13432</size>
            <attacher name="Dave Barton">dbarton</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAyLTE1ICBEYXZpZCBC
YXJ0b24gIDxkYmFydG9uQG1hdGhzY3JpYmUuY29tPgorCisgICAgICAgIE1hdGhNTCBpbnRlcm5h
bHMgLSBlbWJlbGxpc2hlZCBvcGVyYXRvcnMsIGdldEJhc2UoKSBhY2Nlc3NvciBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIGZ1
bmN0aW9ucyB0aGF0IHJldHVybiBhbiB1bmVtYmVsbGlzaGVkICJiYXNlIiwgYnkgb21pdHRpbmcK
KyAgICAgICAgc3Vic2NyaXB0cy9zdXBlcnNjcmlwdHMsIHVuZGVyc2NyaXB0cy9vdmVyc2NyaXB0
cywgb3IgZGVub21pbmF0b3JzLiBUaGlzIGlzIG5lZWRlZCBpbgorICAgICAgICBzdWJzZXF1ZW50
IHBhdGNoZXMgYm90aCBmb3IgY29ycmVjdCBvcGVyYXRvciBzdHJldGNoaW5nIGFuZCBzaW1wbGUg
Y29kZSBmYWN0b3JpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChSZW5kZXJNYXRoTUxCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxCbG9jazo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTEZyYWN0aW9uOjp1bmVtYmVsbGlzaGVkT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOgorICAg
ICAgICAoUmVuZGVyTWF0aE1MRnJhY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjp1bmVtYmVsbGlzaGVkT3BlcmF0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFN1YlN1cDo6YmFzZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTFN1YlN1cDo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6c3RyZXRjaFRvSGVpZ2h0KToKKyAgICAgICAgICAgIC0g
cmVuYW1lZCBhIHZhcmlhYmxlIGZvciBjbGFyaXR5LCBlc3BlY2lhbGx5IGluIGxhdGVyIHBhdGNo
ZXMKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6bGF5b3V0KToKKyAgICAg
ICAgICAgIC0gcmVuYW1lZCBhIHZhcmlhYmxlIGZvciBjbGFyaXR5LCBlc3BlY2lhbGx5IGluIGxh
dGVyIHBhdGNoZXMKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1
cC5oOgorICAgICAgICAoUmVuZGVyTWF0aE1MU3ViU3VwKToKKyAgICAgICAgKiByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxVbmRlck92ZXI6OmJhc2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnVuZW1iZWxsaXNoZWRPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnN0cmV0Y2hUb0hlaWdodCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaDoKKyAg
ICAgICAgKFJlbmRlck1hdGhNTFVuZGVyT3Zlcik6CisKIDIwMTItMDItMTUgIE9qYW4gVmFmYWkg
IDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBnZXRDb21wdXRlZFN0eWxlIG9mIGZsZXgt
aXRlbS1hbGlnbjphdXRvIHNob3VsZCByZXNvbHZlIHRvIGl0J3MgcGFyZW50J3MgZmxleC1hbGln
biB2YWx1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suaAkocmV2aXNpb24gMTA3NTEzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKK2NsYXNzIFJlbmRlck1h
dGhNTE9wZXJhdG9yOworCiBjbGFzcyBSZW5kZXJNYXRoTUxCbG9jayA6IHB1YmxpYyBSZW5kZXJC
bG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MQmxvY2soTm9kZSogY29udGFpbmVyKTsK
QEAgLTQzLDYgKzQ1LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRo
TUxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAg
ICAvLyBNYXRoTUwgZGVmaW5lcyBhbiAiZW1iZWxsaXNoZWQgb3BlcmF0b3IiIGFzIHJvdWdobHkg
YW4gPG1vPiB0aGF0IG1heSBoYXZlIHN1YnNjcmlwdHMsCisgICAgLy8gc3VwZXJzY3JpcHRzLCB1
bmRlcnNjcmlwdHMsIG92ZXJzY3JpcHRzLCBvciBhIGRlbm9taW5hdG9yIChhcyBpbiBkL2R4LCB3
aGVyZSAiZCIgaXMgc29tZQorICAgIC8vIGRpZmZlcmVudGlhbCBvcGVyYXRvcikuIFRoZSBwYWRk
aW5nLCBwcmVjZWRlbmNlLCBhbmQgc3RyZXRjaGluZXNzIG9mIHRoZSBiYXNlIDxtbz4gc2hvdWxk
CisgICAgLy8gYXBwbHkgdG8gdGhlIGVtYmVsbGlzaGVkIG9wZXJhdG9yIGFzIGEgd2hvbGUuIHVu
ZW1iZWxsaXNoZWRPcGVyYXRvcigpIGNoZWNrcyBmb3IgYmVpbmcgYW4KKyAgICAvLyBlbWJlbGxp
c2hlZCBvcGVyYXRvciwgYW5kIG9taXRzIGFueSBlbWJlbGxpc2htZW50cy4KKyAgICAvLyBGSVhN
RTogV2UgZG9uJ3QgeWV0IGhhbmRsZSBhbGwgdGhlIGNhc2VzIGluIHRoZSBNYXRoTUwgc3BlYy4g
U2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjE3
LgorICAgIHZpcnR1YWwgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIHVuZW1iZWxsaXNoZWRPcGVyYXRv
cigpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQmFzZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBpbnQgbm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZXRjaFRvSGVpZ2h0KGludCBoZWlnaHQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDEwNzUxMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
NiArMTE5LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OmFkZENoaWxkKFJlbmQKICAg
ICB1cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCitSZW5kZXJNYXRoTUxPcGVyYXRvciogUmVuZGVy
TWF0aE1MRnJhY3Rpb246OnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpCit7CisgICAgUmVuZGVyT2Jq
ZWN0KiBudW1lcmF0b3JXcmFwcGVyID0gZmlyc3RDaGlsZCgpOworICAgIGlmICghbnVtZXJhdG9y
V3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVuZGVyT2JqZWN0KiBudW1lcmF0b3Ig
PSBudW1lcmF0b3JXcmFwcGVyLT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFudW1lcmF0b3IgfHwg
IW51bWVyYXRvci0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gdG9SZW5kZXJNYXRoTUxCbG9jayhudW1lcmF0b3IpLT51bmVtYmVsbGlzaGVkT3Bl
cmF0b3IoKTsKK30KKwogdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6bGF5b3V0KCkKIHsKICAg
ICB1cGRhdGVGcm9tRWxlbWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAkocmV2aXNpb24gMTA3NTEz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTQgQEAgcHVibGljOgogICAgIFJlbmRl
ck1hdGhNTEZyYWN0aW9uKEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworICAgIAorICAgIHZpcnR1YWwgUmVuZGVy
TWF0aE1MT3BlcmF0b3IqIHVuZW1iZWxsaXNoZWRPcGVyYXRvcigpOworICAgIAogICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExp
bmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKSBjb25zdDsgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OworICAgIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyTWF0aE1MRnJhY3Rpb24iOyB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5oCShyZXZpc2lvbiAxMDc1MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAgcHVibGljOgogICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yKEVsZW1lbnQqKTsKICAgICBSZW5k
ZXJNYXRoTUxPcGVyYXRvcihOb2RlKiwgVUNoYXIgb3BlcmF0b3JDaGFyKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFJlbmRlck1hdGhNTE9wZXJhdG9yKiB1bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSB7
IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgcGl4
ZWxIZWlnaHQpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOyAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
U3ViU3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFN1YlN1cC5jcHAJKHJldmlzaW9uIDEwNzUxMykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTcgQEAgUmVuZGVyTWF0aE1MU3ViU3VwOjpSZW5kZXJNYXRoTUxTdWJT
dXAoRQogICAgIH0KIH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck1hdGhNTFN1YlN1
cDo6YmFzZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyT2JqZWN0KiBiYXNlV3JhcHBlciA9IGZpcnN0
Q2hpbGQoKTsKKyAgICBpZiAoIWJhc2VXcmFwcGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBS
ZW5kZXJPYmplY3QqIGJhc2UgPSBiYXNlV3JhcHBlci0+Zmlyc3RDaGlsZCgpOworICAgIGlmICgh
YmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKTsKK30KKwogdm9pZCBSZW5kZXJN
YXRoTUxTdWJTdXA6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gTm90ZTogVGhlIFJlbmRlck1hdGhNTEJsb2NrIG9ubHkg
YWxsb3dzIGVsZW1lbnQgY2hpbGRyZW4gdG8gYmUgYWRkZWQuCkBAIC0xMDQsMTQgKzExNSwyMiBA
QCB2b2lkIFJlbmRlck1hdGhNTFN1YlN1cDo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgfQogfQogCitS
ZW5kZXJNYXRoTUxPcGVyYXRvciogUmVuZGVyTWF0aE1MU3ViU3VwOjp1bmVtYmVsbGlzaGVkT3Bl
cmF0b3IoKQoreworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBiYXNlID0gdGhpcy0+YmFzZSgp
OworICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJNYXRoTUxCbG9jayhiYXNlKS0+dW5lbWJl
bGxpc2hlZE9wZXJhdG9yKCk7Cit9CisKIHZvaWQgUmVuZGVyTWF0aE1MU3ViU3VwOjpzdHJldGNo
VG9IZWlnaHQoaW50IGhlaWdodCkKIHsKLSAgICBSZW5kZXJPYmplY3QqIGJhc2UgPSBmaXJzdENo
aWxkKCk7Ci0gICAgaWYgKCFiYXNlIHx8ICFiYXNlLT5maXJzdENoaWxkKCkpCisgICAgUmVuZGVy
T2JqZWN0KiBiYXNlV3JhcHBlciA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIWJhc2VXcmFwcGVy
IHx8ICFiYXNlV3JhcHBlci0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaWYgKGJhc2UtPmZpcnN0Q2hpbGQoKSAmJiBiYXNlLT5maXJzdENoaWxkKCktPmlzUmVuZGVy
TWF0aE1MQmxvY2soKSkgewotICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxvY2sgPSB0b1Jl
bmRlck1hdGhNTEJsb2NrKGJhc2UtPmZpcnN0Q2hpbGQoKSk7CisgICAgaWYgKGJhc2VXcmFwcGVy
LT5maXJzdENoaWxkKCkgJiYgYmFzZVdyYXBwZXItPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRo
TUxCbG9jaygpKSB7CisgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVy
TWF0aE1MQmxvY2soYmFzZVdyYXBwZXItPmZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIGJsb2NrLT5z
dHJldGNoVG9IZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihnU3ViU3VwU3RyZXRjaCAqIGhlaWdodCkp
OwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBzY3JpcHQgcGxhY2VtZW50IGFmdGVy
IHdlIHN0cmV0Y2gKQEAgLTE1Myw5ICsxNzIsOSBAQCB2b2lkIFJlbmRlck1hdGhNTFN1YlN1cDo6
bGF5b3V0KCkgCiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwogICAgIAogICAgIGlmIChtX2tp
bmQgPT0gU3ViU3VwKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGJhc2UgPSBmaXJzdENo
aWxkKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYmFzZVdyYXBwZXIgPSBmaXJzdENo
aWxkKCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gMDsKLSAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGJhc2VXcmFwcGVyLT5maXJzdENoaWxkKCk7CiAg
ICAgICAgICAgICB3aGlsZSAoY3VycmVudCkgewogICAgICAgICAgICAgICAgIExheW91dFVuaXQg
aGVpZ2h0ID0gZ2V0Qm94TW9kZWxPYmplY3RIZWlnaHQoY3VycmVudCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGhlaWdodCA+IG1heEhlaWdodCkKQEAgLTE2NSw4ICsxODQsOCBAQCB2b2lkIFJlbmRl
ck1hdGhNTFN1YlN1cDo6bGF5b3V0KCkgCiAgICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdodERp
ZmYgPSBtX3NjcmlwdHMgPyAobV9zY3JpcHRzLT5vZmZzZXRIZWlnaHQoKSAtIG1heEhlaWdodCkg
LyAyIDogMDsKICAgICAgICAgICAgIGlmIChoZWlnaHREaWZmIDwgMCkgCiAgICAgICAgICAgICAg
ICAgaGVpZ2h0RGlmZiA9IDA7Ci0gICAgICAgICAgICBiYXNlLT5zdHlsZSgpLT5zZXRQYWRkaW5n
VG9wKExlbmd0aChoZWlnaHREaWZmLCBGaXhlZCkpOwotICAgICAgICAgICAgYmFzZS0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgICAgICBiYXNlV3JhcHBlci0+c3R5bGUoKS0+c2V0UGFk
ZGluZ1RvcChMZW5ndGgoaGVpZ2h0RGlmZiwgRml4ZWQpKTsKKyAgICAgICAgICAgIGJhc2VXcmFw
cGVyLT5zZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBzZXROZWVkc0xh
eW91dCh0cnVlKTsKICAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5o
CShyZXZpc2lvbiAxMDc1MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFN1YlN1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBAIGNsYXNz
IFJlbmRlck1hdGhNTFN1YlN1cCA6IHB1YmxpYyBSZW5kZXIKIHB1YmxpYzoKICAgICBSZW5kZXJN
YXRoTUxTdWJTdXAoRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CisgICAgCisgICAg
dmlydHVhbCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CiAg
ICAgdmlydHVhbCBib29sIGhhc0Jhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBpbnQgbm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZXRjaFRvSGVpZ2h0KGludCBwaXhlbEhlaWdodCk7CkBAIC00Nyw2ICs0OSwxMCBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJNYXRoTUxTdWJTdXAiOyB9CiAKKyAgICAvLyBPbWl0IG91ciBzdWJz
Y3JpcHQgYW5kL29yIHN1cGVyc2NyaXB0LiBUaGlzIG1heSByZXR1cm4gMCBmb3IgYSBub24tTWF0
aE1MIGJhc2UgKHdoaWNoCisgICAgLy8gd29uJ3Qgb2NjdXIgaW4gdmFsaWQgTWF0aE1MKS4KKyAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmFzZSgpIGNvbnN0OworICAgIAogICAgIGVudW0gU3Vi
U3VwVHlwZSB7IFN1YiwgU3VwLCBTdWJTdXAgfTsKICAgICBTdWJTdXBUeXBlIG1fa2luZDsKICAg
ICBSZW5kZXJCbG9jayogbV9zY3JpcHRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAkocmV2aXNp
b24gMTA3NTEzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxVbmRlck92ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxOSBAQCBSZW5kZXJN
YXRoTUxVbmRlck92ZXI6OlJlbmRlck1hdGhNTFVuZGVyCiAgICAgfQogfQogCitSZW5kZXJCb3hN
b2RlbE9iamVjdCogUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpiYXNlKCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIGJhc2VXcmFwcGVyID0gZmlyc3RDaGlsZCgpOworICAgIGlmICgobV9raW5k
ID09IE92ZXIgfHwgbV9raW5kID09IFVuZGVyT3ZlcikgJiYgYmFzZVdyYXBwZXIpCisgICAgICAg
IGJhc2VXcmFwcGVyID0gYmFzZVdyYXBwZXItPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFiYXNl
V3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gYmFz
ZVdyYXBwZXItPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIWJhc2UgfHwgIWJhc2UtPmlzQm94TW9k
ZWxPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoYmFzZSk7Cit9CisKIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjphZGRDaGls
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogeyAgICAK
ICAgICBSZW5kZXJNYXRoTUxCbG9jayogcm93ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJN
YXRoTUxCbG9jayhub2RlKCkpOwpAQCAtMTA2LDYgKzExOSwxNCBAQCB2b2lkIFJlbmRlck1hdGhN
TFVuZGVyT3Zlcjo6YWRkQ2hpbGQoUmVuCiAgICAgcm93LT5hZGRDaGlsZChjaGlsZCk7ICAgIAog
fQogCitSZW5kZXJNYXRoTUxPcGVyYXRvciogUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjp1bmVtYmVs
bGlzaGVkT3BlcmF0b3IoKQoreworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBiYXNlID0gdGhp
cy0+YmFzZSgpOworICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNSZW5kZXJNYXRoTUxCbG9jaygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJNYXRoTUxCbG9jayhiYXNl
KS0+dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7Cit9CisKIGlubGluZSBpbnQgZ2V0T2Zmc2V0SGVp
Z2h0KFJlbmRlck9iamVjdCogb2JqKSAKIHsKICAgICBpZiAob2JqLT5pc0JveE1vZGVsT2JqZWN0
KCkpIHsKQEAgLTExOCwyMSArMTM5LDcgQEAgaW5saW5lIGludCBnZXRPZmZzZXRIZWlnaHQoUmVu
ZGVyT2JqZWN0KgogCiB2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6c3RyZXRjaFRvSGVpZ2h0
KGludCBoZWlnaHQpCiB7Ci0KLSAgICBSZW5kZXJPYmplY3QqIGJhc2UgPSBmaXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFiYXNlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEZvciBv
dmVyIG9yIHVuZGVyb3ZlciwgdGhlIGJhc2UgaXMgdGhlIHNpYmxpbmcgb2YgdGhlIGZpcnN0IGNo
aWxkCi0gICAgaWYgKG1fa2luZCAhPSBVbmRlcikgCi0gICAgICAgIGJhc2UgPSBiYXNlLT5uZXh0
U2libGluZygpOwotICAgICAgICAKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgLy8gdXNlIHRoZSBjaGlsZCBvZiB0aGUgcm93IHdoaWNoIGlzIHRoZSBhY3R1
YWwgYmFzZQotICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7Ci0gICAgCisgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGJhc2UgPSB0aGlzLT5iYXNlKCk7CiAgICAgaWYgKGJhc2UgJiYgYmFz
ZS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBi
bG9jayA9IHRvUmVuZGVyTWF0aE1MQmxvY2soYmFzZSk7CiAgICAgICAgIGJsb2NrLT5zdHJldGNo
VG9IZWlnaHQoaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaAkocmV2aXNpb24gMTA3NTEzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDIxIEBAIGNsYXNzIFJlbmRlck1hdGhNTFVu
ZGVyT3ZlciA6IHB1YmxpYyBSZW4KIHB1YmxpYzoKICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIo
RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CisgICAgCisgICAgdmlydHVhbCBSZW5k
ZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNCYXNlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZp
cnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9u
Q29udGFpbmluZ0xpbmUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQo
aW50IHBpeGVsSGVpZ2h0KTsKKyAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlck1hdGhNTFVuZGVyT3ZlciI7IH0K
IAorICAgIC8vIE9taXQgb3VyIHVuZGVyc2NyaXB0IGFuZC9vciBvdmVyc2NyaXB0LiBUaGlzIG1h
eSByZXR1cm4gMCBmb3IgYSBub24tTWF0aE1MIGJhc2UgKHdoaWNoCisgICAgLy8gd29uJ3Qgb2Nj
dXIgaW4gdmFsaWQgTWF0aE1MKS4KKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmFzZSgpIGNv
bnN0OworICAgIAogICAgIGVudW0gVW5kZXJPdmVyVHlwZSB7IFVuZGVyLCBPdmVyLCBVbmRlck92
ZXIgfTsKICAgICBVbmRlck92ZXJUeXBlIG1fa2luZDsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>