<?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>160336</bug_id>
          
          <creation_ts>2016-07-29 03:20:57 -0700</creation_ts>
          <short_desc>More cleanup of MathML operator parsing</short_desc>
          <delta_ts>2016-08-02 13:27:33 -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>MathML</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160301</dependson>
          <blocked>156537</blocked>
    
    <blocked>160339</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1215532</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-29 03:20:57 -0700</bug_when>
    <thetext>Some cleanup are possible once the attribute parsing is moved into MathMLOperatorElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215533</commentid>
    <comment_count>1</comment_count>
      <attachid>284858</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-29 03:45:28 -0700</bug_when>
    <thetext>Created attachment 284858
Patch (applies after bugs 160245, 160239, 160190 and 160301)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216007</commentid>
    <comment_count>2</comment_count>
      <attachid>284858</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-07-31 21:33:39 -0700</bug_when>
    <thetext>Comment on attachment 284858
Patch (applies after bugs 160245, 160239, 160190 and 160301)

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

&gt; Source/WebCore/mathml/MathMLOperatorElement.cpp:163
&gt; +    return m_properties.flags &amp; flag;

The caller already knows how to mask off the flag and in fact has code to do that in the non-dirty case. So the parse function should probably just set the flags and not try to return a boolean.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:73
&gt; +    UChar text = textContent();

The local variable name should be &quot;character&quot;, not &quot;text&quot;, I think.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:74
&gt; +    return 0x2061 &lt;= text &amp;&amp; text &lt;= 0x2064;

A function like this needs a comment to indicate why the range U+2061-U+2064 is correct, otherwise the code is mysterious. In particular, what guarantees these are the only 4 invisible operators.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:89
&gt; +    if (leadingSpace &lt; 0)
&gt; +        leadingSpace = 0;
&gt; +    return leadingSpace;

Typically we like to write this as an expression rather than an if. If it was an integer it would be:

    return std::max(0, leadingSpace);

Maybe we can find a similar idiom for LayoutUnit?

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:94
&gt; +   // FIXME: Negative trailing spaces must be implemented (https://webkit.org/b/124830).

Missing space here, incorrect indentation.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:152
&gt; +            aspect = float(minSizeValue) / size;

We usually try to steer clear of function call style type casting for scalars. Here I would suggest:

    aspect = minSizeValue.toFloat() / size;

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:156
&gt; +                aspect = float(maxSizeValue) / size;

Ditto.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.h:81
&gt;      // The following operators are invisible: U+2061 FUNCTION APPLICATION, U+2062 INVISIBLE TIMES, U+2063 INVISIBLE SEPARATOR, U+2064 INVISIBLE PLUS.

This comment needs to move in so it’s with the isInvisibleOperator function body; does not belong in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216476</commentid>
    <comment_count>3</comment_count>
      <attachid>285107</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-02 06:59:33 -0700</bug_when>
    <thetext>Created attachment 285107
Patch (applies after bug 160190 and bug 160301)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216567</commentid>
    <comment_count>4</comment_count>
      <attachid>285126</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-02 12:47:02 -0700</bug_when>
    <thetext>Created attachment 285126
Patch for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216582</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-02 13:27:33 -0700</bug_when>
    <thetext>Committed r204038: &lt;http://trac.webkit.org/changeset/204038&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284858</attachid>
            <date>2016-07-29 03:45:28 -0700</date>
            <delta_ts>2016-07-31 21:33:39 -0700</delta_ts>
            <desc>Patch (applies after bugs 160245, 160239, 160190 and 160301)</desc>
            <filename>0005-Bug-160336-More-cleanup-of-MathML-operator-parsing.patch</filename>
            <type>text/plain</type>
            <size>17758</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBlOWE3NGU3ODczYjkxNTYwNDZmZDJhN2NiZmNjZDE4MGQ0NDYyNDFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogRnJpLCAyOSBKdWwgMjAxNiAxMjo0MzoxMSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNS81XSBC
