<?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>187632</bug_id>
          
          <creation_ts>2018-07-12 20:24:07 -0700</creation_ts>
          <short_desc>Dark Mode: document markers are difficult to see</short_desc>
          <delta_ts>2018-07-16 10:31:48 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1441784</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-12 20:24:07 -0700</bug_when>
    <thetext>The contrast of the document markers, especially for auto-corrected words (blue), is quite bad. We should update these colours in this mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441786</commentid>
    <comment_count>1</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-12 20:24:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/41099719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441787</commentid>
    <comment_count>2</comment_count>
      <attachid>344922</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-12 20:34:05 -0700</bug_when>
    <thetext>Created attachment 344922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441791</commentid>
    <comment_count>3</comment_count>
      <attachid>344922</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-07-12 21:42:07 -0700</bug_when>
    <thetext>Comment on attachment 344922
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:112
&gt; +enum class DocumentMarkerLineStyle {

: uint8_t, didn’t you see Simon’s slides :)

These aren’t stored much, but they are recorded in display lists!!

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2784
&gt; +static RetainPtr&lt;CGColorRef&gt; colorWithComponents(int r, int g, int b, int a)
&gt; +{
&gt; +    CGFloat components[4] = { CGFloat(r / 255.0), CGFloat(g / 255.0), CGFloat(b / 255.0), CGFloat(a / 100.0) };
&gt; +    return adoptCF(CGColorCreate(sRGBColorSpaceRef(), components));
&gt; +}

This is pretty goofy because A) it doesn’t use our platform color cache, and B) you’ve invented your own color format where alpha is 0-100.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2810
&gt; +    auto dotSize = CGSizeMake(patternHeight, patternHeight);

What’s the point of dotSize? This is a weirdly roundabout way to propagate patternHeight to the two places it goes below :)

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2828
&gt; +    for (int numberOfDots = 0; numberOfDots * patternWidth &lt; width; ++numberOfDots)
&gt; +        CGContextAddEllipseInRect(ctx, CGRectMake(offsetPoint.x() + numberOfDots * patternWidth, offsetPoint.y(), dotSize.width, dotSize.height));

I think I would make the iterator be the x position instead of numberOfDots and increment by the patternWidth and then this would be less repeaty, but it doesn’t really matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441881</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-13 09:34:11 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #3)
&gt; Comment on attachment 344922 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=344922&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.h:112
&gt; &gt; +enum class DocumentMarkerLineStyle {
&gt; 
&gt; : uint8_t, didn’t you see Simon’s slides :)

I don&apos;t know, did I?

&gt; These aren’t stored much, but they are recorded in display lists!!

Changing the enum to uint8_t.
 
&gt; &gt; Source/WebCore/rendering/RenderThemeMac.mm:2784
&gt; &gt; +static RetainPtr&lt;CGColorRef&gt; colorWithComponents(int r, int g, int b, int a)
&gt; &gt; +{
&gt; &gt; +    CGFloat components[4] = { CGFloat(r / 255.0), CGFloat(g / 255.0), CGFloat(b / 255.0), CGFloat(a / 100.0) };
&gt; &gt; +    return adoptCF(CGColorCreate(sRGBColorSpaceRef(), components));
&gt; &gt; +}
&gt; 
&gt; This is pretty goofy because A) it doesn’t use our platform color cache, and
&gt; B) you’ve invented your own color format where alpha is 0-100.

What I think is goofy is to use a 0-255 range for alpha, but it&apos;s OK, I&apos;ll use makeRBA() and Color().

&gt; &gt; Source/WebCore/rendering/RenderThemeMac.mm:2810
&gt; &gt; +    auto dotSize = CGSizeMake(patternHeight, patternHeight);
&gt; 
&gt; What’s the point of dotSize? This is a weirdly roundabout way to propagate
&gt; patternHeight to the two places it goes below :)

I&apos;ll remove it.

&gt; &gt; Source/WebCore/rendering/RenderThemeMac.mm:2828
&gt; &gt; +    for (int numberOfDots = 0; numberOfDots * patternWidth &lt; width; ++numberOfDots)
&gt; &gt; +        CGContextAddEllipseInRect(ctx, CGRectMake(offsetPoint.x() + numberOfDots * patternWidth, offsetPoint.y(), dotSize.width, dotSize.height));
&gt; 
&gt; I think I would make the iterator be the x position instead of numberOfDots
&gt; and increment by the patternWidth and then this would be less repeaty, but
&gt; it doesn’t really matter.

I will take this suggestion!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441966</commentid>
    <comment_count>5</comment_count>
      <attachid>344968</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-13 12:59:12 -0700</bug_when>
    <thetext>Created attachment 344968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441971</commentid>
    <comment_count>6</comment_count>
      <attachid>344968</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-13 13:06:30 -0700</bug_when>
    <thetext>Comment on attachment 344968
Patch

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

&gt; Source/WebCore/rendering/RenderTheme.h:256
&gt; +    virtual void drawLineForDocumentMarker(const RenderText&amp;, GraphicsContext&amp;, const FloatPoint&amp;, float, DocumentMarkerLineStyle);

Please give names to the parameters whose roles are not obvious.

&gt; Source/WebCore/rendering/RenderThemeMac.h:171
&gt; +    void drawLineForDocumentMarker(const RenderText&amp;, GraphicsContext&amp;, const FloatPoint&amp;, float, DocumentMarkerLineStyle) final;

Likewise.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2803
&gt; +    auto patternWidth = cMisspellingLinePatternWidth;

Why not just use cMisspellingLinePatternWidth below?

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2804
&gt; +    auto patternHeight = cMisspellingLineThickness;

Ditto.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:2807
&gt; +    // Make sure to draw only complete dots allowing slightly more considering that the pattern ends with a transparent pixel.

Not sure this comment still makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441991</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-13 13:34:32 -0700</bug_when>
    <thetext>Committed r233814: &lt;https://trac.webkit.org/changeset/233814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442011</commentid>
    <comment_count>8</comment_count>
      <attachid>344968</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-07-13 14:23:13 -0700</bug_when>
    <thetext>Comment on attachment 344968
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        No new test due to webkit.org/b/105616, webkit.org/b/187655 was raised to track the creation of new tests

webkit.org/b/105616 is about spell checking not working in WebKit2. Spell checkers work in WebKitLegacy. We have existing tests for spelling dots that run without issue in DumpRenderTree. One such example is &lt;https://trac.webkit.org/browser/trunk/LayoutTests/editing/spelling/spelling-marker-includes-hyphen.html?rev=223013&gt;. Clearly with such support we can write a pixel test though it would be better to write tests using some other strategy as we do not run pixel tests on the bots. It may be non-trivial to write a ref test for this :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442023</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-13 14:39:41 -0700</bug_when>
    <thetext>A ref test should be easy. Just scale up 20x with a transform, and clip to show the interior of a couple of dots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442398</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2018-07-16 09:10:27 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #9)
&gt; A ref test should be easy. Just scale up 20x with a transform, and clip to
&gt; show the interior of a couple of dots.

The problem has been getting the dots to draw _at all_ in DRT/WKTR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442411</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-16 10:31:48 -0700</bug_when>
    <thetext>Just add testing SPI to explicitly mark a range as having spelling dots.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344922</attachid>
            <date>2018-07-12 20:34:05 -0700</date>
            <delta_ts>2018-07-13 12:59:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187632-20180712203404.patch</filename>
            <type>text/plain</type>
            <size>28155</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzNzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmEzNGUyMjQ3ZjZiNjk4
