<?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>191337</bug_id>
          
          <creation_ts>2018-11-06 15:44:13 -0800</creation_ts>
          <short_desc>[Windows][DirectX] Update canvas code to pass more tests</short_desc>
          <delta_ts>2018-11-07 19:50:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>191411</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1475742</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-06 15:44:13 -0800</bug_when>
    <thetext>The changes in this patch address a number of test failures in the canvas/philip test suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476032</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-07 10:01:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/45878801&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476216</commentid>
    <comment_count>2</comment_count>
      <attachid>354149</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 14:14:33 -0800</bug_when>
    <thetext>Created attachment 354149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476232</commentid>
    <comment_count>3</comment_count>
      <attachid>354153</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 14:33:23 -0800</bug_when>
    <thetext>Created attachment 354153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476234</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 14:35:16 -0800</bug_when>
    <thetext>Would it be okay to just thread an Optional&lt;GraphicsContext&gt; or GraphicsContext* through SVGRenderingContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476253</commentid>
    <comment_count>5</comment_count>
      <attachid>354153</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-11-07 14:52:47 -0800</bug_when>
    <thetext>Comment on attachment 354153
Patch

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

Seems fine. Just a few nits.

Hows this doing on the tests?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1560
&gt; +    flush();

Are all the `flush` calls necessary?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:166
&gt; +        /*auto context = adoptCF(CGBitmapContextCreate(0, logicalSize.width(), logicalSize.height(), 8, 4 * logicalSize.width(), sRGBColorSpaceRef(), kCGImageAlphaPremultipliedLast));
&gt; +        CGContextSetBlendMode(context.get(), kCGBlendModeCopy);
&gt; +        CGContextClipToRect(context.get(), FloatRect(FloatPoint::zero(), logicalSize));
&gt; +        FloatSize imageSizeInUserSpace = scaleSizeToUserSpace(logicalSize, backingStoreSize, internalSize);
&gt; +        CGContextDrawImage(context.get(), FloatRect(FloatPoint::zero(), imageSizeInUserSpace), image.get());
&gt; +        image = adoptCF(CGBitmapContextCreateImage(context.get()));*/

This is commented out

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:227
&gt; +    m_doesHaveOpenFigure = true;

Should this maybe just be `mutable`?

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:590
&gt; +    HRESULT hr = GraphicsContext::systemFactory()-&gt;CreateEllipseGeometry(D2D1::Ellipse(r.center(), 0.5 * r.width(), 0.5 * r.height()), &amp;ellipse);

Comment about the 0.5?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476290</commentid>
    <comment_count>6</comment_count>
      <attachid>354153</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-11-07 15:43:25 -0800</bug_when>
    <thetext>Comment on attachment 354153
Patch

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:703
&gt; +    float miterLimit = 0.5f * canvasMiterLimit;

amazing

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1560
&gt;&gt; +    flush();
&gt; 
&gt; Are all the `flush` calls necessary?

Yeah, why do you need to flush?

&gt; Source/WebCore/platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:129
&gt; +    float m_miterLimit { 10.0f };

Is this the same as other platforms? Why isn&apos;t this stored in GC.h?

&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:203
&gt; +    // FIME: See if we can reuse the on-hardware image

Typo: FIME and missing .

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:227
&gt;&gt; +    m_doesHaveOpenFigure = true;
&gt; 
&gt; Should this maybe just be `mutable`?

It seems to also be changing the active path values.

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:422
&gt; +    float direction = (p2.x() - p1.x()) * (p0.y() - p1.y()) + (p2.y() - p1.y()) * (p1.x() - p0.x());
&gt; +    if (WTF::areEssentiallyEqual(direction, 0.0f))
&gt; +        return addLineTo(p1);

I don&apos;t think direction is the right name, but I can&apos;t think of a better one. distance?

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:438
&gt; +    bool anticlockwise = (direction &lt; 0);

Oh. I see you use it as a direction here.

&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:242
&gt; +#if USE(DIRECT2D)
&gt; +std::unique_ptr&lt;ImageBuffer&gt; SVGRenderingContext::createImageBuffer(const FloatRect&amp; targetRect, const AffineTransform&amp; absoluteTransform, ColorSpace colorSpace, RenderingMode renderingMode, const GraphicsContext* context)
&gt; +#else
&gt;  std::unique_ptr&lt;ImageBuffer&gt; SVGRenderingContext::createImageBuffer(const FloatRect&amp; targetRect, const AffineTransform&amp; absoluteTransform, ColorSpace colorSpace, RenderingMode renderingMode)
&gt; +#endif

I wonder if always passing the context and having an UNUSED_PARAM would be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476299</commentid>
    <comment_count>7</comment_count>
      <attachid>354153</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 15:51:01 -0800</bug_when>
    <thetext>Comment on attachment 354153
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1560
&gt;&gt;&gt; +    flush();
&gt;&gt; 
&gt;&gt; Are all the `flush` calls necessary?
&gt; 
&gt; Yeah, why do you need to flush?

Maybe not! I needed it for stroking and filling rects, but clipping probably no. I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:129
&gt;&gt; +    float m_miterLimit { 10.0f };
&gt; 
&gt; Is this the same as other platforms? Why isn&apos;t this stored in GC.h?

Amazingly, this is also 10.0 for CG (in the headers). I&apos;m not sure why it&apos;s missing from GraphicsContext.h.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:166
&gt;&gt; +        image = adoptCF(CGBitmapContextCreateImage(context.get()));*/
&gt; 
&gt; This is commented out

Whoops. I was looking at the CG code to implement and didn&apos;t port it over. I&apos;ll remove this and make it &apos;notImplemented()&apos;.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp:203
&gt;&gt; +    // FIME: See if we can reuse the on-hardware image
&gt; 
&gt; Typo: FIME and missing .

Will fi.

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:227
&gt;&gt;&gt; +    m_doesHaveOpenFigure = true;
&gt;&gt; 
&gt;&gt; Should this maybe just be `mutable`?
&gt; 
&gt; It seems to also be changing the active path values.

Right -- it touches a few things. My original version of this should never have been const :-\.

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:590
&gt;&gt; +    HRESULT hr = GraphicsContext::systemFactory()-&gt;CreateEllipseGeometry(D2D1::Ellipse(r.center(), 0.5 * r.width(), 0.5 * r.height()), &amp;ellipse);
&gt; 
&gt; Comment about the 0.5?

Will do.

&gt;&gt; Source/WebCore/rendering/svg/SVGRenderingContext.cpp:242
&gt;&gt; +#endif
&gt; 
&gt; I wonder if always passing the context and having an UNUSED_PARAM would be better?

Yes -- I had this originally but worried it would mess something up. I&apos;ll revise the patch to do so and do a land-safely to make sure it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476353</commentid>
    <comment_count>8</comment_count>
      <attachid>354187</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 17:22:59 -0800</bug_when>
    <thetext>Created attachment 354187
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476358</commentid>
    <comment_count>9</comment_count>
      <attachid>354187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-07 17:32:30 -0800</bug_when>
    <thetext>Comment on attachment 354187
Patch for landing

Rejecting attachment 354187 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 354187, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=354187&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=191337&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 354187 from bug 191337.
Fetching: https://bugs.webkit.org/attachment.cgi?id=354187
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 14 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/platform/graphics/ImageBuffer.cpp
patching file Source/WebCore/platform/graphics/ImageBuffer.h
patching file Source/WebCore/platform/graphics/Path.h
patching file Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp
Hunk #10 FAILED at 1697.
1 out of 10 hunks FAILED -- saving rejects to file Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp.rej
patching file Source/WebCore/platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h
patching file Source/WebCore/platform/graphics/win/ImageBufferDirect2D.cpp
patching file Source/WebCore/platform/graphics/win/PathDirect2D.cpp
patching file Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp
patching file Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
patching file Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
patching file Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
patching file Source/WebCore/rendering/svg/SVGRenderingContext.cpp
patching file Source/WebCore/rendering/svg/SVGRenderingContext.h

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/9902055</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476397</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-07 19:30:37 -0800</bug_when>
    <thetext>Committed r237977: &lt;https://trac.webkit.org/changeset/237977&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354149</attachid>
            <date>2018-11-07 14:14:33 -0800</date>
            <delta_ts>2018-11-07 14:33:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191337-20181107141432.patch</filename>
            <type>text/plain</type>
            <size>39599</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNzkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE4LTExLTA3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXVtEaXJlY3RY
