<?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>67612</bug_id>
          
          <creation_ts>2011-09-05 11:47:10 -0700</creation_ts>
          <short_desc>Protect against incorrect Element::fast*Attribute() usage.</short_desc>
          <delta_ts>2011-10-18 03:43:13 -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>DOM</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>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>darin</cc>
    
    <cc>krit</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462207</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-05 11:47:10 -0700</bug_when>
    <thetext>It&apos;s incorrect to call Element::fastGetAttribute() or Element::fastHasAttribute() on HTMLNames::styleAttr, and any of the SVG animatable attributes.

We should detect misuse of these functions in debug mode, at the very least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462220</commentid>
    <comment_count>1</comment_count>
      <attachid>106352</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-05 12:26:50 -0700</bug_when>
    <thetext>Created attachment 106352
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462265</commentid>
    <comment_count>2</comment_count>
      <attachid>106352</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-05 14:33:24 -0700</bug_when>
    <thetext>Comment on attachment 106352
Proposed patch

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

Some notes. But looks good in general.

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:256
&gt; +    if (hasAttribute(SVGNames::valuesAttr))

All attributes of SMILElements are not animatable. Can you use fastHasAttribute for it?

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:543
&gt; -    return fastGetAttribute(XLinkNames::hrefAttr);
&gt; +    return getAttribute(XLinkNames::hrefAttr);

Ditto with fastGetAttribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462395</commentid>
    <comment_count>3</comment_count>
      <attachid>106352</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-09-06 00:29:24 -0700</bug_when>
    <thetext>Comment on attachment 106352
Proposed patch

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

