<?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>225575</bug_id>
          
          <creation_ts>2021-05-08 22:09:01 -0700</creation_ts>
          <short_desc>Remove uses of the String::toInt family of functions from the WebCore/platform directory</short_desc>
          <delta_ts>2021-05-09 13:20:17 -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>Platform</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758295</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-08 22:09:01 -0700</bug_when>
    <thetext>Remove uses of the String::toInt family of functions from the WebCore/platform directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758296</commentid>
    <comment_count>1</comment_count>
      <attachid>428112</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-08 22:24:59 -0700</bug_when>
    <thetext>Created attachment 428112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758336</commentid>
    <comment_count>2</comment_count>
      <attachid>428112</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-09 10:34:26 -0700</bug_when>
    <thetext>Comment on attachment 428112
Patch

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

&gt; Source/WebCore/platform/DateComponents.cpp:108
&gt; +// Does not allow leading or trailing whitespace unlike parseInteger&lt;int&gt;.

This, and just thinking about this more, makes me wonder if the new `parseInteger&lt;int&gt;` really should be called `parseIntegerAllowingLeadingWhitespace&lt;int&gt;` to make it clear, and to have another one that doesn&apos;t allow leading whitespace be `parseInteger&lt;int&gt;`. I would more than a few callers don&apos;t actually need that behavior.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:1264
&gt; +    return parseIntegerAllowingTrailingJunk&lt;uint64_t&gt;(trackIDString) == m_enabledVideoTrackID

Is this correct without the .valueOr(0)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758339</commentid>
    <comment_count>3</comment_count>
      <attachid>428112</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:05:28 -0700</bug_when>
    <thetext>Comment on attachment 428112
Patch

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

&gt;&gt; Source/WebCore/platform/DateComponents.cpp:108
&gt;&gt; +// Does not allow leading or trailing whitespace unlike parseInteger&lt;int&gt;.
&gt; 
&gt; This, and just thinking about this more, makes me wonder if the new `parseInteger&lt;int&gt;` really should be called `parseIntegerAllowingLeadingWhitespace&lt;int&gt;` to make it clear, and to have another one that doesn&apos;t allow leading whitespace be `parseInteger&lt;int&gt;`. I would more than a few callers don&apos;t actually need that behavior.

Absolutely worth considering. As I mention in the StringToIntegerConversion.h header with FIXMEs there are these variations:

1) Trailing junk or spaces.
2) Leading spaces.
3) Leading &quot;+&quot;.

And which definition of spaces? Confusingly, there are three relevant ASCII space definitions:

- The HTTP version of space is only U+0009 CHARACTER TABULATION, U+000A LINE FEEED, U+000D CARRIAGE RETURN, and U+0020 SPACE.
- The HTML specification ASCII space adds U+000C FORM FEED.
- The &quot;C&quot; locale version of &lt;ctype.h&gt; isspace adds U+000B LINE TABULATION.
- There are various more-extensive Unicode space and space-like definitions that go beyond ASCII.

Long ago I chose to make our ASCIICType.h isASCIISpace function match &lt;ctype.h&gt; isspace, but I am not sure it’s ever needed. Might be nice to merge isASCIISpace and the isHTMLSpace function. Do we need to use a template or have many multiple versions of &quot;allow leading spaces&quot;?

Main question is which parseInteger variation deserves the &quot;short normal&quot; function name, and which get the &quot;longer more explicit&quot; names. Would like to do the same for parseFloat and parseDouble, by the way. Or many rename to parseNumber and overload instead of having integer and floating point separate?

- HTML’s rules for parsing integers are &quot;allows trailing junk, leading HTML spaces, +&quot;, so just like the current parseIntegerAllowingTrailingJunk, but with isHTMLSpace, not isASCIISpace.
- For deserializing and places like this DateComponents function, we’d want the strictest: &quot;no leading or trailing spaces or junk, no leading &apos;+&apos;&quot;, and that does seem like the purest version, but not sure how common it would be.
- Unclear to me how many other call would need some variation besides those two, so maybe those two should be given compelling short-ish nicknames.
- Note that neither of those two *exactly* match the two we currently have in StringToIntegerConversion.h!

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:1264
&gt;&gt; +    return parseIntegerAllowingTrailingJunk&lt;uint64_t&gt;(trackIDString) == m_enabledVideoTrackID
&gt; 
&gt; Is this correct without the .valueOr(0)?

I think it is, but I could be wrong.

Old code would treat a parse failure as track ID 0. The new code treats a parse failure as &quot;does not match any track ID&quot;. given how Optional == is defined. I think it’s highly unlikely that &quot;create parse failure as track ID 0&quot; was ever wanted. But if we wanted it we *could* add .valueOr(0). I believe that in practice, we never have parse failures here. We could assert that by writing .value().

I guess I will write .valueOr(0) to stay out of the &quot;possible progressions in the refactoring that could be regressions&quot; business.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758341</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:15:48 -0700</bug_when>
    <thetext>At least one thing I am pretty sure of that makes this less than infinitely complicated:

Any caller that wants to tolerate leading spaces also wants to tolerate trailing spaces of the same type (although if it wants to tolerate trailing junk, that doesn&apos;t make a material difference).

We can think of &quot;not tolerating leading spaces&quot; on the same spectrum as &quot;type of tolerable space&quot;; it’s sort of &quot;no such thing as a tolerable space&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758342</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:17:05 -0700</bug_when>
    <thetext>Also seems likely that any caller that wants to tolerate trailing junk also wants to tolerate leading spaces and leading &quot;+&quot;.

For some contexts might want a version that consumes what it parses and indicates how many characters are consumed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758346</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:31:45 -0700</bug_when>
    <thetext>Committed r277246 (237515@main): &lt;https://commits.webkit.org/237515@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758347</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-09 11:32:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/77717553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758352</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:45:57 -0700</bug_when>
    <thetext>Patch was not landed correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758353</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 11:54:51 -0700</bug_when>
    <thetext>Committed r277249 with the second half.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758362</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-09 13:20:17 -0700</bug_when>
    <thetext>And ... now I rediscovered parseHTMLInteger.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428112</attachid>
            <date>2021-05-08 22:24:59 -0700</date>
            <delta_ts>2021-05-09 10:34:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225575-20210508222459.patch</filename>
            <type>text/plain</type>
            <size>34590</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQzOGI1M2Y1MjhiMzE5