XSBVcGRhdGUgY2FudmFzIGNvZGUgdG8gcGFzcyBtb3JlIHRlc3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzMzcKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzQ1ODc4ODAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSB0aGUgRGlyZWN0MkQgY29kZSBwYXRocyB0byBjb21wbHkgd2l0aCBv
dXIgY2FudmFzIHRlc3RzLCBpbXByb3ZpbmcgdGhlCisgICAgICAgIHRoZSB0ZXN0IHJlc3VsdHMg
c2NvcmVzLgorCisgICAgICAgIFBhdGhEaXJlY3QyRCB3YXMgdXBkYXRlZCB3aXRoIGFuIGltcGxl
bWVudGF0aW9uIG9mICdhZGRBcmNUbycgYmFzZWQgb24gd29yayBieQorICAgICAgICBEaXJrIFNj
aHVsemUgPHZiczg1QGdteC5kZT4gKHNlZSBodHRwczovL2hnLm1vemlsbGEub3JnL21vemlsbGEt
Y2VudHJhbC9yZXYvYjExNmI0OTQ1OWY4KS4KKworICAgICAgICBUZXN0czogY2FudmFzL3BoaWxp
cC90ZXN0cworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOiBE
aXJlY3QyRCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGdyYXBoaWNzCisgICAgICAgIGNvbnRleHQgdG8g
Y3JlYXRlIHRoZSBidWZmZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOiBGbHVzaCBuZWVkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldE1pdGVyTGlt
aXQpOiBDb3JyZWN0IGZvciBEaXJlY3QyRCBkZWZpbml0aW9uIG9mIG1pdGVyIGxpbWl0LgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHls
ZVByb3BlcnRpZXMgY29uc3QpOiBBZGRlZCBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlY29tcHV0ZVN0cm9rZVN0eWxl
KTogVXBkYXRlIGZvciBuZXcgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1dpdGhTaGFkb3dI
ZWxwZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOiBBZGQgZmx1c2guCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRmlsbFJvdW5kZWRSZWN0KTogVXBkYXRlIGZvciBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKTogQWRkIGZsdXNoLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6IFVwZGF0ZSBmb3IgdXBzdHJlYW0g
Y2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KTogQWRkIG1pc3NpbmcgaW1wbGVtZW50YXRpb25zLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1h
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1h
Z2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpkcmF3RGlkQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6dHJhbnNmb3JtKTogUHJvcGVybHkgdHJhbnNmb3JtIGV4aXN0aW5nIGdlb21ldHJpZXMuCisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2Fy
eSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bW92ZVRvKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6IE1ha2Ugc3VyZSBmaWd1cmUgc3RhcnRzIGF0IGEgdmFs
aWQgcG9pbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRRdWFkQ3VydmVUbyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjVG8pOiBBZGQgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0FyY1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKTogVXBkYXRlIHRv
IGJ1aWxkIGxhcmdlIGFyY3Mgb3V0IG9mIHNtYWxsIGFyYyBzZWdtZW50cy4gSWYgdGhlCisgICAg
ICAgIGFyYyBpcyBlZmZlY3RpdmVseSBhIGNvbXBsZXRlIGNpcmNsZSwgdXNlIHRoZSBlbGxpcHNl
IGRyYXdpbmcgcm91dGluZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRSZWN0KTogTWFr
ZSBzdXJlIHdlIHN0YXJ0IGF0IGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuCisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjphZGRFbGxpcHNlKTogQ29ycmVjdCBmb3IgZGVmaW5pdGlvbiBvZiBEMkQgZWxs
aXBzZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRyYXdEaWRDb21wbGV0ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBo
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5
Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0Lmg6CisKIDIwMTgtMTEtMDcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgVGlsZUNvbnRyb2xsZXI6OnRpbGVTaXplKCkgc2hvdWxkIG5vdCBoYXZl
IHNpZGUgZWZmZWN0cwpAQCAtMjE0NDgsMyArMjE1MjEsNCBAQAogICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmg6IEFkZCBtaXNzaW5nIGZvcndhcmQtZGVjbGFyYXRp
b24gRmlsdGVyT3BlcmF0aW9ucy4KIAogPT0gUm9sbGVkIG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTgt
MDktMTEgPT0KKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjM3OTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyAr
MjEyLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKIAogc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CisjaWYg
VVNFKERJUkVDVDJEKQorICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdN
b2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworI2Vsc2UKICAg
ICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpOworI2VuZGlmCiB9CiAKIEludFNpemUgSW1hZ2VCdWZmZXI6OmNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CiAgICAgdm9pZCBm
bHVzaENvbnRleHQoKSBjb25zdDsKICNlbGlmIFVTRShESVJFQ1QyRCkKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Q7CisgICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lkIGZsdXNoQ29u
dGV4dCgpIGNvbnN0OwogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJRDJEMUdlb21ldHJ5U2luayogYWN0aXZlUGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5nZXQoKTsgfQogICAgICAgICB2b2lkIGFw
cGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAgICAgICAgdm9pZCBjcmVhdGVHZW9tZXRy
eVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25z
dDsKLSAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBk
cmF3RGlkQ29tcGxldGUoKTsKIAogICAgICAgICBIUkVTVUxUIGluaXRpYWxpemVQYXRoU3RhdGUo
KTsKKyAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwog
I2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTEsNiArMjEyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBtX3BhdGg7CiAgICAg
ICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gbV9hY3RpdmVQYXRoR2VvbWV0cnk7CiAgICAg
ICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQYXRoOworICAgICAgICBib29s
IG1fZG9lc0hhdmVPcGVuRmlndXJlIHsgZmFsc2UgfTsKICNlbHNlCiAgICAgICAgIFBsYXRmb3Jt
UGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciog
YnVmZmVyLCB1bnNpCiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOwogICAgIGxvY2FsZU5hbWVbbG9jYWxlTGVuZ3RoXSA9ICdcMCc7CiAK
LSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKGxvY2FsZU5hbWUsIGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoKTsKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
TFBXU1RSPihsb2NhbGVOYW1lKSwgcmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KGJ1ZmZlciksIGJ1
ZmZlckxlbmd0aCk7CiAKICAgICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIs
IDAsIGJ1ZmZlckxlbmd0aCwgJmhlbHBlcik7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZm
ZXIsIHVuc2kKICAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0
UHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOwogICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19H
TFlQSF9QUk9QRVJUSUVTPiBnbHlwaFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXplKTsKIAotICAg
IGhyID0gYW5hbHl6ZXItPkdldEdseXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udFBsYXRm
b3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxzZSwKKyAgICBociA9IGFuYWx5emVyLT5HZXRH
bHlwaHMocmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihidWZmZXIpLCBidWZmZXJMZW5ndGgsIGZv
bnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCiAgICAgICAgICZoZWxwZXIu
bV9hbmFseXNpcywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgR2x5cGhQ
YWdlOjpzaXplLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksCiAgICAgICAgIGxv
Y2FsR2x5cGhCdWZmZXIsIGdseXBoUHJvcGVydGllcy5kYXRhKCksICZyZXR1cm5lZENvdW50KTsK
ICAgICBpZiAoIVNVQ0NFRURFRChocikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
Niw2ICs1OTYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmCiAK
ICAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gcGF0dGVybkJydXNoOwogICAgIEhSRVNVTFQg
aHIgPSBjb250ZXh0LT5DcmVhdGVCaXRtYXBCcnVzaCh0aWxlSW1hZ2UuZ2V0KCksICZiaXRtYXBC
cnVzaFByb3BlcnRpZXMsICZicnVzaFByb3BlcnRpZXMsICZwYXR0ZXJuQnJ1c2gpOworICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJl
dHVybjsKIAogICAgIGRyYXdXaXRob3V0U2hhZG93KGRlc3RSZWN0LCBbdGhpcywgZGVzdFJlY3Qs
IHBhdHRlcm5CcnVzaF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAg
ICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gZGVzdFJlY3Q7CkBAIC02MzUsNiArNjM4LDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsbwogICAgICAgICByZW5k
ZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIHNvbGlkRmlsbEJydXNoKCkpOwogICAg
ICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJlY3QsIHNvbGlkU3Ryb2tlQnJ1
c2goKSwgc3Ryb2tlVGhpY2tuZXNzKCksIG1fZGF0YS0+c3Ryb2tlU3R5bGUoKSk7CiAgICAgfSk7
CisKKyAgICBmbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKQEAgLTY5Miw4ICs2OTcsMTAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldAogICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkg
PSB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQordm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OnNldE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKIHsKKyAgICAvLyBE
aXJlY3QyRCBtaXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBIQUxGIHRoZSBsaW5lIHRoaWNrbmVz
cy4KKyAgICBmbG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNhbnZhc01pdGVyTGltaXQ7CiAgICAg
aWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxpbWl0LCBtX21pdGVyTGltaXQpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTc0Niw2ICs3NTMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldAogICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwog
fQogCitEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJE
MTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAs
IG1fbGluZUpvaW4sIG1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAwLjBmKTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlY29tcHV0ZVN0cm9r
ZVN0eWxlKCkKIHsKICAgICBpZiAoIW1fc3Ryb2tlU3lsZUlzRGlydHkpCkBAIC03NTMsMTkgKzc2
NSwyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVjCiAKICAgICBt
X2QyZFN0cm9rZVN0eWxlID0gbnVsbHB0cjsKIAotICAgIGlmICgobV9zdHJva2VTdHlsZSAhPSBT
b2xpZFN0cm9rZSkgJiYgKG1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpKSB7Ci0gICAgICAgIGZs
b2F0IHBhdHRlcm5PZmZzZXQgPSBtX3BhdHRlcm5PZmZzZXQgLyBtX3N0cm9rZVRoaWNrbmVzczsK
KyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAwOworICAg
IGF1dG8gZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwogCi0gICAgICAgIERhc2hB
cnJheSBkYXNoZXMgPSBtX2Rhc2hlczsKKyAgICBpZiAoKG1fc3Ryb2tlU3R5bGUgIT0gU29saWRT
dHJva2UpICYmIChtX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSkgeworICAgICAgICBkYXNoU3R5
bGUgPSBEMkQxX0RBU0hfU1RZTEVfQ1VTVE9NOworICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gbV9w
YXR0ZXJuT2Zmc2V0IC8gbV9zdHJva2VUaGlja25lc3M7CisgICAgICAgIGRhc2hlcyA9IG1fZGFz
aGVzOwogCiAgICAgICAgIC8vIEluIERpcmVjdDJELCBkYXNoZXMgYW5kIGRvdHMgYXJlIGRlZmlu
ZWQgaW4gdGVybXMgb2YgdGhlIHJhdGlvIG9mIHRoZSBkYXNoIGxlbmd0aCB0byB0aGUgbGluZSB0
aGlja25lc3MuCiAgICAgICAgIGZvciAoYXV0byYgZGFzaCA6IGRhc2hlcykKICAgICAgICAgICAg
IGRhc2ggLz0gbV9zdHJva2VUaGlja25lc3M7Ci0KLSAgICAgICAgYXV0byBzdHJva2VTdHlsZVBy
b3BlcnRpZXMgPSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVD
YXAsIG1fbGluZUNhcCwgbV9saW5lSm9pbiwgbV9zdHJva2VUaGlja25lc3MsIEQyRDFfREFTSF9T
VFlMRV9DVVNUT00sIHBhdHRlcm5PZmZzZXQpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOwogICAgIH0K
IAorICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQcm9w
ZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0
ZXJMaW1pdCwgZGFzaFN0eWxlLCBwYXR0ZXJuT2Zmc2V0KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGll
cywgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOworCiAg
ICAgbV9zdHJva2VTeWxlSXNEaXJ0eSA9IGZhbHNlOwogfQogCkBAIC04MTksNyArODM1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwogCiAgICAgICAgIGZsb2F0
IHBhdHRlcm5PZmZzZXQgPSBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJv
a2VXaWR0aChwYXR0ZXJuV2lkdGgsIHN0cm9rZVdpZHRoKTsKICAgICAgICAgY29uc3QgZmxvYXQg
ZGFzaGVzWzJdID0geyBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5XaWR0aCB9OwotICAgICAgICBhdXRv
IHN0cm9rZVN0eWxlUHJvcGVydGllcyA9IEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcygpOwor
ICAgICAgICBhdXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9IG1fZGF0YS0+c3Ryb2tlU3R5bGVQ
cm9wZXJ0aWVzKCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVTdHJva2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMsIEFSUkFZU0la
RShkYXNoZXMpLCAmZDJkU3Ryb2tlU3R5bGUpOwogCiAgICAgICAgIG1fZGF0YS0+c2V0UGF0dGVy
bldpZHRoKHBhdHRlcm5XaWR0aCk7CkBAIC0xMTQxLDYgKzExNTcsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAgIGF1dG8gYnJ1c2ggPSBtX3N0YXRl
LmZpbGxQYXR0ZXJuID8gcGF0dGVybkZpbGxCcnVzaCgpIDogc29saWRGaWxsQnJ1c2goKTsKICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBicnVzaCk7CiAgICAg
fSk7CisKKyAgICBmbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0xMTY5LDYgKzEx
ODcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAg
IGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQt
PkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGJydXNoV2l0aENvbG9yKGNvbG9yKSk7CiAgICAgfSk7
CisKKyAgICBmbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQpAQCAtMTIwOCw2ICsxMjI4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbFJvdW5kZQogICAgICAgICBmaWxsUGF0aChwYXRoKTsKICAgICB9CiAKKyAgICBmbHVzaCgp
OworCiAgICAgaWYgKGRyYXdPd25TaGFkb3cpCiAgICAgICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgp
OwogfQpAQCAtMTMyOSw2ICsxMzUxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KGNvbnN0IFBhdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQVNTRVJUKCFwYXRoLmFj
dGl2ZVBhdGgoKSk7CisKICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBwYXRoVG9DbGlw
OwogICAgIHBhdGguY3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoY2xpcFJ1bGUsIHBhdGhUb0Ns
aXApOwogCkBAIC0xNTMyLDYgKzE1NTYsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UmVjdChjb25zdCBGCiAgICAgICAgIGF1dG8gYnJ1c2ggPSBtX3N0YXRlLnN0cm9rZVBhdHRlcm4g
PyBwYXR0ZXJuU3Ryb2tlQnJ1c2goKSA6IHNvbGlkU3Ryb2tlQnJ1c2goKTsKICAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5EcmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBicnVzaCwgbGluZVdpZHRoLCBtX2Rh
dGEtPnN0cm9rZVN0eWxlKCkpOwogICAgIH0pOworCisgICAgZmx1c2goKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCkBAIC0xNjg3LDI0ICsxNzEz
LDIzIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2UKICAgICByZXR1
cm4gcmVjdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewogICAgIERhc2hBcnJh
eSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCh3aWR0aCk7CisgICAgd2lkdGhzLmFwcGVuZChy
ZWN0LndpZHRoKCkpOwogICAgIHdpZHRocy5hcHBlbmQoMCk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4
dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKKyAg
ICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgICAg
ICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlTGluZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaAkocmV2
aXNpb24gMjM3OTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDYgKzkyLDggQEAgcHVibGljOgogCiAgICAgZmxvYXQgY3VycmVudEdsb2JhbEFscGhhKCkg
Y29uc3Q7CiAKKyAgICBEMkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIHN0cm9rZVN0eWxlUHJv
cGVydGllcygpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgcmVjb21wdXRlU3Ryb2tlU3R5
bGUoKTsKIApAQCAtMTI0LDcgKzEyNiw3IEBAIHByaXZhdGU6CiAgICAgU3Ryb2tlU3R5bGUgbV9z
dHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07CiAgICAgRGFzaEFycmF5IG1fZGFzaGVzOwogCi0g
ICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMS4wZiB9OworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7
IDEwLjBmIH07CiAgICAgZmxvYXQgbV9kYXNoT2Zmc2V0IHsgMCB9OwogICAgIGZsb2F0IG1fcGF0
dGVybldpZHRoIHsgMS4wZiB9OwogICAgIGZsb2F0IG1fcGF0dGVybk9mZnNldCB7IDAgfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDIxICsxMzcsNjAgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hD
b250ZXh0KCkgY29uc3QKICAgICBjb250ZXh0KCkuZmx1c2goKTsKIH0KIAotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CitzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNp
emUmIGJvdW5kcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRy
OworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IGltYWdlLT5HZXRTaXplKCkgOiBG
bG9hdFNpemUoKTsKKworICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFn
ZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNp
emVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKKyAgICAgICAgRDJEX1BPSU5UXzJVIG9yaWdpbiA9
IHsgfTsKKyAgICAgICAgRDJEMV9SRUNUX1UgY3JvcHBlZERpbWVuc3Rpb25zID0gSW50UmVjdChJ
bnRQb2ludCgpLCBib3VuZHMpOworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRJ
bWFnZTsKKyAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRJbWFnZS0+Q29weUZyb21CaXRtYXAo
Jm9yaWdpbiwgaW1hZ2UsICZjcm9wcGVkRGltZW5zdGlvbnMpOworICAgICAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBjcm9wcGVkSW1hZ2U7CisgICAgfQorCisgICAg
cmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6
ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3Jl
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8qYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgs
IDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNv
bnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxT
aXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6
ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUp
OworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Cisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
LmdldCgpKSk7Ki8KKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsK
K30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwor
ICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOworCisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7
CiB9CiAKLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uKQorUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQogewogICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFs
U2l6ZSgpOwogICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNp
emUoKTsKICAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRh
LmJhY2tpbmdTdG9yZVNpemU7CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZm
ZXItPm1fcmVzb2x1dGlvblNjYWxlOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxT
aXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOwogfQogCiBCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0
Q29weUltYWdlTW9kZSgpCkBAIC0xNTksNiArMTk4LDQxIEBAIEJhY2tpbmdTdG9yZUNvcHkgSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW0KICAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7CiB9
CiAKK0NPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKK3sKKyAgICAvLyBGSU1F
OiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBpbWFnZQorICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKwor
Q09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0g
cmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOworICAgIEhS
RVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKKworICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpIHsKKyAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICAgICAgY2FzZSBEb250
Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvcHlC
YWNraW5nU3RvcmU6CisgICAgICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0
aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOworICAg
ICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywg
bV9kYXRhLmRhdGEsIDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQor
ICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIGltYWdlOworfQorCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCiB7CiAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcCwgYmxlbmRNb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMzc5MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw4IEBAIFBhdGg6OlBhdGgoUGF0aCYmIG90
aGVyKQogCiBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiB7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgbV9wYXRoID0g
b3RoZXIubV9wYXRoOwogICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKICAg
ICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OwpAQCAt
MjA4LDcgKzIxMCw3IEBAIEhSRVNVTFQgUGF0aDo6aW5pdGlhbGl6ZVBhdGhTdGF0ZSgpCiAgICAg
cmV0dXJuIG1fYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpOwogfQogCi12
b2lkIFBhdGg6OmRyYXdEaWRDb21wbGV0ZSgpIGNvbnN0Cit2b2lkIFBhdGg6OmRyYXdEaWRDb21w
bGV0ZSgpCiB7CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQgPSB0aGlzLT5jdXJyZW50UG9p
bnQoKTsKIApAQCAtMjIyLDYgKzIyNCw3IEBAIHZvaWQgUGF0aDo6ZHJhd0RpZENvbXBsZXRlKCkg
Y29uc3QKICAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJ
TkcpOwogCiAgICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQsIEQyRDFf
RklHVVJFX0JFR0lOX0ZJTExFRCk7CisgICAgbV9kb2VzSGF2ZU9wZW5GaWd1cmUgPSB0cnVlOwog
fQogCiBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVs
ZSBydWxlKSBjb25zdApAQCAtMjY3LDE3ICsyNzAsMjIgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmbwogICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpIHx8IGlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50
PiBjdXJyZW50UG9pbnQ7CisgICAgaWYgKGhhc0N1cnJlbnRQb2ludCgpKQorICAgICAgICBjdXJy
ZW50UG9pbnQgPSB0aGlzLT5jdXJyZW50UG9pbnQoKTsKKwogICAgIGJvb2wgcGF0aElzQWN0aXZl
ID0gZmFsc2U7CiAgICAgaWYgKG1fYWN0aXZlUGF0aCkgeworICAgICAgICBtX2FjdGl2ZVBhdGgt
PkVuZEZpZ3VyZShEMkQxX0ZJR1VSRV9FTkRfT1BFTik7CisgICAgICAgIG1fZG9lc0hhdmVPcGVu
RmlndXJlID0gZmFsc2U7CiAgICAgICAgIG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKICAgICAgICAg
bV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKICAgICAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBu
dWxscHRyOwogICAgICAgICBwYXRoSXNBY3RpdmUgPSB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0
IEQyRDFfTUFUUklYXzNYMl9GJiBkMmRUcmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBEMkQx
X01BVFJJWF8zWDJfRj4odHJhbnNmb3JtKTsKICAgICBDT01QdHI8SUQyRDFUcmFuc2Zvcm1lZEdl
b21ldHJ5PiB0cmFuc2Zvcm1lZFBhdGg7Ci0gICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdl
dCgpLCBkMmRUcmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBhdGgpKSkKKyAgICBpZiAoIVNVQ0NFRURF
RChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9t
ZXRyeShtX3BhdGguZ2V0KCksIHRyYW5zZm9ybSwgJnRyYW5zZm9ybWVkUGF0aCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7CkBAIC0y
OTUsNiArMzAzLDE1IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8K
IAogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgZ2VvbWV0cmllcy5kYXRhKCksIGdlb21ldHJpZXMu
c2l6ZSgpLCAmbV9wYXRoKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKwor
ICAgIGlmICghY3VycmVudFBvaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZVBh
dGgtPlNldEZpbGxNb2RlKGZpbGxNb2RlKTsKKworICAgIGF1dG8gdHJhbnNmb3JtZWRQb2ludCA9
IHRyYW5zZm9ybS5tYXBQb2ludChjdXJyZW50UG9pbnQudmFsdWUoKSk7CisgICAgbV9hY3RpdmVQ
YXRoLT5CZWdpbkZpZ3VyZSh0cmFuc2Zvcm1lZFBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxM
RUQpOworICAgIG1fZG9lc0hhdmVPcGVuRmlndXJlID0gdHJ1ZTsKIH0KIAogRmxvYXRSZWN0IFBh
dGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CkBAIC0zMzYsMjYgKzM1Myw0MiBAQCBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgp
OwogfQogCit2b2lkIFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCkK
K3sKKyAgICBpZiAobV9kb2VzSGF2ZU9wZW5GaWd1cmUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CisgICAg
bV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9GSUdVUkVfQkVH
SU5fRklMTEVEKTsKKyAgICBtX2RvZXNIYXZlT3BlbkZpZ3VyZSA9IHRydWU7Cit9CisKIHZvaWQg
UGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIGlmICghbV9hY3Rp
dmVQYXRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21ldHJ5KTsKKyAgICBpZiAobV9hY3RpdmVQ
YXRoKSB7CisgICAgICAgIG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKKyAgICAgICAgbV9hY3RpdmVQ
YXRoID0gbnVsbHB0cjsKKyAgICAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwor
ICAgICAgICBtX2RvZXNIYXZlT3BlbkZpZ3VyZSA9IGZhbHNlOworICAgIH0KIAotICAgICAgICBh
cHBlbmRHZW9tZXRyeShtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQYXRo
R2VvbWV0cnkpOwogCi0gICAgICAgIGlmICghU1VDQ0VFREVEKG1fYWN0aXZlUGF0aEdlb21ldHJ5
LT5PcGVuKCZtX2FjdGl2ZVBhdGgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhcHBlbmRH
ZW9tZXRyeShtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSk7CiAKLSAgICAgICAgbV9hY3RpdmVQ
YXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKLSAgICB9CisgICAgaWYg
KCFTVUNDRUVERUQobV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQor
ICAgICAgICByZXR1cm47CiAKKyAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklM
TF9NT0RFX1dJTkRJTkcpOwogICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUocG9pbnQsIEQy
RDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7CisgICAgbV9kb2VzSGF2ZU9wZW5GaWd1cmUgPSB0cnVl
OwogfQogCiB2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsK
ICAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKIAorICAgIG9wZW5GaWd1cmVBdEN1cnJl
bnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5lKHBvaW50KTsK
IH0KIApAQCAtMzYzLDYgKzM5Niw3IEBAIHZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3Qg
RmxvYXRQb2kKIHsKICAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKIAorICAgIG9wZW5G
aWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRoLT5BZGRR
dWFkcmF0aWNCZXppZXIoRDJEMTo6UXVhZHJhdGljQmV6aWVyU2VnbWVudChjcCwgcCkpOwogfQog
CkBAIC0zNzAsMTcgKzQwNCw0OCBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3Qg
RmxvYXRQCiB7CiAgICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7CiAKLSAgICBGbG9hdFBv
aW50IGJlZm9yZVBvaW50ID0gY3VycmVudFBvaW50KCk7Ci0KKyAgICBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwogICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQyRDE6
OkJlemllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykK
IHsKLSAgICBVTlVTRURfUEFSQU0ocDEpOwotICAgIFVOVVNFRF9QQVJBTShwMik7Ci0gICAgVU5V
U0VEX1BBUkFNKHJhZGl1cyk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQobV9h
Y3RpdmVQYXRoLmdldCgpKTsKKworICAgIEZsb2F0UG9pbnQgcDAgPSBjdXJyZW50UG9pbnQoKTsK
KworICAgIGlmIChwMSA9PSBwMCB8fCBwMSA9PSBwMiB8fCBXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwocmFkaXVzLCAwLjBmKSkKKyAgICAgICAgcmV0dXJuIGFkZExpbmVUbyhwMSk7CisKKyAgICBm
bG9hdCBkaXJlY3Rpb24gPSAocDIueCgpIC0gcDEueCgpKSAqIChwMC55KCkgLSBwMS55KCkpICsg
KHAyLnkoKSAtIHAxLnkoKSkgKiAocDEueCgpIC0gcDAueCgpKTsKKyAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGRpcmVjdGlvbiwgMC4wZikpCisgICAgICAgIHJldHVybiBhZGRMaW5l
VG8ocDEpOworCisgICAgYXV0byBhMiA9IHRvRmxvYXRQb2ludChwMCAtIHAxKS5sZW5ndGhTcXVh
cmVkKCk7CisgICAgYXV0byBiMiA9IHRvRmxvYXRQb2ludChwMSAtIHAyKS5sZW5ndGhTcXVhcmVk
KCk7CisgICAgYXV0byBjMiA9IHRvRmxvYXRQb2ludChwMCAtIHAyKS5sZW5ndGhTcXVhcmVkKCk7
CisKKyAgICBkb3VibGUgY29zeCA9IChhMiArIGIyIC0gYzIpIC8gKDIuMCAqIHN0ZDo6c3FydChh
MiAqIGIyKSk7CisgICAgZG91YmxlIHNpbnggPSBzdGQ6OnNxcnQoMS4wIC0gY29zeCAqIGNvc3gp
OworICAgIGRvdWJsZSBkID0gcmFkaXVzIC8gKCgxIC0gY29zeCkgLyBzaW54KTsKKworICAgIGF1
dG8gYW4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMCkuc2NhbGVkKDEuMCAvIHN0ZDo6c3FydChhMikp
OworICAgIGF1dG8gYm4gPSB0b0Zsb2F0UG9pbnQocDEgLSBwMikuc2NhbGVkKDEuMCAvIHN0ZDo6
c3FydChiMikpOworCisgICAgYXV0byBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KHAxIC0gYW4u
c2NhbGVkKGQpKTsKKyAgICBhdXRvIHA0ID0gdG9GbG9hdFBvaW50KHAxIC0gYm4uc2NhbGVkKGQp
KTsKKworICAgIGJvb2wgYW50aWNsb2Nrd2lzZSA9IChkaXJlY3Rpb24gPCAwKTsKKyAgICBhbi5z
Y2FsZShyYWRpdXMgKiAoYW50aWNsb2Nrd2lzZSA/IDEgOiAtMSkpOworCisgICAgRmxvYXRQb2lu
dCBjZW50ZXIoc3RhcnRQb2ludC54KCkgKyBhbi55KCksIHN0YXJ0UG9pbnQueSgpIC0gYW4ueCgp
KTsKKworICAgIGRvdWJsZSBhbmdsZTAgPSBhdGFuMihzdGFydFBvaW50LnkoKSAtIGNlbnRlci55
KCksIHN0YXJ0UG9pbnQueCgpIC0gY2VudGVyLngoKSk7CisgICAgZG91YmxlIGFuZ2xlMSA9IGF0
YW4yKHA0LnkoKSAtIGNlbnRlci55KCksIHA0LngoKSAtIGNlbnRlci54KCkpOworCisgICAgb3Bl
bkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKKyAgICBhZGRMaW5lVG8oc3RhcnRQ
b2ludCk7CisgICAgYWRkQXJjKGNlbnRlciwgcmFkaXVzLCBhbmdsZTAsIGFuZ2xlMSwgYW50aWNs
b2Nrd2lzZSk7CiB9CiAKIHN0YXRpYyBib29sIGVxdWFsUmFkaXVzV2lkdGhzKGNvbnN0IEZsb2F0
U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29u
c3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJp
Z2h0UmFkaXVzKQpAQCAtNDIzLDggKzQ4OCwxMyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgp
CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9hY3Rp
dmVQYXRoLmdldCgpKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkVuZEZpZ3VyZShEMkQxX0ZJR1VSRV9F
TkRfT1BFTik7CisgICAgaWYgKG1fYWN0aXZlUGF0aCkgeworICAgICAgICBtX2FjdGl2ZVBhdGgt
PkVuZEZpZ3VyZShEMkQxX0ZJR1VSRV9FTkRfQ0xPU0VEKTsKKyAgICAgICAgbV9hY3RpdmVQYXRo
LT5DbG9zZSgpOworICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOworICAgIH0KKworICAg
IG1fZG9lc0hhdmVPcGVuRmlndXJlID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBGbG9hdFBvaW50IGFy
Y1N0YXJ0KGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFy
dEFuZ2xlKQpAQCAtNDM2LDIxICs1MDYsMjIgQEAgc3RhdGljIEZsb2F0UG9pbnQgYXJjU3RhcnQo
Y29uc3QgRmxvYXRQbwogICAgIHJldHVybiBzdGFydGluZ1BvaW50OwogfQogCi1zdGF0aWMgdm9p
ZCBkcmF3QXJjU2VjdGlvbihJRDJEMUdlb21ldHJ5U2luayogc2luaywgY29uc3QgRmxvYXRQb2lu
dCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xl
LCBib29sIGNsb2Nrd2lzZSkKK2NvbnN0IGZsb2F0IHR3b1BpID0gMi4wZiAqIHBpRmxvYXQ7CisK
K3N0YXRpYyB2b2lkIGRyYXdBcmNTZWN0aW9uKElEMkQxR2VvbWV0cnlTaW5rKiBzaW5rLCBjb25z
dCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxv
YXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICAvLyBEaXJlY3QyRCB3YW50
cyB1cyB0byBzcGVjaWZ5IHRoZSBlbmQgcG9pbnQgb2YgdGhlIGFyYywgbm90IHRoZSBjZW50ZXIu
IEl0IHdpbGwgYmUgZHJhd24gZnJvbQogICAgIC8vIHdoYXRldmVyIHRoZSBjdXJyZW50IHBvaW50
IGluIHRoZSAnbV9hY3RpdmVQYXRoJyBpcy4KLSAgICBGbG9hdFBvaW50IHAgPSBjZW50ZXI7Cisg
ICAgRmxvYXRQb2ludCBlbmRQb2ludCA9IGNlbnRlcjsKICAgICBmbG9hdCBlbmRYID0gcmFkaXVz
ICogc3RkOjpjb3MoZW5kQW5nbGUpOwogICAgIGZsb2F0IGVuZFkgPSByYWRpdXMgKiBzdGQ6OnNp
bihlbmRBbmdsZSk7Ci0gICAgcC5tb3ZlKGVuZFgsIGVuZFkpOworICAgIGVuZFBvaW50Lm1vdmUo
ZW5kWCwgZW5kWSk7CiAKLSAgICBmbG9hdCBhcmNEZWcgPSByYWQyZGVnKGVuZEFuZ2xlIC0gc3Rh
cnRBbmdsZSk7Ci0gICAgRDJEMV9TV0VFUF9ESVJFQ1RJT04gZGlyZWN0aW9uID0gY2xvY2t3aXNl
ID8gRDJEMV9TV0VFUF9ESVJFQ1RJT05fQ0xPQ0tXSVNFIDogRDJEMV9TV0VFUF9ESVJFQ1RJT05f
Q09VTlRFUl9DTE9DS1dJU0U7Ci0gICAgc2luay0+QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQocCwg
RDJEMTo6U2l6ZUYocmFkaXVzLCByYWRpdXMpLCBhcmNEZWcsIGRpcmVjdGlvbiwgRDJEMV9BUkNf
U0laRV9TTUFMTCkpOworICAgIEQyRDFfU1dFRVBfRElSRUNUSU9OIGRpcmVjdGlvbiA9IGFudGlj
bG9ja3dpc2UgPyBEMkQxX1NXRUVQX0RJUkVDVElPTl9DT1VOVEVSX0NMT0NLV0lTRSA6IEQyRDFf
U1dFRVBfRElSRUNUSU9OX0NMT0NLV0lTRTsKKyAgICBzaW5rLT5BZGRBcmMoRDJEMTo6QXJjU2Vn
bWVudChlbmRQb2ludCwgRDJEMTo6U2l6ZUYocmFkaXVzLCByYWRpdXMpLCAwLCBkaXJlY3Rpb24s
IEQyRDFfQVJDX1NJWkVfU01BTEwpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxv
YXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVu
ZEFuZ2xlLCBib29sIGNsb2Nrd2lzZSkKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9p
bnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmds
ZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQogewogICAgIGF1dG8gYXJjU3RhcnRQb2ludCA9IGFyY1N0
YXJ0KGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlKTsKICAgICBpZiAoIW1fYWN0aXZlUGF0aCkK
QEAgLTQ2MSwyMyArNTMyLDQxIEBAIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQm
IGNlbnQKICAgICAgICAgYWRkTGluZVRvKGFyY1N0YXJ0UG9pbnQpOwogICAgIH0KIAotICAgIC8v
IERpcmVjdDJEIGhhcyBwcm9ibGVtcyBkcmF3aW5nIGxhcmdlIGFyY3MuIEl0IGdldHMgY29uZnVz
ZWQgaWYgZHJhd2luZyBhIGNvbXBsZXRlIChvcgotICAgIC8vIG5lYXJseSBjb21wbGV0ZSkgY2ly
Y2xlIGluIHRoZSBjb3VudGVyLWNsb2Nrd2lzZSBkaXJlY3Rpb24uIFNvLCBkcmF3IGFueSBhcmNz
IGxhcmdlcgotICAgIC8vIHRoYW4gMTgwIGRlZ3JlZXMgaW4gdHdvIHBpZWNlcy4KLSAgICBmbG9h
dCBmdWxsU3dlZXAgPSBlbmRBbmdsZSAtIHN0YXJ0QW5nbGU7Ci0gICAgZmxvYXQgbmVnYXRlID0g
ZnVsbFN3ZWVwIDwgMCA/IC0xLjBmIDogMS4wZjsKLSAgICBmbG9hdCBtYXhTd2VlcCA9IG5lZ2F0
ZSAqIHN0ZDo6bWluKHN0ZDo6YWJzKGZ1bGxTd2VlcCksIHBpRmxvYXQpOwotICAgIGZsb2F0IGZp
cnN0QXJjRW5kID0gc3RhcnRBbmdsZSArIG1heFN3ZWVwOwotICAgIGRyYXdBcmNTZWN0aW9uKG1f
YWN0aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGZpcnN0QXJjRW5k
LCBjbG9ja3dpc2UpOworICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc3RkOjphYnMo
ZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSwgdHdvUGkpKQorICAgICAgICByZXR1cm4gYWRkRWxsaXBz
ZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgMi4w
ICogcmFkaXVzLCAyLjAgKiByYWRpdXMpKTsKIAotICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoZmlyc3RBcmNFbmQsIGVuZEFuZ2xlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChh
bnRpY2xvY2t3aXNlKSB7CisgICAgICAgIGlmIChlbmRBbmdsZSA+IHN0YXJ0QW5nbGUpIHsKKyAg
ICAgICAgICAgIGVuZEFuZ2xlIC09IHR3b1BpICogc3RkOjpjZWlsKChlbmRBbmdsZSAtIHN0YXJ0
QW5nbGUpIC8gdHdvUGkpOworICAgICAgICAgICAgQVNTRVJUKGVuZEFuZ2xlIDw9IHN0YXJ0QW5n
bGUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXJ0QW5nbGUgPiBl
bmRBbmdsZSkgeworICAgICAgICAgICAgc3RhcnRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgo
c3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSAvIHR3b1BpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGFy
dEFuZ2xlIDw9IGVuZEFuZ2xlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGZsb2F0
IGRlbHRhID0gYW50aWNsb2Nrd2lzZSA/IC1waU92ZXJUd29GbG9hdCA6IHBpT3ZlclR3b0Zsb2F0
OworICAgIGZsb2F0IHJlbWFpbmluZ0FyY0FuZ2xlID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlOwog
Ci0gICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQYXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywg
Zmlyc3RBcmNFbmQsIGVuZEFuZ2xlLCBjbG9ja3dpc2UpOworICAgIHdoaWxlICgocmVtYWluaW5n
QXJjQW5nbGUgPiAwICYmIHJlbWFpbmluZ0FyY0FuZ2xlID4gZGVsdGEpIHx8IChyZW1haW5pbmdB
cmNBbmdsZSA8IDAgJiYgcmVtYWluaW5nQXJjQW5nbGUgPCBkZWx0YSkpIHsKKyAgICAgICAgY29u
c3QgZG91YmxlIGN1cnJlbnRFbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyBkZWx0YTsKKyAgICAgICAg
ZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQYXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRB
bmdsZSwgY3VycmVudEVuZEFuZ2xlLCBhbnRpY2xvY2t3aXNlKTsKKyAgICAgICAgc3RhcnRBbmds
ZSA9IGN1cnJlbnRFbmRBbmdsZTsKKyAgICAgICAgcmVtYWluaW5nQXJjQW5nbGUgLT0gZGVsdGE7
CisgICAgfQorCisgICAgLy8gSGFuZGxlIGFueSByZW1haW5pbmcgcGFydCBvZiB0aGUgYXJjOgor
ICAgIGlmIChzdGQ6OmFicyhyZW1haW5pbmdBcmNBbmdsZSkgPiAxZS02KQorICAgICAgICBkcmF3
QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xl
LCBzdGFydEFuZ2xlICsgcmVtYWluaW5nQXJjQW5nbGUsIGFudGljbG9ja3dpc2UpOwogfQogCiB2
b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogeworICAgIGlmICghbV9hY3Rp
dmVQYXRoKQorICAgICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKKwogICAgIENPTVB0cjxJRDJE
MVJlY3RhbmdsZUdlb21ldHJ5PiByZWN0YW5nbGU7CiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSZWN0YW5nbGVHZW9tZXRyeShyLCAmcmVj
dGFuZ2xlKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKQEAgLTQ5NCw4ICs1
ODMsMTEgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQgcCwgZmxvYQogCiB2b2lk
IFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQogeworICAgIGlmICghbV9hY3Rp
dmVQYXRoKQorICAgICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKKwogICAgIENPTVB0cjxJRDJE
MUVsbGlwc2VHZW9tZXRyeT4gZWxsaXBzZTsKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxpcHNl
KHIuY2VudGVyKCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSksICZlbGxpcHNlKTsKKyAgICBIUkVT
VUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUVsbGlwc2VH
ZW9tZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCksIDAuNSAqIHIud2lkdGgoKSwgMC41ICog
ci5oZWlnaHQoKSksICZlbGxpcHNlKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKICAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA3LDggKzIwNyw2IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaAogICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKICAgICAgICAgcmV0
dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwogCi0gICAgQVNTRVJUKGdseXBoKTsKLQogICAg
IGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwogICAgIFJFTEVBU0VfQVNTRVJU
KGZvbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiAyMzc5MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6YXBwbHlDbGlwCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFn
ZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0Njkp
OiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2Vs
ZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGlu
ZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xv
clNwYWNlU1JHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2VTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CiAg
ICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFj
Y2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLSAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01v
ZGUpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYg
KCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4
dCA9IGNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMjM3OTI1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlcjo6YXBwbHlSZXNvdQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUg
PSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2
Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFy
UkdCID8gQ29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VTUkdCOwogICAgICAgICAvLyBG
SVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBh
bHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwg
Y29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2FsCiAgICAgcmV0dXJuIGFic29sdXRlVHJhbnNmb3JtOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUltYWdlQnVmZmVy
UmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9uJ3QgY3JlYXRl
IGVtcHR5IEltYWdlQnVmZmVycy4KQEAgLTI0NSw3ICsyNDUsMTEgQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbgogICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRSZWN0LnNp
emUoKSwgc2NhbGUpOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0
LCAxLCBjb2xvclNwYWNlKTsKKyNlbHNlCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOwor
I2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTI1OCw3ICsyNjIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRl
cmluCiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBJbnRTaXplIGNsYW1wZWRTaXplID0g
cm91bmRlZEludFNpemUoY2xhbXBlZFJlY3Quc2l6ZSgpKTsKICAgICBGbG9hdFNpemUgdW5jbGFt
cGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKHRhcmdldFJlY3Quc2l6ZSgpKTsKQEAgLTI2Nyw3ICsy
NzEsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbgogICAgIGlm
IChjbGFtcGVkU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisjaWYg
VVNFKERJUkVDVDJEKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LCAxLCBjb2xvclNwYWNlKTsKKyNl
bHNlCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOworI2VuZGlmCiAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAy
Mzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsMTMgQEAgcHVibGljOgogICAgIHZvaWQg
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVl
ZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9udFNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJv
b2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3Mg
JiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51
bGxwdHIpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBj
bGFtcGVkUmVjdCwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiA9IG51bGxwdHIpOworI2Vsc2UKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBjbGFtcGVkUmVjdCwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7CisjZW5kaWYKIAogICAg
IHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgUmVu
ZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiYsIGJvb2wgc2FmZVRvQ2xlYXIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354153</attachid>
            <date>2018-11-07 14:33:23 -0800</date>
            <delta_ts>2018-11-07 17:22:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191337-20181107143322.patch</filename>
            <type>text/plain</type>
            <size>38158</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNzkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDE4LTExLTA3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXVtEaXJlY3RY