NWFlNGU4YzA4ZWY5MWIzODI5YjY2OWNiNy4uMGJiMTQ3NzkyOThkMDM5ZmI3ZTczM2JiYTFjYTk5
YThkZWJjYTE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE4LTA3LTEyICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgRGFyayBNb2RlOiBkb2N1
bWVudCBtYXJrZXJzIGFyZSBkaWZmaWN1bHQgdG8gc2VlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc2MzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzQxMDk5NzE5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIHVwZGF0ZSB0aGUgd2F5IHdlIGRyYXcgdGhlIGRvY3VtZW50IG1hcmtlcnMgZm9yIG1h
Y09TIGFuZCB1c2UgbW9yZSBjb25zdHJhc3RpbmcgY29sb3JzIGluIGRhcmsgbW9kZS4KKyAgICAg
ICAgUGF2aW5nIHRoZSB3YXkgZm9yIGZ1dHVyZSBpbXByb3ZlbWVudHMsIHdlIG1vdmUgdGhlIGRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKSBtZXRob2QgZnJvbSBHcmFwaGljc0NvbnRleHQKKyAg
ICAgICAgdG8gUmVuZGVyVGhlbWUgYW5kIGltcGxlbWVudCBhIGZpcnN0IHZlcnNpb24gaW4gUmVu
ZGVyVGhlbWVNYWMuIFRoZSBjaXJjbGVzIHVzZWQgZm9yIHRoZSB1bmRlcmxpbmUgYXJlIG5vdwor
ICAgICAgICBkcmF3biBkaXJlY3RseSB3aXRoIENvcmUgR3JhcGhpY3MgYW5kIHdlIG5vIGxvbmdl
ciB1c2UgYW4gaW1hZ2UgcmVzb3VyY2UuIFRvIGFsbG93IGJvdGggR3JhcGhpY3NDb250ZXh0Cisg
ICAgICAgIGFuZCBSZW5kZXJUaGVtZSB0byBoYXZlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUg
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpIG1ldGhvZCwgdGhlIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlCisgICAgICAgIGVudW0gaXMgbm93IGFuICJlbnVtIGNsYXNzIi4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50
TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1h
cmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6IENhbGwgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigp
IG9uIHRoZSBSZW5kZXJUaGVtZSBvbgorICAgICAgICBtYWNPUyBhbmQgb24gR3JhcGhpY3NDb250
ZXh0IGluIGFsbCBvdGhlciBjYXNlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yV2l0aENvbXBvbmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JGb3JTdHlsZSk6IFByb3ZpZGUgZGlmZmVyZW50IGNvbG9ycyBmb3Ig
bGlnaHQgYW5kIGRhcmsgbW9kZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6IEEgbmV3IG1hY09TLXNwZWNpZmljIHZlcnNpb24g
b2YgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpCisgICAgICAgIHdoZXJlIHdlIHBhaW50IGNp
cmNsZXMgdXNpbmcgQ29yZSBHcmFwaGljcyBkaXJlY3RseS4KKwogMjAxOC0wNy0xMSAgQW50b2lu
ZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10g
TWFrZSBXUFQgdGVzdCBhdCBpbnRlcmZhY2VzL0tleWZyYW1lRWZmZWN0L3Byb2Nlc3NpbmctYS1r
ZXlmcmFtZXMtYXJndW1lbnQtMDAxLmh0bWwgcGFzcyByZWxpYWJseQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmFjODFk
NGQxYmU4MWZhYzBmZjUxZjliY2E1YzM5M2YxZGU5ZGU3Li4xYTBiNTA5NTYyMzk2ZDAzYWUwNDFm
ZGVlOGVlNWY3OGFmYjFjYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTA5LDYgKzEwOSwxNCBAQCBlbnVtIFN0cm9r
ZVN0eWxlIHsKICAgICBXYXZ5U3Ryb2tlLAogfTsKIAorZW51bSBjbGFzcyBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSB7CisgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlcywKKyAgICBTcGVsbGluZywKKyAgICBHcmFtbWFyLAorICAgIEF1dG9jb3JyZWN0aW9uUmVw
bGFjZW1lbnQsCisgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCit9OworCiBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogY2xhc3MgUmVjb3JkZXI7CiB9CkBAIC00MTEsMTUgKzQxOSw2IEBAIHB1Ymxp
YzoKICAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xp
ZFN0cm9rZSk7CiAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICBlbnVtIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIFRleHRDaGVja2luZ0Rp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGUsCi0jZW5kaWYKLSAgICAgICAg
RG9jdW1lbnRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZSwKLSAgICAgICAgRG9jdW1lbnRNYXJrZXJH
cmFtbWFyTGluZVN0eWxlLAotICAgICAgICBEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVw
bGFjZW1lbnRMaW5lU3R5bGUsCi0gICAgICAgIERvY3VtZW50TWFya2VyRGljdGF0aW9uQWx0ZXJu
YXRpdmVzTGluZVN0eWxlCi0gICAgfTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVEb2N1bWVudE1h
cmtlclJlc291cmNlcygpOwogICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0SW1wbC5oCmluZGV4IDg2ODZkMmI4NjBkNWQwMzdhNjFkMzJlOTk0NDNmY2NjOTNhNDNlZWMu
LjZiY2Y3NjhhZGZkODllZTBiMTk2YTNlYTYyZWUwNjgwYzhhZDE4ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgK
QEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9h
dCBzdHJva2VUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4
dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggYjdhZTRlOGNmMTBhODBkYTVjNGI1
M2YzODdlNGU5ZmFjNDA2MTQ2NC4uYzRlY2Q5MTBmYzU3MjEyODUwZDQ3ZWFmNmNlMzRmOTRkNzYw
YjZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xMDQ5LDE4ICsxMDQ5LDE4IEBAIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBwCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRl
eHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBkcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQogewotICAgIGlmIChzdHlsZSAhPSBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2Vy
U3BlbGxpbmdMaW5lU3R5bGUKLSAgICAgICAgJiYgc3R5bGUgIT0gR3JhcGhpY3NDb250ZXh0OjpE
b2N1bWVudE1hcmtlckdyYW1tYXJMaW5lU3R5bGUpCisgICAgaWYgKHN0eWxlICE9IERvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpTcGVsbGluZworICAgICAgICAmJiBzdHlsZSAhPSBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6R3JhbW1hcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKIAotICAgIGlm
IChzdHlsZSA9PSBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyU3BlbGxpbmdMaW5lU3R5
bGUpCisgICAgaWYgKHN0eWxlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpTcGVsbGluZykK
ICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEsIDAsIDApOwotICAgIGVsc2UgaWYg
KHN0eWxlID09IEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxl
KQorICAgIGVsc2UgaWYgKHN0eWxlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpHcmFtbWFy
KQogICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwgMSwgMCk7CiAKICAgICBkcmF3
RXJyb3JVbmRlcmxpbmUoY3IsIG9yaWdpbi54KCksIG9yaWdpbi55KCksIHdpZHRoLCBjTWlzc3Bl
bGxpbmdMaW5lVGhpY2tuZXNzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNjM0Y2MwYWFmYmE4YmYx
OGY4N2VmYzQwY2RhZTU1MWY4YThkNTQwOC4uMzliNTJhNzIxMjI0ZTBiMDAzZWEzMzQyODlkMmEw
MDdhOTJjNDdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdTdXJmYWNlKFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY2Fpcm9fc3Vy
ZmFjZV90KiwgY29uc3QgRgogdm9pZCBkcmF3UmVjdChQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25zdCBDb2xvciYsIFN0cm9rZVN0eWxlLCBjb25zdCBD
b2xvciYpOwogdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxv
YXQsIGJvb2wpOwogdm9pZCBkcmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOwotdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKFBsYXRmb3JtQ29u
dGV4dENhaXJvJiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBHcmFwaGljc0NvbnRleHQ6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlKTsKK3ZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihQ
bGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpOwogdm9pZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHRDYWlybyYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOwogCiB2b2lkIGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBj
b25zdCBQYXRoJiwgZmxvYXQsIGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmNwcAppbmRleCBjM2QxNGM5NWI1NTBkMjc2M2M3OGY1NjRlMDU3NGE5Yjk5ODI0
NGYxLi5lMDZlNDAzMWQ4NzlkMTkwMzY5YWFjODM4NzY4MDQ5ODRjNjVhN2NkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRAogICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1D
b250ZXh0LCBwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9p
bnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBDYWlybzo6ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgb3JpZ2luLCB3aWR0aCwgc3R5bGUpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAppbmRleCA3OWNhMTJkZDY5Yjk5Nzk5
NWIwNzMwMmY2MWUzNDE3Y2M4Y2RlMWVkLi45OTdjYmRkYTUxYzNmMWMwYzUyZDUwZmNjZWE0ZTU4
NTk1YjhhNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtODAsNyAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRl
OworICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCmluZGV4IDNm
ZTIwODFkNWFiNmZhMDA1NTJmYjlkM2E4N2FkYjI1YzU3YTViMTQuLmI1YTlkNjY4ZjE4YTU5MThi
YTI4YzllZGVjMGFkZWViN2VkZmNkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCkBA
IC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcKICAgICBDR1BhdHRlcm5S
ZWYgZG90UGF0dGVybjsKICNlbmRpZgogICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICBjYXNlIERv
Y3VtZW50TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6IHsKKyAgICBjYXNlIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpTcGVsbGluZzogewogICAgICAgICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5n
IHBhdHRlcm4gY29sb3IuCiAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcg
PSBmYWxzZTsKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB3CiAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJHcmFtbWFyTGlu
ZVN0eWxlOiB7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6R3JhbW1hcjogewog
I2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIC8vIENvbnN0YW50cyBmb3IgZ3JhbW1hciBwYXR0
ZXJuIGNvbG9yLgogICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxz
ZTsKQEAgLTI3Nyw4ICsyNzcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgIH0KICNp
ZiBQTEFURk9STShNQUMpCiAgICAgLy8gVG8gc3VwcG9ydCBjb3JyZWN0aW9uIHBhbmVsLgotICAg
IGNhc2UgRG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlOgot
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6IHsK
KyAgICBjYXNlIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpBdXRvY29ycmVjdGlvblJlcGxhY2Vt
ZW50OgorICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OkRpY3RhdGlvbkFsdGVybmF0
aXZlczogewogICAgICAgICAvLyBDb25zdGFudHMgZm9yIHNwZWxsaW5nIHBhdHRlcm4gY29sb3Iu
CiAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKICAgICAg
ICAgaWYgKCFjb3JyZWN0aW9uSW1hZ2UpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHcKICAgICB9CiAjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCi0gICAgY2FzZSBU
ZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlOiB7Cisg
ICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlczogewogICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckRp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIENH
UGF0dGVyblJlZiBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0
ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAi
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0RvdCIpLmxlYWtSZWYoKTsKICAgICAgICAg
ZG90UGF0dGVybiA9IGRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNQYXR0ZXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggOWYwOTkxMDIyNWMyMTRiYmY4YWZjOWY5
OTU1OTNhYzZiNTY0MWFkZS4uZjAwZWE3ZTg1Y2IxY2Q1MjQ2OWJlMTU4OGQwMTFlODM4NDczYzEz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC04MzAsNyArODMwLDcgQEAg
cHJpdmF0ZToKIAogY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBHcmFwaGlj
c0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHN0YXRpYyBSZWY8
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKHBvaW50
LCB3aWR0aCwgc3R5bGUpKTsKICAgICB9CkBAIC04MzksNyArODM5LDcgQEAgcHVibGljOgogICAg
IGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogCiBwcml2YXRlOgotICAg
IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQor
ICAgIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKICAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKICAgICAgICAgLCBt
X3BvaW50KHBvaW50KQogICAgICAgICAsIG1fd2lkdGgod2lkdGgpCkBAIC04NTMsNyArODUzLDcg
QEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UG9pbnQgbV9wb2ludDsKICAgICBmbG9hdCBtX3dpZHRo
OwotICAgIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsK
KyAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOwogfTsKIAogY2xhc3MgRHJhd0Vs
bGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCmluZGV4IGExN2M1OTE1NmQ5MWMyMjBmYjkxZmNkZjZmNTg5MDczZWIxOTU2
NjguLmVhMjczMjZiNTYxZjE5ZGUyMjQ3M2UzYmFjODNmNDRmYWEwOTJmZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lk
IFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIHN0eWxlKQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50
LCB3aWR0aCwgc3R5bGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDdkZTdkNDY0YzFiZTQ4OGMzOTUy
NTdiYzNmZjNkOTE3MGVmYjVhNzQuLmM1YWM3MDkxMzk1ZmE0ZmU4M2EzMWQyYzg4ZGIxZTg4YTdh
ZGEzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtOTgsNyAr
OTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2lu
dCYsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBlNDc5M2Vj
NmVlZWU2ODczZTdkYWJhODU4YzFkMTgxY2JhMDNlYTAyLi45YTk1NGUyMmI5NGJiYWU5Y2IxNzVm
ZWFmYzA0MmZmZmViNWFmZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNjUyLDkgKzY1Miw5IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgRGFzCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4
dD4ocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIG9y
aWdpbiwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgc3RydWN0IERyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50
LCBmbG9hdCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4geworICAg
IHN0cnVjdCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlPiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRl
ZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCAzNmNlNjM3ZTQ5OGQ0NzY5ODE0MWE1MGI5MjVlMGY1
ODJkY2ZmYTgyLi5kYzQ4NDllNWNmNGE4Y2E5MmYzOWEyNjVjZDk5YzE0M2E5OGNkNTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jiwg
ZmxvYXQsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgZmxvYXQsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92
ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAppbmRleCBjNDc4ODRkNWRiYjg1Mjll
ZDY5MWQxZjVlNmY5ZjBjZDg0NDQ2YWVmLi5jNjhlNjA2YzA4NDQ3YzNiNDAyZDE4N2YyZTY5MmY1
N2NkNjljZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKQEAgLTE5NSw3ICsxOTUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSAhPSBEb2N1bWVudE1hcmtlclNwZWxsaW5n
TGluZVN0eWxlICYmIHN0eWxlICE9IERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSkKKyAg
ICBpZiAoc3R5bGUgIT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlNwZWxsaW5nICYmIHN0eWxl
ICE9IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpHcmFtbWFyKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBUaGVzZSBhcmUgdGhlIHNhbWUgZm9yIG1pc3NwZWxsaW5nIG9yIGJhZCBncmFtbWFy
CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUgPT0g
RG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxlID8gZ3JhbW1hclBhdHRlcm5Db2xvcigpIDog
c3BlbGxpbmdQYXR0ZXJuQ29sb3IoKTsKKyAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0g
c3R5bGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVy
bkNvbG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpOwogICAgIHNldENHU3Ryb2tlQ29sb3Io
Y29udGV4dCwgcGF0dGVybkNvbG9yKTsKIAogICAgIHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3Bh
Y2UoY29udGV4dCwgcG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IGY3MjUwNTNiNDYxZjFjMjQ1MzczOTVmMjYyNzBiYjQwODc2NDU0MDYuLjhm
YjNlNDhiZWUxOWE2MzNkNWY0NmNhNzVhNDcwNDBhMTM1YTU3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTY4OSwyMSArNjg5LDIxIEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QKICAgICBhdXRvIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlID0g
W10gKE1hcmtlZFRleHQ6OlR5cGUgdHlwZSkgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBNYXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yOgotICAgICAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZTsKKyAgICAg
ICAgICAgIHJldHVybiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6U3BlbGxpbmc7CiAgICAgICAg
IGNhc2UgTWFya2VkVGV4dDo6R3JhbW1hckVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxlOworICAgICAgICAgICAg
cmV0dXJuIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpHcmFtbWFyOwogICAgICAgICBjYXNlIE1h
cmtlZFRleHQ6OkNvcnJlY3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
OjpEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU7CisgICAg
ICAgICAgICByZXR1cm4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OkF1dG9jb3JyZWN0aW9uUmVw
bGFjZW1lbnQ7CiAgICAgICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVz
OgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJEaWN0
YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU7CisgICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
czoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW5hbWUgVGV4dENoZWNraW5nRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlc0xpbmVTdHlsZSBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJT1Mp
LWd1YXJkLgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5n
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0xpbmVTdHlsZTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW5hbWUgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlRleHRDaGVja2luZ0RpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgYW5kIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1n
dWFyZC4KKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOwog
I2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyU3Bl
bGxpbmdMaW5lU3R5bGU7CisgICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6OlNwZWxsaW5nOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtNzI0LDcgKzcyNCwxMiBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdo
LCBwbGFjZSB0aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBi
aWcgZ2FwLgogICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQor
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5kcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKHJlbmRlcmVyKCksIGNvbnRleHQsIEZsb2F0UG9pbnQoYm94T3Jp
Z2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgs
IGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlKG1hcmtlZFRleHQudHlwZSkpOworI2Vsc2UKICAg
ICBjb250ZXh0LmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgbGlu
ZVN0eWxlRm9yTWFya2VkVGV4dFR5cGUobWFya2VkVGV4dC50eXBlKSk7CisjZW5kaWYKIH0KIAog
YXV0byBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8pIGNvbnN0IC0+IE1hcmtlZFRleHRTdHlsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggNTRiZGU3MGFjNWE5NWU4M2Jh
ZjMxY2ZmYzdkMzljNDY5M2EzNzRjZS4uMGE0MTEzYWJiNzYzYzIzMzEyMzkxYTVlZmUzZWY5OTU1
NjlkY2QyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0x
NDEyLDQgKzE0MTIsOCBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1UYXBIaWdobGlnaHRD
b2xvcigpIGNvbnN0CiAKICNlbmRpZgogCit2b2lkIFJlbmRlclRoZW1lOjpkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IFJlbmRlclRleHQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKQoreworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCmlu
ZGV4IGY1ZWIwNWQ0ZmU1OTBlZDM5OTU5YjM3MGY4ODcxYmU1NjcxNmRmNjkuLmU5MTg2NWM5MzM3
ZTcxNzhjOTQ0MTM0Y2EwNTI2ZGFhYzE3Y2UxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJDb2xvckhhc2guaCIK
ICNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51U3R5bGUuaCIKICNp
bmNsdWRlICJTY3JvbGxUeXBlcy5oIgpAQCAtMjUyLDYgKzI1Myw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKICNlbmRpZgogCisgICAgdmlydHVhbCB2b2lkIGRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgUmVuZGVyVGV4dCYsIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBjYWNoZWRTeXN0
ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBz
eXN0ZW1Gb250SUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCmluZGV4IDM5Njk2ODVlZmZkOWFlNjJm
OTRkN2EzZmU5NTk2NjM1MjEzMzNmNDcuLjdiNTljNTFhYmEzYjA2NjRkODJjZjEwNDgzMzFkMDQ1
NDc3NDU3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCkBA
IC0xNjgsNiArMTY4LDggQEAgcHJpdmF0ZToKICAgICBib29sIHBhaW50QXR0YWNobWVudChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7
CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBSZW5k
ZXJUZXh0JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIGZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IGZpbmFsOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMjZkYTQyOTRhYTUzOWFi
ZDQ0NDlkNjJkNDgyYjZlYmE5ZWRkYTg5MC4uMWNlMDg5NGVjM2NlZWRmYWM1NWY2ODhiZjMyMjcz
YmUwNmI4YjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbXBvcnQg
IkZyYW1lVmlldy5oIgogI2ltcG9ydCAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQg
IkhUTUxBdHRhY2htZW50RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgpA
QCAtMjc3Niw2ICsyNzc3LDU5IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QXR0YWNobWVu
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluCiAKICNlbmRpZiAv
LyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCitzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGNvbG9yV2l0aENvbXBvbmVudHMoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7Cisg
ICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyBDR0Zsb2F0KHIgLyAyNTUuMCksIENHRmxvYXQo
ZyAvIDI1NS4wKSwgQ0dGbG9hdChiIC8gMjU1LjApLCBDR0Zsb2F0KGEgLyAxMDAuMCkgfTsKKyAg
ICByZXR1cm4gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBv
bmVudHMpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvckZvclN0eWxl
KERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlLCBib29sIHVzZURhcmtNb2RlKQoreworICAg
IHN3aXRjaCAoc3R5bGUpIHsKKyAgICAvLyBSZWQuCisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6U3BlbGxpbmc6CisgICAgICAgIHJldHVybiB1c2VEYXJrTW9kZSA/IGNvbG9yV2l0
aENvbXBvbmVudHMoMjU1LCAxNDAsIDE0MCwgODUpIDogY29sb3JXaXRoQ29tcG9uZW50cygyNTUs
IDU5LCA0OCwgNzUpOworICAgIC8vIEJsdWUuCisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6CisgICAg
Y2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudDoK
KyAgICAgICAgcmV0dXJuIHVzZURhcmtNb2RlID8gY29sb3JXaXRoQ29tcG9uZW50cyg0MCwgMTQ1
LCAyNTUsIDg1KSA6IGNvbG9yV2l0aENvbXBvbmVudHMoMCwgMTIyLCAyNTUsIDc1KTsKKyAgICAv
LyBHcmVlbi4KKyAgICBjYXNlIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpHcmFtbWFyOgorICAg
ICAgICByZXR1cm4gdXNlRGFya01vZGUgPyBjb2xvcldpdGhDb21wb25lbnRzKDUwLCAyMTUsIDc1
LCA4NSkgOiBjb2xvcldpdGhDb21wb25lbnRzKDI1LCAxNzUsIDUwLCA3NSk7CisgICAgfQorfQor
Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IFJl
bmRlclRleHQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxl
KQoreworICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybldpZHRo
OworICAgIGF1dG8gcGF0dGVybkhlaWdodCA9IGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3M7Cisg
ICAgYXV0byBkb3RTaXplID0gQ0dTaXplTWFrZShwYXR0ZXJuSGVpZ2h0LCBwYXR0ZXJuSGVpZ2h0
KTsKKyAgICBhdXRvIGNpcmNsZUNvbG9yID0gY29sb3JGb3JTdHlsZShzdHlsZSwgcmVuZGVyZXIu
cGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFuY2UoKSAmJiByZW5kZXJlci5wYWdlKCkudXNlRGFya0Fw
cGVhcmFuY2UoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdG8gZHJhdyBvbmx5IGNvbXBsZXRlIGRv
dHMgYWxsb3dpbmcgc2xpZ2h0bHkgbW9yZSBjb25zaWRlcmluZyB0aGF0IHRoZSBwYXR0ZXJuIGVu
ZHMgd2l0aCBhIHRyYW5zcGFyZW50IHBpeGVsLgorICAgIEZsb2F0UG9pbnQgb2Zmc2V0UG9pbnQg
PSBvcmlnaW47CisgICAgZmxvYXQgd2lkdGhNb2QgPSBmbW9kZih3aWR0aCwgcGF0dGVybldpZHRo
KTsKKyAgICBpZiAocGF0dGVybldpZHRoIC0gd2lkdGhNb2QgPiBjTWlzc3BlbGxpbmdMaW5lUGF0
dGVybkdhcFdpZHRoKSB7CisgICAgICAgIGZsb2F0IGdhcEluY2x1ZGVXaWR0aCA9IDA7CisgICAg
ICAgIGlmICh3aWR0aCA+IHBhdHRlcm5XaWR0aCkKKyAgICAgICAgICAgIGdhcEluY2x1ZGVXaWR0
aCA9IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGg7CisgICAgICAgIG9mZnNldFBvaW50
Lm1vdmUoZmxvb3IoKHdpZHRoTW9kICsgZ2FwSW5jbHVkZVdpZHRoKSAvIDIpLCAwKTsKKyAgICAg
ICAgd2lkdGggLT0gd2lkdGhNb2Q7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVmIGN0eCA9IGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyIHsgY3R4IH07CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGN0eCwgY2ly
Y2xlQ29sb3IuZ2V0KCkpOworICAgIGZvciAoaW50IG51bWJlck9mRG90cyA9IDA7IG51bWJlck9m
RG90cyAqIHBhdHRlcm5XaWR0aCA8IHdpZHRoOyArK251bWJlck9mRG90cykKKyAgICAgICAgQ0dD
b250ZXh0QWRkRWxsaXBzZUluUmVjdChjdHgsIENHUmVjdE1ha2Uob2Zmc2V0UG9pbnQueCgpICsg
bnVtYmVyT2ZEb3RzICogcGF0dGVybldpZHRoLCBvZmZzZXRQb2ludC55KCksIGRvdFNpemUud2lk
dGgsIGRvdFNpemUuaGVpZ2h0KSk7CisgICAgQ0dDb250ZXh0U2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGN0eCwga0NHQ29tcG9zaXRlU292ZXIpOworICAgIENHQ29udGV4dEZpbGxQYXRoKGN0eCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344968</attachid>
            <date>2018-07-13 12:59:12 -0700</date>
            <delta_ts>2018-07-13 13:06:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187632-20180713125912.patch</filename>
            <type>text/plain</type>
            <size>28025</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzNzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmEzNGUyMjQ3ZjZiNjk4