M2QwZDhhN2U5N2U1ZGU5YTcxMDhjNGQzNS4uMTdlMmQzYTE0YWE1NzcyYmVhZmRjMTU2OGU4MTE2
Yzc0ZTJjMmFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDIxLTA1LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdXNlcyBvZiB0aGUg
U3RyaW5nOjp0b0ludCBmYW1pbHkgb2YgZnVuY3Rpb25zIGZyb20gdGhlIFdlYkNvcmUvcGxhdGZv
cm0gZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjU1NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcDogVHdlYWsgYSBjb21tZW50IG9uIHRo
ZSBsb2NhbCBwYXJzZUludCBmdW5jdGlvbiBoZXJlCisgICAgICAgIHRoYXQgc2hvdWxkIGxpa2Vs
eSBiZSBjb25zb2xpZGF0ZWQgd2l0aCBwYXJzZUludGVnZXIgYXQgc29tZSBwb2ludC4KKworICAg
ICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0
aCk6IFVzZSBwYXJzZUludGVnZXI8aW50PiBpbnN0ZWFkIG9mIGNoYXJhY3RlcnNUb0ludFN0cmlj
dC4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVT
ZXNzaW9uSWQgY29uc3QpOiBVc2UgcGFyc2VJbnRlZ2VyPHVpbnQzMl90PgorICAgICAgICBpbnN0
ZWFkIG9mIFN0cmluZzo6dG9VSW50U3RyaWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSEVWQ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhFVkNDb2RlY1Bh
cmFtZXRlcnMpOiBVc2UgcGFyc2VJbnRlZ2VyPHVpbnQ4LzMyX3Q+IGluc3RlYWQgb2YKKyAgICAg
ICAgdG9JbnRlZ3JhbFR5cGU8dWludDgvMzJfdD4uCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURv
VmlDb2RlY1BhcmFtZXRlcnMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9W
UDlVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VWUENvZGVjUGFyYW1ldGVy
cyk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYXJzZUtleVN5c3RlbSk6IFVzZSBwYXJzZUludGVnZXI8
aW50PgorICAgICAgICBpbnN0ZWFkIG9mIFN0cmluZzo6dG9JbnQuIFRoZXJlJ3Mgbm8gbmVlZCBm
b3IgdGhlICJhbGxvdyB0cmFpbGluZyBqdW5rIiBoZXJlCisgICAgICAgIGJlY2F1c2UgYSByZWd1
bGFyIGV4cHJlc3Npb24gaXMgdXNlZCB0byBjaGVjayBmb3JtYXQgYmVmb3JlIHdlIGNhbGwgcGFy
c2VJbnRlZ2VyLgorICAgICAgICBBbHNvIHJlbW92ZWQgYW4gdW5uZWNlc3NhcnkgZW1wdHkgc3Ry
aW5nIGNoZWNrLCBzaW5jZSB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgIG1hdGNoIGNo
ZWNrIHdpbGwgZmFpbCBvbiBhbiBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp0cmFja0RpZENo
YW5nZVNlbGVjdGVkKTogVXNlCisgICAgICAgIHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdK
dW5rPHVpbnQ2NF90PiBpbnN0ZWFkIG90IHRvVUludDY0LgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZsdXNoKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1
ZVNhbXBsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6Y2FuU2V0TWluaW11bVVwY29taW5nUHJlc2VudGF0aW9uVGltZSBjb25zdCk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTdHJpbmdBcnJheUZyb21EaWN0aW9uYXJ5VG9V
SW50MTZWZWN0b3IpOiBVc2UKKyAgICAgICAgcGFyc2VJbnRlZ2VyPHVpbnQxNl90PiBpbnN0ZWFk
IG9mIHRvSW50ZWdyYWxUeXBlPHVpbnQxNl90Pi4gV2UgY291bGQgYWxzbworICAgICAgICBjb25z
aWRlciB1c2luZyAtW05TU3RyaW5nIGludFZhbHVlXSBoZXJlIHdpdGggc29tZSByYW5nZSBjaGVj
a2luZyBpbnN0ZWFkCisgICAgICAgIG9mIGNvbnZlcnRpbmcgdG8gV1RGOjpTdHJpbmcuCisgICAg
ICAgIAorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2Fw
dHVyZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6
OmNyZWF0ZSk6IFVzZSBwYXJzZUludGVnZXI8dWludDMyX3Q+CisgICAgICAgIGluc3RlYWQgb2Yg
U3RyaW5nOjp0b1VJbnRTdHJpY3QuCisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2Fw
dHVyZXJNYWM6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6Ondp
bmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKTogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
UmFuZ2UpOiBVc2UgcGFyc2VJbnRlZ2VyPGxvbmcgbG9uZz4gaW5zdGVhZCBvZgorICAgICAgICBT
dHJpbmc6OnRvSW50NjRTdHJpY3QuIEFsc28gdXNlIFN0cmluZ1ZpZXcgc28gd2UgZG9uJ3QgYWxs
b2NhdGUgc3Vic3RyaW5ncyBvbgorICAgICAgICB0aGUgaGVhcCBqdXN0IHRvIHBhcnNlIGludGVn
ZXJzIHdpdGhpbiBhbiBleGlzdGluZyBzdHJpbmcuIEFuZCByZW1vdmVkIHVubmVlZGVkCisgICAg
ICAgIGNhbGwgdG8gc3RyaXBXaGl0ZVNwYWNlIGluIG9uZSBwbGFjZSBzaW5jZSBwYXJzZUludGVn
ZXIgYWxyZWFkeSBhbGxvd3MgbGVhZGluZworICAgICAgICBhbmQgdHJhaWxpbmcgc3BhY2VzLCBh
bmQgaW4gYW5vdGhlciBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gc3RyaXAgYmVjYXVzZSBvZiBhbgor
ICAgICAgICBlbXB0eSBzdHJpbmcgY2hlY2ssIHVzZWQgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdI
VFRQU3BhY2VzIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENv
bnRlbnRSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbnRlbnRSYW5nZSk6IFVz
ZSBwYXJzZUludGVnZXI8aW50NjRfdD4gaW5zdGVhZCBvZgorICAgICAgICBTdHJpbmdWaWV3Ojp0
b0ludDY0U3RyaWN0LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZSk6
IFVzZSBwYXJzZUludGVnZXI8dWludDY0X3Q+IGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nVmll
dzo6dG9VSW50NjRTdHJpY3QuCisKIDIwMjEtMDUtMDggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgcGl4ZWwgYnVmZmVyIGZyb20gRE9NIHNwZWNp
ZmljIEltYWdlRGF0YSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RGF0ZUNvbXBvbmVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVu
dHMuY3BwCmluZGV4IDg2Yzc2YzVhOWRkMWQ3NzZjNTRlZTdmOWMxZDgzNjgwNmFlNThhMzYuLjBm
ODFlYTZhMzhmOTQ3ZWNhOTg1NTUxYTUxYTMzN2NhMjcyZDQyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgdW5zaWduZWQgY291bnREaWdpdHMoU3Ry
aW5nUGFyc2luZ0J1ZmZlcgogICAgIHJldHVybiBidWZmZXIucG9zaXRpb24oKSAtIGJlZ2luOwog
fQogCi0vLyBWZXJ5IHN0cmljdCBpbnRlZ2VyIHBhcnNlci4gRG8gbm90IGFsbG93IGxlYWRpbmcg
b3IgdHJhaWxpbmcgd2hpdGVzcGFjZSB1bmxpa2UgY2hhcmFjdGVyc1RvSW50U3RyaWN0KCkuCisv
LyBEb2VzIG5vdCBhbGxvdyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgdW5saWtlIHBh
cnNlSW50ZWdlcjxpbnQ+LgogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPGludD4gcGFyc2VJbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgYnVmZmVyLCB1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQogewogICAg
IGlmIChtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlID4gYnVmZmVyLmxlbmd0aFJlbWFpbmlu
ZygpIHx8ICFtYXhpbXVtTnVtYmVyT2ZEaWdpdHNUb1BhcnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xl
bmd0aC5jcHAKaW5kZXggOTFhNzEzOTkyNTU2MTlhYzI3YmIxZTNkYTU1Y2M5OTc1ZmE2NDk1OS4u
YmQ1ZTFlMzQ3ZWU2Mjc1ZmY3OGY3YjE1NjkyMDI0YzdmMzNiNzU2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MZW5ndGguY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0
ci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIApAQCAtNjcsMTQgKzY4LDExIEBAIHN0YXRpYyBMZW5ndGggcGFyc2VM
ZW5ndGgoY29uc3QgVUNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybiBMZW5ndGgociwgTGVuZ3RoVHlwZTo6UGVyY2VudCk7CiAgICAgICAgIHJldHVybiBMZW5n
dGgoMSwgTGVuZ3RoVHlwZTo6UmVsYXRpdmUpOwogICAgIH0KLSAgICBpbnQgciA9IGNoYXJhY3Rl
cnNUb0ludFN0cmljdChkYXRhLCBpbnRMZW5ndGgsICZvayk7Ci0gICAgaWYgKG5leHQgPT0gJyon
KSB7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgIHJldHVybiBMZW5ndGgociwgTGVuZ3Ro
VHlwZTo6UmVsYXRpdmUpOwotICAgICAgICByZXR1cm4gTGVuZ3RoKDEsIExlbmd0aFR5cGU6OlJl
bGF0aXZlKTsKLSAgICB9Ci0gICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gTGVuZ3RoKHIsIExl
bmd0aFR5cGU6OkZpeGVkKTsKKyAgICBhdXRvIHIgPSBwYXJzZUludGVnZXI8aW50Pih7IGRhdGEs
IGludExlbmd0aCB9KTsKKyAgICBpZiAobmV4dCA9PSAnKicpCisgICAgICAgIHJldHVybiBMZW5n
dGgoci52YWx1ZU9yKDEpLCBMZW5ndGhUeXBlOjpSZWxhdGl2ZSk7CisgICAgaWYgKHIpCisgICAg
ICAgIHJldHVybiBMZW5ndGgoKnIsIExlbmd0aFR5cGU6OkZpeGVkKTsKICAgICByZXR1cm4gTGVu
Z3RoKDAsIExlbmd0aFR5cGU6OlJlbGF0aXZlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCmluZGV4IDc2Njc0NWU3NjI0ZmY1NmQyMGU3NDM3ZDY3YThjZDg1M2ZmOWUyMTcuLjRl
ZDNhMmY3MWRhMDJjYmI5ODg1ZmY0MDg1MDJlNjU4YTg3M2IzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9D
RE1DbGVhcktleS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MTUsOSArNDE2LDcgQEAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNo
YXJlZEJ1ZmZlciYgcmUKIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5p
dGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKIHsKICAgICAvLyBW
YWxpZGF0ZSB0aGUgc2Vzc2lvbiBJRCBzdHJpbmcgYXMgYW4gMzItYml0IGludGVnZXIuCi0gICAg
Ym9vbCBvazsKLSAgICBzZXNzaW9uSWQudG9VSW50U3RyaWN0KCZvayk7Ci0gICAgaWYgKCFvaykK
KyAgICBpZiAoIXBhcnNlSW50ZWdlcjx1aW50MzJfdD4oc2Vzc2lvbklkKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4gc2Vzc2lvbklkOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAppbmRleCA0ZjJl
ZTQyZThkNzgwYzcxMmU0NzVhNDEyMTU1MmI4ZmM5YjVkZDllLi4xNmNkOWE0Mzc3ZjE4OGVlNTM0
MGU0ZjRhNDQ5ZmUyMTczOTUzMTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcApAQCAtNjQsMjEgKzY0LDIwIEBAIE9wdGlvbmFs
PEhFVkNQYXJhbWV0ZXJzPiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2Rl
Y1N0cmluZykKICAgICAgICAgcHJvZmlsZVNwYWNlID0gcHJvZmlsZVNwYWNlLnN1YnN0cmluZygx
KTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWRQcm9maWxlSURDID0gZmFsc2U7Ci0gICAgcGFy
YW1ldGVycy5nZW5lcmFsUHJvZmlsZUlEQyA9IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KHByb2Zp
bGVTcGFjZSwgJmlzVmFsaWRQcm9maWxlSURDKTsKLSAgICBpZiAoIWlzVmFsaWRQcm9maWxlSURD
KQorICAgIGF1dG8gcHJvZmlsZUlEQyA9IHBhcnNlSW50ZWdlcjx1aW50OF90Pihwcm9maWxlU3Bh
Y2UpOworICAgIGlmICghcHJvZmlsZUlEQykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBwYXJhbWV0ZXJzLmdlbmVyYWxQcm9maWxlSURDID0gKnByb2ZpbGVJREM7CiAKICAgICBp
ZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgLy8gU2Vjb25kIGVsZW1lbnQ6IDMyIGJpdCBvZiBHZW5lcmFsIFBy
b2ZpbGUgQ29tcGF0aWJpbGl0eSBGbGFncywgaW4gcmV2ZXJzZSBiaXQgb3JkZXIsCiAgICAgLy8g
aW4gaGV4IHdpdGggbGVhZGluZyB6ZXJvcyBvbWl0dGVkLgotICAgIGF1dG8gY29tcGF0aWJpbGl0
eUZsYWdzID0gKm5leHRFbGVtZW50OwotICAgIGJvb2wgaXNWYWxpZENvbXBhdGliaWxpdHlGbGFn
cyA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5Rmxh
Z3MgPSB0b0ludGVncmFsVHlwZTx1aW50MzJfdD4oY29tcGF0aWJpbGl0eUZsYWdzLCAmaXNWYWxp
ZENvbXBhdGliaWxpdHlGbGFncywgMTYpOwotICAgIGlmICghaXNWYWxpZENvbXBhdGliaWxpdHlG
bGFncykKKyAgICBhdXRvIGNvbXBhdGliaWxpdHlGbGFncyA9IHBhcnNlSW50ZWdlcjx1aW50MzJf
dD4oKm5leHRFbGVtZW50LCAxNik7CisgICAgaWYgKCFjb21wYXRpYmlsaXR5RmxhZ3MpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5nZW5lcmFsUHJvZmlsZUNv
bXBhdGliaWxpdHlGbGFncyA9ICpjb21wYXRpYmlsaXR5RmxhZ3M7CiAKICAgICBpZiAoKytuZXh0
RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwpAQCAtOTAsMTkgKzg5LDE3IEBAIE9wdGlvbmFsPEhFVkNQYXJhbWV0ZXJzPiBwYXJzZUhFVkND
b2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2RlY1N0cmluZykKICAgICBpZiAoZmlyc3RDaGFy
YWN0ZXIgIT0gJ0wnICYmIGZpcnN0Q2hhcmFjdGVyICE9ICdIJykKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGJvb2wgaXNWYWxpZEdlbmVyYWxMZXZlbElEQyA9IGZhbHNlOwot
ICAgIHBhcmFtZXRlcnMuZ2VuZXJhbExldmVsSURDID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4o
Z2VuZXJhbFRpZXIuc3Vic3RyaW5nKDEpLCAmaXNWYWxpZEdlbmVyYWxMZXZlbElEQyk7Ci0gICAg
aWYgKCFpc1ZhbGlkR2VuZXJhbExldmVsSURDKQorICAgIGF1dG8gZ2VuZXJhbExldmVsSURDID0g
cGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KGdlbmVyYWxUaWVyLnN1YnN0cmluZygxKSk7CisgICAgaWYg
KCFnZW5lcmFsTGV2ZWxJREMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFy
YW1ldGVycy5nZW5lcmFsTGV2ZWxJREMgPSAqZ2VuZXJhbExldmVsSURDOwogCiAgICAgLy8gT3B0
aW9uYWwgZm91cnRoIGFuZCByZW1haW5pbmcgZWxlbWVudHM6IGEgc2VxdWVuY2Ugb2YgNiAxLWJ5
dGUgY29uc3RyYWludCBmbGFncywgZWFjaCBieXRlIGVuY29kZWQKICAgICAvLyBpbiBoZXgsIGFu
ZCBzZXBhcmF0ZWQgYnkgYSBwZXJpb2QsIHdpdGggdHJhaWxpbmcgemVybyBieXRlcyBvbWl0dGVk
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA2OyArK2kpIHsKICAgICAgICAgaWYgKCsr
bmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBib29sIGlzVmFsaWRGbGFnID0gZmFsc2U7Ci0gICAgICAgIHRvSW50ZWdyYWxUeXBlPHVp
bnQ4X3Q+KCpuZXh0RWxlbWVudCwgJmlzVmFsaWRGbGFnLCAxNik7Ci0gICAgICAgIGlmICghaXNW
YWxpZEZsYWcpCisgICAgICAgIGlmICghcGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KCpuZXh0RWxlbWVu
dCwgMTYpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKQEAgLTE5
OCwxMyArMTk1LDEzIEBAIE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJzPiBwYXJzZURvVmlDb2RlY1Bh
cmFtZXRlcnMoU3RyaW5nVmlldyBjb2RlY1ZpZXcpCiAgICAgaWYgKCFwcm9maWxlSUQubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29sIGlzSW50ZWdyYWwg
PSBmYWxzZTsKICAgICBhdXRvIGZpcnN0Q2hhcmFjdGVyID0gcHJvZmlsZUlEWzBdOwogICAgIC8v
IFByb2ZpbGUgZGVmaW5pdGlvbiBjYW4gZWl0aGVyIGJlIG51bWVyaWMgb3IgYWxwaGE6CiAgICAg
aWYgKGZpcnN0Q2hhcmFjdGVyID09ICcwJykgewotICAgICAgICBwYXJhbWV0ZXJzLmJpdHN0cmVh
bVByb2ZpbGVJRCA9IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KHByb2ZpbGVJRCwgJmlzSW50ZWdy
YWwsIDEwKTsKLSAgICAgICAgaWYgKCFpc0ludGVncmFsKQorICAgICAgICBhdXRvIGJpdHN0cmVh
bVByb2ZpbGVJRCA9IHBhcnNlSW50ZWdlcjx1aW50OF90Pihwcm9maWxlSUQpOworICAgICAgICBp
ZiAoIWJpdHN0cmVhbVByb2ZpbGVJRCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlEID0gKmJpdHN0cmVhbVByb2Zp
bGVJRDsKICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIGJpdHN0cmVhbVByb2ZpbGVJRCA9IHBy
b2ZpbGVJREZvckFscGhhYmV0aWNEb1ZpUHJvZmlsZShjb2RlY1ZpZXcubGVmdCg1ICsgcHJvZmls
ZUlELmxlbmd0aCgpKSk7CiAgICAgICAgIGlmICghYml0c3RyZWFtUHJvZmlsZUlEKQpAQCAtMjIx
LDEzICsyMTgsMTAgQEAgT3B0aW9uYWw8RG9WaVBhcmFtZXRlcnM+IHBhcnNlRG9WaUNvZGVjUGFy
YW1ldGVycyhTdHJpbmdWaWV3IGNvZGVjVmlldykKICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBj
b2RlY1NwbGl0LmVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0
byBsZXZlbElEID0gKm5leHRFbGVtZW50OwotICAgIGlmICghbGV2ZWxJRC5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHBhcmFtZXRlcnMuYml0c3RyZWFtTGV2
ZWxJRCA9IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KGxldmVsSUQsICZpc0ludGVncmFsLCAxMCk7
Ci0gICAgaWYgKCFpc0ludGVncmFsKQorICAgIGF1dG8gYml0c3RyZWFtTGV2ZWxJRCA9IHBhcnNl
SW50ZWdlcjx1aW50OF90PigqbmV4dEVsZW1lbnQpOworICAgIGlmICghYml0c3RyZWFtTGV2ZWxJ
RCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmJpdHN0cmVh
bUxldmVsSUQgPSAqYml0c3RyZWFtTGV2ZWxJRDsKIAogICAgIGF1dG8gbWF4aW11bUxldmVsSUQg
PSBtYXhpbXVtTGV2ZWxJREZvckRvVmlQcm9maWxlSUQocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9m
aWxlSUQpOwogICAgIGlmICghbWF4aW11bUxldmVsSUQgfHwgcGFyYW1ldGVycy5iaXRzdHJlYW1M
ZXZlbElEID4gKm1heGltdW1MZXZlbElEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1ZQOVV0aWxpdGllcy5jcHAKaW5kZXggNGUyODIyNzIxNTE3YzNiZTY4OTNlMThj
ODFjN2FmNWEyZGI4NWI3NS4uNzJlYTRmNDBjZTY4M2RlMjJmMzFkOWY0NDI1ZmUwMTZkNzNmMWM5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVlA5VXRpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9WUDlVdGlsaXRp
ZXMuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgT3B0aW9uYWw8VlBDb2RlY0NvbmZpZ3VyYXRpb25S
ZWNvcmQ+IHBhcnNlVlBDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2RlY1ZpZXcKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIEZpcnN0IGVsZW1lbnQ6IHByb2ZpbGUu
IExlZ2FsIHZhbHVlcyBhcmUgMC0zLgotICAgIGF1dG8gcHJvZmlsZSA9IHRvSW50ZWdyYWxUeXBl
PHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7CisgICAgYXV0byBwcm9maWxlID0gcGFyc2VJbnRlZ2Vy
PHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7CiAgICAgaWYgKCFwcm9maWxlIHx8ICpwcm9maWxlID4g
MykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjb25maWd1cmF0aW9uLnByb2Zp
bGUgPSAqcHJvZmlsZTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBPcHRpb25hbDxWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZD4gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3IGNvZGVjVmll
dwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gU2Vjb25kIGVsZW1lbnQ6
IGxldmVsLiBMZWdhbCB2YWx1ZXMgYXJlIGVudW1lcmF0ZWQgaW4gdmFsaWRWUExldmVscyBhYm92
ZS4KLSAgICBhdXRvIGxldmVsID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRFbGVtZW50
KTsKKyAgICBhdXRvIGxldmVsID0gcGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7
CiAgICAgaWYgKCFsZXZlbCB8fCAhaXNWYWxpZFZQTGV2ZWwoKmxldmVsKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBjb25maWd1cmF0aW9uLmxldmVsID0gKmxldmVsOwpAQCAt
MTcwLDcgKzE3MCw3IEBAIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkPiBwYXJz
ZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29kZWNWaWV3CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICAvLyBUaGlyZCBlbGVtZW50OiBiaXREZXB0aC4gTGVnYWwgdmFs
dWVzIGFyZSA4LCAxMCwgYW5kIDEyLgotICAgIGF1dG8gYml0RGVwdGggPSB0b0ludGVncmFsVHlw
ZTx1aW50OF90PigqbmV4dEVsZW1lbnQpOworICAgIGF1dG8gYml0RGVwdGggPSBwYXJzZUludGVn
ZXI8dWludDhfdD4oKm5leHRFbGVtZW50KTsKICAgICBpZiAoIWJpdERlcHRoIHx8ICgqYml0RGVw
dGggIT0gOCAmJiAqYml0RGVwdGggIT0gMTAgJiYgKmJpdERlcHRoICE9IDEyKSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBjb25maWd1cmF0aW9uLmJpdERlcHRoID0gKmJpdERl
cHRoOwpAQCAtMTgzLDcgKzE4Myw3IEBAIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkPiBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29kZWNWaWV3CiAgICAgICAg
IHJldHVybiBjb25maWd1cmF0aW9uOwogCiAgICAgLy8gRm91cnRoIGVsZW1lbnQ6IGNocm9tYVN1
YnNhbXBsaW5nLiBMZWdhbCB2YWx1ZXMgYXJlIDAtMy4KLSAgICBhdXRvIGNocm9tYVN1YnNhbXBs
aW5nID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRFbGVtZW50KTsKKyAgICBhdXRvIGNo
cm9tYVN1YnNhbXBsaW5nID0gcGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7CiAg
ICAgaWYgKCFjaHJvbWFTdWJzYW1wbGluZyB8fCAqY2hyb21hU3Vic2FtcGxpbmcgPiBWUENvbmZp
Z3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDQ0KQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIGNvbmZpZ3VyYXRpb24uY2hyb21hU3Vic2FtcGxpbmcgPSAq
Y2hyb21hU3Vic2FtcGxpbmc7CkBAIC0xOTEsOSArMTkxLDkgQEAgT3B0aW9uYWw8VlBDb2RlY0Nv
bmZpZ3VyYXRpb25SZWNvcmQ+IHBhcnNlVlBDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2Rl
Y1ZpZXcKICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRmlmdGggZWxlbWVudDogY29sb3JQcmlt
YXJpZXMuIExlZ2FsIHZhbHVlcyBhcmUgZGVmaW5lZCBieSAgSVNPL0lFQyAyMzAwMS04OjIwMTYs
IHN1cGVyY2VkZWQKKyAgICAvLyBGaWZ0aCBlbGVtZW50OiBjb2xvclByaW1hcmllcy4gTGVnYWwg
dmFsdWVzIGFyZSBkZWZpbmVkIGJ5IElTTy9JRUMgMjMwMDEtODoyMDE2LCBzdXBlcnNlZGVkCiAg
ICAgLy8gYnkgSVNPL0lFQyAyMzA5MS0yOjIwMTkuCi0gICAgYXV0byBjb2xvclByaW1hcmllcyA9
IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7CisgICAgYXV0byBjb2xvclBy
aW1hcmllcyA9IHBhcnNlSW50ZWdlcjx1aW50OF90PigqbmV4dEVsZW1lbnQpOwogICAgIGlmICgh
Y29sb3JQcmltYXJpZXMgfHwgIWlzVmFsaWRWUENvbG9yUHJpbWFyaWVzKCpjb2xvclByaW1hcmll
cykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY29uZmlndXJhdGlvbi5jb2xv
clByaW1hcmllcyA9ICpjb2xvclByaW1hcmllczsKQEAgLTIwMSw5ICsyMDEsOSBAQCBPcHRpb25h
bDxWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZD4gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhTdHJp
bmdWaWV3IGNvZGVjVmlldwogICAgIGlmICgrK25leHRFbGVtZW50ID09IGNvZGVjU3BsaXQuZW5k
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAvLyBTaXh0aCBlbGVtZW50
OiB0cmFuc2ZlckNoYXJhY3RlcmlzdGljcy4gTGVnYWwgdmFsdWVzIGFyZSBkZWZpbmVkIGJ5ICBJ
U08vSUVDIDIzMDAxLTg6MjAxNiwgc3VwZXJjZWRlZAorICAgIC8vIFNpeHRoIGVsZW1lbnQ6IHRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzLiBMZWdhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYnkgSVNPL0lF
QyAyMzAwMS04OjIwMTYsIHN1cGVyc2VkZWQKICAgICAvLyBieSBJU08vSUVDIDIzMDkxLTI6MjAx
OS4KLSAgICBhdXRvIHRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gdG9JbnRlZ3JhbFR5cGU8dWlu
dDhfdD4oKm5leHRFbGVtZW50KTsKKyAgICBhdXRvIHRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0g
cGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7CiAgICAgaWYgKCF0cmFuc2ZlckNo
YXJhY3RlcmlzdGljcyB8fCAhaXNWYWxpZFZQVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoKnRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBj
b25maWd1cmF0aW9uLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gKnRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOwpAQCAtMjExLDkgKzIxMSw5IEBAIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkPiBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29kZWNWaWV3CiAgICAg
aWYgKCsrbmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIC8vIFNldmVudGggZWxlbWVudDogbWF0cml4Q29lZmZpY2llbnRz
LiBMZWdhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYnkgIElTTy9JRUMgMjMwMDEtODoyMDE2LCBzdXBl
cmNlZGVkCisgICAgLy8gU2V2ZW50aCBlbGVtZW50OiBtYXRyaXhDb2VmZmljaWVudHMuIExlZ2Fs
IHZhbHVlcyBhcmUgZGVmaW5lZCBieSBJU08vSUVDIDIzMDAxLTg6MjAxNiwgc3VwZXJzZWRlZAog
ICAgIC8vIGJ5IElTTy9JRUMgMjMwOTEtMjoyMDE5LgotICAgIGF1dG8gbWF0cml4Q29lZmZpY2ll
bnRzID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRFbGVtZW50KTsKKyAgICBhdXRvIG1h
dHJpeENvZWZmaWNpZW50cyA9IHBhcnNlSW50ZWdlcjx1aW50OF90PigqbmV4dEVsZW1lbnQpOwog
ICAgIGlmICghbWF0cml4Q29lZmZpY2llbnRzIHx8ICFpc1ZhbGlkVlBNYXRyaXhDb2VmZmljaWVu
dHMoKm1hdHJpeENvZWZmaWNpZW50cykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgY29uZmlndXJhdGlvbi5tYXRyaXhDb2VmZmljaWVudHMgPSAqbWF0cml4Q29lZmZpY2llbnRz
OwpAQCAtMjI2LDcgKzIyNiw3IEBAIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
PiBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29kZWNWaWV3CiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBFaWdodGggZWxlbWVudDogdmlkZW9GdWxsUmFu
Z2VGbGFnLiBMZWdhbCB2YWx1ZXMgYXJlIDAgYW5kIDEuCi0gICAgYXV0byB2aWRlb0Z1bGxSYW5n
ZUZsYWcgPSB0b0ludGVncmFsVHlwZTx1aW50OF90PigqbmV4dEVsZW1lbnQpOworICAgIGF1dG8g
dmlkZW9GdWxsUmFuZ2VGbGFnID0gcGFyc2VJbnRlZ2VyPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCk7
CiAgICAgaWYgKCF2aWRlb0Z1bGxSYW5nZUZsYWcgfHwgKnZpZGVvRnVsbFJhbmdlRmxhZyA+IDEp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY29uZmlndXJhdGlvbi52aWRlb0Z1
bGxSYW5nZUZsYWcgPSAqdmlkZW9GdWxsUmFuZ2VGbGFnOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQppbmRleCA3ZTQ3OGVkMDJjMjEyZDdm
MmRiNGRhMTU5MWZmZTI2NjI3ZjJhODc1Li4xZjRhYjhhMGI1OGI5ZDljOGE2YmZiMDViODJmNDI2
NDNlNTZkZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFy
RXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+CiAKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCkBAIC00Nywy
MSArNDgsMTYgQEAgYXV0byBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYXJzZUtleVN5
c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgLT4gT3AKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8UmVndWxhckV4cHJlc3Npb24+IGtleVN5c3RlbVJFKCJeY29tXFwuYXBwbGVcXC5m
cHNcXC5bMjNdX1xcZCsoPzosXFxkKykqJCIsIEpTQzo6WWFycjo6VGV4dENhc2VJbnNlbnNpdGl2
ZSk7CiAKLSAgICBpZiAoa2V5U3lzdGVtLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAKICAgICBpZiAoa2V5U3lzdGVtUkUuZ2V0KCkubWF0Y2goa2V5U3lzdGVt
KSA8IDApCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCisKICAgICBTdHJpbmdW
aWV3IGtleVN5c3RlbVZpZXcgeyBrZXlTeXN0ZW0gfTsKIAotICAgIGludCBjZG1WZXJzaW9uID0g
a2V5U3lzdGVtVmlldy5zdWJzdHJpbmcoMTQsIDEpLnRvSW50KCk7Ci0gICAgCisgICAgaW50IGNk
bVZlcnNpb24gPSBwYXJzZUludGVnZXI8aW50PihrZXlTeXN0ZW1WaWV3LnN1YnN0cmluZygxNCwg
MSkpLnZhbHVlKCk7CiAgICAgVmVjdG9yPGludD4gcHJvdG9jb2xWZXJzaW9uczsKLSAgICBmb3Ig
KFN0cmluZ1ZpZXcgcHJvdG9jb2xWZXJzaW9uU3RyaW5nIDoga2V5U3lzdGVtVmlldy5zdWJzdHJp
bmcoMTYpLnNwbGl0KCcsJykpCi0gICAgICAgIHByb3RvY29sVmVyc2lvbnMuYXBwZW5kKHByb3Rv
Y29sVmVyc2lvblN0cmluZy50b0ludCgpKTsKLSAgICAKLSAgICByZXR1cm4ge3sgY2RtVmVyc2lv
biwgV1RGTW92ZShwcm90b2NvbFZlcnNpb25zKSB9fTsKKyAgICBmb3IgKGF1dG8gcHJvdG9jb2xW
ZXJzaW9uU3RyaW5nIDoga2V5U3lzdGVtVmlldy5zdWJzdHJpbmcoMTYpLnNwbGl0KCcsJykpCisg
ICAgICAgIHByb3RvY29sVmVyc2lvbnMuYXBwZW5kKHBhcnNlSW50ZWdlcjxpbnQ+KHByb3RvY29s
VmVyc2lvblN0cmluZykudmFsdWUoKSk7CisgICAgcmV0dXJuIHsgeyBjZG1WZXJzaW9uLCBXVEZN
b3ZlKHByb3RvY29sVmVyc2lvbnMpIH0gfTsKIH0KIAogQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6fkNETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQpAQCAtNzIsMTIgKzY4LDEzIEBA
IENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKCkKIAogc3RhdGljIGJvb2wgcXVlcnlEZWNvZGVyQXZhaWxhYmlsaXR5KCkKIHsKLSAgICBp
ZiAoIWNhbkxvYWRfVmlkZW9Ub29sYm94X1ZUR2V0R1ZBRGVjb2RlckF2YWlsYWJpbGl0eSgpKQor
ICAgIGlmICghY2FuTG9hZF9WaWRlb1Rvb2xib3hfVlRHZXRHVkFEZWNvZGVyQXZhaWxhYmlsaXR5
KCkpIHsKICNpZiBIQVZFKEFWU1RSRUFNU0VTU0lPTikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2Vsc2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyAgICB9CiAgICAgdWludDMyX3Qg
dG90YWxJbnN0YW5jZUNvdW50ID0gMDsKICAgICBPU1N0YXR1cyBzdGF0dXMgPSBWVEdldEdWQURl
Y29kZXJBdmFpbGFiaWxpdHkoJnRvdGFsSW5zdGFuY2VDb3VudCwgbnVsbHB0cik7CiAgICAgcmV0
dXJuIHN0YXR1cyA9PSBub0VyciAmJiB0b3RhbEluc3RhbmNlQ291bnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCmluZGV4IDEw
OTg3MTEyOTFjNGMwODczMzVjMjBhMDQ4NzI4ODY5MGEyZGZiYmYuLjIxODUzZTA4MTgxYzU0MDJk
OGE2ZTQ2MzY4ZmZiMGMxYjNmNjVkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCkBAIC02Miw2ICs2Miw3IEBACiAjaW1w
b3J0IDx3dGYvV2Vha1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRl
Z2VyQ29udmVyc2lvbi5oPgogCiAjcHJhZ21hIG1hcmsgLSBTb2Z0IExpbmtpbmcKIApAQCAtNzY4
LDcgKzc2OSw3IEBAIGJvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhhc1NlbGVjdGVk
VmlkZW8oKSBjb25zdAogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp0cmFja0Rp
ZENoYW5nZVNlbGVjdGVkKFZpZGVvVHJhY2tQcml2YXRlJiB0cmFjaywgYm9vbCBzZWxlY3RlZCkK
IHsKLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay5pZCgpLnN0cmluZygpLnRvVUludDY0KCk7Cisg
ICAgYXV0byB0cmFja0lEID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8dWludDY0
X3Q+KHRyYWNrLmlkKCkpLnZhbHVlT3IoMCk7CiAKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJ
RVIsICJ2aWRlbyB0cmFja0lEID0gIiwgdHJhY2tJRCwgIiwgc2VsZWN0ZWQgPSAiLCBzZWxlY3Rl
ZCk7CiAKQEAgLTc5NCw3ICs3OTUsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
Ojp0cmFja0RpZENoYW5nZVNlbGVjdGVkKFZpZGVvVHJhY2tQcml2YXRlJiB0cmFjawogCiB2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp0cmFja0RpZENoYW5nZUVuYWJsZWQoQXVkaW9U
cmFja1ByaXZhdGUmIHRyYWNrLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byB0cmFja0lEID0g
dHJhY2suaWQoKS5zdHJpbmcoKS50b1VJbnQ2NCgpOworICAgIGF1dG8gdHJhY2tJRCA9IHBhcnNl
SW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPHVpbnQ2NF90Pih0cmFjay5pZCgpKS52YWx1ZU9y
KDApOwogCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiYXVkaW8gdHJhY2tJRCA9ICIs
IHRyYWNrSUQsICIsIHNlbGVjdGVkID0gIiwgZW5hYmxlZCk7CiAKQEAgLTEwMTYsNyArMTAxNyw3
IEBAIEFMTE9XX05FV19BUElfV0lUSE9VVF9HVUFSRFNfRU5ECiAKIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM6OmZsdXNoKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSURTdHJpbmcpCiB7
Ci0gICAgYXV0byB0cmFja0lEID0gdHJhY2tJRFN0cmluZy5zdHJpbmcoKS50b1VJbnQ2NCgpOwor
ICAgIGF1dG8gdHJhY2tJRCA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPHVpbnQ2
NF90Pih0cmFja0lEU3RyaW5nKS52YWx1ZU9yKDApOwogICAgIERFQlVHX0xPRyhMT0dJREVOVElG
SUVSLCB0cmFja0lEKTsKIAogICAgIGlmICh0cmFja0lEID09IG1fZW5hYmxlZFZpZGVvVHJhY2tJ
RCkgewpAQCAtMTA1OCw3ICsxMDU5LDcgQEAgQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19F
TkQKIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZShSZWY8
TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lEU3RyaW5nKQog
ewotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrSURTdHJpbmcuc3RyaW5nKCkudG9VSW50NjQoKTsK
KyAgICBhdXRvIHRyYWNrSUQgPSBwYXJzZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazx1aW50
NjRfdD4odHJhY2tJRFN0cmluZykudmFsdWVPcigwKTsKICAgICBpZiAodHJhY2tJRCAhPSBtX2Vu
YWJsZWRWaWRlb1RyYWNrSUQgJiYgIW1fYXVkaW9SZW5kZXJlcnMuY29udGFpbnModHJhY2tJRCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTE3MSw3ICsxMTcyLDcgQEAgdm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQzo6YnVmZmVyV2FzQ29uc3VtZWQoKQogCiBib29sIFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYg
dHJhY2tJRFN0cmluZykKIHsKLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFja0lEU3RyaW5nLnN0cmlu
ZygpLnRvVUludDY0KCk7CisgICAgYXV0byB0cmFja0lEID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdU
cmFpbGluZ0p1bms8dWludDY0X3Q+KHRyYWNrSURTdHJpbmcpLnZhbHVlT3IoMCk7CiAgICAgaWYg
KHRyYWNrSUQgPT0gbV9lbmFibGVkVmlkZW9UcmFja0lEKSB7CiAgICAgICAgIGlmIChtX2RlY29t
cHJlc3Npb25TZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIG1fZGVjb21wcmVzc2lvblNlc3Np
b24tPmlzUmVhZHlGb3JNb3JlTWVkaWFEYXRhKCk7CkBAIC0xMjM1LDcgKzEyMzYsNyBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVz
KHVpbnQ2NF90IHRyYWNrSUQpCiAKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Om5v
dGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNr
SURTdHJpbmcpCiB7Ci0gICAgYXV0byB0cmFja0lEID0gdHJhY2tJRFN0cmluZy5zdHJpbmcoKS50
b1VJbnQ2NCgpOworICAgIGF1dG8gdHJhY2tJRCA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxp
bmdKdW5rPHVpbnQ2NF90Pih0cmFja0lEU3RyaW5nKS52YWx1ZU9yKDApOwogICAgIGlmICh0cmFj
a0lEID09IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkgewogICAgICAgICBpZiAobV9kZWNvbXByZXNz
aW9uU2Vzc2lvbikgewogICAgICAgICAgICAgbV9kZWNvbXByZXNzaW9uU2Vzc2lvbi0+cmVxdWVz
dE1lZGlhRGF0YVdoZW5SZWFkeShbdGhpcywgdHJhY2tJRF0gewpAQCAtMTI2MCwxMCArMTI2MSw4
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Om5vdGlmeUNsaWVudFdoZW5SZWFk
eUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TCiAKIGJvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM6OmNhblNldE1pbmltdW1VcGNvbWluZ1ByZXNlbnRhdGlvblRpbWUoY29uc3QgQXRvbVN0
cmluZyYgdHJhY2tJRFN0cmluZykgY29uc3QKIHsKLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFja0lE
U3RyaW5nLnN0cmluZygpLnRvVUludDY0KCk7Ci0gICAgaWYgKHRyYWNrSUQgPT0gbV9lbmFibGVk
VmlkZW9UcmFja0lEKQotICAgICAgICByZXR1cm4gW2dldEFWU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhwZWN0TWlu
aW11bVVwY29taW5nU2FtcGxlQnVmZmVyUHJlc2VudGF0aW9uVGltZTopXTsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPHVpbnQ2
NF90Pih0cmFja0lEU3RyaW5nKSA9PSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQKKyAgICAgICAgJiYg
W2dldEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyQ2xhc3MoKSBpbnN0YW5jZXNSZXNwb25kVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhwZWN0TWluaW11bVVwY29taW5nU2FtcGxlQnVmZmVyUHJlc2Vu
dGF0aW9uVGltZTopXTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0
TWluaW11bVVwY29taW5nUHJlc2VudGF0aW9uVGltZShjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lE
U3RyaW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVz
Q29jb2EubW0KaW5kZXggYzg3MzlkYjJlNTUxZGVmMDM4YTQyZTgyNGZiZjFiN2ZlNDAxZmE2OS4u
ZGE0MGEyY2RlOGYwZjg0ZGEwOTMwYjUyZmIyM2I2NmQ1M2Y5MGQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRp
ZXNDb2NvYS5tbQpAQCAtMzEsMTIgKzMxLDEwIEBACiAjaW1wb3J0ICJGb3VyQ0MuaCIKICNpbXBv
cnQgIkhFVkNVdGlsaXRpZXMuaCIKICNpbXBvcnQgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgot
Ci0jaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgotI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlv
blNvZnRMaW5rLmg+CiAKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCisjaW1wb3J0
IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xNTAsMTEgKzE0OCwxMCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQxNl90
Pj4gcGFyc2VTdHJpbmdBcnJheUZyb21EaWN0aW9uYXJ5VG9VSW50MTZWZWN0b3IoQwogICAgIGZv
ciAoaWQgdmFsdWUgaW4gYXJyYXkpIHsKICAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFz
czpOU1N0cmluZy5jbGFzc10pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICBib29sIGlzVmFsaWROdW1iZXIgPSBmYWxzZTsKLSAgICAgICAgYXV0byBudW1lcmljVmFs
dWUgPSB0b0ludGVncmFsVHlwZTx1aW50MTZfdD4oU3RyaW5nKChOU1N0cmluZyAqKXZhbHVlKSwg
JmlzVmFsaWROdW1iZXIpOwotICAgICAgICBpZiAoIWlzVmFsaWROdW1iZXIpCisgICAgICAgIGF1
dG8gbnVtZXJpY1ZhbHVlID0gcGFyc2VJbnRlZ2VyPHVpbnQxNl90PihTdHJpbmcoKE5TU3RyaW5n
ICopdmFsdWUpKTsKKyAgICAgICAgaWYgKCFudW1lcmljVmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG51bWVyaWNW
YWx1ZSk7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoKm51bWVyaWNWYWx1ZSk7CiAg
ICAgfQogICAgIHJldHVybiB2ZWN0b3I7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJl
ck1hYy5tbQppbmRleCAxYWQyYTdiNjk0YzQ2MDFkYmM3YjI2NmM5NTUxMWJkMTVmZjBmZjU2Li44
ZWRhYjA3ZmNhMThlNDk5ODNmMWQwOWY4MWJlZTZjYjM4Y2JjMjkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3Jl
ZW5EaXNwbGF5Q2FwdHVyZXJNYWMubW0KQEAgLTM4LDYgKzM4LDcgQEAKICNpbXBvcnQgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNp
bXBvcnQgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmlu
Z1RvSW50ZWdlckNvbnZlcnNpb24uaD4KIAogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIK
IApAQCAtODAsMTUgKzgxLDEyIEBAIHN0YXRpYyBPcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4g
dXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKIAogRXhwZWN0ZWQ8
VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyPiwgU3RyaW5nPiBT
Y3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlEKQog
ewotICAgIGJvb2wgb2s7Ci0gICAgYXV0byBkaXNwbGF5SUQgPSBkZXZpY2VJRC50b1VJbnRTdHJp
Y3QoJm9rKTsKLSAgICBpZiAoIW9rKQorICAgIGF1dG8gZGlzcGxheUlEID0gcGFyc2VJbnRlZ2Vy
PHVpbnQzMl90PihkZXZpY2VJRCk7CisgICAgaWYgKCFkaXNwbGF5SUQpCiAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSW52YWxpZCBkaXNwbGF5IGRldmljZSBJRCJfcyk7Ci0KLSAgICBh
dXRvIGFjdHVhbERpc3BsYXlJRCA9IHVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGF1
dG8gYWN0dWFsRGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwogICAgIGlm
ICghYWN0dWFsRGlzcGxheUlEKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFs
aWQgZGlzcGxheSBJRCJfcyk7Ci0KICAgICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OkNhcHR1cmVyPihtYWtlVW5pcXVlUmVmPFNjcmVlbkRpc3BsYXlDYXB0dXJl
ck1hYz4oYWN0dWFsRGlzcGxheUlELnZhbHVlKCkpKTsKIH0KIApAQCAtMjY3LDIwICsyNjUsMTgg
QEAgdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6Om5ld0ZyYW1lKENHRGlzcGxheVN0cmVh
bUZyYW1lU3RhdHVzIHN0YXR1cywgRGlzcGwKIAogT3B0aW9uYWw8Q2FwdHVyZURldmljZT4gU2Ny
ZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJ
RChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogewotICAgIGJvb2wgb2s7Ci0gICAgYXV0byBkaXNw
bGF5SUQgPSBkZXZpY2VJRC50b1VJbnRTdHJpY3QoJm9rKTsKLSAgICBpZiAoIW9rKSB7CisgICAg
YXV0byBkaXNwbGF5SUQgPSBwYXJzZUludGVnZXI8dWludDMyX3Q+KGRldmljZUlEKTsKKyAgICBp
ZiAoIWRpc3BsYXlJRCkgewogICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJTY3JlZW5EaXNw
bGF5Q2FwdHVyZXJNYWM6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEOiBkaXNw
bGF5IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGludGVnZXIiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBhdXRvIGFjdHVhbERpc3BsYXlJRCA9IHVw
ZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gdXBk
YXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwogICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBkZXZpY2UgPSBDYXB0dXJlRGV2
aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSwgQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCAiU2NyZWVuQ2FwdHVyZURldmljZSJfcyk7CisgICAgYXV0
byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKCphY3R1YWxEaXNwbGF5SUQp
LCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sICJTY3JlZW5DYXB0dXJlRGV2aWNl
Il9zKTsKICAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKLQogICAgIHJldHVybiBkZXZpY2U7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCmluZGV4IDgwNjMwNzNi
NzkyM2VlNzNlYWMxYTcyNWNlZGZhYjBhMTdlOTFlZjIuLjdlMDEzMDNmOWFiOTg3N2Y1NGQ4MGJm
YTY5OGI2ODE2MWMzZTI2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5t
bQpAQCAtMTA0LDE2ICsxMDQsMTUgQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHdpbmRvd0Rlc2NyaXB0aW9uKENHV2luZG93SUQgaWQpCiAKIEV4cGVjdGVkPFVuaXF1ZVJlZjxE
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4sIFN0cmluZz4gV2luZG93RGlzcGxh
eUNhcHR1cmVyTWFjOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKIHsKLSAgICBib29s
IG9rOwotICAgIGF1dG8gZGlzcGxheUlEID0gZGV2aWNlSUQudG9VSW50U3RyaWN0KCZvayk7Ci0g
ICAgaWYgKCFvaykKKyAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4o
ZGV2aWNlSUQpOworICAgIGlmICghZGlzcGxheUlEKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkludmFsaWQgd2luZG93IGRldmljZSBJRCJfcyk7CiAKLSAgICBhdXRvIHdpbmRvd0lu
Zm8gPSB3aW5kb3dEZXNjcmlwdGlvbihkaXNwbGF5SUQpOworICAgIGF1dG8gd2luZG93SW5mbyA9
IHdpbmRvd0Rlc2NyaXB0aW9uKCpkaXNwbGF5SUQpOwogICAgIGlmICghd2luZG93SW5mbykKICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHdpbmRvdyBJRCJfcyk7CiAKLSAg
ICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyPiht
YWtlVW5pcXVlUmVmPFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYz4oZGlzcGxheUlEKSk7CisgICAg
cmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4obWFr
ZVVuaXF1ZVJlZjxXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM+KCpkaXNwbGF5SUQpKTsKIH0KIAog
V2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWModWludDMy
X3Qgd2luZG93SUQpCkBAIC0xMzcsOSArMTM2LDggQEAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6RGlzcGxheUZyYW1lVHlwZSBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OmdlbmVyYXRlRnIK
IAogT3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5k
b3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQog
ewotICAgIGJvb2wgb2s7Ci0gICAgYXV0byB3aW5kb3dJRCA9IGlkU3RyaW5nLnRvVUludFN0cmlj
dCgmb2spOwotICAgIGlmICghb2spIHsKKyAgICBhdXRvIHdpbmRvd0lEID0gcGFyc2VJbnRlZ2Vy
PHVpbnQzMl90PihpZFN0cmluZyk7CisgICAgaWYgKCF3aW5kb3dJRCkgewogICAgICAgICBSRUxF
QVNFX0xPRyhXZWJSVEMsICJXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0NhcHR1cmVE
ZXZpY2VXaXRoUGVyc2lzdGVudElEOiB3aW5kb3cgSUQgZG9lcyBub3QgY29udmVydCB0byAzMi1i
aXQgaW50ZWdlciIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTE1
Nyw3ICsxNTUsNyBAQCBPcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBXaW5kb3dEaXNwbGF5Q2FwdHVy
ZXJNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdAogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KIAotICAgIGF1dG8gZGV2aWNlID0gQ2FwdHVyZURldmljZShTdHJp
bmc6Om51bWJlcih3aW5kb3dJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OldpbmRvdywg
d2luZG93VGl0bGUpOworICAgIGF1dG8gZGV2aWNlID0gQ2FwdHVyZURldmljZShTdHJpbmc6Om51
bWJlcigqd2luZG93SUQpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3csIHdpbmRv
d1RpdGxlKTsKICAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKIAogICAgIHJldHVybiBkZXZp
Y2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJz
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
CmluZGV4IDBkODk2NWM0N2FlMjM0YTMzNmY1ZDU0YjcwZDdjZGY3MmRmYzkxMjYuLjM3NmQ1ZTc2
M2NmMjdhN2M2ZGVkNzQ4MzU5ZDdhMzQ4YjNmZDM2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRl
Z2VyQ29udmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYwMSwxMSArNjAyLDggQEAgYm9vbCBwYXJzZVJh
bmdlKGNvbnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9u
ZyYgcmFuZ2VFbmQKICAgICAvLyBFeGFtcGxlOgogICAgIC8vICAgICAtNTAwCiAgICAgaWYgKCFp
bmRleCkgewotICAgICAgICBTdHJpbmcgc3VmZml4TGVuZ3RoU3RyaW5nID0gYnl0ZVJhbmdlLnN1
YnN0cmluZyhpbmRleCArIDEpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBib29sIG9rOwot
ICAgICAgICBsb25nIGxvbmcgdmFsdWUgPSBzdWZmaXhMZW5ndGhTdHJpbmcudG9JbnQ2NFN0cmlj
dCgmb2spOwotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICByYW5nZVN1ZmZpeExlbmd0aCA9
IHZhbHVlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjxsb25nIGxvbmc+
KFN0cmluZ1ZpZXcgeyBieXRlUmFuZ2UgfS5zdWJzdHJpbmcoaW5kZXggKyAxKSkpCisgICAgICAg
ICAgICByYW5nZVN1ZmZpeExlbmd0aCA9ICp2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC02MTMsMjQgKzYxMSwyMyBAQCBib29sIHBhcnNlUmFuZ2UoY29uc3QgU3RyaW5n
JiByYW5nZSwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBsb25nJiByYW5nZUVuZAogICAg
IC8vIEV4YW1wbGVzOgogICAgIC8vICAgICAwLTQ5OQogICAgIC8vICAgICA1MDAtCi0gICAgU3Ry
aW5nIGZpcnN0Qnl0ZVBvc1N0ciA9IGJ5dGVSYW5nZS5sZWZ0KGluZGV4KS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKLSAgICBib29sIG9rOwotICAgIGxvbmcgbG9uZyBmaXJzdEJ5dGVQb3MgPSBmaXJzdEJ5
dGVQb3NTdHIudG9JbnQ2NFN0cmljdCgmb2spOwotICAgIGlmICghb2spCisgICAgYXV0byBmaXJz
dEJ5dGVQb3MgPSBwYXJzZUludGVnZXI8bG9uZyBsb25nPihTdHJpbmdWaWV3IHsgYnl0ZVJhbmdl
IH0ubGVmdChpbmRleCkpOworICAgIGlmICghZmlyc3RCeXRlUG9zKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBTdHJpbmcgbGFzdEJ5dGVQb3NTdHIgPSBieXRlUmFuZ2Uuc3Vic3RyaW5n
KGluZGV4ICsgMSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgYXV0byBsYXN0Qnl0ZVBvc1N0ciA9
IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNwYWNlcyhTdHJpbmdWaWV3IHsgYnl0ZVJhbmdl
IH0uc3Vic3RyaW5nKGluZGV4ICsgMSkpOwogICAgIGxvbmcgbG9uZyBsYXN0Qnl0ZVBvcyA9IC0x
OwogICAgIGlmICghbGFzdEJ5dGVQb3NTdHIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGxhc3RCeXRl
UG9zID0gbGFzdEJ5dGVQb3NTdHIudG9JbnQ2NFN0cmljdCgmb2spOwotICAgICAgICBpZiAoIW9r
KQorICAgICAgICBhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPGxvbmcgbG9uZz4obGFzdEJ5dGVQ
b3NTdHIpOworICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBsYXN0Qnl0ZVBvcyA9ICp2YWx1ZTsKICAgICB9CiAKLSAgICBpZiAoZmlyc3RCeXRl
UG9zIDwgMCB8fCAhKGxhc3RCeXRlUG9zID09IC0xIHx8IGxhc3RCeXRlUG9zID49IGZpcnN0Qnl0
ZVBvcykpCisgICAgaWYgKCpmaXJzdEJ5dGVQb3MgPCAwIHx8ICEobGFzdEJ5dGVQb3MgPT0gLTEg
fHwgbGFzdEJ5dGVQb3MgPj0gKmZpcnN0Qnl0ZVBvcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJhbmdlT2Zmc2V0ID0gZmlyc3RCeXRlUG9zOworICAgIHJhbmdlT2Zmc2V0ID0gKmZp
cnN0Qnl0ZVBvczsKICAgICByYW5nZUVuZCA9IGxhc3RCeXRlUG9zOwogICAgIHJldHVybiB0cnVl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRD
b250ZW50UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRD
b250ZW50UmFuZ2UuY3BwCmluZGV4IDYxZjY3YjcwZDMwZmExN2UwZDVmZmRhNzc5MDFkNTYwZTM2
ZTYyNWUuLjQ0YzUxMDg1N2Y4M2U0ZTkzYWUwYTM5ODJlMjUzMzJhOTRlNjlmZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRSYW5n
ZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUNvbnRlbnRSYW5nZShT
dHJpbmdWaWV3IGhlYWRlclZhbHVlLCBpbnQ2NF90JiBmaXJzdEJ5dGVQb3NpdGlvbgogICAgIGlm
ICghZmlyc3RCeXRlU3RyaW5nLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSURpZ2l0Pigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIG9wdGlvbmFsRmlyc3RCeXRlUG9z
aXRpb24gPSBmaXJzdEJ5dGVTdHJpbmcudG9JbnQ2NFN0cmljdCgpOworICAgIGF1dG8gb3B0aW9u
YWxGaXJzdEJ5dGVQb3NpdGlvbiA9IHBhcnNlSW50ZWdlcjxpbnQ2NF90PihmaXJzdEJ5dGVTdHJp
bmcpOwogICAgIGlmICghb3B0aW9uYWxGaXJzdEJ5dGVQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGZpcnN0Qnl0ZVBvc2l0aW9uID0gKm9wdGlvbmFsRmlyc3RCeXRlUG9zaXRp
b247CkBAIC05Miw3ICs5Myw3IEBAIHN0YXRpYyBib29sIHBhcnNlQ29udGVudFJhbmdlKFN0cmlu
Z1ZpZXcgaGVhZGVyVmFsdWUsIGludDY0X3QmIGZpcnN0Qnl0ZVBvc2l0aW9uCiAgICAgaWYgKCFs
YXN0Qnl0ZVN0cmluZy5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlEaWdpdD4oKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBvcHRpb25hbExhc3RCeXRlUG9zaXRpb24g
PSBsYXN0Qnl0ZVN0cmluZy50b0ludDY0U3RyaWN0KCk7CisgICAgYXV0byBvcHRpb25hbExhc3RC
eXRlUG9zaXRpb24gPSBwYXJzZUludGVnZXI8aW50NjRfdD4obGFzdEJ5dGVTdHJpbmcpOwogICAg
IGlmICghb3B0aW9uYWxMYXN0Qnl0ZVBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgbGFzdEJ5dGVQb3NpdGlvbiA9ICpvcHRpb25hbExhc3RCeXRlUG9zaXRpb247CkBAIC0xMDQs
NyArMTA1LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VDb250ZW50UmFuZ2UoU3RyaW5nVmlldyBoZWFk
ZXJWYWx1ZSwgaW50NjRfdCYgZmlyc3RCeXRlUG9zaXRpb24KICAgICAgICAgaWYgKCFpbnN0YW5j
ZVN0cmluZy5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlEaWdpdD4oKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvIG9wdGlvbmFsSW5zdGFuY2VMZW5ndGgg
PSBpbnN0YW5jZVN0cmluZy50b0ludDY0U3RyaWN0KCk7CisgICAgICAgIGF1dG8gb3B0aW9uYWxJ
bnN0YW5jZUxlbmd0aCA9IHBhcnNlSW50ZWdlcjxpbnQ2NF90PihpbnN0YW5jZVN0cmluZyk7CiAg
ICAgICAgIGlmICghb3B0aW9uYWxJbnN0YW5jZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaW5zdGFuY2VMZW5ndGggPSAqb3B0aW9uYWxJbnN0YW5jZUxlbmd0aDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVz
dFJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVz
dFJhbmdlLmNwcAppbmRleCA1NDJmMTU3Y2Q5NDczMjg0NTg2YjhkMDM4NzlkZDllNjFlMTQyYzMy
Li4xYzRkM2MzZjI0Nzc0NmY0YWZmMjBhY2M5YzIwMjYxZTYxOWFhYmQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhcnNlZFJlcXVlc3RS
YW5nZS5oIgogCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQ0LDEzICs0NCwxMyBAQCBPcHRpb25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IFBhcnNl
ZFJlcXVlc3RSYW5nZTo6cGFyc2UoU3RyaW5nVmlldyBpbnB1dCkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGF1dG8gYmVnaW5TdHJpbmcgPSBpbnB1dC5zdWJzdHJpbmcocmFu
Z2VCZWdpblBvc2l0aW9uLCBkYXNoUG9zaXRpb24gLSByYW5nZUJlZ2luUG9zaXRpb24pOwotICAg
IGF1dG8gb3B0aW9uYWxCZWdpbiA9IGJlZ2luU3RyaW5nLnRvVUludDY0U3RyaWN0KCk7CisgICAg
YXV0byBvcHRpb25hbEJlZ2luID0gcGFyc2VJbnRlZ2VyPHVpbnQ2NF90PihiZWdpblN0cmluZyk7
CiAgICAgaWYgKCFvcHRpb25hbEJlZ2luKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIGJlZ2luID0gKm9wdGlvbmFsQmVnaW47CiAKICAgICBhdXRvIGVuZFN0cmluZyA9IGlucHV0
LnN1YnN0cmluZyhkYXNoUG9zaXRpb24gKyAxKTsKLSAgICBhdXRvIG9wdGlvbmFsRW5kID0gZW5k
U3RyaW5nLnRvVUludDY0U3RyaWN0KCk7CisgICAgYXV0byBvcHRpb25hbEVuZCA9IHBhcnNlSW50
ZWdlcjx1aW50NjRfdD4oZW5kU3RyaW5nKTsKICAgICBpZiAoIW9wdGlvbmFsRW5kKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGVuZCA9ICpvcHRpb25hbEVuZDsK
</data>
<flag name="review"
          id="448940"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>