dWcgMTYwMzM2IC0gTW9yZSBjbGVhbnVwIG9mIE1hdGhNTCBvcGVyYXRvciBwYXJzaW5nCgotLS0K
IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuY3BwICAgIHwgIDUw
ICsrKysrKy0tLS0KIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQu
aCAgICAgIHwgICAzICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcCB8ICAxNSAtLS0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suaCAgIHwgICAyIC0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZlbmNlZE9wZXJhdG9yLmggIHwgIDEzICsrKwogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MT3BlcmF0b3IuY3BwICAgICAgfCAxMDIgKysrKysrKysrKysrKy0tLS0tLS0tCiAuLi4v
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oICAgICAgICB8ICAxOCArKy0t
CiA3IGZpbGVzIGNoYW5nZWQsIDEyMiBpbnNlcnRpb25zKCspLCA4MSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuY3BwCmluZGV4
IDY3MGEzMzMuLjNmNWJlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRo
TUxPcGVyYXRvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxP
cGVyYXRvckVsZW1lbnQuY3BwCkBAIC0xMTIsMTAgKzExMiw2IEBAIGNvbnN0IE1hdGhNTE9wZXJh
dG9yRWxlbWVudDo6RGljdGlvbmFyeVByb3BlcnR5JiBNYXRoTUxPcGVyYXRvckVsZW1lbnQ6OmRp
Y3Rpb25hCiAKIHZvaWQgTWF0aE1MT3BlcmF0b3JFbGVtZW50OjpzZXRPcGVyYXRvckZsYWdGcm9t
QXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyBmbGFnLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKQogewotICAgIGJvb2wgZmxhZ0RpcnR5ID0gbV9wcm9wZXJ0aWVzLmRp
cnR5RmxhZ3MgJiBmbGFnOwotICAgIGlmICghZmxhZ0RpcnR5KQotICAgICAgICByZXR1cm47Ci0K
ICAgICAvLyBXZSB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgb3BlcmF0b3IgZGljdGlv
bmFyeS4KICAgICBCb29sZWFuQXR0cmlidXRlIGF0dHJpYnV0ZTsKICAgICBpZiAgKGRpY3Rpb25h
cnlQcm9wZXJ0eSgpLmZsYWdzICYgZmxhZykgewpAQCAtMTMyLDI1ICsxMjgsNDcgQEAgdm9pZCBN
YXRoTUxPcGVyYXRvckVsZW1lbnQ6OnNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXIKICAgICAgICAgbV9wcm9wZXJ0aWVzLmZsYWdzIHw9IGZsYWc7CiAg
ICAgZWxzZSBpZiAodmFsdWUgPT0gQm9vbGVhblZhbHVlOjpGYWxzZSkKICAgICAgICAgbV9wcm9w
ZXJ0aWVzLmZsYWdzICY9IH5mbGFnOworfQorCitib29sIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6
cGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZShNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcgZmxh
ZykKK3sKKyAgICBBU1NFUlQobV9wcm9wZXJ0aWVzLmRpcnR5RmxhZ3MgJiBmbGFnKTsKKworICAg
IHN3aXRjaCAoZmxhZykgeworICAgIGNhc2UgQWNjZW50OgorICAgICAgICBzZXRPcGVyYXRvckZs
YWdGcm9tQXR0cmlidXRlKGZsYWcsIGFjY2VudEF0dHIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZlbmNlOgorICAgICAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKGZsYWcsIGZl
bmNlQXR0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGFyZ2VPcDoKKyAgICAgICAgc2V0
T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZShmbGFnLCBsYXJnZW9wQXR0cik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTW92YWJsZUxpbWl0czoKKyAgICAgICAgc2V0T3BlcmF0b3JGbGFnRnJv
bUF0dHJpYnV0ZShmbGFnLCBtb3ZhYmxlbGltaXRzQXR0cik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2VwYXJhdG9yOgorICAgICAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKGZs
YWcsIHNlcGFyYXRvckF0dHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmV0Y2h5Ogor
ICAgICAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKGZsYWcsIHN0cmV0Y2h5QXR0cik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3ltbWV0cmljOgorICAgICAgICBzZXRPcGVyYXRv
ckZsYWdGcm9tQXR0cmlidXRlKGZsYWcsIHN5bW1ldHJpY0F0dHIpOworICAgICAgICBicmVhazsK
KyAgICB9CiAKICAgICAvLyBXZSBjbGVhciB0aGUgZGlydHkgZmxhZy4KICAgICBtX3Byb3BlcnRp
ZXMuZGlydHlGbGFncyAmPSB+ZmxhZzsKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmZsYWdzICYg
ZmxhZzsKIH0KIAotdW5zaWduZWQgc2hvcnQgTWF0aE1MT3BlcmF0b3JFbGVtZW50OjpmbGFncygp
Citib29sIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6aGFzUHJvcGVydHkoTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpGbGFnIGZsYWcpCiB7Ci0gICAgaWYgKCFtX3Byb3BlcnRpZXMuZGlydHlGbGFn
cykKLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydGllcy5mbGFnczsKLQotICAgIHNldE9wZXJhdG9y
RmxhZ0Zyb21BdHRyaWJ1dGUoQWNjZW50LCBhY2NlbnRBdHRyKTsKLSAgICBzZXRPcGVyYXRvckZs
YWdGcm9tQXR0cmlidXRlKEZlbmNlLCBmZW5jZUF0dHIpOwotICAgIHNldE9wZXJhdG9yRmxhZ0Zy
b21BdHRyaWJ1dGUoTGFyZ2VPcCwgbGFyZ2VvcEF0dHIpOwotICAgIHNldE9wZXJhdG9yRmxhZ0Zy
b21BdHRyaWJ1dGUoTW92YWJsZUxpbWl0cywgbW92YWJsZWxpbWl0c0F0dHIpOwotICAgIHNldE9w
ZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoU2VwYXJhdG9yLCBzZXBhcmF0b3JBdHRyKTsKLSAgICBz
ZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKFN0cmV0Y2h5LCBzdHJldGNoeUF0dHIpOwotICAg
IHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoU3ltbWV0cmljLCBzeW1tZXRyaWNBdHRyKTsK
KyAgICBpZiAoIShtX3Byb3BlcnRpZXMuZGlydHlGbGFncyAmIGZsYWcpKQorICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0aWVzLmZsYWdzICYgZmxhZzsKIAotICAgIHJldHVybiBtX3Byb3BlcnRpZXMu
ZmxhZ3M7CisgICAgcmV0dXJuIHBhcnNlUHJvcGVydHlBdHRyaWJ1dGUoZmxhZyk7CiB9CiAKIE1h
dGhNTEVsZW1lbnQ6Okxlbmd0aCBNYXRoTUxPcGVyYXRvckVsZW1lbnQ6OmRlZmF1bHRMZWFkaW5n
U3BhY2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9y
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxlbWVudC5o
CmluZGV4IDA5MWEwM2QuLmE1NDMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0
aE1MT3BlcmF0b3JFbGVtZW50LmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIFVDaGFy
IG9wZXJhdG9yVGV4dCgpOwogICAgIHZvaWQgc2V0T3BlcmF0b3JGb3JtRGlydHkoKSB7IG1fZGlj
dGlvbmFyeVByb3BlcnR5LmRpcnR5ID0gdHJ1ZTsgfQogICAgIE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6Rm9ybSBmb3JtKCkgeyByZXR1cm4gZGljdGlvbmFyeVByb3BlcnR5KCkuZm9ybTsgfQot
ICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzKCk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eShNYXRoTUxP
cGVyYXRvckRpY3Rpb25hcnk6OkZsYWcpOwogICAgIExlbmd0aCBkZWZhdWx0TGVhZGluZ1NwYWNl
KCk7CiAgICAgTGVuZ3RoIGRlZmF1bHRUcmFpbGluZ1NwYWNlKCk7CiAgICAgY29uc3QgTGVuZ3Ro
JiBsZWFkaW5nU3BhY2UoKTsKQEAgLTcwLDYgKzcwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAg
IE9wZXJhdG9yUHJvcGVydGllcyBtX3Byb3BlcnRpZXM7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZs
YWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgUXVh
bGlmaWVkTmFtZSYpOworICAgIGJvb2wgcGFyc2VQcm9wZXJ0eUF0dHJpYnV0ZShNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OkZsYWcgZmxhZyk7CiAKICAgICBMZW5ndGggbV9sZWFkaW5nU3BhY2U7
CiAgICAgTGVuZ3RoIG1fdHJhaWxpbmdTcGFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKaW5kZXggM2I1YjE2MC4uNTM2
ZDQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxCbG9jay5jcHAKQEAgLTE3MywyMSArMTczLDYgQEAgTGF5b3V0VW5pdCB0b1VzZXJV
bml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5
bGUmIHMKICAgICB9CiB9CiAKLWJvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIExheW91dFVuaXQmIGxlbmd0aFZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGJvb2wgYWxsb3dOZWdhdGl2ZSkKLXsKLSAgICBNYXRoTUxFbGVtZW50OjpMZW5ndGggbGVuZ3Ro
ID0gTWF0aE1MRWxlbWVudDo6cGFyc2VNYXRoTUxMZW5ndGgoc3RyaW5nKTsKLSAgICBpZiAobGVu
Z3RoLnR5cGUgPT0gTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UGFyc2luZ0ZhaWxlZCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGF5b3V0VW5pdCB2YWx1ZSA9IHRvVXNlclVuaXRz
KGxlbmd0aCwgKnN0eWxlLCBsZW5ndGhWYWx1ZSk7Ci0KLSAgICBpZiAoIWFsbG93TmVnYXRpdmUg
JiYgdmFsdWUgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBsZW5ndGhWYWx1ZSA9
IHZhbHVlOwotICAgIHJldHVybiB0cnVlOwotfQotCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhN
TFRhYmxlOjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0CiB7CiAgICAgLy8gQnkgZGVmYXVsdCB0
aGUgdmVydGljYWwgY2VudGVyIG9mIDxtdGFibGU+IGlzIGFsaWduZWQgb24gdGhlIG1hdGggYXhp
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suaAppbmRleCBkYWM3NzZhLi5iOGI3NWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC0xMTQsOCArMTE0LDYg
QEAgcHJpdmF0ZToKICAgICBSZWY8TWF0aE1MU3R5bGU+IG1fbWF0aE1MU3R5bGU7CiB9OwogCi0v
LyBQYXJzaW5nIGZ1bmN0aW9ucyBmb3IgTWF0aE1MIExlbmd0aCB2YWx1ZXMKLWJvb2wgcGFyc2VN
YXRoTUxMZW5ndGgoY29uc3QgU3RyaW5nJiwgTGF5b3V0VW5pdCYsIGNvbnN0IFJlbmRlclN0eWxl
KiwgYm9vbCBhbGxvd05lZ2F0aXZlID0gdHJ1ZSk7CiBMYXlvdXRVbml0IHRvVXNlclVuaXRzKGNv
bnN0IE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgTGF5
b3V0VW5pdCYgcmVmZXJlbmNlVmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNl
ZE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZlbmNlZE9wZXJhdG9yLmgKaW5kZXggMDRmOTY5YS4uODMxYTlkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
T3BlcmF0b3IuaApAQCAtNDEsOCArNDEsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVy
TWF0aE1MRmVuY2VkT3BlcmF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXMoKSBmaW5hbDsKICAgICBVQ2hhciB0ZXh0Q29udGVu
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KKyAgICBMYXlvdXRVbml0
IGxlYWRpbmdTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbGVhZGluZ1NwYWNlOyB9Cisg
ICAgTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90cmFp
bGluZ1NwYWNlOyB9CisgICAgTGF5b3V0VW5pdCBtaW5TaXplKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9taW5TaXplOyB9CisgICAgTGF5b3V0VW5pdCBtYXhTaXplKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9tYXhTaXplOyB9CisgICAgYm9vbCBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpGbGFnIGZsYWcpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3BlcmF0b3JG
bGFncyAmIGZsYWc7IH0KKworICAgIC8vIFdlIGFsd2F5cyB1c2UgdGhlIE1hdGhPcGVyYXRvciBj
bGFzcyBmb3IgYW5vbnltb3VzIG1mZW5jZWQgb3BlcmF0b3JzLCBzaW5jZSB0aGV5IGRvIG5vdCBo
YXZlIHRleHQgY29udGVudCBpbiB0aGUgRE9NLgorICAgIGJvb2wgdXNlTWF0aE9wZXJhdG9yKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgVUNoYXIgbV90ZXh0Q29udGVudCB7
IDAgfTsKKyAgICBMYXlvdXRVbml0IG1fbGVhZGluZ1NwYWNlOworICAgIExheW91dFVuaXQgbV90
cmFpbGluZ1NwYWNlOworICAgIExheW91dFVuaXQgbV9taW5TaXplOworICAgIExheW91dFVuaXQg
bV9tYXhTaXplOworICAgIHVuc2lnbmVkIHNob3J0IG1fb3BlcmF0b3JGbGFnczsKICAgICBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkZvcm0gbV9vcGVyYXRvckZvcm07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCmluZGV4IDc3YzZhOTMuLjIxMzNiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC02NSwz
OCArNjUsNjIgQEAgTWF0aE1MT3BlcmF0b3JFbGVtZW50JiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
ZWxlbWVudCgpIGNvbnN0CiAKIFVDaGFyIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0ZXh0Q29udGVu
dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFpc0Fub255bW91cygpKTsKICAgICByZXR1cm4gZWxl
bWVudCgpLm9wZXJhdG9yVGV4dCgpOwogfQogCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpz
ZXRPcGVyYXRvclByb3BlcnRpZXMoKQorYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXNJbnZp
c2libGVPcGVyYXRvcigpIGNvbnN0CiB7Ci0gICAgLy8gV2UgZGV0ZXJtaW5lIHRoZSBzdHJldGNo
IGRpcmVjdGlvbiAoZGVmYXVsdCBpcyB2ZXJ0aWNhbCkuCi0gICAgbV9pc1ZlcnRpY2FsID0gTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojppc1ZlcnRpY2FsKHRleHRDb250ZW50KCkpOworICAgIFVD
aGFyIHRleHQgPSB0ZXh0Q29udGVudCgpOworICAgIHJldHVybiAweDIwNjEgPD0gdGV4dCAmJiB0
ZXh0IDw9IDB4MjA2NDsKK30KIAotICAgIG1fb3BlcmF0b3JGbGFncyA9IGVsZW1lbnQoKS5mbGFn
cygpOworYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6RmxhZyBmbGFnKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50
KCkuaGFzUHJvcGVydHkoZmxhZyk7Cit9CiAKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmxlYWRpbmdTcGFjZSgpIGNvbnN0Cit7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIGxlYWRp
bmcgc3BhY2VzIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyNDgz
MCkuCi0gICAgbV9sZWFkaW5nU3BhY2UgPSB0b1VzZXJVbml0cyhlbGVtZW50KCkuZGVmYXVsdExl
YWRpbmdTcGFjZSgpLCBzdHlsZSgpLCAwKTsKLSAgICBtX2xlYWRpbmdTcGFjZSA9IHRvVXNlclVu
aXRzKGVsZW1lbnQoKS5sZWFkaW5nU3BhY2UoKSwgc3R5bGUoKSwgbV9sZWFkaW5nU3BhY2UpOwot
ICAgIGlmIChtX2xlYWRpbmdTcGFjZSA8IDApCi0gICAgICAgIG1fbGVhZGluZ1NwYWNlID0gMDsK
LQotICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZXMgbXVzdCBiZSBpbXBsZW1l
bnRlZCAoaHR0cHM6Ly93ZWJraXQub3JnL2IvMTI0ODMwKS4KLSAgICBtX3RyYWlsaW5nU3BhY2Ug
PSB0b1VzZXJVbml0cyhlbGVtZW50KCkuZGVmYXVsdFRyYWlsaW5nU3BhY2UoKSwgc3R5bGUoKSwg
MCk7Ci0gICAgbV90cmFpbGluZ1NwYWNlID0gdG9Vc2VyVW5pdHMoZWxlbWVudCgpLnRyYWlsaW5n
U3BhY2UoKSwgc3R5bGUoKSwgbV90cmFpbGluZ1NwYWNlKTsKLSAgICBpZiAobV90cmFpbGluZ1Nw
YWNlIDwgMCkKLSAgICAgICAgbV90cmFpbGluZ1NwYWNlID0gMDsKLQotICAgIG1fbWluU2l6ZSA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIERlZmF1bHQgbWluc2l6ZSBpcyAiMWVt
Ii4KLSAgICBtX21pblNpemUgPSB0b1VzZXJVbml0cyhlbGVtZW50KCkubWluU2l6ZSgpLCBzdHls
ZSgpLCBtX21pblNpemUpOwotICAgIGlmIChtX21pblNpemUgPCAwKQotICAgICAgICBtX21pblNp
emUgPSAwOwotCi0gICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsgLy8gRGVmYXVs
dCBtYXhzaXplIGlzICJpbmZpbml0eSIuCi0gICAgbV9tYXhTaXplID0gdG9Vc2VyVW5pdHMoZWxl
bWVudCgpLm1heFNpemUoKSwgc3R5bGUoKSwgbV9tYXhTaXplKTsKLSAgICBpZiAobV9tYXhTaXpl
IDwgMCkKLSAgICAgICAgbV9tYXhTaXplID0gMDsKKyAgICBMYXlvdXRVbml0IGxlYWRpbmdTcGFj
ZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS5kZWZhdWx0TGVhZGluZ1NwYWNlKCksIHN0eWxlKCks
IDApOworICAgIGxlYWRpbmdTcGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS5sZWFkaW5nU3Bh
Y2UoKSwgc3R5bGUoKSwgbGVhZGluZ1NwYWNlKTsKKyAgICBpZiAobGVhZGluZ1NwYWNlIDwgMCkK
KyAgICAgICAgbGVhZGluZ1NwYWNlID0gMDsKKyAgICByZXR1cm4gbGVhZGluZ1NwYWNlOworfQor
CitMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlKCkgY29uc3QK
K3sKKyAgIC8vIEZJWE1FOiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZXMgbXVzdCBiZSBpbXBsZW1l
bnRlZCAoaHR0cHM6Ly93ZWJraXQub3JnL2IvMTI0ODMwKS4KKyAgICBMYXlvdXRVbml0IHRyYWls
aW5nU3BhY2UgPSB0b1VzZXJVbml0cyhlbGVtZW50KCkuZGVmYXVsdFRyYWlsaW5nU3BhY2UoKSwg
c3R5bGUoKSwgMCk7CisgICAgdHJhaWxpbmdTcGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS50
cmFpbGluZ1NwYWNlKCksIHN0eWxlKCksIHRyYWlsaW5nU3BhY2UpOworICAgIGlmICh0cmFpbGlu
Z1NwYWNlIDwgMCkKKyAgICAgICAgdHJhaWxpbmdTcGFjZSA9IDA7CisgICAgcmV0dXJuIHRyYWls
aW5nU3BhY2U7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6Om1pblNpemUo
KSBjb25zdAoreworICAgIExheW91dFVuaXQgbWluU2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5zaXplKCk7IC8vIERlZmF1bHQgbWluc2l6ZSBpcyAiMWVtIi4KKyAgICBtaW5TaXplID0gdG9V
c2VyVW5pdHMoZWxlbWVudCgpLm1pblNpemUoKSwgc3R5bGUoKSwgbWluU2l6ZSk7CisgICAgaWYg
KG1pblNpemUgPCAwKQorICAgICAgICBtaW5TaXplID0gMDsKKyAgICByZXR1cm4gbWluU2l6ZTsK
K30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bWF4U2l6ZSgpIGNvbnN0Cit7
CisgICAgTGF5b3V0VW5pdCBtYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsgLy8gRGVmYXVs
dCBtYXhzaXplIGlzICJpbmZpbml0eSIuCisgICAgbWF4U2l6ZSA9IHRvVXNlclVuaXRzKGVsZW1l
bnQoKS5tYXhTaXplKCksIHN0eWxlKCksIG1heFNpemUpOworICAgIGlmIChtYXhTaXplIDwgMCkK
KyAgICAgICAgbWF4U2l6ZSA9IDA7CisgICAgcmV0dXJuIG1heFNpemU7Cit9CisKK3ZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcygpCit7CisgICAgLy8gV2Ug
ZGV0ZXJtaW5lIHRoZSBzdHJldGNoIGRpcmVjdGlvbiAoZGVmYXVsdCBpcyB2ZXJ0aWNhbCkuCisg
ICAgbV9pc1ZlcnRpY2FsID0gTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5Ojppc1ZlcnRpY2FsKHRl
eHRDb250ZW50KCkpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8o
TGF5b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0IGRlcHRoQmVsb3dCYXNl
bGluZSkKQEAgLTEyMywxMCArMTQ3LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0
cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQKICAgICBM
YXlvdXRVbml0IHNpemUgPSBzdHJldGNoU2l6ZSgpOwogICAgIGZsb2F0IGFzcGVjdCA9IDEuMDsK
ICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgaWYgKHNpemUgPCBtX21pblNpemUpCi0gICAg
ICAgICAgICBhc3BlY3QgPSBmbG9hdChtX21pblNpemUpIC8gc2l6ZTsKLSAgICAgICAgZWxzZSBp
ZiAobV9tYXhTaXplIDwgc2l6ZSkKLSAgICAgICAgICAgIGFzcGVjdCA9IGZsb2F0KG1fbWF4U2l6
ZSkgLyBzaXplOworICAgICAgICBMYXlvdXRVbml0IG1pblNpemVWYWx1ZSA9IG1pblNpemUoKTsK
KyAgICAgICAgaWYgKHNpemUgPCBtaW5TaXplVmFsdWUpCisgICAgICAgICAgICBhc3BlY3QgPSBm
bG9hdChtaW5TaXplVmFsdWUpIC8gc2l6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBM
YXlvdXRVbml0IG1heFNpemVWYWx1ZSA9IG1heFNpemUoKTsKKyAgICAgICAgICAgIGlmIChtYXhT
aXplVmFsdWUgPCBzaXplKQorICAgICAgICAgICAgICAgIGFzcGVjdCA9IGZsb2F0KG1heFNpemVW
YWx1ZSkgLyBzaXplOworICAgICAgICB9CiAgICAgfQogICAgIG1fc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUgKj0gYXNwZWN0OwogICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSAqPSBh
c3BlY3Q7CkBAIC0xODMsNyArMjExLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5n
IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEyNDgzMSkuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3Vs
ZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3
dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KLSAgICBw
cmVmZXJyZWRXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgcHJlZmVycmVkV2lkdGggKyBtX3RyYWls
aW5nU3BhY2U7CisgICAgcHJlZmVycmVkV2lkdGggPSBsZWFkaW5nU3BhY2UoKSArIHByZWZlcnJl
ZFdpZHRoICsgdHJhaWxpbmdTcGFjZSgpOwogCiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoOwogCkBAIC0x
OTcsMjEgKzIyNSwyNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZwogICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IExheW91dFVuaXQgbGVhZGluZ1NwYWNlVmFsdWUgPSBsZWFkaW5nU3BhY2UoKTsKKyAgICBMYXlv
dXRVbml0IHRyYWlsaW5nU3BhY2VWYWx1ZSA9IHRyYWlsaW5nU3BhY2UoKTsKKwogICAgIGlmICh1
c2VNYXRoT3BlcmF0b3IoKSkgewogICAgICAgICBmb3IgKGF1dG8gY2hpbGQgPSBmaXJzdENoaWxk
Qm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAg
ICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHNldExvZ2ljYWxXaWR0aChtX2xl
YWRpbmdTcGFjZSArIG1fbWF0aE9wZXJhdG9yLndpZHRoKCkgKyBtX3RyYWlsaW5nU3BhY2UpOwor
ICAgICAgICBzZXRMb2dpY2FsV2lkdGgobGVhZGluZ1NwYWNlVmFsdWUgKyBtX21hdGhPcGVyYXRv
ci53aWR0aCgpICsgdHJhaWxpbmdTcGFjZVZhbHVlKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChtX21hdGhPcGVyYXRvci5hc2NlbnQoKSArIG1fbWF0aE9wZXJhdG9yLmRlc2NlbnQoKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgZmlyc3QgZG8gdGhlIG5vcm1hbCBsYXlvdXQgd2l0
aG91dCBzcGFjaW5nLgogICAgICAgICByZWNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
TGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBzZXRMb2dpY2FsV2lk
dGgod2lkdGggLSBtX2xlYWRpbmdTcGFjZSAtIG1fdHJhaWxpbmdTcGFjZSk7CisgICAgICAgIHNl
dExvZ2ljYWxXaWR0aCh3aWR0aCAtIGxlYWRpbmdTcGFjZVZhbHVlIC0gdHJhaWxpbmdTcGFjZVZh
bHVlKTsKICAgICAgICAgUmVuZGVyTWF0aE1MVG9rZW46OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hp
bGRyZW4sIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgc2V0TG9naWNhbFdpZHRoKHdpZHRo
KTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1vdmUgdGhlIGNoaWxkcmVuIHRvIHRha2Ugc3BhY2lu
ZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxTaGlmdChzdHls
ZSgpLmRpcmVjdGlvbigpID09IExUUiA/IG1fbGVhZGluZ1NwYWNlIDogLW1fbGVhZGluZ1NwYWNl
LCAwKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgaG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gTFRSID8gbGVhZGluZ1NwYWNlVmFsdWUgOiAtbGVhZGluZ1NwYWNlVmFsdWUsIDAp
OwogICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2Nh
dGlvbihjaGlsZC0+bG9jYXRpb24oKSArIGhvcml6b250YWxTaGlmdCk7CiAgICAgfQpAQCAtMjY1
LDggKzI5Niw3IEBAIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVzZU1hdGhPcGVyYXRvcigp
IGNvbnN0CiAgICAgLy8gV2UgdXNlIHRoZSBNYXRoT3BlcmF0b3IgY2xhc3MgdG8gaGFuZGxlIHRo
ZSBmb2xsb3dpbmcgY2FzZXM6CiAgICAgLy8gMSkgU3RyZXRjaHkgYW5kIGxhcmdlIG9wZXJhdG9y
cywgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcGFpbnRpbmcuCiAgICAgLy8gMikgVGhlIG1p
bnVzIHNpZ24sIHNpbmNlIGl0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgaHlwaGVuIGluIHRoZSBE
T00uCi0gICAgLy8gMykgVGhlIGFub255bW91cyBvcGVyYXRvcnMgY3JlYXRlZCBieSBtZmVuY2Vk
LCBzaW5jZSB0aGV5IGRvIG5vdCBoYXZlIHRleHQgY29udGVudCBpbiB0aGUgRE9NLgotICAgIHJl
dHVybiBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSB8fCB0ZXh0Q29udGVudCgpID09IG1pbnVzU2ln
biB8fCBpc0Fub255bW91cygpOworICAgIHJldHVybiBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSB8
fCB0ZXh0Q29udGVudCgpID09IG1pbnVzU2lnbjsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKQEAgLTI5OCw3ICszMjgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dAogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBw
YWludE9mZnNldCArIGxvY2F0aW9uKCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdT
cGFjZSwgMCk7CisgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBsZWFkaW5nU3BhY2UoKSA6IHRyYWlsaW5nU3BhY2UoKSwgMCk7CiAKICAg
ICAvLyBDZW50ZXIgaG9yaXpvbnRhbCBvcGVyYXRvcnMuCiAgICAgaWYgKCFtX2lzVmVydGljYWwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmgKaW5kZXggMWM5MDljMS4uMzk1ZjllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaApAQCAtNDcs
NyArNDcsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWZXJ0aWNhbCA/IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKyBtX3N0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgOiBtX3N0cmV0Y2hXaWR0aDsgfQogICAgIHZvaWQgcmVz
ZXRTdHJldGNoU2l6ZSgpOwogCi0gICAgYm9vbCBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpGbGFnIGZsYWcpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3JGbGFncyAm
IGZsYWc7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeTo6RmxhZyBmbGFnKSBjb25zdDsKICAgICBib29sIGlzTGFyZ2VPcGVyYXRvcklu
RGlzcGxheVN0eWxlKCkgY29uc3QgeyByZXR1cm4gIWhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVy
YXRvckRpY3Rpb25hcnk6OlN0cmV0Y2h5KSAmJiBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0
b3JEaWN0aW9uYXJ5OjpMYXJnZU9wKSAmJiBtYXRoTUxTdHlsZSgpLT5kaXNwbGF5U3R5bGUoKTsg
fQogICAgIGJvb2wgc2hvdWxkTW92ZUxpbWl0cygpIGNvbnN0IHsgcmV0dXJuIGhhc09wZXJhdG9y
RmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6Ok1vdmFibGVMaW1pdHMpICYmICFtYXRoTUxT
dHlsZSgpLT5kaXNwbGF5U3R5bGUoKTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWZXJ0aWNhbDsgfQpAQCAtNjEsMTMgKzYxLDEzIEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHJlYnVpbGRUb2tlbkNvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGxlYWRpbmdT
cGFjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IG1pblNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgbWF4U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB1c2VNYXRoT3Bl
cmF0b3IoKSBjb25zdDsKIAogICAgIGJvb2wgbV9pc1ZlcnRpY2FsIHsgdHJ1ZSB9OwotICAgIExh
eW91dFVuaXQgbV9sZWFkaW5nU3BhY2U7Ci0gICAgTGF5b3V0VW5pdCBtX3RyYWlsaW5nU3BhY2U7
Ci0gICAgTGF5b3V0VW5pdCBtX21pblNpemU7Ci0gICAgTGF5b3V0VW5pdCBtX21heFNpemU7Ci0g
ICAgdW5zaWduZWQgc2hvcnQgbV9vcGVyYXRvckZsYWdzOwogCiBwcml2YXRlOgogICAgIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIGZpbmFsOwpAQCAtNzUsMjAgKzc1LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwKSBmaW5hbDsKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JikgZmluYWw7CiAKLSAgICB2b2lkIHNldExlYWRpbmdTcGFjZShMYXlvdXRVbml0IGxlYWRpbmdT
cGFjZSkgeyBtX2xlYWRpbmdTcGFjZSA9IGxlYWRpbmdTcGFjZTsgfQotICAgIHZvaWQgc2V0VHJh
aWxpbmdTcGFjZShMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2UpIHsgbV90cmFpbGluZ1NwYWNlID0g
dHJhaWxpbmdTcGFjZTsgfQotCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGlzQW5vbnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255
bW91cykiIDogIlJlbmRlck1hdGhNTE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJl
bihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JD
aGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxP
cGVyYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICAvLyBUaGUgZm9sbG93
aW5nIG9wZXJhdG9ycyBhcmUgaW52aXNpYmxlOiBVKzIwNjEgRlVOQ1RJT04gQVBQTElDQVRJT04s
IFUrMjA2MiBJTlZJU0lCTEUgVElNRVMsIFUrMjA2MyBJTlZJU0lCTEUgU0VQQVJBVE9SLCBVKzIw
NjQgSU5WSVNJQkxFIFBMVVMuCi0gICAgYm9vbCBpc0ludmlzaWJsZU9wZXJhdG9yKCkgeyByZXR1
cm4gMHgyMDYxIDw9IHRleHRDb250ZW50KCkgJiYgdGV4dENvbnRlbnQoKSA8PSAweDIwNjQ7IH0K
KyAgICBib29sIGlzSW52aXNpYmxlT3BlcmF0b3IoKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPGlu
dD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKICAgICBSZW5kZXJNYXRoTUxPcGVy
YXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkgZmluYWwgeyByZXR1cm4gdGhpczsgfQogCiAg
ICAgYm9vbCBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsKLSAgICBib29sIHVzZU1hdGhP
cGVyYXRvcigpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFN0cmV0Y2hlZE9wZXJh
dG9yU2hpZnQoKSBjb25zdDsKIAotLSAKMi44LjEKCg==
</data>
<flag name="review"
          id="308525"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285107</attachid>
            <date>2016-08-02 06:59:33 -0700</date>
            <delta_ts>2016-08-02 06:59:33 -0700</delta_ts>
            <desc>Patch (applies after bug 160190 and bug 160301)</desc>
            <filename>0003-Bug-160336-More-cleanup-of-MathML-operator-parsing.patch</filename>
            <type>text/plain</type>
            <size>15688</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBlN2YyMWIyMjBiNTg3ZjA0Mjk0YjkyNDRiOWY3OGFmNzI1ZjUzZDM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyIEF1ZyAyMDE2IDE1OjU3OjI2ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIEJ1