XSBVcGRhdGUgY2FudmFzIGNvZGUgdG8gcGFzcyBtb3JlIHRlc3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzMzcKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzQ1ODc4ODAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSB0aGUgRGlyZWN0MkQgY29kZSBwYXRocyB0byBjb21wbHkgd2l0aCBv
dXIgY2FudmFzIHRlc3RzLCBpbXByb3ZpbmcgdGhlCisgICAgICAgIHRoZSB0ZXN0IHJlc3VsdHMg
c2NvcmVzIHRvIDU3OS83NzAuCisKKyAgICAgICAgUGF0aERpcmVjdDJEIHdhcyB1cGRhdGVkIHdp
dGggYW4gaW1wbGVtZW50YXRpb24gb2YgJ2FkZEFyY1RvJyBiYXNlZCBvbiB3b3JrIGJ5CisgICAg
ICAgIERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRlPiAoc2VlIGh0dHBzOi8vaGcubW96aWxsYS5v
cmcvbW96aWxsYS1jZW50cmFsL3Jldi9iMTE2YjQ5NDU5ZjgpLgorCisgICAgICAgIFRlc3RzOiBj
YW52YXMvcGhpbGlwL3Rlc3RzCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcik6IERpcmVjdDJEIG5lZWRzIGFjY2VzcyB0byB0aGUgZ3JhcGhpY3MKKyAgICAgICAg
Y29udGV4dCB0byBjcmVhdGUgdGhlIGJ1ZmZlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6IEZsdXNo
IG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c2V0TWl0ZXJMaW1pdCk6IENvcnJlY3QgZm9yIERpcmVjdDJEIGRlZmluaXRpb24gb2YgbWl0ZXIg
bGltaXQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnN0cm9rZVN0eWxlUHJvcGVydGllcyBjb25zdCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVjb21wdXRl
U3Ryb2tlU3R5bGUpOiBVcGRhdGUgZm9yIG5ldyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkcmF3
V2l0aFNoYWRvd0hlbHBlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdCk6IEFkZCBmbHVzaC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QpOiBVcGRhdGUgZm9yIGhlbHBlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOiBBZGQgZmx1c2guCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KTogVXBkYXRlIGZv
ciB1cHN0cmVhbSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZXNGb3JUZXh0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOiBBZGQgbWlzc2luZyBpbXBsZW1l
bnRhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9JbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QYXRoRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRyYXdEaWRDb21wbGV0ZSk6IFRoaXMgc2hvdWxk
IG5ldmVyIGhhdmUgYmVlbiBjb25zdC4KKyAgICAgICAgSXQgbWFuaXB1bGF0ZXMgdGhlIHBhdGgh
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOiBQcm9wZXJseSB0cmFuc2Zvcm0g
ZXhpc3RpbmcgZ2VvbWV0cmllcy4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZW5GaWd1cmVB
dEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRo
Ojptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkTGluZVRvKTogTWFrZSBzdXJl
IGZpZ3VyZSBzdGFydHMgYXQgYSB2YWxpZCBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OmFkZFF1YWRDdXJ2ZVRvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRCZXpp
ZXJDdXJ2ZVRvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRBcmNUbyk6IEFk
ZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsb3NlU3VicGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3QXJjU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjphZGRBcmMpOiBVcGRhdGUgdG8gYnVpbGQgbGFyZ2UgYXJjcyBvdXQgb2Ygc21hbGwgYXJj
IHNlZ21lbnRzLiBJZiB0aGUKKyAgICAgICAgYXJjIGlzIGVmZmVjdGl2ZWx5IGEgY29tcGxldGUg
Y2lyY2xlLCB1c2UgdGhlIGVsbGlwc2UgZHJhd2luZyByb3V0aW5lcy4KKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmFkZFJlY3QpOiBNYWtlIHN1cmUgd2Ugc3RhcnQgYXQgYSB2YWxpZCBzdGFydGlu
ZyBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVsbGlwc2UpOiBDb3JyZWN0IGZv
ciBkZWZpbml0aW9uIG9mIEQyRCBlbGxpcHNlLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZHJh
d0RpZENvbXBsZXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGggY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaDoKKwogMjAxOC0xMS0wNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBUaWxlQ29udHJvbGxlcjo6dGls
ZVNpemUoKSBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAyMzc5
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgcmV0dXJuIGNyZWF0
ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSk7CisjZWxzZQogICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5y
ZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CisjZW5kaWYKIH0K
IAogSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDIz
NzkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwogI2VsaWYgVVNF
KERJUkVDVDJEKQorICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKKyAgICBzdGF0aWMgQ09NUHRy
PElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4pOwogICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7CiAjZW5kaWYKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDIzNzky
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDkgKzE5NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIElE
MkQxR2VvbWV0cnlTaW5rKiBhY3RpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYXRo
LmdldCgpOyB9CiAgICAgICAgIHZvaWQgYXBwZW5kR2VvbWV0cnkoSUQyRDFHZW9tZXRyeSopOwog
ICAgICAgICB2b2lkIGNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdpbmRSdWxlLCBDT01QdHI8
SUQyRDFHZW9tZXRyeUdyb3VwPiYpIGNvbnN0OwotICAgICAgICB2b2lkIGRyYXdEaWRDb21wbGV0
ZSgpIGNvbnN0OworICAgICAgICB2b2lkIGRyYXdEaWRDb21wbGV0ZSgpOwogCiAgICAgICAgIEhS
RVNVTFQgaW5pdGlhbGl6ZVBhdGhTdGF0ZSgpOworICAgICAgICB2b2lkIG9wZW5GaWd1cmVBdEN1
cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTIx
MSw2ICsyMTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENPTVB0cjxJRDJEMUdl
b21ldHJ5R3JvdXA+IG1fcGF0aDsKICAgICAgICAgQ09NUHRyPElEMkQxUGF0aEdlb21ldHJ5PiBt
X2FjdGl2ZVBhdGhHZW9tZXRyeTsKICAgICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlTaW5rPiBt
X2FjdGl2ZVBhdGg7CisgICAgICAgIGJvb2wgbV9kb2VzSGF2ZU9wZW5GaWd1cmUgeyBmYWxzZSB9
OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aCB7IG51bGxwdHIgfTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMzc5
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTYsNiArNTk2LDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJgogCiAgICAgQ09NUHRyPElEMkQxQml0
bWFwQnJ1c2g+IHBhdHRlcm5CcnVzaDsKICAgICBIUkVTVUxUIGhyID0gY29udGV4dC0+Q3JlYXRl
Qml0bWFwQnJ1c2godGlsZUltYWdlLmdldCgpLCAmYml0bWFwQnJ1c2hQcm9wZXJ0aWVzLCAmYnJ1
c2hQcm9wZXJ0aWVzLCAmcGF0dGVybkJydXNoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CiAKICAgICBkcmF3V2l0
aG91dFNoYWRvdyhkZXN0UmVjdCwgW3RoaXMsIGRlc3RSZWN0LCBwYXR0ZXJuQnJ1c2hdKElEMkQx
UmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0Yg
ZDJkUmVjdCA9IGRlc3RSZWN0OwpAQCAtNjM1LDYgKzYzOCw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdChjb25zdCBGbG8KICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFu
Z2xlKCZkMmRSZWN0LCBzb2xpZEZpbGxCcnVzaCgpKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5E
cmF3UmVjdGFuZ2xlKCZkMmRSZWN0LCBzb2xpZFN0cm9rZUJydXNoKCksIHN0cm9rZVRoaWNrbmVz
cygpLCBtX2RhdGEtPnN0cm9rZVN0eWxlKCkpOwogICAgIH0pOworCisgICAgZmx1c2goKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldExpbmVDYXAoTGluZUNh
cCBjYXApCkBAIC02OTIsOCArNjk3LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpzZXQKICAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJM
aW1pdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRNaXRlckxpbWl0
KGZsb2F0IGNhbnZhc01pdGVyTGltaXQpCiB7CisgICAgLy8gRGlyZWN0MkQgbWl0ZXIgbGltaXQg
aXMgaW4gdGVybXMgb2YgSEFMRiB0aGUgbGluZSB0aGlja25lc3MuCisgICAgZmxvYXQgbWl0ZXJM
aW1pdCA9IDAuNWYgKiBjYW52YXNNaXRlckxpbWl0OwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwobWl0ZXJMaW1pdCwgbV9taXRlckxpbWl0KSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC03NDYsNiArNzUzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
ZXQKICAgICBtX3N0cm9rZVN5bGVJc0RpcnR5ID0gdHJ1ZTsKIH0KIAorRDJEMV9TVFJPS0VfU1RZ
TEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxl
UHJvcGVydGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVy
dGllcyhtX2xpbmVDYXAsIG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21pdGVy
TGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyZWNvbXB1dGVTdHJva2VTdHlsZSgpCiB7CiAgICAgaWYg
KCFtX3N0cm9rZVN5bGVJc0RpcnR5KQpAQCAtNzUzLDE5ICs3NjUsMjMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlYwogCiAgICAgbV9kMmRTdHJva2VTdHlsZSA9IG51
bGxwdHI7CiAKLSAgICBpZiAoKG1fc3Ryb2tlU3R5bGUgIT0gU29saWRTdHJva2UpICYmIChtX3N0
cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSkgewotICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0g
bV9wYXR0ZXJuT2Zmc2V0IC8gbV9zdHJva2VUaGlja25lc3M7CisgICAgRGFzaEFycmF5IGRhc2hl
czsKKyAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gMDsKKyAgICBhdXRvIGRhc2hTdHlsZSA9IEQy
RDFfREFTSF9TVFlMRV9TT0xJRDsKIAotICAgICAgICBEYXNoQXJyYXkgZGFzaGVzID0gbV9kYXNo
ZXM7CisgICAgaWYgKChtX3N0cm9rZVN0eWxlICE9IFNvbGlkU3Ryb2tlKSAmJiAobV9zdHJva2VT
dHlsZSAhPSBOb1N0cm9rZSkpIHsKKyAgICAgICAgZGFzaFN0eWxlID0gRDJEMV9EQVNIX1NUWUxF
X0NVU1RPTTsKKyAgICAgICAgcGF0dGVybk9mZnNldCA9IG1fcGF0dGVybk9mZnNldCAvIG1fc3Ry
b2tlVGhpY2tuZXNzOworICAgICAgICBkYXNoZXMgPSBtX2Rhc2hlczsKIAogICAgICAgICAvLyBJ
biBEaXJlY3QyRCwgZGFzaGVzIGFuZCBkb3RzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBy
YXRpbyBvZiB0aGUgZGFzaCBsZW5ndGggdG8gdGhlIGxpbmUgdGhpY2tuZXNzLgogICAgICAgICBm
b3IgKGF1dG8mIGRhc2ggOiBkYXNoZXMpCiAgICAgICAgICAgICBkYXNoIC89IG1fc3Ryb2tlVGhp
Y2tuZXNzOwotCi0gICAgICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ry
b2tlU3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGlu
ZUpvaW4sIG1fc3Ryb2tlVGhpY2tuZXNzLCBEMkQxX0RBU0hfU1RZTEVfQ1VTVE9NLCBwYXR0ZXJu
T2Zmc2V0KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHlsZVByb3BlcnRpZXMsIGRhc2hlcy5kYXRhKCksIGRhc2hl
cy5zaXplKCksICZtX2QyZFN0cm9rZVN0eWxlKTsKICAgICB9CiAKKyAgICBhdXRvIHN0cm9rZVN0
eWxlUHJvcGVydGllcyA9IEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX2xpbmVDYXAsIG1f
bGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVKb2luLCBtX21pdGVyTGltaXQsIGRhc2hTdHlsZSwg
cGF0dGVybk9mZnNldCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHlsZVByb3BlcnRpZXMsIGRhc2hlcy5kYXRhKCksIGRh
c2hlcy5zaXplKCksICZtX2QyZFN0cm9rZVN0eWxlKTsKKwogICAgIG1fc3Ryb2tlU3lsZUlzRGly
dHkgPSBmYWxzZTsKIH0KIApAQCAtODE5LDcgKzgzNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBGbG8KIAogICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gZGFz
aGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgocGF0dGVybldpZHRo
LCBzdHJva2VXaWR0aCk7CiAgICAgICAgIGNvbnN0IGZsb2F0IGRhc2hlc1syXSA9IHsgcGF0dGVy
bldpZHRoLCBwYXR0ZXJuV2lkdGggfTsKLSAgICAgICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRp
ZXMgPSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMoKTsKKyAgICAgICAgYXV0byBzdHJva2VT
dHlsZVByb3BlcnRpZXMgPSBtX2RhdGEtPnN0cm9rZVN0eWxlUHJvcGVydGllcygpOwogICAgICAg
ICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0
cm9rZVN0eWxlUHJvcGVydGllcywgZGFzaGVzLCBBUlJBWVNJWkUoZGFzaGVzKSwgJmQyZFN0cm9r
ZVN0eWxlKTsKIAogICAgICAgICBtX2RhdGEtPnNldFBhdHRlcm5XaWR0aChwYXR0ZXJuV2lkdGgp
OwpAQCAtMTE0MSw2ICsxMTU3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsbwogICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5maWxsUGF0dGVybiA/IHBhdHRl
cm5GaWxsQnJ1c2goKSA6IHNvbGlkRmlsbEJydXNoKCk7CiAgICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgYnJ1c2gpOwogICAgIH0pOworCisgICAgZmx1c2goKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTE2OSw2ICsxMTg3LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBk
MmRSZWN0ID0gcmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRS
ZWN0LCBicnVzaFdpdGhDb2xvcihjb2xvcikpOwogICAgIH0pOworCisgICAgZmx1c2goKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTEyMDgsNiArMTIy
OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGUKICAgICAgICAg
ZmlsbFBhdGgocGF0aCk7CiAgICAgfQogCisgICAgZmx1c2goKTsKKwogICAgIGlmIChkcmF3T3du
U2hhZG93KQogICAgICAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKIH0KQEAgLTEzMjksNiArMTM1
MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXQKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIEFTU0VSVCghcGF0aC5hY3RpdmVQYXRoKCkpOworCiAgICAg
Q09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKICAgICBwYXRoLmNyZWF0ZUdl
b21ldHJ5V2l0aEZpbGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKIApAQCAtMTUzMiw2ICsx
NTU2LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgICAg
ICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID8gcGF0dGVyblN0cm9rZUJydXNo
KCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd1JlY3Rh
bmdsZSgmZDJkUmVjdCwgYnJ1c2gsIGxpbmVXaWR0aCwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsK
ICAgICB9KTsKKworICAgIGZsdXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgY2FwKQpAQCAtMTY4NywyNCArMTcxMywyMyBAQCBGbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRo
cy5hcHBlbmQod2lkdGgpOworICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKICAgICB3
aWR0aHMuYXBwZW5kKDApOwotICAgIGRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChy
ZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzLCBzdHJva2VTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF3
aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNG
b3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw4IEBAIHB1Ymxp
YzoKIAogICAgIGZsb2F0IGN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0OwogCisgICAgRDJEMV9T
VFJPS0VfU1RZTEVfUFJPUEVSVElFUyBzdHJva2VTdHlsZVByb3BlcnRpZXMoKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICB2b2lkIHJlY29tcHV0ZVN0cm9rZVN0eWxlKCk7CiAKQEAgLTEyNCw3ICsx
MjYsNyBAQCBwcml2YXRlOgogICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0
cm9rZSB9OwogICAgIERhc2hBcnJheSBtX2Rhc2hlczsKIAotICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dCB7IDEuMGYgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAxMC4wZiB9OwogICAgIGZsb2F0
IG1fZGFzaE9mZnNldCB7IDAgfTsKICAgICBmbG9hdCBtX3BhdHRlcm5XaWR0aCB7IDEuMGYgfTsK
ICAgICBmbG9hdCBtX3BhdHRlcm5PZmZzZXQgeyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywy
MSArMTM3LDYwIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0CiAgICAg
Y29udGV4dCgpLmZsdXNoKCk7CiB9CiAKLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAorc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNl
c3NhcnkoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBGbG9hdFNpemUgaW1h
Z2VTaXplID0gaW1hZ2UgPyBpbWFnZS0+R2V0U2l6ZSgpIDogRmxvYXRTaXplKCk7CisKKyAgICBp
ZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4o
aW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQo
KSkpKSB7CisgICAgICAgIEQyRF9QT0lOVF8yVSBvcmlnaW4gPSB7IH07CisgICAgICAgIEQyRDFf
UkVDVF9VIGNyb3BwZWREaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKTsK
KyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkSW1hZ2U7CisgICAgICAgIEhSRVNV
TFQgaHIgPSBjcm9wcGVkSW1hZ2UtPkNvcHlGcm9tQml0bWFwKCZvcmlnaW4sIGltYWdlLCAmY3Jv
cHBlZERpbWVuc3Rpb25zKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAg
ICByZXR1cm4gY3JvcHBlZEltYWdlOworICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKwor
c3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRT
aXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBp
ZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAv
KmF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxT
aXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBGbG9h
dFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzY2FsZVNpemVUb1VzZXJTcGFjZShsb2dpY2Fs
U2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKTsKKyAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGlt
YWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOyovCisgICAgfQor
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKworICAgIHJldHVy
biBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBp
bnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1f
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1SZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbikKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKICAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKICAgICBJbnRTaXpl
IGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7CiAgICAgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwog
ICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2Fs
ZTsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJ
bWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJh
Y2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0K
IAogQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQpAQCAt
MTU5LDYgKzE5OCw0MSBAQCBCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUlt
CiAgICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwogfQogCitDT01QdHI8SUQyRDFCaXRt
YXA+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCit7CisgICAgLy8gRklNRTogU2VlIGlmIHdlIGNhbiByZXVz
ZSB0aGUgb24taGFyZHdhcmUgaW1hZ2UKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK0NPTVB0cjxJRDJEMUJpdG1hcD4g
SW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
cikgY29uc3QKK3sKKyAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworCisg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFy
Z2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CisgICAgICAgIHN3aXRj
aCAoY29weUJlaGF2aW9yKSB7CisgICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBv
aW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAgICAgIGltYWdlLT5Db3B5
RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLCAzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKKyAgICBlbHNlCisgICAgICAgIGlt
YWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7CisjZW5kaWYKKworICAgIHJldHVy
biBpbWFnZTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIGltYWdl
QnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9k
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNpb24gMjM3OTI1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw2ICsxNzEsOCBAQCBQYXRoOjpQYXRoKFBhdGgmJiBvdGhlcikKIAogUGF0aCYgUGF0aDo6
b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQogeworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKICAgICBt
X2FjdGl2ZVBhdGggPSBvdGhlci5tX2FjdGl2ZVBhdGg7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0
cnkgPSBvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeTsKQEAgLTIwOCw3ICsyMTAsNyBAQCBIUkVT
VUxUIFBhdGg6OmluaXRpYWxpemVQYXRoU3RhdGUoKQogICAgIHJldHVybiBtX2FjdGl2ZVBhdGhH
ZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKTsKIH0KIAotdm9pZCBQYXRoOjpkcmF3RGlkQ29t
cGxldGUoKSBjb25zdAordm9pZCBQYXRoOjpkcmF3RGlkQ29tcGxldGUoKQogewogICAgIEZsb2F0
UG9pbnQgY3VycmVudFBvaW50ID0gdGhpcy0+Y3VycmVudFBvaW50KCk7CiAKQEAgLTIyMiw2ICsy
MjQsNyBAQCB2b2lkIFBhdGg6OmRyYXdEaWRDb21wbGV0ZSgpIGNvbnN0CiAgICAgbV9hY3RpdmVQ
YXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKIAogICAgIG1fYWN0aXZl
UGF0aC0+QmVnaW5GaWd1cmUoY3VycmVudFBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQp
OworICAgIG1fZG9lc0hhdmVPcGVuRmlndXJlID0gdHJ1ZTsKIH0KIAogYm9vbCBQYXRoOjpjb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKQEAgLTI2
NywxNyArMjcwLDIyIEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8K
ICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSB8fCBpc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4gY3VycmVudFBvaW50OworICAg
IGlmIChoYXNDdXJyZW50UG9pbnQoKSkKKyAgICAgICAgY3VycmVudFBvaW50ID0gdGhpcy0+Y3Vy
cmVudFBvaW50KCk7CisKICAgICBib29sIHBhdGhJc0FjdGl2ZSA9IGZhbHNlOwogICAgIGlmICht
X2FjdGl2ZVBhdGgpIHsKKyAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdV
UkVfRU5EX09QRU4pOworICAgICAgICBtX2RvZXNIYXZlT3BlbkZpZ3VyZSA9IGZhbHNlOwogICAg
ICAgICBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7CiAgICAgICAgIG1fYWN0aXZlUGF0aCA9IG51bGxw
dHI7CiAgICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKICAgICAgICAgcGF0
aElzQWN0aXZlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBjb25zdCBEMkQxX01BVFJJWF8zWDJfRiYg
ZDJkVHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRDJEMV9NQVRSSVhfM1gyX0Y+KHRyYW5z
Zm9ybSk7CiAgICAgQ09NUHRyPElEMkQxVHJhbnNmb3JtZWRHZW9tZXRyeT4gdHJhbnNmb3JtZWRQ
YXRoOwotICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aC5nZXQoKSwgZDJkVHJhbnNmb3JtLCAm
dHJhbnNmb3JtZWRQYXRoKSkpCisgICAgaWYgKCFTVUNDRUVERUQoR3JhcGhpY3NDb250ZXh0Ojpz
eXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVRyYW5zZm9ybWVkR2VvbWV0cnkobV9wYXRoLmdldCgpLCB0
cmFuc2Zvcm0sICZ0cmFuc2Zvcm1lZFBhdGgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVj
dG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzOwpAQCAtMjk1LDYgKzMwMywxNSBAQCB2b2lk
IFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAKICAgICBIUkVTVUxUIGhyID0g
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmls
bE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBpZiAoIWN1cnJlbnRQb2lu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShmaWxs
TW9kZSk7CisKKyAgICBhdXRvIHRyYW5zZm9ybWVkUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQo
Y3VycmVudFBvaW50LnZhbHVlKCkpOworICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUodHJh
bnNmb3JtZWRQb2ludCwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKKyAgICBtX2RvZXNIYXZl
T3BlbkZpZ3VyZSA9IHRydWU7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBj
b25zdApAQCAtMzM2LDI2ICszNTMsNDIgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5n
UmVjdChTdHJvawogICAgIHJldHVybiBib3VuZGluZ1JlY3QoKTsKIH0KIAordm9pZCBQYXRoOjpv
cGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fZG9lc0hh
dmVPcGVuRmlndXJlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZVBhdGgtPlNldEZp
bGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOworICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5G
aWd1cmUoY3VycmVudFBvaW50KCksIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7CisgICAgbV9k
b2VzSGF2ZU9wZW5GaWd1cmUgPSB0cnVlOworfQorCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoIW1fYWN0aXZlUGF0aCkgewotICAgICAgICBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZtX2Fj
dGl2ZVBhdGhHZW9tZXRyeSk7CisgICAgaWYgKG1fYWN0aXZlUGF0aCkgeworICAgICAgICBtX2Fj
dGl2ZVBhdGgtPkNsb3NlKCk7CisgICAgICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7CisgICAg
ICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKKyAgICAgICAgbV9kb2VzSGF2ZU9w
ZW5GaWd1cmUgPSBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAgYXBwZW5kR2VvbWV0cnkobV9hY3Rp
dmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21ldHJ5KTsKIAotICAgICAg
ICBpZiAoIVNVQ0NFRURFRChtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRo
KSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgYXBwZW5kR2VvbWV0cnkobV9hY3RpdmVQYXRo
R2VvbWV0cnkuZ2V0KCkpOwogCi0gICAgICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJE
MV9GSUxMX01PREVfV0lORElORyk7Ci0gICAgfQorICAgIGlmICghU1VDQ0VFREVEKG1fYWN0aXZl
UGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuOwogCisg
ICAgbV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShEMkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKICAg
ICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKHBvaW50LCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxM
RUQpOworICAgIG1fZG9lc0hhdmVPcGVuRmlndXJlID0gdHJ1ZTsKIH0KIAogdm9pZCBQYXRoOjph
ZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgQVNTRVJUKG1fYWN0aXZl
UGF0aC5nZXQoKSk7CiAKKyAgICBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgp
OwogICAgIG1fYWN0aXZlUGF0aC0+QWRkTGluZShwb2ludCk7CiB9CiAKQEAgLTM2Myw2ICszOTYs
NyBAQCB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pCiB7CiAgICAgQVNT
RVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7CiAKKyAgICBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpOwogICAgIG1fYWN0aXZlUGF0aC0+QWRkUXVhZHJhdGljQmV6aWVyKEQyRDE6
OlF1YWRyYXRpY0JlemllclNlZ21lbnQoY3AsIHApKTsKIH0KIApAQCAtMzcwLDE3ICs0MDQsNDgg
QEAgdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UAogewogICAgIEFTU0VS
VChtX2FjdGl2ZVBhdGguZ2V0KCkpOwogCi0gICAgRmxvYXRQb2ludCBiZWZvcmVQb2ludCA9IGN1
cnJlbnRQb2ludCgpOwotCisgICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3Nhcnko
KTsKICAgICBtX2FjdGl2ZVBhdGgtPkFkZEJlemllcihEMkQxOjpCZXppZXJTZWdtZW50KGNwMSwg
Y3AyLCBwKSk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHAxKTsKLSAgICBVTlVTRURfUEFSQU0ocDIpOwotICAgIFVOVVNFRF9QQVJBTShyYWRpdXMpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7CisK
KyAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7CisKKyAgICBpZiAocDEgPT0gcDAg
fHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikpCisg
ICAgICAgIHJldHVybiBhZGRMaW5lVG8ocDEpOworCisgICAgZmxvYXQgZGlyZWN0aW9uID0gKHAy
LngoKSAtIHAxLngoKSkgKiAocDAueSgpIC0gcDEueSgpKSArIChwMi55KCkgLSBwMS55KCkpICog
KHAxLngoKSAtIHAwLngoKSk7CisgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChkaXJl
Y3Rpb24sIDAuMGYpKQorICAgICAgICByZXR1cm4gYWRkTGluZVRvKHAxKTsKKworICAgIGF1dG8g
YTIgPSB0b0Zsb2F0UG9pbnQocDAgLSBwMSkubGVuZ3RoU3F1YXJlZCgpOworICAgIGF1dG8gYjIg
PSB0b0Zsb2F0UG9pbnQocDEgLSBwMikubGVuZ3RoU3F1YXJlZCgpOworICAgIGF1dG8gYzIgPSB0
b0Zsb2F0UG9pbnQocDAgLSBwMikubGVuZ3RoU3F1YXJlZCgpOworCisgICAgZG91YmxlIGNvc3gg
PSAoYTIgKyBiMiAtIGMyKSAvICgyLjAgKiBzdGQ6OnNxcnQoYTIgKiBiMikpOworICAgIGRvdWJs
ZSBzaW54ID0gc3RkOjpzcXJ0KDEuMCAtIGNvc3ggKiBjb3N4KTsKKyAgICBkb3VibGUgZCA9IHJh
ZGl1cyAvICgoMSAtIGNvc3gpIC8gc2lueCk7CisKKyAgICBhdXRvIGFuID0gdG9GbG9hdFBvaW50
KHAxIC0gcDApLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYTIpKTsKKyAgICBhdXRvIGJuID0gdG9G
bG9hdFBvaW50KHAxIC0gcDIpLnNjYWxlZCgxLjAgLyBzdGQ6OnNxcnQoYjIpKTsKKworICAgIGF1
dG8gc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChwMSAtIGFuLnNjYWxlZChkKSk7CisgICAgYXV0
byBwNCA9IHRvRmxvYXRQb2ludChwMSAtIGJuLnNjYWxlZChkKSk7CisKKyAgICBib29sIGFudGlj
bG9ja3dpc2UgPSAoZGlyZWN0aW9uIDwgMCk7CisgICAgYW4uc2NhbGUocmFkaXVzICogKGFudGlj
bG9ja3dpc2UgPyAxIDogLTEpKTsKKworICAgIEZsb2F0UG9pbnQgY2VudGVyKHN0YXJ0UG9pbnQu
eCgpICsgYW4ueSgpLCBzdGFydFBvaW50LnkoKSAtIGFuLngoKSk7CisKKyAgICBkb3VibGUgYW5n
bGUwID0gYXRhbjIoc3RhcnRQb2ludC55KCkgLSBjZW50ZXIueSgpLCBzdGFydFBvaW50LngoKSAt
IGNlbnRlci54KCkpOworICAgIGRvdWJsZSBhbmdsZTEgPSBhdGFuMihwNC55KCkgLSBjZW50ZXIu
eSgpLCBwNC54KCkgLSBjZW50ZXIueCgpKTsKKworICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2lu
dElmTmVjZXNzYXJ5KCk7CisgICAgYWRkTGluZVRvKHN0YXJ0UG9pbnQpOworICAgIGFkZEFyYyhj
ZW50ZXIsIHJhZGl1cywgYW5nbGUwLCBhbmdsZTEsIGFudGljbG9ja3dpc2UpOwogfQogCiBzdGF0
aWMgYm9vbCBlcXVhbFJhZGl1c1dpZHRocyhjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9t
TGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKQEAgLTQyMyw4
ICs0ODgsMTMgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQogICAgIGlmIChpc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0gICAg
bV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdVUkVfRU5EX09QRU4pOworICAgIGlmICht
X2FjdGl2ZVBhdGgpIHsKKyAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdV
UkVfRU5EX0NMT1NFRCk7CisgICAgICAgIG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKKyAgICAgICAg
bV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX2RvZXNIYXZlT3BlbkZpZ3Vy
ZSA9IGZhbHNlOwogfQogCiBzdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBv
aW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkKQEAgLTQzNiwyMSAr
NTA2LDIyIEBAIHN0YXRpYyBGbG9hdFBvaW50IGFyY1N0YXJ0KGNvbnN0IEZsb2F0UG8KICAgICBy
ZXR1cm4gc3RhcnRpbmdQb2ludDsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0FyY1NlY3Rpb24oSUQy
RDFHZW9tZXRyeVNpbmsqIHNpbmssIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFk
aXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpCitj
b25zdCBmbG9hdCB0d29QaSA9IDIuMGYgKiBwaUZsb2F0OworCitzdGF0aWMgdm9pZCBkcmF3QXJj
U2VjdGlvbihJRDJEMUdlb21ldHJ5U2luayogc2luaywgY29uc3QgRmxvYXRQb2ludCYgY2VudGVy
LCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFu
dGljbG9ja3dpc2UpCiB7CiAgICAgLy8gRGlyZWN0MkQgd2FudHMgdXMgdG8gc3BlY2lmeSB0aGUg
ZW5kIHBvaW50IG9mIHRoZSBhcmMsIG5vdCB0aGUgY2VudGVyLiBJdCB3aWxsIGJlIGRyYXduIGZy
b20KICAgICAvLyB3aGF0ZXZlciB0aGUgY3VycmVudCBwb2ludCBpbiB0aGUgJ21fYWN0aXZlUGF0
aCcgaXMuCi0gICAgRmxvYXRQb2ludCBwID0gY2VudGVyOworICAgIEZsb2F0UG9pbnQgZW5kUG9p
bnQgPSBjZW50ZXI7CiAgICAgZmxvYXQgZW5kWCA9IHJhZGl1cyAqIHN0ZDo6Y29zKGVuZEFuZ2xl
KTsKICAgICBmbG9hdCBlbmRZID0gcmFkaXVzICogc3RkOjpzaW4oZW5kQW5nbGUpOwotICAgIHAu
bW92ZShlbmRYLCBlbmRZKTsKKyAgICBlbmRQb2ludC5tb3ZlKGVuZFgsIGVuZFkpOwogCi0gICAg
ZmxvYXQgYXJjRGVnID0gcmFkMmRlZyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpOwotICAgIEQyRDFf
U1dFRVBfRElSRUNUSU9OIGRpcmVjdGlvbiA9IGNsb2Nrd2lzZSA/IEQyRDFfU1dFRVBfRElSRUNU
SU9OX0NMT0NLV0lTRSA6IEQyRDFfU1dFRVBfRElSRUNUSU9OX0NPVU5URVJfQ0xPQ0tXSVNFOwot
ICAgIHNpbmstPkFkZEFyYyhEMkQxOjpBcmNTZWdtZW50KHAsIEQyRDE6OlNpemVGKHJhZGl1cywg
cmFkaXVzKSwgYXJjRGVnLCBkaXJlY3Rpb24sIEQyRDFfQVJDX1NJWkVfU01BTEwpKTsKKyAgICBE
MkQxX1NXRUVQX0RJUkVDVElPTiBkaXJlY3Rpb24gPSBhbnRpY2xvY2t3aXNlID8gRDJEMV9TV0VF
UF9ESVJFQ1RJT05fQ09VTlRFUl9DTE9DS1dJU0UgOiBEMkQxX1NXRUVQX0RJUkVDVElPTl9DTE9D
S1dJU0U7CisgICAgc2luay0+QWRkQXJjKEQyRDE6OkFyY1NlZ21lbnQoZW5kUG9pbnQsIEQyRDE6
OlNpemVGKHJhZGl1cywgcmFkaXVzKSwgMCwgZGlyZWN0aW9uLCBEMkQxX0FSQ19TSVpFX1NNQUxM
KSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxv
YXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dp
c2UpCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJh
ZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lz
ZSkKIHsKICAgICBhdXRvIGFyY1N0YXJ0UG9pbnQgPSBhcmNTdGFydChjZW50ZXIsIHJhZGl1cywg
c3RhcnRBbmdsZSk7CiAgICAgaWYgKCFtX2FjdGl2ZVBhdGgpCkBAIC00NjEsMjMgKzUzMiw0MSBA
QCB2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBjZW50CiAgICAgICAgIGFkZExp
bmVUbyhhcmNTdGFydFBvaW50KTsKICAgICB9CiAKLSAgICAvLyBEaXJlY3QyRCBoYXMgcHJvYmxl
bXMgZHJhd2luZyBsYXJnZSBhcmNzLiBJdCBnZXRzIGNvbmZ1c2VkIGlmIGRyYXdpbmcgYSBjb21w
bGV0ZSAob3IKLSAgICAvLyBuZWFybHkgY29tcGxldGUpIGNpcmNsZSBpbiB0aGUgY291bnRlci1j
bG9ja3dpc2UgZGlyZWN0aW9uLiBTbywgZHJhdyBhbnkgYXJjcyBsYXJnZXIKLSAgICAvLyB0aGFu
IDE4MCBkZWdyZWVzIGluIHR3byBwaWVjZXMuCi0gICAgZmxvYXQgZnVsbFN3ZWVwID0gZW5kQW5n
bGUgLSBzdGFydEFuZ2xlOwotICAgIGZsb2F0IG5lZ2F0ZSA9IGZ1bGxTd2VlcCA8IDAgPyAtMS4w
ZiA6IDEuMGY7Ci0gICAgZmxvYXQgbWF4U3dlZXAgPSBuZWdhdGUgKiBzdGQ6Om1pbihzdGQ6OmFi
cyhmdWxsU3dlZXApLCBwaUZsb2F0KTsKLSAgICBmbG9hdCBmaXJzdEFyY0VuZCA9IHN0YXJ0QW5n
bGUgKyBtYXhTd2VlcDsKLSAgICBkcmF3QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNl
bnRlciwgcmFkaXVzLCBzdGFydEFuZ2xlLCBmaXJzdEFyY0VuZCwgY2xvY2t3aXNlKTsKKyAgICBp
ZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmds
ZSksIHR3b1BpKSkKKyAgICAgICAgcmV0dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNlbnRlci54
KCkgLSByYWRpdXMsIGNlbnRlci55KCkgLSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4wICogcmFk
aXVzKSk7CiAKLSAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGZpcnN0QXJjRW5kLCBl
bmRBbmdsZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYW50aWNsb2Nrd2lzZSkgeworICAg
ICAgICBpZiAoZW5kQW5nbGUgPiBzdGFydEFuZ2xlKSB7CisgICAgICAgICAgICBlbmRBbmdsZSAt
PSB0d29QaSAqIHN0ZDo6Y2VpbCgoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSAvIHR3b1BpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChlbmRBbmdsZSA8PSBzdGFydEFuZ2xlKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChzdGFydEFuZ2xlID4gZW5kQW5nbGUpIHsKKyAgICAgICAg
ICAgIHN0YXJ0QW5nbGUgLT0gdHdvUGkgKiBzdGQ6OmNlaWwoKHN0YXJ0QW5nbGUgLSBlbmRBbmds
ZSkgLyB0d29QaSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBmbG9hdCBkZWx0YSA9IGFudGljbG9ja3dp
c2UgPyAtcGlPdmVyVHdvRmxvYXQgOiBwaU92ZXJUd29GbG9hdDsKKyAgICBmbG9hdCByZW1haW5p
bmdBcmNBbmdsZSA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZTsKIAotICAgIGRyYXdBcmNTZWN0aW9u
KG1fYWN0aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIGZpcnN0QXJjRW5kLCBlbmRBbmds
ZSwgY2xvY2t3aXNlKTsKKyAgICB3aGlsZSAoKHJlbWFpbmluZ0FyY0FuZ2xlID4gMCAmJiByZW1h
aW5pbmdBcmNBbmdsZSA+IGRlbHRhKSB8fCAocmVtYWluaW5nQXJjQW5nbGUgPCAwICYmIHJlbWFp
bmluZ0FyY0FuZ2xlIDwgZGVsdGEpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RW5k
QW5nbGUgPSBzdGFydEFuZ2xlICsgZGVsdGE7CisgICAgICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0
aXZlUGF0aC5nZXQoKSwgY2VudGVyLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGN1cnJlbnRFbmRBbmds
ZSwgYW50aWNsb2Nrd2lzZSk7CisgICAgICAgIHN0YXJ0QW5nbGUgPSBjdXJyZW50RW5kQW5nbGU7
CisgICAgICAgIHJlbWFpbmluZ0FyY0FuZ2xlIC09IGRlbHRhOworICAgIH0KKworICAgIC8vIEhh
bmRsZSBhbnkgcmVtYWluaW5nIHBhcnQgb2YgdGhlIGFyYzoKKyAgICBpZiAoc3RkOjphYnMocmVt
YWluaW5nQXJjQW5nbGUpID4gMWUtNikKKyAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQ
YXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSArIHJlbWFp
bmluZ0FyY0FuZ2xlLCBhbnRpY2xvY2t3aXNlKTsKIH0KIAogdm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKIHsKKyAgICBpZiAoIW1fYWN0aXZlUGF0aCkKKyAgICAgICAgbW92
ZVRvKHIubG9jYXRpb24oKSk7CisKICAgICBDT01QdHI8SUQyRDFSZWN0YW5nbGVHZW9tZXRyeT4g
cmVjdGFuZ2xlOwogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkociwgJnJlY3RhbmdsZSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CkBAIC00OTQsOCArNTgzLDExIEBAIHZvaWQgUGF0aDo6
YWRkRWxsaXBzZShGbG9hdFBvaW50IHAsIGZsb2EKIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcikKIHsKKyAgICBpZiAoIW1fYWN0aXZlUGF0aCkKKyAgICAgICAgbW92
ZVRvKHIubG9jYXRpb24oKSk7CisKICAgICBDT01QdHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVs
bGlwc2U7Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6RWxsaXBzZShyLmNlbnRlcigpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCkpLCAmZWxsaXBzZSk7CisgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnkoRDJEMTo6RWxsaXBz
ZShyLmNlbnRlcigpLCAwLjUgKiByLndpZHRoKCksIDAuNSAqIHIuaGVpZ2h0KCkpLCAmZWxsaXBz
ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgYXBwZW5kR2VvbWV0
cnkoZWxsaXBzZS5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw4ICsy
MDcsNiBAQCBmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgKICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCiAgICAgICAgIHJldHVybiB3aWR0aEZvckdESUdseXBo
KGdseXBoKTsKIAotICAgIEFTU0VSVChnbHlwaCk7Ci0KICAgICBhdXRvIGZvbnQgPSBtX3BsYXRm
b3JtRGF0YS5kd0ZvbnQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcAkocmV2aXNpb24gMjM3OTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNyArMTQyLDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAK
IAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVy
IHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBt
YXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCisjaWYgVVNF
KERJUkVDVDJEKQorICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xv
clNwYWNlU1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworI2Vsc2UKICAgICAgICAgY2xp
cHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZVNSR0IsIFVuYWNjZWxlcmF0
ZWQpOworI2VuZGlmCiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDIzNzkyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHko
ZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCiAgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisjaWYgVVNFKERJUkVD
VDJEKQorICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CisjZWxzZQog
ICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29s
b3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSk7CisjZW5kaWYKICAgICBpZiAoIXNvdXJj
ZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250
YWlucygmcmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29u
dGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNyArNzEsMTEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
YXBwbHlSZXNvdQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHls
ZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxl
LmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
Q29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VTUkdCOwogICAgICAgICAvLyBGSVhNRSAo
MTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBt
YXNraW5nLCB0aG91Z2guCisjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICBtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRl
eHQpOworI2Vsc2UKICAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkKTsKKyNlbmRpZgogICAgICAgICBpZiAoIW1hc2tl
ckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAyMzc5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDExIEBA
IEFmZmluZVRyYW5zZm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWwKICAgICByZXR1cm4gYWJz
b2x1dGVUcmFuc2Zvcm07CiB9CiAKKyNpZiBVU0UoRElSRUNUMkQpCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyNlbHNlCiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCisjZW5kaWYKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUltYWdl
QnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9uJ3Qg
Y3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KQEAgLTI0NSw3ICsyNDksMTEgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbgogICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAg
ICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRS
ZWN0LnNpemUoKSwgc2NhbGUpOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBj
b250ZXh0LCAxLCBjb2xvclNwYWNlKTsKKyNlbHNlCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3Bh
Y2UpOworI2VuZGlmCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTI1OCw3ICsyNjYsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBT
VkdSZW5kZXJpbgogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAorI2lmIFVTRShESVJFQ1Qy
RCkKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGNsYW1wZWRSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UKIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1w
ZWRSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSkKKyNlbmRpZgogewogICAgIEludFNpemUgY2xhbXBlZFNpemUgPSByb3VuZGVkSW50U2l6ZShj
bGFtcGVkUmVjdC5zaXplKCkpOwogICAgIEZsb2F0U2l6ZSB1bmNsYW1wZWRTaXplID0gcm91bmRl
ZEludFNpemUodGFyZ2V0UmVjdC5zaXplKCkpOwpAQCAtMjY3LDcgKzI3OSwxMSBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluCiAgICAgaWYgKGNsYW1wZWRTaXplLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyNpZiBVU0UoRElSRUNUMkQpCisg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJl
bmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3BhY2UpOworI2Vsc2UKICAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgMSwgY29sb3JTcGFjZSk7CisjZW5kaWYKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw4ICs2MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQYWludEluZm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4
dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAgYm9vbCBpc1JlbmRlcmluZ1By
ZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdGbGFncyAmIFJlbmRlcmluZ1ByZXBh
cmVkOyB9CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7
CisjZWxzZQogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgcmVu
ZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJFbGVtZW50JiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgc3RhdGljIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+JiwgYm9vbCBzYWZlVG9DbGVhcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354187</attachid>
            <date>2018-11-07 17:22:59 -0800</date>
            <delta_ts>2018-11-07 17:32:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191337-20181107172257.patch</filename>
            <type>text/plain</type>
            <size>37235</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNzkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDE4LTExLTA3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXVtEaXJlY3RY