&gt; Source/WebCore/dom/Element.cpp:2008
&gt; +bool Element::fastAttributeLookupAllowed(const QualifiedName&amp; name) const
&gt; +{
&gt; +    if (name == HTMLNames::styleAttr)
&gt; +        return false;

I&apos;m revoking Dirks r+. This needs to be a static hashset, this is way too inefficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462398</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-06 00:39:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 106352 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106352&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:2008
&gt; &gt; +bool Element::fastAttributeLookupAllowed(const QualifiedName&amp; name) const
&gt; &gt; +{
&gt; &gt; +    if (name == HTMLNames::styleAttr)
&gt; &gt; +        return false;
&gt; 
&gt; I&apos;m revoking Dirks r+. This needs to be a static hashset, this is way too inefficient.

I talked about that with kling. This is just for the assertion and does influence a release build!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462399</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-06 00:40:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 106352 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106352&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Element.cpp:2008
&gt; &gt; &gt; +bool Element::fastAttributeLookupAllowed(const QualifiedName&amp; name) const
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    if (name == HTMLNames::styleAttr)
&gt; &gt; &gt; +        return false;
&gt; &gt; 
&gt; &gt; I&apos;m revoking Dirks r+. This needs to be a static hashset, this is way too inefficient.
&gt; 
&gt; I talked about that with kling. This is just for the assertion and does influence a release build!

missed &quot;&apos;t&quot; does NOT influence a release build!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462425</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-09-06 01:42:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m revoking Dirks r+. This needs to be a static hashset, this is way too inefficient.
&gt; &gt; 
&gt; &gt; I talked about that with kling. This is just for the assertion and does influence a release build!
&gt; 
&gt; missed &quot;&apos;t&quot; does NOT influence a release build!

Still no reason to put this burden on every fastAttribute call in debug builds. A static HashSet is also much easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462463</commentid>
    <comment_count>7</comment_count>
      <attachid>106406</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-06 04:50:32 -0700</bug_when>
    <thetext>Created attachment 106406
Proposed patch v2

Second attack!

- Put the relevant things in !NDEBUG blocks.
- Moved animatable property check to &quot;static bool SVGElement::isAnimatableAttribute(const QualifiedName&amp;)&quot; where we use a static hashset as suggested by Nikolas.
- Added comment in Element.h about getClassAttribute().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462557</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-06 08:48:28 -0700</bug_when>
    <thetext>Is getClassAttribute actually faster than getAttribute(classAttr)? If not, maybe we shouldn’t add it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462561</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-06 08:52:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Is getClassAttribute actually faster than getAttribute(classAttr)? If not, maybe we shouldn’t add it.

They are essentially equivalent with this patch, bar 2 hinted-against branches.

If kept, getClassAttribute() should probably be inlined, I was hesitant to do so because it necessitates including HTMLNames.h from Element.h.

I&apos;m leaning towards moving the checks to the few call sites we have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462567</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-06 08:59:11 -0700</bug_when>
    <thetext>Here’s my take on the class part: The fastGetAttribute function is not such a superb optimization that we need to strain ourselves to use it. If the class attribute can sometimes be animatable I suggest just calling getAttribute instead of fastGetAttribute for classAttr for now. We can optimize in a separate patch if there’s some measurable improvement to be made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463984</commentid>
    <comment_count>11</comment_count>
      <attachid>106721</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-08 04:13:00 -0700</bug_when>
    <thetext>Created attachment 106721
Proposed patch v3

As Darin pointed out, adding a special getter for the class attribute is probably not worth the added complexity just to get this optimization.
This new patch gets rid of Element::getClassAttribute() and switches fastGetAttribute(classAttr) to getAttribute(classAttr) instead.
Also added a missing export of fastAttributeLookupAllowed() to fix the mac/debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465052</commentid>
    <comment_count>12</comment_count>
      <attachid>106721</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-09-09 15:20:38 -0700</bug_when>
    <thetext>Comment on attachment 106721
Proposed patch v3

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Add debug-only checks in Element&apos;s fastHasAttribute() and fastGetAttribute() to verify
&gt; +        that we aren&apos;t looking up the &quot;style&quot; attribute or any of the SVG animatable attributes.

You should make it more clear why you change the fast* functions to get* functions.

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests, erroneous behavior is covered by assertions.

And that the some tests fail once you add the assertion because of wrong use of fast*. Also I&apos;d like to see a test that shows that fast* calls were used in the wrong context.

&gt; Source/WebCore/svg/SVGElement.h:105
&gt; +    static bool isAnimatableAttribute(const QualifiedName&amp;);

can you call it isAnimateableSVGAttribute to make it more clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485389</commentid>
    <comment_count>13</comment_count>
      <attachid>106721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 12:30:49 -0700</bug_when>
    <thetext>Comment on attachment 106721
Proposed patch v3

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:926
&gt; +    if (element-&gt;getAttribute(typeAttr) != m_element-&gt;getAttribute(typeAttr))

I would like more explanation of why typeAttr is animatable. Is this the same as SVGName::typeAttr?

&gt;&gt; Source/WebCore/svg/SVGElement.h:105
&gt;&gt; +    static bool isAnimatableAttribute(const QualifiedName&amp;);
&gt; 
&gt; can you call it isAnimateableSVGAttribute to make it more clear?

I think the current name is pretty clear given the context as a member of SVGElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485621</commentid>
    <comment_count>14</comment_count>
      <attachid>106721</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 16:39:25 -0700</bug_when>
    <thetext>Comment on attachment 106721
Proposed patch v3

Clearing flags on attachment: 106721

Committed r97670: &lt;http://trac.webkit.org/changeset/97670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485622</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 16:39:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485938</commentid>
    <comment_count>16</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-18 03:43:13 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 106721 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106721&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:926
&gt; &gt; +    if (element-&gt;getAttribute(typeAttr) != m_element-&gt;getAttribute(typeAttr))
&gt; 
&gt; I would like more explanation of why typeAttr is animatable. Is this the same as SVGName::typeAttr?

Correct, there is no way to distinguish between SVGNames::typeAttr and HTMLNames::typeAttr at runtime.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106352</attachid>
            <date>2011-09-05 12:26:50 -0700</date>
            <delta_ts>2011-09-06 04:50:32 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-67612.diff</filename>
            <type>text/plain</type>
            <size>25586</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWNiM2U4Li5kNDhlNGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUg
QEAKKzIwMTEtMDktMDUgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFByb3RlY3QgYWdhaW5zdCBpbmNvcnJlY3QgRWxlbWVudDo6ZmFzdCpBdHRyaWJ1dGUoKSB1
c2FnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGNoZWNrcyBpbiBFbGVtZW50J3MgZmFzdEhhc0F0dHJpYnV0ZSgpIGFuZCBmYXN0R2V0QXR0cmli
dXRlKCkgdG8gdmVyaWZ5IHRoYXQKKyAgICAgICAgd2UgYXJlbid0IGxvb2tpbmcgdXAgdGhlICJz
dHlsZSIgYXR0cmlidXRlIG9yIGFueSBvZiB0aGUgU1ZHIGFuaW1hdGFibGUgYXR0cmlidXRlcy4K
KworICAgICAgICBCZWNhdXNlIHRoZSAiY2xhc3MiIGF0dHJpYnV0ZSBpcyBTVkcgYW5pbWF0YWJs
ZSwgaXQgc2hvdWxkIG5vdCBiZSBpbmRpc2NyaW1pbmF0ZWx5CisgICAgICAgIHJldHJpZXZlZCB1
c2luZyBmYXN0KkF0dHJpYnV0ZSgpLiBBIG5ldyBmdW5jdGlvbiwgRWxlbWVudDo6Z2V0Q2xhc3NB
dHRyaWJ1dGUoKSwKKyAgICAgICAgd2FzIGFkZGVkIHRvIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZG8g
dGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6IEZpeCAieGxpbms6aHJlZiIgbG9va3Vw
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KTogRml4ICJ0eXBlIiBhbmQgImNsYXNzIiBsb29rdXAuCisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlKTogTWFu
dWFsbHkgaW5saW5lIGZhc3RHZXRBdHRyaWJ1dGUoKSBpbiBpZGVhbCBjYXNlLgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIpOiBGaXggImNsYXNzIiBsb29rdXAu
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZCk6
IENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQKKyAgICAgICAgd2l0aCB0aGUgZmFz
dCBsb29rdXAgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0Q2xhc3NB
dHRyaWJ1dGUpOiBTYWZlbHkgcmV0dXJucyB0aGUgImNsYXNzIiBhdHRyaWJ1dGUuCisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RIYXNBdHRy
aWJ1dGUpOiBBZGQgZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQoKSBhc3NlcnRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKTogRGl0dG8uCisgICAgICAg
ICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xl
Z2FjeUFwcGxlU3R5bGVTcGFuKTogRml4ICJjbGFzcyIgbG9va3VwLgorICAgICAgICAoV2ViQ29y
ZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6aXNFbXB0eUZvbnRUYWcpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0
eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVyY2hhbmdl
TmV3bGluZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZXJjaGFuZ2VDb252
ZXJ0ZWRTcGFjZVNwYW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzTWFpbFBhc3RlQXNR
dW90YXRpb25Ob2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0lubGluZU5vZGVXaXRo
U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzVGFiU3Bhbk5vZGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0NsYXNz
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OkNsYXNzTGlzdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NMaXN0OjphZGRJbnRlcm5hbCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q2xhc3NMaXN0OjpyZW1vdmVJbnRlcm5hbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xhc3NMaXN0Ojp0b1N0cmluZyk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlPclVu
c3R5bGVkQXBwbGVTdHlsZVNwYW4pOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHQWx0R2x5cGhF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FsdEdseXBoRWxlbWVudDo6aGFzVmFs
aWRHbHlwaEVsZW1lbnRzKTogRml4ICJ4bGluazpocmVmIiBsb29rdXAuCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50Ojpyb3RhdGVNb2RlKTogRml4ICJyb3RhdGUiIGxvb2t1cC4KKyAgICAg
ICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKTogRml4ICJ2YWx1ZXMgbG9va3VwLgorICAg
ICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSk6IEZpeCAieGxpbms6aHJlZiIgbG9va3Vw
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50Ojpsb2FkRm9udCk6IERp
dHRvLgorICAgICAgICAqIHN2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHR2x5cGhSZWZFbGVtZW50OjpoYXNWYWxpZEdseXBoRWxlbWVudCk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVFbGVtZW50Ojp0eXBlKTogRml4ICJ0eXBlIiBsb29rdXAuCisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6eGxpbmtIcmVmKTogRml4ICJ4bGluayJocmVmIiBsb29rdXAuCisKIDIwMTEtMDktMDUg
IEthdXN0dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAg
TG9naWMgZnJvbSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dCBtb3ZlZCBpbnRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXgg
Y2FlY2ExNy4uNGU1Zjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cApAQCAtODExLDcgKzgxMSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nKiBs
aW5rQXR0cmlidXRlKE5vZGUqIG5vZGUpCiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChlbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuICZlbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgcmV0dXJuICZlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogI2VuZGlmCiAKICAgICByZXR1cm4g
MDsKQEAgLTEwMzUsNyArMTAzNSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVT
dHlsZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAobV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKKyAg
ICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSAhPSBtX2VsZW1lbnQtPmdldEF0
dHJpYnV0ZSh0eXBlQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFz
dEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMDcwLDcgKzEwNzAsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIpLCAiYXV0byIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKSwgImF1dG8iKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYg
bV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIG1f
ZWxlbWVudC0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSAhPSBlbGVtZW50LT5nZXRDbGFzc0F0dHJpYnV0
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzTWFwcGVk
QXR0cmlidXRlcygpICYmICFlbGVtZW50LT5hdHRyaWJ1dGVNYXAoKS0+bWFwcGVkTWFwc0VxdWl2
YWxlbnQobV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggY2Q4MmQwNi4uZTQ4OGI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjAs
NiArNjAsNyBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25MaXN0LmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5o
IgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0yMjQsNyArMjI1LDExIEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiAgICAgICAgIHVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKG5hbWUpOwogI2VuZGlm
CiAKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShuYW1lKTsKKyAgICBpZiAobV9hdHRyaWJ1
dGVNYXApIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVN
YXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
LT52YWx1ZSgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbEF0b207CiB9CiAKIHZvaWQgRWxlbWVu
dDo6c2Nyb2xsSW50b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKQEAgLTE0MzAsOCArMTQzNSw4IEBA
IHZvaWQgRWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSAiaWQ9IjsKICAgICAgICAgcmVzdWx0ICs9
IHM7CiAgICAgfQotICAgICAgICAgIAotICAgIHMgPSBnZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsK
KworICAgIHMgPSBnZXRDbGFzc0F0dHJpYnV0ZSgpOwogICAgIGlmIChzLmxlbmd0aCgpID4gMCkg
ewogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMCkKICAgICAgICAgICAgIHJlc3VsdCAr
PSAiOyAiOwpAQCAtMTk5Nyw0ICsyMDAyLDEyOCBAQCBQYXNzUmVmUHRyPFdlYktpdEFuaW1hdGlv
bkxpc3Q+IEVsZW1lbnQ6OndlYmtpdEdldEFuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBh
bmltQ29udHJvbGxlci0+YW5pbWF0aW9uc0ZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogfQogCiti
b29sIEVsZW1lbnQ6OmZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpIGNvbnN0Cit7CisgICAgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpzdHlsZUF0dHIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKCFpc1NW
R0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBBbGwgcmVxdWVzdHMg
Zm9yIFNWRyBhbmltYXRhYmxlIGF0dHJpYnV0ZXMgc2hvdWxkIGdvIHRocm91Z2ggZ2V0L2hhc0F0
dHJpYnV0ZS4KKyAgICBpZiAobmFtZSA9PSBYTGlua05hbWVzOjpocmVmQXR0cikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2FsbGVyIHNob3VsZCBoYXZlIHVzZWQgRWxlbWVudDo6
Z2V0Q2xhc3NBdHRyaWJ1dGUoKSBpbnN0ZWFkLgorICAgIGlmIChuYW1lID09IEhUTUxOYW1lczo6
Y2xhc3NBdHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6YW1wbGl0dWRlQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjphemltdXRo
QXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cgorICAg
ICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpiaWFzQXR0cgorICAgICAgICB8fCBuYW1lID09IFNW
R05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpj
eEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6Y3lBdHRyCisgICAgICAgIHx8IG5h
bWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBT
VkdOYW1lczo6ZGl2aXNvckF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRy
CisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cgorICAgICAgICB8fCBuYW1lID09
IFNWR05hbWVzOjplZGdlTW9kZUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6ZWxl
dmF0aW9uQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpleHBvbmVudEF0dHIKKyAg
ICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEF0dHIK
KyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cgorICAgICAgICB8fCBu
YW1lID09IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdO
YW1lczo6ZnhBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OmZ5QXR0cgorICAgICAg
ICB8fCBuYW1lID09IFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIKKyAgICAgICAgfHwg
bmFtZSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBT
VkdOYW1lczo6aGVpZ2h0QXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjppbjJBdHRy
CisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cgorICAgICAgICB8fCBuYW1lID09
IFNWR05hbWVzOjppbnRlcmNlcHRBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6Omsx
QXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjprMkF0dHIKKyAgICAgICAgfHwgbmFt
ZSA9PSBTVkdOYW1lczo6azNBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0
cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjprZXJuZWxNYXRyaXhBdHRyCisgICAgICAg
IHx8IG5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyCisgICAgICAgIHx8IG5h
bWUgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdO
YW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6
Om1hcmtlckhlaWdodEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6bWFya2VyVW5p
dHNBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cgorICAg
ICAgICB8fCBuYW1lID09IFNWR05hbWVzOjptYXNrQ29udGVudFVuaXRzQXR0cgorICAgICAgICB8
fCBuYW1lID09IFNWR05hbWVzOjptYXNrVW5pdHNBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZH
TmFtZXM6Om1ldGhvZEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIK
KyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIKKyAgICAgICAgfHwg
bmFtZSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6b3JkZXJBdHRyCisg
ICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIKKyAgICAgICAgfHwgbmFtZSA9
PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6
cGF0dGVybkNvbnRlbnRVbml0c0F0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6cGF0
dGVyblRyYW5zZm9ybUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6cGF0dGVyblVu
aXRzQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyCisgICAg
ICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIKKyAgICAgICAgfHwgbmFtZSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpw
cmVzZXJ2ZUFscGhhQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFz
cGVjdFJhdGlvQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpwcmltaXRpdmVVbml0
c0F0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cgorICAgICAgICB8
fCBuYW1lID09IFNWR05hbWVzOjpyQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpy
ZWZYQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjpyZWZZQXR0cgorICAgICAgICB8
fCBuYW1lID09IFNWR05hbWVzOjpyZXN1bHRBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFt
ZXM6OnJvdGF0ZUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6cnhBdHRyCisgICAg
ICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnJ5QXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05h
bWVzOjpzY2FsZUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIKKyAg
ICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyCisgICAgICAgIHx8IG5hbWUgPT0g
U1ZHTmFtZXM6OnNwYWNpbmdBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1
bGFyQ29uc3RhbnRBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIK
KyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyCisgICAgICAgIHx8
IG5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBT
VkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnN1
cmZhY2VTY2FsZUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6dGFibGVWYWx1ZXNB
dHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldEF0dHIKKyAgICAgICAgfHwg
bmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1l
czo6dGFyZ2V0WUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0
cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cgorICAgICAgICB8fCBuYW1l
ID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnZp
ZXdCb3hBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cgorICAgICAg
ICB8fCBuYW1lID09IFNWR05hbWVzOjp4MUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1l
czo6eDJBdHRyCisgICAgICAgIHx8IG5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyCisgICAgICAgIHx8
IG5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyCisgICAgICAgIHx8IG5hbWUg
PT0gU1ZHTmFtZXM6OnkxQXR0cgorICAgICAgICB8fCBuYW1lID09IFNWR05hbWVzOjp5MkF0dHIK
KyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1lczo6eUF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBT
VkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIKKyAgICAgICAgfHwgbmFtZSA9PSBTVkdOYW1l
czo6ekF0dHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0Q2xhc3NBdHRyaWJ1dGUo
KSBjb25zdAoreworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGlzU1ZHRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNsYXNzQXR0cik7CisjZW5kaWYKKyAgICByZXR1cm4g
ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaAppbmRleCBhODQ2MWVhLi4yMTkzOWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gYXR0cmlidXRlIG9yIG9uZSBv
ZiB0aGUgU1ZHIGFuaW1hdGFibGUgYXR0cmlidXRlcy4KICAgICBib29sIGZhc3RIYXNBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgYm9vbCBm
YXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAK
ICAgICBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKIApAQCAtMTM5LDYgKzE0MCw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdldElkQXR0cmlidXRlKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRJZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAorICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZ2V0Q2xhc3NBdHRyaWJ1dGUoKSBjb25zdDsKKwogICAgIC8vIENhbGwg
dGhpcyB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgZm9yIHN0eWxlIHJlc29s
dXRpb24gcHVycG9zZXMuCiAgICAgLy8gVGhlIHZhbHVlIHdpbGwgYWxyZWFkeSBiZSBsb3dlcmNh
c2VkIGlmIHRoZSBkb2N1bWVudCBpcyBpbiBjb21wYXRpYmlsaXR5IG1vZGUsCiAgICAgLy8gc28g
dGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VpdGFibGUgZm9yIG5vbi1zdHlsZSB1c2VzLgpAQCAtNTAz
LDExICs1MDYsMTMgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXcKIAogaW5saW5lIGJvb2wgRWxl
bWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAog
eworICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7CiAgICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwICYmIG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWUpOwogfQogCiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CisgICAgQVNTRVJUKGZh
c3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKICAgICBpZiAobV9hdHRyaWJ1dGVNYXAp
IHsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdl
dEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRl
eCBjNDQ3NmQwLi5mMWQ0YjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcApAQCAtNjcsNyArNjcsNyBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNw
YW4oY29uc3QgTm9kZSAqbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3Qg
SFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5vZGUp
OwotICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUoc3BhbkF0dHIpICYmIGVsZW0tPmdldEF0
dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CisgICAgcmV0dXJu
IGVsZW0tPmhhc0xvY2FsTmFtZShzcGFuQXR0cikgJiYgZWxlbS0+Z2V0Q2xhc3NBdHRyaWJ1dGUo
KSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOwogfQogCiBlbnVtIFNob3VsZFN0eWxlQXR0cmli
dXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1dGVT
aG91bGRCZUVtcHR5IH07CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hv
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgdW5zaWduZWQgbWF0Y2hlZEF0dHJpYnV0ZXMg
PSAwOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5
bGVTcGFuQ2xhc3NTdHJpbmcoKSkKKyAgICBpZiAoZWxlbWVudC0+Z2V0Q2xhc3NBdHRyaWJ1dGUo
KSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKQogICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysr
OwogICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUoc3R5bGVBdHRyKSAmJiAoc2hvdWxkU3R5
bGVBdHRyaWJ1dGVCZUVtcHR5ID09IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZQogICAgICAg
ICB8fCAhZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgfHwgZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCktPmlzRW1wdHkoKSkpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0
eUZvbnRUYWcoY29uc3QgTm9kZSAqbm9kZSkKICAgICBOYW1lZE5vZGVNYXAgKm1hcCA9IGVsZW0t
PmF0dHJpYnV0ZXModHJ1ZSk7IC8vIHRydWUgZm9yIHJlYWQtb25seQogICAgIGlmICghbWFwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+
bGVuZ3RoKCkgPT0gMSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpKTsKKyAgICByZXR1cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+bGVu
Z3RoKCkgPT0gMSAmJiBlbGVtLT5nZXRDbGFzc0F0dHJpYnV0ZSgpID09IHN0eWxlU3BhbkNsYXNz
U3RyaW5nKCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVGb250RWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAKaW5kZXggNmUwM2Q3Ny4uMjdhZjQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcApAQCAtNzc3LDcgKzc3Nyw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVt
ZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVu
CiAgICAgaWYgKCFlbGVtZW50SXNTcGFuT3JFbGVtZW50RXF1aXZhbGVudCAmJiAhbWF0Y2hlZEF0
dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZWxlbWVudCBpcyBub3QgYSBzcGFu
LCBhIGh0bWwgZWxlbWVudCBlcXVpdmFsZW50LCBvciBmb250IGVsZW1lbnQuCiAgICAgCi0gICAg
aWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmNsYXNzQXR0cikgPT0gQXBwbGVT
dHlsZVNwYW5DbGFzcykKKyAgICBpZiAoZWxlbWVudC0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBB
cHBsZVN0eWxlU3BhbkNsYXNzKQogICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogCiAgICAg
aWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cikpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5k
ZXggNzY5N2VhZC4uMWUwNjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTk5LDE0ICs5OSwxNCBAQCBzdGF0aWMgYm9v
bCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgTm9kZSAqbm9kZSkKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmcsIChB
cHBsZUludGVyY2hhbmdlTmV3bGluZSkpOwogICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1Rh
Z05hbWUoYnJUYWcpICYmIAotICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50ICo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBpbnRlcmNoYW5nZU5ld2xpbmVDbGFz
c1N0cmluZzsKKyAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCAqPihub2RlKS0+
Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBpbnRlcmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKIH0K
IAogc3RhdGljIGJvb2wgaXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2Rl
ICpub2RlKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjb252ZXJ0ZWRTcGFj
ZVNwYW5DbGFzc1N0cmluZywgKEFwcGxlQ29udmVydGVkU3BhY2UpKTsKICAgICByZXR1cm4gbm9k
ZS0+aXNIVE1MRWxlbWVudCgpICYmIAotICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gY29udmVydGVkU3Bh
Y2VTcGFuQ2xhc3NTdHJpbmc7CisgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVt
ZW50ICo+KG5vZGUpLT5nZXRDbGFzc0F0dHJpYnV0ZSgpID09IGNvbnZlcnRlZFNwYWNlU3BhbkNs
YXNzU3RyaW5nOwogfQogCiBzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9pZGluZ1ByZWNlZGlu
Z05vZGVzKFBvc2l0aW9uIHBvcykKQEAgLTQwOCw3ICs0MDgsNyBAQCBib29sIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpzaG91bGRNZXJnZUVuZChib29sIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFy
YWdyYXBoKQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25zdCBO
b2RlKiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYmxvY2tx
dW90ZVRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBwbGVQYXN0ZUFzUXVv
dGF0aW9uOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRh
ZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQq
Pihub2RlKS0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247CiB9
CiAKIC8vIFdyYXAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oKSBzbyB3ZSBjYW4gdXBkYXRlIHRoZSBub2RlcyB3ZSB0cmFjawpAQCAtNzk1LDcgKzc5
NSw3IEBAIHN0YXRpYyBib29sIGlzSW5saW5lTm9kZVdpdGhTdHlsZShjb25zdCBOb2RlKiBub2Rl
KQogICAgIC8vIFdlIGNhbiBza2lwIG92ZXIgZWxlbWVudHMgd2hvc2UgY2xhc3MgYXR0cmlidXRl
IGlzCiAgICAgLy8gb25lIG9mIG91ciBpbnRlcm5hbCBjbGFzc2VzLgogICAgIGNvbnN0IEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsK
LSAgICBBdG9taWNTdHJpbmcgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShjbGFzc0F0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NBdHRyaWJ1dGVW
YWx1ZSA9IGVsZW1lbnQtPmdldENsYXNzQXR0cmlidXRlKCk7CiAgICAgaWYgKGNsYXNzQXR0cmli
dXRlVmFsdWUgPT0gQXBwbGVUYWJTcGFuQ2xhc3MKICAgICAgICAgfHwgY2xhc3NBdHRyaWJ1dGVW
YWx1ZSA9PSBBcHBsZUNvbnZlcnRlZFNwYWNlCiAgICAgICAgIHx8IGNsYXNzQXR0cmlidXRlVmFs
dWUgPT0gQXBwbGVQYXN0ZUFzUXVvdGF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAppbmRleCA4MzFkZTgwLi42OTI3NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcApAQCAtODQ0LDcgKzg0NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGNyZWF0ZUhUTUxFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5n
CiAKIGJvb2wgaXNUYWJTcGFuTm9kZShjb25zdCBOb2RlICpub2RlKQogewotICAgIHJldHVybiBu
b2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoc3BhblRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFz
c0F0dHIpID09IEFwcGxlVGFiU3BhbkNsYXNzOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhh
c1RhZ05hbWUoc3BhblRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmdldENsYXNzQXR0cmlidXRlKCkgPT0gQXBwbGVUYWJT
cGFuQ2xhc3M7CiB9CiAKIGJvb2wgaXNUYWJTcGFuVGV4dE5vZGUoY29uc3QgTm9kZSAqbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcAppbmRleCA1Nzg2MDFiLi5lNmQzZmQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9DbGFzc0xpc3QuY3BwCkBAIC0zOSw3ICszOSw3IEBAIENsYXNzTGlzdDo6Q2xhc3NM
aXN0KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBp
ZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKLSAgICAgICAgbV9jbGFz
c05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNz
QXR0ciksIGZhbHNlKTsKKyAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9l
bGVtZW50LT5nZXRDbGFzc0F0dHJpYnV0ZSgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgQ2xhc3NMaXN0
OjpyZWYoKQpAQCAtODUsNyArODUsNyBAQCB2b2lkIENsYXNzTGlzdDo6YWRkKGNvbnN0IEF0b21p
Y1N0cmluZyYgdG9rZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIENsYXNzTGlzdDo6YWRk
SW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiB0b2tlbikKIHsKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG9sZENsYXNzTmFtZShtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRDbGFzc05hbWUobV9lbGVtZW50LT5nZXRD
bGFzc0F0dHJpYnV0ZSgpKTsKICAgICBpZiAob2xkQ2xhc3NOYW1lLmlzRW1wdHkoKSkKICAgICAg
ICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCB0b2tlbik7CiAgICAgZWxzZSBp
ZiAoIWNvbnRhaW5zSW50ZXJuYWwodG9rZW4pKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBD
bGFzc0xpc3Q6OnJlbW92ZUludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgdG9rZW4pCiAgICAg
Ly8gb2YgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciB0ZXN0aW5nLgogICAgIGlmICghY29udGFpbnNJ
bnRlcm5hbCh0b2tlbikpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0NsYXNzTmFtZShyZW1vdmVUb2tlbihtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyKSwgdG9rZW4pKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0NsYXNzTmFtZShy
ZW1vdmVUb2tlbihtX2VsZW1lbnQtPmdldENsYXNzQXR0cmlidXRlKCksIHRva2VuKSk7CiAgICAg
bV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCBuZXdDbGFzc05hbWUpOwogfQogCkBA
IC0xMjYsNyArMTI2LDcgQEAgYm9vbCBDbGFzc0xpc3Q6OnRvZ2dsZShjb25zdCBBdG9taWNTdHJp
bmcmIHRva2VuLCBFeGNlcHRpb25Db2RlJiBlYykKIAogU3RyaW5nIENsYXNzTGlzdDo6dG9TdHJp
bmcoKSBjb25zdAogewotICAgIHJldHVybiBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LT5nZXRDbGFzc0F0dHJpYnV0ZSgpOwogfQog
CiB2b2lkIENsYXNzTGlzdDo6cmVzZXQoY29uc3QgU3RyaW5nJiBuZXdDbGFzc05hbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggNWIyOWJi
NS4uODMzYzI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVk
QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY29uc3QgSFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxl
bWVudCo+KG5vZGUpOwotICAgIGlmIChlbGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSAi
QXBwbGUtc3R5bGUtc3BhbiIpCisgICAgaWYgKGVsZW0tPmdldENsYXNzQXR0cmlidXRlKCkgIT0g
IkFwcGxlLXN0eWxlLXNwYW4iKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW5v
ZGUtPmhhc0NoaWxkTm9kZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bHRHbHlwaEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVu
dC5jcHAKaW5kZXggYTZjZTQ5YS4uMWJhYmE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fs
dEdseXBoRWxlbWVudC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgUmVuZGVyT2JqZWN0KiBTVkdBbHRH
bHlwaEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUKIGJvb2wgU1ZHQWx0R2x5cGhFbGVtZW50OjpoYXNWYWxpZEdseXBoRWxlbWVudHMoVmVjdG9y
PFN0cmluZz4mIGdseXBoTmFtZXMpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHRhcmdldDsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoZmFzdEdldEF0dHJp
YnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciksIGRvY3VtZW50KCksICZ0YXJnZXQpOworICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhnZXRBdHRyaWJ1dGUo
WExpbmtOYW1lczo6aHJlZkF0dHIpLCBkb2N1bWVudCgpLCAmdGFyZ2V0KTsKICAgICBpZiAoIWVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKaW5kZXggZDFhZjljZC4uYmM2OThjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0xMTgs
NyArMTE4LDcgQEAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OlJvdGF0ZU1vZGUgU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OnJvdGF0ZU1vZGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBhdXRvVmFsLCAoImF1dG8iKSk7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGF1dG9SZXZlcnNlLCAoImF1dG8tcmV2
ZXJzZSIpKTsKLSAgICBTdHJpbmcgcm90YXRlID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6
cm90YXRlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3RhdGUgPSBnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpOwogICAgIGlmIChyb3RhdGUgPT0gYXV0b1ZhbCkKICAg
ICAgICAgcmV0dXJuIFJvdGF0ZUF1dG87CiAgICAgaWYgKHJvdGF0ZSA9PSBhdXRvUmV2ZXJzZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAppbmRleCA0MTU0ZmFk
Li4xNmM3NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
CkBAIC0yNTMsNyArMjUzLDcgQEAgQW5pbWF0aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50Ojph
bmltYXRpb25Nb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFRvQW5pbWF0aW9uOwogICAgIGlm
ICghYW5pbWF0aW9uUGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFBhdGhBbmltYXRp
b247Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQorICAg
IGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQogICAgICAgICByZXR1cm4g
VmFsdWVzQW5pbWF0aW9uOwogICAgIGlmICghdG9WYWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IFRvQW5pbWF0aW9uIDogRnJvbVRvQW5pbWF0
aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcAppbmRl
eCBhYzNiOTg4Li5iMmQ3YmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEZhY2VVcmlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VV
cmlFbGVtZW50LmNwcApAQCAtNTUsNyArNTUsNyBAQCBTVkdGb250RmFjZVVyaUVsZW1lbnQ6On5T
VkdGb250RmFjZVVyaUVsZW1lbnQoKQogCiBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+
IFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogewotICAgIFJlZlB0cjxD
U1NGb250RmFjZVNyY1ZhbHVlPiBzcmMgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGUoZmFz
dEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cikpOworICAgIFJlZlB0cjxDU1NGb250
RmFjZVNyY1ZhbHVlPiBzcmMgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGUoZ2V0QXR0cmli
dXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSk7CiAgICAgQXRvbWljU3RyaW5nIHZhbHVlKGZhc3RH
ZXRBdHRyaWJ1dGUoZm9ybWF0QXR0cikpOwogICAgIHNyYy0+c2V0Rm9ybWF0KHZhbHVlLmlzRW1w
dHkoKSA/ICJzdmciIDogdmFsdWUpOyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJldHVybiBzcmMu
cmVsZWFzZSgpOwpAQCAtOTMsOCArOTMsOCBAQCB2b2lkIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6
bG9hZEZvbnQoKQogICAgIGlmIChtX2NhY2hlZEZvbnQpCiAgICAgICAgIG1fY2FjaGVkRm9udC0+
cmVtb3ZlQ2xpZW50KHRoaXMpOwogCi0gICAgU3RyaW5nIGhyZWYgPSBmYXN0R2V0QXR0cmlidXRl
KFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLSAgICBpZiAoIWhyZWYuaXNOdWxsKCkpIHsgICAgICAg
IAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVz
OjpocmVmQXR0cik7CisgICAgaWYgKCFocmVmLmlzTnVsbCgpKSB7CiAgICAgICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCktPmNhY2hlZFJl
c291cmNlTG9hZGVyKCk7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGhyZWYpKTsKICAgICAgICAgbV9jYWNoZWRGb250ID0gY2FjaGVkUmVz
b3VyY2VMb2FkZXItPnJlcXVlc3RGb250KHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R2x5cGhSZWZFbGVtZW50LmNwcAppbmRleCBjZWMxMWFlLi4xYzNkNDk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcApAQCAtNTgsNyArNTgsNyBAQCBib29sIFNW
R0dseXBoUmVmRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnQoU3RyaW5nJiBnbHlwaE5hbWUp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdlIG9ubHkgc3VwcG9ydCB4bGluazpocmVmIHNvIGZh
ci4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ3ODcK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoZmFzdEdl
dEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciksIGRvY3VtZW50KCksICZnbHlwaE5hbWUp
OworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhnZXRB
dHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpLCBkb2N1bWVudCgpLCAmZ2x5cGhOYW1lKTsK
ICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdseXBo
VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAppbmRleCA1YjhkMzZmLi41MDk1OGNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcApAQCAtNTQsNyArNTQsNyBAQCBQYXNzUmVm
UHRyPFNWR1N0eWxlRWxlbWVudD4gU1ZHU3R5bGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZQogY29uc3QgQXRvbWljU3RyaW5nJiBTVkdTdHlsZUVsZW1lbnQ6OnR5
cGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5n
LCBkZWZhdWx0VmFsdWUsICgidGV4dC9jc3MiKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
ID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dHlwZUF0dHIpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbiA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6dHlwZUF0dHIpOwogICAgIHJldHVy
biBuLmlzTnVsbCgpID8gZGVmYXVsdFZhbHVlIDogbjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCBmMDJjOWI3Li5hZjM3ZTMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cApAQCAtNTQwLDcgKzU0MCw3IEBAIFNWR1NNSUxFbGVtZW50OjpGaWxsTW9kZSBTVkdTTUlMRWxl
bWVudDo6ZmlsbCgpIGNvbnN0CiAgICAgCiBTdHJpbmcgU1ZHU01JTEVsZW1lbnQ6OnhsaW5rSHJl
ZigpIGNvbnN0CiB7ICAgIAotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6
OmhyZWZBdHRyKTsKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KTsKIH0KICAgICAKIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50OjpkdXIoKSBjb25zdAo=
</data>
<flag name="review"
          id="102756"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106406</attachid>
            <date>2011-09-06 04:50:32 -0700</date>
            <delta_ts>2011-09-08 04:13:00 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-67612-v2.diff</filename>
            <type>text/plain</type>
            <size>27936</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYzkxMWNiLi45MDY2MDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTEtMDktMDYgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFByb3RlY3QgYWdhaW5zdCBpbmNvcnJlY3QgRWxlbWVudDo6ZmFzdCpBdHRyaWJ1dGUoKSB1
c2FnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGRlYnVnLW9ubHkgY2hlY2tzIGluIEVsZW1lbnQncyBmYXN0SGFzQXR0cmlidXRlKCkgYW5kIGZh
c3RHZXRBdHRyaWJ1dGUoKSB0byB2ZXJpZnkKKyAgICAgICAgdGhhdCB3ZSBhcmVuJ3QgbG9va2lu
ZyB1cCB0aGUgInN0eWxlIiBhdHRyaWJ1dGUgb3IgYW55IG9mIHRoZSBTVkcgYW5pbWF0YWJsZSBh
dHRyaWJ1dGVzLgorCisgICAgICAgIEJlY2F1c2UgdGhlICJjbGFzcyIgYXR0cmlidXRlIGlzIFNW
RyBhbmltYXRhYmxlLCBpdCBzaG91bGQgbm90IGJlIGluZGlzY3JpbWluYXRlbHkKKyAgICAgICAg
cmV0cmlldmVkIHVzaW5nIGZhc3QqQXR0cmlidXRlKCkuIEEgbmV3IGZ1bmN0aW9uLCBFbGVtZW50
OjpnZXRDbGFzc0F0dHJpYnV0ZSgpLAorICAgICAgICB3YXMgYWRkZWQgdG8gbWFrZSBzdXJlIHdl
IGFsd2F5cyBkbyB0aGUgcmlnaHQgdGhpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBlcnJv
bmVvdXMgYmVoYXZpb3IgaXMgY292ZXJlZCBieSBhc3NlcnRpb25zLgorCisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0ZSk6
IEZpeCAieGxpbms6aHJlZiIgbG9va3VwLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogRml4ICJ0eXBlIiBhbmQgImNsYXNzIiBs
b29rdXAuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6Z2V0QXR0cmlidXRlKTogTWFudWFsbHkgaW5saW5lIGZhc3RHZXRBdHRyaWJ1dGUoKSBp
biBpZGVhbCBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdn
ZXIpOiBGaXggImNsYXNzIiBsb29rdXAuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0
QXR0cmlidXRlTG9va3VwQWxsb3dlZCk6IENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHVz
ZWQKKyAgICAgICAgd2l0aCB0aGUgZmFzdCBsb29rdXAgZnVuY3Rpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6Z2V0Q2xhc3NBdHRyaWJ1dGUpOiBTYWZlbHkgcmV0dXJucyB0aGUgImNs
YXNzIiBhdHRyaWJ1dGUuCisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUpOiBBZGQgZmFzdEF0dHJpYnV0ZUxvb2t1cEFs
bG93ZWQoKSBhc3NlcnRpb24uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0R2V0QXR0
cmlidXRlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKTogRml4ICJjbGFzcyIg
bG9va3VwLgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJp
YnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eUZvbnRUYWcpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KTogRGl0dG8u
CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppc0ludGVyY2hhbmdlTmV3bGluZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OmlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjppc0lubGluZU5vZGVXaXRoU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVGFiU3Bhbk5vZGUpOiBEaXR0
by4KKyAgICAgICAgKiBodG1sL0NsYXNzTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFz
c0xpc3Q6OkNsYXNzTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NMaXN0Ojph
ZGRJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NMaXN0OjpyZW1vdmVJ
bnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NMaXN0Ojp0b1N0cmluZyk6
IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOiBEaXR0by4KKyAg
ICAgICAgKiBzdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FsdEdseXBoRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnRzKTogRml4ICJ4bGluazpocmVm
IiBsb29rdXAuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpyb3RhdGVNb2RlKTogRml4
ICJyb3RhdGUiIGxvb2t1cC4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKTog
Rml4ICJ2YWx1ZXMiIGxvb2t1cC4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojppc0FuaW1hdGFibGVBdHRyaWJ1dGUpOiBBZGRlZCwg
cmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4KKyAgICAgICAgYXR0cmlidXRlIG5hbWUgaXMgYW5pbWF0
YWJsZSBieSBTVkcuCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNl
VXJpRWxlbWVudDo6c3JjVmFsdWUpOiBGaXggInhsaW5rOmhyZWYiIGxvb2t1cC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6bG9hZEZvbnQpOiBEaXR0by4KKyAgICAg
ICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ds
eXBoUmVmRWxlbWVudDo6aGFzVmFsaWRHbHlwaEVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKiBz
dmcvU1ZHU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVu
dDo6dHlwZSk6IEZpeCAidHlwZSIgbG9va3VwLgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnhsaW5r
SHJlZik6IEZpeCAieGxpbms6aHJlZiIgbG9va3VwLgorCiAyMDExLTA5LTA1ICBQYXZlbCBQb2Rp
dmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlLWltcGxlbWVudCBSYXdTb3VyY2VDb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCmluZGV4IGNhZWNhMTcuLjRlNWY5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKQEAgLTgxMSw3ICs4MTEsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0
IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2RlKQogCiAjaWYgRU5BQkxFKFNW
RykKICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAmZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisgICAgICAgIHJl
dHVybiAmZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKICNlbmRp
ZgogCiAgICAgcmV0dXJuIDA7CkBAIC0xMDM1LDcgKzEwMzUsNyBAQCBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQt
PmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cikpCisgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0g
bV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAh
PSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9kZSkgY29uc3QKICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKSwgImF1
dG8iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZGly
QXR0ciksICJhdXRvIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50
LT5oYXNDbGFzcygpICYmIG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9
IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICBpZiAoZWxlbWVudC0+
aGFzQ2xhc3MoKSAmJiBtX2VsZW1lbnQtPmdldENsYXNzQXR0cmlidXRlKCkgIT0gZWxlbWVudC0+
Z2V0Q2xhc3NBdHRyaWJ1dGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGVs
ZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSAmJiAhZWxlbWVudC0+YXR0cmlidXRlTWFwKCkt
Pm1hcHBlZE1hcHNFcXVpdmFsZW50KG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlTWFwKCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGNkODJkMDYuLjU5YTU1MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTIyNCw3ICsyMjQsMTEgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50
OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKICAgICAgICAg
dXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUobmFtZSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBm
YXN0R2V0QXR0cmlidXRlKG5hbWUpOworICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgeworICAgICAg
ICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRl
SXRlbShuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CisgICAg
fQorICAgIHJldHVybiBudWxsQXRvbTsKIH0KIAogdm9pZCBFbGVtZW50OjpzY3JvbGxJbnRvVmll
dyhib29sIGFsaWduVG9Ub3ApIApAQCAtMTQzMCw4ICsxNDM0LDggQEAgdm9pZCBFbGVtZW50Ojpm
b3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKICAg
ICAgICAgcmVzdWx0ICs9ICJpZD0iOwogICAgICAgICByZXN1bHQgKz0gczsKICAgICB9Ci0gICAg
ICAgICAgCi0gICAgcyA9IGdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOworCisgICAgcyA9IGdldENs
YXNzQXR0cmlidXRlKCk7CiAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgIGlmIChy
ZXN1bHQubGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICI7ICI7CkBAIC0xOTk3
LDQgKzIwMDEsMjggQEAgUGFzc1JlZlB0cjxXZWJLaXRBbmltYXRpb25MaXN0PiBFbGVtZW50Ojp3
ZWJraXRHZXRBbmltYXRpb25zKCkgY29uc3QKICAgICByZXR1cm4gYW5pbUNvbnRyb2xsZXItPmFu
aW1hdGlvbnNGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK2Jv
b2wgRWxlbWVudDo6ZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlQXR0cikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoaXNTVkdF
bGVtZW50KCkpCisgICAgICAgIHJldHVybiAhU1ZHRWxlbWVudDo6aXNBbmltYXRhYmxlQXR0cmli
dXRlKG5hbWUpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitjb25z
dCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldENsYXNzQXR0cmlidXRlKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgIGlmIChpc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpOworI2VuZGlmCisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1
dGUoY2xhc3NBdHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKaW5kZXggYTg0NjFlYS4uYjhkMTlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0xMjMsNiAr
MTIzLDE0IEBAIHB1YmxpYzoKICAgICAvLyBhdHRyaWJ1dGUgb3Igb25lIG9mIHRoZSBTVkcgYW5p
bWF0YWJsZSBhdHRyaWJ1dGVzLgogICAgIGJvb2wgZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJikgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYXN0R2V0QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9v
bCBmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisjZW5kaWYKKworICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSAiY2xh
c3MiIGF0dHJpYnV0ZS4gVGhpcyBpcyBzZXBhcmF0ZWQgYmVjYXVzZQorICAgIC8vIHRoZSBhdHRy
aWJ1dGUgaXMgYW5pbWF0YWJsZSBpbiBTVkcsIGFuZCB0aHVzIHNob3VsZG4ndCBiZSByZXRyaWV2
ZWQgd2l0aCB0aGUKKyAgICAvLyBmYXN0KkF0dHJpYnV0ZSgpIGZ1bmN0aW9ucy4KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGdldENsYXNzQXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICBib29sIGhh
c0F0dHJpYnV0ZXMoKSBjb25zdDsKIApAQCAtNTAzLDExICs1MTEsMTMgQEAgaW5saW5lIHZvaWQg
RWxlbWVudDo6dXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXcKIAogaW5saW5lIGJvb2wgRWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogeworICAgIEFTU0VSVChmYXN0QXR0cmlidXRl
TG9va3VwQWxsb3dlZChuYW1lKSk7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwICYmIG1fYXR0
cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgY29uc3QgQXRv
bWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CiB7CisgICAgQVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5h
bWUpKTsKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAg
ICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBjNDQ3NmQwLi5mMWQ0YjFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtNjcsNyArNjcs
NyBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtLT5oYXNMb2Nh
bE5hbWUoc3BhbkF0dHIpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxl
U3BhbkNsYXNzU3RyaW5nKCk7CisgICAgcmV0dXJuIGVsZW0tPmhhc0xvY2FsTmFtZShzcGFuQXR0
cikgJiYgZWxlbS0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygp
OwogfQogCiBlbnVtIFNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlT
dHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5IH07CkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29u
c3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgdW5zaWduZWQgbWF0Y2hlZEF0dHJpYnV0ZXMgPSAwOwotICAgIGlmIChlbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSkKKyAgICBp
ZiAoZWxlbWVudC0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygp
KQogICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogICAgIGlmIChlbGVtZW50LT5oYXNBdHRy
aWJ1dGUoc3R5bGVBdHRyKSAmJiAoc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5ID09IEFsbG93
Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZQogICAgICAgICB8fCAhZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCkgfHwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCktPmlzRW1wdHkoKSkpCkBAIC0xMTIs
NyArMTEyLDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgTm9kZSAqbm9kZSkK
ICAgICBOYW1lZE5vZGVNYXAgKm1hcCA9IGVsZW0tPmF0dHJpYnV0ZXModHJ1ZSk7IC8vIHRydWUg
Zm9yIHJlYWQtb25seQogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+bGVuZ3RoKCkgPT0gMSAmJiBlbGVtLT5nZXRB
dHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKTsKKyAgICByZXR1
cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+bGVuZ3RoKCkgPT0gMSAmJiBlbGVtLT5nZXRDbGFz
c0F0dHJpYnV0ZSgpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwogfQogCiBzdGF0aWMgUGFz
c1JlZlB0cjxFbGVtZW50PiBjcmVhdGVGb250RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggNmUwM2Q3Ny4uMjdhZjQw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtNzc3LDcgKzc3
Nyw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZh
bGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVuCiAgICAgaWYgKCFlbGVtZW50SXNTcGFuT3JF
bGVtZW50RXF1aXZhbGVudCAmJiAhbWF0Y2hlZEF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gZWxlbWVudCBpcyBub3QgYSBzcGFuLCBhIGh0bWwgZWxlbWVudCBlcXVpdmFsZW50
LCBvciBmb250IGVsZW1lbnQuCiAgICAgCi0gICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmNsYXNzQXR0cikgPT0gQXBwbGVTdHlsZVNwYW5DbGFzcykKKyAgICBpZiAoZWxl
bWVudC0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBBcHBsZVN0eWxlU3BhbkNsYXNzKQogICAgICAg
ICBtYXRjaGVkQXR0cmlidXRlcysrOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShI
VE1MTmFtZXM6OnN0eWxlQXR0cikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNzY5N2VhZC4uMWUwNjAyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
QEAgLTk5LDE0ICs5OSwxNCBAQCBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUo
Y29uc3QgTm9kZSAqbm9kZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW50
ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmcsIChBcHBsZUludGVyY2hhbmdlTmV3bGluZSkpOwog
ICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpICYmIAotICAgICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSA9PSBpbnRlcmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKKyAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgRWxlbWVudCAqPihub2RlKS0+Z2V0Q2xhc3NBdHRyaWJ1dGUoKSA9PSBpbnRl
cmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKIH0KIAogc3RhdGljIGJvb2wgaXNJbnRlcmNoYW5n
ZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlICpub2RlKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0cmluZywgKEFwcGxlQ29u
dmVydGVkU3BhY2UpKTsKICAgICByZXR1cm4gbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIAotICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCAqPihub2RlKS0+Z2V0QXR0cmli
dXRlKGNsYXNzQXR0cikgPT0gY29udmVydGVkU3BhY2VTcGFuQ2xhc3NTdHJpbmc7CisgICAgICAg
ICAgIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50ICo+KG5vZGUpLT5nZXRDbGFzc0F0dHJp
YnV0ZSgpID09IGNvbnZlcnRlZFNwYWNlU3BhbkNsYXNzU3RyaW5nOwogfQogCiBzdGF0aWMgUG9z
aXRpb24gcG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvcykKQEAgLTQw
OCw3ICs0MDgsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRNZXJnZUVu
ZChib29sIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoKQogCiBzdGF0aWMgYm9vbCBpc01h
aWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBu
b2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykgJiYgbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRl
KGNsYXNzQXR0cikgPT0gQXBwbGVQYXN0ZUFzUXVvdGF0aW9uOworICAgIHJldHVybiBub2RlICYm
IG5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+Z2V0Q2xhc3NBdHRyaWJ1dGUo
KSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247CiB9CiAKIC8vIFdyYXAgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKSBzbyB3ZSBjYW4gdXBkYXRlIHRo
ZSBub2RlcyB3ZSB0cmFjawpAQCAtNzk1LDcgKzc5NSw3IEBAIHN0YXRpYyBib29sIGlzSW5saW5l
Tm9kZVdpdGhTdHlsZShjb25zdCBOb2RlKiBub2RlKQogICAgIC8vIFdlIGNhbiBza2lwIG92ZXIg
ZWxlbWVudHMgd2hvc2UgY2xhc3MgYXR0cmlidXRlIGlzCiAgICAgLy8gb25lIG9mIG91ciBpbnRl
cm5hbCBjbGFzc2VzLgogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICBBdG9taWNTdHJpbmcgY2xhc3NBdHRy
aWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmdldENsYXNzQXR0
cmlidXRlKCk7CiAgICAgaWYgKGNsYXNzQXR0cmlidXRlVmFsdWUgPT0gQXBwbGVUYWJTcGFuQ2xh
c3MKICAgICAgICAgfHwgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9PSBBcHBsZUNvbnZlcnRlZFNwYWNl
CiAgICAgICAgIHx8IGNsYXNzQXR0cmlidXRlVmFsdWUgPT0gQXBwbGVQYXN0ZUFzUXVvdGF0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA4MzFkZTgwLi42OTI3
NGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtODQ0LDcgKzg0
NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nCiAKIGJvb2wgaXNUYWJTcGFuTm9kZShjb25z
dCBOb2RlICpub2RlKQogewotICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoc3Bh
blRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1l
bnQgKj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IEFwcGxlVGFiU3BhbkNsYXNz
OworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoc3BhblRhZykgJiYgbm9kZS0+
aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmdl
dENsYXNzQXR0cmlidXRlKCkgPT0gQXBwbGVUYWJTcGFuQ2xhc3M7CiB9CiAKIGJvb2wgaXNUYWJT
cGFuVGV4dE5vZGUoY29uc3QgTm9kZSAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2xhc3NMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcApp
bmRleCA1Nzg2MDFiLi5lNmQzZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Ns
YXNzTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCkBAIC0z
OSw3ICszOSw3IEBAIENsYXNzTGlzdDo6Q2xhc3NMaXN0KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
OiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5p
blF1aXJrc01vZGUoKSkKLSAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0ciksIGZhbHNlKTsKKyAgICAgICAgbV9j
bGFzc05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9lbGVtZW50LT5nZXRDbGFzc0F0dHJpYnV0ZSgp
LCBmYWxzZSk7CiB9CiAKIHZvaWQgQ2xhc3NMaXN0OjpyZWYoKQpAQCAtODUsNyArODUsNyBAQCB2
b2lkIENsYXNzTGlzdDo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYgdG9rZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogCiB2b2lkIENsYXNzTGlzdDo6YWRkSW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5n
JiB0b2tlbikKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG9sZENsYXNzTmFtZShtX2VsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBvbGRDbGFzc05hbWUobV9lbGVtZW50LT5nZXRDbGFzc0F0dHJpYnV0ZSgpKTsKICAgICBpZiAo
b2xkQ2xhc3NOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUo
Y2xhc3NBdHRyLCB0b2tlbik7CiAgICAgZWxzZSBpZiAoIWNvbnRhaW5zSW50ZXJuYWwodG9rZW4p
KSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBDbGFzc0xpc3Q6OnJlbW92ZUludGVybmFsKGNv
bnN0IEF0b21pY1N0cmluZyYgdG9rZW4pCiAgICAgLy8gb2YgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rl
ciB0ZXN0aW5nLgogICAgIGlmICghY29udGFpbnNJbnRlcm5hbCh0b2tlbikpCiAgICAgICAgIHJl
dHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0NsYXNzTmFtZShyZW1vdmVUb2tlbiht
X2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSwgdG9rZW4pKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5ld0NsYXNzTmFtZShyZW1vdmVUb2tlbihtX2VsZW1lbnQtPmdldENs
YXNzQXR0cmlidXRlKCksIHRva2VuKSk7CiAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyLCBuZXdDbGFzc05hbWUpOwogfQogCkBAIC0xMjYsNyArMTI2LDcgQEAgYm9vbCBDbGFz
c0xpc3Q6OnRvZ2dsZShjb25zdCBBdG9taWNTdHJpbmcmIHRva2VuLCBFeGNlcHRpb25Db2RlJiBl
YykKIAogU3RyaW5nIENsYXNzTGlzdDo6dG9TdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBt
X2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsKKyAgICByZXR1cm4gbV9lbGVt
ZW50LT5nZXRDbGFzc0F0dHJpYnV0ZSgpOwogfQogCiB2b2lkIENsYXNzTGlzdDo6cmVzZXQoY29u
c3QgU3RyaW5nJiBuZXdDbGFzc05hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggNWIyOWJiNS4uODMzYzI4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTg1LDcgKzE4NSw3IEBA
IHN0YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSog
bm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTEVsZW1lbnQqIGVs
ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5vZGUpOwotICAgIGlmIChlbGVt
LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSAiQXBwbGUtc3R5bGUtc3BhbiIpCisgICAgaWYg
KGVsZW0tPmdldENsYXNzQXR0cmlidXRlKCkgIT0gIkFwcGxlLXN0eWxlLXNwYW4iKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKaW5kZXggYTZjZTQ5YS4uMWJhYmE4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKQEAgLTkwLDcg
KzkwLDcgQEAgUmVuZGVyT2JqZWN0KiBTVkdBbHRHbHlwaEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUKIGJvb2wgU1ZHQWx0R2x5cGhFbGVtZW50
OjpoYXNWYWxpZEdseXBoRWxlbWVudHMoVmVjdG9yPFN0cmluZz4mIGdseXBoTmFtZXMpIGNvbnN0
CiB7CiAgICAgU3RyaW5nIHRhcmdldDsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0RWxl
bWVudEZyb21JUklTdHJpbmcoZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciks
IGRvY3VtZW50KCksICZ0YXJnZXQpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXRFbGVt
ZW50RnJvbUlSSVN0cmluZyhnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpLCBkb2N1
bWVudCgpLCAmdGFyZ2V0KTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAK
aW5kZXggZDFhZjljZC4uYmM2OThjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OlJvdGF0ZU1vZGUgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnJvdGF0ZU1vZGUo
KSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBh
dXRvVmFsLCAoImF1dG8iKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGF1dG9SZXZlcnNlLCAoImF1dG8tcmV2ZXJzZSIpKTsKLSAgICBTdHJpbmcgcm90YXRl
ID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6cm90YXRlQXR0cik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiByb3RhdGUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpOwog
ICAgIGlmIChyb3RhdGUgPT0gYXV0b1ZhbCkKICAgICAgICAgcmV0dXJuIFJvdGF0ZUF1dG87CiAg
ICAgaWYgKHJvdGF0ZSA9PSBhdXRvUmV2ZXJzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAppbmRleCA0MTU0ZmFkLi4xNmM3NjQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCkBAIC0yNTMsNyArMjUzLDcgQEAgQW5pbWF0
aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIFRvQW5pbWF0aW9uOwogICAgIGlmICghYW5pbWF0aW9uUGF0aCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFBhdGhBbmltYXRpb247Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQorICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnZhbHVlc0F0dHIpKQogICAgICAgICByZXR1cm4gVmFsdWVzQW5pbWF0aW9uOwogICAgIGlmICgh
dG9WYWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSgpLmlzRW1wdHko
KSA/IFRvQW5pbWF0aW9uIDogRnJvbVRvQW5pbWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCmluZGV4IGQ4OTEyYmQuLjdhOWI4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
QEAgLTQzNCw2ICs0MzQsMTExIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFNWR0VsZW1lbnQ6
OnN0eWxlRm9yUmVuZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmCiAgICAgcmV0dXJu
IFN0eWxlZEVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVyZXIoY29udGV4dCk7CiB9CiAKKyNpZm5kZWYg
TkRFQlVHCitib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFs
aWZpZWROYW1lPiwgYW5pbWF0YWJsZUF0dHJpYnV0ZXMsICgpKTsKKworICAgIGlmIChhbmltYXRh
YmxlQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMu
YWRkKEhUTUxOYW1lczo6Y2xhc3NBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMu
YWRkKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjphemltdXRoQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpOworICAgICAgICBhbmltYXRhYmxl
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmJpYXNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cik7CisgICAgICAgIGFuaW1h
dGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y3hBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0
cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpOworICAgICAgICBhbmlt
YXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKTsKKyAgICAgICAgYW5p
bWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkeEF0dHIpOworICAgICAgICBhbmltYXRh
YmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplbGV2YXRpb25BdHRyKTsKKyAgICAgICAgYW5pbWF0
YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpleHBvbmVudEF0dHIpOworICAgICAgICBhbmlt
YXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRB
dHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpmaWx0ZXJS
ZXNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpmaWx0
ZXJVbml0c0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OmZ4QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZnlB
dHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpncmFkaWVu
dFRyYW5zZm9ybUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OmdyYWRpZW50VW5pdHNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjppbkF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OmludGVyY2VwdEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OmsxQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6azJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpr
M0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Oms0QXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2VybmVsTWF0
cml4QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6a2Vy
bmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cik7CisgICAgICAgIGFuaW1h
dGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyKTsKKyAgICAgICAg
YW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIpOworICAg
ICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hc2tDb250ZW50VW5pdHNB
dHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXNrVW5p
dHNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptZXRo
b2RBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptb2Rl
QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bnVtT2N0
YXZlc0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9m
ZnNldEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om9w
ZXJhdG9yQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
b3JkZXJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpv
cmllbnRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpw
YXRoTGVuZ3RoQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKTsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKTsKKyAgICAgICAgYW5p
bWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKTsKKyAgICAgICAg
YW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKTsKKyAgICAg
ICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKTsKKyAg
ICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cHJlc2VydmVB
c3BlY3RSYXRpb0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnByaW1pdGl2ZVVuaXRzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6cmFkaXVzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6ckF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnJlZlhBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjpyZWZZQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cmVzdWx0QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cm90YXRlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cnhBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpy
eUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNjYWxl
QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c2VlZEF0
dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNsb3BlQXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3BhY2luZ0F0
dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnNwZWN1bGFy
Q29uc3RhbnRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjpzcGVjdWxhckV4cG9uZW50QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1
dGVzLmFkZChTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKTsKKyAgICAgICAgYW5pbWF0
YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpOworICAgICAgICBh
bmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpOworICAg
ICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cik7
CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0QXR0cik7
CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dGFyZ2V0WEF0dHIp
OworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhcmdldFlBdHRy
KTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0cmFuc2Zvcm1B
dHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp0eXBlQXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dmFsdWVzQXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dmlld0JveEF0
dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OndpZHRoQXR0
cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eDFBdHRyKTsK
KyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4MkF0dHIpOworICAg
ICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRyKTsKKyAgICAgICAg
YW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cik7
CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6eTFBdHRyKTsKKyAg
ICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MkF0dHIpOworICAgICAg
ICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsKKyAgICAgICAgYW5p
bWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cik7Cisg
ICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ekF0dHIpOworICAgIH0K
KyAgICByZXR1cm4gYW5pbWF0YWJsZUF0dHJpYnV0ZXMuY29udGFpbnMobmFtZSk7Cit9CisjZW5k
aWYKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCmlu
ZGV4IDEyOGVjYWIuLjVjMmFmYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApAQCAtMTAxLDYg
KzEwMSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlN
YXAmIGxvY2FsQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpOwogCisjaWZuZGVmIE5ERUJVRworICAg
IHN0YXRpYyBib29sIGlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RmFjZVVyaUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxl
bWVudC5jcHAKaW5kZXggYWMzYjk4OC4uYjJkN2JhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgU1ZHRm9udEZhY2VV
cmlFbGVtZW50Ojp+U1ZHRm9udEZhY2VVcmlFbGVtZW50KCkKIAogUGFzc1JlZlB0cjxDU1NGb250
RmFjZVNyY1ZhbHVlPiBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKCkgY29uc3QKIHsK
LSAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gQ1NTRm9udEZhY2VTcmNWYWx1
ZTo6Y3JlYXRlKGZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpKTsKKyAgICBS
ZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3Jl
YXRlKGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cikpOwogICAgIEF0b21pY1N0cmlu
ZyB2YWx1ZShmYXN0R2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpKTsKICAgICBzcmMtPnNldEZvcm1h
dCh2YWx1ZS5pc0VtcHR5KCkgPyAic3ZnIiA6IHZhbHVlKTsgLy8gRGVmYXVsdCBmb3JtYXQKICAg
ICByZXR1cm4gc3JjLnJlbGVhc2UoKTsKQEAgLTkzLDggKzkzLDggQEAgdm9pZCBTVkdGb250RmFj
ZVVyaUVsZW1lbnQ6OmxvYWRGb250KCkKICAgICBpZiAobV9jYWNoZWRGb250KQogICAgICAgICBt
X2NhY2hlZEZvbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKIAotICAgIFN0cmluZyBocmVmID0gZmFz
dEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAgaWYgKCFocmVmLmlzTnVs
bCgpKSB7ICAgICAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBnZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIGlmICghaHJlZi5pc051bGwoKSkgewogICAg
ICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CiAgICAgICAgIG1fY2FjaGVkRm9u
dCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0Rm9udChyZXF1ZXN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAKaW5kZXggY2VjMTFhZS4uMWMzZDQ5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAKQEAgLTU4LDcgKzU4
LDcgQEAgYm9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbGVtZW50KFN0cmlu
ZyYgZ2x5cGhOYW1lKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBXZSBvbmx5IHN1cHBvcnQgeGxp
bms6aHJlZiBzbyBmYXIuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0Nzg3Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRhcmdldEVsZW1lbnRGcm9tSVJJ
U3RyaW5nKGZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpLCBkb2N1bWVudCgp
LCAmZ2x5cGhOYW1lKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0RWxlbWVudEZyb21J
UklTdHJpbmcoZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSwgZG9jdW1lbnQoKSwg
JmdseXBoTmFtZSk7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpnbHlwaFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKaW5kZXggNWI4ZDM2Zi4uNTA5
NThjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKQEAgLTU0LDcgKzU0
LDcgQEAgUGFzc1JlZlB0cjxTVkdTdHlsZUVsZW1lbnQ+IFNWR1N0eWxlRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHU3R5
bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgZGVmYXVsdFZhbHVlLCAoInRleHQvY3NzIikpOwotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbiA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnR5cGVBdHRyKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnR5cGVBdHRy
KTsKICAgICByZXR1cm4gbi5pc051bGwoKSA/IGRlZmF1bHRWYWx1ZSA6IG47CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggZjAy
YzliNy4uYWYzN2UzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCBTVkdTTUlMRWxlbWVudDo6RmlsbE1v
ZGUgU1ZHU01JTEVsZW1lbnQ6OmZpbGwoKSBjb25zdAogICAgIAogU3RyaW5nIFNWR1NNSUxFbGVt
ZW50Ojp4bGlua0hyZWYoKSBjb25zdAogeyAgICAKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShYTGlua05h
bWVzOjpocmVmQXR0cik7CiB9CiAgICAgCiBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6ZHVyKCkg
Y29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106721</attachid>
            <date>2011-09-08 04:13:00 -0700</date>
            <delta_ts>2011-10-17 16:39:24 -0700</delta_ts>
            <desc>Proposed patch v3</desc>
            <filename>bug-67612-v3.diff</filename>
            <type>text/plain</type>
            <size>22818</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNTA4NTk5Li4yODcxNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTEtMDktMDggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFByb3RlY3QgYWdhaW5zdCBpbmNvcnJlY3QgRWxlbWVudDo6ZmFzdCpBdHRyaWJ1dGUoKSB1
c2FnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NjEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGRlYnVnLW9ubHkgY2hlY2tzIGluIEVsZW1lbnQncyBmYXN0SGFzQXR0cmlidXRlKCkgYW5kIGZh
c3RHZXRBdHRyaWJ1dGUoKSB0byB2ZXJpZnkKKyAgICAgICAgdGhhdCB3ZSBhcmVuJ3QgbG9va2lu
ZyB1cCB0aGUgInN0eWxlIiBhdHRyaWJ1dGUgb3IgYW55IG9mIHRoZSBTVkcgYW5pbWF0YWJsZSBh
dHRyaWJ1dGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXJyb25lb3VzIGJlaGF2aW9yIGlz
IGNvdmVyZWQgYnkgYXNzZXJ0aW9ucy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBFeHBv
cnQgRWxlbWVudDo6ZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQoKSBmb3IgZGVidWcgYnVpbGRz
CisgICAgICAgIHNpbmNlIGl0J3MgdXNlZCBieSB0aGUgaW5saW5lIGZhc3QqQXR0cmlidXRlKCkg
Y2FsbHMuCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogVXNlIGdl
dEF0dHJpYnV0ZSgpIGZvciBjbGFzcy4KKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtBdHRyaWJ1dGUpOiBVc2UgZ2V0QXR0cmlidXRlKCkg
Zm9yIHhsaW5rOmhyZWYuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlKTogTWFudWFsbHkgaW5saW5lIGZhc3RHZXRBdHRy
aWJ1dGUoKSBpbiBpZGVhbCBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFzdEF0
dHJpYnV0ZUxvb2t1cEFsbG93ZWQpOiBDaGVja3MgaWYgYW4gYXR0cmlidXRlIGNhbiBiZSB1c2Vk
CisgICAgICAgIHdpdGggdGhlIGZhc3QgbG9va3VwIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBkb20v
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZSk6
IEFkZCBhc3NlcnRpb24uCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0R2V0QXR0cmli
dXRlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKTogVXNl
IGdldEF0dHJpYnV0ZSgpIGZvciBjbGFzcy4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSW5saW5lTm9kZVdpdGhTdHls
ZSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvQ2xhc3NMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsYXNzTGlzdDo6Q2xhc3NMaXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGFz
c0xpc3Q6OmFkZEludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6
OnJlbW92ZUludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OnRv
U3RyaW5nKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbHRHbHlwaEVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbGVtZW50
cyk6IFVzZSBnZXRBdHRyaWJ1dGUoKSBmb3IgeGxpbms6aHJlZi4KKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OnJvdGF0ZU1vZGUpOiBVc2UgZ2V0QXR0cmlidXRlKCkgZm9yIHJvdGF0ZS4K
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25Nb2RlKTogVXNlIGdldEF0dHJpYnV0ZSgp
IGZvciB2YWx1ZXMuCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxlbWVudDo6aXNBbmltYXRhYmxlQXR0cmlidXRlKTogQWRkZWQsIHJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4KKyAgICAgICAgUXVhbGlmaWVkTmFtZSByZXByZXNlbnRzIGFuIGFu
aW1hdGFibGUgYXR0cmlidXRlLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
b250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKTogVXNlIGdldEF0dHJpYnV0ZSgpIGZvciB4bGlu
azpocmVmLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50Ojpsb2FkRm9u
dCk6IERpdHRvLgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnhsaW5rSHJlZik6IERpdHRvLgorICAg
ICAgICAqIHN2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
R2x5cGhSZWZFbGVtZW50OjpoYXNWYWxpZEdseXBoRWxlbWVudCk6IERpdHRvLgorICAgICAgICAq
IHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVt
ZW50Ojp0eXBlKTogVXNlIGdldEF0dHJpYnV0ZSgpIGZvciB0eXBlLgorCiAyMDExLTA5LTA3ICBB
bmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogdHJ5aW5nIHRvIHNjcm9sbCBtb3VzZSB3aGVlbCB3aGVuIGluIFRleHRWaWV3ZXIncyBn
dXR0ZXIgcGFuZSBjYXVzZXMgRXZlbnRFeGNlcHRpb246OkRJU1BBVENIX1JFUVVFU1RfRVJSCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IDYxOTQ0ZTAuLmI1YzFhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0xNDY3LDYgKzE0NjcsNyBAQCBfX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMzJz
eW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZUV2CiAKICNpZiAhZGVmaW5lZChOREVCVUcp
CiBfX1pON1dlYkNvcmUyMExvZ05vdFlldEltcGxlbWVudGVkRQorX19aTks3V2ViQ29yZTdFbGVt
ZW50MjZmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKICNl
bmRpZgogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCmluZGV4IDE2N2EwMTkuLjAxNzFmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKQEAgLTkyMyw3ICs5MjMsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1Rh
cmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUodHlwZUF0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0
cikpCisgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gbV9lbGVtZW50
LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBtX2VsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtOTU4LDcgKzk1OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0ciksICJhdXRvIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIpLCAiYXV0
byIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3Mo
KSAmJiBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkg
JiYgbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGVsZW1l
bnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSAmJiAhZWxlbWVudC0+YXR0cmlidXRlTWFwKCktPm1h
cHBlZE1hcHNFcXVpdmFsZW50KG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlTWFwKCkpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjOWRlNjE4Li4xMWIzODg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtOTEsNyArOTEsNyBAQCBz
dGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShOb2RlKiBub2Rl
KQogICAgIAogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KQotICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6
aHJlZkF0dHIpOworICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTGlua05h
bWVzOjpocmVmQXR0cik7CiAjZW5kaWYKICAgICAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCAyZjJiNjIzLi5kYjgyNTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC0yMjQsNyArMjI0LDExIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiAgICAgICAgIHVwZGF0ZUFuaW1h
dGVkU1ZHQXR0cmlidXRlKG5hbWUpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZShuYW1lKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICAgICAgaWYgKEF0dHJp
YnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOworICAgIH0KKyAgICByZXR1
cm4gbnVsbEF0b207CiB9CiAKIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50b1ZpZXcoYm9vbCBhbGln
blRvVG9wKSAKQEAgLTIwMTAsNCArMjAxNCwxOSBAQCBQYXNzUmVmUHRyPFdlYktpdEFuaW1hdGlv
bkxpc3Q+IEVsZW1lbnQ6OndlYmtpdEdldEFuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBh
bmltQ29udHJvbGxlci0+YW5pbWF0aW9uc0ZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogfQogCisj
aWZuZGVmIE5ERUJVRworYm9vbCBFbGVtZW50OjpmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIGlmIChuYW1lID09IEhUTUxO
YW1lczo6c3R5bGVBdHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoU1ZH
KQorICAgIGlmIChpc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICFTVkdFbGVtZW50Ojpp
c0FuaW1hdGFibGVBdHRyaWJ1dGUobmFtZSk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4
IGQyYTg3NmYuLjM3OTE5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMTIzLDYgKzEyMyw5IEBA
IHB1YmxpYzoKICAgICAvLyBhdHRyaWJ1dGUgb3Igb25lIG9mIHRoZSBTVkcgYW5pbWF0YWJsZSBh
dHRyaWJ1dGVzLgogICAgIGJvb2wgZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYXN0R2V0QXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBmYXN0QXR0
cmlidXRlTG9va3VwQWxsb3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisjZW5kaWYK
IAogICAgIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0OwogCkBAIC01MDYsMTEgKzUwOSwxMyBA
QCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElk
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ldwogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFz
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CisgICAgQVNTRVJU
KGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKICAgICByZXR1cm4gbV9hdHRyaWJ1
dGVNYXAgJiYgbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlu
bGluZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKKyAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxv
b2t1cEFsbG93ZWQobmFtZSkpOwogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewogICAgICAgICBp
ZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRl
bShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IGM0NDc2ZDAuLjE3
Y2E0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVB
dHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgdW5zaWduZWQgbWF0Y2hlZEF0dHJpYnV0ZXMgPSAwOwotICAgIGlmIChl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJp
bmcoKSkKKyAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVT
cGFuQ2xhc3NTdHJpbmcoKSkKICAgICAgICAgbWF0Y2hlZEF0dHJpYnV0ZXMrKzsKICAgICBpZiAo
ZWxlbWVudC0+aGFzQXR0cmlidXRlKHN0eWxlQXR0cikgJiYgKHNob3VsZFN0eWxlQXR0cmlidXRl
QmVFbXB0eSA9PSBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUKICAgICAgICAgfHwgIWVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpLT5pc0Vt
cHR5KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAppbmRleCA3Njk3ZWFkLi5iNDljMDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNzk1LDcgKzc5NSw3
IEBAIHN0YXRpYyBib29sIGlzSW5saW5lTm9kZVdpdGhTdHlsZShjb25zdCBOb2RlKiBub2RlKQog
ICAgIC8vIFdlIGNhbiBza2lwIG92ZXIgZWxlbWVudHMgd2hvc2UgY2xhc3MgYXR0cmlidXRlIGlz
CiAgICAgLy8gb25lIG9mIG91ciBpbnRlcm5hbCBjbGFzc2VzLgogICAgIGNvbnN0IEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsKLSAg
ICBBdG9taWNTdHJpbmcgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NBdHRyaWJ1dGVWYWx1
ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwogICAgIGlmIChjbGFzc0F0dHJp
YnV0ZVZhbHVlID09IEFwcGxlVGFiU3BhbkNsYXNzCiAgICAgICAgIHx8IGNsYXNzQXR0cmlidXRl
VmFsdWUgPT0gQXBwbGVDb252ZXJ0ZWRTcGFjZQogICAgICAgICB8fCBjbGFzc0F0dHJpYnV0ZVZh
bHVlID09IEFwcGxlUGFzdGVBc1F1b3RhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2xhc3NMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcApp
bmRleCA1Nzg2MDFiLi4zNDlkNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Ns
YXNzTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCkBAIC0z
OSw3ICszOSw3IEBAIENsYXNzTGlzdDo6Q2xhc3NMaXN0KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
OiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5p
blF1aXJrc01vZGUoKSkKLSAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0ciksIGZhbHNlKTsKKyAgICAgICAgbV9j
bGFzc05hbWVzRm9yUXVpcmtzTW9kZS5zZXQobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSwgZmFsc2UpOwogfQogCiB2b2lkIENsYXNzTGlzdDo6cmVmKCkKQEAgLTg1LDcgKzg1LDcg
QEAgdm9pZCBDbGFzc0xpc3Q6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIHRva2VuLCBFeGNlcHRp
b25Db2RlJiBlYykKIAogdm9pZCBDbGFzc0xpc3Q6OmFkZEludGVybmFsKGNvbnN0IEF0b21pY1N0
cmluZyYgdG9rZW4pCiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRDbGFzc05hbWUobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkQ2xhc3NOYW1lKG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpOwog
ICAgIGlmIChvbGRDbGFzc05hbWUuaXNFbXB0eSgpKQogICAgICAgICBtX2VsZW1lbnQtPnNldEF0
dHJpYnV0ZShjbGFzc0F0dHIsIHRva2VuKTsKICAgICBlbHNlIGlmICghY29udGFpbnNJbnRlcm5h
bCh0b2tlbikpIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIENsYXNzTGlzdDo6cmVtb3ZlSW50
ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiB0b2tlbikKICAgICAvLyBvZiBjaGFyYWN0ZXIgYnkg
Y2hhcmFjdGVyIHRlc3RpbmcuCiAgICAgaWYgKCFjb250YWluc0ludGVybmFsKHRva2VuKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Q2xhc3NOYW1lKHJlbW92
ZVRva2VuKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpLCB0b2tlbikpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Q2xhc3NOYW1lKHJlbW92ZVRva2VuKG1fZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0ciksIHRva2VuKSk7CiAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoY2xhc3NBdHRyLCBuZXdDbGFzc05hbWUpOwogfQogCkBAIC0xMjYsNyArMTI2LDcg
QEAgYm9vbCBDbGFzc0xpc3Q6OnRvZ2dsZShjb25zdCBBdG9taWNTdHJpbmcmIHRva2VuLCBFeGNl
cHRpb25Db2RlJiBlYykKIAogU3RyaW5nIENsYXNzTGlzdDo6dG9TdHJpbmcoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsKKyAgICBy
ZXR1cm4gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsKIH0KIAogdm9pZCBDbGFz
c0xpc3Q6OnJlc2V0KGNvbnN0IFN0cmluZyYgbmV3Q2xhc3NOYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAppbmRleCBhNmNlNDlhLi4xYmFiYTg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcApAQCAtOTAsNyArOTAsNyBAQCBS
ZW5kZXJPYmplY3QqIFNWR0FsdEdseXBoRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZQogYm9vbCBTVkdBbHRHbHlwaEVsZW1lbnQ6Omhhc1ZhbGlk
R2x5cGhFbGVtZW50cyhWZWN0b3I8U3RyaW5nPiYgZ2x5cGhOYW1lcykgY29uc3QKIHsKICAgICBT
dHJpbmcgdGFyZ2V0OwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhmYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSwgZG9jdW1lbnQo
KSwgJnRhcmdldCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHRhcmdldEVsZW1lbnRGcm9tSVJJ
U3RyaW5nKGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciksIGRvY3VtZW50KCksICZ0
YXJnZXQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCBkMWFm
OWNkLi5iYzY5OGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
Um90YXRlTW9kZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cm90YXRlTW9kZSgpIGNvbnN0CiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGF1dG9WYWwsICgi
YXV0byIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgYXV0
b1JldmVyc2UsICgiYXV0by1yZXZlcnNlIikpOwotICAgIFN0cmluZyByb3RhdGUgPSBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjpyb3RhdGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHJvdGF0ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6cm90YXRlQXR0cik7CiAgICAgaWYgKHJv
dGF0ZSA9PSBhdXRvVmFsKQogICAgICAgICByZXR1cm4gUm90YXRlQXV0bzsKICAgICBpZiAocm90
YXRlID09IGF1dG9SZXZlcnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCmluZGV4IDQxNTRmYWQuLjE2Yzc2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCBBbmltYXRpb25Nb2RlIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmFuaW1hdGlvbk1vZGUoKSBjb25zdAogICAgICAgICByZXR1cm4g
VG9BbmltYXRpb247CiAgICAgaWYgKCFhbmltYXRpb25QYXRoKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gUGF0aEFuaW1hdGlvbjsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6dmFsdWVzQXR0cikpCisgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0
cikpCiAgICAgICAgIHJldHVybiBWYWx1ZXNBbmltYXRpb247CiAgICAgaWYgKCF0b1ZhbHVlKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gVG9Bbmlt
YXRpb24gOiBGcm9tVG9BbmltYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXgg
MzNhOGViOC4uNzczZTFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNDM1LDYg
KzQzNSwxMTEgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU1ZHRWxlbWVudDo6Y3VzdG9tU3R5
bGVGb3JSZW5kZXJlcigpCiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+
c3R5bGVGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPih0aGlzKSwgMCwgdHJ1ZSk7CiB9
CiAKKyNpZm5kZWYgTkRFQlVHCitib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0YWJsZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiwgYW5pbWF0YWJsZUF0dHJpYnV0ZXMsICgpKTsKKworICAg
IGlmIChhbmltYXRhYmxlQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKEhUTUxOYW1lczo6Y2xhc3NBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJs
ZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyKTsKKyAgICAgICAgYW5pbWF0
YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphemltdXRoQXR0cik7CisgICAgICAgIGFuaW1h
dGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpOworICAgICAg
ICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmJpYXNBdHRyKTsKKyAgICAgICAg
YW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cik7Cisg
ICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6Y3hBdHRyKTsKKyAgICAg
ICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpjeUF0dHIpOworICAgICAgICBh
bmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpOwor
ICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKTsK
KyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpkeEF0dHIpOworICAg
ICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmR5QXR0cik7CisgICAgICAg
IGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKTsKKyAgICAg
ICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjplbGV2YXRpb25BdHRyKTsKKyAg
ICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpleHBvbmVudEF0dHIpOwor
ICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjpmaWx0ZXJSZXNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5h
ZGQoU1ZHTmFtZXM6OmZ4QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6ZnlBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0
dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjppbjJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJp
YnV0ZXMuYWRkKFNWR05hbWVzOjppbkF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OmludGVyY2VwdEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OmsxQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6azJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjprM0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6Oms0QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6a2VybmVsTWF0cml4QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChT
VkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIpOworICAgICAgICBhbmltYXRhYmxl
QXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cik7CisgICAgICAg
IGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cik7Cisg
ICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRy
KTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjptYXJrZXJXaWR0
aEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1hc2tD
b250ZW50VW5pdHNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjptYXNrVW5pdHNBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjptZXRob2RBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNW
R05hbWVzOjptb2RlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6bnVtT2N0YXZlc0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6Om9mZnNldEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQo
U1ZHTmFtZXM6Om9wZXJhdG9yQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFk
ZChTVkdOYW1lczo6b3JkZXJBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpvcmllbnRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpOworICAgICAgICBhbmltYXRh
YmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKTsKKyAgICAg
ICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKTsK
KyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFhBdHRy
KTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNBdFlB
dHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpwcmVz
ZXJ2ZUFscGhhQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRl
cy5hZGQoU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6cmFkaXVzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ckF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmli
dXRlcy5hZGQoU1ZHTmFtZXM6OnJlZlhBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0
ZXMuYWRkKFNWR05hbWVzOjpyZWZZQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6cmVzdWx0QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6cm90YXRlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVz
LmFkZChTVkdOYW1lczo6cnhBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRk
KFNWR05hbWVzOjpyeUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZH
TmFtZXM6OnNjYWxlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdO
YW1lczo6c2VlZEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnNsb3BlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6c3BhY2luZ0F0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMu
YWRkKFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVB
dHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cik7CisgICAgICAgIGFuaW1h
dGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6c3RhcnRPZmZzZXRBdHRyKTsKKyAgICAgICAg
YW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKTsKKyAg
ICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIp
OworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnN1cmZhY2VTY2Fs
ZUF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRhYmxl
VmFsdWVzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
dGFyZ2V0QXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
dGFyZ2V0WEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6
OnRhcmdldFlBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
Ojp0cmFuc2Zvcm1BdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05h
bWVzOjp0eXBlQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6dmFsdWVzQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6dmlld0JveEF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFt
ZXM6OndpZHRoQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1l
czo6eDFBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4
MkF0dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnhBdHRy
KTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp4Q2hhbm5lbFNl
bGVjdG9yQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6
eTFBdHRyKTsKKyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5MkF0
dHIpOworICAgICAgICBhbmltYXRhYmxlQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnlBdHRyKTsK
KyAgICAgICAgYW5pbWF0YWJsZUF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVj
dG9yQXR0cik7CisgICAgICAgIGFuaW1hdGFibGVBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ekF0
dHIpOworICAgIH0KKyAgICByZXR1cm4gYW5pbWF0YWJsZUF0dHJpYnV0ZXMuY29udGFpbnMobmFt
ZSk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCmluZGV4IDg1NTNmYTYuLmNjZjEyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aApAQCAtMTAxLDYgKzEwMSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFNWR0F0dHJpYnV0
ZVRvUHJvcGVydHlNYXAmIGxvY2FsQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpOwogCisjaWZuZGVm
IE5ERUJVRworICAgIHN0YXRpYyBib29sIGlzQW5pbWF0YWJsZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFNWR0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnRGYWNlVXJpRWxlbWVudC5jcHAKaW5kZXggYWMzYjk4OC4uYjJkN2JhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAg
U1ZHRm9udEZhY2VVcmlFbGVtZW50Ojp+U1ZHRm9udEZhY2VVcmlFbGVtZW50KCkKIAogUGFzc1Jl
ZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVl
KCkgY29uc3QKIHsKLSAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKGZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0
dHIpKTsKKyAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gQ1NTRm9udEZhY2VT
cmNWYWx1ZTo6Y3JlYXRlKGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cikpOwogICAg
IEF0b21pY1N0cmluZyB2YWx1ZShmYXN0R2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpKTsKICAgICBz
cmMtPnNldEZvcm1hdCh2YWx1ZS5pc0VtcHR5KCkgPyAic3ZnIiA6IHZhbHVlKTsgLy8gRGVmYXVs
dCBmb3JtYXQKICAgICByZXR1cm4gc3JjLnJlbGVhc2UoKTsKQEAgLTkzLDggKzkzLDggQEAgdm9p
ZCBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OmxvYWRGb250KCkKICAgICBpZiAobV9jYWNoZWRGb250
KQogICAgICAgICBtX2NhY2hlZEZvbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKIAotICAgIFN0cmlu
ZyBocmVmID0gZmFzdEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAgaWYg
KCFocmVmLmlzTnVsbCgpKSB7ICAgICAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYg
PSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIGlmICghaHJlZi5pc051
bGwoKSkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CiAgICAgICAg
IG1fY2FjaGVkRm9udCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0Rm9udChyZXF1ZXN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAKaW5kZXggY2VjMTFh
ZS4uMWMzZDQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHAK
QEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhF
bGVtZW50KFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBXZSBvbmx5
IHN1cHBvcnQgeGxpbms6aHJlZiBzbyBmYXIuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0Nzg3Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKGZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIp
LCBkb2N1bWVudCgpLCAmZ2x5cGhOYW1lKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSwg
ZG9jdW1lbnQoKSwgJmdseXBoTmFtZSk7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpnbHlwaFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKaW5kZXgg
NWI4ZDM2Zi4uNTA5NThjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAK
QEAgLTU0LDcgKzU0LDcgQEAgUGFzc1JlZlB0cjxTVkdTdHlsZUVsZW1lbnQ+IFNWR1N0eWxlRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKIGNvbnN0IEF0b21pY1N0
cmluZyYgU1ZHU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZGVmYXVsdFZhbHVlLCAoInRleHQvY3NzIikpOwot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbiA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnR5
cGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBnZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnR5cGVBdHRyKTsKICAgICByZXR1cm4gbi5pc051bGwoKSA/IGRlZmF1bHRWYWx1ZSA6IG47
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAKaW5kZXggZjAyYzliNy4uYWYzN2UzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCBTVkdTTUlMRWxl
bWVudDo6RmlsbE1vZGUgU1ZHU01JTEVsZW1lbnQ6OmZpbGwoKSBjb25zdAogICAgIAogU3RyaW5n
IFNWR1NNSUxFbGVtZW50Ojp4bGlua0hyZWYoKSBjb25zdAogeyAgICAKLSAgICByZXR1cm4gZmFz
dEdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiB9CiAgICAgCiBTTUlMVGltZSBTVkdTTUlMRWxl
bWVudDo6ZHVyKCkgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>