<?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>222532</bug_id>
          
          <creation_ts>2021-02-28 16:27:36 -0800</creation_ts>
          <short_desc>Fix inspector viewing of canvas save/restore stack, and tighten and simplify CanvasRenderingContext2DBase</short_desc>
          <delta_ts>2021-03-30 20:25:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=223032</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=223981</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1734308</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-28 16:27:36 -0800</bug_when>
    <thetext>Fix inspector viewing of canvas save/restore stack, and tighten and simplify CanvasRenderingContext2DBase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734312</commentid>
    <comment_count>1</comment_count>
      <attachid>421782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-28 16:55:57 -0800</bug_when>
    <thetext>Created attachment 421782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734324</commentid>
    <comment_count>2</comment_count>
      <attachid>421782</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-28 18:30:46 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:278
&gt; +const AtomString&amp; CanvasRenderingContext2DBase::defaultFontFamily()
&gt; +{
&gt; +    static NeverDestroyed&lt;AtomString&gt; family = AtomString { DefaultFontFamily, AtomString::ConstructFromLiteral };
&gt; +    return family.get();
&gt; +}

I am not sure if this is safe to do since the OffscreenCanvasRenderingContext2D inherits from this class and is used on a non-main thread.

&gt; Source/WebCore/platform/graphics/cairo/PathCairo.cpp:417
&gt; +FloatRect Path::strokeBoundingRect(const Optional&lt;Function&lt;void(GraphicsContext&amp;)&gt;&gt;&amp; strokeStyleApplier) const

WTF::Function has null state (though it is debatable whether that is a good thing). Can that be used rather than the Optional?

&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:-54
&gt; -class BoundingRectStrokeStyleApplier final : public StrokeStyleApplier {

I wonder if we have other one off delegate patterns like this that can be replaced with function objects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734468</commentid>
    <comment_count>3</comment_count>
      <attachid>421782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-01 09:49:49 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:278
&gt;&gt; +}
&gt; 
&gt; I am not sure if this is safe to do since the OffscreenCanvasRenderingContext2D inherits from this class and is used on a non-main thread.

Your broader point about this class is definitely correct and does call into question the design pattern I used here.

For the actual safety of the code change, the only caller of this function is CanvasRenderingContext2D::setFont, which uses it to call setOneFamily, which uses an AtomString. For safety, we could move this function into CanvasRenderingContext2D and instead export the const char* that it uses to initialize the AtomString, which I suppose is how it was working before, except that it was making a new AtomString every time, so I would want to add a global there for efficiency.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:282
&gt; +    static NeverDestroyed&lt;String&gt; font = DefaultFont;

Using the same global String across threads is also unsafe, not just AtomString. So I think your comment about the function above is actually correctly pointing out a serious problem with this one! Creating a new String every time we make a CanvasRenderingContext2DBase::State is inefficient but I guess it’s required to keep things thread-safe! That is frustrating.

&gt;&gt; Source/WebCore/platform/graphics/cairo/PathCairo.cpp:417
&gt;&gt; +FloatRect Path::strokeBoundingRect(const Optional&lt;Function&lt;void(GraphicsContext&amp;)&gt;&gt;&amp; strokeStyleApplier) const
&gt; 
&gt; WTF::Function has null state (though it is debatable whether that is a good thing). Can that be used rather than the Optional?

Yes, I will switch to that.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGShape.cpp:-54
&gt;&gt; -class BoundingRectStrokeStyleApplier final : public StrokeStyleApplier {
&gt; 
&gt; I wonder if we have other one off delegate patterns like this that can be replaced with function objects?

I am certain that we do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734480</commentid>
    <comment_count>4</comment_count>
      <attachid>421782</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-03-01 10:17:39 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Not sure how we make regression tests for the inspector: added no new tests.

The tests for Web Inspector canvas recording are `LayoutTests/inspector/canvas/recording-*.html`.

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:879
&gt; +            // FIXME: This is wrong: it will repeat the context&apos;s current path for every level in the stack, ignoring saved paths.

IIRC, `Path` is not saved as part of canvas 2D state.  As such, it should probably only be added to the first (i.e. &quot;current&quot;) state.  I&apos;d probably do something like this:
```
    for (auto&amp; state : context2d.stateStack()) {
        ...
    }

    if (statesPayload-&gt;length()) {
        if (auto firstStatePayload = statesPayload-&gt;get(0)-&gt;asObject()) {
            auto setPath = JSON::ArrayOf&lt;JSON::Value&gt;::create();
            ...
            firstStatePayload-&gt;setArray(stringIndexForKey(&quot;setPath&quot;_s), WTFMove(setPath));
        }
    }
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734499</commentid>
    <comment_count>5</comment_count>
      <attachid>421782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-01 11:07:14 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:879
&gt;&gt; +            // FIXME: This is wrong: it will repeat the context&apos;s current path for every level in the stack, ignoring saved paths.
&gt; 
&gt; IIRC, `Path` is not saved as part of canvas 2D state.  As such, it should probably only be added to the first (i.e. &quot;current&quot;) state.  I&apos;d probably do something like this:
&gt; ```
&gt;     for (auto&amp; state : context2d.stateStack()) {
&gt;         ...
&gt;     }
&gt; 
&gt;     if (statesPayload-&gt;length()) {
&gt;         if (auto firstStatePayload = statesPayload-&gt;get(0)-&gt;asObject()) {
&gt;             auto setPath = JSON::ArrayOf&lt;JSON::Value&gt;::create();
&gt;             ...
&gt;             firstStatePayload-&gt;setArray(stringIndexForKey(&quot;setPath&quot;_s), WTFMove(setPath));
&gt;         }
&gt;     }
&gt; ```

It’s saved, but by the platform. For example, Core Graphics saves it as an effect of the CGContextSaveGState function. And the platform does not let us introspect the saved state stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734504</commentid>
    <comment_count>6</comment_count>
      <attachid>421782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-01 11:15:12 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Not sure how we make regression tests for the inspector: added no new tests.
&gt; 
&gt; The tests for Web Inspector canvas recording are `LayoutTests/inspector/canvas/recording-*.html`.

Do you know if there is any test that already tries to cover the state stack? I’ll go look, but I’d love to update an existing test to have better coverage instead of writing a whole new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734518</commentid>
    <comment_count>7</comment_count>
      <attachid>421782</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-03-01 11:42:36 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt;&gt; +        Not sure how we make regression tests for the inspector: added no new tests.
&gt;&gt; 
&gt;&gt; The tests for Web Inspector canvas recording are `LayoutTests/inspector/canvas/recording-*.html`.
&gt; 
&gt; Do you know if there is any test that already tries to cover the state stack? I’ll go look, but I’d love to update an existing test to have better coverage instead of writing a whole new one.

I think `LayoutTests/inspector/canvas/recording-2d-saves.html` is the main test for &quot;the initial state contains multiple saves&quot;.

&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:879
&gt;&gt;&gt; +            // FIXME: This is wrong: it will repeat the context&apos;s current path for every level in the stack, ignoring saved paths.
&gt;&gt; 
&gt;&gt; IIRC, `Path` is not saved as part of canvas 2D state.  As such, it should probably only be added to the first (i.e. &quot;current&quot;) state.  I&apos;d probably do something like this:
&gt;&gt; ```
&gt;&gt;     for (auto&amp; state : context2d.stateStack()) {
&gt;&gt;         ...
&gt;&gt;     }
&gt;&gt; 
&gt;&gt;     if (statesPayload-&gt;length()) {
&gt;&gt;         if (auto firstStatePayload = statesPayload-&gt;get(0)-&gt;asObject()) {
&gt;&gt;             auto setPath = JSON::ArrayOf&lt;JSON::Value&gt;::create();
&gt;&gt;             ...
&gt;&gt;             firstStatePayload-&gt;setArray(stringIndexForKey(&quot;setPath&quot;_s), WTFMove(setPath));
&gt;&gt;         }
&gt;&gt;     }
&gt;&gt; ```
&gt; 
&gt; It’s saved, but by the platform. For example, Core Graphics saves it as an effect of the CGContextSaveGState function. And the platform does not let us introspect the saved state stack.

Ah!  TIL.  As an FYI, the purpose of the Web Inspector canvas recorder is to instrument actions at the JS/bindings layer so that developers can have a better understanding of how each of the `CanvasRenderingContext2D` APIs affect what&apos;s displayed in the `&lt;canvas&gt;` (e.g. &quot;why did this JS `fillRect` call draw a red square instead of a blue one?&quot;).  As such, since the concept of &quot;state&quot; in the `CanvasRenderingContext2D` API explicitly doesn&apos;t include the idea of &quot;path&quot; [1], I don&apos;t think Web Inspector needs to (or even should) either:
&gt; The current default path and the rendering context&apos;s bitmaps are not part of the drawing state. The current default path is persistent, and can only be reset using the beginPath() method. The bitmaps depend on whether and how the rendering context is bound to a canvas element.
In fact, the only reason that Web Inspector has this here right now is so that it can more accurately &quot;encode&quot; the initial state of the `CanvasRenderingContext2D` for recreation/replay inside Web Inspector.  If there was a regular `CanvasRenderingContext2D` API for getting/setting the `Path`, then Web Inspector would be using that instead [2][3].

Also, for what it&apos;s worth, if Web Inspector wants to add a feature for introspecting the behavior of the underlying native graphics context and/or bitmap, then I think that&apos;s a different discussion (and one I&apos;d also likely be in support of).

[1]: https://html.spec.whatwg.org/multipage/canvas.html#the-canvas-state
[2]: https://github.com/whatwg/html/issues/2897
[3]: https://github.com/whatwg/html/issues/2896</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734549</commentid>
    <comment_count>8</comment_count>
      <attachid>421782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-01 12:52:54 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:879
&gt;&gt;&gt;&gt; +            // FIXME: This is wrong: it will repeat the context&apos;s current path for every level in the stack, ignoring saved paths.
&gt;&gt;&gt; 
&gt;&gt;&gt; IIRC, `Path` is not saved as part of canvas 2D state.  As such, it should probably only be added to the first (i.e. &quot;current&quot;) state.  I&apos;d probably do something like this:
&gt;&gt;&gt; ```
&gt;&gt;&gt;     for (auto&amp; state : context2d.stateStack()) {
&gt;&gt;&gt;         ...
&gt;&gt;&gt;     }
&gt;&gt;&gt; 
&gt;&gt;&gt;     if (statesPayload-&gt;length()) {
&gt;&gt;&gt;         if (auto firstStatePayload = statesPayload-&gt;get(0)-&gt;asObject()) {
&gt;&gt;&gt;             auto setPath = JSON::ArrayOf&lt;JSON::Value&gt;::create();
&gt;&gt;&gt;             ...
&gt;&gt;&gt;             firstStatePayload-&gt;setArray(stringIndexForKey(&quot;setPath&quot;_s), WTFMove(setPath));
&gt;&gt;&gt;         }
&gt;&gt;&gt;     }
&gt;&gt;&gt; ```
&gt;&gt; 
&gt;&gt; It’s saved, but by the platform. For example, Core Graphics saves it as an effect of the CGContextSaveGState function. And the platform does not let us introspect the saved state stack.
&gt; 
&gt; Ah!  TIL.  As an FYI, the purpose of the Web Inspector canvas recorder is to instrument actions at the JS/bindings layer so that developers can have a better understanding of how each of the `CanvasRenderingContext2D` APIs affect what&apos;s displayed in the `&lt;canvas&gt;` (e.g. &quot;why did this JS `fillRect` call draw a red square instead of a blue one?&quot;).  As such, since the concept of &quot;state&quot; in the `CanvasRenderingContext2D` API explicitly doesn&apos;t include the idea of &quot;path&quot; [1], I don&apos;t think Web Inspector needs to (or even should) either:

The way these things are saved and restored is an implementation detail. It’s a happy coincidence that developers don’t want or need to see the path, since it’s one thing saved and restored that we can’t implement well. It would be great to remove it since it’s not accurate. Should I just take it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734550</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-01 12:54:02 -0800</bug_when>
    <thetext>I’m just fixing a broken implementation that I spotted here by code inspection that claims to represent saved state, but wasn’t. My personal aim is *not* to set a future architecture or feature direction for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734568</commentid>
    <comment_count>10</comment_count>
      <attachid>421782</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-03-01 13:13:03 -0800</bug_when>
    <thetext>Comment on attachment 421782
Patch

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

(In reply to Darin Adler from comment #9)
&gt; I’m just fixing a broken implementation that I spotted here by code inspection that claims to represent saved state, but wasn’t. My personal aim is *not* to set a future architecture or feature direction for this.

I appreciate that and thank you for taking the time to do so!  It is not my intention for myself or to ask you to set a future architecture/feature direction for this either.

&gt;&gt;&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:879
&gt;&gt;&gt;&gt;&gt; +            // FIXME: This is wrong: it will repeat the context&apos;s current path for every level in the stack, ignoring saved paths.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; IIRC, `Path` is not saved as part of canvas 2D state.  As such, it should probably only be added to the first (i.e. &quot;current&quot;) state.  I&apos;d probably do something like this:
&gt;&gt;&gt;&gt; ```
&gt;&gt;&gt;&gt;     for (auto&amp; state : context2d.stateStack()) {
&gt;&gt;&gt;&gt;         ...
&gt;&gt;&gt;&gt;     }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;     if (statesPayload-&gt;length()) {
&gt;&gt;&gt;&gt;         if (auto firstStatePayload = statesPayload-&gt;get(0)-&gt;asObject()) {
&gt;&gt;&gt;&gt;             auto setPath = JSON::ArrayOf&lt;JSON::Value&gt;::create();
&gt;&gt;&gt;&gt;             ...
&gt;&gt;&gt;&gt;             firstStatePayload-&gt;setArray(stringIndexForKey(&quot;setPath&quot;_s), WTFMove(setPath));
&gt;&gt;&gt;&gt;         }
&gt;&gt;&gt;&gt;     }
&gt;&gt;&gt;&gt; ```
&gt;&gt;&gt; 
&gt;&gt;&gt; It’s saved, but by the platform. For example, Core Graphics saves it as an effect of the CGContextSaveGState function. And the platform does not let us introspect the saved state stack.
&gt;&gt; 
&gt;&gt; Ah!  TIL.  As an FYI, the purpose of the Web Inspector canvas recorder is to instrument actions at the JS/bindings layer so that developers can have a better understanding of how each of the `CanvasRenderingContext2D` APIs affect what&apos;s displayed in the `&lt;canvas&gt;` (e.g. &quot;why did this JS `fillRect` call draw a red square instead of a blue one?&quot;).  As such, since the concept of &quot;state&quot; in the `CanvasRenderingContext2D` API explicitly doesn&apos;t include the idea of &quot;path&quot; [1], I don&apos;t think Web Inspector needs to (or even should) either:
&gt; 
&gt; The way these things are saved and restored is an implementation detail. It’s a happy coincidence that developers don’t want or need to see the path, since it’s one thing saved and restored that we can’t implement well. It would be great to remove it since it’s not accurate. Should I just take it out?

We definitely don&apos;t want to remove it because then Web Inspector may not have an accurate representation of the initial state of the `CanvasRenderingContext2D` when the recording starts (e.g. if the developer starts recording in the middle of an interactive drawing which has already called `moveTo` or `lineTo`).  The goal of my original comment was just to avoid adding a FIXME since I think the solution is simple enough that it could be fixed now.

For what it&apos;s worth, I don&apos;t think there will be any issues if you leave it as you have it now, as all it would do is cause Web Inspector to set the path of the `&lt;canvas&gt;` multiple times to the same value before replaying the rest of the recorded actions instead of just once (to give some context, during replay in Web Inspector the initial state is applied before any actions, so calling `setPath` multiple times shouldn&apos;t do anything negative).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735504</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-03 14:03:12 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #7)
&gt; I think `LayoutTests/inspector/canvas/recording-2d-saves.html` is the main
&gt; test for &quot;the initial state contains multiple saves&quot;.

I see the problem now. That only tests fillStyle, and only fill styles that are solid colors. There are 20 or so other properties to test! And two other modes for fillStyle.

Daunting to write all those missing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736479</commentid>
    <comment_count>12</comment_count>
      <attachid>422395</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-05 12:36:30 -0800</bug_when>
    <thetext>Created attachment 422395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736573</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-05 15:03:34 -0800</bug_when>
    <thetext>Looks like things are passing on EWS and this patch should address everything I discussed with Sam and Devin. Well, not *everything* I discussed with Devin, but everything you’d probably *expect* me to address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736970</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-07 16:28:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/75152728&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737275</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-08 13:49:45 -0800</bug_when>
    <thetext>Committed r274101 (235035@main): &lt;https://commits.webkit.org/235035@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421782</attachid>
            <date>2021-02-28 16:55:57 -0800</date>
            <delta_ts>2021-03-05 12:36:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222532-20210228165556.patch</filename>
            <type>text/plain</type>
            <size>87871</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ0MjMwODBjZDY2ZWFl
MTYyMmZhOTBlMDVlMDUxMjI0NWU0MTNkNC4uMzk5ODBiNzY1ZDdjYTczOWU2NzNiOGJmZjJiYWI1
ZmUxMjA4ZWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MSBAQAorMjAyMS0wMi0yOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IGluc3BlY3RvciB2aWV3
aW5nIG9mIGNhbnZhcyBzYXZlL3Jlc3RvcmUgc3RhY2ssIGFuZCB0aWdodGVuIGFuZCBzaW1wbGlm
eSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOb3Qgc3VyZSBob3cgd2UgbWFrZSByZWdyZXNzaW9uIHRl
c3RzIGZvciB0aGUgaW5zcGVjdG9yOiBhZGRlZCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgVGhl
IGluc3BlY3RvciBjb2RlIGlzIHRoZSBvbmx5IGNsaWVudCB0aGF0IGxvb2tzIGludG8gdGhlIGdy
YXBoaWNzIGNvbnRleHQgYW5kIGdldHMgYXQKKyAgICAgICAgc2F2ZWQgc3RhdGVzIGluIHRoZSBz
YXZlL3Jlc3RvcmUgc3RhdGUgc3RhY2suIEl0IHdhcyBkb2luZyBzbyBpbiBhbiBpbmNvbnNpc3Rl
bnQgd2F5LCBhbmQKKyAgICAgICAgaW4gbWF5IGNhc2VzIGlnbm9yaW5nIHRoZSBzdGF0ZSBpbiB0
aGUgc3RhY2sgYW5kIHNpbXBseSB1c2luZyB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmaXhlcwor
ICAgICAgICBhbG1vc3QgZXZlcnl0aGluZyB0byBhY3R1YWxseSB1c2UgdGhlIHN0YXRlIHN0YWNr
LgorCisgICAgICAgIFNlcGFyYXRlbHkgZGlkIHNvbWUgcmVsYXRlZCByZWZhY3RvcmluZy4gVGhp
cyBpbmNsdWRlcyBhIGJpdCBtb3JlIGlubGluaW5nLCByZW1vdmluZyBhIGNsYXNzCisgICAgICAg
IHRoYXQgd2FzIGJlaW5nIHVzZWQgaW4gdGhlIGludGVyZmFjZSB0byBQYXRoIHdoZXJlIGNhbiBu
b3cgbW9yZSBzaW1wbHkgdXNlIGEgRnVuY3Rpb248PiwKKyAgICAgICAgZGVjcmVhc2luZyBzdHJp
bmcgYWxsb2NhdGlvbiBmb3IgZm9udCBmYW1pbHkgc3RyaW5ncyBhbmQgbmFtZXMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92ZWQgU3Ryb2tlU3R5
bGVBcHBsaWVyLmguCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KTogQ2FsbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSBzbyB3ZQorICAgICAg
ICBkb24ndCBoYXZlIHRvIGdldCBhdCBwcml2YXRlIG1lbWJlciBtX3VzZXNDU1NDb21wYXRpYmls
aXR5UGFyc2VNb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjptZWFzdXJlVGV4dCk6IENhbGwgZGVmYXVsdEZvbnRGYW1pbHkoKSwgd2hpY2ggcmV0dXJucwor
ICAgICAgICBhbiBBdG9tU3RyaW5nIHNvIHdlIGRvbid0IGhhdmUgdG8gbG9vayBpdCB1cCBldmVy
eSB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKTogUmVtb3ZlZCB1bm5lY2Vzc2Fy
eSBhbGxvY2F0aW9uIG9mIGEKKyAgICAgICAgVGV4dE1ldHJpY3Mgb2JqZWN0LCB3aGljaCB3ZSBk
b24ndCB1c2UgYW5kIHRoZW4gZGVhbGxvY2F0ZS4gVXBkYXRlIHNpbmNlIG5vcm1hbGl6ZWRTcGFj
ZXMKKyAgICAgICAgbm93IHVzZXMgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhbiBpbi9vdXQg
YXJndW1lbnQuIEFsc28gdXNlICYmIGluc3RlYWQgb2YgPzogYW5kCisgICAgICAgIHVwZGF0ZSBm
b3IgbmFtZSBjaGFuZ2Ugb2YgY2FuRHJhd1RleHRXaXRoUGFyYW1zLgorCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6IFJlbW92ZWQgdW5uZWVkZWQgaGVh
ZGVyIGluY2x1ZGVzLCB1bm5lZWRlZAorICAgICAgICBvdmVycmlkZSBvZiB3ZWJraXRCYWNraW5n
U3RvcmVQaXhlbFJhdGlvIGFuZCBtYWRlIHRoZSBvdmVycmlkZSBvZiBpczJkIHByaXZhdGUsIHNp
bmNlCisgICAgICAgIG5vIG9uZSBzaG91bGQgbmVlZCB0byBjYWxsIGl0IG9uIGEgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHA6IFVzZSBjb25zdGV4cHIgZm9yIHNvbWUgZmlsZS1sb2NhbCBjb25z
dGFudHMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHJva2VTdHlsZUFwcGxpZXI6OkNhbnZh
c1N0cm9rZVN0eWxlQXBwbGllcik6IERlbGV0ZWQgdGhpcyBlbnRpcmUgY2xhc3MsCisgICAgICAg
IHNpbmNlIHdlIG5vdyB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFuIG9iamVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OnRvQ2FudmFzTGluZUNhcCk6IE1vdmVkIHRoZXNlIGZ1bmN0aW9ucyB0byB0
aGUgdG9wIG9mIHRoZSBmaWxlIHNpbmNlIHRoZXkgYXJlCisgICAgICAgIG5vdyB1c2VkIGluIHRo
ZSBTdGF0ZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OmZyb21DYW52YXNMaW5lQ2FwKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjp0b0NhbnZhc0xpbmVKb2luKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpmcm9tQ2FudmFzTGluZUpvaW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OnRvQ2FudmFzVGV4dEFsaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpmcm9tQ2FudmFz
VGV4dEFsaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0b0NhbnZhc1RleHRCYXNlbGlu
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZnJvbUNhbnZhc1RleHRCYXNlbGluZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGVm
YXVsdEZvbnRGYW1pbHkpOiBBZGRlZC4gUmV0dXJucyBhbiBBdG9tU3RyaW5nLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IG9uZSBldmVyeSB0aW1lLgorICAgICAg
ICAoV2ViQ29yZTo6ZGVmYXVsdENhbnZhc0ZvbnQpOiBBZGRlZC4gUmV0dXJucyBhIFN0cmluZyBz
byB3ZSBkb24ndCBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3CisgICAgICAgIG9uZSBldmVyeSB0aW1l
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6
OlN0YXRlKTogVXNlIGRlZmF1bHRDYW52YXNGb250LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6Om9wZXJhdG9yPSk6IERlbGV0ZWQgdGhlIGNv
cHkgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3Igc2luY2UgdGhl
eSBhcmUgdGhlIGRlZmF1bHQgb25lcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OlN0YXRlOjpmb250U3RyaW5nIGNvbnN0KTogQWRkZWQuIE1vdmVkIHRo
ZSBjb2RlCisgICAgICAgIGhlcmUgZnJvbSB0aGUgZnVuY3Rpb24gbmFtZWQgZm9udCwgbWFraW5n
IGl0IHBvc3NpYmxlIHRvIHVzZSB0aGlzIGluIHRoZSBpbnNwZWN0b3IgY29kZS4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNMaW5l
Q2FwIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpTdGF0ZTo6Y2FudmFzTGluZUpvaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNUZXh0
QWxpZ24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNUZXh0QmFzZWxpbmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpnbG9i
YWxDb21wb3NpdGVPcGVyYXRpb25TdHJpbmcgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpzaGFkb3dDb2xvclN0cmlu
ZyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6bGluZVdpZHRoIGNvbnN0KTogTW92ZWQgdG8gdGhlIGhlYWRlci4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmxpbmVDYXAgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omxp
bmVKb2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjptaXRlckxpbWl0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaGFkb3dPZmZzZXRYIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaGFk
b3dPZmZzZXRZIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpzaGFkb3dCbHVyIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaGFkb3dDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
TGluZURhc2ggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmxpbmVEYXNoT2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnbG9iYWxBbHBoYSBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
Ojppc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKTogTWFkZSB0aGlzIGZpbGUgbG9jYWwsIG5vIGxv
bmdlciBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblBhdGhJbnRlcm5hbCk6IFR3ZWFrIHN0eWxlIHRvIG1h
dGNoCisgICAgICAgIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJva2VJbnRlcm5hbCk6IFVz
ZSBhIGxhbWJkYSBmb3IgdGhlCisgICAgICAgIHN0cm9rZSBzdHlsZSBhcHBsaWVyIHNvIHdlIGRv
bid0IG5lZWQgYSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRpZERyYXdFbnRpcmVDYW52YXMpOiBVcGRhdGVkIHNpbmNlIGRpZERyYXcKKyAg
ICAgICAgbm93IHRha2VzIGFuIE9wdGlvblNldC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmRpZERyYXcpOiBVcGRhdGVkIHRvIHRha2UgYW4gT3B0aW9u
U2V0LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhIGNvbnN0KTogVXNlIGEgc2luZ2xlIG1ha2VTdHJpbmcKKyAgICAgICAgaW5zdGVh
ZCBvZiBhIFN0cmluZ0J1aWxkZXIgZm9yIGFuIGVycm9yIG1lc3NhZ2UuCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOiBVcGRhdGVk
IHNpbmNlIGRpZERyYXcgbm93CisgICAgICAgIHRha2VzIGFuIE9wdGlvblNldC4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmltYWdlU21vb3RoaW5nUXVh
bGl0eSBjb25zdCk6IE1vdmVkIHRvIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppbWFnZVNtb290aGluZ0VuYWJsZWQgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmZv
bnQgY29uc3QpOiBEaXR0by4gVGhlIGJ1bGsgb2YgdGhlIGZ1bmN0aW9uIGlzCisgICAgICAgIG5v
dyBpbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9udFN0cmluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRBbGlnbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjp0ZXh0QmFzZWxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FuRHJhd1RleHQpOiBSZW5hbWVkIGZyb20g
Y2FuRHJhd1RleHRXaXRoUGFyYW1zLAorICAgICAgICBzaW5jZSB0aGUgZmFjdCB0aGF0IGEgZnVu
Y3Rpb24gaGFzIHBhcmFtZXRlcnMgZG9lc24ndCBuZWVkIHRvIGJlIHBhcnQgb2YgaXRzIG5hbWUu
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpub3JtYWxp
emVTcGFjZXMpOiBVc2UgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZgorICAgICAgICBhbiBpbi9v
dXQgYXJndW1lbnQgZm9yIGJldHRlciBjbGFyaXR5LiBUaGlzIGFsc28gbWF0Y2hlcyB0aGUgbmVl
ZHMgb2YgYWxsIHRoZSBjYWxsIHNpdGVzLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHQpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIGNhbkRy
YXdUZXh0CisgICAgICAgIGFuZCBub3JtYWxpemVTcGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjptZWFzdXJlVGV4dEludGVybmFsKTogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6
IFJlbW92ZWQgdW5uZWVkZWQgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgICAgICAgIE1hZGUgdGhl
IGNvbnN0cnVjdG9yIHByb3RlY3RlZC4gTW92ZWQgdGhlIGNvZGUgZm9yIG1hbnkgc2ltcGxlIGdl
dHRlcnMgaGVyZSBzbyB0aGV5CisgICAgICAgIGNhbiBiZSBpbmxpbmVkLiBUaGUgbWFpbiBjYWxs
IHNpdGUgaXMgdGhlIEphdmFTY3JpcHQgYmluZGluZ3MuIFJlbW92ZWQgdW51c2VkIGdldExpbmVD
YXAKKyAgICAgICAgYW5kIGdldExpbmVKb2luIGZ1bmN0aW9ucy4gTWFkZSB0aGUgd2Via2l0QmFj
a2luZ1N0b3JlUGl4ZWxSYXRpbyBmdW5jdGlvbiBzdGF0aWMgYW5kCisgICAgICAgIGNvbnN0ZXhw
ciAod2h5IG5vdD8pLiBSZW1vdmVkIHVudXNlZCB1c2VzRGlzcGxheUxpc3REcmF3aW5nIGZ1bmN0
aW9uLiBNYXJrZWQgdGhlIEZvbnRQcm94eQorICAgICAgICBjbGFzcyBmaW5hbC4gUmVtb3ZlZCB0
aGUgZXhwbGljaXQgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBmcm9t
IHRoZSBTdGF0ZQorICAgICAgICBzdHJ1Y3Q6IGxldHRpbmcgdGhlIGNvbXBpbGVyIGdlbmVyYXRl
IGl0IGlzIGJldHRlciBmb3Igb3VyIHB1cnBvc2VzLiBNYWRlIHRoZSBzdGF0ZQorICAgICAgICBm
dW5jdGlvbiBwcm90ZWN0ZWQuIE1hZGUgbW9zdCBmb3JtZXJseS1wcm90ZWN0ZWQgbWVtYmVycyBw
cml2YXRlIGluc3RlYWQsIHNpbmNlIHRoZXJlCisgICAgICAgIGlzIG5vIG5lZWQgZm9yIGRlcml2
ZWQgY2xhc3NlcyB0byB1c2UgdGhlbS4gTWFkZSB0aGUgZW51bWVyYXRpb24gQ2FudmFzRGlkRHJh
d09wdGlvbgorICAgICAgICBpbnRvIGFuIGVudW0gY2xhc3MgbmFtZWQgRGlkRHJhd09wdGlvbiBh
bmQgdXNlIGl0IHdpdGggT3B0aW9uU2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdAorICAgICAgICBh
cyBhbiB1bnNpZ25lZC4gQnV0IG5vdGUgdGhhdCBpcyBwcml2YXRlIHRvIHRoaXMgY2xhc3MuIE1h
cmtlZCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtCisgICAgICAgIGZpbmFsIGluc3RlYWQgb2Ygb3Zl
cnJpZGUuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaDogTWFkZSBpc09mZnNjcmVlbjJkIHByaXZhdGUuCisgICAgICAgICogaHRtbC9j
YW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaDogTWFkZSBpc1BhaW50IHByaXZhdGUuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFsU3RhdGUpOiBXaGVuIGl0ZXJhdGluZyB0
aGUgc3RhdGUgc3RhY2ssIGRvIG5vdAorICAgICAgICBnZXQgYW55dGhpbmcgZGlyZWN0bHkgZnJv
bSB0aGUgY29udGV4dCwgc2luY2UgaXQgd2lsbCBnaXZlIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJl
bnQKKyAgICAgICAgc3RhdGUsIG5vdCB0aGUgc3RhY2sgZWxlbWVudCB3ZSBhcmUgaXRlcmF0aW5n
LiBBZGRlZCBhIEZJWE1FIGZvciB0aGUgb25lIGNhc2Ugd2hlcmUKKyAgICAgICAgdGhpcyB3YXMg
bm90IGVhc3kgdG8gZml4LCAic2V0UGF0aCIsIGFuZCBsZWZ0IGl0IGJyb2tlbiBhcyBiZWZvcmUu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OiBSZW1vdmVkIHVubmVlZGVkIG51bGwgY2hlY2sgZm9yCisgICAgICAgIHRoZSBkYXRhLiBJbWFn
ZURhdGE6OmNyZWF0ZSB3aWxsIHJldHVybiBudWxscHRyLCBub3QgYW4gb2JqZWN0IHdpdGggbnVs
bHB0ciBmb3IgZGF0YS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDogVXNl
IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IGluc3RlYWQgb2YKKyAgICAgICAgU3Ry
a2VTdHlsZUFwcGxpZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJva2VTdHls
ZUFwcGxpZXIuaDogUmVtb3ZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1Jl
Y3QgY29uc3QpOiBVc2UgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4uCisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpzdHJva2VDb250YWlucyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJv
a2VDb250YWlucyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tl
Qm91bmRpbmdSZWN0IGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6IFBhc3MgYSByZWZlcmVuY2UgdG8KKyAg
ICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCBpbnN0ZWFk
IG9mIGEgcG9pbnRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46
OmFwcGx5UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKTogVXNlIGEgbGFtYmRhIGluc3RlYWQg
b2YKKyAgICAgICAgYSBTdHJva2VTdHlsZUFwcGxpZXIgb2JqZWN0IHdoZW4gY2FsbGluZyBzdHJv
a2VDb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRl
U3Ryb2tlQm91bmRpbmdCb3ggY29uc3QpOiBVc2UgYSBsYW1iZGEgaW5zdGVhZAorICAgICAgICBv
ZiBhIFN0cm9rZVN0eWxlQXBwbGllciBvYmplY3Qgd2hlbiBjYWxsaW5nIHN0cm9rZUJvdW5kaW5n
UmVjdC4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KTogVGFrZSBhIHJlZmVyZW5jZSByYXRoZXIKKyAgICAgICAgdGhhbiBhIHBvaW50ZXIuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0Lmg6IFVwZGF0ZWQgZm9yIHRo
ZSBhYm92ZS4KKwogMjAyMS0wMi0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEFwcGVuZGluZyBhIHBhcnRpYWwgc2VnbWVudCBvZiBhIFdlYk0g
YXVkaW8gZmlsZSByZXN1bHRzIGluIG5vIGFkZGl0aW9uYWwgc2FtcGxlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRhMTg3Zjlm
NGZlZTFkN2E3ZmQ3NDFjNTYwMmExNjYzZDY2YjBkNzUuLmUxZGE5Njc4OGFjMzA1ZjJkYWZjNWFm
MzMwZWQxOWVlNDdhZWQ5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI2NTAsNyArMjY1MCw2IEBACiAJCTg0ODUyMjdDMTE5
MDE2MkMwMDZFREM3RiAvKiBKU1NWR0hLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyNzgxMTkwMTYyQzAwNkVEQzdGIC8qIEpT
U1ZHSEtlcm5FbGVtZW50LmggKi87IH07CiAJCTg0ODUyMjdFMTE5MDE2MkMwMDZFREM3RiAvKiBK
U1NWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ4NTIyN0ExMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHVktlcm5FbGVtZW50Lmgg
Ki87IH07CiAJCTg0ODUyMjhCMTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjg4MTE5
MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKLQkJODQ5Rjc3NzYwRUZF
QzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ5Rjc3NzUwRUZFQzYyMDAwOTA4NDlEIC8qIFN0
cm9rZVN0eWxlQXBwbGllci5oICovOyB9OwogCQk4NEE4MUYzRTBGQzdERkYwMDA5NTUzMDAgLyog
U291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovOyB9OwogCQk4
NEE4MUY0MjBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAw
IC8qIFNvdXJjZUdyYXBoaWMuaCAqLzsgfTsKIAkJODRCMzQ5QTIyMkY4NkU3NTAwRDQ3QkNGIC8q
IEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJGODZFNzQwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNy
ZXRlLmggKi87IH07CkBAIC0xMTIwNSw3ICsxMTIwNCw2IEBACiAJCTg0ODUyMjg3MTE5MDE3M0Mw
MDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHVktlcm5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODkxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJu
RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHVktlcm5FbGVtZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ5Rjc3NzUwRUZFQzYyMDAwOTA4NDlEIC8q
IFN0cm9rZVN0eWxlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJva2VTdHlsZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFG
M0IwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGlj
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY4NjQsNyArMjY4NjIsNiBAQAog
CQkJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLywKIAkJCQlC
MjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCAqLywKIAkJCQlC
MjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi8sCi0JCQkJODQ5
Rjc3NzUwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oICovLAogCQkJCTA4
NzU1OEMzMTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Iu
Y3BwICovLAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdh
cmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFi
U2l6ZS5oICovLApAQCAtMzExNDQsOCArMzExNDEsNiBAQAogCQkJCUNEQzI2QjQxMTYwQThDQ0Uw
MDI2NzU3QiAvKiBMZWdhY3lNb2NrQ0RNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUJGNkI4MzFB
QTk2QzdEMDBBRjRBOEEgLyogTW9ja0NvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExQjVCMjlGMUFBQTg0NkYwMDhCNjA0MiAvKiBNb2NrQ29udGVudEZpbHRlclNldHRpbmdzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1MTA1OEFEQzFENjc5MkMxMDA5QTUzOEMgLyogTW9ja0dhbWVw
YWQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDU4QURFMUQ2NzkyQzEwMDlBNTM4QyAvKiBNb2Nr
R2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTU3RUJGQjFFM0FCNjdGMDBB
QzlGRTkgLyogTW9ja0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDZGM0U5MTFDMUVDQjJGMDA2MURCRDQgLyogTW9ja1BhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDk3RjA0ODE5REQ0MTQwMDAxRUU5QzMgLyogTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM0OTA3LDcgKzM0OTAyLDYgQEAKIAkJCQlCMjM1NDBG
MzBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9r
ZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE0QjgyMDUxRDZERjBFNTAwNzdF
QkUzIC8qIFN0cnVjdHVyZWRDbG9uZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFFNjdBODMyNUQx
Njg0NzAwN0IwQTRDIC8qIFNUVU5NZXNzYWdlUGFyc2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzEzOTIyQkUyNTE4QUI3NzAwNURCM0MyIC8qIFN0eWxlYWJsZS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBjZjRiMGQ2ZGE2OTMxZDk5OGNmZjhhNDdhM2FiZDZjYTU4ZDM3NDYw
Li42N2RjOTE0ODUxZmJjZjY1NThlM2RhMWMwMjE3ZWY3ZTg1OGVlYWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDov
L2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLWh0bWwvMjAwOUp1bC8wOTQ3Lmh0
bWwsCiAgICAgLy8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGln
bm9yZWQuIHBhcnNlRm9udFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgotICAgIGF1dG8gZm9u
dFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NT
U1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBhdXRv
IGZvbnRSYXcgPSBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3RyaWN0
VG9DU1NQYXJzZXJNb2RlKCF1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpKSk7CiAgICAg
aWYgKCFmb250UmF3KQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQp
CiAgICAgaWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMoKS5jb21wdXRlZFN0eWxlKCkp
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbiA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21w
dXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSB9OwogICAgIGVsc2UgewotICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShkZWZhdWx0Rm9udEZhbWlseSgpKTsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOwogICAg
IH0KQEAgLTE4MSwxNSArMTgxLDEwIEBAIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjptZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGNhbnZhcy5kb2N1bWVudCgp
KTsKICAgICB9CiAKLSAgICBSZWY8VGV4dE1ldHJpY3M+IG1ldHJpY3MgPSBUZXh0TWV0cmljczo6
Y3JlYXRlKCk7Ci0KLSAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwotICAgIG5vcm1h
bGl6ZVNwYWNlcyhub3JtYWxpemVkVGV4dCk7Ci0KKyAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQg
PSBub3JtYWxpemVTcGFjZXModGV4dCk7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVk
U3R5bGU7CiAgICAgYXV0byBkaXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5kaXJl
Y3Rpb24sICZjb21wdXRlZFN0eWxlKTsKLSAgICBib29sIG92ZXJyaWRlID0gY29tcHV0ZWRTdHls
ZSA/IGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSkgOiBmYWxzZTsKLQor
ICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29tcHV0ZWRT
dHlsZS0+dW5pY29kZUJpZGkoKSk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0
LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlKTsK
ICAgICByZXR1cm4gbWVhc3VyZVRleHRJbnRlcm5hbCh0ZXh0UnVuKTsKIH0KQEAgLTIwNywxNiAr
MjAyLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFs
KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1dyaXRlT3JNZWFz
dXJlKHRoaXMtPmNhbnZhcygpLmRvY3VtZW50KCksIHRleHQpOwogCi0gICAgaWYgKCFjYW5EcmF3
VGV4dFdpdGhQYXJhbXMoeCwgeSwgZmlsbCwgbWF4V2lkdGgpKQorICAgIGlmICghY2FuRHJhd1Rl
eHQoeCwgeSwgZmlsbCwgbWF4V2lkdGgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcg
bm9ybWFsaXplZFRleHQgPSB0ZXh0OwotICAgIG5vcm1hbGl6ZVNwYWNlcyhub3JtYWxpemVkVGV4
dCk7Ci0KKyAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSBub3JtYWxpemVTcGFjZXModGV4dCk7
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGU7CiAgICAgYXV0byBkaXJlY3Rp
b24gPSB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5kaXJlY3Rpb24sICZjb21wdXRlZFN0eWxlKTsK
LSAgICBib29sIG92ZXJyaWRlID0gY29tcHV0ZWRTdHlsZSA/IGlzT3ZlcnJpZGUoY29tcHV0ZWRT
dHlsZS0+dW5pY29kZUJpZGkoKSkgOiBmYWxzZTsKLQorICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21w
dXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSk7CiAg
ICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5z
aW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hlY2tlZCh0
ZXh0UnVuLCB4LCB5LCBmaWxsLCBtYXhXaWR0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDFmNjI3ZWNm
NTViOTY2MWU3YmE4OGVjYzNkZmRkZDJjNGI4MjFhZGUuLjg5N2M4YjNhZTdiMzkyZmM5MzAwY2Vh
Njk5NzNmYmNiYzM4MDE1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0yNiw4ICsyNiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCIKLSNpbmNs
dWRlICJDYW52YXNUZXh0QWxpZ24uaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0QmFzZWxpbmUuaCIK
ICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KIApAQCAt
NDcsOCArNDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChFbGVtZW50
Jik7CiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChQYXRoMkQmLCBFbGVtZW50Jik7CiAKLSAg
ICBmbG9hdCB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1cm4gMTsg
fQotCiAgICAgdm9pZCBzZXRGb250KGNvbnN0IFN0cmluZyYpOwogCiAgICAgQ2FudmFzRGlyZWN0
aW9uIGRpcmVjdGlvbigpIGNvbnN0OwpAQCAtNTcsMTEgKzUzLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0cm9rZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBPcHRp
b25hbDxmbG9hdD4gbWF4V2lkdGggPSBXVEY6Om51bGxvcHQpOwogICAgIFJlZjxUZXh0TWV0cmlj
cz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAotICAgIGJvb2wgaXMyZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQogcHJpdmF0ZToKICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJz
ZU1vZGUpOwogCisgICAgYm9vbCBpczJkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7CiAKICAgICB2b2lkIGRyYXdU
ZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZp
bGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0aCA9IFdURjo6bnVsbG9wdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCmluZGV4IDlmZjIyYTdjM2Q1ZGVjY2U2YTY0YmFhYTZhY2JlYzExNmIxMDJjMGIu
LmJjY2ZmZDQ1NDU5MGI0OTNlYTg3MTZhM2VmNjBhYWQ3NmM5NzcxYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJp
Z2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CkBAIC02Myw3ICs2Myw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCkBAIC04MywzOCArODIsMTQ2IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZSk7CiAKICNpZiBVU0UoQ0cpCi1jb25zdCBJbWFnZVNtb290aGlu
Z1F1YWxpdHkgZGVmYXVsdFNtb290aGluZ1F1YWxpdHkgPSBJbWFnZVNtb290aGluZ1F1YWxpdHk6
OkxvdzsKK3N0YXRpYyBjb25zdGV4cHIgSW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGRlZmF1bHRTbW9v
dGhpbmdRdWFsaXR5ID0gSW1hZ2VTbW9vdGhpbmdRdWFsaXR5OjpMb3c7CiAjZWxzZQotY29uc3Qg
SW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGRlZmF1bHRTbW9vdGhpbmdRdWFsaXR5ID0gSW1hZ2VTbW9v
dGhpbmdRdWFsaXR5OjpNZWRpdW07CitzdGF0aWMgY29uc3RleHByIEltYWdlU21vb3RoaW5nUXVh
bGl0eSBkZWZhdWx0U21vb3RoaW5nUXVhbGl0eSA9IEltYWdlU21vb3RoaW5nUXVhbGl0eTo6TWVk
aXVtOwogI2VuZGlmCiAKIGNvbnN0IGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpE
ZWZhdWx0Rm9udFNpemUgPSAxMDsKLWNvbnN0IGNoYXIqIGNvbnN0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OkRlZmF1bHRGb250RmFtaWx5ID0gInNhbnMtc2VyaWYiOwotY29uc3QgY2hh
ciogY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6RGVmYXVsdEZvbnQgPSAiMTBw
eCBzYW5zLXNlcmlmIjsKLQotY2xhc3MgQ2FudmFzU3Ryb2tlU3R5bGVBcHBsaWVyIDogcHVibGlj
IFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQ2FudmFzU3Ryb2tlU3R5bGVBcHBs
aWVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UqIGNhbnZhc0NvbnRleHQpCi0gICAgICAg
IDogbV9jYW52YXNDb250ZXh0KGNhbnZhc0NvbnRleHQpCi0gICAgeworc3RhdGljIGNvbnN0ZXhw
ciBjaGFyIERlZmF1bHRGb250RmFtaWx5W10gPSAic2Fucy1zZXJpZiI7CitzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBEZWZhdWx0Rm9udCA9ICIxMHB4IHNhbnMtc2VyaWYiX3M7CisKK3N0
YXRpYyBDYW52YXNMaW5lQ2FwIHRvQ2FudmFzTGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit7Cisg
ICAgc3dpdGNoIChsaW5lQ2FwKSB7CisgICAgY2FzZSBCdXR0Q2FwOgorICAgICAgICByZXR1cm4g
Q2FudmFzTGluZUNhcDo6QnV0dDsKKyAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICByZXR1cm4g
Q2FudmFzTGluZUNhcDo6Um91bmQ7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIHJldHVy
biBDYW52YXNMaW5lQ2FwOjpTcXVhcmU7CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBDYW52YXNMaW5lQ2FwOjpCdXR0OworfQogCi0gICAgdm9pZCBzdHJva2VT
dHlsZShHcmFwaGljc0NvbnRleHQqIGMpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBjLT5zZXRT
dHJva2VUaGlja25lc3MobV9jYW52YXNDb250ZXh0LT5saW5lV2lkdGgoKSk7Ci0gICAgICAgIGMt
PnNldExpbmVDYXAobV9jYW52YXNDb250ZXh0LT5nZXRMaW5lQ2FwKCkpOwotICAgICAgICBjLT5z
ZXRMaW5lSm9pbihtX2NhbnZhc0NvbnRleHQtPmdldExpbmVKb2luKCkpOwotICAgICAgICBjLT5z
ZXRNaXRlckxpbWl0KG1fY2FudmFzQ29udGV4dC0+bWl0ZXJMaW1pdCgpKTsKLSAgICAgICAgY29u
c3QgVmVjdG9yPGZsb2F0PiYgbGluZURhc2ggPSBtX2NhbnZhc0NvbnRleHQtPmdldExpbmVEYXNo
KCk7Ci0gICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlF
bGVtZW50PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGMtPnNldExpbmVEYXNoKGNvbnZlcnRlZExp
bmVEYXNoLCBtX2NhbnZhc0NvbnRleHQtPmxpbmVEYXNoT2Zmc2V0KCkpOworc3RhdGljIExpbmVD
YXAgZnJvbUNhbnZhc0xpbmVDYXAoQ2FudmFzTGluZUNhcCBjYW52YXNMaW5lQ2FwKQoreworICAg
IHN3aXRjaCAoY2FudmFzTGluZUNhcCkgeworICAgIGNhc2UgQ2FudmFzTGluZUNhcDo6QnV0dDoK
KyAgICAgICAgcmV0dXJuIEJ1dHRDYXA7CisgICAgY2FzZSBDYW52YXNMaW5lQ2FwOjpSb3VuZDoK
KyAgICAgICAgcmV0dXJuIFJvdW5kQ2FwOworICAgIGNhc2UgQ2FudmFzTGluZUNhcDo6U3F1YXJl
OgorICAgICAgICByZXR1cm4gU3F1YXJlQ2FwOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gQnV0dENhcDsKK30KIAotcHJpdmF0ZToKLSAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlKiBtX2NhbnZhc0NvbnRleHQ7Ci19Oworc3RhdGljIENhbnZhc0xp
bmVKb2luIHRvQ2FudmFzTGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit7CisgICAgc3dpdGNo
IChsaW5lSm9pbikgeworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICByZXR1cm4gQ2FudmFz
TGluZUpvaW46OlJvdW5kOworICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICByZXR1cm4gQ2Fu
dmFzTGluZUpvaW46OkJldmVsOworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgICAgICByZXR1cm4g
Q2FudmFzTGluZUpvaW46Ok1pdGVyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gQ2FudmFzTGluZUpvaW46OlJvdW5kOworfQorCitzdGF0aWMgTGluZUpvaW4g
ZnJvbUNhbnZhc0xpbmVKb2luKENhbnZhc0xpbmVKb2luIGNhbnZhc0xpbmVKb2luKQoreworICAg
IHN3aXRjaCAoY2FudmFzTGluZUpvaW4pIHsKKyAgICBjYXNlIENhbnZhc0xpbmVKb2luOjpSb3Vu
ZDoKKyAgICAgICAgcmV0dXJuIFJvdW5kSm9pbjsKKyAgICBjYXNlIENhbnZhc0xpbmVKb2luOjpC
ZXZlbDoKKyAgICAgICAgcmV0dXJuIEJldmVsSm9pbjsKKyAgICBjYXNlIENhbnZhc0xpbmVKb2lu
OjpNaXRlcjoKKyAgICAgICAgcmV0dXJuIE1pdGVySm9pbjsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJvdW5kSm9pbjsKK30KKworc3RhdGljIENhbnZhc1Rl
eHRBbGlnbiB0b0NhbnZhc1RleHRBbGlnbihUZXh0QWxpZ24gdGV4dEFsaWduKQoreworICAgIHN3
aXRjaCAodGV4dEFsaWduKSB7CisgICAgY2FzZSBTdGFydFRleHRBbGlnbjoKKyAgICAgICAgcmV0
dXJuIENhbnZhc1RleHRBbGlnbjo6U3RhcnQ7CisgICAgY2FzZSBFbmRUZXh0QWxpZ246CisgICAg
ICAgIHJldHVybiBDYW52YXNUZXh0QWxpZ246OkVuZDsKKyAgICBjYXNlIExlZnRUZXh0QWxpZ246
CisgICAgICAgIHJldHVybiBDYW52YXNUZXh0QWxpZ246OkxlZnQ7CisgICAgY2FzZSBSaWdodFRl
eHRBbGlnbjoKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6UmlnaHQ7CisgICAgY2Fz
ZSBDZW50ZXJUZXh0QWxpZ246CisgICAgICAgIHJldHVybiBDYW52YXNUZXh0QWxpZ246OkNlbnRl
cjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENhbnZhc1Rl
eHRBbGlnbjo6U3RhcnQ7Cit9CisKK3N0YXRpYyBUZXh0QWxpZ24gZnJvbUNhbnZhc1RleHRBbGln
bihDYW52YXNUZXh0QWxpZ24gY2FudmFzVGV4dEFsaWduKQoreworICAgIHN3aXRjaCAoY2FudmFz
VGV4dEFsaWduKSB7CisgICAgY2FzZSBDYW52YXNUZXh0QWxpZ246OlN0YXJ0OgorICAgICAgICBy
ZXR1cm4gU3RhcnRUZXh0QWxpZ247CisgICAgY2FzZSBDYW52YXNUZXh0QWxpZ246OkVuZDoKKyAg
ICAgICAgcmV0dXJuIEVuZFRleHRBbGlnbjsKKyAgICBjYXNlIENhbnZhc1RleHRBbGlnbjo6TGVm
dDoKKyAgICAgICAgcmV0dXJuIExlZnRUZXh0QWxpZ247CisgICAgY2FzZSBDYW52YXNUZXh0QWxp
Z246OlJpZ2h0OgorICAgICAgICByZXR1cm4gUmlnaHRUZXh0QWxpZ247CisgICAgY2FzZSBDYW52
YXNUZXh0QWxpZ246OkNlbnRlcjoKKyAgICAgICAgcmV0dXJuIENlbnRlclRleHRBbGlnbjsKKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0YXJ0VGV4dEFsaWdu
OworfQorCitzdGF0aWMgQ2FudmFzVGV4dEJhc2VsaW5lIHRvQ2FudmFzVGV4dEJhc2VsaW5lKFRl
eHRCYXNlbGluZSB0ZXh0QmFzZWxpbmUpCit7CisgICAgc3dpdGNoICh0ZXh0QmFzZWxpbmUpIHsK
KyAgICBjYXNlIFRvcFRleHRCYXNlbGluZToKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNl
bGluZTo6VG9wOworICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNlbGluZToKKyAgICAgICAgcmV0dXJu
IENhbnZhc1RleHRCYXNlbGluZTo6SGFuZ2luZzsKKyAgICBjYXNlIE1pZGRsZVRleHRCYXNlbGlu
ZToKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6TWlkZGxlOworICAgIGNhc2Ug
QWxwaGFiZXRpY1RleHRCYXNlbGluZToKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGlu
ZTo6QWxwaGFiZXRpYzsKKyAgICBjYXNlIElkZW9ncmFwaGljVGV4dEJhc2VsaW5lOgorICAgICAg
ICByZXR1cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpJZGVvZ3JhcGhpYzsKKyAgICBjYXNlIEJvdHRv
bVRleHRCYXNlbGluZToKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6Qm90dG9t
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ2FudmFzVGV4
dEJhc2VsaW5lOjpUb3A7Cit9CisKK3N0YXRpYyBUZXh0QmFzZWxpbmUgZnJvbUNhbnZhc1RleHRC
YXNlbGluZShDYW52YXNUZXh0QmFzZWxpbmUgY2FudmFzVGV4dEJhc2VsaW5lKQoreworICAgIHN3
aXRjaCAoY2FudmFzVGV4dEJhc2VsaW5lKSB7CisgICAgY2FzZSBDYW52YXNUZXh0QmFzZWxpbmU6
OlRvcDoKKyAgICAgICAgcmV0dXJuIFRvcFRleHRCYXNlbGluZTsKKyAgICBjYXNlIENhbnZhc1Rl
eHRCYXNlbGluZTo6SGFuZ2luZzoKKyAgICAgICAgcmV0dXJuIEhhbmdpbmdUZXh0QmFzZWxpbmU7
CisgICAgY2FzZSBDYW52YXNUZXh0QmFzZWxpbmU6Ok1pZGRsZToKKyAgICAgICAgcmV0dXJuIE1p
ZGRsZVRleHRCYXNlbGluZTsKKyAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6QWxwaGFiZXRp
YzoKKyAgICAgICAgcmV0dXJuIEFscGhhYmV0aWNUZXh0QmFzZWxpbmU7CisgICAgY2FzZSBDYW52
YXNUZXh0QmFzZWxpbmU6OklkZW9ncmFwaGljOgorICAgICAgICByZXR1cm4gSWRlb2dyYXBoaWNU
ZXh0QmFzZWxpbmU7CisgICAgY2FzZSBDYW52YXNUZXh0QmFzZWxpbmU6OkJvdHRvbToKKyAgICAg
ICAgcmV0dXJuIEJvdHRvbVRleHRCYXNlbGluZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFRvcFRleHRCYXNlbGluZTsKK30KIAogQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZShDYW52YXNCYXNlJiBj
YW52YXMsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCiAgICAgOiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KGNhbnZhcykKQEAgLTE2NCw2ICsyNzEsMTggQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpyZXNldCgpCiAgICAgbV9yZWNvcmRpbmdDb250ZXh0ID0g
bnVsbHB0cjsKIH0KIAorY29uc3QgQXRvbVN0cmluZyYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6ZGVmYXVsdEZvbnRGYW1pbHkoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9tU3RyaW5nPiBmYW1pbHkgPSBBdG9tU3RyaW5nIHsgRGVmYXVsdEZvbnRGYW1pbHksIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsIH07CisgICAgcmV0dXJuIGZhbWlseS5nZXQoKTsK
K30KKworc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdENhbnZhc0ZvbnQoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZvbnQgPSBEZWZhdWx0Rm9udDsKKyAgICByZXR1
cm4gZm9udC5nZXQoKTsKK30KKwogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6
OlN0YXRlKCkKICAgICA6IHN0cm9rZVN0eWxlKENvbG9yOjpibGFjaykKICAgICAsIGZpbGxTdHls
ZShDb2xvcjo6YmxhY2spCkBAIC0xODMsNjggKzMwMiw2MyBAQCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpTdGF0ZTo6U3RhdGUoKQogICAgICwgdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWdu
KQogICAgICwgdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCiAgICAgLCBkaXJl
Y3Rpb24oRGlyZWN0aW9uOjpJbmhlcml0KQotICAgICwgdW5wYXJzZWRGb250KERlZmF1bHRGb250
KQotewotfQotCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6U3RhdGUoY29u
c3QgU3RhdGUmIG90aGVyKQotICAgIDogdW5wYXJzZWRTdHJva2VDb2xvcihvdGhlci51bnBhcnNl
ZFN0cm9rZUNvbG9yKQotICAgICwgdW5wYXJzZWRGaWxsQ29sb3Iob3RoZXIudW5wYXJzZWRGaWxs
Q29sb3IpCi0gICAgLCBzdHJva2VTdHlsZShvdGhlci5zdHJva2VTdHlsZSkKLSAgICAsIGZpbGxT
dHlsZShvdGhlci5maWxsU3R5bGUpCi0gICAgLCBsaW5lV2lkdGgob3RoZXIubGluZVdpZHRoKQot
ICAgICwgbGluZUNhcChvdGhlci5saW5lQ2FwKQotICAgICwgbGluZUpvaW4ob3RoZXIubGluZUpv
aW4pCi0gICAgLCBtaXRlckxpbWl0KG90aGVyLm1pdGVyTGltaXQpCi0gICAgLCBzaGFkb3dPZmZz
ZXQob3RoZXIuc2hhZG93T2Zmc2V0KQotICAgICwgc2hhZG93Qmx1cihvdGhlci5zaGFkb3dCbHVy
KQotICAgICwgc2hhZG93Q29sb3Iob3RoZXIuc2hhZG93Q29sb3IpCi0gICAgLCBnbG9iYWxBbHBo
YShvdGhlci5nbG9iYWxBbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZShvdGhlci5nbG9iYWxD
b21wb3NpdGUpCi0gICAgLCBnbG9iYWxCbGVuZChvdGhlci5nbG9iYWxCbGVuZCkKLSAgICAsIHRy
YW5zZm9ybShvdGhlci50cmFuc2Zvcm0pCi0gICAgLCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKG90
aGVyLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCi0gICAgLCBsaW5lRGFzaE9mZnNldChvdGhlci5s
aW5lRGFzaE9mZnNldCkKLSAgICAsIGltYWdlU21vb3RoaW5nRW5hYmxlZChvdGhlci5pbWFnZVNt
b290aGluZ0VuYWJsZWQpCi0gICAgLCBpbWFnZVNtb290aGluZ1F1YWxpdHkob3RoZXIuaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5KQotICAgICwgdGV4dEFsaWduKG90aGVyLnRleHRBbGlnbikKLSAgICAs
IHRleHRCYXNlbGluZShvdGhlci50ZXh0QmFzZWxpbmUpCi0gICAgLCBkaXJlY3Rpb24ob3RoZXIu
ZGlyZWN0aW9uKQotICAgICwgdW5wYXJzZWRGb250KG90aGVyLnVucGFyc2VkRm9udCkKLSAgICAs
IGZvbnQob3RoZXIuZm9udCkKLXsKLX0KLQotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
U3RhdGUmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpvcGVyYXRvcj0oY29u
c3QgU3RhdGUmIG90aGVyKQotewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotCi0gICAgdW5wYXJzZWRTdHJva2VDb2xvciA9IG90aGVyLnVucGFyc2VkU3Ry
b2tlQ29sb3I7Ci0gICAgdW5wYXJzZWRGaWxsQ29sb3IgPSBvdGhlci51bnBhcnNlZEZpbGxDb2xv
cjsKLSAgICBzdHJva2VTdHlsZSA9IG90aGVyLnN0cm9rZVN0eWxlOwotICAgIGZpbGxTdHlsZSA9
IG90aGVyLmZpbGxTdHlsZTsKLSAgICBsaW5lV2lkdGggPSBvdGhlci5saW5lV2lkdGg7Ci0gICAg
bGluZUNhcCA9IG90aGVyLmxpbmVDYXA7Ci0gICAgbGluZUpvaW4gPSBvdGhlci5saW5lSm9pbjsK
LSAgICBtaXRlckxpbWl0ID0gb3RoZXIubWl0ZXJMaW1pdDsKLSAgICBzaGFkb3dPZmZzZXQgPSBv
dGhlci5zaGFkb3dPZmZzZXQ7Ci0gICAgc2hhZG93Qmx1ciA9IG90aGVyLnNoYWRvd0JsdXI7Ci0g
ICAgc2hhZG93Q29sb3IgPSBvdGhlci5zaGFkb3dDb2xvcjsKLSAgICBnbG9iYWxBbHBoYSA9IG90
aGVyLmdsb2JhbEFscGhhOwotICAgIGdsb2JhbENvbXBvc2l0ZSA9IG90aGVyLmdsb2JhbENvbXBv
c2l0ZTsKLSAgICBnbG9iYWxCbGVuZCA9IG90aGVyLmdsb2JhbEJsZW5kOwotICAgIHRyYW5zZm9y
bSA9IG90aGVyLnRyYW5zZm9ybTsKLSAgICBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtID0gb3RoZXIu
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsKLSAgICBpbWFnZVNtb290aGluZ0VuYWJsZWQgPSBvdGhl
ci5pbWFnZVNtb290aGluZ0VuYWJsZWQ7Ci0gICAgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gb3Ro
ZXIuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwotICAgIHRleHRBbGlnbiA9IG90aGVyLnRleHRBbGln
bjsKLSAgICB0ZXh0QmFzZWxpbmUgPSBvdGhlci50ZXh0QmFzZWxpbmU7Ci0gICAgZGlyZWN0aW9u
ID0gb3RoZXIuZGlyZWN0aW9uOwotICAgIHVucGFyc2VkRm9udCA9IG90aGVyLnVucGFyc2VkRm9u
dDsKLSAgICBmb250ID0gb3RoZXIuZm9udDsKKyAgICAsIHVucGFyc2VkRm9udChkZWZhdWx0Q2Fu
dmFzRm9udCgpKQoreworfQogCi0gICAgcmV0dXJuICp0aGlzOworU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpmb250U3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
IWZvbnQucmVhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRDYW52YXNGb250KCk7CisK
KyAgICBTdHJpbmdCdWlsZGVyIHNlcmlhbGl6ZWRGb250OworICAgIGNvbnN0IGF1dG8mIGZvbnQg
PSB0aGlzLT5mb250LmZvbnREZXNjcmlwdGlvbigpOworCisgICAgYXV0byBpdGFsaWMgPSBmb250
Lml0YWxpYygpID8gIml0YWxpYyAiIDogIiI7CisgICAgYXV0byBzbWFsbENhcHMgPSBmb250LnZh
cmlhbnRDYXBzKCkgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCA/ICJzbWFsbC1jYXBzICIgOiAi
IjsKKyAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQoaXRhbGljLCBzbWFsbENhcHMsIGZvbnQuY29t
cHV0ZWRQaXhlbFNpemUoKSwgInB4Iik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Zm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nVmlldyBmYW1pbHkgPSBm
b250LmZhbWlseUF0KGkpOworICAgICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQt
IikpCisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHkuc3Vic3RyaW5nKDgpOworCisgICAgICAg
IGF1dG8gc2VwYXJhdG9yID0gaSA/ICIsICIgOiAiICI7CisgICAgICAgIGF1dG8gcXVvdGUgPSBm
YW1pbHkuY29udGFpbnMoJyAnKSA/ICJcIiIgOiAiIjsKKyAgICAgICAgc2VyaWFsaXplZEZvbnQu
YXBwZW5kKHNlcGFyYXRvciwgcXVvdGUsIGZhbWlseSwgcXVvdGUpOworICAgIH0KKworICAgIHJl
dHVybiBzZXJpYWxpemVkRm9udC50b1N0cmluZygpOworfQorCitDYW52YXNMaW5lQ2FwIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNMaW5lQ2FwKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdG9DYW52YXNMaW5lQ2FwKGxpbmVDYXApOworfQorCitDYW52YXNMaW5lSm9p
biBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Y2FudmFzTGluZUpvaW4oKSBj
b25zdAoreworICAgIHJldHVybiB0b0NhbnZhc0xpbmVKb2luKGxpbmVKb2luKTsKK30KKworQ2Fu
dmFzVGV4dEFsaWduIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNU
ZXh0QWxpZ24oKSBjb25zdAoreworICAgIHJldHVybiB0b0NhbnZhc1RleHRBbGlnbih0ZXh0QWxp
Z24pOworfQorCitDYW52YXNUZXh0QmFzZWxpbmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6U3RhdGU6OmNhbnZhc1RleHRCYXNlbGluZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvQ2Fu
dmFzVGV4dEJhc2VsaW5lKHRleHRCYXNlbGluZSk7Cit9CisKK1N0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Z2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29tcG9zaXRlT3BlcmF0b3JOYW1lKGdsb2JhbENvbXBvc2l0
ZSwgZ2xvYmFsQmxlbmQpOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6U3RhdGU6OnNoYWRvd0NvbG9yU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckhUTUwoc2hhZG93Q29sb3IpOwogfQogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpGb250UHJveHk6On5Gb250UHJveHkoKQpAQCAtNDE1LDExICs1MjksNiBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxTdHlsZShDYW52YXNTdHlsZSBz
dHlsZSkKICAgICBzdGF0ZS51bnBhcnNlZEZpbGxDb2xvciA9IFN0cmluZygpOwogfQogCi1mbG9h
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpsaW5lV2lkdGgoKSBjb25zdAotewotICAg
IHJldHVybiBzdGF0ZSgpLmxpbmVXaWR0aDsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCiB7CiAgICAgaWYgKCEoc3RkOjpp
c2Zpbml0ZSh3aWR0aCkgJiYgd2lkdGggPiAwKSkKQEAgLTQzNCw0MSArNTQzLDYgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCiAg
ICAgYy0+c2V0U3Ryb2tlVGhpY2tuZXNzKHdpZHRoKTsKIH0KIAotc3RhdGljIENhbnZhc0xpbmVD
YXAgdG9DYW52YXNMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBzd2l0Y2ggKGxpbmVD
YXApIHsKLSAgICBjYXNlIEJ1dHRDYXA6Ci0gICAgICAgIHJldHVybiBDYW52YXNMaW5lQ2FwOjpC
dXR0OwotICAgIGNhc2UgUm91bmRDYXA6Ci0gICAgICAgIHJldHVybiBDYW52YXNMaW5lQ2FwOjpS
b3VuZDsKLSAgICBjYXNlIFNxdWFyZUNhcDoKLSAgICAgICAgcmV0dXJuIENhbnZhc0xpbmVDYXA6
OlNxdWFyZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
Q2FudmFzTGluZUNhcDo6QnV0dDsKLX0KLQotc3RhdGljIExpbmVDYXAgZnJvbUNhbnZhc0xpbmVD
YXAoQ2FudmFzTGluZUNhcCBjYW52YXNMaW5lQ2FwKQotewotICAgIHN3aXRjaCAoY2FudmFzTGlu
ZUNhcCkgewotICAgIGNhc2UgQ2FudmFzTGluZUNhcDo6QnV0dDoKLSAgICAgICAgcmV0dXJuIEJ1
dHRDYXA7Ci0gICAgY2FzZSBDYW52YXNMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAgcmV0dXJuIFJv
dW5kQ2FwOwotICAgIGNhc2UgQ2FudmFzTGluZUNhcDo6U3F1YXJlOgotICAgICAgICByZXR1cm4g
U3F1YXJlQ2FwOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gQnV0dENhcDsKLX0KLQotQ2FudmFzTGluZUNhcCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpsaW5lQ2FwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdG9DYW52YXNMaW5lQ2FwKHN0
YXRlKCkubGluZUNhcCk7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2V0TGluZUNhcChDYW52YXNMaW5lQ2FwIGNhbnZhc0xpbmVDYXApCiB7CiAgICAgYXV0byBsaW5l
Q2FwID0gZnJvbUNhbnZhc0xpbmVDYXAoY2FudmFzTGluZUNhcCk7CkBAIC00OTcsNDEgKzU3MSw2
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0TGluZUNhcChjb25zdCBT
dHJpbmcmIHN0cmluZ1ZhbHVlKQogICAgIHNldExpbmVDYXAoY2FwKTsKIH0KIAotc3RhdGljIENh
bnZhc0xpbmVKb2luIHRvQ2FudmFzTGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAg
c3dpdGNoIChsaW5lSm9pbikgewotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICByZXR1cm4g
Q2FudmFzTGluZUpvaW46OlJvdW5kOwotICAgIGNhc2UgQmV2ZWxKb2luOgotICAgICAgICByZXR1
cm4gQ2FudmFzTGluZUpvaW46OkJldmVsOwotICAgIGNhc2UgTWl0ZXJKb2luOgotICAgICAgICBy
ZXR1cm4gQ2FudmFzTGluZUpvaW46Ok1pdGVyOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBDYW52YXNMaW5lSm9pbjo6Um91bmQ7Ci19Ci0KLXN0YXRpYyBM
aW5lSm9pbiBmcm9tQ2FudmFzTGluZUpvaW4oQ2FudmFzTGluZUpvaW4gY2FudmFzTGluZUpvaW4p
Ci17Ci0gICAgc3dpdGNoIChjYW52YXNMaW5lSm9pbikgewotICAgIGNhc2UgQ2FudmFzTGluZUpv
aW46OlJvdW5kOgotICAgICAgICByZXR1cm4gUm91bmRKb2luOwotICAgIGNhc2UgQ2FudmFzTGlu
ZUpvaW46OkJldmVsOgotICAgICAgICByZXR1cm4gQmV2ZWxKb2luOwotICAgIGNhc2UgQ2FudmFz
TGluZUpvaW46Ok1pdGVyOgotICAgICAgICByZXR1cm4gTWl0ZXJKb2luOwotICAgIH0KLSAgICAK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUm91bmRKb2luOwotfQotCi1D
YW52YXNMaW5lSm9pbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpsaW5lSm9pbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHRvQ2FudmFzTGluZUpvaW4oc3RhdGUoKS5saW5lSm9pbik7Ci19
Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0TGluZUpvaW4oQ2FudmFz
TGluZUpvaW4gY2FudmFzTGluZUpvaW4pCiB7CiAgICAgYXV0byBsaW5lSm9pbiA9IGZyb21DYW52
YXNMaW5lSm9pbihjYW52YXNMaW5lSm9pbik7CkBAIC01NjAsMTEgKzU5OSw2IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0TGluZUpvaW4oY29uc3QgU3RyaW5nJiBzdHJp
bmdWYWx1ZSkKICAgICBzZXRMaW5lSm9pbihqb2luKTsKIH0KIAotZmxvYXQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6bWl0ZXJMaW1pdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRl
KCkubWl0ZXJMaW1pdDsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewogICAgIGlmICghKHN0ZDo6aXNmaW5pdGUobGlt
aXQpICYmIGxpbWl0ID4gMCkpCkBAIC01NzksMTEgKzYxMyw2IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKICAgICBjLT5zZXRN
aXRlckxpbWl0KGxpbWl0KTsKIH0KIAotZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2hhZG93T2Zmc2V0WCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRlKCkuc2hhZG93T2Zm
c2V0LndpZHRoKCk7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0
U2hhZG93T2Zmc2V0WChmbG9hdCB4KQogewogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4KSkKQEAg
LTU5NSwxMSArNjI0LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRT
aGFkb3dPZmZzZXRYKGZsb2F0IHgpCiAgICAgYXBwbHlTaGFkb3coKTsKIH0KIAotZmxvYXQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hhZG93T2Zmc2V0WSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotfQotCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvd09mZnNldFkoZmxvYXQgeSkKIHsKICAgICBp
ZiAoIXN0ZDo6aXNmaW5pdGUoeSkpCkBAIC02MTEsMTEgKzYzNSw2IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93T2Zmc2V0WShmbG9hdCB5KQogICAgIGFwcGx5
U2hhZG93KCk7CiB9CiAKLWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0JsdXIoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0JsdXI7Ci19Ci0KIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93Qmx1cihmbG9hdCBibHVy
KQogewogICAgIGlmICghKHN0ZDo6aXNmaW5pdGUoYmx1cikgJiYgYmx1ciA+PSAwKSkKQEAgLTYy
NywxMSArNjQ2LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFk
b3dCbHVyKGZsb2F0IGJsdXIpCiAgICAgYXBwbHlTaGFkb3coKTsKIH0KIAotU3RyaW5nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRvd0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoc3RhdGUoKS5zaGFkb3dDb2xvcik7Ci19Ci0KIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5n
JiBjb2xvclN0cmluZykKIHsKICAgICBDb2xvciBjb2xvciA9IHBhcnNlQ29sb3JPckN1cnJlbnRD
b2xvcihjb2xvclN0cmluZywgY2FudmFzQmFzZSgpKTsKQEAgLTY0NCwxMSArNjU4LDYgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xvcihjb25zdCBTdHJp
bmcmIGNvbG9yU3RyaW5nKQogICAgIGFwcGx5U2hhZG93KCk7CiB9CiAKLWNvbnN0IFZlY3Rvcjxm
bG9hdD4mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldExpbmVEYXNoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3RhdGUoKS5saW5lRGFzaDsKLX0KLQogc3RhdGljIGJvb2wgbGluZURh
c2hTZXF1ZW5jZUlzVmFsaWQoY29uc3QgVmVjdG9yPGZsb2F0PiYgZGFzaCkKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRhc2guc2l6ZSgpOyBpKyspIHsKQEAgLTY4NCwxMSArNjkzLDYg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRXZWJraXRMaW5lRGFzaChj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBkYXNoKQogICAgIGFwcGx5TGluZURhc2goKTsKIH0KIAotZmxv
YXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bGluZURhc2hPZmZzZXQoKSBjb25zdAot
ewotICAgIHJldHVybiBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0OwotfQotCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldExpbmVEYXNoT2Zmc2V0KGZsb2F0IG9mZnNldCkKIHsK
ICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUob2Zmc2V0KSB8fCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0
ID09IG9mZnNldCkKQEAgLTcxMCwxMSArNzE0LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjphcHBseUxpbmVEYXNoKCkgY29uc3QKICAgICBjLT5zZXRMaW5lRGFzaChjb252
ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUoKS5saW5lRGFzaE9mZnNldCk7CiB9CiAKLWZsb2F0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdsb2JhbEFscGhhKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3RhdGUoKS5nbG9iYWxBbHBoYTsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRHbG9iYWxBbHBoYShmbG9hdCBhbHBoYSkKIHsKICAgICBpZiAoIShhbHBoYSA+
PSAwICYmIGFscGhhIDw9IDEpKQpAQCAtNzI5LDExICs3MjgsNiBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbEFscGhhKGZsb2F0IGFscGhhKQogICAgIGMtPnNl
dEFscGhhKGFscGhhKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
Omdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVu
ZCk7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29t
cG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlcmF0aW9uKQogewogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIG9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7CkBAIC0xMDA2LDcg
KzEwMDAsNyBAQCBzdGF0aWMgYm9vbCB2YWxpZGF0ZVJlY3RGb3JDYW52YXMoZmxvYXQmIHgsIGZs
b2F0JiB5LCBmbG9hdCYgd2lkdGgsIGZsb2F0JiBoZWlnaAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzRnVsbENhbnZhc0NvbXBvc2l0
ZU1vZGUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCitzdGF0aWMgYm9vbCBpc0Z1bGxDYW52YXNDb21w
b3NpdGVNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIC8vIFNlZSA0LjguMTEuMS4z
IENvbXBvc2l0aW5nCiAgICAgLy8gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3AgYW5kIENv
bXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCBhcmUgbm90IGxpc3RlZCBoZXJlIGFzIHRo
ZSBwbGF0Zm9ybXMgYWxyZWFkeQpAQCAtMTE2NCwxNCArMTE1OCwxMyBAQCBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZShQYXRoMkQmIHBhdGgsIGZsb2F0
IHgsIGZsb2F0CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludElu
UGF0aEludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHgsIGZsb2F0IHksIENhbnZhc0Zp
bGxSdWxlIHdpbmRpbmdSdWxlKQogewotICAgIGF1dG8qIGMgPSBkcmF3aW5nQ29udGV4dCgpOwot
ICAgIGlmICghYykKKyAgICBpZiAoIWRyYXdpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgaWYgKCFzdGF0ZS5oYXNJbnZlcnRpYmxlVHJh
bnNmb3JtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHRyYW5zZm9ybWVkUG9p
bnQgPSBzdGF0ZSgpLnRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0o
KSkubWFwUG9pbnQoRmxvYXRQb2ludCh4LCB5KSk7Ci0KKyAgICBhdXRvIHRyYW5zZm9ybWVkUG9p
bnQgPSBzdGF0ZS50cmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkp
Lm1hcFBvaW50KEZsb2F0UG9pbnQoeCwgeSkpOwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh0cmFu
c2Zvcm1lZFBvaW50LngoKSkgfHwgIXN0ZDo6aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC55KCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTExODAsMTggKzExNzMsMjcgQEAgYm9vbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5QYXRoSW50ZXJuYWwoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQKIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpp
c1BvaW50SW5TdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB4LCBmbG9hdCB5
KQogewotICAgIGF1dG8qIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKKyAgICBp
ZiAoIWRyYXdpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0
YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CisgICAgaWYgKCFzdGF0ZS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHRyYW5zZm9ybWVkUG9pbnQgPSBzdGF0ZSgpLnRyYW5z
Zm9ybS5pbnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQoRmxvYXRQ
b2ludCh4LCB5KSk7CisgICAgYXV0byB0cmFuc2Zvcm1lZFBvaW50ID0gc3RhdGUudHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZU9yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBQb2ludChGbG9hdFBvaW50
KHgsIHkpKTsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC54KCkpIHx8
ICFzdGQ6OmlzZmluaXRlKHRyYW5zZm9ybWVkUG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgQ2FudmFzU3Ryb2tlU3R5bGVBcHBsaWVyIGFwcGxpZXIodGhpcyk7Ci0gICAg
cmV0dXJuIHBhdGguc3Ryb2tlQ29udGFpbnMoYXBwbGllciwgdHJhbnNmb3JtZWRQb2ludCk7Cisg
ICAgcmV0dXJuIHBhdGguc3Ryb2tlQ29udGFpbnModHJhbnNmb3JtZWRQb2ludCwgWyZzdGF0ZV0g
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhzdGF0ZS5saW5lV2lkdGgpOworICAgICAgICBjb250ZXh0LnNldExpbmVDYXAoc3Rh
dGUubGluZUNhcCk7CisgICAgICAgIGNvbnRleHQuc2V0TGluZUpvaW4oc3RhdGUubGluZUpvaW4p
OworICAgICAgICBjb250ZXh0LnNldE1pdGVyTGltaXQoc3RhdGUubWl0ZXJMaW1pdCk7CisgICAg
ICAgIGF1dG8mIGxpbmVEYXNoID0gc3RhdGUubGluZURhc2g7CisgICAgICAgIERhc2hBcnJheSBj
b252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29udmVydGVkTGlu
ZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7Cisg
ICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVE
YXNoT2Zmc2V0KTsKKyAgICB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkKQEAgLTIwMDcsMjQgKzIwMDksMjIgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRl
cm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKFQKIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWREcmF3RW50aXJlQ2FudmFzKCkKIHsK
LSAgICBkaWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZhc0Jhc2UoKS5z
aXplKCkpLCBDYW52YXNEaWREcmF3QXBwbHlDbGlwKTsKKyAgICBkaWREcmF3KEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZhc0Jhc2UoKS5zaXplKCkpLCBEaWREcmF3T3B0aW9uOjpB
cHBseUNsaXApOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpZERy
YXcoY29uc3QgRmxvYXRSZWN0JiByLCB1bnNpZ25lZCBvcHRpb25zKQordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgT3B0aW9uU2V0
PERpZERyYXdPcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgYXV0byogYyA9IGRyYXdpbmdDb250ZXh0
KCk7Ci0gICAgaWYgKCFjKQorICAgIGlmICghZHJhd2luZ0NvbnRleHQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gcjsKLSAgICBpZiAob3B0aW9ucyAm
IENhbnZhc0RpZERyYXdBcHBseVRyYW5zZm9ybSkgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtID0gc3RhdGUoKS50cmFuc2Zvcm07Ci0gICAgICAgIGRpcnR5UmVjdCA9IGN0bS5tYXBSZWN0
KHIpOwotICAgIH0KIAotICAgIGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5U2hhZG93
ICYmIHN0YXRlKCkuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCkpIHsKKyAgICBpZiAob3B0aW9ucy5j
b250YWlucyhEaWREcmF3T3B0aW9uOjpBcHBseVRyYW5zZm9ybSkpCisgICAgICAgIGRpcnR5UmVj
dCA9IHN0YXRlKCkudHJhbnNmb3JtLm1hcFJlY3QoZGlydHlSZWN0KTsKKworICAgIGlmIChvcHRp
b25zLmNvbnRhaW5zKERpZERyYXdPcHRpb246OkFwcGx5U2hhZG93KSAmJiBzdGF0ZSgpLnNoYWRv
d0NvbG9yLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVk
IGFmdGVyIHRyYW5zZm9ybWF0aW9uCiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5
UmVjdCk7CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgpLnNoYWRvd09mZnNldCk7CkBA
IC0yMDMyLDExICsyMDMyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpk
aWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICAgICAgICAgZGly
dHlSZWN0LnVuaXRlKHNoYWRvd1JlY3QpOwogICAgIH0KIAotICAgIGlmIChvcHRpb25zICYgQ2Fu
dmFzRGlkRHJhd0FwcGx5Q2xpcCkgewotICAgICAgICAvLyBGSVhNRTogYXBwbHkgdGhlIGN1cnJl
bnQgY2xpcCB0byB0aGUgcmVjdGFuZ2xlLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGdldCB0aGUg
Y2xpcAotICAgICAgICAvLyBiYWNrIG91dCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0byB0
YWtlIGNsaXAgaW50byBhY2NvdW50IGZvciBpbmNyZW1lbnRhbCBwYWludGluZywKLSAgICAgICAg
Ly8gd2UnZCBoYXZlIHRvIGtlZXAgdGhlIGNsaXAgcGF0aCBhcm91bmQuCi0gICAgfQorICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXMgbm90IGFwcGx5IHRoZSBjbGlwIGJlY2F1c2Ugd2UgaGF2ZSBubyB3
YXkgb2YgcmVhZGluZyB0aGUgY2xpcCBvdXQgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KIAogICAg
IGNhbnZhc0Jhc2UoKS5kaWREcmF3KGRpcnR5UmVjdCk7CiB9CkBAIC0yMTU1LDEzICsyMTUxLDgg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmdldEltYWdlRGF0YShmbG9hdAogCiAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlRGF0YVJlY3QpOwogICAgIGlmICghaW1hZ2VEYXRhKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxk
ZXIgY29uc29sZU1lc3NhZ2U7Ci0gICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2Fz
ICIpOwotICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53
aWR0aCgpKTsKLSAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiIHggIik7Ci0g
ICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFSZWN0LmhlaWdodCgp
KTsKLQotICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIGNvbnNvbGVNZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICBjYW52YXNCYXNlKCkuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpS
ZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsCisgICAgICAgICAgICBtYWtlU3RyaW5nKCJV
bmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAi
LCBpbWFnZURhdGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0K
IApAQCAtMjIwNyw3ICsyMTk4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKICAgICBpZiAo
IXNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIElu
dFBvaW50KGRlc3RPZmZzZXQpKTsKIAotICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERy
YXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKKyAgICBk
aWREcmF3KGRlc3RSZWN0LCB7IH0pOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNs
aXAKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppbmZsYXRlU3Ryb2tl
UmVjdChGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0yMjM5LDExICsyMjMwLDYgQEAgc3RhdGlj
IGlubGluZSBJbnRlcnBvbGF0aW9uUXVhbGl0eSBzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFs
aXR5KEltYWdlU21vb3RoaW4KICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzsK
IH07CiAKLWF1dG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aW1hZ2VTbW9vdGhpbmdR
dWFsaXR5KCkgY29uc3QgLT4gSW1hZ2VTbW9vdGhpbmdRdWFsaXR5Ci17Ci0gICAgcmV0dXJuIHN0
YXRlKCkuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldEltYWdlU21vb3RoaW5nUXVhbGl0eShJbWFnZVNtb290aGluZ1F1YWxp
dHkgcXVhbGl0eSkKIHsKICAgICBpZiAocXVhbGl0eSA9PSBzdGF0ZSgpLmltYWdlU21vb3RoaW5n
UXVhbGl0eSkKQEAgLTIyNTksMTEgKzIyNDUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldEltYWdlU21vb3RoaW5nUXVhbGl0eShJbWFnZVNtb290aGluZ1F1YWxpdAog
ICAgICAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHNtb290aGluZ1Rv
SW50ZXJwb2xhdGlvblF1YWxpdHkocXVhbGl0eSkpOwogfQogCi1ib29sIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwotfQotCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7CiAgICAgaWYgKGVuYWJsZWQgPT0gc3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQpCkBA
IC0yMjg2LDgyICsyMjY3LDYgQEAgUmVmPFBhdGgyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Z2V0UGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIFBhdGgyRDo6Y3JlYXRlKG1fcGF0aCk7
CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmb250KCkgY29uc3QK
LXsKLSAgICBpZiAoIXN0YXRlKCkuZm9udC5yZWFsaXplZCgpKQotICAgICAgICByZXR1cm4gRGVm
YXVsdEZvbnQ7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHNlcmlhbGl6ZWRGb250OwotICAgIGNvbnN0
IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlKCkuZm9udC5mb250RGVzY3JpcHRpb24oKTsK
LQotICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgIHNlcmlhbGl6ZWRG
b250LmFwcGVuZExpdGVyYWwoIml0YWxpYyAiKTsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnZh
cmlhbnRDYXBzKCkgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCkKLSAgICAgICAgc2VyaWFsaXpl
ZEZvbnQuYXBwZW5kTGl0ZXJhbCgic21hbGwtY2FwcyAiKTsKLQotICAgIHNlcmlhbGl6ZWRGb250
LmFwcGVuZE51bWJlcihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSk7Ci0gICAg
c2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJhbCgicHgiKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChpKQotICAgICAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kKCcsJyk7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBhcHBlbmQgZmFtaWx5IGRpcmVjdGx5IHRvIHNlcmlhbGl6
ZWRGb250IHJhdGhlciB0aGFuIGJ1aWxkaW5nIGEgdGVtcG9yYXJ5IHN0cmluZy4KLSAgICAgICAg
U3RyaW5nIGZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsKLSAgICAgICAgaWYg
KGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQotICAgICAgICAgICAgZmFtaWx5ID0gZmFt
aWx5LnN1YnN0cmluZyg4KTsKLSAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygnICcpKQotICAg
ICAgICAgICAgZmFtaWx5ID0gbWFrZVN0cmluZygnIicsIGZhbWlseSwgJyInKTsKLQotICAgICAg
ICBzZXJpYWxpemVkRm9udC5hcHBlbmQoJyAnLCBmYW1pbHkpOwotICAgIH0KLQotICAgIHJldHVy
biBzZXJpYWxpemVkRm9udC50b1N0cmluZygpOwotfQotCi1zdGF0aWMgQ2FudmFzVGV4dEFsaWdu
IHRvQ2FudmFzVGV4dEFsaWduKFRleHRBbGlnbiB0ZXh0QWxpZ24pCi17Ci0gICAgc3dpdGNoICh0
ZXh0QWxpZ24pIHsKLSAgICBjYXNlIFN0YXJ0VGV4dEFsaWduOgotICAgICAgICByZXR1cm4gQ2Fu
dmFzVGV4dEFsaWduOjpTdGFydDsKLSAgICBjYXNlIEVuZFRleHRBbGlnbjoKLSAgICAgICAgcmV0
dXJuIENhbnZhc1RleHRBbGlnbjo6RW5kOwotICAgIGNhc2UgTGVmdFRleHRBbGlnbjoKLSAgICAg
ICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6TGVmdDsKLSAgICBjYXNlIFJpZ2h0VGV4dEFsaWdu
OgotICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEFsaWduOjpSaWdodDsKLSAgICBjYXNlIENlbnRl
clRleHRBbGlnbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6Q2VudGVyOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDYW52YXNUZXh0QWxp
Z246OlN0YXJ0OwotfQotCi1zdGF0aWMgVGV4dEFsaWduIGZyb21DYW52YXNUZXh0QWxpZ24oQ2Fu
dmFzVGV4dEFsaWduIGNhbnZhc1RleHRBbGlnbikKLXsKLSAgICBzd2l0Y2ggKGNhbnZhc1RleHRB
bGlnbikgewotICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpTdGFydDoKLSAgICAgICAgcmV0dXJu
IFN0YXJ0VGV4dEFsaWduOwotICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpFbmQ6Ci0gICAgICAg
IHJldHVybiBFbmRUZXh0QWxpZ247Ci0gICAgY2FzZSBDYW52YXNUZXh0QWxpZ246OkxlZnQ6Ci0g
ICAgICAgIHJldHVybiBMZWZ0VGV4dEFsaWduOwotICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpS
aWdodDoKLSAgICAgICAgcmV0dXJuIFJpZ2h0VGV4dEFsaWduOwotICAgIGNhc2UgQ2FudmFzVGV4
dEFsaWduOjpDZW50ZXI6Ci0gICAgICAgIHJldHVybiBDZW50ZXJUZXh0QWxpZ247Ci0gICAgfQot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0YXJ0VGV4dEFsaWduOwot
fQotCi1DYW52YXNUZXh0QWxpZ24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6dGV4dEFs
aWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdG9DYW52YXNUZXh0QWxpZ24oc3RhdGUoKS50ZXh0
QWxpZ24pOwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFRleHRB
bGlnbihDYW52YXNUZXh0QWxpZ24gY2FudmFzVGV4dEFsaWduKQogewogICAgIGF1dG8gdGV4dEFs
aWduID0gZnJvbUNhbnZhc1RleHRBbGlnbihjYW52YXNUZXh0QWxpZ24pOwpAQCAtMjM3MSw1MyAr
MjI3Niw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VGV4dEFsaWdu
KENhbnZhc1RleHRBbGlnbiBjYW52YXNUZXh0QWxpZ24pCiAgICAgbW9kaWZpYWJsZVN0YXRlKCku
dGV4dEFsaWduID0gdGV4dEFsaWduOwogfQogCi1zdGF0aWMgQ2FudmFzVGV4dEJhc2VsaW5lIHRv
Q2FudmFzVGV4dEJhc2VsaW5lKFRleHRCYXNlbGluZSB0ZXh0QmFzZWxpbmUpCi17Ci0gICAgc3dp
dGNoICh0ZXh0QmFzZWxpbmUpIHsKLSAgICBjYXNlIFRvcFRleHRCYXNlbGluZToKLSAgICAgICAg
cmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6VG9wOwotICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNl
bGluZToKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6SGFuZ2luZzsKLSAgICBj
YXNlIE1pZGRsZVRleHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGlu
ZTo6TWlkZGxlOwotICAgIGNhc2UgQWxwaGFiZXRpY1RleHRCYXNlbGluZToKLSAgICAgICAgcmV0
dXJuIENhbnZhc1RleHRCYXNlbGluZTo6QWxwaGFiZXRpYzsKLSAgICBjYXNlIElkZW9ncmFwaGlj
VGV4dEJhc2VsaW5lOgotICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpJZGVvZ3Jh
cGhpYzsKLSAgICBjYXNlIEJvdHRvbVRleHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENhbnZh
c1RleHRCYXNlbGluZTo6Qm90dG9tOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBDYW52YXNUZXh0QmFzZWxpbmU6OlRvcDsKLX0KLQotc3RhdGljIFRleHRC
YXNlbGluZSBmcm9tQ2FudmFzVGV4dEJhc2VsaW5lKENhbnZhc1RleHRCYXNlbGluZSBjYW52YXNU
ZXh0QmFzZWxpbmUpCi17Ci0gICAgc3dpdGNoIChjYW52YXNUZXh0QmFzZWxpbmUpIHsKLSAgICBj
YXNlIENhbnZhc1RleHRCYXNlbGluZTo6VG9wOgotICAgICAgICByZXR1cm4gVG9wVGV4dEJhc2Vs
aW5lOwotICAgIGNhc2UgQ2FudmFzVGV4dEJhc2VsaW5lOjpIYW5naW5nOgotICAgICAgICByZXR1
cm4gSGFuZ2luZ1RleHRCYXNlbGluZTsKLSAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6TWlk
ZGxlOgotICAgICAgICByZXR1cm4gTWlkZGxlVGV4dEJhc2VsaW5lOwotICAgIGNhc2UgQ2FudmFz
VGV4dEJhc2VsaW5lOjpBbHBoYWJldGljOgotICAgICAgICByZXR1cm4gQWxwaGFiZXRpY1RleHRC
YXNlbGluZTsKLSAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6SWRlb2dyYXBoaWM6Ci0gICAg
ICAgIHJldHVybiBJZGVvZ3JhcGhpY1RleHRCYXNlbGluZTsKLSAgICBjYXNlIENhbnZhc1RleHRC
YXNlbGluZTo6Qm90dG9tOgotICAgICAgICByZXR1cm4gQm90dG9tVGV4dEJhc2VsaW5lOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUb3BUZXh0QmFzZWxp
bmU7Ci19Ci0KLUNhbnZhc1RleHRCYXNlbGluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Ojp0ZXh0QmFzZWxpbmUoKSBjb25zdAotewotICAgIHJldHVybiB0b0NhbnZhc1RleHRCYXNlbGlu
ZShzdGF0ZSgpLnRleHRCYXNlbGluZSk7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0VGV4dEJhc2VsaW5lKENhbnZhc1RleHRCYXNlbGluZSBjYW52YXNUZXh0QmFz
ZWxpbmUpCiB7CiAgICAgYXV0byB0ZXh0QmFzZWxpbmUgPSBmcm9tQ2FudmFzVGV4dEJhc2VsaW5l
KGNhbnZhc1RleHRCYXNlbGluZSk7CkBAIC0yNDM2LDcgKzIyOTQsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldERpcmVjdGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uKQog
ICAgIG1vZGlmaWFibGVTdGF0ZSgpLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKIH0KIAotYm9vbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3VGV4dFdpdGhQYXJhbXMoZmxvYXQg
eCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBPcHRpb25hbDxmbG9hdD4gbWF4V2lkdGgpCitib29sIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNhbkRyYXdUZXh0KGZsb2F0IHgsIGZsb2F0IHks
IGJvb2wgZmlsbCwgT3B0aW9uYWw8ZmxvYXQ+IG1heFdpZHRoKQogewogICAgIGF1dG8qIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKQEAgLTI0NzMsMTEgKzIzMzEsMTEgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzU3BhY2VUaGF0TmVlZHNSZXBsYWNpbmcoVUNoYXIgYykKICAgICBy
ZXR1cm4gYyA9PSAweDAwMDkgfHwgYyA9PSAweDAwMEEgfHwgYyA9PSAweDAwMEIgfHwgYyA9PSAw
eDAwMEMgfHwgYyA9PSAweDAwMEQ7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6bm9ybWFsaXplU3BhY2VzKFN0cmluZyYgdGV4dCkKK1N0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpub3JtYWxpemVTcGFjZXMoY29uc3QgU3RyaW5nJiB0ZXh0KQogewog
ICAgIHNpemVfdCBpID0gdGV4dC5maW5kKGlzU3BhY2VUaGF0TmVlZHNSZXBsYWNpbmcpOwogICAg
IGlmIChpID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0ZXh0
OwogCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgVmVjdG9y
PFVDaGFyPiBjaGFyVmVjdG9yKHRleHRMZW5ndGgpOwpAQCAtMjQ4OSwyMCArMjM0NywxNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcm
IHRleHQpCiAgICAgICAgIGlmIChpc1NwYWNlVGhhdE5lZWRzUmVwbGFjaW5nKGNoYXJWZWN0b3Jb
aV0pKQogICAgICAgICAgICAgY2hhclZlY3RvcltpXSA9ICcgJzsKICAgICB9Ci0gICAgdGV4dCA9
IFN0cmluZzo6YWRvcHQoV1RGTW92ZShjaGFyVmVjdG9yKSk7CisgICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQoV1RGTW92ZShjaGFyVmVjdG9yKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6ZHJhd1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5
LCBib29sIGZpbGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0aCkKIHsKLSAgICBpZiAoIWNhbkRy
YXdUZXh0V2l0aFBhcmFtcyh4LCB5LCBmaWxsLCBtYXhXaWR0aCkpCisgICAgaWYgKCFjYW5EcmF3
VGV4dCh4LCB5LCBmaWxsLCBtYXhXaWR0aCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmlu
ZyBub3JtYWxpemVkVGV4dCA9IHRleHQ7Ci0gICAgbm9ybWFsaXplU3BhY2VzKG5vcm1hbGl6ZWRU
ZXh0KTsKLQorICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0
KTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
OlJ0bCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgVGV4
dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBk
aXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKLQogICAgIGRyYXdUZXh0VW5jaGVja2VkKHRleHRSdW4s
IHgsIHksIGZpbGwsIG1heFdpZHRoKTsKIH0KIApAQCAtMjYyMCwxMiArMjQ3NSw5IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgZmxvCiAKIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0g
ICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gdGV4dDsKLSAgICBub3JtYWxpemVTcGFjZXMobm9y
bWFsaXplZFRleHQpOwotCisgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFsaXplU3Bh
Y2VzKHRleHQpOwogICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERp
cmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsK
ICAgICBUZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQsIDAsIDAsIEFsbG93UmlnaHRFeHBh
bnNpb24sIGRpcmVjdGlvbiwgZmFsc2UsIHRydWUpOwotCiAgICAgcmV0dXJuIG1lYXN1cmVUZXh0
SW50ZXJuYWwodGV4dFJ1bik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAxMGYyNzhhYzVi
N2RiZDUyMDliMDA4M2FiMDExNWM0NTFkZTVmMTU5Li5jMTAwMjUzOWFmMjkxODBmNTYyNjZjYmYy
Yzg3OWQxNDk0ZGRmZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwLDE3ICs1MCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFR5cGVkT01DU1NJbWFnZVZhbHVlOwogY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBD
YW52YXNCYXNlOwogY2xhc3MgQ2FudmFzR3JhZGllbnQ7Ci1jbGFzcyBDYW52YXNQYXR0ZXJuOwog
Y2xhc3MgRE9NTWF0cml4OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwotY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFz
cyBJbWFnZUJpdG1hcDsKIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsK
IGNsYXNzIFBhdGgyRDsKQEAgLTg0LDQ4ICs3OCw1MSBAQCB1c2luZyBDYW52YXNJbWFnZVNvdXJj
ZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0Vs
ZQogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQsIHB1YmxpYyBDYW52YXNQYXRoIHsKICAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UpOwotcHVibGljOgorcHJvdGVjdGVk
OgogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoQ2FudmFzQmFzZSYsIGJvb2wgdXNl
c0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpOworCitwdWJsaWM6CiAgICAgdmlydHVhbCB+Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSgpOwogCi0gICAgZmxvYXQgbGluZVdpZHRoKCkgY29u
c3Q7CisgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5saW5lV2lk
dGg7IH0KICAgICB2b2lkIHNldExpbmVXaWR0aChmbG9hdCk7CiAKLSAgICBDYW52YXNMaW5lQ2Fw
IGxpbmVDYXAoKSBjb25zdDsKKyAgICBDYW52YXNMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJl
dHVybiBzdGF0ZSgpLmNhbnZhc0xpbmVDYXAoKTsgfQogICAgIHZvaWQgc2V0TGluZUNhcChDYW52
YXNMaW5lQ2FwKTsKICAgICB2b2lkIHNldExpbmVDYXAoY29uc3QgU3RyaW5nJik7CiAKLSAgICBD
YW52YXNMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0OworICAgIENhbnZhc0xpbmVKb2luIGxpbmVK
b2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5jYW52YXNMaW5lSm9pbigpOyB9CiAgICAgdm9p
ZCBzZXRMaW5lSm9pbihDYW52YXNMaW5lSm9pbik7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihjb25z
dCBTdHJpbmcmKTsKIAotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdDsKKyAgICBmbG9hdCBt
aXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5taXRlckxpbWl0OyB9CiAgICAgdm9p
ZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKIAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGdldExp
bmVEYXNoKCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgZ2V0TGluZURhc2goKSBj
b25zdCB7IHJldHVybiBzdGF0ZSgpLmxpbmVEYXNoOyB9CiAgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB3ZWJraXRM
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIGdldExpbmVEYXNoKCk7IH0KICAgICB2b2lkIHNldFdl
YmtpdExpbmVEYXNoKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgIGZsb2F0IGxpbmVEYXNo
T2Zmc2V0KCkgY29uc3Q7CisgICAgZmxvYXQgbGluZURhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0OyB9CiAgICAgdm9pZCBzZXRMaW5lRGFzaE9mZnNldChm
bG9hdCk7CiAKLSAgICBmbG9hdCBzaGFkb3dPZmZzZXRYKCkgY29uc3Q7CisgICAgZmxvYXQgc2hh
ZG93T2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7
IH0KICAgICB2b2lkIHNldFNoYWRvd09mZnNldFgoZmxvYXQpOwogCi0gICAgZmxvYXQgc2hhZG93
T2Zmc2V0WSgpIGNvbnN0OworICAgIGZsb2F0IHNoYWRvd09mZnNldFkoKSBjb25zdCB7IHJldHVy
biBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsgfQogICAgIHZvaWQgc2V0U2hhZG93T2Zm
c2V0WShmbG9hdCk7CiAKLSAgICBmbG9hdCBzaGFkb3dCbHVyKCkgY29uc3Q7CisgICAgZmxvYXQg
c2hhZG93Qmx1cigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkuc2hhZG93Qmx1cjsgfQogICAgIHZv
aWQgc2V0U2hhZG93Qmx1cihmbG9hdCk7CiAKLSAgICBTdHJpbmcgc2hhZG93Q29sb3IoKSBjb25z
dDsKKyAgICBTdHJpbmcgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLnNoYWRv
d0NvbG9yU3RyaW5nKCk7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYp
OwogCi0gICAgZmxvYXQgZ2xvYmFsQWxwaGEoKSBjb25zdDsKKyAgICBmbG9hdCBnbG9iYWxBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkuZ2xvYmFsQWxwaGE7IH0KICAgICB2b2lkIHNldEds
b2JhbEFscGhhKGZsb2F0KTsKIAotICAgIFN0cmluZyBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24o
KSBjb25zdDsKKyAgICBTdHJpbmcgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGUoKS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb25TdHJpbmcoKTsgfQogICAgIHZv
aWQgc2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCBzYXZlKCkgeyArK21fdW5yZWFsaXplZFNhdmVDb3VudDsgfQpAQCAtMTk3LDM3ICsxOTQsMzMg
QEAgcHVibGljOgogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIGZsb2F0IGR4LCBm
bG9hdCBkeSk7CiAgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpOwogCi0gICAgZmxvYXQgd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRp
bygpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHdlYmtp
dEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8oKSB7IHJldHVybiAxOyB9CiAKICAgICB2b2lkIHJlc2V0
KCk7CiAKLSAgICBMaW5lQ2FwIGdldExpbmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmxp
bmVDYXA7IH0KLSAgICBMaW5lSm9pbiBnZXRMaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRl
KCkubGluZUpvaW47IH0KLQotICAgIGJvb2wgaW1hZ2VTbW9vdGhpbmdFbmFibGVkKCkgY29uc3Q7
CisgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgp
LmltYWdlU21vb3RoaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdFbmFi
bGVkKGJvb2wpOwogCi0gICAgSW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGltYWdlU21vb3RoaW5nUXVh
bGl0eSgpIGNvbnN0OworICAgIEltYWdlU21vb3RoaW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1
YWxpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmltYWdlU21vb3RoaW5nUXVhbGl0eTsgfQog
ICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdRdWFsaXR5KEltYWdlU21vb3RoaW5nUXVhbGl0eSk7
CiAKICAgICB2b2lkIHNldFBhdGgoUGF0aDJEJik7CiAgICAgUmVmPFBhdGgyRD4gZ2V0UGF0aCgp
IGNvbnN0OwogCi0gICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKCkgY29uc3QgeyByZXR1
cm4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOyB9OwogICAgIHZvaWQgc2V0VXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyhib29sIGZsYWcpIHsgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gZmxhZzsg
fTsKIAotICAgIFN0cmluZyBmb250KCkgY29uc3Q7CisgICAgU3RyaW5nIGZvbnQoKSBjb25zdCB7
IHJldHVybiBzdGF0ZSgpLmZvbnRTdHJpbmcoKTsgfQogCi0gICAgQ2FudmFzVGV4dEFsaWduIHRl
eHRBbGlnbigpIGNvbnN0OworICAgIENhbnZhc1RleHRBbGlnbiB0ZXh0QWxpZ24oKSBjb25zdCB7
IHJldHVybiBzdGF0ZSgpLmNhbnZhc1RleHRBbGlnbigpOyB9CiAgICAgdm9pZCBzZXRUZXh0QWxp
Z24oQ2FudmFzVGV4dEFsaWduKTsKIAotICAgIENhbnZhc1RleHRCYXNlbGluZSB0ZXh0QmFzZWxp
bmUoKSBjb25zdDsKKyAgICBDYW52YXNUZXh0QmFzZWxpbmUgdGV4dEJhc2VsaW5lKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGUoKS5jYW52YXNUZXh0QmFzZWxpbmUoKTsgfQogICAgIHZvaWQgc2V0VGV4
dEJhc2VsaW5lKENhbnZhc1RleHRCYXNlbGluZSk7CiAKICAgICB1c2luZyBEaXJlY3Rpb24gPSBD
YW52YXNEaXJlY3Rpb247CiAgICAgdm9pZCBzZXREaXJlY3Rpb24oRGlyZWN0aW9uKTsKIAotICAg
IGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgeworICAgIGNsYXNz
IEZvbnRQcm94eSBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgRm9udFByb3h5KCkgPSBkZWZhdWx0OwogICAgICAgICB2aXJ0dWFsIH5Gb250
UHJveHkoKTsKQEAgLTI0Nyw3ICsyNDAsNyBAQCBwdWJsaWM6CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIHVwZGF0ZShGb250U2VsZWN0b3ImKTsKLSAgICAgICAgdm9pZCBmb250c05lZWRV
cGRhdGUoRm9udFNlbGVjdG9yJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZm9udHNOZWVkVXBk
YXRlKEZvbnRTZWxlY3RvciYpIGZpbmFsOwogCiAgICAgICAgIEZvbnRDYXNjYWRlIG1fZm9udDsK
ICAgICB9OwpAQCAtMjU1LDkgKzI0OCw2IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3RhdGUgZmlu
YWwgewogICAgICAgICBTdGF0ZSgpOwogCi0gICAgICAgIFN0YXRlKGNvbnN0IFN0YXRlJik7Ci0g
ICAgICAgIFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgU3RhdGUmKTsKLQogICAgICAgICBTdHJpbmcg
dW5wYXJzZWRTdHJva2VDb2xvcjsKICAgICAgICAgU3RyaW5nIHVucGFyc2VkRmlsbENvbG9yOwog
ICAgICAgICBDYW52YXNTdHlsZSBzdHJva2VTdHlsZTsKQEAgLTI3OCw1NyArMjY4LDY1IEBAIHB1
YmxpYzoKICAgICAgICAgZmxvYXQgbGluZURhc2hPZmZzZXQ7CiAgICAgICAgIGJvb2wgaW1hZ2VT
bW9vdGhpbmdFbmFibGVkOwogICAgICAgICBJbWFnZVNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9v
dGhpbmdRdWFsaXR5OwotCi0gICAgICAgIC8vIFRleHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGln
biB0ZXh0QWxpZ247CiAgICAgICAgIFRleHRCYXNlbGluZSB0ZXh0QmFzZWxpbmU7CiAgICAgICAg
IERpcmVjdGlvbiBkaXJlY3Rpb247CiAKICAgICAgICAgU3RyaW5nIHVucGFyc2VkRm9udDsKICAg
ICAgICAgRm9udFByb3h5IGZvbnQ7Ci0gICAgfTsKIAotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7IH0KKyAgICAgICAgQ2FudmFzTGlu
ZUNhcCBjYW52YXNMaW5lQ2FwKCkgY29uc3Q7CisgICAgICAgIENhbnZhc0xpbmVKb2luIGNhbnZh
c0xpbmVKb2luKCkgY29uc3Q7CisgICAgICAgIENhbnZhc1RleHRBbGlnbiBjYW52YXNUZXh0QWxp
Z24oKSBjb25zdDsKKyAgICAgICAgQ2FudmFzVGV4dEJhc2VsaW5lIGNhbnZhc1RleHRCYXNlbGlu
ZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZm9udFN0cmluZygpIGNvbnN0OworICAgICAgICBT
dHJpbmcgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uU3RyaW5nKCkgY29uc3Q7CisgICAgICAgIFN0
cmluZyBzaGFkb3dDb2xvclN0cmluZygpIGNvbnN0OworICAgIH07CiAgICAgY29uc3QgVmVjdG9y
PFN0YXRlLCAxPiYgc3RhdGVTdGFjaygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IGludCBEZWZhdWx0Rm9udFNpemU7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IERlZmF1
bHRGb250RmFtaWx5OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBEZWZhdWx0Rm9udDsK
LQotICAgIGVudW0gQ2FudmFzRGlkRHJhd09wdGlvbiB7Ci0gICAgICAgIENhbnZhc0RpZERyYXdB
cHBseU5vbmUgPSAwLAotICAgICAgICBDYW52YXNEaWREcmF3QXBwbHlUcmFuc2Zvcm0gPSAxLAot
ICAgICAgICBDYW52YXNEaWREcmF3QXBwbHlTaGFkb3cgPSAxIDw8IDEsCi0gICAgICAgIENhbnZh
c0RpZERyYXdBcHBseUNsaXAgPSAxIDw8IDIsCi0gICAgICAgIENhbnZhc0RpZERyYXdBcHBseUFs
bCA9IDB4ZmZmZmZmZmYKLSAgICB9OwotCi0gICAgYm9vbCBpc0Z1bGxDYW52YXNDb21wb3NpdGVN
b2RlKENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZGVm
YXVsdEZvbnRGYW1pbHkoKTsKIAorICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7IH0KKyAgICB2b2lkIHJlYWxpemVTYXZlcygpOwogICAg
IFN0YXRlJiBtb2RpZmlhYmxlU3RhdGUoKSB7IEFTU0VSVCghbV91bnJlYWxpemVkU2F2ZUNvdW50
IHx8IG1fc3RhdGVTdGFjay5zaXplKCkgPj0gTWF4U2F2ZUNvdW50KTsgcmV0dXJuIG1fc3RhdGVT
dGFjay5sYXN0KCk7IH0KIAorICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBj
b25zdDsKKworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFN0cmluZyYp
OworCisgICAgdm9pZCBkcmF3VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0
IHksIGJvb2wgZmlsbCwgT3B0aW9uYWw8ZmxvYXQ+IG1heFdpZHRoID0gV1RGOjpudWxsb3B0KTsK
KyAgICBib29sIGNhbkRyYXdUZXh0KGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0aW9u
YWw8ZmxvYXQ+IG1heFdpZHRoID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGRyYXdUZXh0VW5j
aGVja2VkKGNvbnN0IFRleHRSdW4mLCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlv
bmFsPGZsb2F0PiBtYXhXaWR0aCA9IFdURjo6bnVsbG9wdCk7CisKKyAgICBSZWY8VGV4dE1ldHJp
Y3M+IG1lYXN1cmVUZXh0SW50ZXJuYWwoY29uc3QgVGV4dFJ1biYpOworICAgIFJlZjxUZXh0TWV0
cmljcz4gbWVhc3VyZVRleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQpOworCisgICAgYm9v
bCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0NT
U0NvbXBhdGliaWxpdHlQYXJzZU1vZGU7IH0KKworcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5TGlu
ZURhc2goKSBjb25zdDsKICAgICB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIGFwcGx5U2hhZG93KCk7CiAg
ICAgYm9vbCBzaG91bGREcmF3U2hhZG93cygpIGNvbnN0OwogCi0gICAgdm9pZCBkaWREcmF3KGNv
bnN0IEZsb2F0UmVjdCYsIHVuc2lnbmVkIG9wdGlvbnMgPSBDYW52YXNEaWREcmF3QXBwbHlBbGwp
OworICAgIGVudW0gY2xhc3MgRGlkRHJhd09wdGlvbiB7CisgICAgICAgIEFwcGx5VHJhbnNmb3Jt
ID0gMSA8PCAwLAorICAgICAgICBBcHBseVNoYWRvdyA9IDEgPDwgMSwKKyAgICAgICAgQXBwbHlD
bGlwID0gMSA8PCAyLAorICAgIH07CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYs
IE9wdGlvblNldDxEaWREcmF3T3B0aW9uPiA9IHsgRGlkRHJhd09wdGlvbjo6QXBwbHlUcmFuc2Zv
cm0sIERpZERyYXdPcHRpb246OkFwcGx5U2hhZG93LCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXAg
fSk7CiAgICAgdm9pZCBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAKICAgICB2b2lkIHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBuZWVkc1ByZXBhcmF0
aW9uRm9yRGlzcGxheSgpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXko
KSBmaW5hbDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsK
LQogICAgIHZvaWQgdW53aW5kU3RhdGVTdGFjaygpOwotICAgIHZvaWQgcmVhbGl6ZVNhdmVzKCk7
CiAgICAgdm9pZCByZWFsaXplU2F2ZXNMb29wKCk7CiAKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0
dGVybigpOwotICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotCiAgICAgdm9pZCBzZXRTdHJv
a2VTdHlsZShDYW52YXNTdHlsZSk7CiAgICAgdm9pZCBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUp
OwogCkBAIC0zNzksMjIgKzM3NywxNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIGlzQWNjZWxl
cmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9y
bSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9y
bTsgfQorICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQogCiAgICAgLy8gVGhlIHJlbGF0
aW9uc2hpcCBiZXR3ZWVuIEZvbnRDYXNjYWRlIGFuZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OkZvbnRQcm94eSBtdXN0IGhvbGQgY2VydGFpbiBpbnZhcmlhbnRzLgogICAgIC8vIFRoZXJlZm9y
ZSwgYWxsIGZvbnQgb3BlcmF0aW9ucyBtdXN0IHBhc3MgdGhyb3VnaCB0aGUgcHJveHkuCiAgICAg
dmlydHVhbCBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
IAotICAgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcmKTsKLSAgICBib29sIGNh
bkRyYXdUZXh0V2l0aFBhcmFtcyhmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFs
PGZsb2F0PiBtYXhXaWR0aCA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0aW9uYWw8Zmxv
YXQ+IG1heFdpZHRoID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGRyYXdUZXh0VW5jaGVja2Vk
KGNvbnN0IFRleHRSdW4mLCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFsPGZs
b2F0PiBtYXhXaWR0aCA9IFdURjo6bnVsbG9wdCk7Ci0gICAgUmVmPFRleHRNZXRyaWNzPiBtZWFz
dXJlVGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCk7Ci0gICAgUmVmPFRleHRNZXRyaWNz
PiBtZWFzdXJlVGV4dEludGVybmFsKGNvbnN0IFRleHRSdW4mKTsKLQogICAgIEZsb2F0UG9pbnQg
dGV4dE9mZnNldChmbG9hdCB3aWR0aCwgVGV4dERpcmVjdGlvbik7CiAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgTWF4U2F2ZUNvdW50ID0gMTAyNCAqIDE2OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgTWF4U2F2ZUNvdW50ID0gMTAyNCAqIDE2OwogICAgIFZlY3RvcjxTdGF0ZSwg
MT4gbV9zdGF0ZVN0YWNrOwogICAgIHVuc2lnbmVkIG1fdW5yZWFsaXplZFNhdmVDb3VudCB7IDAg
fTsKICAgICBib29sIG1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGU7CkBAIC00MDMsNCAr
Mzk0LDMgQEAgcHJvdGVjdGVkOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDhhYWRjZjlkZjFmNTIzMjEzYzM1ZWUzM2Y3OTM5
ZmJlZTU5ZGIzMzQuLjA5MzU0ODU0NjI3ZmU5MzE2ZmEzZTcwN2EzOTY1NmNkODNlNDhkYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0zOSw4ICszOSw2IEBAIHB1YmxpYzoKICAg
ICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOwogICAgIHZp
cnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCi0gICAgYm9vbCBp
c09mZnNjcmVlbjJkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgT2Zm
c2NyZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxPZmZzY3JlZW5D
YW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogICAgIHZvaWQgY29tbWl0KCk7CkBAIC01Miw2ICs1
MCw3IEBAIHB1YmxpYzoKICAgICBSZWY8VGV4dE1ldHJpY3M+IG1lYXN1cmVUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCk7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkg
ZmluYWw7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWlu
dFJlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA2NTllZmEyZmZjYTFhNjhiNzJlNGI1MWJkOGQzOGQ5
NjE5N2U3MjAzLi40ZDU3ZDc0ZjQ1MGMyZWRlZDRhYzlhMDFkMjljOWYwZDk5NjVkOWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQy
RC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4
dDJELmgKQEAgLTQwLDEwICs0MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QYWludFJl
bmRlcmluZ0NvbnRleHQyRCgpOwogCi0gICAgYm9vbCBpc1BhaW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIEN1c3RvbVBhaW50Q2FudmFzJiBjYW52YXMoKSBjb25zdCB7
IHJldHVybiBkb3duY2FzdDxDdXN0b21QYWludENhbnZhcz4oY2FudmFzQmFzZSgpKTsgfQogCiBw
cml2YXRlOgorICAgIGJvb2wgaXNQYWludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKwogICAgIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKaW5kZXggZTVmMjIx
MGFlOTg3MzNlOTg0YWI1ODRmNmY5YTNjODQ3YjVhODA0OS4uZGIwZGYxNDM2NzY2NzFhMWQxYzE2
NjExNDFiYjYzMWU1MDE5NDA2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5o
IgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtODMzLDE2ICs4MzIsMTYgQEAgUmVmPFByb3RvY29sOjpS
ZWNvcmRpbmc6OkluaXRpYWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0
ZSgpCiAgICAgICAgICAgICBhdXRvIHN0YXRlUGF5bG9hZCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAKICAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0QXJyYXkoc3RyaW5nSW5kZXhGb3JL
ZXkoInNldFRyYW5zZm9ybSJfcyksIGJ1aWxkQXJyYXlGb3JBZmZpbmVUcmFuc2Zvcm0oc3RhdGUu
dHJhbnNmb3JtKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJ
bmRleEZvcktleSgiZ2xvYmFsQWxwaGEiX3MpLCBjb250ZXh0MmQuZ2xvYmFsQWxwaGEoKSk7Ci0g
ICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImds
b2JhbENvbXBvc2l0ZU9wZXJhdGlvbiJfcyksIGluZGV4Rm9yRGF0YShjb250ZXh0MmQuZ2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uKCkpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91
YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJsaW5lV2lkdGgiX3MpLCBjb250ZXh0MmQubGluZVdpZHRo
KCkpOwotICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9y
S2V5KCJsaW5lQ2FwIl9zKSwgaW5kZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5n
KGNvbnRleHQyZC5saW5lQ2FwKCkpKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldElu
dGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImxpbmVKb2luIl9zKSwgaW5kZXhGb3JEYXRhKGNvbnZl
cnRFbnVtZXJhdGlvblRvU3RyaW5nKGNvbnRleHQyZC5saW5lSm9pbigpKSkpOwotICAgICAgICAg
ICAgc3RhdGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JLZXkoIm1pdGVyTGltaXQi
X3MpLCBjb250ZXh0MmQubWl0ZXJMaW1pdCgpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+
c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJzaGFkb3dPZmZzZXRYIl9zKSwgY29udGV4dDJk
LnNoYWRvd09mZnNldFgoKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShz
dHJpbmdJbmRleEZvcktleSgic2hhZG93T2Zmc2V0WSJfcyksIGNvbnRleHQyZC5zaGFkb3dPZmZz
ZXRZKCkpOwotICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhG
b3JLZXkoInNoYWRvd0JsdXIiX3MpLCBjb250ZXh0MmQuc2hhZG93Qmx1cigpKTsKLSAgICAgICAg
ICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgic2hhZG93Q29s
b3IiX3MpLCBpbmRleEZvckRhdGEoY29udGV4dDJkLnNoYWRvd0NvbG9yKCkpKTsKKyAgICAgICAg
ICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJnbG9iYWxBbHBo
YSJfcyksIHN0YXRlLmdsb2JhbEFscGhhKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0
SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIl9zKSwg
aW5kZXhGb3JEYXRhKHN0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvblN0cmluZygpKSk7Cisg
ICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZvcktleSgibGlu
ZVdpZHRoIl9zKSwgc3RhdGUubGluZVdpZHRoKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+
c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgibGluZUNhcCJfcyksIGluZGV4Rm9yRGF0YShj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhzdGF0ZS5jYW52YXNMaW5lQ2FwKCkpKSk7CisgICAg
ICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImxpbmVK
b2luIl9zKSwgaW5kZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmNh
bnZhc0xpbmVKb2luKCkpKSk7CisgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShz
dHJpbmdJbmRleEZvcktleSgibWl0ZXJMaW1pdCJfcyksIHN0YXRlLm1pdGVyTGltaXQpOworICAg
ICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JLZXkoInNoYWRv
d09mZnNldFgiX3MpLCBzdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSk7CisgICAgICAgICAgICBz
dGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZvcktleSgic2hhZG93T2Zmc2V0WSJf
cyksIHN0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0ZVBheWxv
YWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZvcktleSgic2hhZG93Qmx1ciJfcyksIHN0YXRlLnNo
YWRvd0JsdXIpOworICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0lu
ZGV4Rm9yS2V5KCJzaGFkb3dDb2xvciJfcyksIGluZGV4Rm9yRGF0YShzZXJpYWxpemF0aW9uRm9y
SFRNTChzdGF0ZS5zaGFkb3dDb2xvcikpKTsKIAogICAgICAgICAgICAgLy8gVGhlIHBhcmFtZXRl
ciB0byBgc2V0TGluZURhc2hgIGlzIGl0c2VsZiBhbiBhcnJheSwgc28gd2UgbmVlZCB0byB3cmFw
IHRoZSBwYXJhbWV0ZXJzCiAgICAgICAgICAgICAvLyBsaXN0IGluIGFuIGFycmF5IHRvIGFsbG93
IHNwcmVhZGluZy4KQEAgLTg1MCwxMSArODQ5LDExIEBAIFJlZjxQcm90b2NvbDo6UmVjb3JkaW5n
OjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFsU3RhdGUoKQogICAg
ICAgICAgICAgc2V0TGluZURhc2gtPmFkZEl0ZW0oYnVpbGRBcnJheUZvclZlY3RvcihzdGF0ZS5s
aW5lRGFzaCkpOwogICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRBcnJheShzdHJpbmdJbmRl
eEZvcktleSgic2V0TGluZURhc2giX3MpLCBXVEZNb3ZlKHNldExpbmVEYXNoKSk7CiAKLSAgICAg
ICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJsaW5lRGFz
aE9mZnNldCJfcyksIGNvbnRleHQyZC5saW5lRGFzaE9mZnNldCgpKTsKLSAgICAgICAgICAgIHN0
YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgiZm9udCJfcyksIGluZGV4
Rm9yRGF0YShjb250ZXh0MmQuZm9udCgpKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNl
dEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoInRleHRBbGlnbiJfcyksIGluZGV4Rm9yRGF0YShj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhjb250ZXh0MmQudGV4dEFsaWduKCkpKSk7Ci0gICAg
ICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoInRleHRC
YXNlbGluZSJfcyksIGluZGV4Rm9yRGF0YShjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhjb250
ZXh0MmQudGV4dEJhc2VsaW5lKCkpKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldElu
dGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImRpcmVjdGlvbiJfcyksIGluZGV4Rm9yRGF0YShjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhjb250ZXh0MmQuZGlyZWN0aW9uKCkpKSk7CisgICAgICAg
ICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZvcktleSgibGluZURhc2hP
ZmZzZXQiX3MpLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAgICAgICAgICBzdGF0ZVBheWxv
YWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImZvbnQiX3MpLCBpbmRleEZvckRhdGEo
c3RhdGUuZm9udFN0cmluZygpKSk7CisgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVn
ZXIoc3RyaW5nSW5kZXhGb3JLZXkoInRleHRBbGlnbiJfcyksIGluZGV4Rm9yRGF0YShjb252ZXJ0
RW51bWVyYXRpb25Ub1N0cmluZyhzdGF0ZS5jYW52YXNUZXh0QWxpZ24oKSkpKTsKKyAgICAgICAg
ICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgidGV4dEJhc2Vs
aW5lIl9zKSwgaW5kZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmNh
bnZhc1RleHRCYXNlbGluZSgpKSkpOworICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRl
Z2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJkaXJlY3Rpb24iX3MpLCBpbmRleEZvckRhdGEoY29udmVy
dEVudW1lcmF0aW9uVG9TdHJpbmcoc3RhdGUuZGlyZWN0aW9uKSkpOwogCiAgICAgICAgICAgICBp
bnQgc3Ryb2tlU3R5bGVJbmRleDsKICAgICAgICAgICAgIGlmIChhdXRvIGNhbnZhc0dyYWRpZW50
ID0gc3RhdGUuc3Ryb2tlU3R5bGUuY2FudmFzR3JhZGllbnQoKSkKQEAgLTg3NCw5ICs4NzMsMTAg
QEAgUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFz
OjpidWlsZEluaXRpYWxTdGF0ZSgpCiAgICAgICAgICAgICAgICAgZmlsbFN0eWxlSW5kZXggPSBp
bmRleEZvckRhdGEoc3RhdGUuZmlsbFN0eWxlLmNvbG9yKCkpOwogICAgICAgICAgICAgc3RhdGVQ
YXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJmaWxsU3R5bGUiX3MpLCBmaWxs
U3R5bGVJbmRleCk7CiAKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0Qm9vbGVhbihzdHJp
bmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIl9zKSwgY29udGV4dDJkLmltYWdl
U21vb3RoaW5nRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdl
cihzdHJpbmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Il9zKSwgaW5kZXhGb3JE
YXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGNvbnRleHQyZC5pbWFnZVNtb290aGluZ1F1
YWxpdHkoKSkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0Qm9vbGVhbihzdHJpbmdJ
bmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIl9zKSwgc3RhdGUuaW1hZ2VTbW9vdGhp
bmdFbmFibGVkKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJ
bmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Il9zKSwgaW5kZXhGb3JEYXRhKGNvbnZl
cnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmltYWdlU21vb3RoaW5nUXVhbGl0eSkpKTsKIAor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmc6IGl0IHdpbGwgcmVwZWF0IHRoZSBj
b250ZXh0J3MgY3VycmVudCBwYXRoIGZvciBldmVyeSBsZXZlbCBpbiB0aGUgc3RhY2ssIGlnbm9y
aW5nIHNhdmVkIHBhdGhzLgogICAgICAgICAgICAgYXV0byBzZXRQYXRoID0gSlNPTjo6QXJyYXlP
ZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2V0UGF0aC0+YWRkSXRlbShp
bmRleEZvckRhdGEoYnVpbGRTdHJpbmdGcm9tUGF0aChjb250ZXh0MmQuZ2V0UGF0aCgpLT5wYXRo
KCkpKSk7CiAgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEFycmF5KHN0cmluZ0luZGV4Rm9y
S2V5KCJzZXRQYXRoIl9zKSwgV1RGTW92ZShzZXRQYXRoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAppbmRleCA5
Mzk0ZTdiZmY0MjliYzIxZWZjZGYzYjE0MDExMWYxYWUyY2E5NDRkLi4zNzk0ZGU3N2JlNjNhOTk5
YTNiOTcxYzc4YmZkY2UxZDRjYWEyYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAgLTIzMSwxMCArMjMx
LDEwIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CiAKICAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6ZSgpKTsKLSAgICBpZiAoIWltYWdl
RGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9ICBpbnRlcnNl
Y3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBzcmNSZWN0
Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsKICAg
ICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5z
aXplKCkgfTsKIAogICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggYThjNDAxOGFmNTlhNmE3NDkyZDRiNmI4MDgy
MjIwZjRmMWY5NTg2MC4uMjE4MTUyNjcxZDkyODZhNWFmMWQyZWEwN2FkZTdjMTg2MmNmOWFmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApAQCAtODksNyArODksNiBA
QCBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQYXRoVHJh
dmVyc2FsU3RhdGU7CiBjbGFzcyBSb3VuZGVkUmVjdDsKLWNsYXNzIFN0cm9rZVN0eWxlQXBwbGll
cjsKIAogLy8gVGhlIHBvaW50cyBpbiB0aGUgc3RydWN0dXJlIGFyZSB0aGUgc2FtZSBhcyB0aG9z
ZSB0aGF0IHdvdWxkIGJlIHVzZWQgd2l0aCB0aGUKIC8vIGFkZC4uLiBtZXRob2QuIEZvciBleGFt
cGxlLCBhIGxpbmUgcmV0dXJucyB0aGUgZW5kcG9pbnQsIHdoaWxlIGEgY3ViaWMgcmV0dXJucwpA
QCAtMTM4LDEyICsxMzcsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXRoIHBvbHlnb25QYXRo
RnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mKTsKIAogICAgIGJvb2wgY29udGFp
bnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6Ok5vblplcm8pIGNvbnN0
OwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyJiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFw
cGxpZXIpIGNvbnN0OworCiAgICAgLy8gZmFzdEJvdW5kaW5nUmVjdCgpIHNob3VsZCBlcXVhbCBv
ciBjb250YWluIGJvdW5kaW5nUmVjdCgpOyBib3VuZGluZ1JlY3QoKQogICAgIC8vIHNob3VsZCBw
ZXJmZWN0bHkgYm91bmQgdGhlIHBvaW50cyB3aXRoaW4gdGhlIHBhdGguCiAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBmYXN0
Qm91bmRpbmdSZWN0KCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nUmVjdChT
dHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5k
aW5nUmVjdChjb25zdCBPcHRpb25hbDxGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPj4m
IHN0cm9rZVN0eWxlQXBwbGllciA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBzaXplX3QgZWxlbWVudENvdW50KCkgY29uc3Q7CiAgICAgZmxvYXQgbGVuZ3RoKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJv
a2VTdHlsZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cm9r
ZVN0eWxlQXBwbGllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Y1ZTc4YjNk
ODNiMjlkOGYxYmE3MmI3NDExODY2MmRkMjYyNDNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0
cm9rZVN0eWxlQXBwbGllci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBTdHJva2VTdHlsZUFwcGxpZXJfaAotI2RlZmluZSBTdHJva2VTdHlsZUFwcGxpZXJf
aAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0K
LSAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCopID0gMDsKLQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgU3Ryb2tlU3R5bGVBcHBsaWVyKCkgPSBkZWZhdWx0OwotICAgICAgICB2
aXJ0dWFsIH5TdHJva2VTdHlsZUFwcGxpZXIoKSA9IGRlZmF1bHQ7Ci0gICAgfTsKLX0KLQotI2Vu
ZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
YXRoQ2Fpcm8uY3BwCmluZGV4IDE1YjJhMTU2YjRhMWM2Y2U0ZDQ5MTZlNWUwNzBhZjRmY2ExOTZh
MTQuLmEwMGVhNDg0Yzk2YzMzMjM3ZmYwYmQ0OThhZDQzMzNiZjNhNjFlZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApA
QCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5j
bHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00
MTUsMTUgKzQxNCwxNSBAQCBGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0U2xvd0Nhc2UoKSBj
b25zdAogICAgIHJldHVybiBGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKIH0K
IAotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIq
IGFwcGxpZXIpIGNvbnN0CitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0
IE9wdGlvbmFsPEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+PiYgc3Ryb2tlU3R5bGVB
cHBsaWVyKSBjb25zdAogewogICAgIC8vIFNob3VsZCB0aGlzIGJlIGlzRW1wdHkoKSBvciBjYW4g
YW4gZW1wdHkgcGF0aCBoYXZlIGEgbm9uLXplcm8gb3JpZ2luPwogICAgIGlmIChpc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAgaWYgKGFwcGxpZXIpIHsKKyAgICBp
ZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7Ci0gICAg
ICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZnYyk7CisgICAgICAgICgqc3Ryb2tlU3R5bGVBcHBs
aWVyKShnYyk7CiAgICAgfQogCiAgICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOwpAQCAtNDQzLDE0
ICs0NDIsMTQgQEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
V2luZFJ1bGUgcnVsZSkgY29uc3QKICAgICByZXR1cm4gY29udGFpbnM7CiB9CiAKLWJvb2wgUGF0
aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyJiBhcHBsaWVyLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBz
dHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQo
KSkpOwotICAgICAgICBhcHBsaWVyLnN0cm9rZVN0eWxlKCZncmFwaGljc0NvbnRleHQpOworICAg
ICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gY2Fpcm9faW5fc3Ryb2tlKG1fcGF0aC5nZXQoKSwgcG9pbnQueCgpLCBwb2ludC55KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5k
ZXggNWJhNDhmNzJkMjljNTFmMmRlODFlZTZlOTI2YzQ4NjJmOTA4MmQ4Mi4uMTUwMmVmOGFmNjEy
YTBhMWJiMmE5NGQxOWQ0OWQ2NWMyYTAzMGQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC0yMzMsNyArMjMyLDcgQEAgYm9vbCBQYXRoOjpj
b250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKICAg
ICByZXR1cm4gcmV0OwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxl
QXBwbGllciYgYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBh
dGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyKSBjb25zdAogewog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ1LDExICsyNDQs
MTEgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXImIGFwcGxp
ZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4
dCwgcGxhdGZvcm1QYXRoKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKLSAgICBhcHBsaWVyLnN0cm9rZVN0eWxlKCZncmFwaGljc0NvbnRleHQpOwor
ICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgYm9vbCBoaXRT
dWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1Bh
dGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0gICAgCisK
ICAgICByZXR1cm4gaGl0U3VjY2VzczsKIH0KIApAQCAtMjkzLDcgKzI5Miw3IEBAIEZsb2F0UmVj
dCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0U2xvd0Nhc2UoKSBjb25zdAogICAgIHJldHVybiB6ZXJv
UmVjdElmTnVsbChDR1BhdGhHZXRCb3VuZGluZ0JveChwbGF0Zm9ybVBhdGgoKSkpOwogfQogCi1G
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllcikgY29uc3QKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgT3B0
aW9uYWw8RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4+JiBzdHJva2VTdHlsZUFwcGxp
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVy
bzsKQEAgLTMwNCw5ICszMDMsOSBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKICAgICBDR0NvbnRleHRCZWdpblBh
dGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgo
KSk7CiAKLSAgICBpZiAoYXBwbGllcikgeworICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpIHsK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKLSAgICAg
ICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgICgqc3Ry
b2tlU3R5bGVBcHBsaWVyKShncmFwaGljc0NvbnRleHQpOwogICAgIH0KIAogICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAppbmRleCA2ZjNh
ZWQyODZjMWQ3ZmI0NmJhMzk5OWJkYWEzMWRjZTMwOWZmZjU3Li45YjdlOTk2MTg5OTMwMjk5NDdh
OTE3ZWYzODFlNzhkMWJlZmExMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVy
LmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMjI1LDE0ICsyMjQsMTQgQEAgYm9vbCBQYXRoOjpj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKICAg
ICByZXR1cm4gY29udGFpbnM7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tl
U3R5bGVBcHBsaWVyJiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jv
b2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0
CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0
KCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHRE
MkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSk7Ci0gICAgYXBwbGllci5zdHJva2VTdHlsZSgmc2NyYXRjaENvbnRleHQpOworICAgIHN0cm9r
ZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAg
IHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7CkBAIC0zMzUsNyArMzM0
LDcgQEAgRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UoY29uc3QgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3IKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1G
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllcikgY29uc3QKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgT3B0
aW9uYWw8RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4+JiBzdHJva2VTdHlsZUFwcGxp
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CkBAIC0zNDMsOCArMzQyLDggQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiAgICAgUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKICAgICBH
cmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogCi0gICAg
aWYgKGFwcGxpZXIpCi0gICAgICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZzY3JhdGNoQ29udGV4
dCk7CisgICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKKyAgICAgICAgKCpzdHJva2VTdHlsZUFw
cGxpZXIpKHNjcmF0Y2hDb250ZXh0KTsKIAogICAgIHJldHVybiBmYXN0Qm91bmRpbmdSZWN0Rm9y
U3Ryb2tlKHNjcmF0Y2hDb250ZXh0RDJEKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IDkx
MjI2NWRjYzVjZmU1MGRmYWY2YmRjMmFmNDFiNmQ4NDI2ZDk5YTUuLjZkMjlmN2UxYzlhZDU1OTIy
MDBiMzJjZGEzYjkxZjI4ZmI0YzkyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMTczLDcg
KzE3Myw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuCiAgICAgICAgICAgICB1c2Vyc3BhY2VU
cmFuc2Zvcm0gPSB0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoJnJlbmRlcmVyLCBncmFkaWVu
dERhdGEudXNlcnNwYWNlVHJhbnNmb3JtKTsKICAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3Zn
U3R5bGUuc3Ryb2tlT3BhY2l0eSgpKTsKICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGll
bnQoKmdyYWRpZW50RGF0YS5ncmFkaWVudCwgdXNlcnNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSwgcmVuZGVyZXIpOworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KCpjb250ZXh0LCBzdHlsZSwgcmVuZGVyZXIpOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDk0NzE5YjNlZjg3NzJlZmNhMDdjMGUyYjM1
ZGQxYzA0MDYwOTczNjkuLjk0YzI5ZDNiNjQ4MDYzYTFiN2UxY2E4OTc3ZDk0ZTNhYzY4NjAyZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE3OCw3ICsxNzgsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZAogICAgICAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4tPnNldFBhdHRlcm5TcGFj
ZVRyYW5zZm9ybSh0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoJnJlbmRlcmVyLCBwYXR0ZXJu
RGF0YS0+dHJhbnNmb3JtKSk7CiAgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLnN0
cm9rZU9wYWNpdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKnBhdHRl
cm5EYXRhLT5wYXR0ZXJuKTsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgcmVuZGVyZXIpOworICAgICAgICBTVkdSZW5k
ZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KCpjb250ZXh0LCBzdHlsZSwgcmVu
ZGVyZXIpOwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZH
UmVzb3VyY2VNb2RlOjpBcHBseVRvVGV4dCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRl
eCBkOTRiYWE0NTY1NDI1NmNjOTExMTFlODU2NzcxZmQ4ZDIwYzViMTk1Li5hN2FhYzRhZTg2ZGRm
M2M0OWM3OGM3NjlmZWQxZjNjZmNjNzlhY2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCkBA
IC01OCw3ICs1OCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSCiAgICAgICAgIGNvbnRleHQt
PnNldEFscGhhKHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKG1fY29sb3IpKTsK
IAotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHN0eWxlLCByZW5kZXJlcik7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoKmNvbnRleHQsIHN0eWxlLCByZW5kZXJlcik7CiAKICAgICAg
ICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5
VG9UZXh0KSkKICAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGU6OlN0cm9rZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwCmluZGV4IDMzNWJiZjBmMmVkNDAzOGE5YjMwM2Q1NmJiZjQ0NjU1MzY4
YWY2ODguLmZhMDNhY2JkY2Q3ZmQ2ZmEyMTY2OTM5YjNiY2YwZTA3N2Y1OTlkMDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC00Myw3
ICs0Myw2IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzQ2FjaGUuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTdHJv
a2VTdHlsZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKQEAgLTUxLDIyICs1MCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1NoYXBlKTsK
IAotY2xhc3MgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIGZpbmFsIDogcHVibGljIFN0
cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVB
cHBsaWVyKGNvbnN0IFJlbmRlclNWR1NoYXBlJiByZW5kZXJlcikKLSAgICAgICAgOiBtX3JlbmRl
cmVyKHJlbmRlcmVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHN0cm9rZVN0eWxlKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgbV9yZW5kZXJlci5zdHls
ZSgpLCBtX3JlbmRlcmVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyU1ZH
U2hhcGUmIG1fcmVuZGVyZXI7Ci19OwotCiBSZW5kZXJTVkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUo
U1ZHR3JhcGhpY3NFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDog
UmVuZGVyU1ZHTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBpcyBmYWxzZSwgdGhlIGNhY2hl
ZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nLgpAQCAtMTE0LDE2ICs5NywxOCBA
QCB2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiBib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQb2ludENvb3JkaW5hdGVTcGFjZSBwb2ludENv
b3JkaW5hdGVTcGFjZSkKIHsKICAgICBBU1NFUlQobV9wYXRoKTsKLSAgICBCb3VuZGluZ1JlY3RT
dHJva2VTdHlsZUFwcGxpZXIgYXBwbGllcigqdGhpcyk7CiAKICAgICBpZiAoaGFzTm9uU2NhbGlu
Z1N0cm9rZSgpICYmIHBvaW50Q29vcmRpbmF0ZVNwYWNlICE9IExvY2FsQ29vcmRpbmF0ZVNwYWNl
KSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2Nh
bGluZ1N0cm9rZVRyYW5zZm9ybSgpOwogICAgICAgICBQYXRoKiB1c2VQYXRoID0gbm9uU2NhbGlu
Z1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKLQotICAgICAg
ICByZXR1cm4gdXNlUGF0aC0+c3Ryb2tlQ29udGFpbnMoYXBwbGllciwgbm9uU2NhbGluZ1RyYW5z
Zm9ybS5tYXBQb2ludChwb2ludCkpOworICAgICAgICByZXR1cm4gdXNlUGF0aC0+c3Ryb2tlQ29u
dGFpbnMobm9uU2NhbGluZ1RyYW5zZm9ybS5tYXBQb2ludChwb2ludCksIFt0aGlzXSAoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBs
eVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMoYXBwbGllciwg
cG9pbnQpOworICAgIHJldHVybiBtX3BhdGgtPnN0cm9rZUNvbnRhaW5zKHBvaW50LCBbdGhpc10g
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojph
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICB9
KTsKIH0KIAogYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdApA
QCAtNDMyLDE5ICs0MTcsMjIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVT
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAgQVNTRVJUKG1fcGF0aCk7CiAgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7CiAKLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7Ci0gICAgaWYgKHN2
Z1N0eWxlLmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIEJvdW5kaW5nUmVjdFN0cm9rZVN0eWxlQXBw
bGllciBzdHJva2VTdHlsZSgqdGhpcyk7CisgICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNT
dHJva2UoKSkgewogICAgICAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKSB7CiAgICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0oKTsKICAgICAgICAgICAgIGlmIChPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+
IGludmVyc2UgPSBub25TY2FsaW5nVHJhbnNmb3JtLmludmVyc2UoKSkgewogICAgICAgICAgICAg
ICAgIFBhdGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5v
blNjYWxpbmdUcmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ1JlY3QgPSB1c2VQYXRoLT5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsKKyAg
ICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0ID0gdXNlUGF0aC0+c3Ry
b2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IHsgW3RoaXNd
IChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSgpLCAq
dGhpcyk7CisgICAgICAgICAgICAgICAgfX0pOwogICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5k
aW5nUmVjdCA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KHN0cm9rZUJvdW5kaW5nUmVjdCk7CiAg
ICAgICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoc3Ryb2tlQm91bmRpbmdSZWN0
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHJva2VCb3Vu
ZGluZ0JveC51bml0ZShwYXRoKCkuc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUocGF0
aCgpLnN0cm9rZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiB7
IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSgp
LCAqdGhpcyk7CisgICAgICAgICAgICB9fSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCA0ZjYzZTU4OGEyYjY4MTQ2M2I5
NzliZTFiODFlNjdiODc3ZThjMGRmLi4wYzc4NTIwNGZlNjcyYjQ3ZDNmNTU0OGYzMTMzMzU3ODgw
OTJhNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKQEAgLTQzMywxMCArNDMzLDggQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpw
b2ludEluQ2xpcHBpbmdBcmVhKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQordm9pZCBTVkdSZW5kZXJT
dXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKIHsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgCiAgICAgRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyLmVsZW1lbnQoKTsKICAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KGVsZW1lbnQpKSB7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDQ2LDE1ICs0NDQsMTUgQEAgdm9p
ZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUg
PSBzdHlsZS5zdmdTdHlsZSgpOwogCiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpOwotICAgIGNvbnRleHQt
PnNldFN0cm9rZVRoaWNrbmVzcyhsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0
cm9rZVdpZHRoKCkpKTsKLSAgICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN0eWxlLmNhcFN0eWxlKCkp
OwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN0eWxlLmpvaW5TdHlsZSgpKTsKKyAgICBjb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxl
LnN0cm9rZVdpZHRoKCkpKTsKKyAgICBjb250ZXh0LnNldExpbmVDYXAoc3R5bGUuY2FwU3R5bGUo
KSk7CisgICAgY29udGV4dC5zZXRMaW5lSm9pbihzdHlsZS5qb2luU3R5bGUoKSk7CiAgICAgaWYg
KHN0eWxlLmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKLSAgICAgICAgY29udGV4dC0+c2V0TWl0
ZXJMaW1pdChzdHlsZS5zdHJva2VNaXRlckxpbWl0KCkpOworICAgICAgICBjb250ZXh0LnNldE1p
dGVyTGltaXQoc3R5bGUuc3Ryb2tlTWl0ZXJMaW1pdCgpKTsKIAogICAgIGNvbnN0IFZlY3RvcjxT
VkdMZW5ndGhWYWx1ZT4mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpOwogICAg
IGlmIChkYXNoZXMuaXNFbXB0eSgpKQotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShT
b2xpZFN0cm9rZSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2Up
OwogICAgIGVsc2UgewogICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwogICAgICAgICBkYXNo
QXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkYXNoZXMuc2l6ZSgpKTsKQEAgLTQ3NSw5ICs0
NzMsOSBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGNhblNldExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC0+c2V0TGluZURhc2goZGFzaEFy
cmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZz
ZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKGRh
c2hBcnJheSwgbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNo
T2Zmc2V0KCkpICogc2NhbGVGYWN0b3IpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAgICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKaW5kZXggY2JlZDEyMjRmOTVkMzlh
NWJhYmRjMTQwNDg3NTUzMGVkOTc5NWUwOS4uZTgxNTcwNThkN2M1YzRhYTk4N2NjMTQ0ZWViNjcz
YmUxNjk2ZmU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNo
ZWNrRm9yU1ZHUmVwYWludER1cmluZ0xheW91dChjb25zdCBSZW5kZXJFbGVtZW50Jik7CiAKICAg
ICAvLyBTaGFyZWQgYmV0d2VlbiBTVkcgcmVuZGVyZXJzIGFuZCByZXNvdXJjZXMuCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgUmVuZGVyRWxlbWVudCYpOwogCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiBhbnkg
YW5jZXN0b3IncyB0cmFuc2Zvcm0gaGFzIGNoYW5nZWQuCiAgICAgc3RhdGljIGJvb2wgdHJhbnNm
b3JtVG9Sb290Q2hhbmdlZChSZW5kZXJFbGVtZW50Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422395</attachid>
            <date>2021-03-05 12:36:30 -0800</date>
            <delta_ts>2021-03-07 10:04:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222532-20210305123630.patch</filename>
            <type>text/plain</type>
            <size>103529</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczOTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjJlYTFiOWE4OGVkMWMx
NzBhNDQ1MWEzOTBiMDFjY2QyMDczYTllZi4uNDdlN2FiZjkxNTkyOWExOWQxZDI4NmIxODBkNmNj
YTk2YmFiY2M3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wMy0wNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IGluc3BlY3RvciB2aWV3
aW5nIG9mIGNhbnZhcyBzYXZlL3Jlc3RvcmUgc3RhY2ssIGFuZCB0aWdodGVuIGFuZCBzaW1wbGlm
eSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgaW5zcGVjdG9yIGNvZGUgaXMgdGhlIG9ubHkgY2xp
ZW50IHRoYXQgbG9va3MgaW50byB0aGUgZ3JhcGhpY3MgY29udGV4dCBhbmQgZ2V0cyBhdAorICAg
ICAgICBzYXZlZCBzdGF0ZXMgaW4gdGhlIHNhdmUvcmVzdG9yZSBzdGF0ZSBzdGFjay4gSXQgd2Fz
IGRvaW5nIHNvIGluIGFuIGluY29uc2lzdGVudCB3YXksIGFuZAorICAgICAgICBpbiBtYXkgY2Fz
ZXMgaWdub3JpbmcgdGhlIHN0YXRlIGluIHRoZSBzdGFjayBhbmQgc2ltcGx5IHVzaW5nIHRoZSBj
dXJyZW50IHN0YXRlLiBUaGlzIGZpeGVzCisgICAgICAgIGFsbW9zdCBldmVyeXRoaW5nIHRvIGFj
dHVhbGx5IHVzZSB0aGUgc3RhdGUgc3RhY2suCisKKyAgICAgICAgU2VwYXJhdGVseSBkaWQgc29t
ZSByZWxhdGVkIHJlZmFjdG9yaW5nLiBUaGlzIGluY2x1ZGVzIGEgYml0IG1vcmUgaW5saW5pbmcg
YW5kIHJlbW92aW5nIGEKKyAgICAgICAgY2xhc3MgdGhhdCB3YXMgYmVpbmcgdXNlZCBpbiB0aGUg
aW50ZXJmYWNlIHRvIFBhdGggd2hlcmUgd2UgY2FuIG1vcmUgc2ltcGx5IHVzZSBhIEZ1bmN0aW9u
PD4uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92
ZWQgU3Ryb2tlU3R5bGVBcHBsaWVyLmguCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KTogVXNlIGEgZ2xvYmFsIEF0b21TdHJpbmcgZm9yIHRoZSBkZWZh
dWx0IGZvbnQKKyAgICAgICAgZmFtaWx5IG5hbWUgc28gd2UgZG9uJ3QgcG90ZW50aWFsbHkgY3Jl
YXRlIGEgbmV3IG9uZSBldmVyeSB0aW1lIHdlIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAg
Q2FsbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGdl
dCBhdCBwcml2YXRlIG1lbWJlcgorICAgICAgICBtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VN
b2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptZWFzdXJl
VGV4dCk6IENhbGwgZGVmYXVsdEZvbnRGYW1pbHkoKSwgd2hpY2ggcmV0dXJucworICAgICAgICBh
biBBdG9tU3RyaW5nIHNvIHdlIGRvbid0IGhhdmUgdG8gbG9vayBpdCB1cCBldmVyeSB0aW1lIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBhbGxvY2F0
aW9uIG9mIGEKKyAgICAgICAgVGV4dE1ldHJpY3Mgb2JqZWN0LCB3aGljaCB3ZSBkb24ndCB1c2Ug
YW5kIHRoZW4gZGVhbGxvY2F0ZS4gVXBkYXRlIHNpbmNlIG5vcm1hbGl6ZWRTcGFjZXMKKyAgICAg
ICAgbm93IHVzZXMgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhbiBpbi9vdXQgYXJndW1lbnQu
IEFsc28gdXNlICYmIGluc3RlYWQgb2YgPzogYW5kCisgICAgICAgIHVwZGF0ZSBmb3IgbmFtZSBj
aGFuZ2Ugb2YgY2FuRHJhd1RleHRXaXRoUGFyYW1zLgorCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6IFJlbW92ZWQgdW5uZWVkZWQgaGVhZGVyIGluY2x1
ZGVzLCB1bm5lZWRlZAorICAgICAgICBvdmVycmlkZSBvZiB3ZWJraXRCYWNraW5nU3RvcmVQaXhl
bFJhdGlvIGFuZCBtYWRlIHRoZSBvdmVycmlkZSBvZiBpczJkIHByaXZhdGUsIHNpbmNlCisgICAg
ICAgIG5vIG9uZSBzaG91bGQgbmVlZCB0byBjYWxsIGl0IG9uIGEgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHA6IFVzZSBjb25zdGV4cHIgZm9yIGEgZmlsZS1sb2NhbCBjb25zdGFudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1N0cm9rZVN0eWxlQXBwbGllcjo6Q2FudmFzU3Ryb2tlU3R5bGVB
cHBsaWVyKTogRGVsZXRlZCB0aGlzIGVudGlyZSBjbGFzcywKKyAgICAgICAgc2luY2Ugd2Ugbm93
IHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYW4gb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6
dG9DYW52YXNMaW5lQ2FwKTogTW92ZWQgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSB0b3Agb2YgdGhl
IGZpbGUgc2luY2UgdGhleSBhcmUKKyAgICAgICAgbm93IHVzZWQgaW4gdGhlIFN0YXRlIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6ZnJvbUNhbnZhc0xpbmVDYXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OnRvQ2FudmFzTGluZUpvaW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmZy
b21DYW52YXNMaW5lSm9pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dG9DYW52YXNUZXh0
QWxpZ24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmZyb21DYW52YXNUZXh0QWxpZ24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ2FudmFzVGV4dEJhc2VsaW5lKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpmcm9tQ2FudmFzVGV4dEJhc2VsaW5lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6b3BlcmF0b3I9
KTogRGVsZXRlZCB0aGUgY29weSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgYXNzaWdubWVudCBv
cGVyYXRvciBzaW5jZSB0aGV5IGFyZSB0aGUgZGVmYXVsdCBvbmVzLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OmZvbnRTdHJpbmcgY29uc3Qp
OiBBZGRlZC4gTW92ZWQgdGhlIGNvZGUKKyAgICAgICAgaGVyZSBmcm9tIHRoZSBmdW5jdGlvbiBu
YW1lZCBmb250LCBtYWtpbmcgaXQgcG9zc2libGUgdG8gdXNlIHRoaXMgaW4gdGhlIGluc3BlY3Rv
ciBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
U3RhdGU6OmNhbnZhc0xpbmVDYXAgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNMaW5lSm9pbiBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
U3RhdGU6OmNhbnZhc1RleHRBbGlnbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OmNhbnZhc1RleHRCYXNlbGluZSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6U3RhdGU6Omdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvblN0cmluZyBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6
OnNoYWRvd0NvbG9yU3RyaW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpsaW5lV2lkdGggY29uc3QpOiBNb3ZlZCB0byB0aGUg
aGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
bGluZUNhcCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6bGluZUpvaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1pdGVyTGltaXQgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRvd09m
ZnNldFggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNoYWRvd09mZnNldFkgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRvd0JsdXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRMaW5lRGFzaCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bGluZURhc2hPZmZzZXQgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omds
b2JhbEFscGhhIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUpOiBNYWRlIHRoaXMg
ZmlsZSBsb2NhbCwgbm8gbG9uZ2VyIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluUGF0aEludGVybmFsKTog
VHdlYWsgc3R5bGUgdG8gbWF0Y2gKKyAgICAgICAgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0
cm9rZUludGVybmFsKTogVXNlIGEgbGFtYmRhIGZvciB0aGUKKyAgICAgICAgc3Ryb2tlIHN0eWxl
IGFwcGxpZXIgc28gd2UgZG9uJ3QgbmVlZCBhIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhd0VudGlyZUNhbnZhcyk6IFVwZGF0ZWQg
c2luY2UgZGlkRHJhdworICAgICAgICBub3cgdGFrZXMgYW4gT3B0aW9uU2V0LgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhdyk6IFVwZGF0ZWQg
dG8gdGFrZSBhbiBPcHRpb25TZXQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOiBVc2UgYSBzaW5nbGUgbWFrZVN0cmlu
ZworICAgICAgICBpbnN0ZWFkIG9mIGEgU3RyaW5nQnVpbGRlciBmb3IgYW4gZXJyb3IgbWVzc2Fn
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YSk6IFVwZGF0ZWQgc2luY2UgZGlkRHJhdyBub3cKKyAgICAgICAgdGFrZXMgYW4gT3B0
aW9uU2V0LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGNvbnN0KTogTW92ZWQgdG8gdGhlIGhlYWRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmltYWdlU21vb3RoaW5n
RW5hYmxlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Zm9udCBjb25zdCk6IERpdHRvLiBUaGUgYnVsayBvZiB0aGUgZnVuY3Rp
b24gaXMKKyAgICAgICAgbm93IGluIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRl
Ojpmb250U3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6dGV4dEFsaWduIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRCYXNlbGluZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3VGV4
dCk6IFJlbmFtZWQgZnJvbSBjYW5EcmF3VGV4dFdpdGhQYXJhbXMsCisgICAgICAgIHNpbmNlIHRo
ZSBmYWN0IHRoYXQgYSBmdW5jdGlvbiBoYXMgcGFyYW1ldGVycyBkb2Vzbid0IG5lZWQgdG8gYmUg
cGFydCBvZiBpdHMgbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6Om5vcm1hbGl6ZVNwYWNlcyk6IFVzZSBhIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9m
CisgICAgICAgIGFuIGluL291dCBhcmd1bWVudCBmb3IgYmV0dGVyIGNsYXJpdHkuIFRoaXMgYWxz
byBtYXRjaGVzIHRoZSBuZWVkcyBvZiBhbGwgdGhlIGNhbGwgc2l0ZXMuCisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dCk6IFVwZGF0ZWQgZm9y
IGNoYW5nZXMgdG8gY2FuRHJhd1RleHQKKyAgICAgICAgYW5kIG5vcm1hbGl6ZVNwYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0
SW50ZXJuYWwpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaDogUmVtb3ZlZCB1bm5lZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgTWFkZSB0aGUgY29uc3RydWN0b3IgcHJvdGVjdGVkLiBNb3ZlZCB0aGUgY29kZSBm
b3IgbWFueSBzaW1wbGUgZ2V0dGVycyBoZXJlIHNvIHRoZXkKKyAgICAgICAgY2FuIGJlIGlubGlu
ZWQuIFRoZSBtYWluIGNhbGwgc2l0ZSBpcyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5ncy4gUmVtb3Zl
ZCB1bnVzZWQgZ2V0TGluZUNhcAorICAgICAgICBhbmQgZ2V0TGluZUpvaW4gZnVuY3Rpb25zLiBN
YWRlIHRoZSB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIGZ1bmN0aW9uIHN0YXRpYyBhbmQK
KyAgICAgICAgY29uc3RleHByLiBSZW1vdmVkIHVudXNlZCB1c2VzRGlzcGxheUxpc3REcmF3aW5n
IGZ1bmN0aW9uLiBNYXJrZWQgdGhlIEZvbnRQcm94eQorICAgICAgICBjbGFzcyBmaW5hbC4gUmVt
b3ZlZCB0aGUgZXhwbGljaXQgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRv
ciBmcm9tIHRoZSBTdGF0ZQorICAgICAgICBzdHJ1Y3Q6IGxldHRpbmcgdGhlIGNvbXBpbGVyIGdl
bmVyYXRlIGl0IGlzIGJldHRlciBmb3Igb3VyIHB1cnBvc2VzLiBNYWRlIHRoZSBzdGF0ZQorICAg
ICAgICBmdW5jdGlvbiBwcm90ZWN0ZWQuIE1hZGUgbW9zdCBmb3JtZXJseS1wcm90ZWN0ZWQgbWVt
YmVycyBwcml2YXRlIGluc3RlYWQsIHNpbmNlIHRoZXJlCisgICAgICAgIGlzIG5vIG5lZWQgZm9y
IGRlcml2ZWQgY2xhc3NlcyB0byB1c2UgdGhlbS4gTWFkZSB0aGUgZW51bWVyYXRpb24gQ2FudmFz
RGlkRHJhd09wdGlvbgorICAgICAgICBpbnRvIGFuIGVudW0gY2xhc3MgbmFtZWQgRGlkRHJhd09w
dGlvbiBhbmQgdXNlIGl0IHdpdGggT3B0aW9uU2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdAorICAg
ICAgICBhcyBhbiB1bnNpZ25lZC4gTWFya2VkIGhhc0ludmVydGlibGVUcmFuc2Zvcm0gZmluYWwg
aW5zdGVhZCBvZiBvdmVycmlkZS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOiBDYWxsIHVzZXNDU1NDb21wYXRpYmls
aXR5UGFyc2VNb2RlCisgICAgICAgIHNvIHdlIGRvbid0IGhhdmUgdG8gZ2V0IGF0IHByaXZhdGUg
bWVtYmVyIG1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUuCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDogTWFkZSBpc09mZnNj
cmVlbjJkIHByaXZhdGUuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0Nv
bnRleHQyRC5oOiBNYWRlIGlzUGFpbnQgcHJpdmF0ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpi
dWlsZEluaXRpYWxTdGF0ZSk6IFdoZW4gaXRlcmF0aW5nIHRoZSBzdGF0ZSBzdGFjaywgZG8gbm90
CisgICAgICAgIGdldCBhbnl0aGluZyBkaXJlY3RseSBmcm9tIHRoZSBjb250ZXh0LCBzaW5jZSBp
dCB3aWxsIGdpdmUgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudAorICAgICAgICBzdGF0ZSwgbm90
IHRoZSBzdGFjayBlbGVtZW50IHdlIGFyZSBpdGVyYXRpbmcuIEFkZGVkIGEgRklYTUUgZm9yIHRo
ZSBvbmUgY2FzZSB3aGVyZQorICAgICAgICB0aGlzIHdhcyBub3QgZWFzeSB0byBmaXgsICJzZXRQ
YXRoIiwgYW5kIGxlZnQgaXQgYnJva2VuIGFzIGJlZm9yZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IFJlbW92ZWQgdW5uZWVkZWQgbnVs
bCBjaGVjayBmb3IKKyAgICAgICAgdGhlIGRhdGEuIEltYWdlRGF0YTo6Y3JlYXRlIHdpbGwgcmV0
dXJuIG51bGxwdHIsIG5vdCBhbiBvYmplY3Qgd2l0aCBudWxscHRyIGZvciBkYXRhLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOiBVc2UgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0NvbnRleHQmKT4gaW5zdGVhZCBvZgorICAgICAgICBTdHJrZVN0eWxlQXBwbGllci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N0cm9rZVN0eWxlQXBwbGllci5oOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCBjb25zdCk6IFVzZSBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPi4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9r
ZUNvbnRhaW5zIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3QpOiBE
aXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBs
eVJlc291cmNlKTogUGFzcyBhIHJlZmVyZW5jZSB0bworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0IGluc3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZSk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ry
b2tlQ29udGFpbnMpOiBVc2UgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhIFN0cm9rZVN0
eWxlQXBwbGllciBvYmplY3Qgd2hlbiBjYWxsaW5nIHN0cm9rZUNvbnRhaW5lci4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCBjb25z
dCk6IFVzZSBhIGxhbWJkYSBpbnN0ZWFkCisgICAgICAgIG9mIGEgU3Ryb2tlU3R5bGVBcHBsaWVy
IG9iamVjdCB3aGVuIGNhbGxpbmcgc3Ryb2tlQm91bmRpbmdSZWN0LgorCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOiBUYWtlIGEgcmVmZXJlbmNl
IHJhdGhlcgorICAgICAgICB0aGFuIGEgcG9pbnRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCiAyMDIxLTAzLTA1
ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbnZhczogZHJh
d0ltYWdlIHNob3VsZCBub3JtYWxpemUgc3JjUmVjdCBiZWZvcmUgY2hlY2tpbmcgaWYgaXQncyBl
bXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU4NmQ4Y2Q2YmRmYjc5OTEwZmExZDRlZTc0Y2M1MzQ2ODBiNWYzMWMuLjY3MTUw
NmI5NDg0Mzc5NmNjNmRiYTJiZWI1ZmVkZWE2MjQyMmE5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI2NTEsNyArMjY1MSw2
IEBACiAJCTg0ODUyMjdDMTE5MDE2MkMwMDZFREM3RiAvKiBKU1NWR0hLZXJuRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyNzgxMTkw
MTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmggKi87IH07CiAJCTg0ODUyMjdFMTE5
MDE2MkMwMDZFREM3RiAvKiBKU1NWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyN0ExMTkwMTYyQzAwNkVEQzdGIC8qIEpT
U1ZHVktlcm5FbGVtZW50LmggKi87IH07CiAJCTg0ODUyMjhCMTE5MDE3M0MwMDZFREM3RiAvKiBT
VkdWS2VybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0ODUyMjg4MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLzsg
fTsKLQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ5Rjc3NzUwRUZF
QzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oICovOyB9OwogCQk4NEE4MUYzRTBG
QzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VB
bHBoYS5oICovOyB9OwogCQk4NEE4MUY0MjBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhp
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFG
NDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCAqLzsgfTsKIAkJODRCMzQ5QTIy
MkY4NkU3NTAwRDQ3QkNGIC8qIEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJGODZFNzQwMEQ0N0JDRiAv
KiBFdmVudFRhcmdldENvbmNyZXRlLmggKi87IH07CkBAIC0xMTIxMCw3ICsxMTIwOSw2IEBACiAJ
CTg0ODUyMjg3MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVktlcm5FbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZL
ZXJuRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWS2VybkVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODkxMTkwMTczQzAw
NkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZH
Vktlcm5FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ5Rjc3NzUw
RUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJva2VTdHlsZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODRBODFGM0IwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNv
dXJjZUFscGhhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMw
MCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY4
NzMsNyArMjY4NzEsNiBAQAogCQkJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdT
b2x2ZXIuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKIAkJCQlCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmggKi8sCi0JCQkJODQ5Rjc3NzUwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBw
bGllci5oICovLAogCQkJCTA4NzU1OEMzMTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IuY3BwICovLAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAv
KiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdE
MzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICovLApAQCAtMjk2NDQsOSArMjk2NDEsOSBAQAogCQkJ
CUMyMDE1QzA5MUJFNkZFMkMwMDgyMjM4OSAvKiBGb250VmFyaWFudEJ1aWxkZXIuaCAqLywKIAkJ
CQlDRDRFMEFGQTExRjdCQzI3MDA5RDM4MTEgLyogZnVsbHNjcmVlbi5jc3MgKi8sCiAJCQkJOTND
QTRDOTkwOURGOTNGQTAwREY4Njc3IC8qIGh0bWwuY3NzICovLAorCQkJCUU1NENBNkREMjU1REUy
RDUwMEY5MDFBMyAvKiBsZWdhY3lGb3JtQ29udHJvbHNJT1MuY3NzICovLAogCQkJCUU1NUY0OTc5
MTUxQjg4ODAwMEJCNjdEQiAvKiBMZW5ndGhGdW5jdGlvbnMuY3BwICovLAogCQkJCUU1QkE3RDYy
MTUxNDM3Q0EwMEZFMUUzRiAvKiBMZW5ndGhGdW5jdGlvbnMuaCAqLywKLQkJCQlFNTRDQTZERDI1
NURFMkQ1MDBGOTAxQTMgLyogbGVnYWN5Rm9ybUNvbnRyb2xzSU9TLmNzcyAqLywKIAkJCQk5M0NB
NEM5QTA5REY5M0ZBMDBERjg2NzcgLyogbWFrZS1jc3MtZmlsZS1hcnJheXMucGwgKi8sCiAJCQkJ
OTNDQTRDOUIwOURGOTNGQTAwREY4Njc3IC8qIG1ha2Vwcm9wLnBsICovLAogCQkJCTQzQjg1RUQw
MThDQkVBQ0UwMEUzMUFGNCAvKiBtYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxp
dHlFbGVtZW50TWFwLnB5ICovLApAQCAtMzQ5MTIsNyArMzQ5MDksNiBAQAogCQkJCUIyMzU0MEYz
MEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUVDQTY4MEM3MUU2NzcyNDUwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tl
U3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VC
RTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUU2N0E4MzI1RDE2
ODQ3MDA3QjBBNEMgLyogU1RVTk1lc3NhZ2VQYXJzaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MTM5MjJCRTI1MThBQjc3MDA1REIzQzIgLyogU3R5bGVhYmxlLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCmluZGV4IDY3MzA5YzczNjQ5MjBmOGU3MzZjZTlmOTU3NDMxYTBmYjc3MGQ5NzYu
LmQ0YmI1MWZhOTI5MDFlZDQ0MWM0NjE0MDczMWJlZGYxOGQzNzczZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
b250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIAogICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8v
bGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtaHRtbC8yMDA5SnVsLzA5NDcuaHRt
bCwKICAgICAvLyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdu
b3JlZC4gcGFyc2VGb250V29ya2VyU2FmZSgpIGlnbm9yZXMgdGhlc2UuCi0gICAgYXV0byBmb250
UmF3ID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0ZvbnQsIHN0cmljdFRvQ1NT
UGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOworICAgIGF1dG8g
Zm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RU
b0NTU1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKCkpKTsKICAgICBp
ZiAoIWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIxLDcgKzEyMSw4IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkK
ICAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IGNhbnZhcygpLmNvbXB1dGVkU3R5bGUoKSkK
ICAgICAgICAgZm9udERlc2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNvbXB1
dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFtaWx5ID0gRGVmYXVsdEZvbnRGYW1pbHk7
CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoZmFtaWx5LmdldCgpKTsKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsK
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0Rm9udFNpemUp
OwogICAgIH0KQEAgLTE4MSwxNSArMTgyLDEwIEBAIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjptZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGNhbnZhcy5kb2N1
bWVudCgpKTsKICAgICB9CiAKLSAgICBSZWY8VGV4dE1ldHJpY3M+IG1ldHJpY3MgPSBUZXh0TWV0
cmljczo6Y3JlYXRlKCk7Ci0KLSAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwotICAg
IG5vcm1hbGl6ZVNwYWNlcyhub3JtYWxpemVkVGV4dCk7Ci0KKyAgICBTdHJpbmcgbm9ybWFsaXpl
ZFRleHQgPSBub3JtYWxpemVTcGFjZXModGV4dCk7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNv
bXB1dGVkU3R5bGU7CiAgICAgYXV0byBkaXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3RhdGUo
KS5kaXJlY3Rpb24sICZjb21wdXRlZFN0eWxlKTsKLSAgICBib29sIG92ZXJyaWRlID0gY29tcHV0
ZWRTdHlsZSA/IGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSkgOiBmYWxz
ZTsKLQorICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29t
cHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6
ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0
cnVlKTsKICAgICByZXR1cm4gbWVhc3VyZVRleHRJbnRlcm5hbCh0ZXh0UnVuKTsKIH0KQEAgLTIw
NywxNiArMjAzLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dElu
dGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkKICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1dyaXRl
T3JNZWFzdXJlKHRoaXMtPmNhbnZhcygpLmRvY3VtZW50KCksIHRleHQpOwogCi0gICAgaWYgKCFj
YW5EcmF3VGV4dFdpdGhQYXJhbXMoeCwgeSwgZmlsbCwgbWF4V2lkdGgpKQorICAgIGlmICghY2Fu
RHJhd1RleHQoeCwgeSwgZmlsbCwgbWF4V2lkdGgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgbm9ybWFsaXplZFRleHQgPSB0ZXh0OwotICAgIG5vcm1hbGl6ZVNwYWNlcyhub3JtYWxp
emVkVGV4dCk7Ci0KKyAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSBub3JtYWxpemVTcGFjZXMo
dGV4dCk7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGU7CiAgICAgYXV0byBk
aXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5kaXJlY3Rpb24sICZjb21wdXRlZFN0
eWxlKTsKLSAgICBib29sIG92ZXJyaWRlID0gY29tcHV0ZWRTdHlsZSA/IGlzT3ZlcnJpZGUoY29t
cHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSkgOiBmYWxzZTsKLQorICAgIGJvb2wgb3ZlcnJpZGUg
PSBjb21wdXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+dW5pY29kZUJpZGko
KSk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0
RXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hl
Y2tlZCh0ZXh0UnVuLCB4LCB5LCBmaWxsLCBtYXhXaWR0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDFm
NjI3ZWNmNTViOTY2MWU3YmE4OGVjYzNkZmRkZDJjNGI4MjFhZGUuLjg5N2M4YjNhZTdiMzkyZmM5
MzAwY2VhNjk5NzNmYmNiYzM4MDE1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0yNiw4ICsyNiw2IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCIK
LSNpbmNsdWRlICJDYW52YXNUZXh0QWxpZ24uaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0QmFzZWxp
bmUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
IApAQCAtNDcsOCArNDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChF
bGVtZW50Jik7CiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChQYXRoMkQmLCBFbGVtZW50Jik7
CiAKLSAgICBmbG9hdCB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1
cm4gMTsgfQotCiAgICAgdm9pZCBzZXRGb250KGNvbnN0IFN0cmluZyYpOwogCiAgICAgQ2FudmFz
RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwpAQCAtNTcsMTEgKzUzLDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHN0cm9rZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5
LCBPcHRpb25hbDxmbG9hdD4gbWF4V2lkdGggPSBXVEY6Om51bGxvcHQpOwogICAgIFJlZjxUZXh0
TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAotICAgIGJvb2wgaXMy
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQogcHJpdmF0ZToKICAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxp
dHlQYXJzZU1vZGUpOwogCisgICAgYm9vbCBpczJkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7CiAKICAgICB2b2lk
IGRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBi
b29sIGZpbGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0aCA9IFdURjo6bnVsbG9wdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCmluZGV4IDFjYjRhMTBjZDY4M2M5YzFmZTkxOTI0MzE4ZmM3ZDJlYjg1
MWRkODYuLmI2OWUyOWQxMjlmYTA5NWI5MDVjYmY0ZWM3ZDU1NDU4NzI0OWNkNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICog
Q29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CkBAIC02Myw3
ICs2Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBs
aWVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCkBAIC04MywzOCArODIsMTQ2IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSk7CiAKICNpZiBVU0UoQ0cpCi1jb25zdCBJbWFnZVNt
b290aGluZ1F1YWxpdHkgZGVmYXVsdFNtb290aGluZ1F1YWxpdHkgPSBJbWFnZVNtb290aGluZ1F1
YWxpdHk6OkxvdzsKK3N0YXRpYyBjb25zdGV4cHIgSW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGRlZmF1
bHRTbW9vdGhpbmdRdWFsaXR5ID0gSW1hZ2VTbW9vdGhpbmdRdWFsaXR5OjpMb3c7CiAjZWxzZQot
Y29uc3QgSW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGRlZmF1bHRTbW9vdGhpbmdRdWFsaXR5ID0gSW1h
Z2VTbW9vdGhpbmdRdWFsaXR5OjpNZWRpdW07CitzdGF0aWMgY29uc3RleHByIEltYWdlU21vb3Ro
aW5nUXVhbGl0eSBkZWZhdWx0U21vb3RoaW5nUXVhbGl0eSA9IEltYWdlU21vb3RoaW5nUXVhbGl0
eTo6TWVkaXVtOwogI2VuZGlmCiAKIGNvbnN0IGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpEZWZhdWx0Rm9udFNpemUgPSAxMDsKIGNvbnN0IGNoYXIqIGNvbnN0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OkRlZmF1bHRGb250RmFtaWx5ID0gInNhbnMtc2VyaWYiOwotY29u
c3QgY2hhciogY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6RGVmYXVsdEZvbnQg
PSAiMTBweCBzYW5zLXNlcmlmIjsKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIERlZmF1
bHRGb250ID0gIjEwcHggc2Fucy1zZXJpZiJfczsKIAotY2xhc3MgQ2FudmFzU3Ryb2tlU3R5bGVB
cHBsaWVyIDogcHVibGljIFN0cm9rZVN0eWxlQXBwbGllciB7Ci1wdWJsaWM6Ci0gICAgQ2FudmFz
U3Ryb2tlU3R5bGVBcHBsaWVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UqIGNhbnZhc0Nv
bnRleHQpCi0gICAgICAgIDogbV9jYW52YXNDb250ZXh0KGNhbnZhc0NvbnRleHQpCi0gICAgewor
c3RhdGljIENhbnZhc0xpbmVDYXAgdG9DYW52YXNMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3sK
KyAgICBzd2l0Y2ggKGxpbmVDYXApIHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHJldHVy
biBDYW52YXNMaW5lQ2FwOjpCdXR0OworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIHJldHVy
biBDYW52YXNMaW5lQ2FwOjpSb3VuZDsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgcmV0
dXJuIENhbnZhc0xpbmVDYXA6OlNxdWFyZTsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIENhbnZhc0xpbmVDYXA6OkJ1dHQ7Cit9CiAKLSAgICB2b2lkIHN0cm9r
ZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogYykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGMtPnNl
dFN0cm9rZVRoaWNrbmVzcyhtX2NhbnZhc0NvbnRleHQtPmxpbmVXaWR0aCgpKTsKLSAgICAgICAg
Yy0+c2V0TGluZUNhcChtX2NhbnZhc0NvbnRleHQtPmdldExpbmVDYXAoKSk7Ci0gICAgICAgIGMt
PnNldExpbmVKb2luKG1fY2FudmFzQ29udGV4dC0+Z2V0TGluZUpvaW4oKSk7Ci0gICAgICAgIGMt
PnNldE1pdGVyTGltaXQobV9jYW52YXNDb250ZXh0LT5taXRlckxpbWl0KCkpOwotICAgICAgICBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBsaW5lRGFzaCA9IG1fY2FudmFzQ29udGV4dC0+Z2V0TGluZURh
c2goKTsKLSAgICAgICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKGxpbmVEYXNoLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZURhc2guc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJh
eUVsZW1lbnQ+KGxpbmVEYXNoW2ldKTsKLSAgICAgICAgYy0+c2V0TGluZURhc2goY29udmVydGVk
TGluZURhc2gsIG1fY2FudmFzQ29udGV4dC0+bGluZURhc2hPZmZzZXQoKSk7CitzdGF0aWMgTGlu
ZUNhcCBmcm9tQ2FudmFzTGluZUNhcChDYW52YXNMaW5lQ2FwIGNhbnZhc0xpbmVDYXApCit7Cisg
ICAgc3dpdGNoIChjYW52YXNMaW5lQ2FwKSB7CisgICAgY2FzZSBDYW52YXNMaW5lQ2FwOjpCdXR0
OgorICAgICAgICByZXR1cm4gQnV0dENhcDsKKyAgICBjYXNlIENhbnZhc0xpbmVDYXA6OlJvdW5k
OgorICAgICAgICByZXR1cm4gUm91bmRDYXA7CisgICAgY2FzZSBDYW52YXNMaW5lQ2FwOjpTcXVh
cmU6CisgICAgICAgIHJldHVybiBTcXVhcmVDYXA7CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBCdXR0Q2FwOworfQogCi1wcml2YXRlOgotICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UqIG1fY2FudmFzQ29udGV4dDsKLX07CitzdGF0aWMgQ2FudmFz
TGluZUpvaW4gdG9DYW52YXNMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3sKKyAgICBzd2l0
Y2ggKGxpbmVKb2luKSB7CisgICAgY2FzZSBSb3VuZEpvaW46CisgICAgICAgIHJldHVybiBDYW52
YXNMaW5lSm9pbjo6Um91bmQ7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIHJldHVybiBD
YW52YXNMaW5lSm9pbjo6QmV2ZWw7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgIHJldHVy
biBDYW52YXNMaW5lSm9pbjo6TWl0ZXI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBDYW52YXNMaW5lSm9pbjo6Um91bmQ7Cit9CisKK3N0YXRpYyBMaW5lSm9p
biBmcm9tQ2FudmFzTGluZUpvaW4oQ2FudmFzTGluZUpvaW4gY2FudmFzTGluZUpvaW4pCit7Cisg
ICAgc3dpdGNoIChjYW52YXNMaW5lSm9pbikgeworICAgIGNhc2UgQ2FudmFzTGluZUpvaW46OlJv
dW5kOgorICAgICAgICByZXR1cm4gUm91bmRKb2luOworICAgIGNhc2UgQ2FudmFzTGluZUpvaW46
OkJldmVsOgorICAgICAgICByZXR1cm4gQmV2ZWxKb2luOworICAgIGNhc2UgQ2FudmFzTGluZUpv
aW46Ok1pdGVyOgorICAgICAgICByZXR1cm4gTWl0ZXJKb2luOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUm91bmRKb2luOworfQorCitzdGF0aWMgQ2FudmFz
VGV4dEFsaWduIHRvQ2FudmFzVGV4dEFsaWduKFRleHRBbGlnbiB0ZXh0QWxpZ24pCit7CisgICAg
c3dpdGNoICh0ZXh0QWxpZ24pIHsKKyAgICBjYXNlIFN0YXJ0VGV4dEFsaWduOgorICAgICAgICBy
ZXR1cm4gQ2FudmFzVGV4dEFsaWduOjpTdGFydDsKKyAgICBjYXNlIEVuZFRleHRBbGlnbjoKKyAg
ICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6RW5kOworICAgIGNhc2UgTGVmdFRleHRBbGln
bjoKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6TGVmdDsKKyAgICBjYXNlIFJpZ2h0
VGV4dEFsaWduOgorICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEFsaWduOjpSaWdodDsKKyAgICBj
YXNlIENlbnRlclRleHRBbGlnbjoKKyAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6Q2Vu
dGVyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ2FudmFz
VGV4dEFsaWduOjpTdGFydDsKK30KKworc3RhdGljIFRleHRBbGlnbiBmcm9tQ2FudmFzVGV4dEFs
aWduKENhbnZhc1RleHRBbGlnbiBjYW52YXNUZXh0QWxpZ24pCit7CisgICAgc3dpdGNoIChjYW52
YXNUZXh0QWxpZ24pIHsKKyAgICBjYXNlIENhbnZhc1RleHRBbGlnbjo6U3RhcnQ6CisgICAgICAg
IHJldHVybiBTdGFydFRleHRBbGlnbjsKKyAgICBjYXNlIENhbnZhc1RleHRBbGlnbjo6RW5kOgor
ICAgICAgICByZXR1cm4gRW5kVGV4dEFsaWduOworICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpM
ZWZ0OgorICAgICAgICByZXR1cm4gTGVmdFRleHRBbGlnbjsKKyAgICBjYXNlIENhbnZhc1RleHRB
bGlnbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiBSaWdodFRleHRBbGlnbjsKKyAgICBjYXNlIENh
bnZhc1RleHRBbGlnbjo6Q2VudGVyOgorICAgICAgICByZXR1cm4gQ2VudGVyVGV4dEFsaWduOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RhcnRUZXh0QWxp
Z247Cit9CisKK3N0YXRpYyBDYW52YXNUZXh0QmFzZWxpbmUgdG9DYW52YXNUZXh0QmFzZWxpbmUo
VGV4dEJhc2VsaW5lIHRleHRCYXNlbGluZSkKK3sKKyAgICBzd2l0Y2ggKHRleHRCYXNlbGluZSkg
eworICAgIGNhc2UgVG9wVGV4dEJhc2VsaW5lOgorICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEJh
c2VsaW5lOjpUb3A7CisgICAgY2FzZSBIYW5naW5nVGV4dEJhc2VsaW5lOgorICAgICAgICByZXR1
cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpIYW5naW5nOworICAgIGNhc2UgTWlkZGxlVGV4dEJhc2Vs
aW5lOgorICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpNaWRkbGU7CisgICAgY2Fz
ZSBBbHBoYWJldGljVGV4dEJhc2VsaW5lOgorICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEJhc2Vs
aW5lOjpBbHBoYWJldGljOworICAgIGNhc2UgSWRlb2dyYXBoaWNUZXh0QmFzZWxpbmU6CisgICAg
ICAgIHJldHVybiBDYW52YXNUZXh0QmFzZWxpbmU6OklkZW9ncmFwaGljOworICAgIGNhc2UgQm90
dG9tVGV4dEJhc2VsaW5lOgorICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpCb3R0
b207CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDYW52YXNU
ZXh0QmFzZWxpbmU6OlRvcDsKK30KKworc3RhdGljIFRleHRCYXNlbGluZSBmcm9tQ2FudmFzVGV4
dEJhc2VsaW5lKENhbnZhc1RleHRCYXNlbGluZSBjYW52YXNUZXh0QmFzZWxpbmUpCit7CisgICAg
c3dpdGNoIChjYW52YXNUZXh0QmFzZWxpbmUpIHsKKyAgICBjYXNlIENhbnZhc1RleHRCYXNlbGlu
ZTo6VG9wOgorICAgICAgICByZXR1cm4gVG9wVGV4dEJhc2VsaW5lOworICAgIGNhc2UgQ2FudmFz
VGV4dEJhc2VsaW5lOjpIYW5naW5nOgorICAgICAgICByZXR1cm4gSGFuZ2luZ1RleHRCYXNlbGlu
ZTsKKyAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6TWlkZGxlOgorICAgICAgICByZXR1cm4g
TWlkZGxlVGV4dEJhc2VsaW5lOworICAgIGNhc2UgQ2FudmFzVGV4dEJhc2VsaW5lOjpBbHBoYWJl
dGljOgorICAgICAgICByZXR1cm4gQWxwaGFiZXRpY1RleHRCYXNlbGluZTsKKyAgICBjYXNlIENh
bnZhc1RleHRCYXNlbGluZTo6SWRlb2dyYXBoaWM6CisgICAgICAgIHJldHVybiBJZGVvZ3JhcGhp
Y1RleHRCYXNlbGluZTsKKyAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6Qm90dG9tOgorICAg
ICAgICByZXR1cm4gQm90dG9tVGV4dEJhc2VsaW5lOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gVG9wVGV4dEJhc2VsaW5lOworfQogCiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlKENhbnZhc0Jhc2Um
IGNhbnZhcywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKICAgICA6IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQpAQCAtMTg3LDY0ICsyOTQsNTkgQEAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OlN0YXRlKCkKIHsKIH0KIAotQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKLSAgICA6
IHVucGFyc2VkU3Ryb2tlQ29sb3Iob3RoZXIudW5wYXJzZWRTdHJva2VDb2xvcikKLSAgICAsIHVu
cGFyc2VkRmlsbENvbG9yKG90aGVyLnVucGFyc2VkRmlsbENvbG9yKQotICAgICwgc3Ryb2tlU3R5
bGUob3RoZXIuc3Ryb2tlU3R5bGUpCi0gICAgLCBmaWxsU3R5bGUob3RoZXIuZmlsbFN0eWxlKQot
ICAgICwgbGluZVdpZHRoKG90aGVyLmxpbmVXaWR0aCkKLSAgICAsIGxpbmVDYXAob3RoZXIubGlu
ZUNhcCkKLSAgICAsIGxpbmVKb2luKG90aGVyLmxpbmVKb2luKQotICAgICwgbWl0ZXJMaW1pdChv
dGhlci5taXRlckxpbWl0KQotICAgICwgc2hhZG93T2Zmc2V0KG90aGVyLnNoYWRvd09mZnNldCkK
LSAgICAsIHNoYWRvd0JsdXIob3RoZXIuc2hhZG93Qmx1cikKLSAgICAsIHNoYWRvd0NvbG9yKG90
aGVyLnNoYWRvd0NvbG9yKQotICAgICwgZ2xvYmFsQWxwaGEob3RoZXIuZ2xvYmFsQWxwaGEpCi0g
ICAgLCBnbG9iYWxDb21wb3NpdGUob3RoZXIuZ2xvYmFsQ29tcG9zaXRlKQotICAgICwgZ2xvYmFs
QmxlbmQob3RoZXIuZ2xvYmFsQmxlbmQpCi0gICAgLCB0cmFuc2Zvcm0ob3RoZXIudHJhbnNmb3Jt
KQotICAgICwgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybShvdGhlci5oYXNJbnZlcnRpYmxlVHJhbnNm
b3JtKQotICAgICwgbGluZURhc2hPZmZzZXQob3RoZXIubGluZURhc2hPZmZzZXQpCi0gICAgLCBp
bWFnZVNtb290aGluZ0VuYWJsZWQob3RoZXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKQotICAgICwg
aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KG90aGVyLmltYWdlU21vb3RoaW5nUXVhbGl0eSkKLSAgICAs
IHRleHRBbGlnbihvdGhlci50ZXh0QWxpZ24pCi0gICAgLCB0ZXh0QmFzZWxpbmUob3RoZXIudGV4
dEJhc2VsaW5lKQotICAgICwgZGlyZWN0aW9uKG90aGVyLmRpcmVjdGlvbikKLSAgICAsIHVucGFy
c2VkRm9udChvdGhlci51bnBhcnNlZEZvbnQpCi0gICAgLCBmb250KG90aGVyLmZvbnQpCi17Ci19
Ci0KLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlJiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpTdGF0ZTo6b3BlcmF0b3I9KGNvbnN0IFN0YXRlJiBvdGhlcikKLXsKLSAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIHVucGFy
c2VkU3Ryb2tlQ29sb3IgPSBvdGhlci51bnBhcnNlZFN0cm9rZUNvbG9yOwotICAgIHVucGFyc2Vk
RmlsbENvbG9yID0gb3RoZXIudW5wYXJzZWRGaWxsQ29sb3I7Ci0gICAgc3Ryb2tlU3R5bGUgPSBv
dGhlci5zdHJva2VTdHlsZTsKLSAgICBmaWxsU3R5bGUgPSBvdGhlci5maWxsU3R5bGU7Ci0gICAg
bGluZVdpZHRoID0gb3RoZXIubGluZVdpZHRoOwotICAgIGxpbmVDYXAgPSBvdGhlci5saW5lQ2Fw
OwotICAgIGxpbmVKb2luID0gb3RoZXIubGluZUpvaW47Ci0gICAgbWl0ZXJMaW1pdCA9IG90aGVy
Lm1pdGVyTGltaXQ7Ci0gICAgc2hhZG93T2Zmc2V0ID0gb3RoZXIuc2hhZG93T2Zmc2V0OwotICAg
IHNoYWRvd0JsdXIgPSBvdGhlci5zaGFkb3dCbHVyOwotICAgIHNoYWRvd0NvbG9yID0gb3RoZXIu
c2hhZG93Q29sb3I7Ci0gICAgZ2xvYmFsQWxwaGEgPSBvdGhlci5nbG9iYWxBbHBoYTsKLSAgICBn
bG9iYWxDb21wb3NpdGUgPSBvdGhlci5nbG9iYWxDb21wb3NpdGU7Ci0gICAgZ2xvYmFsQmxlbmQg
PSBvdGhlci5nbG9iYWxCbGVuZDsKLSAgICB0cmFuc2Zvcm0gPSBvdGhlci50cmFuc2Zvcm07Ci0g
ICAgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IG90aGVyLmhhc0ludmVydGlibGVUcmFuc2Zvcm07
Ci0gICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gb3RoZXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVk
OwotICAgIGltYWdlU21vb3RoaW5nUXVhbGl0eSA9IG90aGVyLmltYWdlU21vb3RoaW5nUXVhbGl0
eTsKLSAgICB0ZXh0QWxpZ24gPSBvdGhlci50ZXh0QWxpZ247Ci0gICAgdGV4dEJhc2VsaW5lID0g
b3RoZXIudGV4dEJhc2VsaW5lOwotICAgIGRpcmVjdGlvbiA9IG90aGVyLmRpcmVjdGlvbjsKLSAg
ICB1bnBhcnNlZEZvbnQgPSBvdGhlci51bnBhcnNlZEZvbnQ7Ci0gICAgZm9udCA9IG90aGVyLmZv
bnQ7CitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OmZvbnRTdHJp
bmcoKSBjb25zdAoreworICAgIGlmICghZm9udC5yZWFsaXplZCgpKQorICAgICAgICByZXR1cm4g
RGVmYXVsdEZvbnQ7CisKKyAgICBTdHJpbmdCdWlsZGVyIHNlcmlhbGl6ZWRGb250OworICAgIGNv
bnN0IGF1dG8mIGZvbnQgPSB0aGlzLT5mb250LmZvbnREZXNjcmlwdGlvbigpOwogCi0gICAgcmV0
dXJuICp0aGlzOworICAgIGF1dG8gaXRhbGljID0gZm9udC5pdGFsaWMoKSA/ICJpdGFsaWMgIiA6
ICIiOworICAgIGF1dG8gc21hbGxDYXBzID0gZm9udC52YXJpYW50Q2FwcygpID09IEZvbnRWYXJp
YW50Q2Fwczo6U21hbGwgPyAic21hbGwtY2FwcyAiIDogIiI7CisgICAgc2VyaWFsaXplZEZvbnQu
YXBwZW5kKGl0YWxpYywgc21hbGxDYXBzLCBmb250LmNvbXB1dGVkUGl4ZWxTaXplKCksICJweCIp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnQuZmFtaWx5Q291bnQoKTsgKytp
KSB7CisgICAgICAgIFN0cmluZ1ZpZXcgZmFtaWx5ID0gZm9udC5mYW1pbHlBdChpKTsKKyAgICAg
ICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQorICAgICAgICAgICAgZmFtaWx5
ID0gZmFtaWx5LnN1YnN0cmluZyg4KTsKKworICAgICAgICBhdXRvIHNlcGFyYXRvciA9IGkgPyAi
LCAiIDogIiAiOworICAgICAgICBhdXRvIHF1b3RlID0gZmFtaWx5LmNvbnRhaW5zKCcgJykgPyAi
XCIiIDogIiI7CisgICAgICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZChzZXBhcmF0b3IsIHF1b3Rl
LCBmYW1pbHksIHF1b3RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VyaWFsaXplZEZvbnQudG9T
dHJpbmcoKTsKK30KKworQ2FudmFzTGluZUNhcCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpTdGF0ZTo6Y2FudmFzTGluZUNhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvQ2FudmFzTGlu
ZUNhcChsaW5lQ2FwKTsKK30KKworQ2FudmFzTGluZUpvaW4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6U3RhdGU6OmNhbnZhc0xpbmVKb2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG9D
YW52YXNMaW5lSm9pbihsaW5lSm9pbik7Cit9CisKK0NhbnZhc1RleHRBbGlnbiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Y2FudmFzVGV4dEFsaWduKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdG9DYW52YXNUZXh0QWxpZ24odGV4dEFsaWduKTsKK30KKworQ2FudmFzVGV4dEJh
c2VsaW5lIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpjYW52YXNUZXh0QmFz
ZWxpbmUoKSBjb25zdAoreworICAgIHJldHVybiB0b0NhbnZhc1RleHRCYXNlbGluZSh0ZXh0QmFz
ZWxpbmUpOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6
Omdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvblN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bXBvc2l0ZU9wZXJhdG9yTmFtZShnbG9iYWxDb21wb3NpdGUsIGdsb2JhbEJsZW5kKTsKK30KKwor
U3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpzaGFkb3dDb2xvclN0
cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKHNoYWRvd0Nv
bG9yKTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Rm9udFByb3h5Ojp+Rm9u
dFByb3h5KCkKQEAgLTQxNSwxMSArNTE3LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUgc3R5bGUpCiAgICAgc3RhdGUudW5wYXJz
ZWRGaWxsQ29sb3IgPSBTdHJpbmcoKTsKIH0KIAotZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6bGluZVdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGUoKS5saW5lV2lk
dGg7Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0TGluZVdpZHRo
KGZsb2F0IHdpZHRoKQogewogICAgIGlmICghKHN0ZDo6aXNmaW5pdGUod2lkdGgpICYmIHdpZHRo
ID4gMCkpCkBAIC00MzQsNDEgKzUzMSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQogICAgIGMtPnNldFN0cm9rZVRoaWNrbmVz
cyh3aWR0aCk7CiB9CiAKLXN0YXRpYyBDYW52YXNMaW5lQ2FwIHRvQ2FudmFzTGluZUNhcChMaW5l
Q2FwIGxpbmVDYXApCi17Ci0gICAgc3dpdGNoIChsaW5lQ2FwKSB7Ci0gICAgY2FzZSBCdXR0Q2Fw
OgotICAgICAgICByZXR1cm4gQ2FudmFzTGluZUNhcDo6QnV0dDsKLSAgICBjYXNlIFJvdW5kQ2Fw
OgotICAgICAgICByZXR1cm4gQ2FudmFzTGluZUNhcDo6Um91bmQ7Ci0gICAgY2FzZSBTcXVhcmVD
YXA6Ci0gICAgICAgIHJldHVybiBDYW52YXNMaW5lQ2FwOjpTcXVhcmU7Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENhbnZhc0xpbmVDYXA6OkJ1dHQ7Ci19
Ci0KLXN0YXRpYyBMaW5lQ2FwIGZyb21DYW52YXNMaW5lQ2FwKENhbnZhc0xpbmVDYXAgY2FudmFz
TGluZUNhcCkKLXsKLSAgICBzd2l0Y2ggKGNhbnZhc0xpbmVDYXApIHsKLSAgICBjYXNlIENhbnZh
c0xpbmVDYXA6OkJ1dHQ6Ci0gICAgICAgIHJldHVybiBCdXR0Q2FwOwotICAgIGNhc2UgQ2FudmFz
TGluZUNhcDo6Um91bmQ6Ci0gICAgICAgIHJldHVybiBSb3VuZENhcDsKLSAgICBjYXNlIENhbnZh
c0xpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgcmV0dXJuIFNxdWFyZUNhcDsKLSAgICB9Ci0gICAg
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEJ1dHRDYXA7Ci19Ci0KLUNh
bnZhc0xpbmVDYXAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bGluZUNhcCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHRvQ2FudmFzTGluZUNhcChzdGF0ZSgpLmxpbmVDYXApOwotfQotCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldExpbmVDYXAoQ2FudmFzTGluZUNh
cCBjYW52YXNMaW5lQ2FwKQogewogICAgIGF1dG8gbGluZUNhcCA9IGZyb21DYW52YXNMaW5lQ2Fw
KGNhbnZhc0xpbmVDYXApOwpAQCAtNDk3LDQxICs1NTksNiBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldExpbmVDYXAoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkKICAg
ICBzZXRMaW5lQ2FwKGNhcCk7CiB9CiAKLXN0YXRpYyBDYW52YXNMaW5lSm9pbiB0b0NhbnZhc0xp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHN3aXRjaCAobGluZUpvaW4pIHsKLSAg
ICBjYXNlIFJvdW5kSm9pbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc0xpbmVKb2luOjpSb3VuZDsK
LSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc0xpbmVKb2luOjpCZXZl
bDsKLSAgICBjYXNlIE1pdGVySm9pbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc0xpbmVKb2luOjpN
aXRlcjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2Fu
dmFzTGluZUpvaW46OlJvdW5kOwotfQotCi1zdGF0aWMgTGluZUpvaW4gZnJvbUNhbnZhc0xpbmVK
b2luKENhbnZhc0xpbmVKb2luIGNhbnZhc0xpbmVKb2luKQotewotICAgIHN3aXRjaCAoY2FudmFz
TGluZUpvaW4pIHsKLSAgICBjYXNlIENhbnZhc0xpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgcmV0
dXJuIFJvdW5kSm9pbjsKLSAgICBjYXNlIENhbnZhc0xpbmVKb2luOjpCZXZlbDoKLSAgICAgICAg
cmV0dXJuIEJldmVsSm9pbjsKLSAgICBjYXNlIENhbnZhc0xpbmVKb2luOjpNaXRlcjoKLSAgICAg
ICAgcmV0dXJuIE1pdGVySm9pbjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFJvdW5kSm9pbjsKLX0KLQotQ2FudmFzTGluZUpvaW4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6bGluZUpvaW4oKSBjb25zdAotewotICAgIHJldHVybiB0b0Nh
bnZhc0xpbmVKb2luKHN0YXRlKCkubGluZUpvaW4pOwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldExpbmVKb2luKENhbnZhc0xpbmVKb2luIGNhbnZhc0xpbmVKb2lu
KQogewogICAgIGF1dG8gbGluZUpvaW4gPSBmcm9tQ2FudmFzTGluZUpvaW4oY2FudmFzTGluZUpv
aW4pOwpAQCAtNTYwLDExICs1ODcsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldExpbmVKb2luKGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUpCiAgICAgc2V0TGluZUpv
aW4oam9pbik7CiB9CiAKLWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1pdGVy
TGltaXQoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0ZSgpLm1pdGVyTGltaXQ7Ci19Ci0KIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKIHsKICAgICBpZiAoIShzdGQ6OmlzZmluaXRlKGxpbWl0KSAmJiBsaW1pdCA+IDApKQpAQCAt
NTc5LDExICs2MDEsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldE1p
dGVyTGltaXQoZmxvYXQgbGltaXQpCiAgICAgYy0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7CiB9CiAK
LWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRvd09mZnNldFgoKSBjb25z
dAotewotICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwotfQotCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvd09mZnNldFgoZmxvYXQgeCkK
IHsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoeCkpCkBAIC01OTUsMTEgKzYxMiw2IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93T2Zmc2V0WChmbG9hdCB4KQog
ICAgIGFwcGx5U2hhZG93KCk7CiB9CiAKLWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNoYWRvd09mZnNldFkoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd09m
ZnNldC5oZWlnaHQoKTsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRTaGFkb3dPZmZzZXRZKGZsb2F0IHkpCiB7CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHkpKQpA
QCAtNjExLDExICs2MjMsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNl
dFNoYWRvd09mZnNldFkoZmxvYXQgeSkKICAgICBhcHBseVNoYWRvdygpOwogfQogCi1mbG9hdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaGFkb3dCbHVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3RhdGUoKS5zaGFkb3dCbHVyOwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldFNoYWRvd0JsdXIoZmxvYXQgYmx1cikKIHsKICAgICBpZiAoIShzdGQ6Omlz
ZmluaXRlKGJsdXIpICYmIGJsdXIgPj0gMCkpCkBAIC02MjcsMTEgKzYzNCw2IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93Qmx1cihmbG9hdCBibHVyKQogICAg
IGFwcGx5U2hhZG93KCk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpzaGFkb3dDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KHN0YXRlKCkuc2hhZG93Q29sb3IpOwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAg
Q29sb3IgY29sb3IgPSBwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IoY29sb3JTdHJpbmcsIGNhbnZh
c0Jhc2UoKSk7CkBAIC02NDQsMTEgKzY0Niw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKICAgICBh
cHBseVNoYWRvdygpOwogfQogCi1jb25zdCBWZWN0b3I8ZmxvYXQ+JiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRMaW5lRGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRlKCku
bGluZURhc2g7Ci19Ci0KIHN0YXRpYyBib29sIGxpbmVEYXNoU2VxdWVuY2VJc1ZhbGlkKGNvbnN0
IFZlY3RvcjxmbG9hdD4mIGRhc2gpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNo
LnNpemUoKTsgaSsrKSB7CkBAIC02ODQsMTEgKzY4MSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2V0V2Via2l0TGluZURhc2goY29uc3QgVmVjdG9yPGZsb2F0PiYgZGFz
aCkKICAgICBhcHBseUxpbmVEYXNoKCk7CiB9CiAKLWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmxpbmVEYXNoT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGUoKS5s
aW5lRGFzaE9mZnNldDsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRMaW5lRGFzaE9mZnNldChmbG9hdCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRl
KG9mZnNldCkgfHwgc3RhdGUoKS5saW5lRGFzaE9mZnNldCA9PSBvZmZzZXQpCkBAIC03MTAsMTEg
KzcwMiw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFz
aCgpIGNvbnN0CiAgICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlKCku
bGluZURhc2hPZmZzZXQpOwogfQogCi1mbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnbG9iYWxBbHBoYSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRlKCkuZ2xvYmFsQWxwaGE7
Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQWxwaGEo
ZmxvYXQgYWxwaGEpCiB7CiAgICAgaWYgKCEoYWxwaGEgPj0gMCAmJiBhbHBoYSA8PSAxKSkKQEAg
LTcyOSwxMSArNzE2LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRH
bG9iYWxBbHBoYShmbG9hdCBhbHBoYSkKICAgICBjLT5zZXRBbHBoYShhbHBoYSk7CiB9CiAKLVN0
cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnbG9iYWxDb21wb3NpdGVPcGVyYXRp
b24oKSBjb25zdAotewotICAgIHJldHVybiBjb21wb3NpdGVPcGVyYXRvck5hbWUoc3RhdGUoKS5n
bG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQpOwotfQotCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBT
dHJpbmcmIG9wZXJhdGlvbikKIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCA9IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwpAQCAtMTAwNiw3ICs5ODgsNyBAQCBzdGF0aWMgYm9vbCB2
YWxpZGF0ZVJlY3RGb3JDYW52YXMoZmxvYXQmIHgsIGZsb2F0JiB5LCBmbG9hdCYgd2lkdGgsIGZs
b2F0JiBoZWlnaAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoQ29tcG9zaXRlT3BlcmF0b3Ig
b3ApCitzdGF0aWMgYm9vbCBpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIC8vIFNlZSA0LjguMTEuMS4zIENvbXBvc2l0aW5nCiAgICAgLy8gQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3AgYW5kIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5h
dGlvbk91dCBhcmUgbm90IGxpc3RlZCBoZXJlIGFzIHRoZSBwbGF0Zm9ybXMgYWxyZWFkeQpAQCAt
MTE2NCwxNCArMTE0NiwxMyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omlz
UG9pbnRJblN0cm9rZShQYXRoMkQmIHBhdGgsIGZsb2F0IHgsIGZsb2F0CiAKIGJvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluUGF0aEludGVybmFsKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHgsIGZsb2F0IHksIENhbnZhc0ZpbGxSdWxlIHdpbmRpbmdSdWxlKQogewot
ICAgIGF1dG8qIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKKyAgICBpZiAoIWRy
YXdpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0YXRlKCku
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgaWYgKCFzdGF0ZS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIHRyYW5zZm9ybWVkUG9pbnQgPSBzdGF0ZSgpLnRyYW5zZm9ybS5p
bnZlcnNlKCkudmFsdWVPcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQoRmxvYXRQb2ludCh4
LCB5KSk7Ci0KKyAgICBhdXRvIHRyYW5zZm9ybWVkUG9pbnQgPSBzdGF0ZS50cmFuc2Zvcm0uaW52
ZXJzZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KEZsb2F0UG9pbnQoeCwg
eSkpOwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh0cmFuc2Zvcm1lZFBvaW50LngoKSkgfHwgIXN0
ZDo6aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC55KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTExODAsMTggKzExNjEsMjcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjppc1BvaW50SW5QYXRoSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQKIAogYm9v
bCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJva2VJbnRlcm5hbChj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGF1dG8qIGMgPSBkcmF3
aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKKyAgICBpZiAoIWRyYXdpbmdDb250ZXh0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybSkKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgaWYgKCFzdGF0ZS5o
YXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IHRyYW5zZm9ybWVkUG9pbnQgPSBzdGF0ZSgpLnRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVPcihB
ZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQoRmxvYXRQb2ludCh4LCB5KSk7CisgICAgYXV0byB0
cmFuc2Zvcm1lZFBvaW50ID0gc3RhdGUudHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZU9yKEFmZmlu
ZVRyYW5zZm9ybSgpKS5tYXBQb2ludChGbG9hdFBvaW50KHgsIHkpKTsKICAgICBpZiAoIXN0ZDo6
aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC54KCkpIHx8ICFzdGQ6OmlzZmluaXRlKHRyYW5zZm9y
bWVkUG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ2FudmFzU3Ryb2tl
U3R5bGVBcHBsaWVyIGFwcGxpZXIodGhpcyk7Ci0gICAgcmV0dXJuIHBhdGguc3Ryb2tlQ29udGFp
bnMoYXBwbGllciwgdHJhbnNmb3JtZWRQb2ludCk7CisgICAgcmV0dXJuIHBhdGguc3Ryb2tlQ29u
dGFpbnModHJhbnNmb3JtZWRQb2ludCwgWyZzdGF0ZV0gKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5saW5lV2lkdGgp
OworICAgICAgICBjb250ZXh0LnNldExpbmVDYXAoc3RhdGUubGluZUNhcCk7CisgICAgICAgIGNv
bnRleHQuc2V0TGluZUpvaW4oc3RhdGUubGluZUpvaW4pOworICAgICAgICBjb250ZXh0LnNldE1p
dGVyTGltaXQoc3RhdGUubWl0ZXJMaW1pdCk7CisgICAgICAgIGF1dG8mIGxpbmVEYXNoID0gc3Rh
dGUubGluZURhc2g7CisgICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFz
aC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxE
YXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7CisgICAgICAgIGNvbnRleHQuc2V0TGluZURh
c2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKQEAgLTIwMDksMjQgKzE5OTksMjIg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKFQKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpkaWREcmF3RW50aXJlQ2FudmFzKCkKIHsKLSAgICBkaWREcmF3KEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZhc0Jhc2UoKS5zaXplKCkpLCBDYW52YXNEaWREcmF3QXBw
bHlDbGlwKTsKKyAgICBkaWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZh
c0Jhc2UoKS5zaXplKCkpLCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXApOwogfQogCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpZERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCB1
bnNpZ25lZCBvcHRpb25zKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWRE
cmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgT3B0aW9uU2V0PERpZERyYXdPcHRpb24+IG9wdGlvbnMp
CiB7Ci0gICAgYXV0byogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjKQorICAgIGlm
ICghZHJhd2luZ0NvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc3RhdGUoKS5o
YXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3Qg
ZGlydHlSZWN0ID0gcjsKLSAgICBpZiAob3B0aW9ucyAmIENhbnZhc0RpZERyYXdBcHBseVRyYW5z
Zm9ybSkgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gc3RhdGUoKS50cmFuc2Zvcm07
Ci0gICAgICAgIGRpcnR5UmVjdCA9IGN0bS5tYXBSZWN0KHIpOwotICAgIH0KIAotICAgIGlmIChv
cHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5U2hhZG93ICYmIHN0YXRlKCkuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCkpIHsKKyAgICBpZiAob3B0aW9ucy5jb250YWlucyhEaWREcmF3T3B0aW9uOjpB
cHBseVRyYW5zZm9ybSkpCisgICAgICAgIGRpcnR5UmVjdCA9IHN0YXRlKCkudHJhbnNmb3JtLm1h
cFJlY3QoZGlydHlSZWN0KTsKKworICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKERpZERyYXdPcHRp
b246OkFwcGx5U2hhZG93KSAmJiBzdGF0ZSgpLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpKSB7CiAg
ICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uCiAg
ICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7CiAgICAgICAgIHNoYWRvd1Jl
Y3QubW92ZShzdGF0ZSgpLnNoYWRvd09mZnNldCk7CkBAIC0yMDM0LDExICsyMDIyLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYg
ciwgdW5zaWduZWQgb3B0aW9ucykKICAgICAgICAgZGlydHlSZWN0LnVuaXRlKHNoYWRvd1JlY3Qp
OwogICAgIH0KIAotICAgIGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5Q2xpcCkgewot
ICAgICAgICAvLyBGSVhNRTogYXBwbHkgdGhlIGN1cnJlbnQgY2xpcCB0byB0aGUgcmVjdGFuZ2xl
LiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGdldCB0aGUgY2xpcAotICAgICAgICAvLyBiYWNrIG91
dCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0byB0YWtlIGNsaXAgaW50byBhY2NvdW50IGZv
ciBpbmNyZW1lbnRhbCBwYWludGluZywKLSAgICAgICAgLy8gd2UnZCBoYXZlIHRvIGtlZXAgdGhl
IGNsaXAgcGF0aCBhcm91bmQuCi0gICAgfQorICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGFw
cGx5IHRoZSBjbGlwIGJlY2F1c2Ugd2UgaGF2ZSBubyB3YXkgb2YgcmVhZGluZyB0aGUgY2xpcCBv
dXQgb2YgdGhlIEdyYXBoaWNzQ29udGV4dC4KIAogICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KGRp
cnR5UmVjdCk7CiB9CkBAIC0yMTU3LDEzICsyMTQxLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9h
dAogCiAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QpOwogICAgIGlmICgh
aW1hZ2VEYXRhKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7Ci0gICAg
ICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0
YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwotICAgICAgICBjb25zb2xlTWVz
c2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53aWR0aCgpKTsKLSAgICAgICAgY29uc29s
ZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiIHggIik7Ci0gICAgICAgIGNvbnNvbGVNZXNzYWdlLmFw
cGVuZE51bWJlcihpbWFnZURhdGFSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICBjYW52YXNCYXNl
KCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlLnRvU3Ry
aW5nKCkpOworICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsCisgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEg
ZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURhdGFSZWN0LndpZHRoKCks
ICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIApAQCAtMjIwOSw3ICsyMTg4LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAot
ICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUg
dHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKKyAgICBkaWREcmF3KGRlc3RSZWN0LCB7IH0pOyAv
LyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjppbmZsYXRlU3Ryb2tlUmVjdChGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0CkBAIC0yMjQxLDExICsyMjIwLDYgQEAgc3RhdGljIGlubGluZSBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBzbW9vdGhpbmdUb0ludGVycG9sYXRpb25RdWFsaXR5KEltYWdlU21vb3RoaW4KICAgICBy
ZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzsKIH07CiAKLWF1dG8gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6aW1hZ2VTbW9vdGhpbmdRdWFsaXR5KCkgY29uc3QgLT4gSW1hZ2VT
bW9vdGhpbmdRdWFsaXR5Ci17Ci0gICAgcmV0dXJuIHN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdRdWFs
aXR5OwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEltYWdlU21v
b3RoaW5nUXVhbGl0eShJbWFnZVNtb290aGluZ1F1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBpZiAo
cXVhbGl0eSA9PSBzdGF0ZSgpLmltYWdlU21vb3RoaW5nUXVhbGl0eSkKQEAgLTIyNjEsMTEgKzIy
MzUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEltYWdlU21vb3Ro
aW5nUXVhbGl0eShJbWFnZVNtb290aGluZ1F1YWxpdAogICAgICAgICBjb250ZXh0LT5zZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KHNtb290aGluZ1RvSW50ZXJwb2xhdGlvblF1YWxpdHkocXVh
bGl0eSkpOwogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmltYWdlU21v
b3RoaW5nRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRlKCkuaW1hZ2VTbW9vdGhp
bmdFbmFibGVkOwotfQotCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldElt
YWdlU21vb3RoaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGVuYWJsZWQgPT0g
c3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQpCkBAIC0yMjg4LDgyICsyMjU3LDYgQEAgUmVm
PFBhdGgyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0UGF0aCgpIGNvbnN0CiAg
ICAgcmV0dXJuIFBhdGgyRDo6Y3JlYXRlKG1fcGF0aCk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpmb250KCkgY29uc3QKLXsKLSAgICBpZiAoIXN0YXRlKCkuZm9u
dC5yZWFsaXplZCgpKQotICAgICAgICByZXR1cm4gRGVmYXVsdEZvbnQ7Ci0KLSAgICBTdHJpbmdC
dWlsZGVyIHNlcmlhbGl6ZWRGb250OwotICAgIGNvbnN0IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlKCkuZm9udC5mb250RGVzY3JpcHRpb24oKTsKLQotICAgIGlmIChmb250RGVzY3JpcHRp
b24uaXRhbGljKCkpCi0gICAgICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZExpdGVyYWwoIml0YWxp
YyAiKTsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnZhcmlhbnRDYXBzKCkgPT0gRm9udFZhcmlh
bnRDYXBzOjpTbWFsbCkKLSAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJhbCgic21h
bGwtY2FwcyAiKTsKLQotICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZE51bWJlcihmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSk7Ci0gICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0
ZXJhbCgicHgiKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250RGVzY3JpcHRp
b24uZmFtaWx5Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpKQotICAgICAgICAgICAgc2Vy
aWFsaXplZEZvbnQuYXBwZW5kKCcsJyk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBh
cHBlbmQgZmFtaWx5IGRpcmVjdGx5IHRvIHNlcmlhbGl6ZWRGb250IHJhdGhlciB0aGFuIGJ1aWxk
aW5nIGEgdGVtcG9yYXJ5IHN0cmluZy4KLSAgICAgICAgU3RyaW5nIGZhbWlseSA9IGZvbnREZXNj
cmlwdGlvbi5mYW1pbHlBdChpKTsKLSAgICAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCItd2Vi
a2l0LSIpKQotICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LnN1YnN0cmluZyg4KTsKLSAgICAg
ICAgaWYgKGZhbWlseS5jb250YWlucygnICcpKQotICAgICAgICAgICAgZmFtaWx5ID0gbWFrZVN0
cmluZygnIicsIGZhbWlseSwgJyInKTsKLQotICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQo
JyAnLCBmYW1pbHkpOwotICAgIH0KLQotICAgIHJldHVybiBzZXJpYWxpemVkRm9udC50b1N0cmlu
ZygpOwotfQotCi1zdGF0aWMgQ2FudmFzVGV4dEFsaWduIHRvQ2FudmFzVGV4dEFsaWduKFRleHRB
bGlnbiB0ZXh0QWxpZ24pCi17Ci0gICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKLSAgICBjYXNlIFN0
YXJ0VGV4dEFsaWduOgotICAgICAgICByZXR1cm4gQ2FudmFzVGV4dEFsaWduOjpTdGFydDsKLSAg
ICBjYXNlIEVuZFRleHRBbGlnbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGlnbjo6RW5k
OwotICAgIGNhc2UgTGVmdFRleHRBbGlnbjoKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRBbGln
bjo6TGVmdDsKLSAgICBjYXNlIFJpZ2h0VGV4dEFsaWduOgotICAgICAgICByZXR1cm4gQ2FudmFz
VGV4dEFsaWduOjpSaWdodDsKLSAgICBjYXNlIENlbnRlclRleHRBbGlnbjoKLSAgICAgICAgcmV0
dXJuIENhbnZhc1RleHRBbGlnbjo6Q2VudGVyOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBDYW52YXNUZXh0QWxpZ246OlN0YXJ0OwotfQotCi1zdGF0aWMg
VGV4dEFsaWduIGZyb21DYW52YXNUZXh0QWxpZ24oQ2FudmFzVGV4dEFsaWduIGNhbnZhc1RleHRB
bGlnbikKLXsKLSAgICBzd2l0Y2ggKGNhbnZhc1RleHRBbGlnbikgewotICAgIGNhc2UgQ2FudmFz
VGV4dEFsaWduOjpTdGFydDoKLSAgICAgICAgcmV0dXJuIFN0YXJ0VGV4dEFsaWduOwotICAgIGNh
c2UgQ2FudmFzVGV4dEFsaWduOjpFbmQ6Ci0gICAgICAgIHJldHVybiBFbmRUZXh0QWxpZ247Ci0g
ICAgY2FzZSBDYW52YXNUZXh0QWxpZ246OkxlZnQ6Ci0gICAgICAgIHJldHVybiBMZWZ0VGV4dEFs
aWduOwotICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpSaWdodDoKLSAgICAgICAgcmV0dXJuIFJp
Z2h0VGV4dEFsaWduOwotICAgIGNhc2UgQ2FudmFzVGV4dEFsaWduOjpDZW50ZXI6Ci0gICAgICAg
IHJldHVybiBDZW50ZXJUZXh0QWxpZ247Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFN0YXJ0VGV4dEFsaWduOwotfQotCi1DYW52YXNUZXh0QWxpZ24gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6dGV4dEFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdG9DYW52YXNUZXh0QWxpZ24oc3RhdGUoKS50ZXh0QWxpZ24pOwotfQotCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFRleHRBbGlnbihDYW52YXNUZXh0QWxpZ24gY2Fu
dmFzVGV4dEFsaWduKQogewogICAgIGF1dG8gdGV4dEFsaWduID0gZnJvbUNhbnZhc1RleHRBbGln
bihjYW52YXNUZXh0QWxpZ24pOwpAQCAtMjM3Myw1MyArMjI2Niw2IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VGV4dEFsaWduKENhbnZhc1RleHRBbGlnbiBjYW52YXNU
ZXh0QWxpZ24pCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4dEFsaWduID0gdGV4dEFsaWduOwog
fQogCi1zdGF0aWMgQ2FudmFzVGV4dEJhc2VsaW5lIHRvQ2FudmFzVGV4dEJhc2VsaW5lKFRleHRC
YXNlbGluZSB0ZXh0QmFzZWxpbmUpCi17Ci0gICAgc3dpdGNoICh0ZXh0QmFzZWxpbmUpIHsKLSAg
ICBjYXNlIFRvcFRleHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGlu
ZTo6VG9wOwotICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENh
bnZhc1RleHRCYXNlbGluZTo6SGFuZ2luZzsKLSAgICBjYXNlIE1pZGRsZVRleHRCYXNlbGluZToK
LSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6TWlkZGxlOwotICAgIGNhc2UgQWxw
aGFiZXRpY1RleHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6
QWxwaGFiZXRpYzsKLSAgICBjYXNlIElkZW9ncmFwaGljVGV4dEJhc2VsaW5lOgotICAgICAgICBy
ZXR1cm4gQ2FudmFzVGV4dEJhc2VsaW5lOjpJZGVvZ3JhcGhpYzsKLSAgICBjYXNlIEJvdHRvbVRl
eHRCYXNlbGluZToKLSAgICAgICAgcmV0dXJuIENhbnZhc1RleHRCYXNlbGluZTo6Qm90dG9tOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDYW52YXNUZXh0
QmFzZWxpbmU6OlRvcDsKLX0KLQotc3RhdGljIFRleHRCYXNlbGluZSBmcm9tQ2FudmFzVGV4dEJh
c2VsaW5lKENhbnZhc1RleHRCYXNlbGluZSBjYW52YXNUZXh0QmFzZWxpbmUpCi17Ci0gICAgc3dp
dGNoIChjYW52YXNUZXh0QmFzZWxpbmUpIHsKLSAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6
VG9wOgotICAgICAgICByZXR1cm4gVG9wVGV4dEJhc2VsaW5lOwotICAgIGNhc2UgQ2FudmFzVGV4
dEJhc2VsaW5lOjpIYW5naW5nOgotICAgICAgICByZXR1cm4gSGFuZ2luZ1RleHRCYXNlbGluZTsK
LSAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6TWlkZGxlOgotICAgICAgICByZXR1cm4gTWlk
ZGxlVGV4dEJhc2VsaW5lOwotICAgIGNhc2UgQ2FudmFzVGV4dEJhc2VsaW5lOjpBbHBoYWJldGlj
OgotICAgICAgICByZXR1cm4gQWxwaGFiZXRpY1RleHRCYXNlbGluZTsKLSAgICBjYXNlIENhbnZh
c1RleHRCYXNlbGluZTo6SWRlb2dyYXBoaWM6Ci0gICAgICAgIHJldHVybiBJZGVvZ3JhcGhpY1Rl
eHRCYXNlbGluZTsKLSAgICBjYXNlIENhbnZhc1RleHRCYXNlbGluZTo6Qm90dG9tOgotICAgICAg
ICByZXR1cm4gQm90dG9tVGV4dEJhc2VsaW5lOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBUb3BUZXh0QmFzZWxpbmU7Ci19Ci0KLUNhbnZhc1RleHRCYXNl
bGluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0QmFzZWxpbmUoKSBjb25zdAot
ewotICAgIHJldHVybiB0b0NhbnZhc1RleHRCYXNlbGluZShzdGF0ZSgpLnRleHRCYXNlbGluZSk7
Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VGV4dEJhc2VsaW5l
KENhbnZhc1RleHRCYXNlbGluZSBjYW52YXNUZXh0QmFzZWxpbmUpCiB7CiAgICAgYXV0byB0ZXh0
QmFzZWxpbmUgPSBmcm9tQ2FudmFzVGV4dEJhc2VsaW5lKGNhbnZhc1RleHRCYXNlbGluZSk7CkBA
IC0yNDM4LDcgKzIyODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNl
dERpcmVjdGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIG1vZGlmaWFibGVTdGF0ZSgpLmRp
cmVjdGlvbiA9IGRpcmVjdGlvbjsKIH0KIAotYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjYW5EcmF3VGV4dFdpdGhQYXJhbXMoZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBP
cHRpb25hbDxmbG9hdD4gbWF4V2lkdGgpCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNhbkRyYXdUZXh0KGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0aW9uYWw8Zmxv
YXQ+IG1heFdpZHRoKQogewogICAgIGF1dG8qIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlm
ICghYykKQEAgLTI0NzUsMTEgKzIzMjEsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VU
aGF0TmVlZHNSZXBsYWNpbmcoVUNoYXIgYykKICAgICByZXR1cm4gYyA9PSAweDAwMDkgfHwgYyA9
PSAweDAwMEEgfHwgYyA9PSAweDAwMEIgfHwgYyA9PSAweDAwMEMgfHwgYyA9PSAweDAwMEQ7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bm9ybWFsaXplU3BhY2VzKFN0
cmluZyYgdGV4dCkKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpub3JtYWxp
emVTcGFjZXMoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIHNpemVfdCBpID0gdGV4dC5maW5k
KGlzU3BhY2VUaGF0TmVlZHNSZXBsYWNpbmcpOwogICAgIGlmIChpID09IG5vdEZvdW5kKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0ZXh0OwogCiAgICAgdW5zaWduZWQgdGV4dExl
bmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgVmVjdG9yPFVDaGFyPiBjaGFyVmVjdG9yKHRleHRM
ZW5ndGgpOwpAQCAtMjQ5MSwyMCArMjMzNywxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6Om5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcmIHRleHQpCiAgICAgICAgIGlmIChpc1Nw
YWNlVGhhdE5lZWRzUmVwbGFjaW5nKGNoYXJWZWN0b3JbaV0pKQogICAgICAgICAgICAgY2hhclZl
Y3RvcltpXSA9ICcgJzsKICAgICB9Ci0gICAgdGV4dCA9IFN0cmluZzo6YWRvcHQoV1RGTW92ZShj
aGFyVmVjdG9yKSk7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92ZShjaGFyVmVjdG9y
KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFsPGZs
b2F0PiBtYXhXaWR0aCkKIHsKLSAgICBpZiAoIWNhbkRyYXdUZXh0V2l0aFBhcmFtcyh4LCB5LCBm
aWxsLCBtYXhXaWR0aCkpCisgICAgaWYgKCFjYW5EcmF3VGV4dCh4LCB5LCBmaWxsLCBtYXhXaWR0
aCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IHRleHQ7
Ci0gICAgbm9ybWFsaXplU3BhY2VzKG5vcm1hbGl6ZWRUZXh0KTsKLQorICAgIFN0cmluZyBub3Jt
YWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0KTsKICAgICBhdXRvIGRpcmVjdGlvbiA9
IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBUZXh0RGlyZWN0aW9uOjpS
VEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRU
ZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsK
LQogICAgIGRyYXdUZXh0VW5jaGVja2VkKHRleHRSdW4sIHgsIHksIGZpbGwsIG1heFdpZHRoKTsK
IH0KIApAQCAtMjYyMiwxMiArMjQ2NSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgZmxvCiAKIFJl
ZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0
ID0gdGV4dDsKLSAgICBub3JtYWxpemVTcGFjZXMobm9ybWFsaXplZFRleHQpOwotCisgICAgU3Ry
aW5nIG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFsaXplU3BhY2VzKHRleHQpOwogICAgIGF1dG8gZGly
ZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJl
Y3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKICAgICBUZXh0UnVuIHRleHRSdW4obm9y
bWFsaXplZFRleHQsIDAsIDAsIEFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwgZmFsc2Us
IHRydWUpOwotCiAgICAgcmV0dXJuIG1lYXN1cmVUZXh0SW50ZXJuYWwodGV4dFJ1bik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAppbmRleCA5NGFmZWEzOWYwMTg5MjAzY2NmNWE4NGQ4NWJjNzZmNTY4
MDVmNDczLi5hMzgyYjBkNmVhZWM3OTAyNDM5ZWIxOTI3YTI4ODRkMTU1NjBlMjlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDE3ICs1
MCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFR5cGVkT01DU1NJbWFnZVZh
bHVlOwogY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDYW52YXNCYXNlOwogY2xhc3MgQ2FudmFz
R3JhZGllbnQ7Ci1jbGFzcyBDYW52YXNQYXR0ZXJuOwogY2xhc3MgRE9NTWF0cml4OwogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSFRNTEltYWdlRWxlbWVu
dDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJbWFnZUJpdG1hcDsKIGNsYXNzIElt
YWdlRGF0YTsKIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFBhdGgyRDsKQEAgLTgzLDQ4
ICs3Nyw1MSBAQCB1c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZQogCiBjbGFzcyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1YmxpYyBD
YW52YXNQYXRoIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UpOwotcHVibGljOgorcHJvdGVjdGVkOgogICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UoQ2FudmFzQmFzZSYsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1v
ZGUpOworCitwdWJsaWM6CiAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZSgpOwogCi0gICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3Q7CisgICAgZmxvYXQgbGluZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5saW5lV2lkdGg7IH0KICAgICB2b2lkIHNldExpbmVX
aWR0aChmbG9hdCk7CiAKLSAgICBDYW52YXNMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdDsKKyAgICBD
YW52YXNMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmNhbnZhc0xpbmVD
YXAoKTsgfQogICAgIHZvaWQgc2V0TGluZUNhcChDYW52YXNMaW5lQ2FwKTsKICAgICB2b2lkIHNl
dExpbmVDYXAoY29uc3QgU3RyaW5nJik7CiAKLSAgICBDYW52YXNMaW5lSm9pbiBsaW5lSm9pbigp
IGNvbnN0OworICAgIENhbnZhc0xpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGUoKS5jYW52YXNMaW5lSm9pbigpOyB9CiAgICAgdm9pZCBzZXRMaW5lSm9pbihDYW52YXNMaW5l
Sm9pbik7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihjb25zdCBTdHJpbmcmKTsKIAotICAgIGZsb2F0
IG1pdGVyTGltaXQoKSBjb25zdDsKKyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1
cm4gc3RhdGUoKS5taXRlckxpbWl0OyB9CiAgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsK
IAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGdldExpbmVEYXNoKCkgY29uc3Q7CisgICAgY29u
c3QgVmVjdG9yPGZsb2F0PiYgZ2V0TGluZURhc2goKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmxp
bmVEYXNoOyB9CiAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisK
ICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB3ZWJraXRMaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJu
IGdldExpbmVEYXNoKCk7IH0KICAgICB2b2lkIHNldFdlYmtpdExpbmVEYXNoKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKIAotICAgIGZsb2F0IGxpbmVEYXNoT2Zmc2V0KCkgY29uc3Q7CisgICAgZmxv
YXQgbGluZURhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0
OyB9CiAgICAgdm9pZCBzZXRMaW5lRGFzaE9mZnNldChmbG9hdCk7CiAKLSAgICBmbG9hdCBzaGFk
b3dPZmZzZXRYKCkgY29uc3Q7CisgICAgZmxvYXQgc2hhZG93T2Zmc2V0WCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7IH0KICAgICB2b2lkIHNldFNoYWRvd09m
ZnNldFgoZmxvYXQpOwogCi0gICAgZmxvYXQgc2hhZG93T2Zmc2V0WSgpIGNvbnN0OworICAgIGZs
b2F0IHNoYWRvd09mZnNldFkoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLnNoYWRvd09mZnNldC5o
ZWlnaHQoKTsgfQogICAgIHZvaWQgc2V0U2hhZG93T2Zmc2V0WShmbG9hdCk7CiAKLSAgICBmbG9h
dCBzaGFkb3dCbHVyKCkgY29uc3Q7CisgICAgZmxvYXQgc2hhZG93Qmx1cigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRlKCkuc2hhZG93Qmx1cjsgfQogICAgIHZvaWQgc2V0U2hhZG93Qmx1cihmbG9hdCk7
CiAKLSAgICBTdHJpbmcgc2hhZG93Q29sb3IoKSBjb25zdDsKKyAgICBTdHJpbmcgc2hhZG93Q29s
b3IoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yU3RyaW5nKCk7IH0KICAgICB2
b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYpOwogCi0gICAgZmxvYXQgZ2xvYmFsQWxw
aGEoKSBjb25zdDsKKyAgICBmbG9hdCBnbG9iYWxBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRl
KCkuZ2xvYmFsQWxwaGE7IH0KICAgICB2b2lkIHNldEdsb2JhbEFscGhhKGZsb2F0KTsKIAotICAg
IFN0cmluZyBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgZ2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5nbG9iYWxDb21w
b3NpdGVPcGVyYXRpb25TdHJpbmcoKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBzYXZlKCkgeyArK21fdW5yZWFsaXpl
ZFNhdmVDb3VudDsgfQpAQCAtMTk2LDM3ICsxOTMsMzMgQEAgcHVibGljOgogICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAgICAgdm9pZCBwdXRJ
bWFnZURhdGEoSW1hZ2VEYXRhJiwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOwogCi0gICAg
ZmxvYXQgd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJuIDE7IH0K
KyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHdlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8o
KSB7IHJldHVybiAxOyB9CiAKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBMaW5lQ2FwIGdldExp
bmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmxpbmVDYXA7IH0KLSAgICBMaW5lSm9pbiBn
ZXRMaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkubGluZUpvaW47IH0KLQotICAgIGJv
b2wgaW1hZ2VTbW9vdGhpbmdFbmFibGVkKCkgY29uc3Q7CisgICAgYm9vbCBpbWFnZVNtb290aGlu
Z0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmltYWdlU21vb3RoaW5nRW5hYmxlZDsg
fQogICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwogCi0gICAgSW1hZ2VT
bW9vdGhpbmdRdWFsaXR5IGltYWdlU21vb3RoaW5nUXVhbGl0eSgpIGNvbnN0OworICAgIEltYWdl
U21vb3RoaW5nUXVhbGl0eSBpbWFnZVNtb290aGluZ1F1YWxpdHkoKSBjb25zdCB7IHJldHVybiBz
dGF0ZSgpLmltYWdlU21vb3RoaW5nUXVhbGl0eTsgfQogICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhp
bmdRdWFsaXR5KEltYWdlU21vb3RoaW5nUXVhbGl0eSk7CiAKICAgICB2b2lkIHNldFBhdGgoUGF0
aDJEJik7CiAgICAgUmVmPFBhdGgyRD4gZ2V0UGF0aCgpIGNvbnN0OwogCi0gICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRGlzcGxheUxpc3REcmF3
aW5nOyB9OwogICAgIHZvaWQgc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIGZsYWcpIHsg
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gZmxhZzsgfTsKIAotICAgIFN0cmluZyBmb250KCkg
Y29uc3Q7CisgICAgU3RyaW5nIGZvbnQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmZvbnRTdHJp
bmcoKTsgfQogCi0gICAgQ2FudmFzVGV4dEFsaWduIHRleHRBbGlnbigpIGNvbnN0OworICAgIENh
bnZhc1RleHRBbGlnbiB0ZXh0QWxpZ24oKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmNhbnZhc1Rl
eHRBbGlnbigpOyB9CiAgICAgdm9pZCBzZXRUZXh0QWxpZ24oQ2FudmFzVGV4dEFsaWduKTsKIAot
ICAgIENhbnZhc1RleHRCYXNlbGluZSB0ZXh0QmFzZWxpbmUoKSBjb25zdDsKKyAgICBDYW52YXNU
ZXh0QmFzZWxpbmUgdGV4dEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5jYW52YXNU
ZXh0QmFzZWxpbmUoKTsgfQogICAgIHZvaWQgc2V0VGV4dEJhc2VsaW5lKENhbnZhc1RleHRCYXNl
bGluZSk7CiAKICAgICB1c2luZyBEaXJlY3Rpb24gPSBDYW52YXNEaXJlY3Rpb247CiAgICAgdm9p
ZCBzZXREaXJlY3Rpb24oRGlyZWN0aW9uKTsKIAotICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1Ymxp
YyBGb250U2VsZWN0b3JDbGllbnQgeworICAgIGNsYXNzIEZvbnRQcm94eSBmaW5hbCA6IHB1Ymxp
YyBGb250U2VsZWN0b3JDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9udFByb3h5KCkg
PSBkZWZhdWx0OwogICAgICAgICB2aXJ0dWFsIH5Gb250UHJveHkoKTsKQEAgLTI0Niw3ICsyMzks
NyBAQCBwdWJsaWM6CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHVwZGF0ZShGb250U2Vs
ZWN0b3ImKTsKLSAgICAgICAgdm9pZCBmb250c05lZWRVcGRhdGUoRm9udFNlbGVjdG9yJikgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgZm9udHNOZWVkVXBkYXRlKEZvbnRTZWxlY3RvciYpIGZpbmFs
OwogCiAgICAgICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKICAgICB9OwpAQCAtMjU0LDkgKzI0Nyw2
IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3RhdGUgZmluYWwgewogICAgICAgICBTdGF0ZSgpOwog
Ci0gICAgICAgIFN0YXRlKGNvbnN0IFN0YXRlJik7Ci0gICAgICAgIFN0YXRlJiBvcGVyYXRvcj0o
Y29uc3QgU3RhdGUmKTsKLQogICAgICAgICBTdHJpbmcgdW5wYXJzZWRTdHJva2VDb2xvcjsKICAg
ICAgICAgU3RyaW5nIHVucGFyc2VkRmlsbENvbG9yOwogICAgICAgICBDYW52YXNTdHlsZSBzdHJv
a2VTdHlsZTsKQEAgLTI3Nyw1NyArMjY3LDY1IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgbGlu
ZURhc2hPZmZzZXQ7CiAgICAgICAgIGJvb2wgaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwogICAgICAg
ICBJbWFnZVNtb290aGluZ1F1YWxpdHkgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5OwotCi0gICAgICAg
IC8vIFRleHQgc3RhdGUuCiAgICAgICAgIFRleHRBbGlnbiB0ZXh0QWxpZ247CiAgICAgICAgIFRl
eHRCYXNlbGluZSB0ZXh0QmFzZWxpbmU7CiAgICAgICAgIERpcmVjdGlvbiBkaXJlY3Rpb247CiAK
ICAgICAgICAgU3RyaW5nIHVucGFyc2VkRm9udDsKICAgICAgICAgRm9udFByb3h5IGZvbnQ7Ci0g
ICAgfTsKIAotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVT
dGFjay5sYXN0KCk7IH0KKyAgICAgICAgQ2FudmFzTGluZUNhcCBjYW52YXNMaW5lQ2FwKCkgY29u
c3Q7CisgICAgICAgIENhbnZhc0xpbmVKb2luIGNhbnZhc0xpbmVKb2luKCkgY29uc3Q7CisgICAg
ICAgIENhbnZhc1RleHRBbGlnbiBjYW52YXNUZXh0QWxpZ24oKSBjb25zdDsKKyAgICAgICAgQ2Fu
dmFzVGV4dEJhc2VsaW5lIGNhbnZhc1RleHRCYXNlbGluZSgpIGNvbnN0OworICAgICAgICBTdHJp
bmcgZm9udFN0cmluZygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uU3RyaW5nKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBzaGFkb3dDb2xvclN0cmluZygp
IGNvbnN0OworICAgIH07CiAgICAgY29uc3QgVmVjdG9yPFN0YXRlLCAxPiYgc3RhdGVTdGFjaygp
OwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IGludCBEZWZhdWx0Rm9udFNpemU7CiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IERlZmF1bHRGb250RmFtaWx5OwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBEZWZhdWx0Rm9udDsKLQotICAgIGVudW0gQ2FudmFzRGlkRHJh
d09wdGlvbiB7Ci0gICAgICAgIENhbnZhc0RpZERyYXdBcHBseU5vbmUgPSAwLAotICAgICAgICBD
YW52YXNEaWREcmF3QXBwbHlUcmFuc2Zvcm0gPSAxLAotICAgICAgICBDYW52YXNEaWREcmF3QXBw
bHlTaGFkb3cgPSAxIDw8IDEsCi0gICAgICAgIENhbnZhc0RpZERyYXdBcHBseUNsaXAgPSAxIDw8
IDIsCi0gICAgICAgIENhbnZhc0RpZERyYXdBcHBseUFsbCA9IDB4ZmZmZmZmZmYKLSAgICB9Owot
Ci0gICAgYm9vbCBpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKENvbXBvc2l0ZU9wZXJhdG9yKTsK
IAorICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjay5s
YXN0KCk7IH0KKyAgICB2b2lkIHJlYWxpemVTYXZlcygpOwogICAgIFN0YXRlJiBtb2RpZmlhYmxl
U3RhdGUoKSB7IEFTU0VSVCghbV91bnJlYWxpemVkU2F2ZUNvdW50IHx8IG1fc3RhdGVTdGFjay5z
aXplKCkgPj0gTWF4U2F2ZUNvdW50KTsgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7IH0KIAor
ICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKKworICAgIHN0YXRp
YyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBkcmF3
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0
aW9uYWw8ZmxvYXQ+IG1heFdpZHRoID0gV1RGOjpudWxsb3B0KTsKKyAgICBib29sIGNhbkRyYXdU
ZXh0KGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0aW9uYWw8ZmxvYXQ+IG1heFdpZHRo
ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mLCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0
aCA9IFdURjo6bnVsbG9wdCk7CisKKyAgICBSZWY8VGV4dE1ldHJpY3M+IG1lYXN1cmVUZXh0SW50
ZXJuYWwoY29uc3QgVGV4dFJ1biYpOworICAgIFJlZjxUZXh0TWV0cmljcz4gbWVhc3VyZVRleHRJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQpOworCisgICAgYm9vbCB1c2VzQ1NTQ29tcGF0aWJp
bGl0eVBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJz
ZU1vZGU7IH0KKworcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5TGluZURhc2goKSBjb25zdDsKICAg
ICB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImKTsKICAgICB2b2lkIGFwcGx5U2hhZG93KCk7CiAgICAgYm9vbCBzaG91bGREcmF3
U2hhZG93cygpIGNvbnN0OwogCi0gICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYsIHVu
c2lnbmVkIG9wdGlvbnMgPSBDYW52YXNEaWREcmF3QXBwbHlBbGwpOworICAgIGVudW0gY2xhc3Mg
RGlkRHJhd09wdGlvbiB7CisgICAgICAgIEFwcGx5VHJhbnNmb3JtID0gMSA8PCAwLAorICAgICAg
ICBBcHBseVNoYWRvdyA9IDEgPDwgMSwKKyAgICAgICAgQXBwbHlDbGlwID0gMSA8PCAyLAorICAg
IH07CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYsIE9wdGlvblNldDxEaWREcmF3
T3B0aW9uPiA9IHsgRGlkRHJhd09wdGlvbjo6QXBwbHlUcmFuc2Zvcm0sIERpZERyYXdPcHRpb246
OkFwcGx5U2hhZG93LCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXAgfSk7CiAgICAgdm9pZCBkaWRE
cmF3RW50aXJlQ2FudmFzKCk7CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBmaW5hbDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKLQogICAgIHZvaWQgdW53aW5k
U3RhdGVTdGFjaygpOwotICAgIHZvaWQgcmVhbGl6ZVNhdmVzKCk7CiAgICAgdm9pZCByZWFsaXpl
U2F2ZXNMb29wKCk7CiAKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpOwotCiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShDYW52YXNTdHls
ZSk7CiAgICAgdm9pZCBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUpOwogCkBAIC0zNzgsMjIgKzM3
NiwxNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQorICAgIGJvb2wgaGFz
SW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52
ZXJ0aWJsZVRyYW5zZm9ybTsgfQogCiAgICAgLy8gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEZv
bnRDYXNjYWRlIGFuZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eSBtdXN0IGhv
bGQgY2VydGFpbiBpbnZhcmlhbnRzLgogICAgIC8vIFRoZXJlZm9yZSwgYWxsIGZvbnQgb3BlcmF0
aW9ucyBtdXN0IHBhc3MgdGhyb3VnaCB0aGUgcHJveHkuCiAgICAgdmlydHVhbCBjb25zdCBGb250
UHJveHkqIGZvbnRQcm94eSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHN0YXRpYyB2b2lk
IG5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcmKTsKLSAgICBib29sIGNhbkRyYXdUZXh0V2l0aFBhcmFt
cyhmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0aCA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZs
b2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwgT3B0aW9uYWw8ZmxvYXQ+IG1heFdpZHRoID0gV1RG
OjpudWxsb3B0KTsKLSAgICB2b2lkIGRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mLCBm
bG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGlvbmFsPGZsb2F0PiBtYXhXaWR0aCA9IFdU
Rjo6bnVsbG9wdCk7Ci0gICAgUmVmPFRleHRNZXRyaWNzPiBtZWFzdXJlVGV4dEludGVybmFsKGNv
bnN0IFN0cmluZyYgdGV4dCk7Ci0gICAgUmVmPFRleHRNZXRyaWNzPiBtZWFzdXJlVGV4dEludGVy
bmFsKGNvbnN0IFRleHRSdW4mKTsKLQogICAgIEZsb2F0UG9pbnQgdGV4dE9mZnNldChmbG9hdCB3
aWR0aCwgVGV4dERpcmVjdGlvbik7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWF4U2F2
ZUNvdW50ID0gMTAyNCAqIDE2OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgTWF4U2F2
ZUNvdW50ID0gMTAyNCAqIDE2OwogICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOwog
ICAgIHVuc2lnbmVkIG1fdW5yZWFsaXplZFNhdmVDb3VudCB7IDAgfTsKICAgICBib29sIG1fdXNl
c0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGU7CkBAIC00MDIsNCArMzkzLDMgQEAgcHJvdGVjdGVk
OgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAppbmRleCA2NGFjZjFhYWVlYzgwMjkzODBiZGUwZGY0NDhjMjQ2YTQxMzM2YjBkLi5m
MTc4ODc0YWZhNjY3OWY5MDFhNWVjZWUzMmJiNGZmNWRkM2YyOTM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogCiAgICAg
Ly8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1Ymxp
Yy1odG1sLzIwMDlKdWwvMDk0Ny5odG1sLAogICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0
aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBwYXJzZUZvbnRXb3JrZXJTYWZlKCkgaWdub3Jl
cyB0aGVzZS4KLSAgICBhdXRvIGZvbnRSYXcgPSBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNh
ZmUobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5
UGFyc2VNb2RlKSk7CisgICAgYXV0byBmb250UmF3ID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3Jr
ZXJTYWZlKG5ld0ZvbnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghdXNlc0NTU0NvbXBhdGliaWxp
dHlQYXJzZU1vZGUoKSkpOwogICAgIGlmICghZm9udFJhdykKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDhhYWRjZjlkZjFmNTIzMjEzYzM1ZWUzM2Y3
OTM5ZmJlZTU5ZGIzMzQuLjA5MzU0ODU0NjI3ZmU5MzE2ZmEzZTcwN2EzOTY1NmNkODNlNDhkYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0zOSw4ICszOSw2IEBAIHB1YmxpYzoK
ICAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOwogICAg
IHZpcnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCi0gICAgYm9v
bCBpc09mZnNjcmVlbjJkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAg
T2Zmc2NyZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxPZmZzY3Jl
ZW5DYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogICAgIHZvaWQgY29tbWl0KCk7CkBAIC01Miw2
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBSZWY8VGV4dE1ldHJpY3M+IG1lYXN1cmVUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCk7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5
KCkgZmluYWw7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA2NTllZmEyZmZjYTFhNjhiNzJlNGI1MWJkOGQz
OGQ5NjE5N2U3MjAzLi40ZDU3ZDc0ZjQ1MGMyZWRlZDRhYzlhMDFkMjljOWYwZDk5NjVkOWQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRl
eHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJELmgKQEAgLTQwLDEwICs0MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QYWlu
dFJlbmRlcmluZ0NvbnRleHQyRCgpOwogCi0gICAgYm9vbCBpc1BhaW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIEN1c3RvbVBhaW50Q2FudmFzJiBjYW52YXMoKSBjb25z
dCB7IHJldHVybiBkb3duY2FzdDxDdXN0b21QYWludENhbnZhcz4oY2FudmFzQmFzZSgpKTsgfQog
CiBwcml2YXRlOgorICAgIGJvb2wgaXNQYWludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKwogICAgIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKaW5kZXggMjMx
Y2Q4ZWU1ZGZiNTEzMDU2Yzc5MzRlY2U3ZjlkNzgyYzllMDM2MS4uNDMzZjliNTI2Mzc5YmM0ODQ2
YTNkOWI5MGU1N2RhNTY0Y2I1ZTZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDYW52YXNCYXNl
LmgiCiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJu
LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgog
I2luY2x1ZGUgIkRPTU1hdHJpeDJESW5pdC5oIgpAQCAtMTI4MywxNiArMTI4MiwxNiBAQCBSZWY8
UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxk
SW5pdGlhbFN0YXRlKCkKICAgICAgICAgICAgIGF1dG8gc3RhdGVQYXlsb2FkID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKIAogICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRBcnJheShzdHJp
bmdJbmRleEZvcktleSgic2V0VHJhbnNmb3JtIl9zKSwgYnVpbGRBcnJheUZvckFmZmluZVRyYW5z
Zm9ybShzdGF0ZS50cmFuc2Zvcm0pKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91
YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJnbG9iYWxBbHBoYSJfcyksIGNvbnRleHQyZC5nbG9iYWxB
bHBoYSgpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRl
eEZvcktleSgiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIl9zKSwgaW5kZXhGb3JEYXRhKGNvbnRl
eHQyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oKSkpOwotICAgICAgICAgICAgc3RhdGVQYXls
b2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JLZXkoImxpbmVXaWR0aCJfcyksIGNvbnRleHQy
ZC5saW5lV2lkdGgoKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3Ry
aW5nSW5kZXhGb3JLZXkoImxpbmVDYXAiX3MpLCBpbmRleEZvckRhdGEoY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcoY29udGV4dDJkLmxpbmVDYXAoKSkpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5
bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgibGluZUpvaW4iX3MpLCBpbmRleEZv
ckRhdGEoY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoY29udGV4dDJkLmxpbmVKb2luKCkpKSk7
Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZvcktleSgi
bWl0ZXJMaW1pdCJfcyksIGNvbnRleHQyZC5taXRlckxpbWl0KCkpOwotICAgICAgICAgICAgc3Rh
dGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JLZXkoInNoYWRvd09mZnNldFgiX3Mp
LCBjb250ZXh0MmQuc2hhZG93T2Zmc2V0WCgpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+
c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJzaGFkb3dPZmZzZXRZIl9zKSwgY29udGV4dDJk
LnNoYWRvd09mZnNldFkoKSk7Ci0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShz
dHJpbmdJbmRleEZvcktleSgic2hhZG93Qmx1ciJfcyksIGNvbnRleHQyZC5zaGFkb3dCbHVyKCkp
OwotICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5
KCJzaGFkb3dDb2xvciJfcyksIGluZGV4Rm9yRGF0YShjb250ZXh0MmQuc2hhZG93Q29sb3IoKSkp
OworICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JLZXko
Imdsb2JhbEFscGhhIl9zKSwgc3RhdGUuZ2xvYmFsQWxwaGEpOworICAgICAgICAgICAgc3RhdGVQ
YXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJnbG9iYWxDb21wb3NpdGVPcGVy
YXRpb24iX3MpLCBpbmRleEZvckRhdGEoc3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uU3Ry
aW5nKCkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91YmxlKHN0cmluZ0luZGV4
Rm9yS2V5KCJsaW5lV2lkdGgiX3MpLCBzdGF0ZS5saW5lV2lkdGgpOworICAgICAgICAgICAgc3Rh
dGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJsaW5lQ2FwIl9zKSwgaW5k
ZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmNhbnZhc0xpbmVDYXAo
KSkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZv
cktleSgibGluZUpvaW4iX3MpLCBpbmRleEZvckRhdGEoY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcoc3RhdGUuY2FudmFzTGluZUpvaW4oKSkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+
c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJtaXRlckxpbWl0Il9zKSwgc3RhdGUubWl0ZXJM
aW1pdCk7CisgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZv
cktleSgic2hhZG93T2Zmc2V0WCJfcyksIHN0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpKTsKKyAg
ICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJzaGFk
b3dPZmZzZXRZIl9zKSwgc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKKyAgICAgICAgICAg
IHN0YXRlUGF5bG9hZC0+c2V0RG91YmxlKHN0cmluZ0luZGV4Rm9yS2V5KCJzaGFkb3dCbHVyIl9z
KSwgc3RhdGUuc2hhZG93Qmx1cik7CisgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVn
ZXIoc3RyaW5nSW5kZXhGb3JLZXkoInNoYWRvd0NvbG9yIl9zKSwgaW5kZXhGb3JEYXRhKHNlcmlh
bGl6YXRpb25Gb3JIVE1MKHN0YXRlLnNoYWRvd0NvbG9yKSkpOwogCiAgICAgICAgICAgICAvLyBU
aGUgcGFyYW1ldGVyIHRvIGBzZXRMaW5lRGFzaGAgaXMgaXRzZWxmIGFuIGFycmF5LCBzbyB3ZSBu
ZWVkIHRvIHdyYXAgdGhlIHBhcmFtZXRlcnMKICAgICAgICAgICAgIC8vIGxpc3QgaW4gYW4gYXJy
YXkgdG8gYWxsb3cgc3ByZWFkaW5nLgpAQCAtMTMwMCwxMSArMTI5OSwxMSBAQCBSZWY8UHJvdG9j
b2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlh
bFN0YXRlKCkKICAgICAgICAgICAgIHNldExpbmVEYXNoLT5hZGRJdGVtKGJ1aWxkQXJyYXlGb3JW
ZWN0b3Ioc3RhdGUubGluZURhc2gpKTsKICAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0QXJy
YXkoc3RyaW5nSW5kZXhGb3JLZXkoInNldExpbmVEYXNoIl9zKSwgV1RGTW92ZShzZXRMaW5lRGFz
aCkpOwogCi0gICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldERvdWJsZShzdHJpbmdJbmRleEZv
cktleSgibGluZURhc2hPZmZzZXQiX3MpLCBjb250ZXh0MmQubGluZURhc2hPZmZzZXQoKSk7Ci0g
ICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JLZXkoImZv
bnQiX3MpLCBpbmRleEZvckRhdGEoY29udGV4dDJkLmZvbnQoKSkpOwotICAgICAgICAgICAgc3Rh
dGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJ0ZXh0QWxpZ24iX3MpLCBp
bmRleEZvckRhdGEoY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoY29udGV4dDJkLnRleHRBbGln
bigpKSkpOwotICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4
Rm9yS2V5KCJ0ZXh0QmFzZWxpbmUiX3MpLCBpbmRleEZvckRhdGEoY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoY29udGV4dDJkLnRleHRCYXNlbGluZSgpKSkpOwotICAgICAgICAgICAgc3RhdGVQ
YXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJkaXJlY3Rpb24iX3MpLCBpbmRl
eEZvckRhdGEoY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoY29udGV4dDJkLmRpcmVjdGlvbigp
KSkpOworICAgICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXREb3VibGUoc3RyaW5nSW5kZXhGb3JL
ZXkoImxpbmVEYXNoT2Zmc2V0Il9zKSwgc3RhdGUubGluZURhc2hPZmZzZXQpOworICAgICAgICAg
ICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJmb250Il9zKSwg
aW5kZXhGb3JEYXRhKHN0YXRlLmZvbnRTdHJpbmcoKSkpOworICAgICAgICAgICAgc3RhdGVQYXls
b2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJ0ZXh0QWxpZ24iX3MpLCBpbmRleEZv
ckRhdGEoY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoc3RhdGUuY2FudmFzVGV4dEFsaWduKCkp
KSk7CisgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEludGVnZXIoc3RyaW5nSW5kZXhGb3JL
ZXkoInRleHRCYXNlbGluZSJfcyksIGluZGV4Rm9yRGF0YShjb252ZXJ0RW51bWVyYXRpb25Ub1N0
cmluZyhzdGF0ZS5jYW52YXNUZXh0QmFzZWxpbmUoKSkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5
bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgiZGlyZWN0aW9uIl9zKSwgaW5kZXhG
b3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmRpcmVjdGlvbikpKTsKIAog
ICAgICAgICAgICAgaW50IHN0cm9rZVN0eWxlSW5kZXg7CiAgICAgICAgICAgICBpZiAoYXV0byBj
YW52YXNHcmFkaWVudCA9IHN0YXRlLnN0cm9rZVN0eWxlLmNhbnZhc0dyYWRpZW50KCkpCkBAIC0x
MzI0LDkgKzEzMjMsMTAgQEAgUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZT4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0ZSgpCiAgICAgICAgICAgICAgICAgZmls
bFN0eWxlSW5kZXggPSBpbmRleEZvckRhdGEoc3RhdGUuZmlsbFN0eWxlLmNvbG9yKCkpOwogICAg
ICAgICAgICAgc3RhdGVQYXlsb2FkLT5zZXRJbnRlZ2VyKHN0cmluZ0luZGV4Rm9yS2V5KCJmaWxs
U3R5bGUiX3MpLCBmaWxsU3R5bGVJbmRleCk7CiAKLSAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+
c2V0Qm9vbGVhbihzdHJpbmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIl9zKSwg
Y29udGV4dDJkLmltYWdlU21vb3RoaW5nRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIHN0YXRlUGF5
bG9hZC0+c2V0SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdRdWFsaXR5
Il9zKSwgaW5kZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGNvbnRleHQyZC5p
bWFnZVNtb290aGluZ1F1YWxpdHkoKSkpKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0
Qm9vbGVhbihzdHJpbmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIl9zKSwgc3Rh
dGUuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKTsKKyAgICAgICAgICAgIHN0YXRlUGF5bG9hZC0+c2V0
SW50ZWdlcihzdHJpbmdJbmRleEZvcktleSgiaW1hZ2VTbW9vdGhpbmdRdWFsaXR5Il9zKSwgaW5k
ZXhGb3JEYXRhKGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHN0YXRlLmltYWdlU21vb3RoaW5n
UXVhbGl0eSkpKTsKIAorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jvbmc6IGl0IHdp
bGwgcmVwZWF0IHRoZSBjb250ZXh0J3MgY3VycmVudCBwYXRoIGZvciBldmVyeSBsZXZlbCBpbiB0
aGUgc3RhY2ssIGlnbm9yaW5nIHNhdmVkIHBhdGhzLgogICAgICAgICAgICAgYXV0byBzZXRQYXRo
ID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2V0
UGF0aC0+YWRkSXRlbShpbmRleEZvckRhdGEoYnVpbGRTdHJpbmdGcm9tUGF0aChjb250ZXh0MmQu
Z2V0UGF0aCgpLT5wYXRoKCkpKSk7CiAgICAgICAgICAgICBzdGF0ZVBheWxvYWQtPnNldEFycmF5
KHN0cmluZ0luZGV4Rm9yS2V5KCJzZXRQYXRoIl9zKSwgV1RGTW92ZShzZXRQYXRoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcAppbmRleCA5Mzk0ZTdiZmY0MjliYzIxZWZjZGYzYjE0MDExMWYxYWUyY2E5NDRkLi4z
Nzk0ZGU3N2JlNjNhOTk5YTNiOTcxYzc4YmZkY2UxZDRjYWEyYjBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAK
QEAgLTIzMSwxMCArMjMxLDEwIEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0CiAgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CiAKICAgICBh
dXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6ZSgpKTsK
LSAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFn
ZURhdGEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xp
cHBlZCA9ICBpbnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAg
SW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNS
ZWN0U2NhbGVkKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBz
cmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKIAogICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggYThjNDAxOGFmNTlh
NmE3NDkyZDRiNmI4MDgyMjIwZjRmMWY5NTg2MC4uMzA3Y2E1MTVkYTk2MDk4YTY0ZDViNjViNjcx
Yjk0MzY0NWM1NmRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApA
QCAtODksNyArODksNiBAQCBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiBjbGFzcyBQYXRoVHJhdmVyc2FsU3RhdGU7CiBjbGFzcyBSb3VuZGVkUmVjdDsKLWNsYXNzIFN0
cm9rZVN0eWxlQXBwbGllcjsKIAogLy8gVGhlIHBvaW50cyBpbiB0aGUgc3RydWN0dXJlIGFyZSB0
aGUgc2FtZSBhcyB0aG9zZSB0aGF0IHdvdWxkIGJlIHVzZWQgd2l0aCB0aGUKIC8vIGFkZC4uLiBt
ZXRob2QuIEZvciBleGFtcGxlLCBhIGxpbmUgcmV0dXJucyB0aGUgZW5kcG9pbnQsIHdoaWxlIGEg
Y3ViaWMgcmV0dXJucwpAQCAtMTM4LDEyICsxMzcsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXRoIHBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mKTsKIAog
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
Ok5vblplcm8pIGNvbnN0OwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBs
aWVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+
JiBzdHJva2VTdHlsZUFwcGxpZXIpIGNvbnN0OworCiAgICAgLy8gZmFzdEJvdW5kaW5nUmVjdCgp
IHNob3VsZCBlcXVhbCBvciBjb250YWluIGJvdW5kaW5nUmVjdCgpOyBib3VuZGluZ1JlY3QoKQog
ICAgIC8vIHNob3VsZCBwZXJmZWN0bHkgYm91bmQgdGhlIHBvaW50cyB3aXRoaW4gdGhlIHBhdGgu
CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0UmVjdCBmYXN0Qm91bmRpbmdSZWN0KCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyID0geyB9KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHNpemVfdCBlbGVtZW50Q291bnQoKSBjb25zdDsKICAgICBmbG9hdCBsZW5ndGgoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cm9rZVN0
eWxlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Ryb2tlU3R5
bGVBcHBsaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjVlNzhiM2Q4M2Iy
OWQ4ZjFiYTcyYjc0MTE4NjYyZGQyNjI0M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Ryb2tl
U3R5bGVBcHBsaWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIFN0cm9rZVN0eWxlQXBwbGllcl9oCi0jZGVmaW5lIFN0cm9rZVN0eWxlQXBwbGllcl9oCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLQotICAg
IGNsYXNzIFN0cm9rZVN0eWxlQXBwbGllciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KikgPSAwOwotCi0gICAgcHJvdGVjdGVk
OgotICAgICAgICBTdHJva2VTdHlsZUFwcGxpZXIoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIHZpcnR1
YWwgflN0cm9rZVN0eWxlQXBwbGllcigpID0gZGVmYXVsdDsKLSAgICB9OwotfQotCi0jZW5kaWYK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
aENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhD
YWlyby5jcHAKaW5kZXggMTViMmExNTZiNGExYzZjZTRkNDkxNmU1ZTA3MGFmNGZjYTE5NmExNC4u
ODFkMTU4ZTJkZmY3ZTViZjAzYzdiNjVkMDM2ZGRhODk5ZjBmOTAxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCkBAIC0z
Miw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRl
ICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQxNSwx
NSArNDE0LDE1IEBAIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0
CiAgICAgcmV0dXJuIEZsb2F0UmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwogfQogCi1G
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllcikgY29uc3QKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxlQXBwbGllcikgY29uc3QK
IHsKICAgICAvLyBTaG91bGQgdGhpcyBiZSBpc0VtcHR5KCkgb3IgY2FuIGFuIGVtcHR5IHBhdGgg
aGF2ZSBhIG5vbi16ZXJvIG9yaWdpbj8KICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKIAotICAgIGlmIChhcHBsaWVyKSB7CisgICAgaWYgKHN0cm9rZVN0eWxl
QXBwbGllcikgewogICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOwotICAgICAgICBhcHBsaWVyLT5z
dHJva2VTdHlsZSgmZ2MpOworICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ2MpOwogICAgIH0K
IAogICAgIGRvdWJsZSB4MCwgeDEsIHkwLCB5MTsKQEAgLTQ0MywxNCArNDQyLDE2IEBAIGJvb2wg
UGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNv
bnN0CiAgICAgcmV0dXJuIGNvbnRhaW5zOwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5z
KFN0cm9rZVN0eWxlQXBwbGllciYgYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVy
KSBjb25zdAogeworICAgIEFTU0VSVChzdHJva2VTdHlsZUFwcGxpZXIpOworCiAgICAgaWYgKGlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7CiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KG1fcGF0aC5nZXQoKSkpOwotICAgICAgICBhcHBsaWVyLnN0cm9rZVN0eWxlKCZncmFw
aGljc0NvbnRleHQpOworICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0
KTsKICAgICB9CiAKICAgICByZXR1cm4gY2Fpcm9faW5fc3Ryb2tlKG1fcGF0aC5nZXQoKSwgcG9p
bnQueCgpLCBwb2ludC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKaW5kZXggNWJhNDhmNzJkMjljNTFmMmRlODFlZTZlOTI2YzQ4NjJmOTA4
MmQ4Mi4uYWY5NmY4Zjk0M2RmNmQwMmIxMDUwNTU1N2UxNzFmOWExODMzMGQyNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5o
IgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC0yMzMsOCArMjMy
LDEwIEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0CiAgICAgcmV0dXJuIHJldDsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VD
b250YWlucyhTdHJva2VTdHlsZUFwcGxpZXImIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAorYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rZVN0eWxl
QXBwbGllcikgY29uc3QKIHsKKyAgICBBU1NFUlQoc3Ryb2tlU3R5bGVBcHBsaWVyKTsKKwogICAg
IGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDUsMTEgKzI0Niwx
MSBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciYgYXBwbGll
ciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0
LCBwbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwotICAgIGFwcGxpZXIuc3Ryb2tlU3R5bGUoJmdyYXBoaWNzQ29udGV4dCk7Cisg
ICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1
Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0
aFN0cm9rZSk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLSAgICAKKwog
ICAgIHJldHVybiBoaXRTdWNjZXNzOwogfQogCkBAIC0yOTMsNyArMjk0LDcgQEAgRmxvYXRSZWN0
IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RTbG93Q2FzZSgpIGNvbnN0CiAgICAgcmV0dXJuIHplcm9S
ZWN0SWZOdWxsKENHUGF0aEdldEJvdW5kaW5nQm94KHBsYXRmb3JtUGF0aCgpKSk7CiB9CiAKLUZs
b2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBs
aWVyKSBjb25zdAorRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5j
dGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyKSBjb25zdAog
ewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CkBAIC0zMDQs
OSArMzA1LDkgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHls
ZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQp
OwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRoKCkpOwogCi0gICAg
aWYgKGFwcGxpZXIpIHsKKyAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIGFwcGxpZXIt
PnN0cm9rZVN0eWxlKCZncmFwaGljc0NvbnRleHQpOworICAgICAgICBzdHJva2VTdHlsZUFwcGxp
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdp
dGhTdHJva2VkUGF0aChjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggNmYzYWVkMjg2YzFkN2ZiNDZi
YTM5OTliZGFhMzFkY2UzMDlmZmY1Ny4uZDk2MjAzMDBhYmNlYmE0OTRjYTY2MTUxZDAwMWU1MmYx
Yzc4OTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogI2luY2x1ZGUg
PGQyZDEuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KQEAgLTIyNSwxNCArMjI0LDE2IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRh
aW5zOwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciYg
YXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYgc3Ryb2tlU3R5bGVBcHBsaWVyKSBjb25zdAogeworICAgIEFTU0VS
VChzdHJva2VTdHlsZUFwcGxpZXIpOworCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQy
RChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29u
dGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0gICAgYXBwbGllci5zdHJva2VTdHlsZSgmc2NyYXRj
aENvbnRleHQpOworICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5n
ZXQoKSk7CkBAIC0zMzUsNyArMzM2LDcgQEAgRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1Jl
Y3RGb3JTdHJva2UoY29uc3QgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3IKICAgICBy
ZXR1cm4gYm91bmRzOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0
cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9r
ZVN0eWxlQXBwbGllcikgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKQEAgLTM0Myw4ICszNDQsOCBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tl
Qm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKICAgICBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0
KCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHRE
MkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSk7CiAKLSAgICBpZiAoYXBwbGllcikKLSAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJnNj
cmF0Y2hDb250ZXh0KTsKKyAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQorICAgICAgICBzdHJv
a2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwogCiAgICAgcmV0dXJuIGZhc3RCb3VuZGlu
Z1JlY3RGb3JTdHJva2Uoc2NyYXRjaENvbnRleHREMkQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
aW5kZXggOTEyMjY1ZGNjNWNmZTUwZGZhZjZiZGMyYWY0MWI2ZDg0MjZkOTlhNS4uNmQyOWY3ZTFj
OWFkNTU5MjIwMGIzMmNkYTNiOTFmMjhmYjRjOTIzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBA
IC0xNzMsNyArMTczLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW4KICAgICAgICAgICAgIHVz
ZXJzcGFjZVRyYW5zZm9ybSA9IHRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZSgmcmVuZGVyZXIs
IGdyYWRpZW50RGF0YS51c2Vyc3BhY2VUcmFuc2Zvcm0pOwogICAgICAgICBjb250ZXh0LT5zZXRB
bHBoYShzdmdTdHlsZS5zdHJva2VPcGFjaXR5KCkpOwogICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VHcmFkaWVudCgqZ3JhZGllbnREYXRhLmdyYWRpZW50LCB1c2Vyc3BhY2VUcmFuc2Zvcm0pOwot
ICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRl
eHQsIHN0eWxlLCByZW5kZXJlcik7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ry
b2tlU3R5bGVUb0NvbnRleHQoKmNvbnRleHQsIHN0eWxlLCByZW5kZXJlcik7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggOTQ3MTliM2VmODc3MmVmY2Ew
N2MwZTJiMzVkZDFjMDQwNjA5NzM2OS4uOTRjMjlkM2I2NDgwNjNhMWI3ZTFjYTg5NzdkOTRlM2Fj
Njg2MDJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBSZW5kCiAgICAgICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybi0+c2V0UGF0
dGVyblNwYWNlVHJhbnNmb3JtKHRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZSgmcmVuZGVyZXIs
IHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0pKTsKICAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3Zn
U3R5bGUuc3Ryb2tlT3BhY2l0eSgpKTsKICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlUGF0dGVy
bigqcGF0dGVybkRhdGEtPnBhdHRlcm4pOwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBs
eVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCByZW5kZXJlcik7CisgICAgICAg
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoKmNvbnRleHQsIHN0
eWxlLCByZW5kZXJlcik7CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhS
ZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9UZXh0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwCmluZGV4IGQ5NGJhYTQ1NjU0MjU2Y2M5MTExMWU4NTY3NzFmZDhkMjBjNWIxOTUuLmE3YWFj
NGFlODZkZGYzYzQ5Yzc4Yzc2OWZlZDFmM2NmY2M3OWFjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6
OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFIKICAgICAgICAg
Y29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUuc3Ryb2tlT3BhY2l0eSgpKTsKICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIobV9j
b2xvcikpOwogCi0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoY29udGV4dCwgc3R5bGUsIHJlbmRlcmVyKTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCgqY29udGV4dCwgc3R5bGUsIHJlbmRlcmVyKTsK
IAogICAgICAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9k
ZTo6QXBwbHlUb1RleHQpKQogICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKaW5kZXggMzM1YmJmMGYyZWQ0MDM4YTliMzAzZDU2YmJm
NDQ2NTUzNjhhZjY4OC4uZmEwM2FjYmRjZDdmZDZmYTIxNjY5MzliM2JjZjBlMDc3ZjU5OWQwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAK
QEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKICNpbmNsdWRlICJT
VkdSZXNvdXJjZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1
ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KIApAQCAtNTEsMjIgKzUwLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyU1ZH
U2hhcGUpOwogCi1jbGFzcyBCb3VuZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXIgZmluYWwgOiBw
dWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKLXB1YmxpYzoKLSAgICBCb3VuZGluZ1JlY3RTdHJv
a2VTdHlsZUFwcGxpZXIoY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHJlbmRlcmVyKQotICAgICAgICA6
IG1fcmVuZGVyZXIocmVuZGVyZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc3Ryb2tlU3R5
bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBtX3JlbmRl
cmVyLnN0eWxlKCksIG1fcmVuZGVyZXIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBS
ZW5kZXJTVkdTaGFwZSYgbV9yZW5kZXJlcjsKLX07Ci0KIFJlbmRlclNWR1NoYXBlOjpSZW5kZXJT
VkdTaGFwZShTVkdHcmFwaGljc0VsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUp
CiAgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAg
ICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZhdWx0IGlzIGZhbHNlLCB0
aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5pbmcuCkBAIC0xMTQsMTYg
Kzk3LDE4IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIGJvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBvaW50Q29vcmRpbmF0ZVNwYWNl
IHBvaW50Q29vcmRpbmF0ZVNwYWNlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwotICAgIEJvdW5k
aW5nUmVjdFN0cm9rZVN0eWxlQXBwbGllciBhcHBsaWVyKCp0aGlzKTsKIAogICAgIGlmIChoYXNO
b25TY2FsaW5nU3Ryb2tlKCkgJiYgcG9pbnRDb29yZGluYXRlU3BhY2UgIT0gTG9jYWxDb29yZGlu
YXRlU3BhY2UpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0g
PSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CiAgICAgICAgIFBhdGgqIHVzZVBhdGggPSBu
b25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5vblNjYWxpbmdUcmFuc2Zvcm0pOwot
Ci0gICAgICAgIHJldHVybiB1c2VQYXRoLT5zdHJva2VDb250YWlucyhhcHBsaWVyLCBub25TY2Fs
aW5nVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KSk7CisgICAgICAgIHJldHVybiB1c2VQYXRoLT5z
dHJva2VDb250YWlucyhub25TY2FsaW5nVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KSwgW3RoaXNd
IChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIFNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMpOwor
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9wYXRoLT5zdHJva2VDb250YWlucyhh
cHBsaWVyLCBwb2ludCk7CisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMocG9pbnQs
IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMp
OworICAgIH0pOwogfQogCiBib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUp
IGNvbnN0CkBAIC00MzIsMTkgKzQxNywyMiBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNh
bGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKICAgICBBU1NFUlQobV9wYXRoKTsKICAg
ICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3VuZGluZ0JveDsKIAotICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKLSAg
ICBpZiAoc3ZnU3R5bGUuaGFzU3Ryb2tlKCkpIHsKLSAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tl
U3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKCp0aGlzKTsKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHls
ZSgpLmhhc1N0cm9rZSgpKSB7CiAgICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsK
ICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2Nh
bGluZ1N0cm9rZVRyYW5zZm9ybSgpOwogICAgICAgICAgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRy
YW5zZm9ybT4gaW52ZXJzZSA9IG5vblNjYWxpbmdUcmFuc2Zvcm0uaW52ZXJzZSgpKSB7CiAgICAg
ICAgICAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRoKG1fcGF0aC5n
ZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5
bGUpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ1JlY3QgPSB1c2VQ
YXRoLT5zdHJva2VCb3VuZGluZ1JlY3QoRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4g
eyBbdGhpc10gKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0
eWxlKCksICp0aGlzKTsKKyAgICAgICAgICAgICAgICB9fSk7CiAgICAgICAgICAgICAgICAgc3Ry
b2tlQm91bmRpbmdSZWN0ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3Qoc3Ryb2tlQm91bmRpbmdS
ZWN0KTsKICAgICAgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3Vu
ZGluZ1JlY3QpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0
cm9rZUJvdW5kaW5nQm94LnVuaXRlKHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0
eWxlKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51
bml0ZShwYXRoKCkuc3Ryb2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQs
IHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAgICAgIH19KSk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDRmNjNlNTg4YTJi
NjgxNDYzYjk3OWJlMWI4MWU2N2I4NzdlOGMwZGYuLjBjNzg1MjA0ZmU2NzJiNDdkM2Y1NTQ4ZjMx
MzMzNTc4ODA5MmE0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtNDMzLDEwICs0MzMsOCBAQCBib29sIFNWR1JlbmRlclN1
cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6YXBw
bHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit2b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQogewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICAKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpOwogICAgIGlmICghaXM8U1ZHRWxlbWVudD4oZWxl
bWVudCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00NDYsMTUgKzQ0NCwx
NSBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBz
dmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0
aENvbnRleHQoZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSk7Ci0gICAg
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgo
c3R5bGUuc3Ryb2tlV2lkdGgoKSkpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3R5bGUuY2Fw
U3R5bGUoKSk7Ci0gICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUuam9pblN0eWxlKCkpOwor
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5n
dGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSkpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChzdHlsZS5j
YXBTdHlsZSgpKTsKKyAgICBjb250ZXh0LnNldExpbmVKb2luKHN0eWxlLmpvaW5TdHlsZSgpKTsK
ICAgICBpZiAoc3R5bGUuam9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBjb250ZXh0
LT5zZXRNaXRlckxpbWl0KHN0eWxlLnN0cm9rZU1pdGVyTGltaXQoKSk7CisgICAgICAgIGNvbnRl
eHQuc2V0TWl0ZXJMaW1pdChzdHlsZS5zdHJva2VNaXRlckxpbWl0KCkpOwogCiAgICAgY29uc3Qg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZGFzaGVzID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5
KCk7CiAgICAgaWYgKGRhc2hlcy5pc0VtcHR5KCkpCi0gICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIERhc2hBcnJheSBkYXNoQXJyYXk7CiAgICAg
ICAgIGRhc2hBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRhc2hlcy5zaXplKCkpOwpAQCAt
NDc1LDkgKzQ3Myw5IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoY2FuU2V0TGluZURhc2gpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRMaW5lRGFz
aChkYXNoQXJyYXksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tl
RGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGlu
ZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0
cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3Rvcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICAgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAppbmRleCBjYmVkMTIy
NGY5NWQzOWE1YmFiZGMxNDA0ODc1NTMwZWQ5Nzk1ZTA5Li5lODE1NzA1OGQ3YzVjNGFhOTg3Y2Mx
NDRlZWI2NzNiZTE2OTZmZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgY2hlY2tGb3JTVkdSZXBhaW50RHVyaW5nTGF5b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQm
KTsKIAogICAgIC8vIFNoYXJlZCBiZXR3ZWVuIFNWRyByZW5kZXJlcnMgYW5kIHJlc291cmNlcy4K
LSAgICBzdGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyRWxlbWVudCYpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBEZXRlcm1pbmVz
IGlmIGFueSBhbmNlc3RvcidzIHRyYW5zZm9ybSBoYXMgY2hhbmdlZC4KICAgICBzdGF0aWMgYm9v
bCB0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKFJlbmRlckVsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NTIwMGJh
MWMzYWVkOWI2MmQ1NWU4MzZiMzJjMTJmNGQ5OWFhYWRkLi4yYjAyZmUzYzVmNzdiOWQ1MzZlOTEw
NTg4NDZiM2QzZjU4Yjk1YzljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDMtMDUgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBpbnNwZWN0b3Igdmll
d2luZyBvZiBjYW52YXMgc2F2ZS9yZXN0b3JlIHN0YWNrLCBhbmQgdGlnaHRlbiBhbmQgc2ltcGxp
ZnkgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyNTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlY29yZGluZy0yZC1m
cmFtZUNvdW50LWV4cGVjdGVkLnR4dDogVXBkYXRlIHNpbmNlIHRoZSBzdGF0ZSBzdGFjayB2YWx1
ZSBvZgorICAgICAgICB0aGUgZGlyZWN0aW9uIHByb3BlcnR5IGlzIG5vdyBjb3JyZWN0bHkgc2F2
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2NhbnZhcy9yZWNvcmRpbmctMmQtZnVsbC1leHBlY3Rl
ZC50eHQ6IERpdHRvLgorICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvcmVjb3JkaW5nLTJkLW1l
bW9yeUxpbWl0LWV4cGVjdGVkLnR4dDogRGl0dG8uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvY2Fu
dmFzL3JlY29yZGluZy0yZC1zYXZlcy1leHBlY3RlZC50eHQ6IFVwZGF0ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2NhbnZhcy9yZWNvcmRpbmctMmQtc2F2ZXMuaHRtbDogQWRkZWQgdGVzdHMgb2Yg
c2V0dGluZyBhbGwgdGhlIHByb3BlcnRpZXMKKyAgICAgICAgdGhhdCB0aGUgaW5zcGVjdG9yIGNh
bnZhcyBzdGF0ZSBtYWNoaW5lcnkgc2VyaWFsaXplcywgcmF0aGVyIHRoYW4ganVzdCB0ZXN0aW5n
IGZpbGxTdHlsZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3Jlc291cmNlcy9yZWNvcmRp
bmctMmQuanM6CisgICAgICAgIChwZXJmb3JtU2F2ZVByZUFjdGlvbnMuc2F2ZUFuZFNldCk6IERp
dHRvLgorICAgICAgICAocGVyZm9ybVNhdmVQcmVBY3Rpb25zKTogRGl0dG8uCisKIDIwMjEtMDMt
MDUgIFJvYmVydCBKZW5uZXIgIDxqZW5uZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFsgaU9TL21h
Y09TIHdrMiBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL3Byb3RvY29s
L2NhbmRpZGF0ZS1leGNoYW5nZS5odHRwcy5odG1sIGlzIGEgZmxha2V5IHRleHQgZmFpbHVyZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZWNvcmRpbmctMmQtZnJh
bWVDb3VudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlY29y
ZGluZy0yZC1mcmFtZUNvdW50LWV4cGVjdGVkLnR4dAppbmRleCBiNTE4ODA1NTI5MTA5OWYwNWUw
ODI2ZGU2ZDlkZDlhOTMzNTgyYzQ1Li5iMTY1NDBmMjk0YmExMDlhMTk0MTFmYWYzZGNlZDNkN2U2
NzVhMzJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlY29yZGlu
Zy0yZC1mcmFtZUNvdW50LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y2FudmFzL3JlY29yZGluZy0yZC1mcmFtZUNvdW50LWV4cGVjdGVkLnR4dApAQCAtMjQsNyArMjQs
NyBAQCBpbml0aWFsU3RhdGU6CiAgICAgZm9udDogIjEwcHggc2Fucy1zZXJpZiIKICAgICB0ZXh0
QWxpZ246ICJzdGFydCIKICAgICB0ZXh0QmFzZWxpbmU6ICJhbHBoYWJldGljIgotICAgIGRpcmVj
dGlvbjogImx0ciIKKyAgICBkaXJlY3Rpb246ICJpbmhlcml0IgogICAgIHN0cm9rZVN0eWxlOiAi
IzAwMDAwMCIKICAgICBmaWxsU3R5bGU6ICIjMDAwMDAwIgogICAgIGltYWdlU21vb3RoaW5nRW5h
YmxlZDogdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZWNv
cmRpbmctMmQtZnVsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlY29yZGluZy0yZC1mdWxsLWV4cGVjdGVkLnR4dAppbmRleCBjZjhkODllZGQyZjJkYzE3OGEy
MTAxYzAzY2VkYTQ5NjZiMDVlMzdiLi5lNGM4NjMzNTdjOTc4YmU1ZTE0YTQyZDEyY2VkMWI2OTg4
YWNjOWIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlY29yZGlu
Zy0yZC1mdWxsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlY29yZGluZy0yZC1mdWxsLWV4cGVjdGVkLnR4dApAQCAtMjQsNyArMjQsNyBAQCBpbml0aWFs
U3RhdGU6CiAgICAgZm9udDogIjEwcHggc2Fucy1zZXJpZiIKICAgICB0ZXh0QWxpZ246ICJzdGFy
dCIKICAgICB0ZXh0QmFzZWxpbmU6ICJhbHBoYWJldGljIgotICAgIGRpcmVjdGlvbjogImx0ciIK
KyAgICBkaXJlY3Rpb246ICJpbmhlcml0IgogICAgIHN0cm9rZVN0eWxlOiAiIzAwMDAwMCIKICAg
ICBmaWxsU3R5bGU6ICIjMDAwMDAwIgogICAgIGltYWdlU21vb3RoaW5nRW5hYmxlZDogdHJ1ZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZWNvcmRpbmctMmQtbWVt
b3J5TGltaXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZWNv
cmRpbmctMmQtbWVtb3J5TGltaXQtZXhwZWN0ZWQudHh0CmluZGV4IDg1NGIwZTRlYzk5Y2IzNzNh
Y2U1NWNlZGQ0NTdmNDU0NGRhNjFhNTEuLjMxNzdmMzhjMzQ3N2ZhN2Y0ZDJjZWQxYTYxNGU4NDI1
NzI4OWYxMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVjb3Jk
aW5nLTJkLW1lbW9yeUxpbWl0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlY29yZGluZy0yZC1tZW1vcnlMaW1pdC1leHBlY3RlZC50eHQKQEAgLTI0LDcg
KzI0LDcgQEAgaW5pdGlhbFN0YXRlOgogICAgIGZvbnQ6ICIxMHB4IHNhbnMtc2VyaWYiCiAgICAg
dGV4dEFsaWduOiAic3RhcnQiCiAgICAgdGV4dEJhc2VsaW5lOiAiYWxwaGFiZXRpYyIKLSAgICBk
aXJlY3Rpb246ICJsdHIiCisgICAgZGlyZWN0aW9uOiAiaW5oZXJpdCIKICAgICBzdHJva2VTdHls
ZTogIiMwMDAwMDAiCiAgICAgZmlsbFN0eWxlOiAiIzAwMDAwMCIKICAgICBpbWFnZVNtb290aGlu
Z0VuYWJsZWQ6IHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMv
cmVjb3JkaW5nLTJkLXNhdmVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
YW52YXMvcmVjb3JkaW5nLTJkLXNhdmVzLWV4cGVjdGVkLnR4dAppbmRleCA0YzFhMTgxNzNjMTcx
ZTM4YTY5NjY5YzZmNmI2Y2E3OWE5M2Q3ZmU2Li4xZTRmMzU3NmRkZjljM2ExODc5ODc1M2FiZWZi
Mjk2MTIzODNiNDE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jl
Y29yZGluZy0yZC1zYXZlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2NhbnZhcy9yZWNvcmRpbmctMmQtc2F2ZXMtZXhwZWN0ZWQudHh0CkBAIC00LDggKzQsOTIgQEAg
VGVzdCB0aGF0IENhbnZhc01hbmFnZXIgaXMgYWJsZSB0byByZWNvcmQgYWN0aW9ucyBtYWRlIHRv
IDJEIGNhbnZhcyBjb250ZXh0cy4KID09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogQ2FudmFzLnJlY29y
ZGluZzJECiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlY29yZGluZzJELkV4aXN0aW5n
U2F2ZXMKIFBBU1M6IFRoZXJlIHNob3VsZCBiZSA0IGV4aXN0aW5nIHN0YXRlcy4KLVBBU1M6IFN0
YXRlIDAgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIGZpbGxTdHlsZSB2YWx1ZS4KLVBBU1M6IFN0YXRl
IDEgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIGZpbGxTdHlsZSB2YWx1ZS4KLVBBU1M6IFN0YXRlIDIg
c2hvdWxkIG1hdGNoIGV4cGVjdGVkIGZpbGxTdHlsZSB2YWx1ZS4KLVBBU1M6IFN0YXRlIDMgc2hv
dWxkIG1hdGNoIGV4cGVjdGVkIGZpbGxTdHlsZSB2YWx1ZS4KK1BBU1M6IFN0YXRlIDAgc2V0VHJh
bnNmb3JtIHZhbHVlIHNob3VsZCBiZSBtYXRyaXgoMSwgMCwgMCwgMSwgMCwgMCkuCitQQVNTOiBT
dGF0ZSAwIGdsb2JhbEFscGhhIHZhbHVlIHNob3VsZCBiZSAxLgorUEFTUzogU3RhdGUgMCBnbG9i
YWxDb21wb3NpdGVPcGVyYXRpb24gdmFsdWUgc2hvdWxkIGJlIHNvdXJjZS1vdmVyLgorUEFTUzog
U3RhdGUgMCBsaW5lV2lkdGggdmFsdWUgc2hvdWxkIGJlIDEuCitQQVNTOiBTdGF0ZSAwIGxpbmVD
YXAgdmFsdWUgc2hvdWxkIGJlIGJ1dHQuCitQQVNTOiBTdGF0ZSAwIGxpbmVKb2luIHZhbHVlIHNo
b3VsZCBiZSBtaXRlci4KK1BBU1M6IFN0YXRlIDAgbWl0ZXJMaW1pdCB2YWx1ZSBzaG91bGQgYmUg
MTAuCitQQVNTOiBTdGF0ZSAwIHNoYWRvd09mZnNldFggdmFsdWUgc2hvdWxkIGJlIDAuCitQQVNT
OiBTdGF0ZSAwIHNoYWRvd09mZnNldFkgdmFsdWUgc2hvdWxkIGJlIDAuCitQQVNTOiBTdGF0ZSAw
IHNoYWRvd0JsdXIgdmFsdWUgc2hvdWxkIGJlIDAuCitQQVNTOiBTdGF0ZSAwIHNoYWRvd0NvbG9y
IHZhbHVlIHNob3VsZCBiZSByZ2JhKDAsIDAsIDAsIDApLgorUEFTUzogU3RhdGUgMCBzZXRMaW5l
RGFzaCB2YWx1ZSBzaG91bGQgYmUgLgorUEFTUzogU3RhdGUgMCBsaW5lRGFzaE9mZnNldCB2YWx1
ZSBzaG91bGQgYmUgMC4KK1BBU1M6IFN0YXRlIDAgZm9udCB2YWx1ZSBzaG91bGQgYmUgMTBweCBz
YW5zLXNlcmlmLgorUEFTUzogU3RhdGUgMCB0ZXh0QWxpZ24gdmFsdWUgc2hvdWxkIGJlIHN0YXJ0
LgorUEFTUzogU3RhdGUgMCB0ZXh0QmFzZWxpbmUgdmFsdWUgc2hvdWxkIGJlIGFscGhhYmV0aWMu
CitQQVNTOiBTdGF0ZSAwIGRpcmVjdGlvbiB2YWx1ZSBzaG91bGQgYmUgaW5oZXJpdC4KK1BBU1M6
IFN0YXRlIDAgc3Ryb2tlU3R5bGUgdmFsdWUgc2hvdWxkIGJlICMwMDAwMDAuCitQQVNTOiBTdGF0
ZSAwIGZpbGxTdHlsZSB2YWx1ZSBzaG91bGQgYmUgIzAwMDAwMC4KK1BBU1M6IFN0YXRlIDAgaW1h
Z2VTbW9vdGhpbmdFbmFibGVkIHZhbHVlIHNob3VsZCBiZSB0cnVlLgorUEFTUzogU3RhdGUgMCBp
bWFnZVNtb290aGluZ1F1YWxpdHkgdmFsdWUgc2hvdWxkIGJlIGxvdy4KK1BBU1M6IFN0YXRlIDAg
c2V0UGF0aCB2YWx1ZSBzaG91bGQgYmUgW29iamVjdCBQYXRoMkRdLgorUEFTUzogU3RhdGUgMSBz
ZXRUcmFuc2Zvcm0gdmFsdWUgc2hvdWxkIGJlIG1hdHJpeCgxLCAwLCAwLCAxLCAxLCAwKS4KK1BB
U1M6IFN0YXRlIDEgZ2xvYmFsQWxwaGEgdmFsdWUgc2hvdWxkIGJlIDAuNS4KK1BBU1M6IFN0YXRl
IDEgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIHZhbHVlIHNob3VsZCBiZSBzb3VyY2UtaW4uCitQ
QVNTOiBTdGF0ZSAxIGxpbmVXaWR0aCB2YWx1ZSBzaG91bGQgYmUgMC41LgorUEFTUzogU3RhdGUg
MSBsaW5lQ2FwIHZhbHVlIHNob3VsZCBiZSByb3VuZC4KK1BBU1M6IFN0YXRlIDEgbGluZUpvaW4g
dmFsdWUgc2hvdWxkIGJlIGJldmVsLgorUEFTUzogU3RhdGUgMSBtaXRlckxpbWl0IHZhbHVlIHNo
b3VsZCBiZSAyMC4KK1BBU1M6IFN0YXRlIDEgc2hhZG93T2Zmc2V0WCB2YWx1ZSBzaG91bGQgYmUg
Mi4KK1BBU1M6IFN0YXRlIDEgc2hhZG93T2Zmc2V0WSB2YWx1ZSBzaG91bGQgYmUgMy4KK1BBU1M6
IFN0YXRlIDEgc2hhZG93Qmx1ciB2YWx1ZSBzaG91bGQgYmUgNC4KK1BBU1M6IFN0YXRlIDEgc2hh
ZG93Q29sb3IgdmFsdWUgc2hvdWxkIGJlICMxMDAwMDAuCitQQVNTOiBTdGF0ZSAxIHNldExpbmVE
YXNoIHZhbHVlIHNob3VsZCBiZSAxLDIuCitQQVNTOiBTdGF0ZSAxIGxpbmVEYXNoT2Zmc2V0IHZh
bHVlIHNob3VsZCBiZSAxMC4KK1BBU1M6IFN0YXRlIDEgZm9udCB2YWx1ZSBzaG91bGQgYmUgMjBw
eCBzYW5zLXNlcmlmLgorUEFTUzogU3RhdGUgMSB0ZXh0QWxpZ24gdmFsdWUgc2hvdWxkIGJlIGxl
ZnQuCitQQVNTOiBTdGF0ZSAxIHRleHRCYXNlbGluZSB2YWx1ZSBzaG91bGQgYmUgdG9wLgorUEFT
UzogU3RhdGUgMSBkaXJlY3Rpb24gdmFsdWUgc2hvdWxkIGJlIGx0ci4KK1BBU1M6IFN0YXRlIDEg
c3Ryb2tlU3R5bGUgdmFsdWUgc2hvdWxkIGJlIFtvYmplY3QgQ2FudmFzUGF0dGVybl0uCitQQVNT
OiBTdGF0ZSAxIGZpbGxTdHlsZSB2YWx1ZSBzaG91bGQgYmUgW29iamVjdCBDYW52YXNHcmFkaWVu
dF0uCitQQVNTOiBTdGF0ZSAxIGltYWdlU21vb3RoaW5nRW5hYmxlZCB2YWx1ZSBzaG91bGQgYmUg
ZmFsc2UuCitQQVNTOiBTdGF0ZSAxIGltYWdlU21vb3RoaW5nUXVhbGl0eSB2YWx1ZSBzaG91bGQg
YmUgbWVkaXVtLgorUEFTUzogU3RhdGUgMSBzZXRQYXRoIHZhbHVlIHNob3VsZCBiZSBbb2JqZWN0
IFBhdGgyRF0uCitQQVNTOiBTdGF0ZSAyIHNldFRyYW5zZm9ybSB2YWx1ZSBzaG91bGQgYmUgbWF0
cml4KDEsIDAsIDAsIDEsIDEsIDEpLgorUEFTUzogU3RhdGUgMiBnbG9iYWxBbHBoYSB2YWx1ZSBz
aG91bGQgYmUgMC4KK1BBU1M6IFN0YXRlIDIgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIHZhbHVl
IHNob3VsZCBiZSBkaWZmZXJlbmNlLgorUEFTUzogU3RhdGUgMiBsaW5lV2lkdGggdmFsdWUgc2hv
dWxkIGJlIDIuCitQQVNTOiBTdGF0ZSAyIGxpbmVDYXAgdmFsdWUgc2hvdWxkIGJlIHNxdWFyZS4K
K1BBU1M6IFN0YXRlIDIgbGluZUpvaW4gdmFsdWUgc2hvdWxkIGJlIHJvdW5kLgorUEFTUzogU3Rh
dGUgMiBtaXRlckxpbWl0IHZhbHVlIHNob3VsZCBiZSAzMC4KK1BBU1M6IFN0YXRlIDIgc2hhZG93
T2Zmc2V0WCB2YWx1ZSBzaG91bGQgYmUgNC4KK1BBU1M6IFN0YXRlIDIgc2hhZG93T2Zmc2V0WSB2
YWx1ZSBzaG91bGQgYmUgNS4KK1BBU1M6IFN0YXRlIDIgc2hhZG93Qmx1ciB2YWx1ZSBzaG91bGQg
YmUgNi4KK1BBU1M6IFN0YXRlIDIgc2hhZG93Q29sb3IgdmFsdWUgc2hvdWxkIGJlICMwMDEwMDAu
CitQQVNTOiBTdGF0ZSAyIHNldExpbmVEYXNoIHZhbHVlIHNob3VsZCBiZSAzLDQuCitQQVNTOiBT
dGF0ZSAyIGxpbmVEYXNoT2Zmc2V0IHZhbHVlIHNob3VsZCBiZSAxMS4KK1BBU1M6IFN0YXRlIDIg
Zm9udCB2YWx1ZSBzaG91bGQgYmUgMzBweCBjdXJzaXZlLgorUEFTUzogU3RhdGUgMiB0ZXh0QWxp
Z24gdmFsdWUgc2hvdWxkIGJlIHJpZ2h0LgorUEFTUzogU3RhdGUgMiB0ZXh0QmFzZWxpbmUgdmFs
dWUgc2hvdWxkIGJlIGhhbmdpbmcuCitQQVNTOiBTdGF0ZSAyIGRpcmVjdGlvbiB2YWx1ZSBzaG91
bGQgYmUgaW5oZXJpdC4KK1BBU1M6IFN0YXRlIDIgc3Ryb2tlU3R5bGUgdmFsdWUgc2hvdWxkIGJl
IFtvYmplY3QgQ2FudmFzR3JhZGllbnRdLgorUEFTUzogU3RhdGUgMiBmaWxsU3R5bGUgdmFsdWUg
c2hvdWxkIGJlIFtvYmplY3QgQ2FudmFzUGF0dGVybl0uCitQQVNTOiBTdGF0ZSAyIGltYWdlU21v
b3RoaW5nRW5hYmxlZCB2YWx1ZSBzaG91bGQgYmUgdHJ1ZS4KK1BBU1M6IFN0YXRlIDIgaW1hZ2VT
bW9vdGhpbmdRdWFsaXR5IHZhbHVlIHNob3VsZCBiZSBoaWdoLgorUEFTUzogU3RhdGUgMiBzZXRQ
YXRoIHZhbHVlIHNob3VsZCBiZSBbb2JqZWN0IFBhdGgyRF0uCitQQVNTOiBTdGF0ZSAzIHNldFRy
YW5zZm9ybSB2YWx1ZSBzaG91bGQgYmUgbWF0cml4KDEsIDAsIDAsIDEsIDAsIC0xKS4KK1BBU1M6
IFN0YXRlIDMgZ2xvYmFsQWxwaGEgdmFsdWUgc2hvdWxkIGJlIDAuNzUuCitQQVNTOiBTdGF0ZSAz
IGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiB2YWx1ZSBzaG91bGQgYmUgc291cmNlLW92ZXIuCitQ
QVNTOiBTdGF0ZSAzIGxpbmVXaWR0aCB2YWx1ZSBzaG91bGQgYmUgMy4KK1BBU1M6IFN0YXRlIDMg
bGluZUNhcCB2YWx1ZSBzaG91bGQgYmUgcm91bmQuCitQQVNTOiBTdGF0ZSAzIGxpbmVKb2luIHZh
bHVlIHNob3VsZCBiZSBiZXZlbC4KK1BBU1M6IFN0YXRlIDMgbWl0ZXJMaW1pdCB2YWx1ZSBzaG91
bGQgYmUgNDAuCitQQVNTOiBTdGF0ZSAzIHNoYWRvd09mZnNldFggdmFsdWUgc2hvdWxkIGJlIDYu
CitQQVNTOiBTdGF0ZSAzIHNoYWRvd09mZnNldFkgdmFsdWUgc2hvdWxkIGJlIDcuCitQQVNTOiBT
dGF0ZSAzIHNoYWRvd0JsdXIgdmFsdWUgc2hvdWxkIGJlIDguCitQQVNTOiBTdGF0ZSAzIHNoYWRv
d0NvbG9yIHZhbHVlIHNob3VsZCBiZSAjMDAwMDEwLgorUEFTUzogU3RhdGUgMyBzZXRMaW5lRGFz
aCB2YWx1ZSBzaG91bGQgYmUgNSw2LgorUEFTUzogU3RhdGUgMyBsaW5lRGFzaE9mZnNldCB2YWx1
ZSBzaG91bGQgYmUgMTIuCitQQVNTOiBTdGF0ZSAzIGZvbnQgdmFsdWUgc2hvdWxkIGJlIDQwcHgg
ZmFudGFzeS4KK1BBU1M6IFN0YXRlIDMgdGV4dEFsaWduIHZhbHVlIHNob3VsZCBiZSBjZW50ZXIu
CitQQVNTOiBTdGF0ZSAzIHRleHRCYXNlbGluZSB2YWx1ZSBzaG91bGQgYmUgaWRlb2dyYXBoaWMu
CitQQVNTOiBTdGF0ZSAzIGRpcmVjdGlvbiB2YWx1ZSBzaG91bGQgYmUgcnRsLgorUEFTUzogU3Rh
dGUgMyBzdHJva2VTdHlsZSB2YWx1ZSBzaG91bGQgYmUgIzIwMDAwMC4KK1BBU1M6IFN0YXRlIDMg
ZmlsbFN0eWxlIHZhbHVlIHNob3VsZCBiZSAjMzAwMDAwLgorUEFTUzogU3RhdGUgMyBpbWFnZVNt
b290aGluZ0VuYWJsZWQgdmFsdWUgc2hvdWxkIGJlIGZhbHNlLgorUEFTUzogU3RhdGUgMyBpbWFn
ZVNtb290aGluZ1F1YWxpdHkgdmFsdWUgc2hvdWxkIGJlIG1lZGl1bS4KK1BBU1M6IFN0YXRlIDMg
c2V0UGF0aCB2YWx1ZSBzaG91bGQgYmUgW29iamVjdCBQYXRoMkRdLgogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlY29yZGluZy0yZC1zYXZlcy5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZWNvcmRpbmctMmQtc2F2ZXMuaHRtbAppbmRleCA5
Yjc4ZmRkMjQxM2Q4NWRhZWVlNzk2MjhkNjUxZDJjMmRhNGE1M2FlLi41ZGQ5YTRhZWFlNmQyMDIx
MmRjNzRjZmRmYmMxYmQzZjMyZTUxYTA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlY29yZGluZy0yZC1zYXZlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9jYW52YXMvcmVjb3JkaW5nLTJkLXNhdmVzLmh0bWwKQEAgLTE5LDE1ICsxOSwzOSBAQCBm
dW5jdGlvbiB0ZXN0KCkgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhc3luYyBmdW5j
dGlvbiBsb2dTdGF0ZXMocmVjb3JkaW5nKSB7Ci0gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rp
b24gY29tcGFyZShpbmRleCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBj
aGVjayhpbmRleCwgc3RhdGUsIG5hbWUsIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoIiIgKyBzdGF0ZS5nZXQobmFtZSksICIiICsgZXhw
ZWN0ZWQsIGBTdGF0ZSAke2luZGV4fSAke25hbWV9IHZhbHVlIHNob3VsZCBiZSAke2V4cGVjdGVk
fS5gKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBj
b21wYXJlKGluZGV4LCB0cmFuc2Zvcm0sIGdsb2JhbEFscGhhLCBnbG9iYWxDb21wb3NpdGVPcGVy
YXRpb24sIGxpbmVXaWR0aCwgbGluZUNhcCwgbGluZUpvaW4sIG1pdGVyTGltaXQsIHNoYWRvd09m
ZnNldFgsIHNoYWRvd09mZnNldFksIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBsaW5lRGFzaCwg
bGluZURhc2hPZmZzZXQsIGZvbnQsIHRleHRBbGlnbiwgdGV4dEJhc2VsaW5lLCBkaXJlY3Rpb24s
IHN0cm9rZVN0eWxlLCBmaWxsU3R5bGUsIGltYWdlU21vb3RoaW5nRW5hYmxlZCwgaW1hZ2VTbW9v
dGhpbmdRdWFsaXR5LCBwYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IGF3
YWl0IFdJLlJlY29yZGluZ1N0YXRlLnN3aXp6bGVJbml0aWFsU3RhdGUocmVjb3JkaW5nLCByZWNv
cmRpbmcuaW5pdGlhbFN0YXRlLnN0YXRlc1tpbmRleF0pOwotICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHN0YXRlLmdldCgiZmlsbFN0eWxlIiksIGV4cGVjdGVk
LCBgU3RhdGUgJHtpbmRleH0gc2hvdWxkIG1hdGNoIGV4cGVjdGVkIGZpbGxTdHlsZSB2YWx1ZS5g
KQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpbmRleCwgc3RhdGUsICJzZXRUcmFuc2Zvcm0i
LCB0cmFuc2Zvcm0pCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4LCBzdGF0ZSwgImds
b2JhbEFscGhhIiwgZ2xvYmFsQWxwaGEpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4
LCBzdGF0ZSwgImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsIGdsb2JhbENvbXBvc2l0ZU9wZXJh
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgsIHN0YXRlLCAibGluZVdpZHRo
IiwgbGluZVdpZHRoKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpbmRleCwgc3RhdGUsICJs
aW5lQ2FwIiwgbGluZUNhcCkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgsIHN0YXRl
LCAibGluZUpvaW4iLCBsaW5lSm9pbikKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgs
IHN0YXRlLCAibWl0ZXJMaW1pdCIsIG1pdGVyTGltaXQpCisgICAgICAgICAgICAgICAgICAgIGNo
ZWNrKGluZGV4LCBzdGF0ZSwgInNoYWRvd09mZnNldFgiLCBzaGFkb3dPZmZzZXRYKQorICAgICAg
ICAgICAgICAgICAgICBjaGVjayhpbmRleCwgc3RhdGUsICJzaGFkb3dPZmZzZXRZIiwgc2hhZG93
T2Zmc2V0WSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgsIHN0YXRlLCAic2hhZG93
Qmx1ciIsIHNoYWRvd0JsdXIpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4LCBzdGF0
ZSwgInNoYWRvd0NvbG9yIiwgc2hhZG93Q29sb3IpCisgICAgICAgICAgICAgICAgICAgIGNoZWNr
KGluZGV4LCBzdGF0ZSwgInNldExpbmVEYXNoIiwgbGluZURhc2gpCisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrKGluZGV4LCBzdGF0ZSwgImxpbmVEYXNoT2Zmc2V0IiwgbGluZURhc2hPZmZzZXQp
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4LCBzdGF0ZSwgImZvbnQiLCBmb250KQor
ICAgICAgICAgICAgICAgICAgICBjaGVjayhpbmRleCwgc3RhdGUsICJ0ZXh0QWxpZ24iLCB0ZXh0
QWxpZ24pCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4LCBzdGF0ZSwgInRleHRCYXNl
bGluZSIsIHRleHRCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgsIHN0
YXRlLCAiZGlyZWN0aW9uIiwgZGlyZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhp
bmRleCwgc3RhdGUsICJzdHJva2VTdHlsZSIsIHN0cm9rZVN0eWxlKSAvLyBGSVhNRTogTWlnaHQg
d2FudCB0byBkbyBhIGJldHRlciBqb2IgYXQgc3RyaW5naWZ5aW5nIGdyYWRpZW50cyBhbmQgcGF0
dGVybnMgZm9yIGEgYmV0dGVyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGluZGV4
LCBzdGF0ZSwgImZpbGxTdHlsZSIsIGZpbGxTdHlsZSkgLy8gRklYTUU6IE1pZ2h0IHdhbnQgdG8g
ZG8gYSBiZXR0ZXIgam9iIGF0IHN0cmluZ2lmeWluZyBncmFkaWVudHMgYW5kIHBhdHRlcm5zIGZv
ciBhIGJldHRlciB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBjaGVjayhpbmRleCwgc3RhdGUs
ICJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCBpbWFnZVNtb290aGluZ0VuYWJsZWQpCisgICAgICAg
ICAgICAgICAgICAgIGNoZWNrKGluZGV4LCBzdGF0ZSwgImltYWdlU21vb3RoaW5nUXVhbGl0eSIs
IGltYWdlU21vb3RoaW5nUXVhbGl0eSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaW5kZXgs
IHN0YXRlLCAic2V0UGF0aCIsIHBhdGgpIC8vIEZJWE1FOiBOZWVkIHRvIGRvIGEgYmV0dGVyIGpv
YiBhdCBzdHJpbmdpZnlpbmcgYSBwYXRoIGZvciBhIHVzZWZ1bCB0ZXN0LgogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBhcmUoMCwgIiMwMDAwMDAiKTsKLSAg
ICAgICAgICAgICAgICBhd2FpdCBjb21wYXJlKDEsICIjZmYwMDAwIik7Ci0gICAgICAgICAgICAg
ICAgYXdhaXQgY29tcGFyZSgyLCAiIzAwZmYwMCIpOwotICAgICAgICAgICAgICAgIGF3YWl0IGNv
bXBhcmUoMywgIiMwMDAwZmYiKTsKKyAgICAgICAgICAgICAgICBhd2FpdCBjb21wYXJlKDAsICJt
YXRyaXgoMSwgMCwgMCwgMSwgMCwgMCkiLCAxLCAic291cmNlLW92ZXIiLCAxLCAiYnV0dCIsICJt
aXRlciIsIDEwLCAwLCAwLCAwLCAicmdiYSgwLCAwLCAwLCAwKSIsICIiLCAwLCAiMTBweCBzYW5z
LXNlcmlmIiwgInN0YXJ0IiwgImFscGhhYmV0aWMiLCAiaW5oZXJpdCIsICIjMDAwMDAwIiwgIiMw
MDAwMDAiLCB0cnVlLCAibG93IiwgIltvYmplY3QgUGF0aDJEXSIpCisgICAgICAgICAgICAgICAg
YXdhaXQgY29tcGFyZSgxLCAibWF0cml4KDEsIDAsIDAsIDEsIDEsIDApIiwgMC41LCAic291cmNl
LWluIiwgMC41LCAicm91bmQiLCAiYmV2ZWwiLCAyMCwgMiwgMywgNCwgIiMxMDAwMDAiLCAiMSwy
IiwgMTAsICIyMHB4IHNhbnMtc2VyaWYiLCAibGVmdCIsICJ0b3AiLCAibHRyIiwgIltvYmplY3Qg
Q2FudmFzUGF0dGVybl0iLCAiW29iamVjdCBDYW52YXNHcmFkaWVudF0iLCBmYWxzZSwgIm1lZGl1
bSIsICJbb2JqZWN0IFBhdGgyRF0iKQorICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBhcmUoMiwg
Im1hdHJpeCgxLCAwLCAwLCAxLCAxLCAxKSIsIDAsICJkaWZmZXJlbmNlIiwgMiwgInNxdWFyZSIs
ICJyb3VuZCIsIDMwLCA0LCA1LCA2LCAiIzAwMTAwMCIsICIzLDQiLCAxMSwgIjMwcHggY3Vyc2l2
ZSIsICJyaWdodCIsICJoYW5naW5nIiwgImluaGVyaXQiLCAiW29iamVjdCBDYW52YXNHcmFkaWVu
dF0iLCAiW29iamVjdCBDYW52YXNQYXR0ZXJuXSIsIHRydWUsICJoaWdoIiwgIltvYmplY3QgUGF0
aDJEXSIpCisgICAgICAgICAgICAgICAgYXdhaXQgY29tcGFyZSgzLCAibWF0cml4KDEsIDAsIDAs
IDEsIDAsIC0xKSIsIDAuNzUsICJzb3VyY2Utb3ZlciIsIDMsICJyb3VuZCIsICJiZXZlbCIsIDQw
LCA2LCA3LCA4LCAiIzAwMDAxMCIsICI1LDYiLCAxMiwgIjQwcHggZmFudGFzeSIsICJjZW50ZXIi
LCAiaWRlb2dyYXBoaWMiLCAicnRsIiwgIiMyMDAwMDAiLCAiIzMwMDAwMCIsIGZhbHNlLCAibWVk
aXVtIiwgIltvYmplY3QgUGF0aDJEXSIpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNh
bnZhcy5hd2FpdEV2ZW50KFdJLkNhbnZhcy5FdmVudC5SZWNvcmRpbmdTdG9wcGVkKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvdXJjZXMvcmVjb3JkaW5nLTJk
LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9yZXNvdXJjZXMvcmVjb3JkaW5nLTJk
LmpzCmluZGV4IGU2OTI0NWNjNzBjNDRjNDQxMjVmOWU4NmI1ODU0NTBmNzc2MmQ1N2UuLjZjOWNi
NmQwOGVjM2U2ODU4YTcwNDE3N2JjOWUwYmVmMjMyZTAzN2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvcmVzb3VyY2VzL3JlY29yZGluZy0yZC5qcworKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3Jlc291cmNlcy9yZWNvcmRpbmctMmQuanMKQEAgLTQw
OSwxNCArNDA5LDM2IEBAIGZ1bmN0aW9uIHBlcmZvcm1TYXZlUHJlQWN0aW9ucygpIHsKICAgICBj
dHgucmVzdG9yZSgpOwogICAgIGN0eC5yZXN0b3JlKCk7CiAKLSAgICBmdW5jdGlvbiBzYXZlRmls
bFN0eWxlKHZhbHVlKSB7Ci0gICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgIGN0eC5maWxsU3R5
bGUgPSB2YWx1ZTsKKyAgICBmdW5jdGlvbiBzYXZlQW5kU2V0KHRyYW5zbGF0ZVgsIHRyYW5zbGF0
ZVksIGdsb2JhbEFscGhhLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sIGxpbmVXaWR0aCwgbGlu
ZUNhcCwgbGluZUpvaW4sIG1pdGVyTGltaXQsIHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFks
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBsaW5lRGFzaCwgbGluZURhc2hPZmZzZXQsIGZvbnQs
IHRleHRBbGlnbiwgdGV4dEJhc2VsaW5lLCBkaXJlY3Rpb24sIHN0cm9rZVN0eWxlLCBmaWxsU3R5
bGUsIGltYWdlU21vb3RoaW5nRW5hYmxlZCwgaW1hZ2VTbW9vdGhpbmdRdWFsaXR5KSB7CisgICAg
ICAgIGN0eC5zYXZlKCkKKworICAgICAgICBjdHgudHJhbnNsYXRlKHRyYW5zbGF0ZVgsIHRyYW5z
bGF0ZVkpCisgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IGdsb2JhbEFscGhhCisgICAgICAgIGN0
eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24KKyAg
ICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aAorICAgICAgICBjdHgubGluZUNhcCA9IGxp
bmVDYXAKKyAgICAgICAgY3R4LmxpbmVKb2luID0gbGluZUpvaW4KKyAgICAgICAgY3R4Lm1pdGVy
TGltaXQgPSBtaXRlckxpbWl0CisgICAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gc2hhZG93T2Zm
c2V0WAorICAgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IHNoYWRvd09mZnNldFkKKyAgICAgICAg
Y3R4LnNoYWRvd0JsdXIgPSBzaGFkb3dCbHVyCisgICAgICAgIGN0eC5zaGFkb3dDb2xvciA9IHNo
YWRvd0NvbG9yCisgICAgICAgIGN0eC5zZXRMaW5lRGFzaChsaW5lRGFzaCkKKyAgICAgICAgY3R4
LmxpbmVEYXNoT2Zmc2V0ID0gbGluZURhc2hPZmZzZXQKKyAgICAgICAgY3R4LmZvbnQgPSBmb250
CisgICAgICAgIGN0eC50ZXh0QWxpZ24gPSB0ZXh0QWxpZ24KKyAgICAgICAgY3R4LnRleHRCYXNl
bGluZSA9IHRleHRCYXNlbGluZQorICAgICAgICBjdHguZGlyZWN0aW9uID0gZGlyZWN0aW9uCisg
ICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlCisgICAgICAgIGN0eC5maWxsU3R5
bGUgPSBmaWxsU3R5bGUKKyAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGltYWdl
U21vb3RoaW5nRW5hYmxlZAorICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gaW1h
Z2VTbW9vdGhpbmdRdWFsaXR5CisgICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhlIHBhdGgsIHRv
by4KICAgICB9CiAKLSAgICBzYXZlRmlsbFN0eWxlKCIjZmYwMDAwIik7Ci0gICAgc2F2ZUZpbGxT
dHlsZSgiIzAwZmYwMCIpOwotICAgIHNhdmVGaWxsU3R5bGUoIiMwMDAwZmYiKTsKKyAgICBzYXZl
QW5kU2V0KDEsIDAsIDAuNSwgInNvdXJjZS1pbiIsIDAuNSwgInJvdW5kIiwgImJldmVsIiwgMjAs
IDIsIDMsIDQsICIjMTAwMDAwIiwgWzEsIDJdLCAxMCwgIjIwcHggc2Fucy1zZXJpZiIsICJsZWZ0
IiwgInRvcCIsICJsdHIiLCBwYXR0ZXJuLCBsaW5lYXJHcmFkaWVudCwgZmFsc2UsICJtZWRpdW0i
KQorICAgIHNhdmVBbmRTZXQoMCwgMSwgMCwgImRpZmZlcmVuY2UiLCAyLCAic3F1YXJlIiwgInJv
dW5kIiwgMzAsIDQsIDUsIDYsICIjMDAxMDAwIiwgWzMsIDRdLCAxMSwgIjMwcHggY3Vyc2l2ZSIs
ICJyaWdodCIsICJoYW5naW5nIiwgImluaGVyaXQiLCBsaW5lYXJHcmFkaWVudCwgcGF0dGVybiwg
dHJ1ZSwgImhpZ2giKQorICAgIHNhdmVBbmRTZXQoLTEsIC0yLCAwLjc1LCAic291cmNlLW92ZXIi
LCAzLCAicm91bmQiLCAiYmV2ZWwiLCA0MCwgNiwgNywgOCwgIiMwMDAwMTAiLCBbNSwgNl0sIDEy
LCAiNDBweCBmYW50YXN5IiwgImNlbnRlciIsICJpZGVvZ3JhcGhpYyIsICJydGwiLCAiIzIwMDAw
MCIsICIjMzAwMDAwIiwgZmFsc2UsICJtZWRpdW0iKQogfQogCiBmdW5jdGlvbiBwZXJmb3JtU2F2
ZVBvc3RBY3Rpb25zKCkgewo=
</data>
<flag name="review"
          id="441479"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="441548"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>