ZyAxNjAzMzYgLSBNb3JlIGNsZWFudXAgb2YgTWF0aE1MIG9wZXJhdG9yIHBhcnNpbmcKCi0tLQog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNiAr
KysrKysrKysrCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2Nr
LmNwcCB8IDE1IC0tLS0tCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmggICB8ICAyIC0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNl
ZE9wZXJhdG9yLmggIHwgMTEgKysrKwogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuY3BwICAgICAgfCA3NiArKysrKysrKysrKysrKystLS0tLS0tCiAuLi4vcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oICAgICAgICB8IDE2ICsrLS0tCiA2IGZp
bGVzIGNoYW5nZWQsIDEwNSBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZGZlMDA2Ny4uMDdiMmRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2
LTA4LTAyICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBNb3Jl
IGNsZWFudXAgb2YgTWF0aE1MIG9wZXJhdG9yIHBhcnNpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDMzNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgdW5j
aGFuZ2VkLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU1hdGhNTExlbmd0aCk6IERlbGV0ZWQuIFRoaXMg
ZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yLmg6IE1vdmUgc29tZSBsZW5ndGggbWVtYmVycyBmcm9t
CisgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIGFuZCBvdmVycmlkZSB0aGUgYWNjZXNzb3Jz
LiBBbHNvIG92ZXJyaWRlIHVzZU1hdGhPcGVyYXRvcigpIHNpbmNlIGl0IGlzCisgICAgICAgIGFs
d2F5cyB0cnVlIGZvciBhbm9ueW1vdXMgbWZlbmNlZCBvcGVyYXRvcnMuCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dGV4dENvbnRlbnQpOiBObyBuZWVkIHRvIEFTU0VSVCAh
aXNBbm9ueW1vdXMgc2luY2UgdGhpcworICAgICAgICBmdW5jdGlvbiBpcyBvdmVycmlkZW4gYnkg
UmVuZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6aXNJbnZpc2libGVPcGVyYXRvcik6IFVzZSBhIHRlbXBvcmFyeSB2YXJpYWJs
ZSB0byBjYWxsCisgICAgICAgIHRleHRDb250ZW50IG9ubHkgb25jZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpsZWFkaW5nU3BhY2UpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gZGV0ZXJtaW5lIHRoZSBsZWFkaW5nIHNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2UpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJt
aW5lIHRoZSB0cmFpbGluZyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjptaW5TaXplKTogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgbWluIHNw
YWNlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Om1heFNpemUpOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBtYXggc3BhY2UuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKTogVGhpcyBp
cyBub3cgb25seSB1c2VkIHRvIHNldCBtX2lzVmVydGljYWwuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKTogQ2FsbCBtYXhTaXplIGFuZCBtaW5TaXpl
IHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogQ2FsbCBsZWFkaW5nU3BhY2UgYW5kIHRy
YWlsaW5nU3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5
b3V0QmxvY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp1c2VNYXRoT3BlcmF0b3IpOiBSZW1vdmUgdGhlIGNhc2UgZm9yIGFub255bW91cyBvcGVyYXRv
cnMgYXMKKyAgICAgICAgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGVyaXZlZCBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludCk6IENhbGwgbGVh
ZGluZ1NwYWNlLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuaDogUmVtb3ZlIGxlbmd0aCBtZW1iZXJzIGFuZCBkZWNsYXJlIGhlbHBlciBmdW5jdGlvbnMK
KyAgICAgICAgdG8gZ2V0IHRoZXNlIGxlbmd0aHMgZnJvbSBNYXRoTUxPcGVyYXRvckVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0TGVhZGluZ1NwYWNl
KTogRGVsZXRlZC4gVGhpcyBpcyBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzZXRUcmFpbGluZ1NwYWNlKTogRGVsZXRlZC4gVGhpcyBpcyBu
byBsb25nZXIgdXNlZC4KKwogMjAxNi0wNy0yOSAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxp
YS5jb20+CiAKICAgICAgICAgTW92ZSBwYXJzaW5nIG9mIG9wZXJhdG9yIGxlbmd0aCBhdHRyaWJ1
dGVzIHRvIE1hdGhNTE9wZXJhdG9yRWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCAzYjViMTYwLi41MzZk
NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcApAQCAtMTczLDIxICsxNzMsNiBAQCBMYXlvdXRVbml0IHRvVXNlclVu
aXRzKGNvbnN0IE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHls
ZSYgcwogICAgIH0KIH0KIAotYm9vbCBwYXJzZU1hdGhNTExlbmd0aChjb25zdCBTdHJpbmcmIHN0
cmluZywgTGF5b3V0VW5pdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Ym9vbCBhbGxvd05lZ2F0aXZlKQotewotICAgIE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCBsZW5ndGgg
PSBNYXRoTUxFbGVtZW50OjpwYXJzZU1hdGhNTExlbmd0aChzdHJpbmcpOwotICAgIGlmIChsZW5n
dGgudHlwZSA9PSBNYXRoTUxFbGVtZW50OjpMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMYXlvdXRVbml0IHZhbHVlID0gdG9Vc2VyVW5pdHMo
bGVuZ3RoLCAqc3R5bGUsIGxlbmd0aFZhbHVlKTsKLQotICAgIGlmICghYWxsb3dOZWdhdGl2ZSAm
JiB2YWx1ZSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxlbmd0aFZhbHVlID0g
dmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1M
VGFibGU6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKICAgICAvLyBCeSBkZWZhdWx0IHRo
ZSB2ZXJ0aWNhbCBjZW50ZXIgb2YgPG10YWJsZT4gaXMgYWxpZ25lZCBvbiB0aGUgbWF0aCBheGlz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oCmluZGV4IGRhYzc3NmEuLmI4Yjc1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKQEAgLTExNCw4ICsxMTQsNiBA
QCBwcml2YXRlOgogICAgIFJlZjxNYXRoTUxTdHlsZT4gbV9tYXRoTUxTdHlsZTsKIH07CiAKLS8v
IFBhcnNpbmcgZnVuY3Rpb25zIGZvciBNYXRoTUwgTGVuZ3RoIHZhbHVlcwotYm9vbCBwYXJzZU1h
dGhNTExlbmd0aChjb25zdCBTdHJpbmcmLCBMYXlvdXRVbml0JiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBib29sIGFsbG93TmVnYXRpdmUgPSB0cnVlKTsKIExheW91dFVuaXQgdG9Vc2VyVW5pdHMoY29u
c3QgTWF0aE1MRWxlbWVudDo6TGVuZ3RoJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBMYXlv
dXRVbml0JiByZWZlcmVuY2VWYWx1ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
T3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
RmVuY2VkT3BlcmF0b3IuaAppbmRleCBkZTVmZTY3Li42MjliM2VmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWRP
cGVyYXRvci5oCkBAIC00MSw5ICs0MSwyMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJN
YXRoTUxGZW5jZWRPcGVyYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
b2lkIHNldE9wZXJhdG9yUHJvcGVydGllcygpIGZpbmFsOwogICAgIFVDaGFyIHRleHRDb250ZW50
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQorICAgIExheW91dFVuaXQg
bGVhZGluZ1NwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sZWFkaW5nU3BhY2U7IH0KKyAg
ICBMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RyYWls
aW5nU3BhY2U7IH0KKyAgICBMYXlvdXRVbml0IG1pblNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX21pblNpemU7IH0KKyAgICBMYXlvdXRVbml0IG1heFNpemUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX21heFNpemU7IH0KICAgICBib29sIGhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkZsYWcgZmxhZykgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vcGVyYXRvckZs
YWdzICYgZmxhZzsgfQogCisgICAgLy8gV2UgYWx3YXlzIHVzZSB0aGUgTWF0aE9wZXJhdG9yIGNs
YXNzIGZvciBhbm9ueW1vdXMgbWZlbmNlZCBvcGVyYXRvcnMsIHNpbmNlIHRoZXkgZG8gbm90IGhh
dmUgdGV4dCBjb250ZW50IGluIHRoZSBET00uCisgICAgYm9vbCB1c2VNYXRoT3BlcmF0b3IoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKICAgICBVQ2hhciBtX3RleHRDb250ZW50IHsg
MCB9OworICAgIExheW91dFVuaXQgbV9sZWFkaW5nU3BhY2U7CisgICAgTGF5b3V0VW5pdCBtX3Ry
YWlsaW5nU3BhY2U7CisgICAgTGF5b3V0VW5pdCBtX21pblNpemU7CisgICAgTGF5b3V0VW5pdCBt
X21heFNpemU7CiAgICAgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGb3JtIG1fb3BlcmF0b3JG
b3JtOwogICAgIHVuc2lnbmVkIHNob3J0IG1fb3BlcmF0b3JGbGFnczsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCmluZGV4IDM1OTAzMjMuLjI4ZWQ5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC02NSwzMyAr
NjUsNTUgQEAgTWF0aE1MT3BlcmF0b3JFbGVtZW50JiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZWxl
bWVudCgpIGNvbnN0CiAKIFVDaGFyIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0ZXh0Q29udGVudCgp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFpc0Fub255bW91cygpKTsKICAgICByZXR1cm4gZWxlbWVu
dCgpLm9wZXJhdG9yVGV4dCgpOwogfQogCitib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjppc0lu
dmlzaWJsZU9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgZm9sbG93aW5nIG9wZXJhdG9y
cyBhcmUgaW52aXNpYmxlOiBVKzIwNjEgRlVOQ1RJT04gQVBQTElDQVRJT04sIFUrMjA2MiBJTlZJ
U0lCTEUgVElNRVMsIFUrMjA2MyBJTlZJU0lCTEUgU0VQQVJBVE9SLCBVKzIwNjQgSU5WSVNJQkxF
IFBMVVMuCisgICAgVUNoYXIgY2hhcmFjdGVyID0gdGV4dENvbnRlbnQoKTsKKyAgICByZXR1cm4g
MHgyMDYxIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMHgyMDY0OworfQorCiBib29sIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpGbGFnIGZsYWcpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGVsZW1lbnQoKS5oYXNQcm9wZXJ0
eShmbGFnKTsKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9w
ZXJ0aWVzKCkKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmxlYWRpbmdTcGFjZSgp
IGNvbnN0CiB7Ci0gICAgLy8gV2UgZGV0ZXJtaW5lIHRoZSBzdHJldGNoIGRpcmVjdGlvbiAoZGVm
YXVsdCBpcyB2ZXJ0aWNhbCkuCi0gICAgbV9pc1ZlcnRpY2FsID0gTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5Ojppc1ZlcnRpY2FsKHRleHRDb250ZW50KCkpOwotCiAgICAgLy8gRklYTUU6IE5lZ2F0
aXZlIGxlYWRpbmcgc3BhY2VzIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzEyNDgzMCkuCi0gICAgbV9sZWFkaW5nU3BhY2UgPSB0b1VzZXJVbml0cyhlbGVtZW50KCku
ZGVmYXVsdExlYWRpbmdTcGFjZSgpLCBzdHlsZSgpLCAwKTsKLSAgICBtX2xlYWRpbmdTcGFjZSA9
IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHRvVXNlclVuaXRzKGVsZW1lbnQoKS5sZWFkaW5nU3Bh
Y2UoKSwgc3R5bGUoKSwgbV9sZWFkaW5nU3BhY2UpKTsKKyAgICBMYXlvdXRVbml0IGxlYWRpbmdT
cGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS5kZWZhdWx0TGVhZGluZ1NwYWNlKCksIHN0eWxl
KCksIDApOworICAgIGxlYWRpbmdTcGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS5sZWFkaW5n
U3BhY2UoKSwgc3R5bGUoKSwgbGVhZGluZ1NwYWNlKTsKKyAgICByZXR1cm4gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgbGVhZGluZ1NwYWNlKTsKK30KIAorTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dHJhaWxpbmdTcGFjZSgpIGNvbnN0Cit7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZl
IHRyYWlsaW5nIHNwYWNlcyBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL3dlYmtpdC5vcmcv
Yi8xMjQ4MzApLgotICAgIG1fdHJhaWxpbmdTcGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS5k
ZWZhdWx0VHJhaWxpbmdTcGFjZSgpLCBzdHlsZSgpLCAwKTsKLSAgICBtX3RyYWlsaW5nU3BhY2Ug
PSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCB0b1VzZXJVbml0cyhlbGVtZW50KCkudHJhaWxpbmdT
cGFjZSgpLCBzdHlsZSgpLCBtX3RyYWlsaW5nU3BhY2UpKTsKKyAgICBMYXlvdXRVbml0IHRyYWls
aW5nU3BhY2UgPSB0b1VzZXJVbml0cyhlbGVtZW50KCkuZGVmYXVsdFRyYWlsaW5nU3BhY2UoKSwg
c3R5bGUoKSwgMCk7CisgICAgdHJhaWxpbmdTcGFjZSA9IHRvVXNlclVuaXRzKGVsZW1lbnQoKS50
cmFpbGluZ1NwYWNlKCksIHN0eWxlKCksIHRyYWlsaW5nU3BhY2UpOworICAgIHJldHVybiBzdGQ6
Om1heDxMYXlvdXRVbml0PigwLCB0cmFpbGluZ1NwYWNlKTsKK30KIAotICAgIG1fbWluU2l6ZSA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIERlZmF1bHQgbWluc2l6ZSBpcyAiMWVt
Ii4KLSAgICBtX21pblNpemUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCB0b1VzZXJVbml0cyhl
bGVtZW50KCkubWluU2l6ZSgpLCBzdHlsZSgpLCBtX21pblNpemUpKTsKK0xheW91dFVuaXQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6Om1pblNpemUoKSBjb25zdAoreworICAgIExheW91dFVuaXQgbWlu
U2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIERlZmF1bHQgbWluc2l6ZSBp
cyAiMWVtIi4KKyAgICBtaW5TaXplID0gdG9Vc2VyVW5pdHMoZWxlbWVudCgpLm1pblNpemUoKSwg
c3R5bGUoKSwgbWluU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIG1p
blNpemUpOworfQogCi0gICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsgLy8gRGVm
YXVsdCBtYXhzaXplIGlzICJpbmZpbml0eSIuCi0gICAgbV9tYXhTaXplID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgdG9Vc2VyVW5pdHMoZWxlbWVudCgpLm1heFNpemUoKSwgc3R5bGUoKSwgbV9t
YXhTaXplKSk7CitMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjptYXhTaXplKCkgY29u
c3QKK3sKKyAgICBMYXlvdXRVbml0IG1heFNpemUgPSBpbnRNYXhGb3JMYXlvdXRVbml0OyAvLyBE
ZWZhdWx0IG1heHNpemUgaXMgImluZmluaXR5Ii4KKyAgICBtYXhTaXplID0gdG9Vc2VyVW5pdHMo
ZWxlbWVudCgpLm1heFNpemUoKSwgc3R5bGUoKSwgbWF4U2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6
bWF4PExheW91dFVuaXQ+KDAsIG1heFNpemUpOworfQorCit2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQoreworICAgIC8vIFdlIGRldGVybWluZSB0aGUg
c3RyZXRjaCBkaXJlY3Rpb24gKGRlZmF1bHQgaXMgdmVydGljYWwpLgorICAgIG1faXNWZXJ0aWNh
bCA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6aXNWZXJ0aWNhbCh0ZXh0Q29udGVudCgpKTsK
IH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgaGVp
Z2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCkBAIC0xMTgs
MTAgKzE0MCwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5b3V0
VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0CiAgICAgTGF5b3V0VW5pdCBzaXpl
ID0gc3RyZXRjaFNpemUoKTsKICAgICBmbG9hdCBhc3BlY3QgPSAxLjA7CiAgICAgaWYgKHNpemUg
PiAwKSB7Ci0gICAgICAgIGlmIChzaXplIDwgbV9taW5TaXplKQotICAgICAgICAgICAgYXNwZWN0
ID0gZmxvYXQobV9taW5TaXplKSAvIHNpemU7Ci0gICAgICAgIGVsc2UgaWYgKG1fbWF4U2l6ZSA8
IHNpemUpCi0gICAgICAgICAgICBhc3BlY3QgPSBmbG9hdChtX21heFNpemUpIC8gc2l6ZTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBtaW5TaXplVmFsdWUgPSBtaW5TaXplKCk7CisgICAgICAgIGlmIChz
aXplIDwgbWluU2l6ZVZhbHVlKQorICAgICAgICAgICAgYXNwZWN0ID0gbWluU2l6ZVZhbHVlLnRv
RmxvYXQoKSAvIHNpemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTGF5b3V0VW5pdCBt
YXhTaXplVmFsdWUgPSBtYXhTaXplKCk7CisgICAgICAgICAgICBpZiAobWF4U2l6ZVZhbHVlIDwg
c2l6ZSkKKyAgICAgICAgICAgICAgICBhc3BlY3QgPSBtYXhTaXplVmFsdWUudG9GbG9hdCgpIC8g
c2l6ZTsKKyAgICAgICAgfQogICAgIH0KICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
ICo9IGFzcGVjdDsKICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgKj0gYXNwZWN0OwpA
QCAtMTc4LDcgKzIwNCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkKIAogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQg
YmUgYWRkZWQgdG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9wZXJhdG9yIChodHRwczovL3dlYmtp
dC5vcmcvYi8xMjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgb25seSBi
ZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93d3cudzMub3Jn
L1RSL01hdGhNTC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCi0gICAgcHJlZmVycmVk
V2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIHByZWZlcnJlZFdpZHRoICsgbV90cmFpbGluZ1NwYWNl
OworICAgIHByZWZlcnJlZFdpZHRoID0gbGVhZGluZ1NwYWNlKCkgKyBwcmVmZXJyZWRXaWR0aCAr
IHRyYWlsaW5nU3BhY2UoKTsKIAogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aDsKIApAQCAtMTkyLDIxICsy
MTgsMjQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2cKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRy
ZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBMYXlvdXRV
bml0IGxlYWRpbmdTcGFjZVZhbHVlID0gbGVhZGluZ1NwYWNlKCk7CisgICAgTGF5b3V0VW5pdCB0
cmFpbGluZ1NwYWNlVmFsdWUgPSB0cmFpbGluZ1NwYWNlKCk7CisKICAgICBpZiAodXNlTWF0aE9w
ZXJhdG9yKCkpIHsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkKICAgICAgICAgICAgIGNoaWxk
LT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBzZXRMb2dpY2FsV2lkdGgobV9sZWFkaW5nU3Bh
Y2UgKyBtX21hdGhPcGVyYXRvci53aWR0aCgpICsgbV90cmFpbGluZ1NwYWNlKTsKKyAgICAgICAg
c2V0TG9naWNhbFdpZHRoKGxlYWRpbmdTcGFjZVZhbHVlICsgbV9tYXRoT3BlcmF0b3Iud2lkdGgo
KSArIHRyYWlsaW5nU3BhY2VWYWx1ZSk7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobV9tYXRo
T3BlcmF0b3IuYXNjZW50KCkgKyBtX21hdGhPcGVyYXRvci5kZXNjZW50KCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFdlIGZpcnN0IGRvIHRoZSBub3JtYWwgbGF5b3V0IHdpdGhvdXQgc3Bh
Y2luZy4KICAgICAgICAgcmVjb21wdXRlTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVu
aXQgd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgc2V0TG9naWNhbFdpZHRoKHdpZHRo
IC0gbV9sZWFkaW5nU3BhY2UgLSBtX3RyYWlsaW5nU3BhY2UpOworICAgICAgICBzZXRMb2dpY2Fs
V2lkdGgod2lkdGggLSBsZWFkaW5nU3BhY2VWYWx1ZSAtIHRyYWlsaW5nU3BhY2VWYWx1ZSk7CiAg
ICAgICAgIFJlbmRlck1hdGhNTFRva2VuOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxkcmVuLCBw
YWdlTG9naWNhbEhlaWdodCk7CiAgICAgICAgIHNldExvZ2ljYWxXaWR0aCh3aWR0aCk7CiAKICAg
ICAgICAgLy8gV2UgdGhlbiBtb3ZlIHRoZSBjaGlsZHJlbiB0byB0YWtlIHNwYWNpbmcgaW50byBh
Y2NvdW50LgotICAgICAgICBMYXlvdXRQb2ludCBob3Jpem9udGFsU2hpZnQoc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBMVFIgPyBtX2xlYWRpbmdTcGFjZSA6IC1tX2xlYWRpbmdTcGFjZSwgMCk7Cisg
ICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxTaGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09
IExUUiA/IGxlYWRpbmdTcGFjZVZhbHVlIDogLWxlYWRpbmdTcGFjZVZhbHVlLCAwKTsKICAgICAg
ICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nQm94KCkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hp
bGQtPmxvY2F0aW9uKCkgKyBob3Jpem9udGFsU2hpZnQpOwogICAgIH0KQEAgLTI2MCw4ICsyODks
NyBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1c2VNYXRoT3BlcmF0b3IoKSBjb25zdAog
ICAgIC8vIFdlIHVzZSB0aGUgTWF0aE9wZXJhdG9yIGNsYXNzIHRvIGhhbmRsZSB0aGUgZm9sbG93
aW5nIGNhc2VzOgogICAgIC8vIDEpIFN0cmV0Y2h5IGFuZCBsYXJnZSBvcGVyYXRvcnMsIHNpbmNl
IHRoZXkgcmVxdWlyZSBzcGVjaWFsIHBhaW50aW5nLgogICAgIC8vIDIpIFRoZSBtaW51cyBzaWdu
LCBzaW5jZSBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbSBhIGh5cGhlbiBpbiB0aGUgRE9NLgotICAg
IC8vIDMpIFRoZSBhbm9ueW1vdXMgb3BlcmF0b3JzIGNyZWF0ZWQgYnkgbWZlbmNlZCwgc2luY2Ug
dGhleSBkbyBub3QgaGF2ZSB0ZXh0IGNvbnRlbnQgaW4gdGhlIERPTS4KLSAgICByZXR1cm4gc2hv
dWxkQWxsb3dTdHJldGNoaW5nKCkgfHwgdGV4dENvbnRlbnQoKSA9PSBtaW51c1NpZ24gfHwgaXNB
bm9ueW1vdXMoKTsKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgfHwgdGV4dENv
bnRlbnQoKSA9PSBtaW51c1NpZ247CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCkBAIC0yOTMsNyArMzIxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFp
bnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZz
ZXQgKyBsb2NhdGlvbigpOwotICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbV9sZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5nU3BhY2UsIDAp
OworICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbGVhZGluZ1NwYWNlKCkgOiB0cmFpbGluZ1NwYWNlKCksIDApOwogCiAgICAgLy8gQ2Vu
dGVyIGhvcml6b250YWwgb3BlcmF0b3JzLgogICAgIGlmICghbV9pc1ZlcnRpY2FsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oCmluZGV4IDk0MDE0OWIuLjQ0ZTY3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKQEAgLTYxLDEyICs2MSwx
MyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZWJ1aWxkVG9rZW5Db250ZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllcygpOworICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBsZWFkaW5nU3BhY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQg
dHJhaWxpbmdTcGFjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtaW5TaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IG1heFNpemUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgdXNlTWF0aE9wZXJhdG9yKCkgY29uc3Q7CiAKICAgICBib29sIG1faXNWZXJ0aWNh
bCB7IHRydWUgfTsKLSAgICBMYXlvdXRVbml0IG1fbGVhZGluZ1NwYWNlOwotICAgIExheW91dFVu
aXQgbV90cmFpbGluZ1NwYWNlOwotICAgIExheW91dFVuaXQgbV9taW5TaXplOwotICAgIExheW91
dFVuaXQgbV9tYXhTaXplOwogCiBwcml2YXRlOgogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwpAQCAtNzQs
MjAgKzc1LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKICAgICB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgZmluYWw7CiAKLSAgICB2
b2lkIHNldExlYWRpbmdTcGFjZShMYXlvdXRVbml0IGxlYWRpbmdTcGFjZSkgeyBtX2xlYWRpbmdT
cGFjZSA9IGxlYWRpbmdTcGFjZTsgfQotICAgIHZvaWQgc2V0VHJhaWxpbmdTcGFjZShMYXlvdXRV
bml0IHRyYWlsaW5nU3BhY2UpIHsgbV90cmFpbGluZ1NwYWNlID0gdHJhaWxpbmdTcGFjZTsgfQot
CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzQW5v
bnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255bW91cykiIDogIlJlbmRlck1h
dGhNTE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNl
bGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmlu
dFJlY3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICAvLyBUaGUgZm9sbG93aW5nIG9wZXJhdG9ycyBhcmUg
aW52aXNpYmxlOiBVKzIwNjEgRlVOQ1RJT04gQVBQTElDQVRJT04sIFUrMjA2MiBJTlZJU0lCTEUg
VElNRVMsIFUrMjA2MyBJTlZJU0lCTEUgU0VQQVJBVE9SLCBVKzIwNjQgSU5WSVNJQkxFIFBMVVMu
Ci0gICAgYm9vbCBpc0ludmlzaWJsZU9wZXJhdG9yKCkgeyByZXR1cm4gMHgyMDYxIDw9IHRleHRD
b250ZW50KCkgJiYgdGV4dENvbnRlbnQoKSA8PSAweDIwNjQ7IH0KKyAgICBib29sIGlzSW52aXNp
YmxlT3BlcmF0b3IoKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdCBmaW5hbDsKICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hl
ZE9wZXJhdG9yKCkgZmluYWwgeyByZXR1cm4gdGhpczsgfQogCiAgICAgYm9vbCBzaG91bGRBbGxv
d1N0cmV0Y2hpbmcoKSBjb25zdDsKLSAgICBib29sIHVzZU1hdGhPcGVyYXRvcigpIGNvbnN0Owog
CiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFN0cmV0Y2hlZE9wZXJhdG9yU2hpZnQoKSBjb25zdDsK
IAotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285126</attachid>
            <date>2016-08-02 12:47:02 -0700</date>
            <delta_ts>2016-08-02 12:47:02 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>160336-ews.patch</filename>
            <type>text/plain</type>
            <size>23752</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmODBkNWYwLi45NmMwNTE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgt
MDIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgIE1vdmUgcGFy
c2luZyBvZiBvcGVyYXRvciBsZW5ndGggYXR0cmlidXRlcyB0byBNYXRoTUxPcGVyYXRvckVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDMw
MQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogbWF0aG1s
L3ByZXNlbnRhdGlvbi9zdHJldGNoeS1taW5zaXplLW1heHNpemUtZXhwZWN0ZWQuaHRtbDogVXBk
YXRlIHRoZSB0ZXN0IGZvciBuZWdhdGl2ZQorICAgICAgICBtaW5zaXplIGFuZCBtYXhzaXplIHRv
IGFsaWduIG9uIHRoZSBiZWhhdmlvciBzdWdnZXN0ZWQgaW4gdGhlIE1hdGhNTCByZWNvbW1lbmRh
dGlvbi4KKyAgICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL3N0cmV0Y2h5LW1pbnNpemUtbWF4
c2l6ZS5odG1sOiBEaXR0by4KKwogMjAxNi0wOC0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFtXZWJJRExdIEltcGxlbWVudCBvdmVybG9hZCByZXNvbHV0aW9u
IGFsZ29yaXRobQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9z
dHJldGNoeS1taW5zaXplLW1heHNpemUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL21hdGht
bC9wcmVzZW50YXRpb24vc3RyZXRjaHktbWluc2l6ZS1tYXhzaXplLWV4cGVjdGVkLmh0bWwKaW5k
ZXggYzk5ZjJmOC4uOGU5ZGEwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNl
bnRhdGlvbi9zdHJldGNoeS1taW5zaXplLW1heHNpemUtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL3N0cmV0Y2h5LW1pbnNpemUtbWF4c2l6ZS1leHBl
Y3RlZC5odG1sCkBAIC00MywxMyArNDMsMTMgQEAKIAogICAgICAgPG1hdGg+CiAgICAgICAgIDxt
cm93PgotICAgICAgICAgIDxtbyBzeW1tZXRyaWM9ImZhbHNlIj58PC9tbz4KKyAgICAgICAgICA8
bW8gc3ltbWV0cmljPSJmYWxzZSIgbWluc2l6ZT0iMGVtIj58PC9tbz4KICAgICAgICAgICA8bXNw
YWNlIGhlaWdodD0iNGVtIiBkZXB0aD0iNGVtIi8+CiAgICAgICAgIDwvbXJvdz4KICAgICAgIDwv
bWF0aD4KICAgICAgIDxtYXRoPgogICAgICAgICA8bXJvdz4KLSAgICAgICAgICA8bW8gc3ltbWV0
cmljPSJmYWxzZSI+fDwvbW8+CisgICAgICAgICAgPG1vIHN5bW1ldHJpYz0iZmFsc2UiIG1heHNp
emU9IjBlbSI+fDwvbW8+CiAgICAgICAgICAgPG1zcGFjZSBoZWlnaHQ9IjRlbSIgZGVwdGg9IjRl
bSIvPgogICAgICAgICA8L21yb3c+CiAgICAgICA8L21hdGg+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL3N0cmV0Y2h5LW1pbnNpemUtbWF4c2l6ZS5odG1sIGIv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9zdHJldGNoeS1taW5zaXplLW1heHNpemUu
aHRtbAppbmRleCAwNDZhY2YwLi40ODhkZmQ5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbWF0
aG1sL3ByZXNlbnRhdGlvbi9zdHJldGNoeS1taW5zaXplLW1heHNpemUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL3N0cmV0Y2h5LW1pbnNpemUtbWF4c2l6ZS5odG1s
CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIDwvbXJvdz4KICAgICAgIDwvbWF0aD4KIAotICAg
ICAgPCEtLSBXZSB2ZXJpZnkgdGhhdCBuZWdhdGl2ZSB2YWx1ZXMgYXJlIGlnbm9yZWQuIC0tPgor
ICAgICAgPCEtLSBXZSB2ZXJpZnkgdGhhdCBuZWdhdGl2ZSB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMg
MC4gLS0+CiAgICAgICA8bWF0aD4KICAgICAgICAgPG1yb3c+CiAgICAgICAgICAgPG1vIHN5bW1l
dHJpYz0iZmFsc2UiIG1pbnNpemU9Ii01ZW0iPnw8L21vPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI1YWMxZWIu
LjgyZmE4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxNi0wOC0wMiAgRnJlZGVy
aWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW9yZSBjbGVhbnVwIG9mIE1h
dGhNTCBvcGVyYXRvciBwYXJzaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjAzMzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VNYXRoTUxMZW5ndGgpOiBEZWxldGVkLiBUaGlzIGZ1bmN0aW9uIGlzIG5v
IGxvbmdlciB1c2VkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWRPcGVyYXRvci5oOiBNb3ZlIHNvbWUgbGVuZ3RoIG1lbWJlcnMgZnJvbQorICAgICAgICBSZW5k
ZXJNYXRoTUxPcGVyYXRvciBhbmQgb3ZlcnJpZGUgdGhlIGFjY2Vzc29ycy4gQWxzbyBvdmVycmlk
ZSB1c2VNYXRoT3BlcmF0b3IoKSBzaW5jZSBpdCBpcworICAgICAgICBhbHdheXMgdHJ1ZSBmb3Ig
YW5vbnltb3VzIG1mZW5jZWQgb3BlcmF0b3JzLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnRleHRDb250ZW50KTogTm8gbmVlZCB0byBBU1NFUlQgIWlzQW5vbnltb3VzIHNp
bmNlIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gaXMgb3ZlcnJpZGVuIGJ5IFJlbmRlck1hdGhNTEZl
bmNlZE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Omlz
SW52aXNpYmxlT3BlcmF0b3IpOiBVc2UgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gY2FsbAorICAg
ICAgICB0ZXh0Q29udGVudCBvbmx5IG9uY2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6bGVhZGluZ1NwYWNlKTogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0
aGUgbGVhZGluZyBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp0cmFpbGluZ1NwYWNlKTogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgdHJhaWxp
bmcgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bWluU2l6
ZSk6IEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIG1pbiBzcGFjZS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjptYXhTaXplKTogSGVscGVyIGZ1bmN0aW9u
IHRvIGRldGVybWluZSB0aGUgbWF4IHNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yUHJvcGVydGllcyk6IFRoaXMgaXMgbm93IG9ubHkgdXNl
ZCB0byBzZXQgbV9pc1ZlcnRpY2FsLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OnN0cmV0Y2hUbyk6IENhbGwgbWF4U2l6ZSBhbmQgbWluU2l6ZSB3aGVuIG5lY2Vzc2Fy
eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyk6IENhbGwgbGVhZGluZ1NwYWNlIGFuZCB0cmFpbGluZ1NwYWNlLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmxheW91dEJsb2NrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXNlTWF0aE9wZXJh
dG9yKTogUmVtb3ZlIHRoZSBjYXNlIGZvciBhbm9ueW1vdXMgb3BlcmF0b3JzIGFzCisgICAgICAg
IHRoaXMgaXMgbm93IGhhbmRsZWQgaW4gdGhlIGRlcml2ZWQgY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQpOiBDYWxsIGxlYWRpbmdTcGFjZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6IFJlbW92ZSBs
ZW5ndGggbWVtYmVycyBhbmQgZGVjbGFyZSBoZWxwZXIgZnVuY3Rpb25zCisgICAgICAgIHRvIGdl
dCB0aGVzZSBsZW5ndGhzIGZyb20gTWF0aE1MT3BlcmF0b3JFbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldExlYWRpbmdTcGFjZSk6IERlbGV0ZWQuIFRo
aXMgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c2V0VHJhaWxpbmdTcGFjZSk6IERlbGV0ZWQuIFRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQu
CisKKzIwMTYtMDgtMDIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAg
ICAgIE1vdmUgcGFyc2luZyBvZiBvcGVyYXRvciBsZW5ndGggYXR0cmlidXRlcyB0byBNYXRoTUxP
cGVyYXRvckVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDMwMQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgIFdlIG1vdmUgcGFyc2luZyBvZiBvcGVyYXRvciBhdHRyaWJ1dGVzIGxzcGFjZSwgcnNwYWNl
IG1pbnNpemUsIG1heHNpemUgaW50byB0aGUgY2xhc3MKKyAgICAgICAgTWF0aE1MT3BlcmF0b3JF
bGVtZW50LiBXZSByZWx5IG9uIHRoZSBleGlzdGluZyBNYXRoTUxFbGVtZW50OjpMZW5ndGggc3Ry
dWN0dXJlIGFuZCBleHBhbmQKKyAgICAgICAgaXQgdG8gaGFuZGxlIHRoZSAiaW5maW5pdHkiIGNh
c2Ugb2YgbWF4c2l6ZSB0aGF0IHdlIGFsd2F5cyByZXNvbHZlIGFzIGludE1heEZvckxheW91dFVu
aXQuCisgICAgICAgIFdlIGFsc28gaW1wcm92ZSB0aGUgcmVzb2x1dGlvbiBvZiBhIG5lZ2F0aXZl
IHZhbHVlIGZvciBtaW5zaXplIGFuZCBtYXhzaXplIHNpbmNlIHRoZSBNYXRoTUwKKyAgICAgICAg
cmVjb21tZW5kYXRpb24gc2F5cyBpdCBzaG91bGQgYmUgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVz
dCB2YWxpZCB2YWx1ZSAod2hpY2ggaXMgemVybykKKyAgICAgICAgaW5zdGVhZCBvZiBpZ25vcmlu
ZyB0aGUgYXR0cmlidXRlIGFuZCB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhpcyBpcyBzaW1p
bGFyIHRvIHIyMDMyODUKKyAgICAgICAgZm9yIG1mcmFjQGxpbmV0aGlja25lc3MuIFdlIGFsc28g
dXBkYXRlIHRoZSBleGlzdGluZyB0ZXN0IGZvciBtaW5zaXplL21heHNpemUgdG8gdGFrZSBpbnRv
CisgICAgICAgIGFjY291bnQgdGhhdCBjaGFuZ2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBh
bHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBtYXRobWwvTWF0
aE1MRWxlbWVudC5oOiBBZGQgYW4gIkluZmluaXR5IiB0eXBlIGZvciBNYXRoTUwgTGVuZ3RoLgor
ICAgICAgICAqIG1hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE1MT3BlcmF0b3JFbGVtZW50OjpsZWFkaW5nU3BhY2UpOiBIZWxwZXIgZnVuY3Rp
b24gdG8gcmV0cmlldmUgdGhlIGNhY2hlZCB2YWx1ZQorICAgICAgICBmb3IgdGhlIGxzcGFjZSBh
dHRyaWJ1dGUsIHBhcnNlIGl0IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhN
TE9wZXJhdG9yRWxlbWVudDo6dHJhaWxpbmdTcGFjZSk6IERpdHRvIGZvciByc3BhY2UuCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoTUxPcGVyYXRvckVsZW1lbnQ6Om1pblNpemUpOiBEaXR0byBmb3Ig
bWluc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTE9wZXJhdG9yRWxlbWVudDo6bWF4U2l6
ZSk6IERpdHRvIGZvciBtYXhzaXplLiBUaGlzIGF0dHJpYnV0ZSBhbHNvIGFjY2VwdHMgdGhlCisg
ICAgICAgICJpbmZpbml0eSIgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxPcGVyYXRv
ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogTWFyayBhdHRyaWJ1dGVzIGRpcnR5LgorICAgICAg
ICAqIG1hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuaDogRGVjbGFyZSBMZW5ndGggbWVtYmVy
cyBhbmQgYWNjZXNzb3JzLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9Vc2VyVW5pdHMpOiBSZXNvbHZlIEluZmlu
aXR5IGFzIGludE1heEZvckxheW91dFVuaXQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKTogV2UgdXNlIHRvVXNlclVuaXRzIHRvIHJl
c29sdmUgdGhlCisgICAgICAgIGxlbmd0aHMuIE5lZ2F0aXZlIG1heHNpemUgYW5kIG1pbnNpemUg
dmFsdWVzIG5vdyBmYWxsYmFjayB0byAwIGluc3RlYWQgb2YgdGhlaXIgZGVmYXVsdAorICAgICAg
ICB2YWx1ZXMuIFdlIGFsc28gcmVtb3ZlIHRoZSAhaXNBbm9ueW1vdXMoKSBjaGVjayBzaW5jZSBz
ZXRPcGVyYXRvclByb3BlcnRpZXMgaXMgb3ZlcnJpZGVuCisgICAgICAgIGluIHRoZSBSZW5kZXJN
YXRoTUxGZW5jZWRPcGVyYXRvciBjbGFzcy4KKwogMjAxNi0wOC0wMiAgRnJlZGVyaWMgV2FuZyAg
PGZyZWQud2FuZ0BmcmVlLmZyPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZXJyb3IgZml4
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKaW5kZXggNWRlMWRkOC4uNGNhYjc2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5oCkBAIC01OSw3ICs1OSw3IEBA
IHB1YmxpYzoKICAgICAvLyBNYXRoTUwgbGVuZ3RocyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL01h
dGhNTDMvY2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzKQogICAgIC8vIFRlWCdzIE1hdGggVW5pdCBp
cyB1c2VkIGludGVybmFsbHkgZm9yIG5hbWVkIHNwYWNlcyAoMSBtdSA9IDEvMTggZW0pLgogICAg
IC8vIFVuaXRsZXNzIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBtdWx0aXBsZSBvZiBhIHJl
ZmVyZW5jZSB2YWx1ZS4KLSAgICBlbnVtIGNsYXNzIExlbmd0aFR5cGUgeyBDbSwgRW0sIEV4LCBJ
biwgTWF0aFVuaXQsIE1tLCBQYXJzaW5nRmFpbGVkLCBQYywgUGVyY2VudGFnZSwgUHQsIFB4LCBV
bml0TGVzcyB9OworICAgIGVudW0gY2xhc3MgTGVuZ3RoVHlwZSB7IENtLCBFbSwgRXgsIEluLCBN
YXRoVW5pdCwgTW0sIFBhcnNpbmdGYWlsZWQsIFBjLCBQZXJjZW50YWdlLCBQdCwgUHgsIFVuaXRM
ZXNzLCBJbmZpbml0eSB9OwogICAgIHN0cnVjdCBMZW5ndGggewogICAgICAgICBMZW5ndGhUeXBl
IHR5cGUgeyBMZW5ndGhUeXBlOjpQYXJzaW5nRmFpbGVkIH07CiAgICAgICAgIGZsb2F0IHZhbHVl
IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9y
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50
LmNwcAppbmRleCBhYzY0NjFhLi44YTg5ZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9t
YXRobWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRo
bWwvTWF0aE1MT3BlcmF0b3JFbGVtZW50LmNwcApAQCAtMTc5LDYgKzE3OSwzNyBAQCBNYXRoTUxF
bGVtZW50OjpMZW5ndGggTWF0aE1MT3BlcmF0b3JFbGVtZW50OjpkZWZhdWx0VHJhaWxpbmdTcGFj
ZSgpCiAgICAgcmV0dXJuIHNwYWNlOwogfQogCitjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgm
IE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6bGVhZGluZ1NwYWNlKCkKK3sKKyAgICByZXR1cm4gY2Fj
aGVkTWF0aE1MTGVuZ3RoKE1hdGhNTE5hbWVzOjpsc3BhY2VBdHRyLCBtX2xlYWRpbmdTcGFjZSk7
Cit9CisKK2NvbnN0IE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCYgTWF0aE1MT3BlcmF0b3JFbGVtZW50
Ojp0cmFpbGluZ1NwYWNlKCkKK3sKKyAgICByZXR1cm4gY2FjaGVkTWF0aE1MTGVuZ3RoKE1hdGhN
TE5hbWVzOjpyc3BhY2VBdHRyLCBtX3RyYWlsaW5nU3BhY2UpOworfQorCitjb25zdCBNYXRoTUxF
bGVtZW50OjpMZW5ndGgmIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6bWluU2l6ZSgpCit7CisgICAg
cmV0dXJuIGNhY2hlZE1hdGhNTExlbmd0aChNYXRoTUxOYW1lczo6bWluc2l6ZUF0dHIsIG1fbWlu
U2l6ZSk7Cit9CisKK2NvbnN0IE1hdGhNTEVsZW1lbnQ6Okxlbmd0aCYgTWF0aE1MT3BlcmF0b3JF
bGVtZW50OjptYXhTaXplKCkKK3sKKyAgICBpZiAobV9tYXhTaXplKQorICAgICAgICByZXR1cm4g
bV9tYXhTaXplLnZhbHVlKCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihNYXRoTUxOYW1lczo6bWF4c2l6ZUF0dHIpOwor
ICAgIGlmICh2YWx1ZSA9PSAiaW5maW5pdHkiKSB7CisgICAgICAgIExlbmd0aCBtYXhzaXplOwor
ICAgICAgICBtYXhzaXplLnR5cGUgPSBMZW5ndGhUeXBlOjpJbmZpbml0eTsKKyAgICAgICAgbV9t
YXhTaXplID0gbWF4c2l6ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9tYXhTaXplID0gcGFyc2VN
YXRoTUxMZW5ndGgodmFsdWUpOworCisgICAgcmV0dXJuIG1fbWF4U2l6ZS52YWx1ZSgpOworfQor
CiB2b2lkIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxk
Q2hhbmdlJiBjaGFuZ2UpCiB7CiAgICAgbV9vcGVyYXRvclRleHQgPSBOdWxsb3B0OwpAQCAtMjEz
LDYgKzI0NCwxNCBAQCB2b2lkIE1hdGhNTE9wZXJhdG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbQogICAgICAgICBtX3Byb3BlcnRp
ZXMuZGlydHlGbGFncyA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6YWxsRmxhZ3M7CiAgICAg
fSBlbHNlIGlmIChhdXRvIGZsYWcgPSBhdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0eUZsYWcobmFtZSkp
CiAgICAgICAgIG1fcHJvcGVydGllcy5kaXJ0eUZsYWdzIHw9IGZsYWcudmFsdWUoKTsKKyAgICBl
bHNlIGlmIChuYW1lID09IGxzcGFjZUF0dHIpCisgICAgICAgIG1fbGVhZGluZ1NwYWNlID0gTnVs
bG9wdDsKKyAgICBlbHNlIGlmIChuYW1lID09IHJzcGFjZUF0dHIpCisgICAgICAgIG1fdHJhaWxp
bmdTcGFjZSA9IE51bGxvcHQ7CisgICAgZWxzZSBpZiAobmFtZSA9PSBtaW5zaXplQXR0cikKKyAg
ICAgICAgbV9taW5TaXplID0gTnVsbG9wdDsKKyAgICBlbHNlIGlmIChuYW1lID09IG1heHNpemVB
dHRyKQorICAgICAgICBtX21heFNpemUgPSBOdWxsb3B0OwogCiAgICAgaWYgKChuYW1lID09IHN0
cmV0Y2h5QXR0ciB8fCBuYW1lID09IGxzcGFjZUF0dHIgfHwgbmFtZSA9PSByc3BhY2VBdHRyIHx8
IG5hbWUgPT0gbW92YWJsZWxpbWl0c0F0dHIpICYmIHJlbmRlcmVyKCkpIHsKICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcigpKS51cGRhdGVGcm9tRWxlbWVu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE9wZXJhdG9yRWxlbWVudC5oCmlu
ZGV4IDNlMjUwZDcuLjFhMzZjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9N
YXRoTUxPcGVyYXRvckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1M
T3BlcmF0b3JFbGVtZW50LmgKQEAgLTQxLDYgKzQxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhh
c1Byb3BlcnR5KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyk7CiAgICAgTGVuZ3RoIGRl
ZmF1bHRMZWFkaW5nU3BhY2UoKTsKICAgICBMZW5ndGggZGVmYXVsdFRyYWlsaW5nU3BhY2UoKTsK
KyAgICBjb25zdCBMZW5ndGgmIGxlYWRpbmdTcGFjZSgpOworICAgIGNvbnN0IExlbmd0aCYgdHJh
aWxpbmdTcGFjZSgpOworICAgIGNvbnN0IExlbmd0aCYgbWluU2l6ZSgpOworICAgIGNvbnN0IExl
bmd0aCYgbWF4U2l6ZSgpOwogCiBwcml2YXRlOgogICAgIE1hdGhNTE9wZXJhdG9yRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYpOwpAQCAtNjgsNiArNzIsMTEg
QEAgcHJpdmF0ZToKICAgICB9OwogICAgIE9wZXJhdG9yUHJvcGVydGllcyBtX3Byb3BlcnRpZXM7
CiAgICAgdm9pZCBjb21wdXRlT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RmxhZyk7CisKKyAgICBPcHRpb25hbDxMZW5ndGg+IG1fbGVhZGluZ1NwYWNlOworICAgIE9wdGlv
bmFsPExlbmd0aD4gbV90cmFpbGluZ1NwYWNlOworICAgIE9wdGlvbmFsPExlbmd0aD4gbV9taW5T
aXplOworICAgIE9wdGlvbmFsPExlbmd0aD4gbV9tYXhTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApp
bmRleCBiMDBjODRiLi41MzZkNDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMTY1LDI3ICsxNjUsMTQgQEAg
TGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgmIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmIHMKICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVZhbHVlICog
bGVuZ3RoLnZhbHVlOwogICAgIGNhc2UgTWF0aE1MRWxlbWVudDo6TGVuZ3RoVHlwZTo6UGFyc2lu
Z0ZhaWxlZDoKICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVZhbHVlOworICAgIGNhc2UgTWF0aE1M
RWxlbWVudDo6TGVuZ3RoVHlwZTo6SW5maW5pdHk6CisgICAgICAgIHJldHVybiBpbnRNYXhGb3JM
YXlvdXRVbml0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gcmVmZXJlbmNlVmFsdWU7CiAgICAgfQogfQogCi1ib29sIHBhcnNlTWF0
aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBMYXlvdXRVbml0JiBsZW5ndGhWYWx1ZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGFsbG93TmVnYXRpdmUpCi17Ci0gICAgTWF0
aE1MRWxlbWVudDo6TGVuZ3RoIGxlbmd0aCA9IE1hdGhNTEVsZW1lbnQ6OnBhcnNlTWF0aE1MTGVu
Z3RoKHN0cmluZyk7Ci0gICAgaWYgKGxlbmd0aC50eXBlID09IE1hdGhNTEVsZW1lbnQ6Okxlbmd0
aFR5cGU6OlBhcnNpbmdGYWlsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExheW91
dFVuaXQgdmFsdWUgPSB0b1VzZXJVbml0cyhsZW5ndGgsICpzdHlsZSwgbGVuZ3RoVmFsdWUpOwot
Ci0gICAgaWYgKCFhbGxvd05lZ2F0aXZlICYmIHZhbHVlIDwgMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgbGVuZ3RoVmFsdWUgPSB2YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
T3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25z
dAogewogICAgIC8vIEJ5IGRlZmF1bHQgdGhlIHZlcnRpY2FsIGNlbnRlciBvZiA8bXRhYmxlPiBp
cyBhbGlnbmVkIG9uIHRoZSBtYXRoIGF4aXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKaW5kZXggZGFjNzc2YS4uYjhiNzVlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suaApAQCAtMTE0LDggKzExNCw2IEBAIHByaXZhdGU6CiAgICAgUmVmPE1hdGhNTFN0eWxl
PiBtX21hdGhNTFN0eWxlOwogfTsKIAotLy8gUGFyc2luZyBmdW5jdGlvbnMgZm9yIE1hdGhNTCBM
ZW5ndGggdmFsdWVzCi1ib29sIHBhcnNlTWF0aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYsIExheW91
dFVuaXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRydWUpOwog
TGF5b3V0VW5pdCB0b1VzZXJVbml0cyhjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgmLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IExheW91dFVuaXQmIHJlZmVyZW5jZVZhbHVlKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvci5oCmluZGV4IGRlNWZlNjcu
LjYyOWIzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yLmgKQEAgLTQxLDkgKzQxLDIwIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgc2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCkgZmlu
YWw7CiAgICAgVUNoYXIgdGV4dENvbnRlbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RleHRD
b250ZW50OyB9CisgICAgTGF5b3V0VW5pdCBsZWFkaW5nU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2xlYWRpbmdTcGFjZTsgfQorICAgIExheW91dFVuaXQgdHJhaWxpbmdTcGFjZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fdHJhaWxpbmdTcGFjZTsgfQorICAgIExheW91dFVuaXQgbWlu
U2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWluU2l6ZTsgfQorICAgIExheW91dFVuaXQg
bWF4U2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWF4U2l6ZTsgfQogICAgIGJvb2wgaGFz
T3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyBmbGFnKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX29wZXJhdG9yRmxhZ3MgJiBmbGFnOyB9CiAKKyAgICAvLyBXZSBhbHdh
eXMgdXNlIHRoZSBNYXRoT3BlcmF0b3IgY2xhc3MgZm9yIGFub255bW91cyBtZmVuY2VkIG9wZXJh
dG9ycywgc2luY2UgdGhleSBkbyBub3QgaGF2ZSB0ZXh0IGNvbnRlbnQgaW4gdGhlIERPTS4KKyAg
ICBib29sIHVzZU1hdGhPcGVyYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwog
ICAgIFVDaGFyIG1fdGV4dENvbnRlbnQgeyAwIH07CisgICAgTGF5b3V0VW5pdCBtX2xlYWRpbmdT
cGFjZTsKKyAgICBMYXlvdXRVbml0IG1fdHJhaWxpbmdTcGFjZTsKKyAgICBMYXlvdXRVbml0IG1f
bWluU2l6ZTsKKyAgICBMYXlvdXRVbml0IG1fbWF4U2l6ZTsKICAgICBNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnk6OkZvcm0gbV9vcGVyYXRvckZvcm07CiAgICAgdW5zaWduZWQgc2hvcnQgbV9vcGVy
YXRvckZsYWdzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggMGY3YTVlZS4uMjhlZDlkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5jcHAKQEAgLTY1LDM2ICs2NSw1NSBAQCBNYXRoTUxPcGVyYXRvckVsZW1lbnQm
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjplbGVtZW50KCkgY29uc3QKIAogVUNoYXIgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnRleHRDb250ZW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWlzQW5vbnlt
b3VzKCkpOwogICAgIHJldHVybiBlbGVtZW50KCkub3BlcmF0b3JUZXh0KCk7CiB9CiAKK2Jvb2wg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmlzSW52aXNpYmxlT3BlcmF0b3IoKSBjb25zdAoreworICAg
IC8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzIGFyZSBpbnZpc2libGU6IFUrMjA2MSBGVU5DVElP
TiBBUFBMSUNBVElPTiwgVSsyMDYyIElOVklTSUJMRSBUSU1FUywgVSsyMDYzIElOVklTSUJMRSBT
RVBBUkFUT1IsIFUrMjA2NCBJTlZJU0lCTEUgUExVUy4KKyAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0
ZXh0Q29udGVudCgpOworICAgIHJldHVybiAweDIwNjEgPD0gY2hhcmFjdGVyICYmIGNoYXJhY3Rl
ciA8PSAweDIwNjQ7Cit9CisKIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6Omhhc09wZXJhdG9y
RmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcgZmxhZykgY29uc3QKIHsKICAgICBy
ZXR1cm4gZWxlbWVudCgpLmhhc1Byb3BlcnR5KGZsYWcpOwogfQogCitMYXlvdXRVbml0IFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpsZWFkaW5nU3BhY2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBO
ZWdhdGl2ZSBsZWFkaW5nIHNwYWNlcyBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL3dlYmtp
dC5vcmcvYi8xMjQ4MzApLgorICAgIExheW91dFVuaXQgbGVhZGluZ1NwYWNlID0gdG9Vc2VyVW5p
dHMoZWxlbWVudCgpLmRlZmF1bHRMZWFkaW5nU3BhY2UoKSwgc3R5bGUoKSwgMCk7CisgICAgbGVh
ZGluZ1NwYWNlID0gdG9Vc2VyVW5pdHMoZWxlbWVudCgpLmxlYWRpbmdTcGFjZSgpLCBzdHlsZSgp
LCBsZWFkaW5nU3BhY2UpOworICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsZWFk
aW5nU3BhY2UpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGlu
Z1NwYWNlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogTmVnYXRpdmUgdHJhaWxpbmcgc3BhY2Vz
IG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyNDgzMCkuCisgICAg
TGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlID0gdG9Vc2VyVW5pdHMoZWxlbWVudCgpLmRlZmF1bHRU
cmFpbGluZ1NwYWNlKCksIHN0eWxlKCksIDApOworICAgIHRyYWlsaW5nU3BhY2UgPSB0b1VzZXJV
bml0cyhlbGVtZW50KCkudHJhaWxpbmdTcGFjZSgpLCBzdHlsZSgpLCB0cmFpbGluZ1NwYWNlKTsK
KyAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgdHJhaWxpbmdTcGFjZSk7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6Om1pblNpemUoKSBjb25zdAoreworICAg
IExheW91dFVuaXQgbWluU2l6ZSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCk7IC8vIERl
ZmF1bHQgbWluc2l6ZSBpcyAiMWVtIi4KKyAgICBtaW5TaXplID0gdG9Vc2VyVW5pdHMoZWxlbWVu
dCgpLm1pblNpemUoKSwgc3R5bGUoKSwgbWluU2l6ZSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4PExh
eW91dFVuaXQ+KDAsIG1pblNpemUpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJh
dG9yOjptYXhTaXplKCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG1heFNpemUgPSBpbnRNYXhG
b3JMYXlvdXRVbml0OyAvLyBEZWZhdWx0IG1heHNpemUgaXMgImluZmluaXR5Ii4KKyAgICBtYXhT
aXplID0gdG9Vc2VyVW5pdHMoZWxlbWVudCgpLm1heFNpemUoKSwgc3R5bGUoKSwgbWF4U2l6ZSk7
CisgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIG1heFNpemUpOworfQorCiB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByb3BlcnRpZXMoKQogewogICAgIC8v
IFdlIGRldGVybWluZSB0aGUgc3RyZXRjaCBkaXJlY3Rpb24gKGRlZmF1bHQgaXMgdmVydGljYWwp
LgogICAgIG1faXNWZXJ0aWNhbCA9IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6aXNWZXJ0aWNh
bCh0ZXh0Q29udGVudCgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgd2l0aCB0aGUgZGVmYXVsdCB2
YWx1ZXMuCi0gICAgbV9sZWFkaW5nU3BhY2UgPSB0b1VzZXJVbml0cyhlbGVtZW50KCkuZGVmYXVs
dExlYWRpbmdTcGFjZSgpLCBzdHlsZSgpLCAwKTsKLSAgICBtX3RyYWlsaW5nU3BhY2UgPSB0b1Vz
ZXJVbml0cyhlbGVtZW50KCkuZGVmYXVsdFRyYWlsaW5nU3BhY2UoKSwgc3R5bGUoKSwgMCk7Ci0g
ICAgbV9taW5TaXplID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNpemUoKTsgLy8gVGhpcyBzZXRz
IG1pbnNpemUgdG8gIjFlbSIuCi0gICAgbV9tYXhTaXplID0gaW50TWF4Rm9yTGF5b3V0VW5pdDsg
Ly8gVGhpcyBzZXRzIG1heHNpemUgdG8gImluZmluaXR5Ii4KLQotICAgIGlmICghaXNBbm9ueW1v
dXMoKSkgewotICAgICAgICAvLyBGaW5hbGx5LCB3ZSBtYWtlIHRoZSBhdHRyaWJ1dGUgdmFsdWVz
IG92ZXJyaWRlIHRoZSBkZWZhdWx0LgotICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50
KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihNYXRoTUxOYW1lczo6bHNwYWNlQXR0
ciksIG1fbGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFsc2UpOyAvLyBGSVhNRTogTmVnYXRpdmUg
bGVhZGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KLSAgICAgICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oTWF0aE1MTmFtZXM6OnJzcGFj
ZUF0dHIpLCBtX3RyYWlsaW5nU3BhY2UsICZzdHlsZSgpLCBmYWxzZSk7IC8vIEZJWE1FOiBOZWdh
dGl2ZSB0cmFpbGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KLQotICAgICAgICBwYXJzZU1hdGhNTExl
bmd0aChlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihNYXRoTUxOYW1l
czo6bWluc2l6ZUF0dHIpLCBtX21pblNpemUsICZzdHlsZSgpLCBmYWxzZSk7Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbWF4c2l6ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKE1hdGhNTE5hbWVzOjptYXhzaXplQXR0cik7Ci0gICAgICAgIGlmIChtYXhz
aXplICE9ICJpbmZpbml0eSIpCi0gICAgICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChtYXhzaXpl
LCBtX21heFNpemUsICZzdHlsZSgpLCBmYWxzZSk7Ci0gICAgfQogfQogCiB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5b3V0VW5pdCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBM
YXlvdXRVbml0IGRlcHRoQmVsb3dCYXNlbGluZSkKQEAgLTEyMSwxMCArMTQwLDE0IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFz
ZWxpbmUsIExheW91dFVuaXQKICAgICBMYXlvdXRVbml0IHNpemUgPSBzdHJldGNoU2l6ZSgpOwog
ICAgIGZsb2F0IGFzcGVjdCA9IDEuMDsKICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgaWYg
KHNpemUgPCBtX21pblNpemUpCi0gICAgICAgICAgICBhc3BlY3QgPSBmbG9hdChtX21pblNpemUp
IC8gc2l6ZTsKLSAgICAgICAgZWxzZSBpZiAobV9tYXhTaXplIDwgc2l6ZSkKLSAgICAgICAgICAg
IGFzcGVjdCA9IGZsb2F0KG1fbWF4U2l6ZSkgLyBzaXplOworICAgICAgICBMYXlvdXRVbml0IG1p
blNpemVWYWx1ZSA9IG1pblNpemUoKTsKKyAgICAgICAgaWYgKHNpemUgPCBtaW5TaXplVmFsdWUp
CisgICAgICAgICAgICBhc3BlY3QgPSBtaW5TaXplVmFsdWUudG9GbG9hdCgpIC8gc2l6ZTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1heFNpemVWYWx1ZSA9IG1heFNp
emUoKTsKKyAgICAgICAgICAgIGlmIChtYXhTaXplVmFsdWUgPCBzaXplKQorICAgICAgICAgICAg
ICAgIGFzcGVjdCA9IG1heFNpemVWYWx1ZS50b0Zsb2F0KCkgLyBzaXplOworICAgICAgICB9CiAg
ICAgfQogICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwogICAgIG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSAqPSBhc3BlY3Q7CkBAIC0xODEsNyArMjA0LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQogCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hv
bGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyNDgzMSkuCiAg
ICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVy
aGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIz
Lmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KLSAgICBwcmVmZXJyZWRXaWR0aCA9IG1fbGVhZGluZ1Nw
YWNlICsgcHJlZmVycmVkV2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7CisgICAgcHJlZmVycmVkV2lk
dGggPSBsZWFkaW5nU3BhY2UoKSArIHByZWZlcnJlZFdpZHRoICsgdHJhaWxpbmdTcGFjZSgpOwog
CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IHByZWZlcnJlZFdpZHRoOwogCkBAIC0xOTUsMjEgKzIxOCwyNCBAQCB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQgcGFnZUxvZwogICAgIGlmICghcmVsYXlvdXRDaGlsZHJlbiAmJiBzaW1wbGlmaWVkTGF5
b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIExheW91dFVuaXQgbGVhZGluZ1NwYWNlVmFs
dWUgPSBsZWFkaW5nU3BhY2UoKTsKKyAgICBMYXlvdXRVbml0IHRyYWlsaW5nU3BhY2VWYWx1ZSA9
IHRyYWlsaW5nU3BhY2UoKTsKKwogICAgIGlmICh1c2VNYXRoT3BlcmF0b3IoKSkgewogICAgICAg
ICBmb3IgKGF1dG8gY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7
Ci0gICAgICAgIHNldExvZ2ljYWxXaWR0aChtX2xlYWRpbmdTcGFjZSArIG1fbWF0aE9wZXJhdG9y
LndpZHRoKCkgKyBtX3RyYWlsaW5nU3BhY2UpOworICAgICAgICBzZXRMb2dpY2FsV2lkdGgobGVh
ZGluZ1NwYWNlVmFsdWUgKyBtX21hdGhPcGVyYXRvci53aWR0aCgpICsgdHJhaWxpbmdTcGFjZVZh
bHVlKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChtX21hdGhPcGVyYXRvci5hc2NlbnQoKSAr
IG1fbWF0aE9wZXJhdG9yLmRlc2NlbnQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2Ug
Zmlyc3QgZG8gdGhlIG5vcm1hbCBsYXlvdXQgd2l0aG91dCBzcGFjaW5nLgogICAgICAgICByZWNv
bXB1dGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxX
aWR0aCgpOwotICAgICAgICBzZXRMb2dpY2FsV2lkdGgod2lkdGggLSBtX2xlYWRpbmdTcGFjZSAt
IG1fdHJhaWxpbmdTcGFjZSk7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aCh3aWR0aCAtIGxlYWRp
bmdTcGFjZVZhbHVlIC0gdHJhaWxpbmdTcGFjZVZhbHVlKTsKICAgICAgICAgUmVuZGVyTWF0aE1M
VG9rZW46OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4sIHBhZ2VMb2dpY2FsSGVpZ2h0KTsK
ICAgICAgICAgc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1v
dmUgdGhlIGNoaWxkcmVuIHRvIHRha2Ugc3BhY2luZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExh
eW91dFBvaW50IGhvcml6b250YWxTaGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09IExUUiA/IG1f
bGVhZGluZ1NwYWNlIDogLW1fbGVhZGluZ1NwYWNlLCAwKTsKKyAgICAgICAgTGF5b3V0UG9pbnQg
aG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVhZGluZ1NwYWNl
VmFsdWUgOiAtbGVhZGluZ1NwYWNlVmFsdWUsIDApOwogICAgICAgICBmb3IgKGF1dG8qIGNoaWxk
ID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3go
KSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSArIGhv
cml6b250YWxTaGlmdCk7CiAgICAgfQpAQCAtMjYzLDggKzI4OSw3IEBAIGJvb2wgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVzZU1hdGhPcGVyYXRvcigpIGNvbnN0CiAgICAgLy8gV2UgdXNlIHRoZSBN
YXRoT3BlcmF0b3IgY2xhc3MgdG8gaGFuZGxlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CiAgICAgLy8g
MSkgU3RyZXRjaHkgYW5kIGxhcmdlIG9wZXJhdG9ycywgc2luY2UgdGhleSByZXF1aXJlIHNwZWNp
YWwgcGFpbnRpbmcuCiAgICAgLy8gMikgVGhlIG1pbnVzIHNpZ24sIHNpbmNlIGl0IGNhbiBiZSBv
YnRhaW5lZCBmcm9tIGEgaHlwaGVuIGluIHRoZSBET00uCi0gICAgLy8gMykgVGhlIGFub255bW91
cyBvcGVyYXRvcnMgY3JlYXRlZCBieSBtZmVuY2VkLCBzaW5jZSB0aGV5IGRvIG5vdCBoYXZlIHRl
eHQgY29udGVudCBpbiB0aGUgRE9NLgotICAgIHJldHVybiBzaG91bGRBbGxvd1N0cmV0Y2hpbmco
KSB8fCB0ZXh0Q29udGVudCgpID09IG1pbnVzU2lnbiB8fCBpc0Fub255bW91cygpOworICAgIHJl
dHVybiBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSB8fCB0ZXh0Q29udGVudCgpID09IG1pbnVzU2ln
bjsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKQEAgLTI5Niw3ICsz
MjEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldAogICAgICAgICByZXR1cm47CiAKICAgICBM
YXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7Ci0g
ICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdTcGFjZSwgMCk7CisgICAgb3BlcmF0b3JUb3BM
ZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsZWFkaW5nU3BhY2Uo
KSA6IHRyYWlsaW5nU3BhY2UoKSwgMCk7CiAKICAgICAvLyBDZW50ZXIgaG9yaXpvbnRhbCBvcGVy
YXRvcnMuCiAgICAgaWYgKCFtX2lzVmVydGljYWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKaW5kZXggOTQwMTQ5Yi4u
NDRlNjc4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaApAQCAtNjEsMTIgKzYxLDEzIEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHJlYnVpbGRUb2tlbkNvbnRlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmF0b3JQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGxlYWRpbmdT
cGFjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB0cmFpbGluZ1NwYWNlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IG1pblNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgbWF4U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB1c2VNYXRoT3Bl
cmF0b3IoKSBjb25zdDsKIAogICAgIGJvb2wgbV9pc1ZlcnRpY2FsIHsgdHJ1ZSB9OwotICAgIExh
eW91dFVuaXQgbV9sZWFkaW5nU3BhY2U7Ci0gICAgTGF5b3V0VW5pdCBtX3RyYWlsaW5nU3BhY2U7
Ci0gICAgTGF5b3V0VW5pdCBtX21pblNpemU7Ci0gICAgTGF5b3V0VW5pdCBtX21heFNpemU7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CkBAIC03NCwyMCArNzUsMTUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCA9IDApIGZpbmFsOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0TGVhZGluZ1NwYWNl
KExheW91dFVuaXQgbGVhZGluZ1NwYWNlKSB7IG1fbGVhZGluZ1NwYWNlID0gbGVhZGluZ1NwYWNl
OyB9Ci0gICAgdm9pZCBzZXRUcmFpbGluZ1NwYWNlKExheW91dFVuaXQgdHJhaWxpbmdTcGFjZSkg
eyBtX3RyYWlsaW5nU3BhY2UgPSB0cmFpbGluZ1NwYWNlOyB9Ci0KICAgICBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJN
YXRoTUxPcGVyYXRvciAoYW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CiAg
ICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAg
Ym9vbCBpc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIC8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzIGFyZSBpbnZpc2libGU6IFUrMjA2MSBG
VU5DVElPTiBBUFBMSUNBVElPTiwgVSsyMDYyIElOVklTSUJMRSBUSU1FUywgVSsyMDYzIElOVklT
SUJMRSBTRVBBUkFUT1IsIFUrMjA2NCBJTlZJU0lCTEUgUExVUy4KLSAgICBib29sIGlzSW52aXNp
YmxlT3BlcmF0b3IoKSB7IHJldHVybiAweDIwNjEgPD0gdGV4dENvbnRlbnQoKSAmJiB0ZXh0Q29u
dGVudCgpIDw9IDB4MjA2NDsgfQorICAgIGJvb2wgaXNJbnZpc2libGVPcGVyYXRvcigpIGNvbnN0
OwogCiAgICAgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwog
ICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yKiB1bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSBmaW5hbCB7
IHJldHVybiB0aGlzOyB9CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0
OwotICAgIGJvb2wgdXNlTWF0aE9wZXJhdG9yKCkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0IHZl
cnRpY2FsU3RyZXRjaGVkT3BlcmF0b3JTaGlmdCgpIGNvbnN0OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>