XSBVcGRhdGUgY2FudmFzIGNvZGUgdG8gcGFzcyBtb3JlIHRlc3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzMzcKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzQ1ODc4ODAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKwor
ICAgICAgICBVcGRhdGUgdGhlIERpcmVjdDJEIGNvZGUgcGF0aHMgdG8gY29tcGx5IHdpdGggb3Vy
IGNhbnZhcyB0ZXN0cywgaW1wcm92aW5nIHRoZQorICAgICAgICB0aGUgdGVzdCByZXN1bHRzIHNj
b3JlcyB0byA1NzkvNzcwLgorCisgICAgICAgIFBhdGhEaXJlY3QyRCB3YXMgdXBkYXRlZCB3aXRo
IGFuIGltcGxlbWVudGF0aW9uIG9mICdhZGRBcmNUbycgYmFzZWQgb24gd29yayBieQorICAgICAg
ICBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5kZT4gKHNlZSBodHRwczovL2hnLm1vemlsbGEub3Jn
L21vemlsbGEtY2VudHJhbC9yZXYvYjExNmI0OTQ1OWY4KS4KKworICAgICAgICBUZXN0czogY2Fu
dmFzL3BoaWxpcC90ZXN0cworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIpOiBEaXJlY3QyRCBuZWVkcyBhY2Nlc3MgdG8gdGhlIGdyYXBoaWNzCisgICAgICAgIGNv
bnRleHQgdG8gY3JlYXRlIHRoZSBidWZmZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOiBGbHVzaCBu
ZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNl
dE1pdGVyTGltaXQpOiBDb3JyZWN0IGZvciBEaXJlY3QyRCBkZWZpbml0aW9uIG9mIG1pdGVyIGxp
bWl0LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
dHJva2VTdHlsZVByb3BlcnRpZXMgY29uc3QpOiBBZGRlZCBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlY29tcHV0ZVN0
cm9rZVN0eWxlKTogVXBkYXRlIGZvciBuZXcgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1dp
dGhTaGFkb3dIZWxwZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QpOiBBZGQgZmx1c2guCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KTogVXBkYXRlIGZvciBoZWxwZXIuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKTogQWRkIGZsdXNoLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6IFVwZGF0ZSBmb3Ig
dXBzdHJlYW0gY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KTogQWRkIG1pc3NpbmcgaW1wbGVtZW50
YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRv
SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmYXN0Q29weUlt
YWdlTW9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRv
TmF0aXZlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0aERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpkcmF3RGlkQ29tcGxldGUpOiBUaGlzIHNob3VsZCBu
ZXZlciBoYXZlIGJlZW4gY29uc3QuCisgICAgICAgIEl0IG1hbmlwdWxhdGVzIHRoZSBwYXRoIQor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKTogUHJvcGVybHkgdHJhbnNmb3JtIGV4
aXN0aW5nIGdlb21ldHJpZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpvcGVuRmlndXJlQXRD
dXJyZW50UG9pbnRJZk5lY2Vzc2FyeSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6IE1ha2Ugc3VyZSBm
aWd1cmUgc3RhcnRzIGF0IGEgdmFsaWQgcG9pbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRRdWFkQ3VydmVUbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjVG8pOiBBZGQg
aW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd0FyY1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6YWRkQXJjKTogVXBkYXRlIHRvIGJ1aWxkIGxhcmdlIGFyY3Mgb3V0IG9mIHNtYWxsIGFyYyBz
ZWdtZW50cy4gSWYgdGhlCisgICAgICAgIGFyYyBpcyBlZmZlY3RpdmVseSBhIGNvbXBsZXRlIGNp
cmNsZSwgdXNlIHRoZSBlbGxpcHNlIGRyYXdpbmcgcm91dGluZXMuCisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjphZGRSZWN0KTogTWFrZSBzdXJlIHdlIHN0YXJ0IGF0IGEgdmFsaWQgc3RhcnRpbmcg
cG9pbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRFbGxpcHNlKTogQ29ycmVjdCBmb3Ig
ZGVmaW5pdGlvbiBvZiBEMkQgZWxsaXBzZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRyYXdE
aWRDb21wbGV0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
cGxhdGZvcm1XaWR0aEZvckdseXBoIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0Lmg6CisKIDIwMTgtMTEtMDcgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGlsZUNvbnRyb2xsZXI6OnRpbGVT
aXplKCkgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjM3OTI1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXIKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCiB7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UpOworI2Vsc2UKICAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOworI2VuZGlmCiB9CiAK
IEludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyMzc5
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPik7CiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKICNlbGlmIFVTRShE
SVJFQ1QyRCkKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7CisgICAgc3RhdGljIENPTVB0cjxJ
RDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyMzc5MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw5ICsxOTcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJRDJE
MUdlb21ldHJ5U2luayogYWN0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5n
ZXQoKTsgfQogICAgICAgICB2b2lkIGFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAg
ICAgICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElE
MkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsKLSAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUo
KSBjb25zdDsKKyAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKTsKIAogICAgICAgICBIUkVT
VUxUIGluaXRpYWxpemVQYXRoU3RhdGUoKTsKKyAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJy
ZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTEs
NiArMjEyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDT01QdHI8SUQyRDFHZW9t
ZXRyeUdyb3VwPiBtX3BhdGg7CiAgICAgICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gbV9h
Y3RpdmVQYXRoR2VvbWV0cnk7CiAgICAgICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9h
Y3RpdmVQYXRoOworICAgICAgICBib29sIG1fZG9lc0hhdmVPcGVuRmlndXJlIHsgZmFsc2UgfTsK
ICNlbHNlCiAgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjM3OTI1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk2LDYgKzU5Niw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYKIAogICAgIENPTVB0cjxJRDJEMUJpdG1h
cEJydXNoPiBwYXR0ZXJuQnJ1c2g7CiAgICAgSFJFU1VMVCBociA9IGNvbnRleHQtPkNyZWF0ZUJp
dG1hcEJydXNoKHRpbGVJbWFnZS5nZXQoKSwgJmJpdG1hcEJydXNoUHJvcGVydGllcywgJmJydXNo
UHJvcGVydGllcywgJnBhdHRlcm5CcnVzaCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgZHJhd1dpdGhv
dXRTaGFkb3coZGVzdFJlY3QsIFt0aGlzLCBkZXN0UmVjdCwgcGF0dGVybkJydXNoXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSBkZXN0UmVjdDsKQEAgLTY5Miw4ICs2OTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldAogICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBtaXRlckxpbWl0KQordm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNl
dE1pdGVyTGltaXQoZmxvYXQgY2FudmFzTWl0ZXJMaW1pdCkKIHsKKyAgICAvLyBEaXJlY3QyRCBt
aXRlciBsaW1pdCBpcyBpbiB0ZXJtcyBvZiBIQUxGIHRoZSBsaW5lIHRoaWNrbmVzcy4KKyAgICBm
bG9hdCBtaXRlckxpbWl0ID0gMC41ZiAqIGNhbnZhc01pdGVyTGltaXQ7CiAgICAgaWYgKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChtaXRlckxpbWl0LCBtX21pdGVyTGltaXQpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTc0Niw2ICs3NTEsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OnNldAogICAgIG1fc3Ryb2tlU3lsZUlzRGlydHkgPSB0cnVlOwogfQogCitEMkQx
X1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
c3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDJEMTo6U3Ryb2tl
U3R5bGVQcm9wZXJ0aWVzKG1fbGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpv
aW4sIG1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAwLjBmKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlY29tcHV0ZVN0cm9rZVN0eWxlKCkK
IHsKICAgICBpZiAoIW1fc3Ryb2tlU3lsZUlzRGlydHkpCkBAIC03NTMsMTkgKzc2MywyMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVjCiAKICAgICBtX2QyZFN0cm9r
ZVN0eWxlID0gbnVsbHB0cjsKIAotICAgIGlmICgobV9zdHJva2VTdHlsZSAhPSBTb2xpZFN0cm9r
ZSkgJiYgKG1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpKSB7Ci0gICAgICAgIGZsb2F0IHBhdHRl
cm5PZmZzZXQgPSBtX3BhdHRlcm5PZmZzZXQgLyBtX3N0cm9rZVRoaWNrbmVzczsKKyAgICBEYXNo
QXJyYXkgZGFzaGVzOworICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAwOworICAgIGF1dG8gZGFz
aFN0eWxlID0gRDJEMV9EQVNIX1NUWUxFX1NPTElEOwogCi0gICAgICAgIERhc2hBcnJheSBkYXNo
ZXMgPSBtX2Rhc2hlczsKKyAgICBpZiAoKG1fc3Ryb2tlU3R5bGUgIT0gU29saWRTdHJva2UpICYm
IChtX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSkgeworICAgICAgICBkYXNoU3R5bGUgPSBEMkQx
X0RBU0hfU1RZTEVfQ1VTVE9NOworICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gbV9wYXR0ZXJuT2Zm
c2V0IC8gbV9zdHJva2VUaGlja25lc3M7CisgICAgICAgIGRhc2hlcyA9IG1fZGFzaGVzOwogCiAg
ICAgICAgIC8vIEluIERpcmVjdDJELCBkYXNoZXMgYW5kIGRvdHMgYXJlIGRlZmluZWQgaW4gdGVy
bXMgb2YgdGhlIHJhdGlvIG9mIHRoZSBkYXNoIGxlbmd0aCB0byB0aGUgbGluZSB0aGlja25lc3Mu
CiAgICAgICAgIGZvciAoYXV0byYgZGFzaCA6IGRhc2hlcykKICAgICAgICAgICAgIGRhc2ggLz0g
bV9zdHJva2VUaGlja25lc3M7Ci0KLSAgICAgICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMg
PSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGlu
ZUNhcCwgbV9saW5lSm9pbiwgbV9zdHJva2VUaGlja25lc3MsIEQyRDFfREFTSF9TVFlMRV9DVVNU
T00sIHBhdHRlcm5PZmZzZXQpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywgZGFzaGVzLmRh
dGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOwogICAgIH0KIAorICAgIGF1
dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1f
bGluZUNhcCwgbV9saW5lQ2FwLCBtX2xpbmVDYXAsIG1fbGluZUpvaW4sIG1fbWl0ZXJMaW1pdCwg
ZGFzaFN0eWxlLCBwYXR0ZXJuT2Zmc2V0KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZh
Y3RvcnkoKS0+Q3JlYXRlU3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywgZGFzaGVz
LmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgJm1fZDJkU3Ryb2tlU3R5bGUpOworCiAgICAgbV9zdHJv
a2VTeWxlSXNEaXJ0eSA9IGZhbHNlOwogfQogCkBAIC04MTksNyArODMzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwogCiAgICAgICAgIGZsb2F0IHBhdHRlcm5P
ZmZzZXQgPSBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChw
YXR0ZXJuV2lkdGgsIHN0cm9rZVdpZHRoKTsKICAgICAgICAgY29uc3QgZmxvYXQgZGFzaGVzWzJd
ID0geyBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5XaWR0aCB9OwotICAgICAgICBhdXRvIHN0cm9rZVN0
eWxlUHJvcGVydGllcyA9IEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcygpOworICAgICAgICBh
dXRvIHN0cm9rZVN0eWxlUHJvcGVydGllcyA9IG1fZGF0YS0+c3Ryb2tlU3R5bGVQcm9wZXJ0aWVz
KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVTdHJv
a2VTdHlsZSgmc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzLCBkYXNoZXMsIEFSUkFZU0laRShkYXNoZXMp
LCAmZDJkU3Ryb2tlU3R5bGUpOwogCiAgICAgICAgIG1fZGF0YS0+c2V0UGF0dGVybldpZHRoKHBh
dHRlcm5XaWR0aCk7CkBAIC05MjYsOCArOTQwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKGNvbnN0IFBhdAogICAgICAgICBhdXRvIGJydXNoID0gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuID8gcGF0dGVyblN0cm9rZUJydXNoKCkgOiBzb2xpZFN0cm9rZUJydXNoKCk7CiAgICAgICAg
IHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIGJydXNoLCBz
dHJva2VUaGlja25lc3MoKSwgbV9kYXRhLT5zdHJva2VTdHlsZSgpKTsKICAgICB9KTsKLQotICAg
IGZsdXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2l0aG91dFNoYWRvdyhj
b25zdCBGbG9hdFJlY3QmIC8qYm91bmRpbmdSZWN0Ki8sIGNvbnN0IFdURjo6RnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQpAQCAtMTA0Nyw4ICsxMDU5LDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgICAgICBhdXRv
IGJydXNoID0gbV9zdGF0ZS5maWxsUGF0dGVybiA/IHBhdHRlcm5GaWxsQnJ1c2goKSA6IHNvbGlk
RmlsbEJydXNoKCk7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEdlb21ldHJ5KHBhdGhUb0Zp
bGwuZ2V0KCksIGJydXNoKTsKICAgICB9KTsKLQotICAgIGZsdXNoKCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0xMDkyLDggKzEx
MDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAg
IGF1dG8gYnJ1c2ggPSBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPyBwYXR0ZXJuU3Ryb2tlQnJ1c2go
KSA6IHNvbGlkU3Ryb2tlQnJ1c2goKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3R2VvbWV0
cnkocGF0aC5wbGF0Zm9ybVBhdGgoKSwgYnJ1c2gsIHN0cm9rZVRoaWNrbmVzcygpLCBtX2RhdGEt
PnN0cm9rZVN0eWxlKCkpOwogICAgIH0pOwotCi0gICAgZmx1c2goKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTEzMjksNiAr
MTMzNyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXQKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIEFTU0VSVCghcGF0aC5hY3RpdmVQYXRoKCkpOworCiAg
ICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcGF0aFRvQ2xpcDsKICAgICBwYXRoLmNyZWF0
ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKGNsaXBSdWxlLCBwYXRoVG9DbGlwKTsKIApAQCAtMTY4Nywy
NCArMTY5NywyMyBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlCiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBE
YXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQod2lkdGgpOworICAgIHdpZHRocy5h
cHBlbmQocmVjdC53aWR0aCgpKTsKICAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIGRyYXdMaW5l
c0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHls
ZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCks
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsK
KyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRo
cywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJE
LmgJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Miw2ICs5Miw4IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IGN1cnJlbnRHbG9iYWxB
bHBoYSgpIGNvbnN0OwogCisgICAgRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBzdHJva2VT
dHlsZVByb3BlcnRpZXMoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2b2lkIHJlY29tcHV0ZVN0
cm9rZVN0eWxlKCk7CiAKQEAgLTEyNCw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAgIFN0cm9rZVN0
eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwogICAgIERhc2hBcnJheSBtX2Rhc2hl
czsKIAotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDEuMGYgfTsKKyAgICBmbG9hdCBtX21pdGVy
TGltaXQgeyAxMC4wZiB9OwogICAgIGZsb2F0IG1fZGFzaE9mZnNldCB7IDAgfTsKICAgICBmbG9h
dCBtX3BhdHRlcm5XaWR0aCB7IDEuMGYgfTsKICAgICBmbG9hdCBtX3BhdHRlcm5PZmZzZXQgeyAw
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMzc5MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywyMSArMTM3LDU2IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OmZsdXNoQ29udGV4dCgpIGNvbnN0CiAgICAgY29udGV4dCgpLmZsdXNoKCk7CiB9CiAKLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorc3RhdGljIENPTVB0cjxJRDJEMUJpdG1h
cD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXAqIGltYWdlLCBjb25z
dCBJbnRTaXplJiBib3VuZHMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBpbWFnZS0+R2V0U2l6
ZSgpIDogRmxvYXRTaXplKCk7CisKKyAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVf
dD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRo
KCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7CisgICAgICAgIEQyRF9QT0lOVF8yVSBv
cmlnaW4gPSB7IH07CisgICAgICAgIEQyRDFfUkVDVF9VIGNyb3BwZWREaW1lbnN0aW9ucyA9IElu
dFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKTsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
cm9wcGVkSW1hZ2U7CisgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkSW1hZ2UtPkNvcHlGcm9t
Qml0bWFwKCZvcmlnaW4sIGltYWdlLCAmY3JvcHBlZERpbWVuc3Rpb25zKTsKKyAgICAgICAgaWYg
KFNVQ0NFRURFRChocikpCisgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEltYWdlOworICAgIH0K
KworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2Us
IEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tp
bmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNp
emUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2Nh
bGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNv
bHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworCisgICAgcmV0dXJuIGNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6
ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgUHJlc2VydmVSZXNvbHV0aW9uKQorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewogICAgIEludFNpemUgaW50ZXJuYWxT
aXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwogICAgIEludFNpemUgbG9naWNhbFNp
emUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKICAgICBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7CiAgICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwogCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1v
dmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3Jl
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCiBCYWNraW5n
U3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCkBAIC0xNTksNiArMTk0
LDQxIEBAIEJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW0KICAgICByZXR1
cm4gRG9udENvcHlCYWNraW5nU3RvcmU7CiB9CiAKK0NPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VC
dWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlcikKK3sKKyAgICAvLyBGSVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgb24t
aGFyZHdhcmUgaW1hZ2UuCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVm
ZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKworICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0
Qml0bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgaWYgKCFj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgeworICAgICAgICBzd2l0Y2ggKGNvcHlC
ZWhhdmlvcikgeworICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgICAgIEQy
RDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1v
cnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YSwgMzIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IG1f
ZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gaW1hZ2U7
Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiAr
MTcxLDggQEAgUGF0aDo6UGF0aChQYXRoJiYgb3RoZXIpCiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9y
PShjb25zdCBQYXRoJiBvdGhlcikKIHsKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAg
IHJldHVybiAqdGhpczsKICAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7CiAgICAgbV9hY3RpdmVQ
YXRoID0gb3RoZXIubV9hY3RpdmVQYXRoOwogICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gb3Ro
ZXIubV9hY3RpdmVQYXRoR2VvbWV0cnk7CkBAIC0yMDgsNyArMjEwLDcgQEAgSFJFU1VMVCBQYXRo
Ojppbml0aWFsaXplUGF0aFN0YXRlKCkKICAgICByZXR1cm4gbV9hY3RpdmVQYXRoR2VvbWV0cnkt
Pk9wZW4oJm1fYWN0aXZlUGF0aCk7CiB9CiAKLXZvaWQgUGF0aDo6ZHJhd0RpZENvbXBsZXRlKCkg
Y29uc3QKK3ZvaWQgUGF0aDo6ZHJhd0RpZENvbXBsZXRlKCkKIHsKICAgICBGbG9hdFBvaW50IGN1
cnJlbnRQb2ludCA9IHRoaXMtPmN1cnJlbnRQb2ludCgpOwogCkBAIC0yMjIsNiArMjI0LDcgQEAg
dm9pZCBQYXRoOjpkcmF3RGlkQ29tcGxldGUoKSBjb25zdAogICAgIG1fYWN0aXZlUGF0aC0+U2V0
RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAKICAgICBtX2FjdGl2ZVBhdGgtPkJl
Z2luRmlndXJlKGN1cnJlbnRQb2ludCwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKKyAgICBt
X2RvZXNIYXZlT3BlbkZpZ3VyZSA9IHRydWU7CiB9CiAKIGJvb2wgUGF0aDo6Y29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CkBAIC0yNjcsMTcgKzI3
MCwyMiBAQCB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAgICAgaWYg
KHRyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IGN1cnJlbnRQb2ludDsKKyAgICBpZiAoaGFz
Q3VycmVudFBvaW50KCkpCisgICAgICAgIGN1cnJlbnRQb2ludCA9IHRoaXMtPmN1cnJlbnRQb2lu
dCgpOworCiAgICAgYm9vbCBwYXRoSXNBY3RpdmUgPSBmYWxzZTsKICAgICBpZiAobV9hY3RpdmVQ
YXRoKSB7CisgICAgICAgIG1fYWN0aXZlUGF0aC0+RW5kRmlndXJlKEQyRDFfRklHVVJFX0VORF9P
UEVOKTsKKyAgICAgICAgbV9kb2VzSGF2ZU9wZW5GaWd1cmUgPSBmYWxzZTsKICAgICAgICAgbV9h
Y3RpdmVQYXRoLT5DbG9zZSgpOwogICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwogICAg
ICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CiAgICAgICAgIHBhdGhJc0FjdGl2
ZSA9IHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgRDJEMV9NQVRSSVhfM1gyX0YmIGQyZFRyYW5z
Zm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IEQyRDFfTUFUUklYXzNYMl9GPih0cmFuc2Zvcm0pOwog
ICAgIENPTVB0cjxJRDJEMVRyYW5zZm9ybWVkR2VvbWV0cnk+IHRyYW5zZm9ybWVkUGF0aDsKLSAg
ICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRl
VHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIGQyZFRyYW5zZm9ybSwgJnRyYW5zZm9y
bWVkUGF0aCkpKQorICAgIGlmICghU1VDQ0VFREVEKEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFj
dG9yeSgpLT5DcmVhdGVUcmFuc2Zvcm1lZEdlb21ldHJ5KG1fcGF0aC5nZXQoKSwgdHJhbnNmb3Jt
LCAmdHJhbnNmb3JtZWRQYXRoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxJRDJE
MUdlb21ldHJ5Kj4gZ2VvbWV0cmllczsKQEAgLTI5NSw2ICszMDMsMTUgQEAgdm9pZCBQYXRoOjp0
cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogCiAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBn
ZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwogICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgaWYgKCFjdXJyZW50UG9pbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoZmlsbE1vZGUpOwor
CisgICAgYXV0byB0cmFuc2Zvcm1lZFBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KGN1cnJlbnRQ
b2ludC52YWx1ZSgpKTsKKyAgICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKHRyYW5zZm9ybWVk
UG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7CisgICAgbV9kb2VzSGF2ZU9wZW5GaWd1
cmUgPSB0cnVlOwogfQogCiBGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKQEAg
LTMzNiwyNiArMzUzLDQyIEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ry
b2sKICAgICByZXR1cm4gYm91bmRpbmdSZWN0KCk7CiB9CiAKK3ZvaWQgUGF0aDo6b3BlbkZpZ3Vy
ZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX2RvZXNIYXZlT3BlbkZp
Z3VyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVQYXRoLT5TZXRGaWxsTW9kZShE
MkQxX0ZJTExfTU9ERV9XSU5ESU5HKTsKKyAgICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJlKGN1
cnJlbnRQb2ludCgpLCBEMkQxX0ZJR1VSRV9CRUdJTl9GSUxMRUQpOworICAgIG1fZG9lc0hhdmVP
cGVuRmlndXJlID0gdHJ1ZTsKK30KKwogdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFtX2FjdGl2ZVBhdGgpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQYXRo
R2VvbWV0cnkpOworICAgIGlmIChtX2FjdGl2ZVBhdGgpIHsKKyAgICAgICAgbV9hY3RpdmVQYXRo
LT5DbG9zZSgpOworICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOworICAgICAgICBtX2Fj
dGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CisgICAgICAgIG1fZG9lc0hhdmVPcGVuRmlndXJl
ID0gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0aXZlUGF0aEdl
b21ldHJ5LmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlUGF0aEdlb21ldHJ5KCZtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7CiAKLSAgICAgICAgaWYgKCFT
VUNDRUVERUQobV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0aXZlUGF0aEdlb21ldHJ5
LmdldCgpKTsKIAotICAgICAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9N
T0RFX1dJTkRJTkcpOwotICAgIH0KKyAgICBpZiAoIVNVQ0NFRURFRChtX2FjdGl2ZVBhdGhHZW9t
ZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKSkpCisgICAgICAgIHJldHVybjsKIAorICAgIG1fYWN0
aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAgICAgbV9hY3Rp
dmVQYXRoLT5CZWdpbkZpZ3VyZShwb2ludCwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKKyAg
ICBtX2RvZXNIYXZlT3BlbkZpZ3VyZSA9IHRydWU7CiB9CiAKIHZvaWQgUGF0aDo6YWRkTGluZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0
KCkpOwogCisgICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKICAgICBt
X2FjdGl2ZVBhdGgtPkFkZExpbmUocG9pbnQpOwogfQogCkBAIC0zNjMsNiArMzk2LDcgQEAgdm9p
ZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaQogewogICAgIEFTU0VSVChtX2Fj
dGl2ZVBhdGguZ2V0KCkpOwogCisgICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3Nh
cnkoKTsKICAgICBtX2FjdGl2ZVBhdGgtPkFkZFF1YWRyYXRpY0JlemllcihEMkQxOjpRdWFkcmF0
aWNCZXppZXJTZWdtZW50KGNwLCBwKSk7CiB9CiAKQEAgLTM3MCwxNyArNDA0LDQ4IEBAIHZvaWQg
UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFAKIHsKICAgICBBU1NFUlQobV9hY3Rp
dmVQYXRoLmdldCgpKTsKIAotICAgIEZsb2F0UG9pbnQgYmVmb3JlUG9pbnQgPSBjdXJyZW50UG9p
bnQoKTsKLQorICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAg
bV9hY3RpdmVQYXRoLT5BZGRCZXppZXIoRDJEMTo6QmV6aWVyU2VnbWVudChjcDEsIGNwMiwgcCkp
OwogfQogCiB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewotICAgIFVOVVNFRF9QQVJBTShwMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHAyKTsKLSAgICBVTlVTRURfUEFSQU0ocmFkaXVzKTsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0KCkpOworCisgICAgRmxv
YXRQb2ludCBwMCA9IGN1cnJlbnRQb2ludCgpOworCisgICAgaWYgKHAxID09IHAwIHx8IHAxID09
IHAyIHx8IFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChyYWRpdXMsIDAuMGYpKQorICAgICAgICBy
ZXR1cm4gYWRkTGluZVRvKHAxKTsKKworICAgIGZsb2F0IGRpcmVjdGlvbiA9IChwMi54KCkgLSBw
MS54KCkpICogKHAwLnkoKSAtIHAxLnkoKSkgKyAocDIueSgpIC0gcDEueSgpKSAqIChwMS54KCkg
LSBwMC54KCkpOworICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoZGlyZWN0aW9uLCAw
LjBmKSkKKyAgICAgICAgcmV0dXJuIGFkZExpbmVUbyhwMSk7CisKKyAgICBhdXRvIGEyID0gdG9G
bG9hdFBvaW50KHAwIC0gcDEpLmxlbmd0aFNxdWFyZWQoKTsKKyAgICBhdXRvIGIyID0gdG9GbG9h
dFBvaW50KHAxIC0gcDIpLmxlbmd0aFNxdWFyZWQoKTsKKyAgICBhdXRvIGMyID0gdG9GbG9hdFBv
aW50KHAwIC0gcDIpLmxlbmd0aFNxdWFyZWQoKTsKKworICAgIGRvdWJsZSBjb3N4ID0gKGEyICsg
YjIgLSBjMikgLyAoMi4wICogc3RkOjpzcXJ0KGEyICogYjIpKTsKKyAgICBkb3VibGUgc2lueCA9
IHN0ZDo6c3FydCgxLjAgLSBjb3N4ICogY29zeCk7CisgICAgZG91YmxlIGQgPSByYWRpdXMgLyAo
KDEgLSBjb3N4KSAvIHNpbngpOworCisgICAgYXV0byBhbiA9IHRvRmxvYXRQb2ludChwMSAtIHAw
KS5zY2FsZWQoMS4wIC8gc3RkOjpzcXJ0KGEyKSk7CisgICAgYXV0byBibiA9IHRvRmxvYXRQb2lu
dChwMSAtIHAyKS5zY2FsZWQoMS4wIC8gc3RkOjpzcXJ0KGIyKSk7CisKKyAgICBhdXRvIHN0YXJ0
UG9pbnQgPSB0b0Zsb2F0UG9pbnQocDEgLSBhbi5zY2FsZWQoZCkpOworICAgIGF1dG8gcDQgPSB0
b0Zsb2F0UG9pbnQocDEgLSBibi5zY2FsZWQoZCkpOworCisgICAgYm9vbCBhbnRpY2xvY2t3aXNl
ID0gKGRpcmVjdGlvbiA8IDApOworICAgIGFuLnNjYWxlKHJhZGl1cyAqIChhbnRpY2xvY2t3aXNl
ID8gMSA6IC0xKSk7CisKKyAgICBGbG9hdFBvaW50IGNlbnRlcihzdGFydFBvaW50LngoKSArIGFu
LnkoKSwgc3RhcnRQb2ludC55KCkgLSBhbi54KCkpOworCisgICAgZG91YmxlIGFuZ2xlMCA9IGF0
YW4yKHN0YXJ0UG9pbnQueSgpIC0gY2VudGVyLnkoKSwgc3RhcnRQb2ludC54KCkgLSBjZW50ZXIu
eCgpKTsKKyAgICBkb3VibGUgYW5nbGUxID0gYXRhbjIocDQueSgpIC0gY2VudGVyLnkoKSwgcDQu
eCgpIC0gY2VudGVyLngoKSk7CisKKyAgICBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lY2Vz
c2FyeSgpOworICAgIGFkZExpbmVUbyhzdGFydFBvaW50KTsKKyAgICBhZGRBcmMoY2VudGVyLCBy
YWRpdXMsIGFuZ2xlMCwgYW5nbGUxLCBhbnRpY2xvY2t3aXNlKTsKIH0KIAogc3RhdGljIGJvb2wg
ZXF1YWxSYWRpdXNXaWR0aHMoY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCkBAIC00MjMsOCArNDg4LDE0
IEBAIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0KCkpOwotICAgIG1fYWN0aXZl
UGF0aC0+RW5kRmlndXJlKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKKyAgICBpZiAobV9hY3RpdmVQ
YXRoKSB7CisgICAgICAgIG1fYWN0aXZlUGF0aC0+RW5kRmlndXJlKEQyRDFfRklHVVJFX0VORF9D
TE9TRUQpOworICAgICAgICBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7CisgICAgICAgIG1fYWN0aXZl
UGF0aCA9IG51bGxwdHI7CisgICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBtX2RvZXNIYXZlT3BlbkZpZ3VyZSA9IGZhbHNlOwogfQogCiBzdGF0aWMg
RmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1
cywgZmxvYXQgc3RhcnRBbmdsZSkKQEAgLTQzNiwyMSArNTA3LDIyIEBAIHN0YXRpYyBGbG9hdFBv
aW50IGFyY1N0YXJ0KGNvbnN0IEZsb2F0UG8KICAgICByZXR1cm4gc3RhcnRpbmdQb2ludDsKIH0K
IAotc3RhdGljIHZvaWQgZHJhd0FyY1NlY3Rpb24oSUQyRDFHZW9tZXRyeVNpbmsqIHNpbmssIGNv
bnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBm
bG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpCitjb25zdCBmbG9hdCB0d29QaSA9IDIuMGYg
KiBwaUZsb2F0OworCitzdGF0aWMgdm9pZCBkcmF3QXJjU2VjdGlvbihJRDJEMUdlb21ldHJ5U2lu
ayogc2luaywgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0
YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCiB7CiAgICAgLy8g
RGlyZWN0MkQgd2FudHMgdXMgdG8gc3BlY2lmeSB0aGUgZW5kIHBvaW50IG9mIHRoZSBhcmMsIG5v
dCB0aGUgY2VudGVyLiBJdCB3aWxsIGJlIGRyYXduIGZyb20KICAgICAvLyB3aGF0ZXZlciB0aGUg
Y3VycmVudCBwb2ludCBpbiB0aGUgJ21fYWN0aXZlUGF0aCcgaXMuCi0gICAgRmxvYXRQb2ludCBw
ID0gY2VudGVyOworICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBjZW50ZXI7CiAgICAgZmxvYXQg
ZW5kWCA9IHJhZGl1cyAqIHN0ZDo6Y29zKGVuZEFuZ2xlKTsKICAgICBmbG9hdCBlbmRZID0gcmFk
aXVzICogc3RkOjpzaW4oZW5kQW5nbGUpOwotICAgIHAubW92ZShlbmRYLCBlbmRZKTsKKyAgICBl
bmRQb2ludC5tb3ZlKGVuZFgsIGVuZFkpOwogCi0gICAgZmxvYXQgYXJjRGVnID0gcmFkMmRlZyhl
bmRBbmdsZSAtIHN0YXJ0QW5nbGUpOwotICAgIEQyRDFfU1dFRVBfRElSRUNUSU9OIGRpcmVjdGlv
biA9IGNsb2Nrd2lzZSA/IEQyRDFfU1dFRVBfRElSRUNUSU9OX0NMT0NLV0lTRSA6IEQyRDFfU1dF
RVBfRElSRUNUSU9OX0NPVU5URVJfQ0xPQ0tXSVNFOwotICAgIHNpbmstPkFkZEFyYyhEMkQxOjpB
cmNTZWdtZW50KHAsIEQyRDE6OlNpemVGKHJhZGl1cywgcmFkaXVzKSwgYXJjRGVnLCBkaXJlY3Rp
b24sIEQyRDFfQVJDX1NJWkVfU01BTEwpKTsKKyAgICBEMkQxX1NXRUVQX0RJUkVDVElPTiBkaXJl
Y3Rpb24gPSBhbnRpY2xvY2t3aXNlID8gRDJEMV9TV0VFUF9ESVJFQ1RJT05fQ09VTlRFUl9DTE9D
S1dJU0UgOiBEMkQxX1NXRUVQX0RJUkVDVElPTl9DTE9DS1dJU0U7CisgICAgc2luay0+QWRkQXJj
KEQyRDE6OkFyY1NlZ21lbnQoZW5kUG9pbnQsIEQyRDE6OlNpemVGKHJhZGl1cywgcmFkaXVzKSwg
MCwgZGlyZWN0aW9uLCBEMkQxX0FSQ19TSVpFX1NNQUxMKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRk
QXJjKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFu
Z2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhj
b25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwg
ZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICBhdXRvIGFyY1N0YXJ0
UG9pbnQgPSBhcmNTdGFydChjZW50ZXIsIHJhZGl1cywgc3RhcnRBbmdsZSk7CiAgICAgaWYgKCFt
X2FjdGl2ZVBhdGgpCkBAIC00NjEsMjMgKzUzMyw0MSBAQCB2b2lkIFBhdGg6OmFkZEFyYyhjb25z
dCBGbG9hdFBvaW50JiBjZW50CiAgICAgICAgIGFkZExpbmVUbyhhcmNTdGFydFBvaW50KTsKICAg
ICB9CiAKLSAgICAvLyBEaXJlY3QyRCBoYXMgcHJvYmxlbXMgZHJhd2luZyBsYXJnZSBhcmNzLiBJ
dCBnZXRzIGNvbmZ1c2VkIGlmIGRyYXdpbmcgYSBjb21wbGV0ZSAob3IKLSAgICAvLyBuZWFybHkg
Y29tcGxldGUpIGNpcmNsZSBpbiB0aGUgY291bnRlci1jbG9ja3dpc2UgZGlyZWN0aW9uLiBTbywg
ZHJhdyBhbnkgYXJjcyBsYXJnZXIKLSAgICAvLyB0aGFuIDE4MCBkZWdyZWVzIGluIHR3byBwaWVj
ZXMuCi0gICAgZmxvYXQgZnVsbFN3ZWVwID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlOwotICAgIGZs
b2F0IG5lZ2F0ZSA9IGZ1bGxTd2VlcCA8IDAgPyAtMS4wZiA6IDEuMGY7Ci0gICAgZmxvYXQgbWF4
U3dlZXAgPSBuZWdhdGUgKiBzdGQ6Om1pbihzdGQ6OmFicyhmdWxsU3dlZXApLCBwaUZsb2F0KTsK
LSAgICBmbG9hdCBmaXJzdEFyY0VuZCA9IHN0YXJ0QW5nbGUgKyBtYXhTd2VlcDsKLSAgICBkcmF3
QXJjU2VjdGlvbihtX2FjdGl2ZVBhdGguZ2V0KCksIGNlbnRlciwgcmFkaXVzLCBzdGFydEFuZ2xl
LCBmaXJzdEFyY0VuZCwgY2xvY2t3aXNlKTsKKyAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKHN0ZDo6YWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSksIHR3b1BpKSkKKyAgICAgICAgcmV0
dXJuIGFkZEVsbGlwc2UoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkg
LSByYWRpdXMsIDIuMCAqIHJhZGl1cywgMi4wICogcmFkaXVzKSk7CiAKLSAgICBpZiAoV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKGZpcnN0QXJjRW5kLCBlbmRBbmdsZSkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoYW50aWNsb2Nrd2lzZSkgeworICAgICAgICBpZiAoZW5kQW5nbGUgPiBzdGFy
dEFuZ2xlKSB7CisgICAgICAgICAgICBlbmRBbmdsZSAtPSB0d29QaSAqIHN0ZDo6Y2VpbCgoZW5k
QW5nbGUgLSBzdGFydEFuZ2xlKSAvIHR3b1BpKTsKKyAgICAgICAgICAgIEFTU0VSVChlbmRBbmds
ZSA8PSBzdGFydEFuZ2xlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChz
dGFydEFuZ2xlID4gZW5kQW5nbGUpIHsKKyAgICAgICAgICAgIHN0YXJ0QW5nbGUgLT0gdHdvUGkg
KiBzdGQ6OmNlaWwoKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgLyB0d29QaSk7CisgICAgICAgICAg
ICBBU1NFUlQoc3RhcnRBbmdsZSA8PSBlbmRBbmdsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zdCBmbG9hdCBkZWx0YSA9IGFudGljbG9ja3dpc2UgPyAtcGlPdmVyVHdvRmxvYXQgOiBw
aU92ZXJUd29GbG9hdDsKKyAgICBmbG9hdCByZW1haW5pbmdBcmNBbmdsZSA9IGVuZEFuZ2xlIC0g
c3RhcnRBbmdsZTsKIAotICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0aXZlUGF0aC5nZXQoKSwgY2Vu
dGVyLCByYWRpdXMsIGZpcnN0QXJjRW5kLCBlbmRBbmdsZSwgY2xvY2t3aXNlKTsKKyAgICB3aGls
ZSAoKHJlbWFpbmluZ0FyY0FuZ2xlID4gMCAmJiByZW1haW5pbmdBcmNBbmdsZSA+IGRlbHRhKSB8
fCAocmVtYWluaW5nQXJjQW5nbGUgPCAwICYmIHJlbWFpbmluZ0FyY0FuZ2xlIDwgZGVsdGEpKSB7
CisgICAgICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RW5kQW5nbGUgPSBzdGFydEFuZ2xlICsgZGVs
dGE7CisgICAgICAgIGRyYXdBcmNTZWN0aW9uKG1fYWN0aXZlUGF0aC5nZXQoKSwgY2VudGVyLCBy
YWRpdXMsIHN0YXJ0QW5nbGUsIGN1cnJlbnRFbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSk7CisgICAg
ICAgIHN0YXJ0QW5nbGUgPSBjdXJyZW50RW5kQW5nbGU7CisgICAgICAgIHJlbWFpbmluZ0FyY0Fu
Z2xlIC09IGRlbHRhOworICAgIH0KKworICAgIC8vIEhhbmRsZSBhbnkgcmVtYWluaW5nIHBhcnQg
b2YgdGhlIGFyYzoKKyAgICBpZiAoc3RkOjphYnMocmVtYWluaW5nQXJjQW5nbGUpID4gMWUtNikK
KyAgICAgICAgZHJhd0FyY1NlY3Rpb24obV9hY3RpdmVQYXRoLmdldCgpLCBjZW50ZXIsIHJhZGl1
cywgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSArIHJlbWFpbmluZ0FyY0FuZ2xlLCBhbnRpY2xvY2t3
aXNlKTsKIH0KIAogdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKKyAg
ICBpZiAoIW1fYWN0aXZlUGF0aCkKKyAgICAgICAgbW92ZVRvKHIubG9jYXRpb24oKSk7CisKICAg
ICBDT01QdHI8SUQyRDFSZWN0YW5nbGVHZW9tZXRyeT4gcmVjdGFuZ2xlOwogICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2Vv
bWV0cnkociwgJnJlY3RhbmdsZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CkBAIC00OTQsOCArNTg0LDEyIEBAIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShGbG9hdFBvaW50IHAs
IGZsb2EKIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKKyAg
ICBpZiAoIW1fYWN0aXZlUGF0aCkKKyAgICAgICAgbW92ZVRvKHIubG9jYXRpb24oKSk7CisKICAg
ICBDT01QdHI8SUQyRDFFbGxpcHNlR2VvbWV0cnk+IGVsbGlwc2U7Ci0gICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVFbGxpcHNlR2VvbWV0cnko
RDJEMTo6RWxsaXBzZShyLmNlbnRlcigpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpLCAmZWxsaXBz
ZSk7CisgICAgLy8gTm90ZTogVGhlIHJhZGlpIG9mIHRoZSBlbGxpcHNlIGNvbnRhaW5lZCB3aXRo
aW4gYSByZWN0YW5nZSBhcmUgaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgcmVjdC4K
KyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0
ZUVsbGlwc2VHZW9tZXRyeShEMkQxOjpFbGxpcHNlKHIuY2VudGVyKCksIDAuNSAqIHIud2lkdGgo
KSwgMC41ICogci5oZWlnaHQoKSksICZlbGxpcHNlKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKICAgICBhcHBlbmRHZW9tZXRyeShlbGxpcHNlLmdldCgpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDggKzIwNyw2IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaAogICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKICAg
ICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwogCi0gICAgQVNTRVJUKGdseXBo
KTsKLQogICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGZvbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiAyMzc5
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBl
ck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
ICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxs
eSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3Rl
ZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNm
b3JtLCBDb2xvclNwYWNlU1JHQiwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGNsaXBwZXJNYXNr
SW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVj
dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2VTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29u
dGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDIzNzkyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6YXBwbHlSZXNvdQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJE
YXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJs
ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLSAgICBhdXRvIHNvdXJjZUdyYXBo
aWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5k
cmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VMaW5lYXJSR0IsIHJl
bmRlcmluZ01vZGUpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2
ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZUxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7
CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZp
bHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNh
dmVkQ29udGV4dCA9IGNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMjM3
OTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlv
bjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VTUkdCOwogICAg
ICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0
IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJ
bWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0
LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAg
IG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2Nl
bGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDIzNzky
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y2FsCiAgICAgcmV0dXJuIGFic29sdXRlVHJhbnNmb3JtOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0ZUlt
YWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8gRG9u
J3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KQEAgLTI0NSw3ICsyNDUsMTIgQEAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbgogICAgIEZsb2F0U2l6ZSBzY2FsZTsK
ICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFp
bnRSZWN0LnNpemUoKSwgc2NhbGUpOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2Rl
LCBjb250ZXh0LCAxLCBjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCByZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlKTsKKyNlbmRpZgogICAgIGlmICghaW1h
Z2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNTgsNyArMjYzLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbgogICAgIHJldHVybiBpbWFn
ZUJ1ZmZlcjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGNsYW1w
ZWRSZWN0LnNpemUoKSk7CiAgICAgRmxvYXRTaXplIHVuY2xhbXBlZFNpemUgPSByb3VuZGVkSW50
U2l6ZSh0YXJnZXRSZWN0LnNpemUoKSk7CkBAIC0yNjcsNyArMjcyLDEyIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW4KICAgICBpZiAoY2xhbXBlZFNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgY29udGV4dCwgMSwgY29sb3JTcGFjZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0KTsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7CisjZW5kaWYKICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHJl
dmlzaW9uIDIzNzkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYsIFBhaW50SW5m
byYsIE5lZWRzR3JhcGhpY3NDb250ZXh0U2F2ZSA9IERvbnRTYXZlR3JhcGhpY3NDb250ZXh0KTsK
ICAgICBib29sIGlzUmVuZGVyaW5nUHJlcGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmlu
Z0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFyZWQ7IH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgY2xhbXBlZFJlY3QsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCogPSBudWxscHRyKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYsIGJvb2wg
c2FmZVRvQ2xlYXIpOwo=
</data>
<flag name="commit-queue"
          id="371385"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>