NWFlNGU4YzA4ZWY5MWIzODI5YjY2OWNiNy4uZGZmMzAwZDEyMzE2MjkzNDVkZTFjZmU0ZTZhMjNi
YmUwZDc4Yjg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE4LTA3LTEzICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgRGFyayBNb2RlOiBkb2N1
bWVudCBtYXJrZXJzIGFyZSBkaWZmaWN1bHQgdG8gc2VlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc2MzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzQxMDk5NzE5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIHVwZGF0ZSB0aGUgd2F5IHdlIGRyYXcgdGhlIGRvY3VtZW50IG1hcmtlcnMgZm9yIG1h
Y09TIGFuZCB1c2UgbW9yZSBjb25zdHJhc3RpbmcgY29sb3JzIGluIGRhcmsgbW9kZS4KKyAgICAg
ICAgUGF2aW5nIHRoZSB3YXkgZm9yIGZ1dHVyZSBpbXByb3ZlbWVudHMsIHdlIG1vdmUgdGhlIGRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKSBtZXRob2QgZnJvbSBHcmFwaGljc0NvbnRleHQKKyAg
ICAgICAgdG8gUmVuZGVyVGhlbWUgYW5kIGltcGxlbWVudCBhIGZpcnN0IHZlcnNpb24gaW4gUmVu
ZGVyVGhlbWVNYWMuIFRoZSBjaXJjbGVzIHVzZWQgZm9yIHRoZSB1bmRlcmxpbmUgYXJlIG5vdwor
ICAgICAgICBkcmF3biBkaXJlY3RseSB3aXRoIENvcmUgR3JhcGhpY3MgYW5kIHdlIG5vIGxvbmdl
ciB1c2UgYW4gaW1hZ2UgcmVzb3VyY2UuIFRvIGFsbG93IGJvdGggR3JhcGhpY3NDb250ZXh0Cisg
ICAgICAgIGFuZCBSZW5kZXJUaGVtZSB0byBoYXZlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUg
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpIG1ldGhvZCwgdGhlIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlCisgICAgICAgIGVudW0gaXMgbm93IGFuICJlbnVtIGNsYXNzIi4KKworICAgICAgICBO
byBuZXcgdGVzdCBkdWUgdG8gd2Via2l0Lm9yZy9iLzEwNTYxNiwgd2Via2l0Lm9yZy9iLzE4NzY1
NSB3YXMgcmFpc2VkIHRvIHRyYWNrIHRoZSBjcmVhdGlvbiBvZiBuZXcgdGVzdHMKKyAgICAgICAg
d2hlbiBpdCBiZWNvbWVzIHBvc3NpYmxlIGFnYWluLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3Vt
ZW50TWFya2VyKTogQ2FsbCBkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgb24gdGhlIFJlbmRl
clRoZW1lIG9uCisgICAgICAgIG1hY09TIGFuZCBvbiBHcmFwaGljc0NvbnRleHQgaW4gYWxsIG90
aGVyIGNhc2VzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JGb3JTdHlsZSk6IFByb3ZpZGUgZGlmZmVyZW50IGNvbG9ycyBm
b3IgbGlnaHQgYW5kIGRhcmsgbW9kZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6IEEgbmV3IG1hY09TLXNwZWNpZmljIHZlcnNp
b24gb2YgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpCisgICAgICAgIHdoZXJlIHdlIHBhaW50
IGNpcmNsZXMgdXNpbmcgQ29yZSBHcmFwaGljcyBkaXJlY3RseS4KKwogMjAxOC0wNy0xMSAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9u
c10gTWFrZSBXUFQgdGVzdCBhdCBpbnRlcmZhY2VzL0tleWZyYW1lRWZmZWN0L3Byb2Nlc3Npbmct
YS1rZXlmcmFtZXMtYXJndW1lbnQtMDAxLmh0bWwgcGFzcyByZWxpYWJseQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmFj
ODFkNGQxYmU4MWZhYzBmZjUxZjliY2E1YzM5M2YxZGU5ZGU3Li5kMzg1NDQ3NGEyYmFkOTM0MDUx
YjdhMjhlMmEzZTQxOTRmODgwOWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTA5LDYgKzEwOSwxNCBAQCBlbnVtIFN0
cm9rZVN0eWxlIHsKICAgICBXYXZ5U3Ryb2tlLAogfTsKIAorZW51bSBjbGFzcyBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSA6IHVpbnQ4X3QgeworICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgU3BlbGxpbmcsCisgICAgR3JhbW1hciwKKyAgICBBdXRv
Y29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcworfTsKKwog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGNsYXNzIFJlY29yZGVyOwogfQpAQCAtNDExLDE1ICs0
MTksNiBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9r
ZVN0eWxlID0gU29saWRTdHJva2UpOwogICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgZW51
bSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBU
ZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlLAotI2Vu
ZGlmCi0gICAgICAgIERvY3VtZW50TWFya2VyU3BlbGxpbmdMaW5lU3R5bGUsCi0gICAgICAgIERv
Y3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSwKLSAgICAgICAgRG9jdW1lbnRNYXJrZXJBdXRv
Y29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlLAotICAgICAgICBEb2N1bWVudE1hcmtlckRp
Y3RhdGlvbkFsdGVybmF0aXZlc0xpbmVTdHlsZQotICAgIH07CiAgICAgc3RhdGljIHZvaWQgdXBk
YXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCA4Njg2ZDJiODYwZDVkMDM3YTYxZDMyZTk5NDQz
ZmNjYzkzYTQzZWVjLi42YmNmNzY4YWRmZDg5ZWUwYjE5NmEzZWE2MmVlMDY4MGM4YWQxOGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBH
cmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IGI3YWU0ZThj
ZjEwYTgwZGE1YzRiNTNmMzg3ZTRlOWZhYzQwNjE0NjQuLmM0ZWNkOTEwZmM1NzIxMjg1MGQ0N2Vh
ZjZjZTM0Zjk0ZDc2MGI2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMTA0OSwxOCArMTA0
OSwxOCBAQCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcAogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwog
fQogCi12b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwg
R3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgZHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAoc3R5bGUgIT0gR3JhcGhpY3NDb250ZXh0OjpE
b2N1bWVudE1hcmtlclNwZWxsaW5nTGluZVN0eWxlCi0gICAgICAgICYmIHN0eWxlICE9IEdyYXBo
aWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxlKQorICAgIGlmIChzdHls
ZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6U3BlbGxpbmcKKyAgICAgICAgJiYgc3R5bGUg
IT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgY2Fpcm9fc2F2ZShj
cik7CiAKLSAgICBpZiAoc3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlclNw
ZWxsaW5nTGluZVN0eWxlKQorICAgIGlmIChzdHlsZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6U3BlbGxpbmcpCiAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAwLCAwKTsK
LSAgICBlbHNlIGlmIChzdHlsZSA9PSBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyR3Jh
bW1hckxpbmVTdHlsZSkKKyAgICBlbHNlIGlmIChzdHlsZSA9PSBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6R3JhbW1hcikKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDEsIDAp
OwogCiAgICAgZHJhd0Vycm9yVW5kZXJsaW5lKGNyLCBvcmlnaW4ueCgpLCBvcmlnaW4ueSgpLCB3
aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCmluZGV4IDYz
NGNjMGFhZmJhOGJmMThmODdlZmM0MGNkYWU1NTFmOGE4ZDU0MDguLjM5YjUyYTcyMTIyNGUwYjAw
M2VhMzM0Mjg5ZDJhMDA3YTkyYzQ3ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCkBAIC0xNDUsNyArMTQ1
LDcgQEAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3VyZmFjZShQbGF0Zm9ybUNvbnRleHRDYWly
byYsIGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0IEYKIHZvaWQgZHJhd1JlY3QoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VT
dHlsZSwgY29uc3QgQ29sb3ImKTsKIHZvaWQgZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25z
dCBDb2xvciYsIGZsb2F0LCBib29sKTsKIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNv
bnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBi
b29sLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLXZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7Cit2b2lkIGRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKIHZvaWQgZHJhd0VsbGlwc2UoUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0cm9rZVN0eWxl
LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKIAogdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29u
dGV4dENhaXJvJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggYzNkMTRjOTViNTUwZDI3NjNjNzhmNTY0
ZTA1NzRhOWI5OTgyNDRmMS4uZTA2ZTQwMzFkODc5ZDE5MDM2OWFhYzgzODc2ODA0OTg0YzY1YTdj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCkBAIC0zMDEsNyArMzAx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEQKICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4
dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgQ2Fpcm86
OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9yaWdpbiwgd2lk
dGgsIHN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKaW5kZXggNzlj
YTEyZGQ2OWI5OTc5OTViMDczMDJmNjFlMzQxN2NjOGNkZTFlZC4uOTk3Y2JkZGE1MWMzZjFjMGM1
MmQ1MGZjY2VhNGU1ODU5NWI4YTc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0LCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2Nv
YS5tbQppbmRleCAzZmUyMDgxZDVhYjZmYTAwNTUyZmI5ZDNhODdhZGIyNWM1N2E1YjE0Li5iNWE5
ZDY2OGYxOGE1OTE4YmEyOGM5ZWRlYzBhZGVlYjdlZGZjZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRDb2NvYS5tbQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAg
ICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47CiAjZW5kaWYKICAgICBzd2l0Y2ggKHN0eWxlKSB7
Ci0gICAgY2FzZSBEb2N1bWVudE1hcmtlclNwZWxsaW5nTGluZVN0eWxlOiB7CisgICAgY2FzZSBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6U3BlbGxpbmc6IHsKICAgICAgICAgLy8gQ29uc3RhbnRz
IGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0Rv
dEZvclNwZWxsaW5nID0gZmFsc2U7CiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTI2MCw3ICsyNjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90
Rm9yU3BlbGxpbmc7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIERvY3VtZW50TWFy
a2VyR3JhbW1hckxpbmVTdHlsZTogeworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
OkdyYW1tYXI6IHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAvLyBDb25zdGFudHMgZm9y
IGdyYW1tYXIgcGF0dGVybiBjb2xvci4KICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JH
cmFtbWFyID0gZmFsc2U7CkBAIC0yNzcsOCArMjc3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHcKICAgICB9CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFRvIHN1cHBvcnQgY29ycmVjdGlv
biBwYW5lbC4KLSAgICBjYXNlIERvY3VtZW50TWFya2VyQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVu
dExpbmVTdHlsZToKLSAgICBjYXNlIERvY3VtZW50TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVz
TGluZVN0eWxlOiB7CisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6QXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudDoKKyAgICBjYXNlIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXM6IHsKICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBw
YXR0ZXJuIGNvbG9yLgogICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvclNwZWxsaW5nID0g
ZmFsc2U7CiAgICAgICAgIGlmICghY29ycmVjdGlvbkltYWdlKQpAQCAtMjkwLDcgKzI5MCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9T
KQotICAgIGNhc2UgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0xp
bmVTdHlsZTogeworICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlRleHRDaGVja2lu
Z0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6IHsKICAgICAgICAgc3RhdGljIGJvb2wg
dXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzID0gZmFsc2U7CiAgICAg
ICAgIHN0YXRpYyBDR1BhdHRlcm5SZWYgZGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1Bh
dHRlcm4gPSBjcmVhdGVEb3RQYXR0ZXJuKHVzaW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywgIkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNEb3QiKS5sZWFrUmVm
KCk7CiAgICAgICAgIGRvdFBhdHRlcm4gPSBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
UGF0dGVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDlmMDk5MTAyMjVj
MjE0YmJmOGFmYzlmOTk1NTkzYWM2YjU2NDFhZGUuLmYwMGVhN2U4NWNiMWNkNTI0NjliZTE1ODhk
MDExZTgzODQ3M2MxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODMw
LDcgKzgzMCw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3
aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAg
ICBzdGF0aWMgUmVmPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihwb2ludCwgd2lkdGgsIHN0eWxlKSk7CiAgICAgfQpAQCAtODM5LDcgKzgzOSw3IEBA
IHB1YmxpYzoKICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KIAog
cHJpdmF0ZToKLSAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiAg
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIp
CiAgICAgICAgICwgbV9wb2ludChwb2ludCkKICAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQpAQCAt
ODUzLDcgKzg1Myw3IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFBvaW50IG1fcG9pbnQ7CiAgICAg
ZmxvYXQgbV93aWR0aDsKLSAgICBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlIG1fc3R5bGU7CisgICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsKIH07CiAK
IGNsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBhMTdjNTkxNTZkOTFjMjIwZmI5MWZjZGY2
ZjU4OTA3M2ViMTk1NjY4Li5lYTI3MzI2YjU2MWYxOWRlMjI0NzNlM2JhYzgzZjQ0ZmFhMDkyZmZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0yMzYsNyAr
MjM2LDcgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRv
d25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6
OmNyZWF0ZShwb2ludCwgd2lkdGgsIHN0eWxlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA3ZGU3ZDQ2
NGMxYmU0ODhjMzk1MjU3YmMzZmYzZDkxNzBlZmI1YTc0Li5jNWFjNzA5MTM5NWZhNGZlODNhMzFk
MmM4OGRiMWU4OGE3YWRhM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmlj
b3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAK
aW5kZXggZTQ3OTNlYzZlZWVlNjg3M2U3ZGFiYTg1OGMxZDE4MWNiYTAzZWEwMi4uOWE5NTRlMjJi
OTRiYmFlOWNiMTc1ZmVhZmMwNDJmZmZlYjVhZmUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTY1Miw5ICs2NTIs
OSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhcwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdMaW5lc0ZvclRleHQ+KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lk
dGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIHN0cnVjdCBEcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8RmxvYXRQb2ludCwgZmxvYXQsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGU+IHsKKyAgICBzdHJ1Y3QgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZT4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZUZvckRvY3VtZW50
TWFya2VyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggMzZjZTYzN2U0OThkNDc2OTgx
NDFhNTBiOTI1ZTBmNTgyZGNmZmE4Mi4uZGM0ODQ5ZTVjZjRhOGNhOTJmMzlhMjY1Y2Q5OWMxNDNh
OThjZDUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuaApAQCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGZsb2F0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIGZsb2F0LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0LCBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKaW5kZXggYzQ3
ODg0ZDVkYmI4NTI5ZWQ2OTFkMWY1ZTZmOWYwY2Q4NDQ0NmFlZi4uYzY4ZTYwNmMwODQ0N2MzYjQw
MmQxODdmMmU2OTJmNTdjZDY5Y2YyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCkBAIC0x
OTUsNyArMTk1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUgIT0gRG9jdW1lbnRN
YXJrZXJTcGVsbGluZ0xpbmVTdHlsZSAmJiBzdHlsZSAhPSBEb2N1bWVudE1hcmtlckdyYW1tYXJM
aW5lU3R5bGUpCisgICAgaWYgKHN0eWxlICE9IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpTcGVs
bGluZyAmJiBzdHlsZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6R3JhbW1hcikKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBtaXNzcGVsbGluZyBv
ciBiYWQgZ3JhbW1hcgpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgY29uc3QgQ29sb3ImIHBhdHRlcm5Db2xv
ciA9IHN0eWxlID09IERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSA/IGdyYW1tYXJQYXR0
ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7CisgICAgY29uc3QgQ29sb3ImIHBh
dHRlcm5Db2xvciA9IHN0eWxlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpHcmFtbWFyID8g
Z3JhbW1hclBhdHRlcm5Db2xvcigpIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKTsKICAgICBzZXRD
R1N0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvcik7CiAKICAgICB3a1NldFBhdHRlcm5Q
aGFzZUluVXNlclNwYWNlKGNvbnRleHQsIHBvaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmNzI1MDUzYjQ2MWYxYzI0NTM3Mzk1ZjI2MjcwYmI0
MDg3NjQ1NDA2Li44M2ZlYzZmYTJmZGJhNGJmZmRlOGVjODkyOTgzMGI3NGViNGVlM2JmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC02ODksMjEgKzY4
OSwyMSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgYXV0byBsaW5lU3R5bGVGb3JNYXJr
ZWRUZXh0VHlwZSA9IFtdIChNYXJrZWRUZXh0OjpUeXBlIHR5cGUpIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgICAgIGNhc2UgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJvcjoKLSAgICAg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyU3BlbGxpbmdMaW5l
U3R5bGU7CisgICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlNwZWxs
aW5nOwogICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKLSAgICAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZTsK
KyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6R3JhbW1hcjsKICAg
ICAgICAgY2FzZSBNYXJrZWRUZXh0OjpDb3JyZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGlu
ZVN0eWxlOworICAgICAgICAgICAgcmV0dXJuIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpBdXRv
Y29ycmVjdGlvblJlcGxhY2VtZW50OwogICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlv
bkFsdGVybmF0aXZlczoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkRvY3Vt
ZW50TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOworICAgICAgICAgICAgcmV0
dXJuIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXM6Ci0gICAgICAgICAgICAvLyBGSVhNRTogUmVuYW1lIFRleHRDaGVja2lu
Z0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGUgYW5kIHJlbW92ZSB0aGUg
UExBVEZPUk0oSU9TKS1ndWFyZC4KLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6
OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGU7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogUmVuYW1lIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpUZXh0
Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzIGFuZCByZW1vdmUgdGhlIFBM
QVRGT1JNKElPUyktZ3VhcmQuCisgICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM7CiAjZW5k
aWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJTcGVsbGlu
Z0xpbmVTdHlsZTsKKyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
U3BlbGxpbmc7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC03MjQsNyArNzI0LDEyIEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBs
YWNlIHRoZSB1bmRlcmxpbmUgdXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBn
YXAuCiAgICAgICAgIHVuZGVybGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsKICAgICB9CisKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIocmVuZGVyZXIoKSwgY29udGV4dCwgRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRlcmxpbmVPZmZzZXQpLCB3aWR0aCwgbGlu
ZVN0eWxlRm9yTWFya2VkVGV4dFR5cGUobWFya2VkVGV4dC50eXBlKSk7CisjZWxzZQogICAgIGNv
bnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkg
KyBzdGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5
bGVGb3JNYXJrZWRUZXh0VHlwZShtYXJrZWRUZXh0LnR5cGUpKTsKKyNlbmRpZgogfQogCiBhdXRv
IElubGluZVRleHRCb3g6OmNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbykgY29uc3QgLT4gTWFya2VkVGV4dFN0eWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA1NGJkZTcwYWM1YTk1ZTgzYmFmMzFj
ZmZjN2QzOWM0NjkzYTM3NGNlLi4wYTQxMTNhYmI3NjNjMjMzMTIzOTFhNWVmZTNlZjk5NTU2OWRj
ZDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTE0MTIs
NCArMTQxMiw4IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodENvbG9y
KCkgY29uc3QKIAogI2VuZGlmCiAKK3ZvaWQgUmVuZGVyVGhlbWU6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgUmVuZGVyVGV4dCYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpCit7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXgg
ZjVlYjA1ZDRmZTU5MGVkMzk5NTliMzcwZjg4NzFiZTU2NzE2ZGY2OS4uZTkxODY1YzkzMzdlNzE3
OGM5NDQxMzRjYTA1MjZkYWFjMTdjZTE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9ySGFzaC5oIgogI2lu
Y2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJQb3B1cE1lbnVTdHlsZS5oIgogI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCkBAIC0yNTIsNiArMjUzLDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBwYWludFN5c3RlbVByZXZpZXdCYWRnZShJbWFnZSYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEZsb2F0UmVjdCYpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBSZW5kZXJUZXh0JiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3Rl
bUZvbnRJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMzk2OTY4NWVmZmQ5YWU2MmY5NGQ3
YTNmZTk1OTY2MzUyMTMzM2Y0Ny4uN2I1OWM1MWFiYTNiMDY2NGQ4MmNmMTA0ODMzMWQwNDU0Nzc0
NTczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKQEAgLTE2
OCw2ICsxNjgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFpbnRBdHRhY2htZW50KGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKICNl
bmRpZgogCisgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IFJlbmRlclRl
eHQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBTdHJpbmcgZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0
aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAyNmRhNDI5NGFhNTM5YWJkNDQ0
OWQ2MmQ0ODJiNmViYTllZGRhODkwLi5kOGE4NDBlNmUzNTZiMjQ1OGUzMjgxNmQzODBiMjE1YTY4
ODI0MzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBA
IC0yNSw2ICsyNSw3IEBACiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ1NTVmFs
dWVLZXl3b3Jkcy5oIgogI2ltcG9ydCAiQ1NTVmFsdWVMaXN0LmgiCisjaW1wb3J0ICJDb2xvci5o
IgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJF
bGVtZW50LmgiCkBAIC0zNSw2ICszNiw3IEBACiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgog
I2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2ltcG9ydCAiSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVt
ZW50LmgiCkBAIC0yNzc2LDYgKzI3NzgsNTIgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRB
dHRhY2htZW50KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW4KIAog
I2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKK3N0YXRpYyBDR0NvbG9yUmVm
IGNvbG9yRm9yU3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUsIGJvb2wgdXNlRGFy
a01vZGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIC8vIFJlZC4KKyAgICBjYXNlIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIGNhY2hlZENH
Q29sb3IodXNlRGFya01vZGUgPyBDb2xvciB7IDI1NSwgMTQwLCAxNDAsIDIxNyB9IDogQ29sb3Ig
eyAyNTUsIDU5LCA0OCwgMTkxIH0pOworICAgIC8vIEJsdWUuCisgICAgY2FzZSBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgIGNhc2UgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXM6CisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6QXV0b2NvcnJlY3Rpb25SZXBs
YWNlbWVudDoKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBDb2xv
ciB7IDQwLCAxNDUsIDI1NSwgMjE3IH0gOiBDb2xvciB7IDAsIDEyMiwgMjU1LCAxOTEgfSk7Cisg
ICAgLy8gR3JlZW4uCisgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6R3JhbW1hcjoK
KyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBDb2xvciB7IDUwLCAy
MTUsIDc1LCAyMTcgfSA6IENvbG9yIHsgMjUsIDE3NSwgNTAsIDE5MSB9KTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Cit7CisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHBhdHRlcm5XaWR0aCA9IGNNaXNzcGVsbGluZ0xpbmVQYXR0ZXJuV2lkdGg7
CisgICAgYXV0byBwYXR0ZXJuSGVpZ2h0ID0gY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzczsKKyAg
ICBhdXRvIGNpcmNsZUNvbG9yID0gY29sb3JGb3JTdHlsZShzdHlsZSwgcmVuZGVyZXIucGFnZSgp
LnVzZVN5c3RlbUFwcGVhcmFuY2UoKSAmJiByZW5kZXJlci5wYWdlKCkudXNlRGFya0FwcGVhcmFu
Y2UoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdG8gZHJhdyBvbmx5IGNvbXBsZXRlIGRvdHMgYWxs
b3dpbmcgc2xpZ2h0bHkgbW9yZSBjb25zaWRlcmluZyB0aGF0IHRoZSBwYXR0ZXJuIGVuZHMgd2l0
aCBhIHRyYW5zcGFyZW50IHBpeGVsLgorICAgIEZsb2F0UG9pbnQgb2Zmc2V0UG9pbnQgPSBvcmln
aW47CisgICAgZmxvYXQgd2lkdGhNb2QgPSBmbW9kZih3aWR0aCwgcGF0dGVybldpZHRoKTsKKyAg
ICBpZiAocGF0dGVybldpZHRoIC0gd2lkdGhNb2QgPiBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdh
cFdpZHRoKSB7CisgICAgICAgIGZsb2F0IGdhcEluY2x1ZGVXaWR0aCA9IDA7CisgICAgICAgIGlm
ICh3aWR0aCA+IHBhdHRlcm5XaWR0aCkKKyAgICAgICAgICAgIGdhcEluY2x1ZGVXaWR0aCA9IGNN
aXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGg7CisgICAgICAgIG9mZnNldFBvaW50Lm1vdmUo
Zmxvb3IoKHdpZHRoTW9kICsgZ2FwSW5jbHVkZVdpZHRoKSAvIDIpLCAwKTsKKyAgICAgICAgd2lk
dGggLT0gd2lkdGhNb2Q7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVmIGN0eCA9IGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsg
Y3R4IH07CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGN0eCwgY2lyY2xlQ29s
b3IpOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gcGF0dGVybldpZHRoKQor
ICAgICAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGN0eCwgQ0dSZWN0TWFrZShvZmZzZXRQ
b2ludC54KCkgKyB4LCBvZmZzZXRQb2ludC55KCksIHBhdHRlcm5IZWlnaHQsIHBhdHRlcm5IZWln
aHQpKTsKKyAgICBDR0NvbnRleHRTZXRDb21wb3NpdGVPcGVyYXRpb24oY3R4LCBrQ0dDb21wb3Np
dGVTb3Zlcik7CisgICAgQ0dDb250ZXh0RmlsbFBhdGgoY3R4KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>
<flag name="review"
          id="362983"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>