<?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>212059</bug_id>
          
          <creation_ts>2020-05-18 19:40:34 -0700</creation_ts>
          <short_desc>Remove almost always incorrect Color::getRGBA</short_desc>
          <delta_ts>2020-05-20 09:28:37 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1653868</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-18 19:40:34 -0700</bug_when>
    <thetext>Simplify Color interface by replacing Color::getRGBA() with a variant returning a FloatComponents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653871</commentid>
    <comment_count>1</comment_count>
      <attachid>399700</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-18 19:48:18 -0700</bug_when>
    <thetext>Created attachment 399700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653872</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-18 19:50:35 -0700</bug_when>
    <thetext>Here is a first pass at this. Not sure I am happy with the name Color::rgba(). Maybe Color::toRGBAComponents() for symmetry with Color::toSRGBAComponentsLossy()? Or should we just have everyone using Color::toSRGBAComponentsLossy().

Pretty happy with the structured bindings use, but since that is kind of new-ish, would like more feedback on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653874</commentid>
    <comment_count>3</comment_count>
      <attachid>399700</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-18 20:00:46 -0700</bug_when>
    <thetext>Comment on attachment 399700
Patch

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

&gt; Source/WebCore/platform/graphics/cairo/GradientCairo.cpp:154
&gt; +    if (from.color.isExtended())
&gt; +        fromComponents = from.color.asExtended().channels();
&gt; +    else
&gt; +        fromComponents = from.color.rgba();

Should make rgba() just work for extended colors, as long as they are sRGB. This code should really ask about the colorspace, not about the isExtended. Maybe just call toSRGBAComponentsLossy().

&gt; Source/WebCore/platform/graphics/cairo/GradientCairo.cpp:165
&gt;      float r = r1 + (r2 - r1) * 0.5f;

Maybe we should just put blending into FloatCompontents.

&gt; Source/WebCore/platform/graphics/cg/GradientCG.cpp:73
&gt; +        auto [r, g, b, a] = stop.color.rgba();

Broken with extended colors (not your fault). Call toSRGBAComponentsLossy()?

&gt; Source/WebCore/platform/graphics/filters/FilterOperations.cpp:114
&gt; +    FloatComponents components = color.rgba();

Broken with extended colors (not your fault). Call toSRGBAComponentsLossy()?

&gt; Source/WebCore/platform/graphics/filters/FilterOperations.cpp:133
&gt; +    FloatComponents components = color.rgba();

Ditto.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:256
&gt; +    auto [r, g, b, a] = Color(premultipliedARGBFromColor(color)).rgba();

Would be nicer to do the premultiply on FloatComponents.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:281
&gt; +        auto [r, g, b, a] = color.rgba();

toSRGBAComponentsLossy?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:421
&gt; +            auto [r, g, b, a] = Color(premultipliedARGBFromColor(shadow.color())).rgba();

Would be nicer to do the premultiply on FloatComponents.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:683
&gt; +    auto [r, g, b, a] = Color(premultipliedARGBFromColor(color)).rgba();

Would be nicer to do the premultiply on FloatComponents.

&gt; Source/WebCore/rendering/TextPaintStyle.cpp:66
&gt; +    return contrastRatio(textColor.rgba(), backgroundColor.rgba()) &gt; 4.5;

Broken with extended colors.

&gt; Source/WebKit/UIProcess/API/wpe/WebKitColor.cpp:85
&gt; +    auto [r, g, b, a] = webCoreColor.rgba().components;

Broken with extended colors.

&gt; Source/WebKit/WebProcess/WebPage/WebFrame.cpp:663
&gt; +    auto [r, g, b, a] = bgColor.rgba();

Broken with extended colors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653887</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-18 20:30:55 -0700</bug_when>
    <thetext>Simon, other than the call to Color::rgba() in Color::toSRGBAComponents(), are any of the other calls valid? Should they all be switched to Color::toSRGBAComponents() and Color::rgba() be made private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653889</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-18 20:50:35 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Simon, other than the call to Color::rgba() in Color::toSRGBAComponents(),
&gt; are any of the other calls valid? Should they all be switched to
&gt; Color::toSRGBAComponents() and Color::rgba() be made private?

I think it&apos;s an error to call Color::rgba() without knowing that the color is sRGB.

So we could either make Color::rgba() private, or have it return Optional&lt;FloatComponents&gt; if there are clients for which that makes sense.

Now that ExtendedColor allows Color to be in any of the supported colorspaces, I think we have to be explicit about colorspace conversions everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654076</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-19 11:13:29 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; (In reply to Sam Weinig from comment #4)
&gt; &gt; Simon, other than the call to Color::rgba() in Color::toSRGBAComponents(),
&gt; &gt; are any of the other calls valid? Should they all be switched to
&gt; &gt; Color::toSRGBAComponents() and Color::rgba() be made private?
&gt; 
&gt; I think it&apos;s an error to call Color::rgba() without knowing that the color
&gt; is sRGB.

To put it more strongly: Color::rgba() is actively harmful, because it returns garbage for extended colors. We should hide it. For now we can move callers to toSRGBAComponentsLossy(). Callers that want to do the right thing with extended colors can be migrated later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654078</commentid>
    <comment_count>7</comment_count>
      <attachid>399752</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 11:15:25 -0700</bug_when>
    <thetext>Created attachment 399752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654097</commentid>
    <comment_count>8</comment_count>
      <attachid>399752</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-19 11:33:00 -0700</bug_when>
    <thetext>Comment on attachment 399752
Patch

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

&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:136
&gt; +        color = cachedCGColor(SimpleColor { argb });

(Not your fault): It blows my mind that the arguments to SimpleColor are argb. Seems very Cocoa-centric, and easy to get wrong. Maybe SimpleColor needs at more scary name like PlatformPixelValue.

&gt; Source/WebCore/platform/graphics/Color.cpp:359
&gt;          return Color(0x54, 0x54, 0x54, alpha());

Can we just say 84 rather than 0x54?

&gt; Source/WebCore/platform/graphics/Color.cpp:393
&gt; +    auto [r, g, b, a] = toSRGBAComponentsLossy();
&gt; +    float largestNonAlphaChannel = std::max(r, std::max(g, b));
&gt; +    return a &gt; 0.5 &amp;&amp; largestNonAlphaChannel &lt; 0.5;

This should really compute luminance. Maybe a // FIXME

&gt; Source/WebCore/platform/graphics/Color.cpp:544
&gt; +    return { ColorSpace::SRGB, FloatComponents { red() / 255.0f, green() / 255.0f, blue() / 255.0f,  alpha() / 255.0f } };

I feel like the / 255.0f should be in a helper function somewhere. We&apos;ve gone back and forth several times on rounding/flooring of color components (e.g. r252598).

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:117
&gt; +        return CGColorCreate(sRGBColorSpaceRef(), components);

We should use the linearRGBColorSpaceRef here (should fix in a separate bug).

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:134
&gt; +            static CGColorRef whiteCGColor = leakCGColor(color)

How does this compile?

&gt; Source/WebCore/platform/graphics/cg/GradientCG.cpp:74
&gt; +        auto [colorSpace, components] = stop.color.colorSpaceAndComponent();
&gt; +        auto [r, g, b, a] = components;

This needs a FIXME; we drop colorSpace on the floor.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:202
&gt; +    static constexpr SimpleColor spellingPatternColor { makeRGB(255, 0, 0) };
&gt; +    static constexpr SimpleColor grammarPatternColor { makeRGB(0, 128, 0) };

Ugh, my brain hurts. RGBA32 makeRGBA(), despite the name, returns ARGB which is the argument to the SimpleColor ctor, so this is OK. I don&apos;t know why SimpleColor doesn&apos;t take a RGBA32, and the names all need fixing.

&gt; Source/WebKit/WebProcess/WebPage/WebFrame.cpp:663
&gt; +    auto [r, g, b, a] = bgColor.toSRGBAComponentsLossy();

Sad that I can&apos;t have a P3 frame background.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654118</commentid>
    <comment_count>9</comment_count>
      <attachid>399752</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-19 12:03:26 -0700</bug_when>
    <thetext>Comment on attachment 399752
Patch

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

&gt;&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:136
&gt;&gt; +        color = cachedCGColor(SimpleColor { argb });
&gt; 
&gt; (Not your fault): It blows my mind that the arguments to SimpleColor are argb. Seems very Cocoa-centric, and easy to get wrong. Maybe SimpleColor needs at more scary name like PlatformPixelValue.

We should change the arguments, not the class name. The RGBA32 integer type was widespread in KHTML even before it was ported to Mac, so it’s not Cocoa-centric.

What arguments would you prefer? An aggregate of four uint8_t in RGBA order? I would love to change this to something that makes sense to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654123</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-19 12:16:24 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 399752 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=399752&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:136
&gt; &gt;&gt; +        color = cachedCGColor(SimpleColor { argb });
&gt; &gt; 
&gt; &gt; (Not your fault): It blows my mind that the arguments to SimpleColor are argb. Seems very Cocoa-centric, and easy to get wrong. Maybe SimpleColor needs at more scary name like PlatformPixelValue.
&gt; 
&gt; We should change the arguments, not the class name. The RGBA32 integer type
&gt; was widespread in KHTML even before it was ported to Mac, so it’s not
&gt; Cocoa-centric.
&gt; 
&gt; What arguments would you prefer? An aggregate of four uint8_t in RGBA order?
&gt; I would love to change this to something that makes sense to you.

Is the long-term plan to replace RGBA32 with SimpleColor?

Ideally we&apos;d just remove it; it&apos;s too tied to the old notion that color fits into a uint32_t, with no colorspace information. Color could have some kind of adaptor, only usable when constructing a color, that explicitly converts from a ARGB into an sRGB color with those components.

Note that ColorComponents, based on std::array&lt;uint8_t, 4&gt;, is basically the same thing with RGBA ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654131</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-19 12:24:16 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Is the long-term plan to replace RGBA32 with SimpleColor?

Yes.

&gt; Ideally we&apos;d just remove it; it&apos;s too tied to the old notion that color fits
&gt; into a uint32_t, with no colorspace information. Color could have some kind
&gt; of adaptor, only usable when constructing a color, that explicitly converts
&gt; from a ARGB into an sRGB color with those components.

I don’t understand what removing it means. I added it as a type safe replacement for the old RGBA32. Which, by the way, is a hilarious name for an integer containing 8-bit color components ordered ARGB.

But once it was type safe, I had planned to change it to a better interface.

&gt; Note that ColorComponents, based on std::array&lt;uint8_t, 4&gt;, is basically the
&gt; same thing with RGBA ordering.

Sure, we could find a way to merge ColorComponents with SimpleColor.

The idea behind SimpleColor is that it contains 8-bit RGBA components with sRGB color space implied. It should only be used in places where that’s useful. Anywhere we need to handle colors that might not be that simple, we would use Color instead.

I borrowed the name SimpleColor from https://html.spec.whatwg.org/#simple-colour where it’s used for RGB colors, without alpha.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654132</commentid>
    <comment_count>12</comment_count>
      <attachid>399759</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 12:26:41 -0700</bug_when>
    <thetext>Created attachment 399759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654189</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 14:40:46 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; Comment on attachment 399752 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=399752&amp;action=review
&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:359
&gt; &gt;          return Color(0x54, 0x54, 0x54, alpha());
&gt; 
&gt; Can we just say 84 rather than 0x54?

Going to fix this in another change. Really it should be colorWithOverrideAlpha(lightenedBlack, alpha()) but there is no overload that works for this yet.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:393
&gt; &gt; +    auto [r, g, b, a] = toSRGBAComponentsLossy();
&gt; &gt; +    float largestNonAlphaChannel = std::max(r, std::max(g, b));
&gt; &gt; +    return a &gt; 0.5 &amp;&amp; largestNonAlphaChannel &lt; 0.5;
&gt; 
&gt; This should really compute luminance. Maybe a // FIXME

Ok. Will add.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:544
&gt; &gt; +    return { ColorSpace::SRGB, FloatComponents { red() / 255.0f, green() / 255.0f, blue() / 255.0f,  alpha() / 255.0f } };
&gt; 
&gt; I feel like the / 255.0f should be in a helper function somewhere. We&apos;ve
&gt; gone back and forth several times on rounding/flooring of color components
&gt; (e.g. r252598).

Have a name in mind? 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:117
&gt; &gt; +        return CGColorCreate(sRGBColorSpaceRef(), components);
&gt; 
&gt; We should use the linearRGBColorSpaceRef here (should fix in a separate bug).

Ok. Will leave.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:134
&gt; &gt; +            static CGColorRef whiteCGColor = leakCGColor(color)
&gt; 
&gt; How does this compile?

It didn&apos;t. Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/GradientCG.cpp:74
&gt; &gt; +        auto [colorSpace, components] = stop.color.colorSpaceAndComponent();
&gt; &gt; +        auto [r, g, b, a] = components;
&gt; 
&gt; This needs a FIXME; we drop colorSpace on the floor.

It&apos;s not completely dropping the color space on the floor, but you have to look at the surrounding code. These components will only be used if it&apos;s not an ExtendedColor, and therefore we know it&apos;s sRGB. The whole function is odd though and wrong. Probably, something needs to confirm that all the colors are in the same color space, or otherwise convert everything to a single colorspace. No sure. Not really clear on how the extendedSRGBColorSpaceRef works.


&gt; &gt; Source/WebKit/WebProcess/WebPage/WebFrame.cpp:663
&gt; &gt; +    auto [r, g, b, a] = bgColor.toSRGBAComponentsLossy();
&gt; 
&gt; Sad that I can&apos;t have a P3 frame background.

Probably time for someone to add WKBundleFrameCopyDocumentBackgroundColor that returns a CGColorRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654195</commentid>
    <comment_count>14</comment_count>
      <attachid>399772</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 14:52:23 -0700</bug_when>
    <thetext>Created attachment 399772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654200</commentid>
    <comment_count>15</comment_count>
      <attachid>399772</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-19 15:00:42 -0700</bug_when>
    <thetext>Comment on attachment 399772
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:393
&gt; +    float largestNonAlphaChannel = std::max(r, std::max(g, b));

I think we could write: std::max({ r, g, b })

&gt; Source/WebCore/platform/graphics/Color.h:97
&gt; +RGBA32 colorWithOverrideAlpha(RGBA32 color, int overrideAlpha);

I’d think we’d want this to be uint8_t, not int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654203</commentid>
    <comment_count>16</comment_count>
      <attachid>399773</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 15:12:56 -0700</bug_when>
    <thetext>Created attachment 399773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654212</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 15:55:41 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #16)
&gt; Created attachment 399773 [details]
&gt; Patch

Hm, MSVC is really not happy with those colorSpace switches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654215</commentid>
    <comment_count>18</comment_count>
      <attachid>399777</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 15:58:32 -0700</bug_when>
    <thetext>Created attachment 399777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654272</commentid>
    <comment_count>19</comment_count>
      <attachid>399796</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-19 18:02:58 -0700</bug_when>
    <thetext>Created attachment 399796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654289</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-19 19:14:01 -0700</bug_when>
    <thetext>Committed r261901: &lt;https://trac.webkit.org/changeset/261901&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 399796.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654290</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-19 19:15:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/63426594&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654340</commentid>
    <comment_count>22</comment_count>
      <attachid>399796</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-05-19 22:52:39 -0700</bug_when>
    <thetext>Comment on attachment 399796
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:75
&gt; +        auto [r, g, b, a] stop.color.toSRGBAComponentsLossy();

=</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654480</commentid>
    <comment_count>23</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-20 09:28:37 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #22)
&gt; Comment on attachment 399796 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=399796&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:75
&gt; &gt; +        auto [r, g, b, a] stop.color.toSRGBAComponentsLossy();
&gt; 
&gt; =

erg. Will fix. 

But, this means we don&apos;t have any ews bots building Direct2D support. Do we have any non-EWS build bots building this?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399700</attachid>
            <date>2020-05-18 19:48:18 -0700</date>
            <delta_ts>2020-05-19 11:15:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200518194818.patch</filename>
            <type>text/plain</type>
            <size>28331</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA1LTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBDb2xvciBpbnRlcmZh
Y2UgYnkgcmVwbGFjaW5nIENvbG9yOjpnZXRSR0JBKCkgd2l0aCBhIHZhcmlhbnQgcmV0dXJuaW5n
IGEgRmxvYXRDb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZXBsYWNlcyBhd2t3YXJkIG91dCBwYXJhbWV0ZXIgYmFzZWQgQ29sb3I6Omdl
dFJHQkEgd2l0aCBDb2xvcjo6cmdiYSB3aGljaAorICAgICAgICByZXR1cm5zIGEgRmxvYXRDb21w
b25lbnRzLgorICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIHR1cGxlLWxpa2UgYWRhcHRvcnMg
Zm9yIEZsb2F0Q29tcG9uZW50cyB0byBhbGxvdyBpdCB0byBiZSB1c2VkCisgICAgICAgIHdpdGgg
c3RydWN0dXJlZCBiaW5kaW5ncy4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBteUZsb2F0Q29tcG9uZW50czsKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpy
Z2JhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xv
c3N5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpnZXRSR0JBIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICBSZXBs
YWNlIG91dCBwYXJhbWV0ZXIgYmFzZWQgZ2V0UkdCQSB3aXRoIHJnYmEgd2hpY2ggcmV0dXJucyBh
IEZsb2F0Q29tcG9uZW50cworICAgICAgICBhbmQgYWRvcHQgYXMgbmVlZGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENv
bXBvbmVudHM6OkZsb2F0Q29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
UkdCQ29sb3JUb0xpbmVhckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdXNl
cyBvZiB0aGUgQ29sb3IgY2xhc3MgdG8gc2ltcGxpZnkgaW5saW5pbmcgKENvbG9yLmggYWxyZWFk
eSBuZWVkcyB0byBrbm93IGFib3V0CisgICAgICAgIEZsb2F0Q29tcG9uZW50cykuIEZsb2F0Q29t
cG9uZW50cyBjb25zdHJ1Y3RvciByZXBsYWNlZCBieSBDb2xvcjo6cmdiYSgpLiBzUkdCQ29sb3JU
b0xpbmVhckNvbXBvbmVudHMKKyAgICAgICAgcmVwbGFjZWQgYnkgY2FsbGluZyByZ2JUb0xpbmVh
ckNvbXBvbmVudHMoY29sb3IucmdiYSgpKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBz
dGQ6OnR1cGxlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8gYWxsb3cgdXNpbmcgd2l0
aCBzdHVjdHVyZWQgYmluZGluZ3MuIAorCisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVz
YWdlT3ZlcmxheUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNNZW1vcnlDYXRl
Z29yeUluZm86Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0Q29tcG9uZW50czo6Z2V0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
cldpbjo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6
OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxlYWtDR0NvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNm
b3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52
ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEdka1JH
QkEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU3Ryb2tlQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c3BlbGxpbmdQYXR0ZXJuQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Z3JhbW1hclBhdHRlcm5Db2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDb2xvcklzTGVnaWJsZUFnYWlu
c3RCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBBZG9wdCBGbG9hdENvbXBvbmVudHMgYmFzZWQg
Q29sb3I6OnJnYmEoKS4KKwogMjAyMC0wNS0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBDb250ZW50IGRpc2FwcGVhcnMgb24gQ1NTIHBhcmFsbGF4
IGV4YW1wbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92
ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDggKzEzMyw3IEBAIHN0cnVjdCBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5m
byB7CiAgICAgICAgICwgaXNTdWJjYXRlZ29yeShzdWJjYXRlZ29yeSkKICAgICAgICAgLCB0eXBl
KGNhdGVnb3J5KQogICAgIHsKLSAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgQ29s
b3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9LmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9LnJnYmEo
KTsKICAgICAgICAgY29sb3IgPSBhZG9wdENGKGNyZWF0ZUNvbG9yKHIsIGcsIGIsIGEpKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDE0ICszNTAsMTQgQEAgQ29sb3IgQ29sb3I6
OmxpZ2h0KCkgY29uc3QKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAotICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgZ2V0UkdC
QShyLCBnLCBiLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYmEoKTsKIAogICAgIGZs
b2F0IHYgPSBzdGQ6Om1heChyLCBzdGQ6Om1heChnLCBiKSk7CiAKLSAgICBpZiAodiA9PSAwLjBm
KQorICAgIGlmICh2ID09IDAuMGYpIHsKICAgICAgICAgLy8gTGlnaHRlbmVkIGJsYWNrIHdpdGgg
YWxwaGEuCiAgICAgICAgIHJldHVybiBDb2xvcigweDU0LCAweDU0LCAweDU0LCBhbHBoYSgpKTsK
KyAgICB9CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiArIDAuMzNm
KSAvIHY7CiAKQEAgLTM3NSw4ICszNzUsNyBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAg
ICAgCiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4w
Zik7CiAKLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwgYSk7Cisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSByZ2JhKCk7CiAKICAgICBmbG9hdCB2ID0gc3RkOjptYXgo
ciwgc3RkOjptYXgoZywgYikpOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBm
LCAodiAtIDAuMzNmKSAvIHYpOwpAQCAtMzg5LDEzICszODgsOSBAQCBDb2xvciBDb2xvcjo6ZGFy
aygpIGNvbnN0CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcmVk
OwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci0g
ICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHJlZCwgc3RkOjptYXgoZ3JlZW4sIGJsdWUpKTsKLSAg
ICByZXR1cm4gYWxwaGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYmEoKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFD
aGFubmVsID0gc3RkOjptYXgociwgc3RkOjptYXgoZywgYikpOworICAgIHJldHVybiBhID4gMC41
ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7CiB9CiAKIHN0YXRpYyBpbnQgYmxlbmRD
b21wb25lbnQoaW50IGMsIGludCBhKQpAQCAtNDcxLDIwICs0NjYsOSBAQCBDb2xvciBDb2xvcjo6
Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBDb2xvcjo6Z2V0UkdCQShmbG9hdCYgciwgZmxvYXQmIGcsIGZsb2F0JiBiLCBmbG9hdCYgYSkg
Y29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUuMGY7Ci0gICAgZyA9IGdyZWVuKCkgLyAyNTUu
MGY7Ci0gICAgYiA9IGJsdWUoKSAvIDI1NS4wZjsKLSAgICBhID0gYWxwaGEoKSAvIDI1NS4wZjsK
LX0KLQotdm9pZCBDb2xvcjo6Z2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywgZG91YmxlJiBi
LCBkb3VibGUmIGEpIGNvbnN0CitGbG9hdENvbXBvbmVudHMgQ29sb3I6OnJnYmEoKSBjb25zdAog
ewotICAgIHIgPSByZWQoKSAvIDI1NS4wOwotICAgIGcgPSBncmVlbigpIC8gMjU1LjA7Ci0gICAg
YiA9IGJsdWUoKSAvIDI1NS4wOwotICAgIGEgPSBhbHBoYSgpIC8gMjU1LjA7CisgICAgcmV0dXJu
IHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFs
cGhhKCkgLyAyNTUuMGYgfTsKIH0KIAogLy8gRklYTUU6IFVzZSBzUkdCVG9IU0woKS4KQEAgLTU2
OCw5ICs1NTIsNyBAQCBGbG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzCiAg
ICAgICAgICAgICByZXR1cm4gcDNUb1NSR0IoZXh0ZW5kZWRDb2xvci5jaGFubmVscygpKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIHJldHVybiByZ2JhKCk7CiB9
CiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBwaXhlbENvbG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAy
NjE4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDksOCArMjA5LDcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSB0aGVzZSBzaG91bGQgYmUgcmVuYW1lZCAodG8gYmUgY2xlYXIgYWJvdXQg
dGhlaXIgcGFyYW1ldGVyIHR5cGVzLCBvcgogICAgIC8vIHJlcGxhY2VkIHdpdGggYWx0ZXJuYXRp
dmUgYWNjZXNzb3JzLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShmbG9hdCYgciwg
ZmxvYXQmIGcsIGZsb2F0JiBiLCBmbG9hdCYgYSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRvdWJsZSYgYSkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHJnYmEoKSBjb25zdDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNMKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBk
b3VibGUmIGwpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNWKGRvdWJsZSYg
aCwgZG91YmxlJiBzLCBkb3VibGUmIHYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYx
ODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogCi0jaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0
Q29tcG9uZW50czo6RmxvYXRDb21wb25lbnRzKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBj
b2xvci5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0s
IGNvbXBvbmVudHNbM10pOwotfQotCiBDb2xvckNvbXBvbmVudHM6OkNvbG9yQ29tcG9uZW50cyhj
b25zdCBGbG9hdENvbXBvbmVudHMmIGZsb2F0Q29tcG9uZW50cykKIHsKICAgICBjb21wb25lbnRz
WzBdID0gY2xhbXBlZENvbG9yQ29tcG9uZW50KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzBd
KTsKQEAgLTY5LDE4ICs2Myw2IEBAIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxv
YXQgYykKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpwb3coKGMgKyAwLjA1NWYpIC8g
MS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBzUkdCQ29sb3JUb0xp
bmVhckNvbXBvbmVudHMoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGZsb2F0IHIsIGcsIGIs
IGE7Ci0gICAgY29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICByZXR1cm4gewotICAgICAg
ICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KHIpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGcpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGIpLAotICAg
ICAgICBhCi0gICAgfTsKLX0KLQogRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29tcG9uZW50
cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIFJHQkNvbG9yKQogewogICAgIHJldHVybiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDb2xvcjsKLQogc3RydWN0IEZsb2F0Q29tcG9uZW50
cyB7CiAgICAgRmxvYXRDb21wb25lbnRzKGZsb2F0IGEgPSAwLCBmbG9hdCBiID0gMCwgZmxvYXQg
YyA9IDAsIGZsb2F0IGQgPSAwKQogICAgIHsKQEAgLTUwLDggKzQ4LDYgQEAgc3RydWN0IEZsb2F0
Q29tcG9uZW50cyB7CiAgICAgICAgIGNvbXBvbmVudHNbM10gPSB2YWx1ZXNbM107CiAgICAgfQog
Ci0gICAgRmxvYXRDb21wb25lbnRzKGNvbnN0IENvbG9yJik7Ci0KICAgICBGbG9hdENvbXBvbmVu
dHMmIG9wZXJhdG9yKz0oY29uc3QgRmxvYXRDb21wb25lbnRzJiByaHMpCiAgICAgewogICAgICAg
ICBjb21wb25lbnRzWzBdICs9IHJocy5jb21wb25lbnRzWzBdOwpAQCAtMTAxLDYgKzk3LDEyIEBA
IHN0cnVjdCBGbG9hdENvbXBvbmVudHMgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAorICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CisgICAgZmxvYXQgZ2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb21wb25lbnRzW05dOworICAgIH0KKwogICAgIHN0ZDo6YXJy
YXk8ZmxvYXQsIDQ+IGNvbXBvbmVudHM7CiB9OwogCkBAIC0xNzYsNyArMTc4LDYgQEAgaW5saW5l
IHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbgogZmxvYXQgbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudChmbG9hdCk7CiBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0
KTsKIAotRmxvYXRDb21wb25lbnRzIHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBD
b2xvciYpOwogRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBGbG9h
dENvbXBvbmVudHMmKTsKIEZsb2F0Q29tcG9uZW50cyBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29u
c3QgRmxvYXRDb21wb25lbnRzJik7CiAKQEAgLTIxMCwzICsyMTEsMTUgQEAgcHJpdmF0ZToKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8Pgor
c3RydWN0IHR1cGxlX3NpemU8V2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiA6IHN0ZDo6aW50ZWdy
YWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKK307CisKK3RlbXBsYXRlPHN0ZDo6c2l6ZV90
IE4+CitzdHJ1Y3QgdHVwbGVfZWxlbWVudDxOLCBXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+IHsK
KyAgICB1c2luZyB0eXBlID0gZmxvYXQ7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAkocmV2aXNpb24gMjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3Niw4ICs1NzYsOCBAQCBDb2xvciBQbGF0Zm9ybUNBTGF5ZXJXaW46OmJhY2tncm91bmRDb2xv
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29s
b3ImIHZhbHVlKQogewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKLSAgICB2YWx1ZS5nZXRS
R0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVu
dHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUucmdiYSgpOworICAgIENHRmxv
YXQgY29tcG9uZW50c1s0XSA9IHsgciwgZywgYiwgYSB9OwogCiAgICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCkpOwogICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xv
ckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxMiArMzEyLDE0IEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvcmQKIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENH
RmxvYXQgY29tcG9uZW50c1s0XSA9IHsgMCwgMCwgMCwgMCB9OwotICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZVJHQigpKTsKLQorICAgIEZsb2F0Q29tcG9uZW50cyByZ2JhQ29tcG9uZW50czsKICAgICBpZiAo
dmFsdWUuaXNWYWxpZCgpKQotICAgICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNv
bXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOworICAgICAgICByZ2Jh
Q29tcG9uZW50cyA9IHZhbHVlLnJnYmEoKTsKIAorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdi
YUNvbXBvbmVudHM7CisgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyByLCBnLCBiLCBhIH07
CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihD
R0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+
IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVu
dHMpKTsKIAogICAgIENBQ0ZMYXllclNldEJvcmRlckNvbG9yKG93bmVyKCktPnBsYXRmb3JtTGF5
ZXIoKSwgY29sb3IuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYx
ODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw4IEBAIHZvaWQgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjYWlyb190KiBjb24KICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQog
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgY29sb3IuYXNFeHRlbmRlZCgp
LnJlZCgpLCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSwgY29sb3IuYXNFeHRlbmRlZCgpLmJs
dWUoKSwgY29sb3IuYXNFeHRlbmRlZCgpLmFscGhhKCkpOwogICAgIGVsc2UgewotICAgICAgICBm
bG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250
ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmdiYSgpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwg
ciwgZywgYiwgYSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24g
MjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDcgQEAgc3RhdGljIHZvaWQg
YWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZQogICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9j
b2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yLmFzRXh0ZW5k
ZWQoKS5yZWQoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSwKICAgICAgICAgICAg
IHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCku
YWxwaGEoKSAqIGdsb2JhbEFscGhhKTsKICAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCByLCBn
LCBiLCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci5yZ2JhKCk7CiAgICAgICAgIGNhaXJvX3Bh
dHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcsIGIs
IGEgKiBnbG9iYWxBbHBoYSk7CiAgICAgfQogfQpAQCAtNjUsOCArNjQsNyBAQCBzdGF0aWMgdm9p
ZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0CiAgICAgICAgIGNhaXJvX21lc2hfcGF0dGVy
bl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCBzdG9wLmNvbG9yLmFzRXh0ZW5k
ZWQoKS5yZWQoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSwKICAgICAgICAgICAg
IHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCku
YWxwaGEoKSAqIGdsb2JhbEFscGhhKTsKICAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCByLCBn
LCBiLCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci5yZ2JhKCk7CiAgICAgICAgIGNhaXJvX21l
c2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBh
ICogZ2xvYmFsQWxwaGEpOwogICAgIH0KIH0KQEAgLTE0NywyNCArMTQ1LDIxIEBAIHN0YXRpYyB2
b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xv
clN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFk
aWVudDo6Q29sb3JTdG9wIHRvKQogewotICAgIGZsb2F0IHIxLCBnMSwgYjEsIGExOwotICAgIGZs
b2F0IHIyLCBnMiwgYjIsIGEyOworICAgIEZsb2F0Q29tcG9uZW50cyBmcm9tQ29tcG9uZW50czsK
KyAgICBGbG9hdENvbXBvbmVudHMgdG9Db21wb25lbnRzOwogCi0gICAgaWYgKGZyb20uY29sb3Iu
aXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHIxID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkucmVk
KCk7Ci0gICAgICAgIGcxID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAg
ICAgYjEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7Ci0gICAgICAgIGExID0gZnJv
bS5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZnJvbS5j
b2xvci5nZXRSR0JBKHIxLCBnMSwgYjEsIGExKTsKLQotICAgIGlmICh0by5jb2xvci5pc0V4dGVu
ZGVkKCkpIHsKLSAgICAgICAgcjIgPSB0by5jb2xvci5hc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAg
ICAgIGcyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCk7Ci0gICAgICAgIGIyID0gdG8u
Y29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKTsKLSAgICAgICAgYTIgPSB0by5jb2xvci5hc0V4dGVu
ZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdG8uY29sb3IuZ2V0UkdCQShyMiwg
ZzIsIGIyLCBhMik7CisgICAgaWYgKGZyb20uY29sb3IuaXNFeHRlbmRlZCgpKQorICAgICAgICBm
cm9tQ29tcG9uZW50cyA9IGZyb20uY29sb3IuYXNFeHRlbmRlZCgpLmNoYW5uZWxzKCk7CisgICAg
ZWxzZQorICAgICAgICBmcm9tQ29tcG9uZW50cyA9IGZyb20uY29sb3IucmdiYSgpOworCisgICAg
aWYgKHRvLmNvbG9yLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgdG9Db21wb25lbnRzID0gdG8uY29s
b3IuYXNFeHRlbmRlZCgpLmNoYW5uZWxzKCk7CisgICAgZWxzZQorICAgICAgICB0b0NvbXBvbmVu
dHMgPSB0by5jb2xvci5yZ2JhKCk7CisKKyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9t
Q29tcG9uZW50czsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0b0NvbXBvbmVudHM7CiAK
ICAgICBmbG9hdCBvZmZzZXQgPSBmcm9tLm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNl
dCkgKiAwLjVmOwogICAgIGZsb2F0IHIgPSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2
aXNpb24gMjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNCArMTAzLDExIEBAIENvbG9yOjpDb2xv
cihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1QKIAogc3RhdGljIENHQ29sb3JSZWYgbGVha0NH
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsK
ICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGV4dGVu
ZGVkQ29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7Ci0gICAgICAgIGF1dG8gY2hhbm5lbHMgPSBl
eHRlbmRlZENvbG9yLmNoYW5uZWxzKCk7Ci0gICAgICAgIGNvbXBvbmVudHNbMF0gPSBjaGFubmVs
cy5jb21wb25lbnRzWzBdOwotICAgICAgICBjb21wb25lbnRzWzFdID0gY2hhbm5lbHMuY29tcG9u
ZW50c1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IGNoYW5uZWxzLmNvbXBvbmVudHNbMl07
Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSBjaGFubmVscy5jb21wb25lbnRzWzNdOworICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKKyAgICAgICAg
Q0dGbG9hdCBjb21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OworCiAgICAgICAgIHN3aXRjaCAo
ZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkpIHsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpT
UkdCOgogICAgICAgICAgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYo
KSwgY29tcG9uZW50cyk7CkBAIC0xMjIsNyArMTE5LDkgQEAgc3RhdGljIENHQ29sb3JSZWYgbGVh
a0NHQ29sb3IoY29uc3QgQ29sbwogICAgICAgICB9CiAgICAgfQogCi0gICAgY29sb3IuZ2V0UkdC
QShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJnYmEoKTsKKyAgICBDR0Zsb2F0
IGNvbXBvbmVudHNbNF0geyByLCBnLCBiLCBhIH07CisKICAgICByZXR1cm4gQ0dDb2xvckNyZWF0
ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlz
aW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsNyBAQCBDR0dyYWRpZW50UmVm
IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgICAgIGlmIChzdG9wLmNvbG9yLmlzRXh0
ZW5kZWQoKSkKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1ZTsKIAotICAgICAg
ICBmbG9hdCByOwotICAgICAgICBmbG9hdCBnOwotICAgICAgICBmbG9hdCBiOwotICAgICAgICBm
bG9hdCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci5yZ2JhKCk7CiAgICAgICAgIGNvbG9yQ29t
cG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNo
ZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQo
Yik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50
OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwogICAgIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwogICAgIAotICAgIEZsb2F0Q29t
cG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xv
cikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGluZ0NvbG9yKTsKKyAgICBGbG9hdENvbXBvbmVu
dHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5nQ29sb3IucmdiYSgpKSA6
IG1fbGlnaHRpbmdDb2xvci5yZ2JhKCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGlu
Z0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBd
LCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAg
ICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRp
b25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRzOwotICAg
IGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBv
bmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRz
WzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50cyA9IGNvbG9yLnJnYmEoKTsKIAog
ICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICgh
b3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKQEAgLTEzMSw4ICsxMzAsNyBA
QCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9y
LmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRDb21wb25l
bnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdCQShjb21wb25lbnRzLmNvbXBvbmVudHNb
MF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzJdLCBj
b21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRz
ID0gY29sb3IucmdiYSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlv
bnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21w
b25lbnRzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xv
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTgg
KzM2LDggQEAgQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRv
ciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1
dG8gYXNSR0JBID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4geyBh
c1JHQkEuY29tcG9uZW50c1swXSwgYXNSR0JBLmNvbXBvbmVudHNbMV0sIGFzUkdCQS5jb21wb25l
bnRzWzJdLCBhc1JHQkEuY29tcG9uZW50c1szXSB9OwotICAgIH0KLQotI2lmIFVTRShHVEs0KQot
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotI2Vsc2UKLSAgICBkb3VibGUgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0jZW5kaWYKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICByZXR1cm4geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVy
biB7IHIsIGcsIGIsIGEgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJl
dmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xv
cihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xv
cihjb2xvcikpLnJnYmEoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9u
KCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc5LDggKzI3
OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKGludCBudW0KICAgICBpZiAo
Y29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIGNv
bG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVlbigpLCBjb2xv
ci5hc0V4dGVuZGVkKCkucmVkKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpKTsKICAgICBl
bHNlIHsKLSAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgY29sb3IuZ2V0UkdCQShy
LCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci5yZ2JhKCk7CiAg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAgICAgfQogCkBA
IC00MjAsOCArNDE4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVy
ZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNl
Y29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1
cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAg
ICAgICAgIENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSku
Z2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29s
b3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5yZ2JhKCk7CiAg
ICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwg
YSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigp
LCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAg
ICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDAp
OwpAQCAtNjgzLDggKzY4MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xv
cihjb24KICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRh
KCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0
aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikp
LnJnYmEoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcs
IGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxh
Z3MgfD0gU2hvdWxkQmxlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjE4
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJl
Y3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDExICs3Miw3IEBAIHZvaWQgR3JhZGllbnQ6
OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9TVE9Q
PiBncmFkaWVudFN0b3BzOwogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5kZWRD
b2xvci4KICAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgZmxvYXQgcjsK
LSAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgZmxvYXQgYTsKLSAg
ICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSBzdG9wLmNvbG9yLnJnYmEoKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQo
RDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkp
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gMjYx
ODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDE3ICsxNzMsMTggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogLy8gUHVsbGVkIGZyb20gR3JhcGhp
Y3NDb250ZXh0Q0cKIHN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhOwotICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwor
ICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnJnYmEoKTsKICAgICBD
R0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CiB9CiAKLXN0YXRpYyBjb25zdCBDb2xvciYgc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKSB7Citz
dGF0aWMgY29uc3QgQ29sb3ImIHNwZWxsaW5nUGF0dGVybkNvbG9yKCkKK3sKICAgICBzdGF0aWMg
Y29uc3QgQ29sb3Igc3BlbGxpbmdDb2xvcigyNTUsIDAsIDApOwogICAgIHJldHVybiBzcGVsbGlu
Z0NvbG9yOwogfQogCi1zdGF0aWMgY29uc3QgQ29sb3ImIGdyYW1tYXJQYXR0ZXJuQ29sb3IoKSB7
CitzdGF0aWMgY29uc3QgQ29sb3ImIGdyYW1tYXJQYXR0ZXJuQ29sb3IoKQorewogICAgIHN0YXRp
YyBjb25zdCBDb2xvciBncmFtbWFyQ29sb3IoMCwgMTI4LCAwKTsKICAgICByZXR1cm4gZ3JhbW1h
ckNvbG9yOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4
dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FH
IDIuMCBkZWZpbml0aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEg
b3IgZ3JlYXRlci4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwt
YXVkaW8tY29udHJhc3QtY29udHJhc3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29s
b3IsIGJhY2tncm91bmRDb2xvcikgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4
dENvbG9yLnJnYmEoKSwgYmFja2dyb3VuZENvbG9yLnJnYmEoKSkgPiA0LjU7CiB9CiAKIHN0YXRp
YyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxpdHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3Im
IHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNjE4NDUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBTaW1wbGlmeSBDb2xvciBpbnRlcmZhY2UgYnkgcmVwbGFjaW5nIENv
bG9yOjpnZXRSR0JBKCkgd2l0aCBhIHZhcmlhbnQgcmV0dXJuaW5nIGEgRmxvYXRDb21wb25lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9yRmlsbEZy
b21XZWJDb3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250
cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpi
ZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgQWRvcHQgRmxvYXRDb21wb25lbnRzIGJhc2VkIENvbG9yOjpyZ2JhKCku
CisKIDIwMjAtMDUtMTggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IGh0dHAvdGVzdHMvc3NsL2FwcGxlcGF5L0FwcGxlUGF5SW5zdGFsbG1lbnRDb25maWd1cmF0aW9u
Lmh0dHBzLmh0bWwgZmFpbHMgaW4gcHVibGljIFNESyBidWlsZHMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNjE4
MzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21X
ZWJDb3JlQ29sb3IoY29uCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNvbG9yLmlzVmFs
aWQoKSk7CiAKLSAgICBkb3VibGUgciwgZywgYiwgYTsKLSAgICB3ZWJDb3JlQ29sb3IuZ2V0UkdC
QShyLCBnLCBiLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci5yZ2Jh
KCkuY29tcG9uZW50czsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBn
OwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAy
NjE4MzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9s
bGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDggKzMzNyw3IEBAIHZvaWQgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBj
b2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsK
LSAgICAgICAgICAgICAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAg
ICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IucmdiYSgpOwog
ICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYo
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw3
ICs2NjAsMTEgQEAgYm9vbCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAg
IGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJn
Q29sb3IuZ2V0UkdCQSgqcmVkLCAqZ3JlZW4sICpibHVlLCAqYWxwaGEpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gYmdDb2xvci5yZ2JhKCk7CisgICAgKnJlZCA9IHI7CisgICAgKmdyZWVuID0g
ZzsKKyAgICAqYmx1ZSA9IGI7CisgICAgKmFscGhhID0gYTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399752</attachid>
            <date>2020-05-19 11:15:25 -0700</date>
            <delta_ts>2020-05-19 12:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519111523.patch</filename>
            <type>text/plain</type>
            <size>34747</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVzIHRoZSBhd2t3YXJkIGFuZCBhbG1vc3QgYWx3YXlzIGlu
Y29ycmVjdCBvdXQgcGFyYW1ldGVyIGJhc2VkIENvbG9yOjpnZXRSR0JBLiBNb3N0IGV4aXN0aW5n
IGNhbGxzaXRlcworICAgICAgICB3ZXJlIHVwZGF0ZWQgdG8gdXNlIENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkgb3Igb3RoZXIgbW9yZSBFeHRlbmRlZENvbG9yIHN1cHBvcnRpbmcgZnVu
Y3Rpb25zIChsaWtlIAorICAgICAgICBjYWNoZWRDR0NvbG9yKCkpLiAKKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkcyB0dXBsZS1saWtlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8g
YWxsb3cgaXQgdG8gYmUgdXNlZAorICAgICAgICB3aXRoIHN0cnVjdHVyZWQgYmluZGluZ3MuIEZv
ciBleGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbXlG
bG9hdENvbXBvbmVudHM7CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0KToKKyAgICAgICAgQWRv
cHQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIG1ha2UgdGhlc2Ugbm90IHJldHVybiB0b3Rh
bGx5IGluY29ycmVjdCB2YWx1ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNw
YWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIEFkZGVkLiBSZXR1cm5zIGEgc3RkOjpw
YWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQK
KyAgICAgICAgdG8gb3BlcmF0ZSBvbiB0aGUgY29tcG9uZW50cyBpbiBhIENvbG9yU3BhY2UgYXdh
cmUgd2F5LiBVc2VkIGJ5IHRvU1JHQkFDb21wb25lbnRzTG9zc3kKKyAgICAgICAgYW5kIGxlYWtD
R0NvbG9yKCkgZm9yIG5vdywgYnV0IHdpbGwgYmUgdXNlZnVsIGdvaW5nIGZvcndhcmQgYXMgd2Vs
bC4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29u
c3QpOgorICAgICAgICBSZS1pbXBsZW1lbnQgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KSB0byBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmdldFJHQkEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBv
bmVudHM6OkZsb2F0Q29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdC
Q29sb3JUb0xpbmVhckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBvbmVu
dHM6OmdldCBjb25zdCk6CisgICAgICAgIFJlbW92ZSB1c2VzIG9mIHRoZSBDb2xvciBjbGFzcyB0
byBzaW1wbGlmeSBpbmxpbmluZyAoQ29sb3IuaCBhbHJlYWR5IG5lZWRzIHRvIGtub3cgYWJvdXQK
KyAgICAgICAgRmxvYXRDb21wb25lbnRzKS4gCisgICAgICAgICAgICAtIEZsb2F0Q29tcG9uZW50
cyBjb25zdHJ1Y3RvciByZXBsYWNlZCBieSBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
LiAKKyAgICAgICAgICAgIC0gc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzIHJlcGxhY2VkIGJ5
IGNhbGxpbmcgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSkuCisgICAgICAgIAorICAgICAgICBBbHNvIGFkZHMgc3RkOjp0dXBsZSBhZGFwdG9ycyBm
b3IgRmxvYXRDb21wb25lbnRzIHRvIGFsbG93IHVzaW5nIHdpdGggc3R1Y3R1cmVkIGJpbmRpbmdz
LiAKKworICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvOjpIaXN0b3JpY01l
bW9yeUNhdGVnb3J5SW5mbyk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENH
Q29sb3IuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBjYWNoZWRDR0NvbG9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRC
b3JkZXJDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENHQ29sb3Iu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgUmVw
bGFjZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkQ29sb3JTdG9wUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb3JuZXJDb2xvclJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvclN0b3ApOgorICAgICAgICBS
ZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWFr
Q0dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKToKKyAgICAgICAgU2lt
cGxpZnkgaW1wbGVtZW50YXRpb24gKGFuZCByZW1vdmUgdXNlIG9mIGdldFJHQkEpIGJ5IHVzaW5n
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggY29sb3JTcGFjZUFuZENv
bXBvbmVudCgpLiAKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyk6CisgICAgICAgIFJlcGxhY2UgRmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHRha2lu
ZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eS4KKyAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3Jt
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9T
UkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBj
b25zdCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9z
c3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IHRvU1JHQkFDb21wb25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Z2Vu
ZXJhdGVHcmFkaWVudCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21w
b25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU3Ryb2tlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3BlbGxpbmdQYXR0ZXJuQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z3JhbW1hclBhdHRlcm5Db2xvcik6IERlbGV0ZWQu
CisgICAgICAgIFJlcGxhY2UgdXNlIG9mIGdldFJHQkEgd2l0aCBkaXJlY3QgdXNlIG9mIFNpbXBs
ZUNvbG9yIGluc3RlYWQuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgUmVwbGFjZSBpbXBsaWNpdCBGbG9hdENvbXBvbmVudHMg
Y29uc3RydWN0aW9uIHRha2luZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggZXhw
bGljaXQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKwogMjAyMC0wNS0xOSAgU2VyZ2lvIFZpbGxh
ciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2ViWFJdIEltcGxlbWVu
dCByZXF1ZXN0U2Vzc2lvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291
cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCShyZXZpc2lvbiAyNjE4MzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMyw5ICsxMzMsNyBAQCBzdHJ1Y3QgSGlzdG9yaWNNZW1vcnlD
YXRlZ29yeUluZm8gewogICAgICAgICAsIGlzU3ViY2F0ZWdvcnkoc3ViY2F0ZWdvcnkpCiAgICAg
ICAgICwgdHlwZShjYXRlZ29yeSkKICAgICB7Ci0gICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0g
ICAgICAgIENvbG9yIHsgU2ltcGxlQ29sb3IgeyBhcmdiIH0gfS5nZXRSR0JBKHIsIGcsIGIsIGEp
OwotICAgICAgICBjb2xvciA9IGFkb3B0Q0YoY3JlYXRlQ29sb3IociwgZywgYiwgYSkpOworICAg
ICAgICBjb2xvciA9IGNhY2hlZENHQ29sb3IoU2ltcGxlQ29sb3IgeyBhcmdiIH0pOwogICAgIH0K
IAogICAgIFN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTQgKzM1MCwxNCBA
QCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxl
RmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwogCi0gICAgZmxvYXQgciwgZywgYiwg
YTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHIsIHN0ZDo6
bWF4KGcsIGIpKTsKIAotICAgIGlmICh2ID09IDAuMGYpCisgICAgaWYgKHYgPT0gMC4wZikgewog
ICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBoYS4KICAgICAgICAgcmV0dXJuIENv
bG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOworICAgIH0KIAogICAgIGZsb2F0IG11bHRp
cGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIApAQCAtMzc1LDggKzM3NSw3
IEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2Fs
ZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAotICAgIGZsb2F0IHIsIGcsIGIs
IGE7Ci0gICAgZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heChyLCBzdGQ6
Om1heChnLCBiKSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0g
MC4zM2YpIC8gdik7CkBAIC0zODksMTMgKzM4OCw5IEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29u
c3QKIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIHsKLSAgICBmbG9hdCByZWQ7Ci0gICAg
ZmxvYXQgZ3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKLSAgICBnZXRS
R0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFD
aGFubmVsID0gc3RkOjptYXgocmVkLCBzdGQ6Om1heChncmVlbiwgYmx1ZSkpOwotICAgIHJldHVy
biBhbHBoYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGZsb2F0IGxhcmdl
c3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heChyLCBzdGQ6Om1heChnLCBiKSk7CisgICAgcmV0
dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KIAogc3RhdGlj
IGludCBibGVuZENvbXBvbmVudChpbnQgYywgaW50IGEpCkBAIC00NzEsMjIgKzQ2Niw2IEBAIENv
bG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIENvbG9yOjpnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIs
IGZsb2F0JiBhKSBjb25zdAotewotICAgIHIgPSByZWQoKSAvIDI1NS4wZjsKLSAgICBnID0gZ3Jl
ZW4oKSAvIDI1NS4wZjsKLSAgICBiID0gYmx1ZSgpIC8gMjU1LjBmOwotICAgIGEgPSBhbHBoYSgp
IC8gMjU1LjBmOwotfQotCi12b2lkIENvbG9yOjpnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBn
LCBkb3VibGUmIGIsIGRvdWJsZSYgYSkgY29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUuMDsK
LSAgICBnID0gZ3JlZW4oKSAvIDI1NS4wOwotICAgIGIgPSBibHVlKCkgLyAyNTUuMDsKLSAgICBh
ID0gYWxwaGEoKSAvIDI1NS4wOwotfQotCiAvLyBGSVhNRTogVXNlIHNSR0JUb0hTTCgpLgogdm9p
ZCBDb2xvcjo6Z2V0SFNMKGRvdWJsZSYgaHVlLCBkb3VibGUmIHNhdHVyYXRpb24sIGRvdWJsZSYg
bGlnaHRuZXNzKSBjb25zdAogewpAQCAtNTU1LDIyICs1MzQsMjcgQEAgdm9pZCBDb2xvcjo6Z2V0
SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogICAgIHZhbHVlID0gbWF4OwogfQogCi1GbG9hdENv
bXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorc3RkOjpwYWly
PENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8mIGV4
dGVuZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xv
ci5jb2xvclNwYWNlKCkpIHsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAg
ICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25l
bnRzKGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGV4dGVuZGVkQ29sb3IuY2hh
bm5lbHMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xv
clNwYWNlKCksIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIHJldHVy
biB7IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8gMjU1LjBmLCBn
cmVlbigpIC8gMjU1LjBmLCBibHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1LjBmIH0gfTsK
K30KKworRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29u
c3QKK3sKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7CisgICAgc3dpdGNoIChleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewor
ICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Cisg
ICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBsaW5lYXJUb1JH
QkNvbXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6
CisgICAgICAgIHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsKICAgICB9Ci0gICAgZmxvYXQg
ciwgZywgYiwgYTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgIHJldHVybiB7IHIsIGcs
IGIsIGEgfTsKIH0KIAogQ29sb3IgY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoUkdCQTMyIHBp
eGVsQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJ
KHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDEyIEBAIHB1YmxpYzoKIAogICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gdGhlc2Ugc2hvdWxkIGJlIHJlbmFtZWQgKHRvIGJl
IGNsZWFyIGFib3V0IHRoZWlyIHBhcmFtZXRlciB0eXBlcywgb3IKICAgICAvLyByZXBsYWNlZCB3
aXRoIGFsdGVybmF0aXZlIGFjY2Vzc29ycy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJH
QkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0OwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywgZG91YmxlJiBi
LCBkb3VibGUmIGEpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRIU0woZG91
YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgbCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBnZXRIU1YoZG91YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgdikgY29uc3Q7CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBj
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZl
cnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgogICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTYgKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GbG9hdENvbXBvbmVudHM6OkZsb2F0Q29tcG9uZW50cyhjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgY29sb3IuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRz
WzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKLX0KLQogQ29sb3JDb21wb25lbnRz
OjpDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBmbG9hdENvbXBvbmVudHMp
CiB7CiAgICAgY29tcG9uZW50c1swXSA9IGNsYW1wZWRDb2xvckNvbXBvbmVudChmbG9hdENvbXBv
bmVudHMuY29tcG9uZW50c1swXSk7CkBAIC02OSwxOCArNjMsNiBAQCBmbG9hdCByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6
cG93KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCi1GbG9hdENvbXBv
bmVudHMgc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7Ci0g
ICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChyKSwKLSAgICAg
ICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChnKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChiKSwKLSAgICAgICAgYQotICAgIH07Ci19Ci0KIEZsb2F0Q29tcG9uZW50cyBy
Z2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBSR0JDb2xvcikKIHsK
ICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4
ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7Ci0KIHN0cnVj
dCBGbG9hdENvbXBvbmVudHMgewogICAgIEZsb2F0Q29tcG9uZW50cyhmbG9hdCBhID0gMCwgZmxv
YXQgYiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKICAgICB7CkBAIC01MCw4ICs0OCw2
IEBAIHN0cnVjdCBGbG9hdENvbXBvbmVudHMgewogICAgICAgICBjb21wb25lbnRzWzNdID0gdmFs
dWVzWzNdOwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyhjb25zdCBDb2xvciYpOwotCiAg
ICAgRmxvYXRDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgcmhz
KQogICAgIHsKICAgICAgICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsKQEAg
LTEwMSw2ICs5NywxMiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGZsb2F0
IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29tcG9uZW50c1tOXTsKKyAgICB9
CisKICAgICBzdGQ6OmFycmF5PGZsb2F0LCA0PiBjb21wb25lbnRzOwogfTsKIApAQCAtMTc2LDcg
KzE3OCw2IEBAIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ24KIGZsb2F0
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwogZmxvYXQgcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChmbG9hdCk7CiAKLUZsb2F0Q29tcG9uZW50cyBzUkdCQ29sb3JUb0xpbmVhckNv
bXBvbmVudHMoY29uc3QgQ29sb3ImKTsKIEZsb2F0Q29tcG9uZW50cyByZ2JUb0xpbmVhckNvbXBv
bmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CiBGbG9hdENvbXBvbmVudHMgbGluZWFyVG9S
R0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogCkBAIC0yMTAsMyArMjExLDE1
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIHN0ZCB7
CisKK3RlbXBsYXRlPD4KK2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6RmxvYXRDb21wb25lbnRz
PiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKK307CisKK3RlbXBs
YXRlPHN0ZDo6c2l6ZV90IE4+CitjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OkZsb2F0
Q29tcG9uZW50cz4geworICAgIHVzaW5nIHR5cGUgPSBmbG9hdDsKK307CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTc2LDEzICs1NzYsNyBAQCBDb2xvciBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmJhY2tncm91bmRDb2xvCiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsK
LSAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVu
dHNbMl0sIGNvbXBvbmVudHNbM10pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
IFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xv
clNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNGTGF5ZXJTZXRCYWNrZ3JvdW5k
Q29sb3IobV9sYXllci5nZXQoKSwgY29sb3IuZ2V0KCkpOworICAgIENBQ0ZMYXllclNldEJhY2tn
cm91bmRDb2xvcihtX2xheWVyLmdldCgpLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTIsMTUgKzMxMiw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OnNldEJvcmQKIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVy
Q29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XSA9
IHsgMCwgMCwgMCwgMCB9OwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3Bh
Y2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLQotICAgIGlmICh2
YWx1ZS5pc1ZhbGlkKCkpCi0gICAgICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29t
cG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5n
ZXQoKSwgY29tcG9uZW50cykpOwotCi0gICAgQ0FDRkxheWVyU2V0Qm9yZGVyQ29sb3Iob3duZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBjb2xvci5nZXQoKSk7CisgICAgQ0FDRkxheWVyU2V0Qm9yZGVy
Q29sb3Iob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBjYWNoZWRDR0NvbG9yKHZhbHVlKSk7CiB9
CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYxODM3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MywxMyArODMsOCBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVy
dGllcyhjYWlyb190KiBzcmNDCiAKIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190
KiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIGNvbG9yLmFzRXh0
ZW5kZWQoKS5yZWQoKSwgY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksIGNvbG9yLmFzRXh0ZW5k
ZWQoKS5ibHVlKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAgIGNvbG9yLmdldFJH
QkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3Jn
YmEoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIH0KKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwgYSk7CiB9CiAKIHZvaWQgYXBwZW5kUGF0
aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNCAr
NDMsOCBAQCB2b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQogCiBzdGF0aWMgdm9pZCBh
ZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIEdyYWRpZW50OjpDb2xv
clN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgaWYgKHN0b3AuY29sb3IuaXNF
eHRlbmRlZCgpKSB7Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShn
cmFkaWVudCwgc3RvcC5vZmZzZXQsIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBzdG9w
LmNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVlbigpLAotICAgICAgICAgICAgc3RvcC5jb2xvci5hc0V4
dGVuZGVkKCkuYmx1ZSgpLCBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpICogZ2xvYmFs
QWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgICAg
IHN0b3AuY29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9h
ZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwgZywgYiwgYSAqIGds
b2JhbEFscGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9w
X3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwog
fQogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCkBAIC02MSwxNCArNTUsOCBA
QCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JS
R0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3Rv
cCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBpZiAoc3RvcC5jb2xvci5pc0V4dGVu
ZGVkKCkpIHsKLSAgICAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3Jfcmdi
YShncmFkaWVudCwgaWQsIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBzdG9wLmNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpLAotICAgICAgICAgICAgc3RvcC5jb2xvci5hc0V4dGVuZGVk
KCkuYmx1ZSgpLCBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpICogZ2xvYmFsQWxwaGEp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgICAgIHN0b3Au
Y29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3Nl
dF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBo
YSk7Ci0gICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3Jf
cmdiYShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKIHN0YXRp
YyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIGZsb2F0IGN4
LCBmbG9hdCBjeSwgZmxvYXQgciwgZmxvYXQgYW5nbGVSYWRpYW5zLApAQCAtMTQ3LDI0ICsxMzUs
OCBAQCBzdGF0aWMgdm9pZCBhZGRDb25pY1NlY3RvcihjYWlyb19wYXR0ZXJuCiAKIHN0YXRpYyBH
cmFkaWVudDo6Q29sb3JTdG9wIGludGVycG9sYXRlQ29sb3JTdG9wKEdyYWRpZW50OjpDb2xvclN0
b3AgZnJvbSwgR3JhZGllbnQ6OkNvbG9yU3RvcCB0bykKIHsKLSAgICBmbG9hdCByMSwgZzEsIGIx
LCBhMTsKLSAgICBmbG9hdCByMiwgZzIsIGIyLCBhMjsKLQotICAgIGlmIChmcm9tLmNvbG9yLmlz
RXh0ZW5kZWQoKSkgewotICAgICAgICByMSA9IGZyb20uY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgp
OwotICAgICAgICBnMSA9IGZyb20uY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCk7Ci0gICAgICAg
IGIxID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBhMSA9IGZyb20u
Y29sb3IuYXNFeHRlbmRlZCgpLmFscGhhKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZyb20uY29s
b3IuZ2V0UkdCQShyMSwgZzEsIGIxLCBhMSk7Ci0KLSAgICBpZiAodG8uY29sb3IuaXNFeHRlbmRl
ZCgpKSB7Ci0gICAgICAgIHIyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpOwotICAgICAg
ICBnMiA9IHRvLmNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVlbigpOwotICAgICAgICBiMiA9IHRvLmNv
bG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7Ci0gICAgICAgIGEyID0gdG8uY29sb3IuYXNFeHRlbmRl
ZCgpLmFscGhhKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRvLmNvbG9yLmdldFJHQkEocjIsIGcy
LCBiMiwgYTIpOworICAgIGF1dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZsb2F0IG9mZnNldCA9IGZyb20ub2Zm
c2V0ICsgKHRvLm9mZnNldCAtIGZyb20ub2Zmc2V0KSAqIDAuNWY7CiAgICAgZmxvYXQgciA9IHIx
ICsgKHIyIC0gcjEpICogMC41ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDI3ICsxMDMsMTkgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGlj
VAogCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkp
IHsKLSAgICAgICAgY29uc3QgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGNvbG9yLmFzRXh0ZW5kZWQo
KTsKLSAgICAgICAgYXV0byBjaGFubmVscyA9IGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAg
ICAgICAgY29tcG9uZW50c1swXSA9IGNoYW5uZWxzLmNvbXBvbmVudHNbMF07Ci0gICAgICAgIGNv
bXBvbmVudHNbMV0gPSBjaGFubmVscy5jb21wb25lbnRzWzFdOwotICAgICAgICBjb21wb25lbnRz
WzJdID0gY2hhbm5lbHMuY29tcG9uZW50c1syXTsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IGNo
YW5uZWxzLmNvbXBvbmVudHNbM107Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xvci5jb2xv
clNwYWNlKCkpIHsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7Ci0g
ICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIENH
Q29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKLSAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8g
d2UgZXZlciBjcmVhdGUgQ0dDb2xvclJlZnMgaW4gdGhlc2Ugc3BhY2VzPyBJdCBtYXkgb25seSBi
ZSBJbWFnZUJ1ZmZlcnMuCi0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29s
b3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKLSAgICAgICAgfQorICAgIGF1dG8gW2NvbG9yU3Bh
Y2UsIGNvbXBvbmVudHNdID0gY29sb3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRd
IHsgciwgZywgYiwgYSB9OworCisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBD
b2xvclNwYWNlOjpTUkdCOgorICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JT
cGFjZVJlZigpLCBjb21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
KyAgICAgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpLCBj
b21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgLy8g
RklYTUU6IERvIHdlIGV2ZXIgY3JlYXRlIENHQ29sb3JSZWZzIGluIHRoZXNlIHNwYWNlcz8gSXQg
bWF5IG9ubHkgYmUgSW1hZ2VCdWZmZXJzLgorICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShz
UkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKICAgICB9Ci0KLSAgICBjb2xvci5nZXRS
R0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVu
dHNbM10pOwotICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNv
bXBvbmVudHMpOwogfQogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQpAQCAtMTM5LDcgKzEzMSw3IEBAIENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBD
b2xvciYgY28KICAgICAgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTogewotICAgICAgICAgICAgc3RhdGljIENH
Q29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOworICAgICAgICAgICAg
c3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpCiAgICAg
ICAgICAgICByZXR1cm4gd2hpdGVDR0NvbG9yOwogICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cu
Y3BwCShyZXZpc2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDggQEAgQ0dH
cmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudAogICAgICAgICBpZiAoc3RvcC5j
b2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgICAgICBoYXNFeHRlbmRlZENvbG9ycyA9IHRydWU7
CiAKLSAgICAgICAgZmxvYXQgcjsKLSAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgZmxvYXQgYjsK
LSAgICAgICAgZmxvYXQgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEp
OworICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29s
b3JTcGFjZUFuZENvbXBvbmVudCgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBv
bmVudHM7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAg
ICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgIGNvbG9yQ29t
cG9uZW50cy51bmNoZWNrZWRBcHBlbmQoYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9u
IDI2MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIEZFTGln
aHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lID0gd2lkdGggLSAxOwogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQg
LSAxOwogICAgIAotICAgIEZsb2F0Q29tcG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5lYXJD
b21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGluZ0Nv
bG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNw
YWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyht
X2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdo
dGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRz
WzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7
CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRh
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjE4MzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgYm9vbCBGaWx0ZXJPcGVy
YXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRzOwot
ICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNv
bXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25l
bnRzWzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRp
b25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihjb21wb25lbnRz
KSkKQEAgLTEzMSw4ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFu
c2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdCQShj
b21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29tcG9u
ZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZsb2F0
Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
cmV2aXNpb24gMjYxODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDggQEAgQ29sb3I6OkNv
bG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QK
IHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JBID0gdG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4geyBhc1JHQkEuY29tcG9uZW50c1sw
XSwgYXNSR0JBLmNvbXBvbmVudHNbMV0sIGFzUkdCQS5jb21wb25lbnRzWzJdLCBhc1JHQkEuY29t
cG9uZW50c1szXSB9OwotICAgIH0KLQotI2lmIFVTRShHVEs0KQotICAgIGZsb2F0IHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhOwotI2Vsc2UKLSAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGE7Ci0jZW5kaWYKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBy
ZXR1cm4geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlE
KCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0aXBsaWVkQVJH
QkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgLy8gRklYTUU6IERv
IHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc2
LDEzICsyNzYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAg
ICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3
ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhl
IHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29s
b3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKSwgY29sb3Iu
YXNFeHRlbmRlZCgpLmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByLCBnLCBi
LCBhOwotICAgICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19maWxsKGNyKTsKQEAgLTQyMCw4ICs0MTUsOCBA
QCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5l
ZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRp
bmcuCi0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgICAgICAgICAgQ29sb3IocHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5nZXRSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENv
bXBvbmVudHMgZGlyZWN0bHkuCisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9y
KHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0
aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVy
UmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5o
ZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRM
b2NhdGlvbigpLCAwLCAwKTsKQEAgLTY4Myw4ICs2NzgsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0g
ICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS5nZXRSR0JBKHIsIGcs
IGIsIGEpOworICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21wb25l
bnRzIGRpcmVjdGx5LgorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgZ2xV
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAo
YSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5k
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYxODM3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MiwxMSArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50
KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsK
ICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9yIChh
dXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGZsb2F0IHI7Ci0gICAgICAgIGZsb2F0IGc7
Ci0gICAgICAgIGZsb2F0IGI7Ci0gICAgICAgIGZsb2F0IGE7Ci0gICAgICAgIHN0b3AuY29sb3Iu
Z2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5k
KEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEp
KSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI2
MTgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwyNCArMTcwLDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7CiB9CiAKLS8vIFB1bGxlZCBmcm9tIEdyYXBoaWNzQ29udGV4dENHCi1z
dGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAg
ICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBDR0NvbnRleHRT
ZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBDb2xvciYgc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKSB7Ci0gICAgc3RhdGlj
IGNvbnN0IENvbG9yIHNwZWxsaW5nQ29sb3IoMjU1LCAwLCAwKTsKLSAgICByZXR1cm4gc3BlbGxp
bmdDb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9yKCkg
ewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBncmFtbWFyQ29sb3IoMCwgMTI4LCAwKTsKLSAgICBy
ZXR1cm4gZ3JhbW1hckNvbG9yOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0yMTYsOCAr
MTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW4KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5
bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1t
YXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Ci0gICAgc2V0Q0dTdHJv
a2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBtYWtlUkdCKDI1NSwgMCwgMCkgfTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0ZXJuQ29sb3IgeyBtYWtl
UkdCKDAsIDEyOCwgMCkgfTsKKworICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29sb3Ig
PSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8g
Z3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOworICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQoKSwg
cGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9uZW50
KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgIENHQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogICAgIENHUG9pbnQg
cGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHVzZXJUb0Jhc2UpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZp
c2lvbiAyNjE4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdp
YmxlQWdhaW5zdEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0
aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4K
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJh
c3QtY29udHJhc3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IsIGJhY2tncm91
bmRDb2xvcikgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxpdHlP
bkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjE4NDUpCisrKyBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTE4ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFs
d2F5cyBpbmNvcnJlY3QgQ29sb3I6OmdldFJHQkEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3Bw
OgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICog
VUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIENvbG9y
OjpnZXRSR0JBIHdpdGggQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKQorCiAyMDIwLTA1
LTE4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3Rz
L3NzbC9hcHBsZXBheS9BcHBsZVBheUluc3RhbGxtZW50Q29uZmlndXJhdGlvbi5odHRwcy5odG1s
IGZhaWxzIGluIHB1YmxpYyBTREsgYnVpbGRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYxODM3KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDggKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNvbG9y
KGNvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlkKCkpOwogCi0g
ICAgZG91YmxlIHIsIGcsIGIsIGE7Ci0gICAgd2ViQ29yZUNvbG9yLmdldFJHQkEociwgZywgYiwg
YSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpOwogICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAg
ICAgY29sb3ItPmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2MTgz
NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJH
dGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsOCArMzM3LDcgQEAgdm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZQogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7
CiAgICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9y
OwogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAg
ICAgICAgICAgICAgIGRvdWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRl
cm4gPSBhZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI2MTgzNykKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYwLDcgKzY2MCwxMSBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tn
cm91bmRDb2xvCiAgICAgaWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYmdDb2xvci5nZXRSR0JBKCpyZWQsICpncmVlbiwgKmJsdWUsICphbHBoYSk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKKyAgICAqcmVkID0gcjsKKyAgICAqZ3JlZW4gPSBnOworICAgICpibHVlID0gYjsKKyAgICAq
YWxwaGEgPSBhOwogICAgIHJldHVybiB0cnVlOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399759</attachid>
            <date>2020-05-19 12:26:41 -0700</date>
            <delta_ts>2020-05-19 14:52:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519122640.patch</filename>
            <type>text/plain</type>
            <size>34550</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVzIHRoZSBhd2t3YXJkIGFuZCBhbG1vc3QgYWx3YXlzIGlu
Y29ycmVjdCBvdXQgcGFyYW1ldGVyIGJhc2VkIENvbG9yOjpnZXRSR0JBLiBNb3N0IGV4aXN0aW5n
IGNhbGxzaXRlcworICAgICAgICB3ZXJlIHVwZGF0ZWQgdG8gdXNlIENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkgb3Igb3RoZXIgbW9yZSBFeHRlbmRlZENvbG9yIHN1cHBvcnRpbmcgZnVu
Y3Rpb25zIChsaWtlIAorICAgICAgICBjYWNoZWRDR0NvbG9yKCkpLiAKKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkcyB0dXBsZS1saWtlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8g
YWxsb3cgaXQgdG8gYmUgdXNlZAorICAgICAgICB3aXRoIHN0cnVjdHVyZWQgYmluZGluZ3MuIEZv
ciBleGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbXlG
bG9hdENvbXBvbmVudHM7CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0KToKKyAgICAgICAgQWRv
cHQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIG1ha2UgdGhlc2Ugbm90IHJldHVybiB0b3Rh
bGx5IGluY29ycmVjdCB2YWx1ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNw
YWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIEFkZGVkLiBSZXR1cm5zIGEgc3RkOjpw
YWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQK
KyAgICAgICAgdG8gb3BlcmF0ZSBvbiB0aGUgY29tcG9uZW50cyBpbiBhIENvbG9yU3BhY2UgYXdh
cmUgd2F5LiBVc2VkIGJ5IHRvU1JHQkFDb21wb25lbnRzTG9zc3kKKyAgICAgICAgYW5kIGxlYWtD
R0NvbG9yKCkgZm9yIG5vdywgYnV0IHdpbGwgYmUgdXNlZnVsIGdvaW5nIGZvcndhcmQgYXMgd2Vs
bC4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29u
c3QpOgorICAgICAgICBSZS1pbXBsZW1lbnQgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KSB0byBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmdldFJHQkEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBv
bmVudHM6OkZsb2F0Q29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdC
Q29sb3JUb0xpbmVhckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBvbmVu
dHM6OmdldCBjb25zdCk6CisgICAgICAgIFJlbW92ZSB1c2VzIG9mIHRoZSBDb2xvciBjbGFzcyB0
byBzaW1wbGlmeSBpbmxpbmluZyAoQ29sb3IuaCBhbHJlYWR5IG5lZWRzIHRvIGtub3cgYWJvdXQK
KyAgICAgICAgRmxvYXRDb21wb25lbnRzKS4gCisgICAgICAgICAgICAtIEZsb2F0Q29tcG9uZW50
cyBjb25zdHJ1Y3RvciByZXBsYWNlZCBieSBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
LiAKKyAgICAgICAgICAgIC0gc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzIHJlcGxhY2VkIGJ5
IGNhbGxpbmcgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSkuCisgICAgICAgIAorICAgICAgICBBbHNvIGFkZHMgc3RkOjp0dXBsZSBhZGFwdG9ycyBm
b3IgRmxvYXRDb21wb25lbnRzIHRvIGFsbG93IHVzaW5nIHdpdGggc3R1Y3R1cmVkIGJpbmRpbmdz
LiAKKworICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvOjpIaXN0b3JpY01l
bW9yeUNhdGVnb3J5SW5mbyk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENH
Q29sb3IuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBjYWNoZWRDR0NvbG9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRC
b3JkZXJDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENHQ29sb3Iu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgUmVw
bGFjZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkQ29sb3JTdG9wUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb3JuZXJDb2xvclJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvclN0b3ApOgorICAgICAgICBS
ZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWFr
Q0dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKToKKyAgICAgICAgU2lt
cGxpZnkgaW1wbGVtZW50YXRpb24gKGFuZCByZW1vdmUgdXNlIG9mIGdldFJHQkEpIGJ5IHVzaW5n
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggY29sb3JTcGFjZUFuZENv
bXBvbmVudCgpLiAKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyk6CisgICAgICAgIFJlcGxhY2UgRmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHRha2lu
ZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eS4KKyAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3Jt
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9T
UkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBj
b25zdCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9z
c3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IHRvU1JHQkFDb21wb25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Z2Vu
ZXJhdGVHcmFkaWVudCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21w
b25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU3Ryb2tlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3BlbGxpbmdQYXR0ZXJuQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z3JhbW1hclBhdHRlcm5Db2xvcik6IERlbGV0ZWQu
CisgICAgICAgIFJlcGxhY2UgdXNlIG9mIGdldFJHQkEgd2l0aCBkaXJlY3QgdXNlIG9mIFNpbXBs
ZUNvbG9yIGluc3RlYWQuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgUmVwbGFjZSBpbXBsaWNpdCBGbG9hdENvbXBvbmVudHMg
Y29uc3RydWN0aW9uIHRha2luZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggZXhw
bGljaXQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKwogMjAyMC0wNS0xOSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBQdXNoIGEgUGxhdGZvcm1EaXNw
bGF5SUQgdG8gc2Nyb2xsaW5nIHRyZWVzLCBhbmQgYWxsb3cgdGhlIHNjcm9sbGluZyB0aHJlYWQg
dG8gZ2V0IGRpc3BsYXlEaWRSZWZyZXNoIG5vdGlmaWNhdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0J
KHJldmlzaW9uIDI2MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw3IEBAIHN0
cnVjdCBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyB7CiAgICAgICAgICwgaXNTdWJjYXRlZ29y
eShzdWJjYXRlZ29yeSkKICAgICAgICAgLCB0eXBlKGNhdGVnb3J5KQogICAgIHsKLSAgICAgICAg
ZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgQ29sb3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9
LmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgIGNvbG9yID0gYWRvcHRDRihjcmVhdGVDb2xv
cihyLCBnLCBiLCBhKSk7CisgICAgICAgIGNvbG9yID0gY2FjaGVkQ0dDb2xvcihTaW1wbGVDb2xv
ciB7IGFyZ2IgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIG5hbWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjE4NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1MCwxNCArMzUwLDE0IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiAgICAgCiAg
ICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAK
LSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwgYSk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAgICBmbG9hdCB2
ID0gc3RkOjptYXgociwgc3RkOjptYXgoZywgYikpOwogCi0gICAgaWYgKHYgPT0gMC4wZikKKyAg
ICBpZiAodiA9PSAwLjBmKSB7CiAgICAgICAgIC8vIExpZ2h0ZW5lZCBibGFjayB3aXRoIGFscGhh
LgogICAgICAgICByZXR1cm4gQ29sb3IoMHg1NCwgMHg1NCwgMHg1NCwgYWxwaGEoKSk7CisgICAg
fQogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2
OwogCkBAIC0zNzUsOCArMzc1LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIAog
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwog
Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQg
diA9IHN0ZDo6bWF4KHIsIHN0ZDo6bWF4KGcsIGIpKTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0g
c3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTM4OSwxMyArMzg4LDkgQEAgQ29s
b3IgQ29sb3I6OmRhcmsoKSBjb25zdAogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdAogewot
ICAgIGZsb2F0IHJlZDsKLSAgICBmbG9hdCBncmVlbjsKLSAgICBmbG9hdCBibHVlOwotICAgIGZs
b2F0IGFscGhhOwotICAgIGdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGZs
b2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heChyZWQsIHN0ZDo6bWF4KGdyZWVu
LCBibHVlKSk7Ci0gICAgcmV0dXJuIGFscGhhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5u
ZWwgPCAwLjU7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CisgICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHIsIHN0ZDo6
bWF4KGcsIGIpKTsKKyAgICByZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVs
IDwgMC41OwogfQogCiBzdGF0aWMgaW50IGJsZW5kQ29tcG9uZW50KGludCBjLCBpbnQgYSkKQEAg
LTQ3MSwyMiArNDY2LDYgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhh
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ29sb3I6OmdldFJHQkEoZmxvYXQmIHIs
IGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0Ci17Ci0gICAgciA9IHJlZCgpIC8g
MjU1LjBmOwotICAgIGcgPSBncmVlbigpIC8gMjU1LjBmOwotICAgIGIgPSBibHVlKCkgLyAyNTUu
MGY7Ci0gICAgYSA9IGFscGhhKCkgLyAyNTUuMGY7Ci19Ci0KLXZvaWQgQ29sb3I6OmdldFJHQkEo
ZG91YmxlJiByLCBkb3VibGUmIGcsIGRvdWJsZSYgYiwgZG91YmxlJiBhKSBjb25zdAotewotICAg
IHIgPSByZWQoKSAvIDI1NS4wOwotICAgIGcgPSBncmVlbigpIC8gMjU1LjA7Ci0gICAgYiA9IGJs
dWUoKSAvIDI1NS4wOwotICAgIGEgPSBhbHBoYSgpIC8gMjU1LjA7Ci19Ci0KIC8vIEZJWE1FOiBV
c2Ugc1JHQlRvSFNMKCkuCiB2b2lkIENvbG9yOjpnZXRIU0woZG91YmxlJiBodWUsIGRvdWJsZSYg
c2F0dXJhdGlvbiwgZG91YmxlJiBsaWdodG5lc3MpIGNvbnN0CiB7CkBAIC01NTUsMjIgKzUzNCwy
NyBAQCB2b2lkIENvbG9yOjpnZXRIU1YoZG91YmxlJiBodWUsIGRvdWJsZSYgCiAgICAgdmFsdWUg
PSBtYXg7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0CitzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBDb2xvcjo6
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkp
IHsKICAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKLSAgICAgICAg
c3dpdGNoIChleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewotICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5jaGFubmVscygp
OwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAgICAgIHJldHVy
biBsaW5lYXJUb1JHQkNvbXBvbmVudHMoZXh0ZW5kZWRDb2xvci5jaGFubmVscygpKTsKLSAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gcDNUb1NS
R0IoZXh0ZW5kZWRDb2xvci5jaGFubmVscygpKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4g
eyBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07
CisgICAgfQorCisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRz
IHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFs
cGhhKCkgLyAyNTUuMGYgfSB9OworfQorCitGbG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKSBjb25zdAoreworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2Up
IHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJldHVybiBjb21wb25lbnRz
OworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICByZXR1cm4gbGluZWFy
VG9SR0JDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzOgorICAgICAgICByZXR1cm4gcDNUb1NSR0IoY29tcG9uZW50cyk7CiAgICAgfQotICAgIGZs
b2F0IHIsIGcsIGIsIGE7Ci0gICAgZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICByZXR1cm4geyBy
LCBnLCBiLCBhIH07CiB9CiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBwdWJsaWM6CiAK
ICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIHRoZXNlIHNob3VsZCBiZSByZW5hbWVkICh0
byBiZSBjbGVhciBhYm91dCB0aGVpciBwYXJhbWV0ZXIgdHlwZXMsIG9yCiAgICAgLy8gcmVwbGFj
ZWQgd2l0aCBhbHRlcm5hdGl2ZSBhY2Nlc3NvcnMuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBn
ZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcsIGRvdWJs
ZSYgYiwgZG91YmxlJiBhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNM
KGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZ2V0SFNWKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIHYpIGNvbnN0Owog
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50
cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIC8vIFRoaXMgd2lsbCBj
b252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KICAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwx
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAK
LSNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRmxvYXRDb21wb25lbnRzOjpGbG9hdENvbXBvbmVudHMoY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9u
ZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci19Ci0KIENvbG9yQ29tcG9u
ZW50czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgZmxvYXRDb21wb25l
bnRzKQogewogICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRD
b21wb25lbnRzLmNvbXBvbmVudHNbMF0pOwpAQCAtNjksMTggKzYzLDYgQEAgZmxvYXQgcmdiVG9M
aW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0Pihz
dGQ6OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAotRmxvYXRD
b21wb25lbnRzIHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEp
OwotICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQociksCi0g
ICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZyksCi0gICAgICAgIHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnQoYiksCi0gICAgICAgIGEKLSAgICB9OwotfQotCiBGbG9hdENvbXBvbmVu
dHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgUkdCQ29sb3Ip
CiB7CiAgICAgcmV0dXJuIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYxODc4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbG9yOwotCiBz
dHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICBGbG9hdENvbXBvbmVudHMoZmxvYXQgYSA9IDAs
IGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCiAgICAgewpAQCAtNTAsOCAr
NDgsNiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgY29tcG9uZW50c1szXSA9
IHZhbHVlc1szXTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3QgQ29sb3ImKTsK
LQogICAgIEZsb2F0Q29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBGbG9hdENvbXBvbmVudHMm
IHJocykKICAgICB7CiAgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVudHNbMF07
CkBAIC0xMDEsNiArOTcsMTIgQEAgc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBm
bG9hdCBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbTl07Cisg
ICAgfQorCiAgICAgc3RkOjphcnJheTxmbG9hdCwgND4gY29tcG9uZW50czsKIH07CiAKQEAgLTE3
Niw3ICsxNzgsNiBAQCBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduCiBm
bG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1GbG9hdENvbXBvbmVudHMgc1JHQkNvbG9yVG9MaW5l
YXJDb21wb25lbnRzKGNvbnN0IENvbG9yJik7CiBGbG9hdENvbXBvbmVudHMgcmdiVG9MaW5lYXJD
b21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogRmxvYXRDb21wb25lbnRzIGxpbmVh
clRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKIApAQCAtMjEwLDMgKzIx
MSwxNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBz
dGQgeworCit0ZW1wbGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0Q29tcG9u
ZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4gewor
fTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2Vi
Q29yZTo6RmxvYXRDb21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IGZsb2F0
OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlzaW9uIDI2
MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTMgKzU3Niw3IEBAIENvbG9y
IFBsYXRmb3JtQ0FMYXllcldpbjo6YmFja2dyb3VuZENvbG8KIAogdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dG
bG9hdCBjb21wb25lbnRzWzRdOwotICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29t
cG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVh
dGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRD
RihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLQotICAgIENB
Q0ZMYXllclNldEJhY2tncm91bmRDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7Cisg
ICAgQ0FDRkxheWVyU2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCksIGNhY2hlZENHQ29s
b3IoY29sb3IpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MTg3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxNSArMzEyLDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZAogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dG
bG9hdCBjb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAwIH07Ci0gICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCkpOwotCi0gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgdmFsdWUuZ2V0UkdC
QShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xv
ckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNGTGF5ZXJT
ZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdldCgpKTsKKyAg
ICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNhY2hl
ZENHQ29sb3IodmFsdWUpKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4Myw4IEBAIHZv
aWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEo
Y29udGV4dCwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBjb2xvci5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29sb3IuYXNFeHRlbmRlZCgpLmFscGhh
KCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsK
LSAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsK
IH0KIAogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3Qq
IGZyb20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYxODc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE0ICs0Myw4IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJv
eSgpCiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFk
aWVudCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAg
ICBpZiAoc3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9h
ZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvci5hc0V4
dGVuZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAgICAg
ICAgICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRlbmRl
ZCgpLmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQg
ciwgZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAg
ICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zm
c2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGNhaXJvX3Bh
dHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcsIGIs
IGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQ
RSkKQEAgLTYxLDE0ICs1NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBzdGF0aWMg
dm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwgaW50IGlk
LCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGlm
IChzdG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjYWlyb19tZXNoX3BhdHRlcm5f
c2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgc3RvcC5jb2xvci5hc0V4dGVuZGVk
KCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAgICAgICAgICBz
dG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmFs
cGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgciwgZywg
YiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBj
YWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwg
ZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBz
dG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19tZXNoX3BhdHRl
cm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2Jh
bEFscGhhKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybl90
ICpncmFkaWVudCwgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByLCBmbG9hdCBhbmdsZVJhZGlh
bnMsCkBAIC0xNDcsMjQgKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJv
X3BhdHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0
b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQogewot
ICAgIGZsb2F0IHIxLCBnMSwgYjEsIGExOwotICAgIGZsb2F0IHIyLCBnMiwgYjIsIGEyOwotCi0g
ICAgaWYgKGZyb20uY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHIxID0gZnJvbS5jb2xv
ci5hc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcxID0gZnJvbS5jb2xvci5hc0V4dGVuZGVk
KCkuZ3JlZW4oKTsKLSAgICAgICAgYjEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7
Ci0gICAgICAgIGExID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZnJvbS5jb2xvci5nZXRSR0JBKHIxLCBnMSwgYjEsIGExKTsKLQotICAgIGlm
ICh0by5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgcjIgPSB0by5jb2xvci5hc0V4dGVu
ZGVkKCkucmVkKCk7Ci0gICAgICAgIGcyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCk7
Ci0gICAgICAgIGIyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKTsKLSAgICAgICAgYTIg
PSB0by5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdG8u
Y29sb3IuZ2V0UkdCQShyMiwgZzIsIGIyLCBhMik7CisgICAgYXV0byBbcjEsIGcxLCBiMSwgYTFd
ID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbcjIsIGcy
LCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxv
YXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQpICogMC41
ZjsKICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2
MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMjcgKzEwMywxOSBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xv
clJlZiBjb2xvciwgU2VtYW50aWNUCiAKIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgaWYg
KGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBhdXRvJiBleHRlbmRlZENvbG9y
ID0gY29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIGNoYW5uZWxzID0gZXh0ZW5kZWRD
b2xvci5jaGFubmVscygpOwotICAgICAgICBjb21wb25lbnRzWzBdID0gY2hhbm5lbHMuY29tcG9u
ZW50c1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGNoYW5uZWxzLmNvbXBvbmVudHNbMV07
Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBjaGFubmVscy5jb21wb25lbnRzWzJdOwotICAgICAg
ICBjb21wb25lbnRzWzNdID0gY2hhbm5lbHMuY29tcG9uZW50c1szXTsKLSAgICAgICAgc3dpdGNo
IChleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewotICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJl
ZigpLCBjb21wb25lbnRzKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0g
ICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShkaXNwbGF5UDNDb2xvclNwYWNlUmVmKCks
IGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9yUmVmcyBpbiB0aGVzZSBz
cGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KLSAgICAgICAgICAgIHJldHVybiBD
R0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICB9
CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKKyAgICBD
R0Zsb2F0IGNnRmxvYXRDb21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OworCisgICAgc3dpdGNo
IChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICByZXR1
cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjZ0Zsb2F0Q29tcG9uZW50cyk7
CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBDR0NvbG9y
Q3JlYXRlKGRpc3BsYXlQM0NvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVudHMpOworICAg
IGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICAvLyBGSVhNRTogRG8gd2UgZXZl
ciBjcmVhdGUgQ0dDb2xvclJlZnMgaW4gdGhlc2Ugc3BhY2VzPyBJdCBtYXkgb25seSBiZSBJbWFn
ZUJ1ZmZlcnMuCisgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVm
KCksIGNnRmxvYXRDb21wb25lbnRzKTsKICAgICB9Ci0KLSAgICBjb2xvci5nZXRSR0JBKGNvbXBv
bmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwot
ICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMp
OwogfQogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRD
Ry5jcHAJKHJldmlzaW9uIDI2MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsOCBAQCBD
R0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgICAgIGlmIChzdG9w
LmNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1
ZTsKIAotICAgICAgICBmbG9hdCByOwotICAgICAgICBmbG9hdCBnOwotICAgICAgICBmbG9hdCBi
OwotICAgICAgICBmbG9hdCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwg
YSk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gc3RvcC5jb2xvci5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bXBvbmVudHM7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAg
ICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgIGNvbG9y
Q29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlz
aW9uIDI2MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIEZF
TGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lID0gd2lkdGggLSAxOwogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWln
aHQgLSAxOwogICAgIAotICAgIEZsb2F0Q29tcG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5l
YXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGlu
Z0NvbG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xv
clNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50
cyhtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdD
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxM
aWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25l
bnRzWzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1sy
XSk7CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdE
YXRhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjE4Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgYm9vbCBGaWx0ZXJP
cGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRz
OwotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRz
LmNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21w
b25lbnRzWzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50cyA9IGNvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVy
YXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihjb21wb25l
bnRzKSkKQEAgLTEzMSw4ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VU
cmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdC
QShjb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29t
cG9uZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZs
b2F0Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAg
aWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAkocmV2aXNpb24gMjYxODc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDggQEAgQ29sb3I6
OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29u
c3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JBID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4geyBhc1JHQkEuY29tcG9uZW50
c1swXSwgYXNSR0JBLmNvbXBvbmVudHNbMV0sIGFzUkdCQS5jb21wb25lbnRzWzJdLCBhc1JHQkEu
Y29tcG9uZW50c1szXSB9OwotICAgIH0KLQotI2lmIFVTRShHVEs0KQotICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOwotI2Vsc2UKLSAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGE7Ci0jZW5kaWYKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICByZXR1cm4geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiB7IHIsIGcsIGIsIGEg
fTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MTg3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDggQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0aXBsaWVk
QVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgLy8gRklYTUU6
IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikp
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAt
Mjc2LDEzICsyNzYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVt
CiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5j
ZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGgg
dGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwg
Y29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKSwgY29s
b3IuYXNFeHRlbmRlZCgpLmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByLCBn
LCBiLCBhOwotICAgICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAw
LCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19maWxsKGNyKTsKQEAgLTQyMCw4ICs0MTUs
OCBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCi0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgICAgICAgICAgQ29sb3Io
cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5nZXRSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9h
dENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENv
bG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5i
bHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6
ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZz
ZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTY4Myw4ICs2NzgsOCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xV
c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGZsb2F0IHIsIGcsIGIsIGE7
Ci0gICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS5nZXRSR0JBKHIs
IGcsIGIsIGEpOworICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21w
b25lbnRzIGRpcmVjdGx5LgorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlw
bGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBp
ZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJs
ZW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYxODc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MiwxMSArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRp
ZW50KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9w
czsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9y
IChhdXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGZsb2F0IHI7Ci0gICAgICAgIGZsb2F0
IGc7Ci0gICAgICAgIGZsb2F0IGI7Ci0gICAgICAgIGZsb2F0IGE7Ci0gICAgICAgIHN0b3AuY29s
b3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5j
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBw
ZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIs
IGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9u
IDI2MTg3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwyNCArMTcwLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLS8vIFB1bGxlZCBmcm9tIEdyYXBoaWNzQ29udGV4dENH
Ci1zdGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsK
LSAgICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBDR0NvbnRl
eHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19
Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKSB7Ci0gICAgc3Rh
dGljIGNvbnN0IENvbG9yIHNwZWxsaW5nQ29sb3IoMjU1LCAwLCAwKTsKLSAgICByZXR1cm4gc3Bl
bGxpbmdDb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9y
KCkgewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBncmFtbWFyQ29sb3IoMCwgMTI4LCAwKTsKLSAg
ICByZXR1cm4gZ3JhbW1hckNvbG9yOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0yMTYs
OCArMTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW4KICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0g
c3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdy
YW1tYXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Ci0gICAgc2V0Q0dT
dHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
U2ltcGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBtYWtlUkdCKDI1NSwgMCwgMCkgfTsK
KyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0ZXJuQ29sb3IgeyBt
YWtlUkdCKDAsIDEyOCwgMCkgfTsKKworICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29s
b3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFy
ID8gZ3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOworICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQo
KSwgcGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9u
ZW50KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgIENHQWZmaW5lVHJh
bnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogICAgIENHUG9p
bnQgcGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHVzZXJUb0Jhc2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShy
ZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNM
ZWdpYmxlQWdhaW5zdEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZp
bml0aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRl
ci4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29u
dHJhc3QtY29udHJhc3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IsIGJhY2tn
cm91bmRDb2xvcikgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxp
dHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTE4
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0
IGFsd2F5cyBpbmNvcnJlY3QgQ29sb3I6OmdldFJHQkEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3Iu
Y3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIENv
bG9yOjpnZXRSR0JBIHdpdGggQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKQorCiAyMDIw
LTA1LTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFB1c2ggYSBQbGF0Zm9ybURpc3BsYXlJRCB0byBzY3JvbGxpbmcgdHJlZXMsIGFuZCBhbGxvdyB0
aGUgc2Nyb2xsaW5nIHRocmVhZCB0byBnZXQgZGlzcGxheURpZFJlZnJlc2ggbm90aWZpY2F0aW9u
cwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHJldmlzaW9uIDI2MTg3OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw3IEBAIHZvaWQg
d2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VS
VCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGRvdWJsZSByLCBnLCBiLCBhOwotICAg
IHdlYkNvcmVDb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBjb2xvci0+cmVk
ID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNv
bnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzM3LDggKzMzNyw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UK
ICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5k
Q29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJy
ZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAgICAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogICAgICAgICAgICAg
ICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYoY2Fpcm9fcGF0dGVy
bl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwCShyZXZpc2lvbiAyNjE4NzgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw3ICs2NjAsMTEgQEAg
Ym9vbCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAgIGlmICghYmdDb2xv
ci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJnQ29sb3IuZ2V0UkdC
QSgqcmVkLCAqZ3JlZW4sICpibHVlLCAqYWxwaGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
YmdDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgKnJlZCA9IHI7CisgICAgKmdy
ZWVuID0gZzsKKyAgICAqYmx1ZSA9IGI7CisgICAgKmFscGhhID0gYTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399772</attachid>
            <date>2020-05-19 14:52:23 -0700</date>
            <delta_ts>2020-05-19 15:12:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519145222.patch</filename>
            <type>text/plain</type>
            <size>34910</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVzIHRoZSBhd2t3YXJkIGFuZCBhbG1vc3QgYWx3YXlzIGlu
Y29ycmVjdCBvdXQgcGFyYW1ldGVyIGJhc2VkIENvbG9yOjpnZXRSR0JBLiBNb3N0IGV4aXN0aW5n
IGNhbGxzaXRlcworICAgICAgICB3ZXJlIHVwZGF0ZWQgdG8gdXNlIENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkgb3Igb3RoZXIgbW9yZSBFeHRlbmRlZENvbG9yIHN1cHBvcnRpbmcgZnVu
Y3Rpb25zIChsaWtlIAorICAgICAgICBjYWNoZWRDR0NvbG9yKCkpLiAKKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkcyB0dXBsZS1saWtlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8g
YWxsb3cgaXQgdG8gYmUgdXNlZAorICAgICAgICB3aXRoIHN0cnVjdHVyZWQgYmluZGluZ3MuIEZv
ciBleGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbXlG
bG9hdENvbXBvbmVudHM7CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0KToKKyAgICAgICAgQWRv
cHQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIG1ha2UgdGhlc2Ugbm90IHJldHVybiB0b3Rh
bGx5IGluY29ycmVjdCB2YWx1ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNw
YWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIEFkZGVkLiBSZXR1cm5zIGEgc3RkOjpw
YWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQK
KyAgICAgICAgdG8gb3BlcmF0ZSBvbiB0aGUgY29tcG9uZW50cyBpbiBhIENvbG9yU3BhY2UgYXdh
cmUgd2F5LiBVc2VkIGJ5IHRvU1JHQkFDb21wb25lbnRzTG9zc3kKKyAgICAgICAgYW5kIGxlYWtD
R0NvbG9yKCkgZm9yIG5vdywgYnV0IHdpbGwgYmUgdXNlZnVsIGdvaW5nIGZvcndhcmQgYXMgd2Vs
bC4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29u
c3QpOgorICAgICAgICBSZS1pbXBsZW1lbnQgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KSB0byBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmdldFJHQkEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBv
bmVudHM6OkZsb2F0Q29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdC
Q29sb3JUb0xpbmVhckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdENvbXBvbmVu
dHM6OmdldCBjb25zdCk6CisgICAgICAgIFJlbW92ZSB1c2VzIG9mIHRoZSBDb2xvciBjbGFzcyB0
byBzaW1wbGlmeSBpbmxpbmluZyAoQ29sb3IuaCBhbHJlYWR5IG5lZWRzIHRvIGtub3cgYWJvdXQK
KyAgICAgICAgRmxvYXRDb21wb25lbnRzKS4gCisgICAgICAgICAgICAtIEZsb2F0Q29tcG9uZW50
cyBjb25zdHJ1Y3RvciByZXBsYWNlZCBieSBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
LiAKKyAgICAgICAgICAgIC0gc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzIHJlcGxhY2VkIGJ5
IGNhbGxpbmcgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSkuCisgICAgICAgIAorICAgICAgICBBbHNvIGFkZHMgc3RkOjp0dXBsZSBhZGFwdG9ycyBm
b3IgRmxvYXRDb21wb25lbnRzIHRvIGFsbG93IHVzaW5nIHdpdGggc3R1Y3R1cmVkIGJpbmRpbmdz
LiAKKworICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvOjpIaXN0b3JpY01l
bW9yeUNhdGVnb3J5SW5mbyk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENH
Q29sb3IuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBjYWNoZWRDR0NvbG9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRC
b3JkZXJDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIGNhY2hlZENHQ29sb3Iu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgUmVw
bGFjZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkQ29sb3JTdG9wUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb3JuZXJDb2xvclJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvclN0b3ApOgorICAgICAgICBS
ZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWFr
Q0dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKToKKyAgICAgICAgU2lt
cGxpZnkgaW1wbGVtZW50YXRpb24gKGFuZCByZW1vdmUgdXNlIG9mIGdldFJHQkEpIGJ5IHVzaW5n
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggY29sb3JTcGFjZUFuZENv
bXBvbmVudCgpLiAKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyk6CisgICAgICAgIFJlcGxhY2UgRmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHRha2lu
ZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eS4KKyAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3Jt
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9T
UkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBj
b25zdCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9z
c3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IHRvU1JHQkFDb21wb25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Z2Vu
ZXJhdGVHcmFkaWVudCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21w
b25lbnRzTG9zc3kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU3Ryb2tlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3BlbGxpbmdQYXR0ZXJuQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z3JhbW1hclBhdHRlcm5Db2xvcik6IERlbGV0ZWQu
CisgICAgICAgIFJlcGxhY2UgdXNlIG9mIGdldFJHQkEgd2l0aCBkaXJlY3QgdXNlIG9mIFNpbXBs
ZUNvbG9yIGluc3RlYWQuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgUmVwbGFjZSBpbXBsaWNpdCBGbG9hdENvbXBvbmVudHMg
Y29uc3RydWN0aW9uIHRha2luZyBhIENvbG9yICh3aGljaCB1c2VkIGdldFJHQkEpIHdpdGggZXhw
bGljaXQgdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKwogMjAyMC0wNS0xOSAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIElEQlJlcXVlc3REYXRhIGFuZCBJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uIHNob3VsZCBpbml0aWFsaXplIEluZGV4ZWREQjo6
SW5kZXhSZWNvcmRUeXBlIGZpZWxkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCShyZXZpc2lvbiAyNjE4ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw5ICsxMzMsNyBAQCBzdHJ1Y3QgSGlzdG9yaWNNZW1v
cnlDYXRlZ29yeUluZm8gewogICAgICAgICAsIGlzU3ViY2F0ZWdvcnkoc3ViY2F0ZWdvcnkpCiAg
ICAgICAgICwgdHlwZShjYXRlZ29yeSkKICAgICB7Ci0gICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7
Ci0gICAgICAgIENvbG9yIHsgU2ltcGxlQ29sb3IgeyBhcmdiIH0gfS5nZXRSR0JBKHIsIGcsIGIs
IGEpOwotICAgICAgICBjb2xvciA9IGFkb3B0Q0YoY3JlYXRlQ29sb3IociwgZywgYiwgYSkpOwor
ICAgICAgICBjb2xvciA9IGNhY2hlZENHQ29sb3IoU2ltcGxlQ29sb3IgeyBhcmdiIH0pOwogICAg
IH0KIAogICAgIFN0cmluZyBuYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTQgKzM1MCwx
NCBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogICAgIAogICAgIGNvbnN0IGZsb2F0IHNj
YWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwogCi0gICAgZmxvYXQgciwgZywg
YiwgYTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHIsIHN0
ZDo6bWF4KGcsIGIpKTsKIAotICAgIGlmICh2ID09IDAuMGYpCisgICAgaWYgKHYgPT0gMC4wZikg
ewogICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBoYS4KICAgICAgICAgcmV0dXJu
IENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOworICAgIH0KIAogICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIApAQCAtMzc1LDggKzM3
NSw3IEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICAKICAgICBjb25zdCBmbG9hdCBz
Y2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAotICAgIGZsb2F0IHIsIGcs
IGIsIGE7Ci0gICAgZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heChyLCBz
dGQ6Om1heChnLCBiKSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2
IC0gMC4zM2YpIC8gdik7CkBAIC0zODksMTMgKzM4OCwxMCBAQCBDb2xvciBDb2xvcjo6ZGFyaygp
IGNvbnN0CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcmVkOwot
ICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci0gICAg
Z2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5vbkFs
cGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHJlZCwgc3RkOjptYXgoZ3JlZW4sIGJsdWUpKTsKLSAgICBy
ZXR1cm4gYWxwaGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgorICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGZsb2F0IGxh
cmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heChyLCBzdGQ6Om1heChnLCBiKSk7CisgICAg
cmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KIAogc3Rh
dGljIGludCBibGVuZENvbXBvbmVudChpbnQgYywgaW50IGEpCkBAIC00NzEsMjIgKzQ2Nyw2IEBA
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIENvbG9yOjpnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQm
IGIsIGZsb2F0JiBhKSBjb25zdAotewotICAgIHIgPSByZWQoKSAvIDI1NS4wZjsKLSAgICBnID0g
Z3JlZW4oKSAvIDI1NS4wZjsKLSAgICBiID0gYmx1ZSgpIC8gMjU1LjBmOwotICAgIGEgPSBhbHBo
YSgpIC8gMjU1LjBmOwotfQotCi12b2lkIENvbG9yOjpnZXRSR0JBKGRvdWJsZSYgciwgZG91Ymxl
JiBnLCBkb3VibGUmIGIsIGRvdWJsZSYgYSkgY29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUu
MDsKLSAgICBnID0gZ3JlZW4oKSAvIDI1NS4wOwotICAgIGIgPSBibHVlKCkgLyAyNTUuMDsKLSAg
ICBhID0gYWxwaGEoKSAvIDI1NS4wOwotfQotCiAvLyBGSVhNRTogVXNlIHNSR0JUb0hTTCgpLgog
dm9pZCBDb2xvcjo6Z2V0SFNMKGRvdWJsZSYgaHVlLCBkb3VibGUmIHNhdHVyYXRpb24sIGRvdWJs
ZSYgbGlnaHRuZXNzKSBjb25zdAogewpAQCAtNTU1LDIyICs1MzUsMjcgQEAgdm9pZCBDb2xvcjo6
Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogICAgIHZhbHVlID0gbWF4OwogfQogCi1GbG9h
dENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorc3RkOjpw
YWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21w
b25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8m
IGV4dGVuZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRD
b2xvci5jb2xvclNwYWNlKCkpIHsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAg
ICAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21w
b25lbnRzKGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGV4dGVuZGVkQ29sb3Iu
Y2hhbm5lbHMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5j
b2xvclNwYWNlKCksIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8gMjU1LjBm
LCBncmVlbigpIC8gMjU1LjBmLCBibHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1LjBmIH0g
fTsKK30KKworRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkg
Y29uc3QKK3sKKyAgICBhdXRvIHBhaXIgPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IHN3aXRjaCAocGFpci5maXJzdCkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAg
ICAgcmV0dXJuIHBhaXIuc2Vjb25kOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgor
ICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKHBhaXIuc2Vjb25kKTsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIHAzVG9TUkdCKHBhaXIu
c2Vjb25kKTsKICAgICB9Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBnZXRSR0JBKHIsIGcs
IGIsIGEpOwotICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIAogQ29sb3IgY29sb3JGcm9t
UHJlbXVsdGlwbGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYg
Kzk0LDcgQEAgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbgogCiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZs
b2F0IG92ZXJyaWRlQWxwaGEpOwogUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMy
IGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CitSR0JBMzIgY29sb3JXaXRo
T3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGludCBvdmVycmlkZUFscGhhKTsKIAogV0VCQ09S
RV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZs
b2F0IGIsIGZsb2F0IGEpOwogUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQg
cywgZmxvYXQgbCwgZmxvYXQgYSk7CkBAIC0yMDksMTIgKzIxMCwxMiBAQCBwdWJsaWM6CiAKICAg
ICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIHRoZXNlIHNob3VsZCBiZSByZW5hbWVkICh0byBi
ZSBjbGVhciBhYm91dCB0aGVpciBwYXJhbWV0ZXIgdHlwZXMsIG9yCiAgICAgLy8gcmVwbGFjZWQg
d2l0aCBhbHRlcm5hdGl2ZSBhY2Nlc3NvcnMuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRS
R0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25zdDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcsIGRvdWJsZSYg
YiwgZG91YmxlJiBhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNMKGRv
dWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZ2V0SFNWKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIHYpIGNvbnN0OwogCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4g
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIC8vIFRoaXMgd2lsbCBjb252
ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KICAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGls
aXRpZXMuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwxMCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAKLSNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRmxvYXRDb21wb25lbnRzOjpGbG9hdENvbXBvbmVudHMoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50
c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci19Ci0KIENvbG9yQ29tcG9uZW50
czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgZmxvYXRDb21wb25lbnRz
KQogewogICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRDb21w
b25lbnRzLmNvbXBvbmVudHNbMF0pOwpAQCAtNjksMTggKzYzLDYgQEAgZmxvYXQgcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6
OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAotRmxvYXRDb21w
b25lbnRzIHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQociksCi0gICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZyksCi0gICAgICAgIHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoYiksCi0gICAgICAgIGEKLSAgICB9OwotfQotCiBGbG9hdENvbXBvbmVudHMg
cmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgUkdCQ29sb3IpCiB7
CiAgICAgcmV0dXJuIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbG9yOwotCiBzdHJ1
Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICBGbG9hdENvbXBvbmVudHMoZmxvYXQgYSA9IDAsIGZs
b2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCiAgICAgewpAQCAtNTAsOCArNDgs
NiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgY29tcG9uZW50c1szXSA9IHZh
bHVlc1szXTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3QgQ29sb3ImKTsKLQog
ICAgIEZsb2F0Q29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBGbG9hdENvbXBvbmVudHMmIHJo
cykKICAgICB7CiAgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVudHNbMF07CkBA
IC0xMDEsNiArOTcsMTIgQEAgc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBmbG9h
dCBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbTl07CisgICAg
fQorCiAgICAgc3RkOjphcnJheTxmbG9hdCwgND4gY29tcG9uZW50czsKIH07CiAKQEAgLTE3Niw3
ICsxNzgsNiBAQCBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduCiBmbG9h
dCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoZmxvYXQpOwogCi1GbG9hdENvbXBvbmVudHMgc1JHQkNvbG9yVG9MaW5lYXJD
b21wb25lbnRzKGNvbnN0IENvbG9yJik7CiBGbG9hdENvbXBvbmVudHMgcmdiVG9MaW5lYXJDb21w
b25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogRmxvYXRDb21wb25lbnRzIGxpbmVhclRv
UkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKIApAQCAtMjEwLDMgKzIxMSwx
NiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBzdGQg
eworCit0ZW1wbGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50
cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4geworfTsK
KwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2ViQ29y
ZTo6RmxvYXRDb21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IGZsb2F0Owor
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlzaW9uIDI2MTg4
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTMgKzU3Niw3IEBAIENvbG9yIFBs
YXRmb3JtQ0FMYXllcldpbjo6YmFja2dyb3VuZENvbG8KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dGbG9h
dCBjb21wb25lbnRzWzRdOwotICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9u
ZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihD
R0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLQotICAgIENBQ0ZM
YXllclNldEJhY2tncm91bmRDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7CisgICAg
Q0FDRkxheWVyU2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCksIGNhY2hlZENHQ29sb3Io
Y29sb3IpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxNSArMzEyLDcgQEAgdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZAogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dGbG9h
dCBjb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAwIH07Ci0gICAgUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdC
KCkpOwotCi0gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgdmFsdWUuZ2V0UkdCQShj
b21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNd
KTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNy
ZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNGTGF5ZXJTZXRC
b3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdldCgpKTsKKyAgICBD
QUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNhY2hlZENH
Q29sb3IodmFsdWUpKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4Myw4IEBAIHZvaWQg
Y29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRTb3VyY2VSR0JB
RnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29u
dGV4dCwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4o
KSwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29sb3IuYXNFeHRlbmRlZCgpLmFscGhhKCkp
OwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAg
ICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0g
ICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0K
IAogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZy
b20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDE0ICs0Myw4IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgp
CiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVu
dCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBp
ZiAoc3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRf
Y29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvci5hc0V4dGVu
ZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAgICAgICAg
ICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgp
LmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgciwg
ZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAg
ICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0
LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGNhaXJvX3BhdHRl
cm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcsIGIsIGEg
KiBnbG9iYWxBbHBoYSk7CiB9CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkK
QEAgLTYxLDE0ICs1NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBzdGF0aWMgdm9p
ZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwgaW50IGlkLCBH
cmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGlmIChz
dG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0
X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCku
cmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAgICAgICAgICBzdG9w
LmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmFscGhh
KCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgciwgZywgYiwg
YTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBjYWly
b19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywg
YiwgYSAqIGdsb2JhbEFscGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19tZXNoX3BhdHRlcm5f
c2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFs
cGhhKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybl90ICpn
cmFkaWVudCwgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByLCBmbG9hdCBhbmdsZVJhZGlhbnMs
CkBAIC0xNDcsMjQgKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3Bh
dHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3Ao
R3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQogewotICAg
IGZsb2F0IHIxLCBnMSwgYjEsIGExOwotICAgIGZsb2F0IHIyLCBnMiwgYjIsIGEyOwotCi0gICAg
aWYgKGZyb20uY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHIxID0gZnJvbS5jb2xvci5h
c0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcxID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCku
Z3JlZW4oKTsKLSAgICAgICAgYjEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7Ci0g
ICAgICAgIGExID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZnJvbS5jb2xvci5nZXRSR0JBKHIxLCBnMSwgYjEsIGExKTsKLQotICAgIGlmICh0
by5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgcjIgPSB0by5jb2xvci5hc0V4dGVuZGVk
KCkucmVkKCk7Ci0gICAgICAgIGcyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCk7Ci0g
ICAgICAgIGIyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKTsKLSAgICAgICAgYTIgPSB0
by5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdG8uY29s
b3IuZ2V0UkdCQShyMiwgZzIsIGIyLCBhMik7CisgICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0g
ZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbcjIsIGcyLCBi
MiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQg
b2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQpICogMC41ZjsK
ICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MTg4
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsMjcgKzEwMywxOSBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJl
ZiBjb2xvciwgU2VtYW50aWNUCiAKIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgaWYgKGNv
bG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBhdXRvJiBleHRlbmRlZENvbG9yID0g
Y29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIGNoYW5uZWxzID0gZXh0ZW5kZWRDb2xv
ci5jaGFubmVscygpOwotICAgICAgICBjb21wb25lbnRzWzBdID0gY2hhbm5lbHMuY29tcG9uZW50
c1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGNoYW5uZWxzLmNvbXBvbmVudHNbMV07Ci0g
ICAgICAgIGNvbXBvbmVudHNbMl0gPSBjaGFubmVscy5jb21wb25lbnRzWzJdOwotICAgICAgICBj
b21wb25lbnRzWzNdID0gY2hhbm5lbHMuY29tcG9uZW50c1szXTsKLSAgICAgICAgc3dpdGNoIChl
eHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigp
LCBjb21wb25lbnRzKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAg
ICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShkaXNwbGF5UDNDb2xvclNwYWNlUmVmKCksIGNv
bXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9yUmVmcyBpbiB0aGVzZSBzcGFj
ZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KLSAgICAgICAgICAgIHJldHVybiBDR0Nv
bG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICB9Cisg
ICAgYXV0byBwYWlyID0gY29sb3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHBhaXIuc2Vjb25kOworICAgIENHRmxvYXQgY2dGbG9hdENvbXBvbmVu
dHNbNF0geyByLCBnLCBiLCBhIH07CisKKyAgICBzd2l0Y2ggKHBhaXIuZmlyc3QpIHsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JD
b2xvclNwYWNlUmVmKCksIGNnRmxvYXRDb21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6
OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JT
cGFjZVJlZigpLCBjZ0Zsb2F0Q29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6CisgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9yUmVmcyBp
biB0aGVzZSBzcGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KKyAgICAgICAgcmV0
dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVudHMp
OwogICAgIH0KLQotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sx
XSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0gICAgcmV0dXJuIENHQ29sb3JDcmVh
dGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7CiB9CiAKIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkocmV2aXNpb24gMjYxODg2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCw4IEBAIENHR3JhZGllbnRSZWYgR3JhZGllbnQ6
OnBsYXRmb3JtR3JhZGllbnQKICAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRlZCgpKQog
ICAgICAgICAgICAgaGFzRXh0ZW5kZWRDb2xvcnMgPSB0cnVlOwogCi0gICAgICAgIGZsb2F0IHI7
Ci0gICAgICAgIGZsb2F0IGc7Ci0gICAgICAgIGZsb2F0IGI7Ci0gICAgICAgIGZsb2F0IGE7Ci0g
ICAgICAgIHN0b3AuY29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKICAgICAgICAgY29s
b3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgY29sb3JDb21wb25lbnRz
LnVuY2hlY2tlZEFwcGVuZChnKTsKICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFw
cGVuZChiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5n
KFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAg
ICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxv
YXRDb21wb25lbnRzIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9y
U3BhY2U6OkxpbmVhclJHQikgPyBzUkdCQ29sb3JUb0xpbmVhckNvbXBvbmVudHMobV9saWdodGlu
Z0NvbG9yKSA6IEZsb2F0Q29tcG9uZW50cyhtX2xpZ2h0aW5nQ29sb3IpOworICAgIEZsb2F0Q29t
cG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IpID8gcmdiVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpIDogbV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3Rv
ciA9IEZsb2F0UG9pbnQzRChsaWdodENvbG9yLmNvbXBvbmVudHNbMF0sIGxpZ2h0Q29sb3IuY29t
cG9uZW50c1sxXSwgbGlnaHRDb2xvci5jb21wb25lbnRzWzJdKTsKICAgICBtX2xpZ2h0U291cmNl
LT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSw4ICsxMTEsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNv
bG9yKENvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdCQShj
b21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29tcG9u
ZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZsb2F0
Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYg
KCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKGNvbXBvbmVudHMpKQpAQCAtMTMxLDggKzEzMCw3
IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUMKICAgICBpZiAoY29s
b3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdENvbXBv
bmVudHMgY29tcG9uZW50czsKLSAgICBjb2xvci5nZXRSR0JBKGNvbXBvbmVudHMuY29tcG9uZW50
c1swXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzFdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMl0s
IGNvbXBvbmVudHMuY29tcG9uZW50c1szXSk7CisgICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVu
dHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yKGNvbXBvbmVudHMpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxOCArMzYsOCBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYg
YykKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGlmIChpc0V4dGVu
ZGVkKCkpIHsKLSAgICAgICAgYXV0byBhc1JHQkEgPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
Ci0gICAgICAgIHJldHVybiB7IGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50
c1sxXSwgYXNSR0JBLmNvbXBvbmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdIH07Ci0gICAg
fQotCi0jaWYgVVNFKEdUSzQpCi0gICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0j
ZWxzZQotICAgIGRvdWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSNlbmRpZgotICAgIGdl
dFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIHJldHVybiB7IHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhIH07CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCk7CisgICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1Myw4ICsyNTMsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25z
dCBDCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgp
LmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3Ip
OwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBmbG9hdCBy
LCBnLCBiLCBhOwotICAgIENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbG9yKSku
Z2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9u
IEZsb2F0Q29tcG9uZW50cyBkaXJlY3RseS4KKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9y
KHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbG9yKSkudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwg
YSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzYsMTMgKzI3Niw4IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKGludCBudW0KICAgICBjYWlyb190KiBjciA9IGNh
aXJvX2NyZWF0ZShzdXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdo
ZW4gdXBsb2FkaW5nIGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3Iu
Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2JhKGNyLCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpLCBjb2xvci5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEo
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgICAgIGNvbG9y
LmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwg
YiwgZywgciwgYSk7Ci0gICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywg
ciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwog
ICAgIGNhaXJvX2ZpbGwoY3IpOwpAQCAtNDIwLDggKzQxNSw4IEBAIHN0YXRpYyB2b2lkIHByZXBh
cmVGaWx0ZXJQcm9ncmFtKFRleHR1cmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9y
IGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGZs
b2F0IHIsIGcsIGIsIGE7Ci0gICAgICAgICAgICBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21D
b2xvcihzaGFkb3cuY29sb3IoKSkpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAgICAgICAv
LyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0Q29tcG9uZW50cyBkaXJlY3RseS4K
KyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlwbGllZEFSR0JG
cm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAg
ICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7
CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAw
LCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAg
ICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpA
QCAtNjgzLDggKzY3OCw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihj
b24KICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCku
Z2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgLy8gRklY
TUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAg
YXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xv
cikpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5j
b2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5n
QWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDExICs3
Miw3IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICBWZWN0
b3I8RDJEMV9HUkFESUVOVF9TVE9QPiBncmFkaWVudFN0b3BzOwogICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgRXh0ZW5kZWRDb2xvci4KICAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMp
IHsKLSAgICAgICAgZmxvYXQgcjsKLSAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgZmxvYXQgYjsK
LSAgICAgICAgZmxvYXQgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEp
OworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9w
KHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDI0ICsxNzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0K
IAotLy8gUHVsbGVkIGZyb20gR3JhcGhpY3NDb250ZXh0Q0cKLXN0YXRpYyB2b2lkIHNldENHU3Ry
b2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yLmdldFJHQkEocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNv
bnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9y
JiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpIHsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3Igc3BlbGxp
bmdDb2xvcigyNTUsIDAsIDApOwotICAgIHJldHVybiBzcGVsbGluZ0NvbG9yOwotfQotCi1zdGF0
aWMgY29uc3QgQ29sb3ImIGdyYW1tYXJQYXR0ZXJuQ29sb3IoKSB7Ci0gICAgc3RhdGljIGNvbnN0
IENvbG9yIGdyYW1tYXJDb2xvcigwLCAxMjgsIDApOwotICAgIHJldHVybiBncmFtbWFyQ29sb3I7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTIxNiw4ICsxOTgsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbgogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
IAotICAgIGNvbnN0IENvbG9yJiBwYXR0ZXJuQ29sb3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBhdHRlcm5Db2xvcigpIDog
c3BlbGxpbmdQYXR0ZXJuQ29sb3IoKTsKLSAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHBh
dHRlcm5Db2xvcik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBzcGVsbGluZ1Bh
dHRlcm5Db2xvciB7IG1ha2VSR0IoMjU1LCAwLCAwKSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
U2ltcGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5Db2xvciB7IG1ha2VSR0IoMCwgMTI4LCAwKSB9Owor
CisgICAgY29uc3QgU2ltcGxlQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0gRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9y
IDogc3BlbGxpbmdQYXR0ZXJuQ29sb3I7CisgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3Io
Y29udGV4dCwgcGF0dGVybkNvbG9yLnJlZENvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmJsdWVDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmFs
cGhhQ29tcG9uZW50KCkpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZSA9IGdl
dFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2ludCBwaGFzZSA9IENHUG9pbnRBcHBs
eUFmZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgYm9vbCB0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3Vu
ZAogewogICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgbGVnaWJpbGl0eTog
YSBjb250cmFzdCByYXRpbyBvZiA0LjU6MSBvciBncmVhdGVyLgogICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdAotICAgIHJl
dHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvciwgYmFja2dyb3VuZENvbG9yKSA+IDQuNTsKKyAg
ICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
LCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA+IDQuNTsKIH0KIAog
c3RhdGljIENvbG9yIGFkanVzdENvbG9yRm9yVmlzaWJpbGl0eU9uQmFja2dyb3VuZChjb25zdCBD
b2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQpJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMjAtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCBDb2xv
cjo6Z2V0UkdCQQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRD
b2xvckZpbGxGcm9tV2ViQ29yZUNvbG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgQ29sb3I6OmdldFJHQkEgd2l0aCBDb2xv
cjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpCisKIDIwMjAtMDUtMTkgIFBlciBBcm5lIFZvbGxh
biAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEZpeCBtZXNzYWdlIGZpbHRl
ciBzYW5kYm94IHZpb2xhdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw4ICs4Miw3IEBAIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGRvdWJs
ZSByLCBnLCBiLCBhOwotICAgIHdlYkNvcmVDb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9y
LT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzM3LDggKzMzNyw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAg
ICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAg
ICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAg
ICAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAgICAgICAgICAgY29s
b3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgYXV0
byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRv
cHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2MCw3ICs2NjAsMTEgQEAgYm9vbCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29s
bwogICAgIGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGJnQ29sb3IuZ2V0UkdCQSgqcmVkLCAqZ3JlZW4sICpibHVlLCAqYWxwaGEpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAg
KnJlZCA9IHI7CisgICAgKmdyZWVuID0gZzsKKyAgICAqYmx1ZSA9IGI7CisgICAgKmFscGhhID0g
YTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399773</attachid>
            <date>2020-05-19 15:12:56 -0700</date>
            <delta_ts>2020-05-19 15:58:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519151255.patch</filename>
            <type>text/plain</type>
            <size>34647</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ciBhbmQgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFJlbW92ZXMgdGhlIGF3a3dhcmQgYW5kIGFs
bW9zdCBhbHdheXMgaW5jb3JyZWN0IG91dCBwYXJhbWV0ZXIgYmFzZWQgQ29sb3I6OmdldFJHQkEu
IE1vc3QgZXhpc3RpbmcgY2FsbHNpdGVzCisgICAgICAgIHdlcmUgdXBkYXRlZCB0byB1c2UgQ29s
b3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBvciBvdGhlciBtb3JlIEV4dGVuZGVkQ29sb3Ig
c3VwcG9ydGluZyBmdW5jdGlvbnMgKGxpa2UgCisgICAgICAgIGNhY2hlZENHQ29sb3IoKSkuIAor
ICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIHR1cGxlLWxpa2UgYWRhcHRvcnMgZm9yIEZsb2F0
Q29tcG9uZW50cyB0byBhbGxvdyBpdCB0byBiZSB1c2VkCisgICAgICAgIHdpdGggc3RydWN0dXJl
ZCBiaW5kaW5ncy4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBteUZsb2F0Q29tcG9uZW50czsKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3Qp
OgorICAgICAgICBBZG9wdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gbWFrZSB0aGVzZSBu
b3QgcmV0dXJuIHRvdGFsbHkgaW5jb3JyZWN0IHZhbHVlcy4KKworICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgQWRkZWQuIFJl
dHVybnMgYSBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBmb3IgZnVuY3Rp
b25zIHRoYXQgbmVlZAorICAgICAgICB0byBvcGVyYXRlIG9uIHRoZSBjb21wb25lbnRzIGluIGEg
Q29sb3JTcGFjZSBhd2FyZSB3YXkuIFVzZWQgYnkgdG9TUkdCQUNvbXBvbmVudHNMb3NzeQorICAg
ICAgICBhbmQgbGVha0NHQ29sb3IoKSBmb3Igbm93LCBidXQgd2lsbCBiZSB1c2VmdWwgZ29pbmcg
Zm9yd2FyZCBhcyB3ZWxsLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBv
bmVudHNMb3NzeSBjb25zdCk6CisgICAgICAgIFJlLWltcGxlbWVudCB1c2luZyBjb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpIHRvIHNpbXBsaWZ5IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Z2V0UkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0Q29tcG9uZW50czo6RmxvYXRDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0Q29tcG9uZW50czo6Z2V0IGNvbnN0KToKKyAgICAgICAgUmVtb3ZlIHVzZXMgb2YgdGhl
IENvbG9yIGNsYXNzIHRvIHNpbXBsaWZ5IGlubGluaW5nIChDb2xvci5oIGFscmVhZHkgbmVlZHMg
dG8ga25vdyBhYm91dAorICAgICAgICBGbG9hdENvbXBvbmVudHMpLiAKKyAgICAgICAgICAgIC0g
RmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHJlcGxhY2VkIGJ5IENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkuIAorICAgICAgICAgICAgLSBzUkdCQ29sb3JUb0xpbmVhckNvbXBvbmVu
dHMgcmVwbGFjZWQgYnkgY2FsbGluZyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBzdGQ6OnR1
cGxlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8gYWxsb3cgdXNpbmcgd2l0aCBzdHVj
dHVyZWQgYmluZGluZ3MuIAorCisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zl
cmxheUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUlu
Zm86Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JB
IHdpdGggY2FjaGVkQ0dDb2xvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IGNhY2hlZENHQ29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGgg
Y2FjaGVkQ0dDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZVJHQkFGcm9tQ29sb3Ip
OgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRDb2xvclN0b3BSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvcm5lckNvbG9yUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUNvbG9yU3Rv
cCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9zc3ku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxlYWtDR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiAoYW5kIHJlbW92ZSB1c2Ugb2YgZ2V0
UkdCQSkgYnkgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBj
b2xvclNwYWNlQW5kQ29tcG9uZW50KCkuIAorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmVwbGFjZSBGbG9hdENvbXBvbmVudHMgY29u
c3RydWN0b3IgdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0UkdCQSkgd2l0aCB0b1NSR0JB
Q29tcG9uZW50c0xvc3N5LgorICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBSZXBsYWNlIGdl
dFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVy
YXRvciBHZGtSR0JBIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9TUkdC
QUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgUmVwbGFj
ZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdp
dGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzcGVsbGluZ1Bh
dHRlcm5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpncmFtbWFyUGF0dGVybkNv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFjZSB1c2Ugb2YgZ2V0UkdCQSB3aXRoIGRpcmVj
dCB1c2Ugb2YgU2ltcGxlQ29sb3IgaW5zdGVhZC4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVy
aW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDb2xvcklzTGVn
aWJsZUFnYWluc3RCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGltcGxpY2l0IEZs
b2F0Q29tcG9uZW50cyBjb25zdHJ1Y3Rpb24gdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0
UkdCQSkgd2l0aCBleHBsaWNpdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCiAyMDIwLTA1LTE5
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgSURCUmVxdWVz
dERhdGEgYW5kIElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24gc2hvdWxkIGluaXRpYWxp
emUgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgZmllbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJl
dmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2Fn
ZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw3IEBAIHN0cnVj
dCBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyB7CiAgICAgICAgICwgaXNTdWJjYXRlZ29yeShz
dWJjYXRlZ29yeSkKICAgICAgICAgLCB0eXBlKGNhdGVnb3J5KQogICAgIHsKLSAgICAgICAgZmxv
YXQgciwgZywgYiwgYTsKLSAgICAgICAgQ29sb3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9Lmdl
dFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgIGNvbG9yID0gYWRvcHRDRihjcmVhdGVDb2xvcihy
LCBnLCBiLCBhKSk7CisgICAgICAgIGNvbG9yID0gY2FjaGVkQ0dDb2xvcihTaW1wbGVDb2xvciB7
IGFyZ2IgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIG5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1MCwxNCArMzUwLDE0IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiAgICAgCiAgICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKLSAg
ICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwgYSk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKLSAgICBmbG9hdCB2ID0g
c3RkOjptYXgociwgc3RkOjptYXgoZywgYikpOworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKQorICAgIGlmICh2ID09IDAuMGYpIHsKICAg
ICAgICAgLy8gTGlnaHRlbmVkIGJsYWNrIHdpdGggYWxwaGEuCiAgICAgICAgIHJldHVybiBDb2xv
cigweDU0LCAweDU0LCAweDU0LCBhbHBoYSgpKTsKKyAgICB9CiAKICAgICBmbG9hdCBtdWx0aXBs
aWVyID0gc3RkOjptaW4oMS4wZiwgdiArIDAuMzNmKSAvIHY7CiAKQEAgLTM3NSwxMCArMzc1LDkg
QEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxl
RmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwogCi0gICAgZmxvYXQgciwgZywgYiwg
YTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCi0gICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHIsIHN0ZDo6
bWF4KGcsIGIpKTsKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZs
b2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCiAgICAg
cmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3Rv
ciksCkBAIC0zODksMTMgKzM4OCwxMCBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAKIGJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdy
ZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci0gICAgZ2V0UkdCQShyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9
IHN0ZDo6bWF4KHJlZCwgc3RkOjptYXgoZ3JlZW4sIGJsdWUpKTsKLSAgICByZXR1cm4gYWxwaGEg
PiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgorICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGZsb2F0IGxhcmdlc3ROb25BbHBo
YUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CisgICAgcmV0dXJuIGEgPiAwLjUgJiYg
bGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KIAogc3RhdGljIGludCBibGVuZENvbXBv
bmVudChpbnQgYywgaW50IGEpCkBAIC00NzEsMjIgKzQ2Nyw2IEBAIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENv
bG9yOjpnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25z
dAotewotICAgIHIgPSByZWQoKSAvIDI1NS4wZjsKLSAgICBnID0gZ3JlZW4oKSAvIDI1NS4wZjsK
LSAgICBiID0gYmx1ZSgpIC8gMjU1LjBmOwotICAgIGEgPSBhbHBoYSgpIC8gMjU1LjBmOwotfQot
Ci12b2lkIENvbG9yOjpnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRv
dWJsZSYgYSkgY29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUuMDsKLSAgICBnID0gZ3JlZW4o
KSAvIDI1NS4wOwotICAgIGIgPSBibHVlKCkgLyAyNTUuMDsKLSAgICBhID0gYWxwaGEoKSAvIDI1
NS4wOwotfQotCiAvLyBGSVhNRTogVXNlIHNSR0JUb0hTTCgpLgogdm9pZCBDb2xvcjo6Z2V0SFNM
KGRvdWJsZSYgaHVlLCBkb3VibGUmIHNhdHVyYXRpb24sIGRvdWJsZSYgbGlnaHRuZXNzKSBjb25z
dAogewpAQCAtNTU1LDIyICs1MzUsMjcgQEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVl
LCBkb3VibGUmIAogICAgIHZhbHVlID0gbWF4OwogfQogCi1GbG9hdENvbXBvbmVudHMgQ29sb3I6
OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZs
b2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsK
ICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBh
c0V4dGVuZGVkKCk7Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkp
IHsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGV4
dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJS
R0I6Ci0gICAgICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKGV4dGVuZGVkQ29s
b3IuY2hhbm5lbHMoKSk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAg
ICAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVu
ZGVkQ29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIHJldHVybiB7IENvbG9yU3BhY2U6
OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8gMjU1LjBmLCBncmVlbigpIC8gMjU1LjBm
LCBibHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1LjBmIH0gfTsKK30KKworRmxvYXRDb21w
b25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3QKK3sKKyAgICBhdXRv
IHBhaXIgPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRjaCAocGFpci5maXJz
dCkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIHBhaXIuc2Vj
b25kOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICByZXR1cm4gbGlu
ZWFyVG9SR0JDb21wb25lbnRzKHBhaXIuc2Vjb25kKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRp
c3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIHAzVG9TUkdCKHBhaXIuc2Vjb25kKTsKICAgICB9Ci0g
ICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgIHJldHVy
biB7IHIsIGcsIGIsIGEgfTsKIH0KIAogQ29sb3IgY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0Io
UkdCQTMyIHBpeGVsQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDEyIEBAIHB1Ymxp
YzoKIAogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gdGhlc2Ugc2hvdWxkIGJlIHJlbmFt
ZWQgKHRvIGJlIGNsZWFyIGFib3V0IHRoZWlyIHBhcmFtZXRlciB0eXBlcywgb3IKICAgICAvLyBy
ZXBsYWNlZCB3aXRoIGFsdGVybmF0aXZlIGFjY2Vzc29ycy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGdldFJHQkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwgZmxvYXQmIGEpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywg
ZG91YmxlJiBiLCBkb3VibGUmIGEpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBn
ZXRIU0woZG91YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgbCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBnZXRIU1YoZG91YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgdikgY29u
c3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21w
b25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCiAgICAgLy8gVGhpcyB3
aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgogICAgIFdF
QkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTYg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMu
aCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdENvbXBvbmVudHM6OkZsb2F0Q29tcG9uZW50cyhj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgY29sb3IuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBj
b21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKLX0KLQogQ29sb3JD
b21wb25lbnRzOjpDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBmbG9hdENv
bXBvbmVudHMpCiB7CiAgICAgY29tcG9uZW50c1swXSA9IGNsYW1wZWRDb2xvckNvbXBvbmVudChm
bG9hdENvbXBvbmVudHMuY29tcG9uZW50c1swXSk7CkBAIC02OSwxOCArNjMsNiBAQCBmbG9hdCBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJuIGNsYW1wVG88Zmxv
YXQ+KHN0ZDo6cG93KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCi1G
bG9hdENvbXBvbmVudHMgc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGNvbG9yLmdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChy
KSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChnKSwKLSAgICAgICAgcmdiVG9M
aW5lYXJDb2xvckNvbXBvbmVudChiKSwKLSAgICAgICAgYQotICAgIH07Ci19Ci0KIEZsb2F0Q29t
cG9uZW50cyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBSR0JD
b2xvcikKIHsKICAgICByZXR1cm4gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMSw4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7
Ci0KIHN0cnVjdCBGbG9hdENvbXBvbmVudHMgewogICAgIEZsb2F0Q29tcG9uZW50cyhmbG9hdCBh
ID0gMCwgZmxvYXQgYiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKICAgICB7CkBAIC01
MCw4ICs0OCw2IEBAIHN0cnVjdCBGbG9hdENvbXBvbmVudHMgewogICAgICAgICBjb21wb25lbnRz
WzNdID0gdmFsdWVzWzNdOwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyhjb25zdCBDb2xv
ciYpOwotCiAgICAgRmxvYXRDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9u
ZW50cyYgcmhzKQogICAgIHsKICAgICAgICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50
c1swXTsKQEAgLTEwMSw2ICs5NywxMiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgor
ICAgIGZsb2F0IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29tcG9uZW50c1tO
XTsKKyAgICB9CisKICAgICBzdGQ6OmFycmF5PGZsb2F0LCA0PiBjb21wb25lbnRzOwogfTsKIApA
QCAtMTc2LDcgKzE3OCw2IEBAIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNp
Z24KIGZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwogZmxvYXQgcmdiVG9M
aW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCk7CiAKLUZsb2F0Q29tcG9uZW50cyBzUkdCQ29sb3JU
b0xpbmVhckNvbXBvbmVudHMoY29uc3QgQ29sb3ImKTsKIEZsb2F0Q29tcG9uZW50cyByZ2JUb0xp
bmVhckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CiBGbG9hdENvbXBvbmVudHMg
bGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogCkBAIC0yMTAs
MyArMjExLDE2IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNw
YWNlIHN0ZCB7CisKK3RlbXBsYXRlPD4KK2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6RmxvYXRD
b21wb25lbnRzPiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0
PiB7Cit9OworCit0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorY2xhc3MgdHVwbGVfZWxlbWVudDxO
LCBXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0g
ZmxvYXQ7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAkocmV2aXNp
b24gMjYxODg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NiwxMyArNTc2LDcgQEAg
Q29sb3IgUGxhdGZvcm1DQUxheWVyV2luOjpiYWNrZ3JvdW5kQ29sbwogCiB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKLSAg
ICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgdmFsdWUuZ2V0UkdCQShjb21wb25lbnRzWzBd
LCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKLQotICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBh
ZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOwotCi0g
ICAgQ0FDRkxheWVyU2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCksIGNvbG9yLmdldCgp
KTsKKyAgICBDQUNGTGF5ZXJTZXRCYWNrZ3JvdW5kQ29sb3IobV9sYXllci5nZXQoKSwgY2FjaGVk
Q0dDb2xvcihjb2xvcikpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAkocmV2aXNpb24gMjYxODg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDE1ICszMTIsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3JkCiAKIHZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKLSAg
ICBDR0Zsb2F0IGNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLSAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKSk7Ci0KLSAgICBpZiAodmFsdWUuaXNWYWxpZCgpKQotICAgICAgICB2YWx1ZS5n
ZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBv
bmVudHNbM10pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihD
R0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLQotICAgIENBQ0ZM
YXllclNldEJvcmRlckNvbG9yKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgY29sb3IuZ2V0KCkp
OworICAgIENBQ0ZMYXllclNldEJvcmRlckNvbG9yKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwg
Y2FjaGVkQ0dDb2xvcih2YWx1ZSkpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsMTMgKzgzLDgg
QEAgdm9pZCBjb3B5Q29udGV4dFByb3BlcnRpZXMoY2Fpcm9fdCogc3JjQwogCiB2b2lkIHNldFNv
dXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIGNhaXJvX3NldF9zb3VyY2Vf
cmdiYShjb250ZXh0LCBjb2xvci5hc0V4dGVuZGVkKCkucmVkKCksIGNvbG9yLmFzRXh0ZW5kZWQo
KS5ncmVlbigpLCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpLCBjb2xvci5hc0V4dGVuZGVkKCku
YWxwaGEoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhOwotICAgICAgICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIs
IGEpOwogfQogCiB2b2lkIGFwcGVuZFBhdGhUb0NhaXJvQ29udGV4dChjYWlyb190KiB0bywgY2Fp
cm9fdCogZnJvbSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDggQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1E
ZXN0cm95KCkKIAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3Qg
KmdyYWRpZW50LCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQog
ewotICAgIGlmIChzdG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjYWlyb19wYXR0
ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9y
LmFzRXh0ZW5kZWQoKS5yZWQoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSwKLSAg
ICAgICAgICAgIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgc3RvcC5jb2xvci5hc0V4
dGVuZGVkKCkuYWxwaGEoKSAqIGdsb2JhbEFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBm
bG9hdCByLCBnLCBiLCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7
Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3Rv
cC5vZmZzZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfQorICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgY2Fp
cm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwg
ZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV1BFKQpAQCAtNjEsMTQgKzU1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0
YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBp
bnQgaWQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0g
ICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGNhaXJvX21lc2hfcGF0
dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCBzdG9wLmNvbG9yLmFzRXh0
ZW5kZWQoKS5yZWQoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSwKLSAgICAgICAg
ICAgIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgc3RvcC5jb2xvci5hc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIGdsb2JhbEFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBy
LCBnLCBiLCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAg
ICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlk
LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGNhaXJvX21lc2hf
cGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICog
Z2xvYmFsQWxwaGEpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRDb25pY1NlY3RvcihjYWlyb19wYXR0
ZXJuX3QgKmdyYWRpZW50LCBmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHIsIGZsb2F0IGFuZ2xl
UmFkaWFucywKQEAgLTE0NywyNCArMTM1LDggQEAgc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3Io
Y2Fpcm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNvbG9yU3RvcCBpbnRlcnBvbGF0ZUNv
bG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8p
CiB7Ci0gICAgZmxvYXQgcjEsIGcxLCBiMSwgYTE7Ci0gICAgZmxvYXQgcjIsIGcyLCBiMiwgYTI7
Ci0KLSAgICBpZiAoZnJvbS5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgcjEgPSBmcm9t
LmNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKTsKLSAgICAgICAgZzEgPSBmcm9tLmNvbG9yLmFzRXh0
ZW5kZWQoKS5ncmVlbigpOwotICAgICAgICBiMSA9IGZyb20uY29sb3IuYXNFeHRlbmRlZCgpLmJs
dWUoKTsKLSAgICAgICAgYTEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAg
IH0gZWxzZQotICAgICAgICBmcm9tLmNvbG9yLmdldFJHQkEocjEsIGcxLCBiMSwgYTEpOwotCi0g
ICAgaWYgKHRvLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICByMiA9IHRvLmNvbG9yLmFz
RXh0ZW5kZWQoKS5yZWQoKTsKLSAgICAgICAgZzIgPSB0by5jb2xvci5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKTsKLSAgICAgICAgYjIgPSB0by5jb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAg
ICBhMiA9IHRvLmNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAgIH0gZWxzZQotICAgICAg
ICB0by5jb2xvci5nZXRSR0JBKHIyLCBnMiwgYjIsIGEyKTsKKyAgICBhdXRvIFtyMSwgZzEsIGIx
LCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFty
MiwgZzIsIGIyLCBhMl0gPSB0by5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAg
ICBmbG9hdCBvZmZzZXQgPSBmcm9tLm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkg
KiAwLjVmOwogICAgIGZsb2F0IHIgPSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNp
b24gMjYxODg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywyNyArMTAzLDE5IEBAIENvbG9yOjpDb2xvcihD
R0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1QKIAogc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKLSAg
ICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGV4dGVuZGVk
Q29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7Ci0gICAgICAgIGF1dG8gY2hhbm5lbHMgPSBleHRl
bmRlZENvbG9yLmNoYW5uZWxzKCk7Ci0gICAgICAgIGNvbXBvbmVudHNbMF0gPSBjaGFubmVscy5j
b21wb25lbnRzWzBdOwotICAgICAgICBjb21wb25lbnRzWzFdID0gY2hhbm5lbHMuY29tcG9uZW50
c1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IGNoYW5uZWxzLmNvbXBvbmVudHNbMl07Ci0g
ICAgICAgIGNvbXBvbmVudHNbM10gPSBjaGFubmVscy5jb21wb25lbnRzWzNdOwotICAgICAgICBz
d2l0Y2ggKGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpKSB7Ci0gICAgICAgIGNhc2UgQ29sb3JT
cGFjZTo6U1JHQjoKLSAgICAgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNw
YWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzoKLSAgICAgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKGRpc3BsYXlQM0NvbG9yU3BhY2VS
ZWYoKSwgY29tcG9uZW50cyk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgot
ICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIGV2ZXIgY3JlYXRlIENHQ29sb3JSZWZzIGluIHRo
ZXNlIHNwYWNlcz8gSXQgbWF5IG9ubHkgYmUgSW1hZ2VCdWZmZXJzLgotICAgICAgICAgICAgcmV0
dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7Ci0gICAg
ICAgIH0KKyAgICBhdXRvIHBhaXIgPSBjb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcGFpci5zZWNvbmQ7CisgICAgQ0dGbG9hdCBjZ0Zsb2F0
Q29tcG9uZW50c1s0XSB7IHIsIGcsIGIsIGEgfTsKKworICAgIHN3aXRjaCAocGFpci5maXJzdCkg
eworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIENHQ29sb3JDcmVh
dGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVudHMpOworICAgIGNhc2UgQ29s
b3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShkaXNwbGF5
UDNDb2xvclNwYWNlUmVmKCksIGNnRmxvYXRDb21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9yU3Bh
Y2U6OkxpbmVhclJHQjoKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIGV2ZXIgY3JlYXRlIENHQ29s
b3JSZWZzIGluIHRoZXNlIHNwYWNlcz8gSXQgbWF5IG9ubHkgYmUgSW1hZ2VCdWZmZXJzLgorICAg
ICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjZ0Zsb2F0Q29t
cG9uZW50cyk7CiAgICAgfQotCi0gICAgY29sb3IuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21w
b25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKLSAgICByZXR1cm4gQ0dD
b2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKIH0KIAogQ0dDb2xv
clJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lv
biAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVu
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDggQEAgQ0dHcmFkaWVudFJlZiBH
cmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudAogICAgICAgICBpZiAoc3RvcC5jb2xvci5pc0V4dGVu
ZGVkKCkpCiAgICAgICAgICAgICBoYXNFeHRlbmRlZENvbG9ycyA9IHRydWU7CiAKLSAgICAgICAg
ZmxvYXQgcjsKLSAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgZmxv
YXQgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBh
dXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAg
ICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKHIpOwogICAgICAgICBjb2xvckNv
bXBvbmVudHMudW5jaGVja2VkQXBwZW5kKGcpOwogICAgICAgICBjb2xvckNvbXBvbmVudHMudW5j
aGVja2VkQXBwZW5kKGIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDQsNyArNDA0LDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3
TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRo
IC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAgICAK
LSAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkg
PT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyht
X2xpZ2h0aW5nQ29sb3IpIDogRmxvYXRDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcik7CisgICAg
RmxvYXRDb21wb25lbnRzIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENv
bG9yU3BhY2U6OkxpbmVhclJHQikgPyByZ2JUb0xpbmVhckNvbXBvbmVudHMobV9saWdodGluZ0Nv
bG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgOiBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKGxpZ2h0Q29sb3IuY29tcG9uZW50c1swXSwgbGlnaHRD
b2xvci5jb21wb25lbnRzWzFdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMl0pOwogICAgIG1fbGln
aHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDggKzExMSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJh
bnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50czsKLSAgICBjb2xvci5n
ZXRSR0JBKGNvbXBvbmVudHMuY29tcG9uZW50c1swXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzFd
LCBjb21wb25lbnRzLmNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHMuY29tcG9uZW50c1szXSk7Cisg
ICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAg
ICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3IoY29tcG9uZW50cykpCkBAIC0xMzEs
OCArMTMwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAg
IGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZs
b2F0Q29tcG9uZW50cyBjb21wb25lbnRzOwotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5j
b21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9u
ZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMg
Y29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAo
YXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9u
LT5pbnZlcnNlVHJhbnNmb3JtQ29sb3IoY29tcG9uZW50cykpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI2
MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiw4IEBAIENvbG9yOjpDb2xvcihjb25zdCBH
ZGtSR0JBJiBjKQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgaWYg
KGlzRXh0ZW5kZWQoKSkgewotICAgICAgICBhdXRvIGFzUkdCQSA9IHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKLSAgICAgICAgcmV0dXJuIHsgYXNSR0JBLmNvbXBvbmVudHNbMF0sIGFzUkdCQS5j
b21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNSR0JBLmNvbXBvbmVudHNbM10g
fTsKLSAgICB9Ci0KLSNpZiBVU0UoR1RLNCkKLSAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYTsKLSNlbHNlCi0gICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotI2VuZGlm
Ci0gICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgcmV0dXJuIHsgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDggKzI1Myw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9y
ZGVyKGNvbnN0IEMKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0g
PSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29s
aWRDb2xvcik7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAg
IGZsb2F0IHIsIGcsIGIsIGE7Ci0gICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Io
Y29sb3IpKS5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVs
dGlwbHkgb24gRmxvYXRDb21wb25lbnRzIGRpcmVjdGx5LgorICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCBy
LCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3NiwxMyArMjc2LDgg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bQogICAgIGNhaXJvX3Qq
IGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAgICAgLy8gU2luY2Ugd2Ugd29uJ3Qgc3dh
cCBSK0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBwYWludCB3aXRoIHRoZSBzd2FwcGVkIFIr
QiBjb2xvci4KLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEoY3IsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIGNvbG9yLmFzRXh0ZW5k
ZWQoKS5ncmVlbigpLCBjb2xvci5hc0V4dGVuZGVkKCkucmVkKCksIGNvbG9yLmFzRXh0ZW5kZWQo
KS5hbHBoYSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAg
ICAgY29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2JhKGNyLCBiLCBnLCByLCBhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNy
LCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgY2Fpcm9fZmlsbChjcik7CkBAIC00MjAsOCArNDE1LDggQEAgc3RhdGljIHZv
aWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFk
b3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAg
ICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgICAgIENvbG9yKHByZW11bHRpcGxpZWRB
UkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21wb25lbnRzIGRp
cmVjdGx5LgorICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcihzaGFkb3cuY29sb3IoKSkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0
aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsK
ICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwg
MCwgMCk7CkBAIC02ODMsOCArNjc4LDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xp
ZENvbG9yKGNvbgogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIENvbG9yKHBy
ZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbG9yKSkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAg
ICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0Q29tcG9uZW50cyBkaXJlY3Rs
eS4KKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKGNvbG9yKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogICAgIGdsVW5pZm9ybTRmKHBy
b2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlz
QmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGll
bnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsMTEgKzcyLDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgog
ICAgIFZlY3RvcjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7CiAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBFeHRlbmRlZENvbG9yLgogICAgIGZvciAoYXV0byBzdG9wIDog
bV9zdG9wcykgewotICAgICAgICBmbG9hdCByOwotICAgICAgICBmbG9hdCBnOwotICAgICAgICBm
bG9hdCBiOwotICAgICAgICBmbG9hdCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwg
ZywgYiwgYSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmFwcGVuZChEMkQxOjpHcmFk
aWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMjQgKzE3MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRl
eHQpOwogfQogCi0vLyBQdWxsZWQgZnJvbSBHcmFwaGljc0NvbnRleHRDRwotc3RhdGljIHZvaWQg
c2V0Q0dTdHJva2VDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIENHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IuZ2V0
UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tl
Q29sb3IoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi1zdGF0aWMgY29u
c3QgQ29sb3ImIHNwZWxsaW5nUGF0dGVybkNvbG9yKCkgewotICAgIHN0YXRpYyBjb25zdCBDb2xv
ciBzcGVsbGluZ0NvbG9yKDI1NSwgMCwgMCk7Ci0gICAgcmV0dXJuIHNwZWxsaW5nQ29sb3I7Ci19
Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgZ3JhbW1hclBhdHRlcm5Db2xvcigpIHsKLSAgICBzdGF0
aWMgY29uc3QgQ29sb3IgZ3JhbW1hckNvbG9yKDAsIDEyOCwgMCk7Ci0gICAgcmV0dXJuIGdyYW1t
YXJDb2xvcjsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjE2LDggKzE5OCwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogCi0gICAgY29uc3QgQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0g
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNv
bG9yKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcigpOwotICAgIHNldENHU3Ryb2tlQ29sb3IoY29u
dGV4dCwgcGF0dGVybkNvbG9yKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHNw
ZWxsaW5nUGF0dGVybkNvbG9yIHsgbWFrZVJHQigyNTUsIDAsIDApIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVJHQigwLCAxMjgs
IDApIH07CisKKyAgICBjb25zdCBTaW1wbGVDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUubW9k
ZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0
ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKKyAgICBDR0NvbnRleHRTZXRSR0JTdHJv
a2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IucmVkQ29tcG9uZW50KCksIHBhdHRlcm5Db2xv
ci5ncmVlbkNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwYXR0ZXJu
Q29sb3IuYWxwaGFDb21wb25lbnQoKSk7CiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9C
YXNlID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKICAgICBDR1BvaW50IHBoYXNlID0gQ0dQ
b2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvaW50LCB1c2VyVG9CYXNlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYxODg2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWluc3RC
YWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdp
YmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0
Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IpID4g
NC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpID4gNC41
OwogfQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5k
KGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wNS0xOCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMgaW5jb3Jy
ZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQg
U2ltb24gRnJhc2VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3Iu
Y3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIENv
bG9yOjpnZXRSR0JBIHdpdGggQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKQorCiAyMDIw
LTA1LTE5ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBGaXggbWVzc2FnZSBmaWx0ZXIgc2FuZGJveCB2aW9sYXRpb24KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAy
NjE4ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZy
b21XZWJDb3JlQ29sb3IoY29uCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNvbG9yLmlz
VmFsaWQoKSk7CiAKLSAgICBkb3VibGUgciwgZywgYiwgYTsKLSAgICB3ZWJDb3JlQ29sb3IuZ2V0
UkdCQShyLCBnLCBiLCBhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3It
PmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAko
cmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0
dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw4ICszMzcsNyBAQCB2
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAgIGlmIChjb2xv
ci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNu
YXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQ
YXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
OwotICAgICAgICAgICAgICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lw
ZVNuYXBzaG90UGF0dGVybiA9IGFkb3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNp
b24gMjYxODg2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDExIEBAIGJvb2wgV2ViRnJhbWU6Omdl
dERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBiZ0NvbG9yLmdldFJHQkEoKnJlZCwgKmdyZWVuLCAq
Ymx1ZSwgKmFscGhhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgICpyZWQgPSByOworICAgICpncmVlbiA9IGc7CisgICAgKmJs
dWUgPSBiOworICAgICphbHBoYSA9IGE7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399777</attachid>
            <date>2020-05-19 15:58:32 -0700</date>
            <delta_ts>2020-05-19 18:02:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519155831.patch</filename>
            <type>text/plain</type>
            <size>34775</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ciBhbmQgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFJlbW92ZXMgdGhlIGF3a3dhcmQgYW5kIGFs
bW9zdCBhbHdheXMgaW5jb3JyZWN0IG91dCBwYXJhbWV0ZXIgYmFzZWQgQ29sb3I6OmdldFJHQkEu
IE1vc3QgZXhpc3RpbmcgY2FsbHNpdGVzCisgICAgICAgIHdlcmUgdXBkYXRlZCB0byB1c2UgQ29s
b3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBvciBvdGhlciBtb3JlIEV4dGVuZGVkQ29sb3Ig
c3VwcG9ydGluZyBmdW5jdGlvbnMgKGxpa2UgCisgICAgICAgIGNhY2hlZENHQ29sb3IoKSkuIAor
ICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIHR1cGxlLWxpa2UgYWRhcHRvcnMgZm9yIEZsb2F0
Q29tcG9uZW50cyB0byBhbGxvdyBpdCB0byBiZSB1c2VkCisgICAgICAgIHdpdGggc3RydWN0dXJl
ZCBiaW5kaW5ncy4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBteUZsb2F0Q29tcG9uZW50czsKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3Qp
OgorICAgICAgICBBZG9wdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gbWFrZSB0aGVzZSBu
b3QgcmV0dXJuIHRvdGFsbHkgaW5jb3JyZWN0IHZhbHVlcy4KKworICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgQWRkZWQuIFJl
dHVybnMgYSBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBmb3IgZnVuY3Rp
b25zIHRoYXQgbmVlZAorICAgICAgICB0byBvcGVyYXRlIG9uIHRoZSBjb21wb25lbnRzIGluIGEg
Q29sb3JTcGFjZSBhd2FyZSB3YXkuIFVzZWQgYnkgdG9TUkdCQUNvbXBvbmVudHNMb3NzeQorICAg
ICAgICBhbmQgbGVha0NHQ29sb3IoKSBmb3Igbm93LCBidXQgd2lsbCBiZSB1c2VmdWwgZ29pbmcg
Zm9yd2FyZCBhcyB3ZWxsLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBv
bmVudHNMb3NzeSBjb25zdCk6CisgICAgICAgIFJlLWltcGxlbWVudCB1c2luZyBjb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpIHRvIHNpbXBsaWZ5IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Z2V0UkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0Q29tcG9uZW50czo6RmxvYXRDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0Q29tcG9uZW50czo6Z2V0IGNvbnN0KToKKyAgICAgICAgUmVtb3ZlIHVzZXMgb2YgdGhl
IENvbG9yIGNsYXNzIHRvIHNpbXBsaWZ5IGlubGluaW5nIChDb2xvci5oIGFscmVhZHkgbmVlZHMg
dG8ga25vdyBhYm91dAorICAgICAgICBGbG9hdENvbXBvbmVudHMpLiAKKyAgICAgICAgICAgIC0g
RmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHJlcGxhY2VkIGJ5IENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkuIAorICAgICAgICAgICAgLSBzUkdCQ29sb3JUb0xpbmVhckNvbXBvbmVu
dHMgcmVwbGFjZWQgYnkgY2FsbGluZyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBzdGQ6OnR1
cGxlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8gYWxsb3cgdXNpbmcgd2l0aCBzdHVj
dHVyZWQgYmluZGluZ3MuIAorCisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zl
cmxheUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUlu
Zm86Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JB
IHdpdGggY2FjaGVkQ0dDb2xvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IGNhY2hlZENHQ29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGgg
Y2FjaGVkQ0dDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZVJHQkFGcm9tQ29sb3Ip
OgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRDb2xvclN0b3BSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvcm5lckNvbG9yUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUNvbG9yU3Rv
cCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9zc3ku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxlYWtDR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiAoYW5kIHJlbW92ZSB1c2Ugb2YgZ2V0
UkdCQSkgYnkgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBj
b2xvclNwYWNlQW5kQ29tcG9uZW50KCkuIAorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmVwbGFjZSBGbG9hdENvbXBvbmVudHMgY29u
c3RydWN0b3IgdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0UkdCQSkgd2l0aCB0b1NSR0JB
Q29tcG9uZW50c0xvc3N5LgorICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBSZXBsYWNlIGdl
dFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVy
YXRvciBHZGtSR0JBIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9TUkdC
QUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgUmVwbGFj
ZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdp
dGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzcGVsbGluZ1Bh
dHRlcm5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpncmFtbWFyUGF0dGVybkNv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFjZSB1c2Ugb2YgZ2V0UkdCQSB3aXRoIGRpcmVj
dCB1c2Ugb2YgU2ltcGxlQ29sb3IgaW5zdGVhZC4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVy
aW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDb2xvcklzTGVn
aWJsZUFnYWluc3RCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGltcGxpY2l0IEZs
b2F0Q29tcG9uZW50cyBjb25zdHJ1Y3Rpb24gdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0
UkdCQSkgd2l0aCBleHBsaWNpdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCiAyMDIwLTA1LTE5
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgSURCUmVxdWVz
dERhdGEgYW5kIElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24gc2hvdWxkIGluaXRpYWxp
emUgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgZmllbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJl
dmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2Fn
ZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw3IEBAIHN0cnVj
dCBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyB7CiAgICAgICAgICwgaXNTdWJjYXRlZ29yeShz
dWJjYXRlZ29yeSkKICAgICAgICAgLCB0eXBlKGNhdGVnb3J5KQogICAgIHsKLSAgICAgICAgZmxv
YXQgciwgZywgYiwgYTsKLSAgICAgICAgQ29sb3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9Lmdl
dFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgIGNvbG9yID0gYWRvcHRDRihjcmVhdGVDb2xvcihy
LCBnLCBiLCBhKSk7CisgICAgICAgIGNvbG9yID0gY2FjaGVkQ0dDb2xvcihTaW1wbGVDb2xvciB7
IGFyZ2IgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIG5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1MCwxNCArMzUwLDE0IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiAgICAgCiAgICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKLSAg
ICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwgYSk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKLSAgICBmbG9hdCB2ID0g
c3RkOjptYXgociwgc3RkOjptYXgoZywgYikpOworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKQorICAgIGlmICh2ID09IDAuMGYpIHsKICAg
ICAgICAgLy8gTGlnaHRlbmVkIGJsYWNrIHdpdGggYWxwaGEuCiAgICAgICAgIHJldHVybiBDb2xv
cigweDU0LCAweDU0LCAweDU0LCBhbHBoYSgpKTsKKyAgICB9CiAKICAgICBmbG9hdCBtdWx0aXBs
aWVyID0gc3RkOjptaW4oMS4wZiwgdiArIDAuMzNmKSAvIHY7CiAKQEAgLTM3NSwxMCArMzc1LDkg
QEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxl
RmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwogCi0gICAgZmxvYXQgciwgZywgYiwg
YTsKLSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCi0gICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHIsIHN0ZDo6
bWF4KGcsIGIpKTsKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZs
b2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCiAgICAg
cmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3Rv
ciksCkBAIC0zODksMTMgKzM4OCwxMCBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAKIGJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdy
ZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci0gICAgZ2V0UkdCQShyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9
IHN0ZDo6bWF4KHJlZCwgc3RkOjptYXgoZ3JlZW4sIGJsdWUpKTsKLSAgICByZXR1cm4gYWxwaGEg
PiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgorICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGZsb2F0IGxhcmdlc3ROb25BbHBo
YUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CisgICAgcmV0dXJuIGEgPiAwLjUgJiYg
bGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KIAogc3RhdGljIGludCBibGVuZENvbXBv
bmVudChpbnQgYywgaW50IGEpCkBAIC00NzEsMjIgKzQ2Nyw2IEBAIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENv
bG9yOjpnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25z
dAotewotICAgIHIgPSByZWQoKSAvIDI1NS4wZjsKLSAgICBnID0gZ3JlZW4oKSAvIDI1NS4wZjsK
LSAgICBiID0gYmx1ZSgpIC8gMjU1LjBmOwotICAgIGEgPSBhbHBoYSgpIC8gMjU1LjBmOwotfQot
Ci12b2lkIENvbG9yOjpnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRv
dWJsZSYgYSkgY29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUuMDsKLSAgICBnID0gZ3JlZW4o
KSAvIDI1NS4wOwotICAgIGIgPSBibHVlKCkgLyAyNTUuMDsKLSAgICBhID0gYWxwaGEoKSAvIDI1
NS4wOwotfQotCiAvLyBGSVhNRTogVXNlIHNSR0JUb0hTTCgpLgogdm9pZCBDb2xvcjo6Z2V0SFNM
KGRvdWJsZSYgaHVlLCBkb3VibGUmIHNhdHVyYXRpb24sIGRvdWJsZSYgbGlnaHRuZXNzKSBjb25z
dAogewpAQCAtNTU1LDIyICs1MzUsMjkgQEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVl
LCBkb3VibGUmIAogICAgIHZhbHVlID0gbWF4OwogfQogCi1GbG9hdENvbXBvbmVudHMgQ29sb3I6
OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZs
b2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsK
ICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBh
c0V4dGVuZGVkKCk7Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkp
IHsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGV4
dGVuZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJS
R0I6Ci0gICAgICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKGV4dGVuZGVkQ29s
b3IuY2hhbm5lbHMoKSk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAg
ICAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVu
ZGVkQ29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIHJldHVybiB7IENvbG9yU3BhY2U6
OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8gMjU1LjBmLCBncmVlbigpIC8gMjU1LjBm
LCBibHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1LjBmIH0gfTsKK30KKworRmxvYXRDb21w
b25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3QKK3sKKyAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Cisg
ICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAg
ICAgICByZXR1cm4gY29tcG9uZW50czsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoK
KyAgICAgICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb21wb25lbnRzKTsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGNvbXBv
bmVudHMpOwogICAgIH0KLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRB
UkdCKFJHQkEzMiBwaXhlbENvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBw
dWJsaWM6CiAKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIHRoZXNlIHNob3VsZCBiZSBy
ZW5hbWVkICh0byBiZSBjbGVhciBhYm91dCB0aGVpciBwYXJhbWV0ZXIgdHlwZXMsIG9yCiAgICAg
Ly8gcmVwbGFjZWQgd2l0aCBhbHRlcm5hdGl2ZSBhY2Nlc3NvcnMuCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJHQkEoZG91YmxlJiByLCBkb3VibGUm
IGcsIGRvdWJsZSYgYiwgZG91YmxlJiBhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZ2V0SFNMKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0SFNWKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIHYp
IGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0
Q29tcG9uZW50cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIC8vIFRo
aXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KICAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDE2ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0
aWVzLmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRDb21wb25lbnRzOjpGbG9hdENvbXBvbmVu
dHMoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1sw
XSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci19Ci0KIENv
bG9yQ29tcG9uZW50czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgZmxv
YXRDb21wb25lbnRzKQogewogICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVkQ29sb3JDb21wb25l
bnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0pOwpAQCAtNjksMTggKzYzLDYgQEAgZmxv
YXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQogICAgIHJldHVybiBjbGFtcFRv
PGZsb2F0PihzdGQ6OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0K
IAotRmxvYXRDb21wb25lbnRzIHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBjb2xvci5nZXRSR0JBKHIs
IGcsIGIsIGEpOwotICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25l
bnQociksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZyksCi0gICAgICAgIHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoYiksCi0gICAgICAgIGEKLSAgICB9OwotfQotCiBGbG9h
dENvbXBvbmVudHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYg
UkdCQ29sb3IpCiB7CiAgICAgcmV0dXJuIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYxODg2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENv
bG9yOwotCiBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICBGbG9hdENvbXBvbmVudHMoZmxv
YXQgYSA9IDAsIGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCiAgICAgewpA
QCAtNTAsOCArNDgsNiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgY29tcG9u
ZW50c1szXSA9IHZhbHVlc1szXTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3Qg
Q29sb3ImKTsKLQogICAgIEZsb2F0Q29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBGbG9hdENv
bXBvbmVudHMmIHJocykKICAgICB7CiAgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBv
bmVudHNbMF07CkBAIC0xMDEsNiArOTcsMTIgQEAgc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8c3RkOjpzaXplX3Qg
Tj4KKyAgICBmbG9hdCBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVu
dHNbTl07CisgICAgfQorCiAgICAgc3RkOjphcnJheTxmbG9hdCwgND4gY29tcG9uZW50czsKIH07
CiAKQEAgLTE3Niw3ICsxNzgsNiBAQCBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwo
dW5zaWduCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1GbG9hdENvbXBvbmVudHMgc1JHQkNv
bG9yVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yJik7CiBGbG9hdENvbXBvbmVudHMgcmdi
VG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogRmxvYXRDb21wb25l
bnRzIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKIApAQCAt
MjEwLDMgKzIxMSwxNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25h
bWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZs
b2F0Q29tcG9uZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVf
dCwgND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1l
bnQ8TiwgV2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlw
ZSA9IGZsb2F0OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJl
dmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTMgKzU3Niw3
IEBAIENvbG9yIFBsYXRmb3JtQ0FMYXllcldpbjo6YmFja2dyb3VuZENvbG8KIAogdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7
Ci0gICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50
c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9y
ID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsK
LQotICAgIENBQ0ZMYXllclNldEJhY2tncm91bmRDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5n
ZXQoKSk7CisgICAgQ0FDRkxheWVyU2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCksIGNh
Y2hlZENHQ29sb3IoY29sb3IpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MTg4
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxNSArMzEyLDcgQEAg
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZAogCiB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7
Ci0gICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAwIH07Ci0gICAgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCkpOwotCi0gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgdmFs
dWUuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBj
b21wb25lbnRzWzNdKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0
Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBD
QUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdl
dCgpKTsKKyAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVy
KCksIGNhY2hlZENHQ29sb3IodmFsdWUpKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4
Myw4IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBz
ZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY29udGV4dCwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBjb2xvci5hc0V4dGVu
ZGVkKCkuZ3JlZW4oKSwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29sb3IuYXNFeHRlbmRl
ZCgpLmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYTsKLSAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBn
LCBiLCBhKTsKIH0KIAogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8s
IGNhaXJvX3QqIGZyb20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYxODg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0Myw4IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRm
b3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVy
bl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBo
YSkKIHsKLSAgICBpZiAoc3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgY2Fpcm9f
cGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgc3RvcC5j
b2xvci5hc0V4dGVuZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCks
Ci0gICAgICAgICAgICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3Iu
YXNFeHRlbmRlZCgpLmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIs
IGEpOwotICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQs
IHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAg
IGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQs
IHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKFdQRSkKQEAgLTYxLDE0ICs1NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3Qgewog
CiBzdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVu
dCwgaW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQog
ewotICAgIGlmIChzdG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjYWlyb19tZXNo
X3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgc3RvcC5jb2xvci5h
c0V4dGVuZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAg
ICAgICAgICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRl
bmRlZCgpLmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxv
YXQgciwgZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwot
ICAgICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50
LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19t
ZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwg
YSAqIGdsb2JhbEFscGhhKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9f
cGF0dGVybl90ICpncmFkaWVudCwgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByLCBmbG9hdCBh
bmdsZVJhZGlhbnMsCkBAIC0xNDcsMjQgKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2Vj
dG9yKGNhaXJvX3BhdHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xh
dGVDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9w
IHRvKQogewotICAgIGZsb2F0IHIxLCBnMSwgYjEsIGExOwotICAgIGZsb2F0IHIyLCBnMiwgYjIs
IGEyOwotCi0gICAgaWYgKGZyb20uY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHIxID0g
ZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcxID0gZnJvbS5jb2xvci5h
c0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAgYjEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQo
KS5ibHVlKCk7Ci0gICAgICAgIGExID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgZnJvbS5jb2xvci5nZXRSR0JBKHIxLCBnMSwgYjEsIGExKTsK
LQotICAgIGlmICh0by5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgcjIgPSB0by5jb2xv
ci5hc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgp
LmdyZWVuKCk7Ci0gICAgICAgIGIyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKTsKLSAg
ICAgICAgYTIgPSB0by5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgdG8uY29sb3IuZ2V0UkdCQShyMiwgZzIsIGIyLCBhMik7CisgICAgYXV0byBbcjEsIGcx
LCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0
byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZz
ZXQpICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJl
dmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMjcgKzEwMywyMiBAQCBDb2xvcjo6Q29s
b3IoQ0dDb2xvclJlZiBjb2xvciwgU2VtYW50aWNUCiAKIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtD
R0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07
Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBhdXRvJiBleHRl
bmRlZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIGNoYW5uZWxzID0g
ZXh0ZW5kZWRDb2xvci5jaGFubmVscygpOwotICAgICAgICBjb21wb25lbnRzWzBdID0gY2hhbm5l
bHMuY29tcG9uZW50c1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGNoYW5uZWxzLmNvbXBv
bmVudHNbMV07Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBjaGFubmVscy5jb21wb25lbnRzWzJd
OwotICAgICAgICBjb21wb25lbnRzWzNdID0gY2hhbm5lbHMuY29tcG9uZW50c1szXTsKLSAgICAg
ICAgc3dpdGNoIChleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewotICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29s
b3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNw
bGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShkaXNwbGF5UDNDb2xvclNw
YWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJH
QjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9yUmVmcyBp
biB0aGVzZSBzcGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KLSAgICAgICAgICAg
IHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwot
ICAgICAgICB9CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50
czsKKyAgICBDR0Zsb2F0IGNnRmxvYXRDb21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OworCisg
ICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAg
ICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjZ0Zsb2F0Q29t
cG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVy
biBDR0NvbG9yQ3JlYXRlKGRpc3BsYXlQM0NvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVu
dHMpOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICAvLyBGSVhNRTog
RG8gd2UgZXZlciBjcmVhdGUgQ0dDb2xvclJlZnMgaW4gdGhlc2Ugc3BhY2VzPyBJdCBtYXkgb25s
eSBiZSBJbWFnZUJ1ZmZlcnMuCisgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xv
clNwYWNlUmVmKCksIGNnRmxvYXRDb21wb25lbnRzKTsKICAgICB9CiAKLSAgICBjb2xvci5nZXRS
R0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVu
dHNbM10pOwotICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNv
bXBvbmVudHMpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRD
Ry5jcHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsOCBAQCBD
R0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgICAgIGlmIChzdG9w
LmNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1
ZTsKIAotICAgICAgICBmbG9hdCByOwotICAgICAgICBmbG9hdCBnOwotICAgICAgICBmbG9hdCBi
OwotICAgICAgICBmbG9hdCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwg
YSk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gc3RvcC5jb2xvci5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bXBvbmVudHM7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAg
ICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgIGNvbG9y
Q29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlz
aW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIEZF
TGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lID0gd2lkdGggLSAxOwogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWln
aHQgLSAxOwogICAgIAotICAgIEZsb2F0Q29tcG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5l
YXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGlu
Z0NvbG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xv
clNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50
cyhtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdD
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxM
aWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25l
bnRzWzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1sy
XSk7CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdE
YXRhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjE4ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgYm9vbCBGaWx0ZXJP
cGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRz
OwotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRz
LmNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21w
b25lbnRzWzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50cyA9IGNvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVy
YXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihjb21wb25l
bnRzKSkKQEAgLTEzMSw4ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VU
cmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdC
QShjb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29t
cG9uZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZs
b2F0Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAg
aWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDggQEAgQ29sb3I6
OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29u
c3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JBID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4geyBhc1JHQkEuY29tcG9uZW50
c1swXSwgYXNSR0JBLmNvbXBvbmVudHNbMV0sIGFzUkdCQS5jb21wb25lbnRzWzJdLCBhc1JHQkEu
Y29tcG9uZW50c1szXSB9OwotICAgIH0KLQotI2lmIFVTRShHVEs0KQotICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOwotI2Vsc2UKLSAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGE7Ci0jZW5kaWYKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICByZXR1cm4geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiB7IHIsIGcsIGIsIGEg
fTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MTg4NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDggQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0aXBsaWVk
QVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgLy8gRklYTUU6
IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikp
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAt
Mjc2LDEzICsyNzYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVt
CiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5j
ZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGgg
dGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwg
Y29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKSwgY29s
b3IuYXNFeHRlbmRlZCgpLmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByLCBn
LCBiLCBhOwotICAgICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAw
LCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19maWxsKGNyKTsKQEAgLTQyMCw4ICs0MTUs
OCBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCi0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgICAgICAgICAgQ29sb3Io
cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5nZXRSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9h
dENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENv
bG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5i
bHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6
ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZz
ZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTY4Myw4ICs2NzgsOCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xV
c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGZsb2F0IHIsIGcsIGIsIGE7
Ci0gICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS5nZXRSR0JBKHIs
IGcsIGIsIGEpOworICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21w
b25lbnRzIGRpcmVjdGx5LgorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlw
bGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBp
ZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJs
ZW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYxODg2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MiwxMSArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRp
ZW50KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9w
czsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9y
IChhdXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGZsb2F0IHI7Ci0gICAgICAgIGZsb2F0
IGc7Ci0gICAgICAgIGZsb2F0IGI7Ci0gICAgICAgIGZsb2F0IGE7Ci0gICAgICAgIHN0b3AuY29s
b3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5j
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBw
ZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIs
IGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9u
IDI2MTg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwyNCArMTcwLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLS8vIFB1bGxlZCBmcm9tIEdyYXBoaWNzQ29udGV4dENH
Ci1zdGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsK
LSAgICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBDR0NvbnRl
eHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19
Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKSB7Ci0gICAgc3Rh
dGljIGNvbnN0IENvbG9yIHNwZWxsaW5nQ29sb3IoMjU1LCAwLCAwKTsKLSAgICByZXR1cm4gc3Bl
bGxpbmdDb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9y
KCkgewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBncmFtbWFyQ29sb3IoMCwgMTI4LCAwKTsKLSAg
ICByZXR1cm4gZ3JhbW1hckNvbG9yOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0yMTYs
OCArMTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW4KICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0g
c3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdy
YW1tYXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Ci0gICAgc2V0Q0dT
dHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
U2ltcGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBtYWtlUkdCKDI1NSwgMCwgMCkgfTsK
KyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0ZXJuQ29sb3IgeyBt
YWtlUkdCKDAsIDEyOCwgMCkgfTsKKworICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29s
b3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFy
ID8gZ3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOworICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQo
KSwgcGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9u
ZW50KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgIENHQWZmaW5lVHJh
bnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogICAgIENHUG9p
bnQgcGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHVzZXJUb0Jhc2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShy
ZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNM
ZWdpYmxlQWdhaW5zdEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZp
bml0aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRl
ci4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29u
dHJhc3QtY29udHJhc3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IsIGJhY2tn
cm91bmRDb2xvcikgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxp
dHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTE4
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0
IGFsd2F5cyBpbmNvcnJlY3QgQ29sb3I6OmdldFJHQkEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyIGFuZCBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNv
bG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdl
c3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIFJlcGxhY2UgQ29sb3I6OmdldFJHQkEgd2l0aCBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpCisKIDIwMjAtMDUtMTkgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdIEZpeCBtZXNzYWdlIGZpbHRlciBzYW5kYm94IHZpb2xhdGlvbgpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5j
cHAJKHJldmlzaW9uIDI2MTg4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw3IEBAIHZvaWQgd2Vi
a2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3
ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGRvdWJsZSByLCBnLCBiLCBhOwotICAgIHdl
YkNvcmVDb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
d2ViQ29yZUNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBjb2xvci0+cmVkID0g
cjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3
LDggKzMzNyw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAg
ICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29s
b3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50
U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGE7Ci0gICAgICAgICAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogICAgICAgICAgICAgICAg
IG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9j
cmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCShyZXZpc2lvbiAyNjE4ODYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw3ICs2NjAsMTEgQEAgYm9v
bCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAgIGlmICghYmdDb2xvci5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJnQ29sb3IuZ2V0UkdCQSgq
cmVkLCAqZ3JlZW4sICpibHVlLCAqYWxwaGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdD
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgKnJlZCA9IHI7CisgICAgKmdyZWVu
ID0gZzsKKyAgICAqYmx1ZSA9IGI7CisgICAgKmFscGhhID0gYTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399796</attachid>
            <date>2020-05-19 18:02:58 -0700</date>
            <delta_ts>2020-05-19 19:14:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212059-20200519180257.patch</filename>
            <type>text/plain</type>
            <size>34797</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAyMC0wNS0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IENvbG9yOjpnZXRSR0JBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ciBhbmQgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFJlbW92ZXMgdGhlIGF3a3dhcmQgYW5kIGFs
bW9zdCBhbHdheXMgaW5jb3JyZWN0IG91dCBwYXJhbWV0ZXIgYmFzZWQgQ29sb3I6OmdldFJHQkEu
IE1vc3QgZXhpc3RpbmcgY2FsbHNpdGVzCisgICAgICAgIHdlcmUgdXBkYXRlZCB0byB1c2UgQ29s
b3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBvciBvdGhlciBtb3JlIEV4dGVuZGVkQ29sb3Ig
c3VwcG9ydGluZyBmdW5jdGlvbnMgKGxpa2UgCisgICAgICAgIGNhY2hlZENHQ29sb3IoKSkuIAor
ICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRzIHR1cGxlLWxpa2UgYWRhcHRvcnMgZm9yIEZsb2F0
Q29tcG9uZW50cyB0byBhbGxvdyBpdCB0byBiZSB1c2VkCisgICAgICAgIHdpdGggc3RydWN0dXJl
ZCBiaW5kaW5ncy4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBteUZsb2F0Q29tcG9uZW50czsKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3Qp
OgorICAgICAgICBBZG9wdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gbWFrZSB0aGVzZSBu
b3QgcmV0dXJuIHRvdGFsbHkgaW5jb3JyZWN0IHZhbHVlcy4KKworICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgQWRkZWQuIFJl
dHVybnMgYSBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBmb3IgZnVuY3Rp
b25zIHRoYXQgbmVlZAorICAgICAgICB0byBvcGVyYXRlIG9uIHRoZSBjb21wb25lbnRzIGluIGEg
Q29sb3JTcGFjZSBhd2FyZSB3YXkuIFVzZWQgYnkgdG9TUkdCQUNvbXBvbmVudHNMb3NzeQorICAg
ICAgICBhbmQgbGVha0NHQ29sb3IoKSBmb3Igbm93LCBidXQgd2lsbCBiZSB1c2VmdWwgZ29pbmcg
Zm9yd2FyZCBhcyB3ZWxsLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBv
bmVudHNMb3NzeSBjb25zdCk6CisgICAgICAgIFJlLWltcGxlbWVudCB1c2luZyBjb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpIHRvIHNpbXBsaWZ5IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Z2V0UkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0Q29tcG9uZW50czo6RmxvYXRDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0Q29tcG9uZW50czo6Z2V0IGNvbnN0KToKKyAgICAgICAgUmVtb3ZlIHVzZXMgb2YgdGhl
IENvbG9yIGNsYXNzIHRvIHNpbXBsaWZ5IGlubGluaW5nIChDb2xvci5oIGFscmVhZHkgbmVlZHMg
dG8ga25vdyBhYm91dAorICAgICAgICBGbG9hdENvbXBvbmVudHMpLiAKKyAgICAgICAgICAgIC0g
RmxvYXRDb21wb25lbnRzIGNvbnN0cnVjdG9yIHJlcGxhY2VkIGJ5IENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkuIAorICAgICAgICAgICAgLSBzUkdCQ29sb3JUb0xpbmVhckNvbXBvbmVu
dHMgcmVwbGFjZWQgYnkgY2FsbGluZyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBzdGQ6OnR1
cGxlIGFkYXB0b3JzIGZvciBGbG9hdENvbXBvbmVudHMgdG8gYWxsb3cgdXNpbmcgd2l0aCBzdHVj
dHVyZWQgYmluZGluZ3MuIAorCisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zl
cmxheUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUlu
Zm86Okhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JB
IHdpdGggY2FjaGVkQ0dDb2xvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRo
IGNhY2hlZENHQ29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGgg
Y2FjaGVkQ0dDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJjZVJHQkFGcm9tQ29sb3Ip
OgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRDb2xvclN0b3BSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvcm5lckNvbG9yUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUNvbG9yU3Rv
cCk6CisgICAgICAgIFJlcGxhY2UgZ2V0UkdCQSB3aXRoIHRvU1JHQkFDb21wb25lbnRzTG9zc3ku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxlYWtDR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiAoYW5kIHJlbW92ZSB1c2Ugb2YgZ2V0
UkdCQSkgYnkgdXNpbmcgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICBSZXBsYWNlIGdldFJHQkEgd2l0aCBj
b2xvclNwYWNlQW5kQ29tcG9uZW50KCkuIAorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmVwbGFjZSBGbG9hdENvbXBvbmVudHMgY29u
c3RydWN0b3IgdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0UkdCQSkgd2l0aCB0b1NSR0JB
Q29tcG9uZW50c0xvc3N5LgorICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBSZXBsYWNlIGdl
dFJHQkEgd2l0aCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVy
YXRvciBHZGtSR0JBIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdpdGggdG9TUkdC
QUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgUmVwbGFj
ZSBnZXRSR0JBIHdpdGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgUmVwbGFjZSBnZXRSR0JBIHdp
dGggdG9TUkdCQUNvbXBvbmVudHNMb3NzeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzcGVsbGluZ1Bh
dHRlcm5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpncmFtbWFyUGF0dGVybkNv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFjZSB1c2Ugb2YgZ2V0UkdCQSB3aXRoIGRpcmVj
dCB1c2Ugb2YgU2ltcGxlQ29sb3IgaW5zdGVhZC4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVy
aW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRDb2xvcklzTGVn
aWJsZUFnYWluc3RCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGltcGxpY2l0IEZs
b2F0Q29tcG9uZW50cyBjb25zdHJ1Y3Rpb24gdGFraW5nIGEgQ29sb3IgKHdoaWNoIHVzZWQgZ2V0
UkdCQSkgd2l0aCBleHBsaWNpdCB0b1NSR0JBQ29tcG9uZW50c0xvc3N5LgorCiAyMDIwLTA1LTE5
ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBCbHVlIGRvdHRl
ZCB1bmRlcmxpbmUgd2l0aCBhbHRlcm5hdGl2ZXMgb25seSBzaG93biBmb3IgbGFzdCB3b3JkLCBn
ZXRzIGxvc3QgZm9yIHByZXZpb3VzIGluc2VydGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJldmlz
aW9uIDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92
ZXJsYXlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw3IEBAIHN0cnVjdCBI
aXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyB7CiAgICAgICAgICwgaXNTdWJjYXRlZ29yeShzdWJj
YXRlZ29yeSkKICAgICAgICAgLCB0eXBlKGNhdGVnb3J5KQogICAgIHsKLSAgICAgICAgZmxvYXQg
ciwgZywgYiwgYTsKLSAgICAgICAgQ29sb3IgeyBTaW1wbGVDb2xvciB7IGFyZ2IgfSB9LmdldFJH
QkEociwgZywgYiwgYSk7Ci0gICAgICAgIGNvbG9yID0gYWRvcHRDRihjcmVhdGVDb2xvcihyLCBn
LCBiLCBhKSk7CisgICAgICAgIGNvbG9yID0gY2FjaGVkQ0dDb2xvcihTaW1wbGVDb2xvciB7IGFy
Z2IgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIG5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
MCwxNCArMzUwLDE0IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiAgICAgCiAgICAgY29u
c3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKLSAgICBm
bG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwgYSk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKLSAgICBmbG9hdCB2ID0gc3Rk
OjptYXgociwgc3RkOjptYXgoZywgYikpOworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcs
IGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKQorICAgIGlmICh2ID09IDAuMGYpIHsKICAgICAg
ICAgLy8gTGlnaHRlbmVkIGJsYWNrIHdpdGggYWxwaGEuCiAgICAgICAgIHJldHVybiBDb2xvcigw
eDU0LCAweDU0LCAweDU0LCBhbHBoYSgpKTsKKyAgICB9CiAKICAgICBmbG9hdCBtdWx0aXBsaWVy
ID0gc3RkOjptaW4oMS4wZiwgdiArIDAuMzNmKSAvIHY7CiAKQEAgLTM3NSwxMCArMzc1LDkgQEAg
Q29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFj
dG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsK
LSAgICBnZXRSR0JBKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOwogCi0gICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHIsIHN0ZDo6bWF4
KGcsIGIpKTsKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0
IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCiAgICAgcmV0
dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3Rvciks
CkBAIC0zODksMTMgKzM4OCwxMCBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAKIGJvb2wg
Q29sb3I6OmlzRGFyaygpIGNvbnN0CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVu
OwotICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci0gICAgZ2V0UkdCQShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0
ZDo6bWF4KHJlZCwgc3RkOjptYXgoZ3JlZW4sIGJsdWUpKTsKLSAgICByZXR1cm4gYWxwaGEgPiAw
LjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgorICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNo
YW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CisgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFy
Z2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KIAogc3RhdGljIGludCBibGVuZENvbXBvbmVu
dChpbnQgYywgaW50IGEpCkBAIC00NzEsMjIgKzQ2Nyw2IEBAIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENvbG9y
OjpnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25zdAot
ewotICAgIHIgPSByZWQoKSAvIDI1NS4wZjsKLSAgICBnID0gZ3JlZW4oKSAvIDI1NS4wZjsKLSAg
ICBiID0gYmx1ZSgpIC8gMjU1LjBmOwotICAgIGEgPSBhbHBoYSgpIC8gMjU1LjBmOwotfQotCi12
b2lkIENvbG9yOjpnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRvdWJs
ZSYgYSkgY29uc3QKLXsKLSAgICByID0gcmVkKCkgLyAyNTUuMDsKLSAgICBnID0gZ3JlZW4oKSAv
IDI1NS4wOwotICAgIGIgPSBibHVlKCkgLyAyNTUuMDsKLSAgICBhID0gYWxwaGEoKSAvIDI1NS4w
OwotfQotCiAvLyBGSVhNRTogVXNlIHNSR0JUb0hTTCgpLgogdm9pZCBDb2xvcjo6Z2V0SFNMKGRv
dWJsZSYgaHVlLCBkb3VibGUmIHNhdHVyYXRpb24sIGRvdWJsZSYgbGlnaHRuZXNzKSBjb25zdAog
ewpAQCAtNTU1LDIyICs1MzUsMjkgQEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBk
b3VibGUmIAogICAgIHZhbHVlID0gbWF4OwogfQogCi1GbG9hdENvbXBvbmVudHMgQ29sb3I6OnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0
Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4
dGVuZGVkKCk7Ci0gICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkpIHsK
LSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGV4dGVu
ZGVkQ29sb3IuY2hhbm5lbHMoKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6
Ci0gICAgICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKGV4dGVuZGVkQ29sb3Iu
Y2hhbm5lbHMoKSk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAg
ICAgICAgcmV0dXJuIHAzVG9TUkdCKGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVk
Q29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNS
R0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8gMjU1LjBmLCBncmVlbigpIC8gMjU1LjBmLCBi
bHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1LjBmIH0gfTsKK30KKworRmxvYXRDb21wb25l
bnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3QKK3sKKyAgICBhdXRvIFtj
b2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAg
c3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAg
ICByZXR1cm4gY29tcG9uZW50czsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKKyAg
ICAgICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb21wb25lbnRzKTsKKyAgICBjYXNl
IENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIHAzVG9TUkdCKGNvbXBvbmVu
dHMpOwogICAgIH0KLSAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgIGdldFJHQkEociwgZywgYiwg
YSk7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB7IH07CiB9CiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KFJHQkEzMiBwaXhlbENvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBwdWJs
aWM6CiAKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIHRoZXNlIHNob3VsZCBiZSByZW5h
bWVkICh0byBiZSBjbGVhciBhYm91dCB0aGVpciBwYXJhbWV0ZXIgdHlwZXMsIG9yCiAgICAgLy8g
cmVwbGFjZWQgd2l0aCBhbHRlcm5hdGl2ZSBhY2Nlc3NvcnMuCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBnZXRSR0JBKGZsb2F0JiByLCBmbG9hdCYgZywgZmxvYXQmIGIsIGZsb2F0JiBhKSBjb25z
dDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcs
IGRvdWJsZSYgYiwgZG91YmxlJiBhKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z2V0SFNMKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZ2V0SFNWKGRvdWJsZSYgaCwgZG91YmxlJiBzLCBkb3VibGUmIHYpIGNv
bnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29t
cG9uZW50cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIC8vIFRoaXMg
d2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KICAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2
ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVz
LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRDb21wb25lbnRzOjpGbG9hdENvbXBvbmVudHMo
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwg
Y29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci19Ci0KIENvbG9y
Q29tcG9uZW50czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgZmxvYXRD
b21wb25lbnRzKQogewogICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQo
ZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0pOwpAQCAtNjksMTggKzYzLDYgQEAgZmxvYXQg
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQogICAgIHJldHVybiBjbGFtcFRvPGZs
b2F0PihzdGQ6OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAot
RmxvYXRDb21wb25lbnRzIHNSR0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBjb2xvci5nZXRSR0JBKHIsIGcs
IGIsIGEpOwotICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQo
ciksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZyksCi0gICAgICAgIHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnQoYiksCi0gICAgICAgIGEKLSAgICB9OwotfQotCiBGbG9hdENv
bXBvbmVudHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgUkdC
Q29sb3IpCiB7CiAgICAgcmV0dXJuIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYxODk4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzEsOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbG9y
OwotCiBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICBGbG9hdENvbXBvbmVudHMoZmxvYXQg
YSA9IDAsIGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCiAgICAgewpAQCAt
NTAsOCArNDgsNiBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgY29tcG9uZW50
c1szXSA9IHZhbHVlc1szXTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3QgQ29s
b3ImKTsKLQogICAgIEZsb2F0Q29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBGbG9hdENvbXBv
bmVudHMmIHJocykKICAgICB7CiAgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVu
dHNbMF07CkBAIC0xMDEsNiArOTcsMTIgQEAgc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4K
KyAgICBmbG9hdCBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNb
Tl07CisgICAgfQorCiAgICAgc3RkOjphcnJheTxmbG9hdCwgND4gY29tcG9uZW50czsKIH07CiAK
QEAgLTE3Niw3ICsxNzgsNiBAQCBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5z
aWduCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1GbG9hdENvbXBvbmVudHMgc1JHQkNvbG9y
VG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yJik7CiBGbG9hdENvbXBvbmVudHMgcmdiVG9M
aW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwogRmxvYXRDb21wb25lbnRz
IGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKIApAQCAtMjEw
LDMgKzIxMSwxNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVz
cGFjZSBzdGQgeworCit0ZW1wbGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0
Q29tcG9uZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwg
ND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8
TiwgV2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9
IGZsb2F0OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlz
aW9uIDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTMgKzU3Niw3IEBA
IENvbG9yIFBsYXRmb3JtQ0FMYXllcldpbjo6YmFja2dyb3VuZENvbG8KIAogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0g
ICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOwotICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1sw
XSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0g
YWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLQot
ICAgIENBQ0ZMYXllclNldEJhY2tncm91bmRDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQo
KSk7CisgICAgQ0FDRkxheWVyU2V0QmFja2dyb3VuZENvbG9yKG1fbGF5ZXIuZ2V0KCksIGNhY2hl
ZENHQ29sb3IodmFsdWUpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MTg5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxNSArMzEyLDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZAogCiB2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0g
ICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAwIH07Ci0gICAgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCkpOwotCi0gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgdmFsdWUu
Z2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21w
b25lbnRzWzNdKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0Yo
Q0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNG
TGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdldCgp
KTsKKyAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCks
IGNhY2hlZENHQ29sb3IodmFsdWUpKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4Myw4
IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBjYWlyb19zZXRfc291cmNl
X3JnYmEoY29udGV4dCwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpLCBjb2xvci5hc0V4dGVuZGVk
KCkuZ3JlZW4oKSwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29sb3IuYXNFeHRlbmRlZCgp
LmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYTsKLSAgICAgICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0g
ICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci0gICAgfQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBi
LCBhKTsKIH0KIAogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNh
aXJvX3QqIGZyb20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYxODk4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0Myw4IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3Jt
RGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90
ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkK
IHsKLSAgICBpZiAoc3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgY2Fpcm9fcGF0
dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgc3RvcC5jb2xv
ci5hc0V4dGVuZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0g
ICAgICAgICAgICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEp
OwotICAgICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0
b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGNh
aXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIs
IGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdQRSkKQEAgLTYxLDE0ICs1NSw4IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBz
dGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwg
aW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewot
ICAgIGlmIChzdG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjYWlyb19tZXNoX3Bh
dHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgc3RvcC5jb2xvci5hc0V4
dGVuZGVkKCkucmVkKCksIHN0b3AuY29sb3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksCi0gICAgICAg
ICAgICBzdG9wLmNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCksIHN0b3AuY29sb3IuYXNFeHRlbmRl
ZCgpLmFscGhhKCkgKiBnbG9iYWxBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQg
ciwgZywgYiwgYTsKLSAgICAgICAgc3RvcC5jb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAg
ICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBp
ZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKLSAgICB9CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19tZXNo
X3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAq
IGdsb2JhbEFscGhhKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0
dGVybl90ICpncmFkaWVudCwgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByLCBmbG9hdCBhbmds
ZVJhZGlhbnMsCkBAIC0xNDcsMjQgKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9y
KGNhaXJvX3BhdHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVD
b2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRv
KQogewotICAgIGZsb2F0IHIxLCBnMSwgYjEsIGExOwotICAgIGZsb2F0IHIyLCBnMiwgYjIsIGEy
OwotCi0gICAgaWYgKGZyb20uY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHIxID0gZnJv
bS5jb2xvci5hc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcxID0gZnJvbS5jb2xvci5hc0V4
dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAgYjEgPSBmcm9tLmNvbG9yLmFzRXh0ZW5kZWQoKS5i
bHVlKCk7Ci0gICAgICAgIGExID0gZnJvbS5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZnJvbS5jb2xvci5nZXRSR0JBKHIxLCBnMSwgYjEsIGExKTsKLQot
ICAgIGlmICh0by5jb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgcjIgPSB0by5jb2xvci5h
c0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGcyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmdy
ZWVuKCk7Ci0gICAgICAgIGIyID0gdG8uY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKTsKLSAgICAg
ICAgYTIgPSB0by5jb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgdG8uY29sb3IuZ2V0UkdCQShyMiwgZzIsIGIyLCBhMik7CisgICAgYXV0byBbcjEsIGcxLCBi
MSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBb
cjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAg
ICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQp
ICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlz
aW9uIDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMjcgKzEwMywyMiBAQCBDb2xvcjo6Q29sb3Io
Q0dDb2xvclJlZiBjb2xvciwgU2VtYW50aWNUCiAKIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0Nv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0g
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBhdXRvJiBleHRlbmRl
ZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIGNoYW5uZWxzID0gZXh0
ZW5kZWRDb2xvci5jaGFubmVscygpOwotICAgICAgICBjb21wb25lbnRzWzBdID0gY2hhbm5lbHMu
Y29tcG9uZW50c1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGNoYW5uZWxzLmNvbXBvbmVu
dHNbMV07Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBjaGFubmVscy5jb21wb25lbnRzWzJdOwot
ICAgICAgICBjb21wb25lbnRzWzNdID0gY2hhbm5lbHMuY29tcG9uZW50c1szXTsKLSAgICAgICAg
c3dpdGNoIChleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSkgewotICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JT
cGFjZVJlZigpLCBjb21wb25lbnRzKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5
UDM6Ci0gICAgICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShkaXNwbGF5UDNDb2xvclNwYWNl
UmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9yUmVmcyBpbiB0
aGVzZSBzcGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KLSAgICAgICAgICAgIHJl
dHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAg
ICAgICB9CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsK
KyAgICBDR0Zsb2F0IGNnRmxvYXRDb21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OworCisgICAg
c3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAg
ICByZXR1cm4gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjZ0Zsb2F0Q29tcG9u
ZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBD
R0NvbG9yQ3JlYXRlKGRpc3BsYXlQM0NvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVudHMp
OworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICAvLyBGSVhNRTogRG8g
d2UgZXZlciBjcmVhdGUgQ0dDb2xvclJlZnMgaW4gdGhlc2Ugc3BhY2VzPyBJdCBtYXkgb25seSBi
ZSBJbWFnZUJ1ZmZlcnMuCisgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNw
YWNlUmVmKCksIGNnRmxvYXRDb21wb25lbnRzKTsKICAgICB9CiAKLSAgICBjb2xvci5nZXRSR0JB
KGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNb
M10pOwotICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBv
bmVudHMpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAJKHJldmlzaW9uIDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsOCBAQCBDR0dy
YWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgICAgIGlmIChzdG9wLmNv
bG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1ZTsK
IAotICAgICAgICBmbG9hdCByOwotICAgICAgICBmbG9hdCBnOwotICAgICAgICBmbG9hdCBiOwot
ICAgICAgICBmbG9hdCBhOwotICAgICAgICBzdG9wLmNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7
CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gc3RvcC5jb2xvci5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBv
bmVudHM7CiAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAg
ICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgIGNvbG9yQ29t
cG9uZW50cy51bmNoZWNrZWRBcHBlbmQoYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9u
IDI2MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIEZFTGln
aHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lID0gd2lkdGggLSAxOwogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQg
LSAxOwogICAgIAotICAgIEZsb2F0Q29tcG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5lYXJD
b21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGluZ0Nv
bG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNw
YWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyht
X2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdo
dGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRz
WzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7
CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRh
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjE4OTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDcgQEAgYm9vbCBGaWx0ZXJPcGVy
YXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRzOwot
ICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNv
bXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25l
bnRzWzNdKTsKKyAgICBGbG9hdENvbXBvbmVudHMgY29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRp
b25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihjb21wb25lbnRz
KSkKQEAgLTEzMSw4ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFu
c2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHM7Ci0gICAgY29sb3IuZ2V0UkdCQShj
b21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29tcG9u
ZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOworICAgIEZsb2F0
Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
cmV2aXNpb24gMjYxODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDggQEAgQ29sb3I6OkNv
bG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QK
IHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JBID0gdG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4geyBhc1JHQkEuY29tcG9uZW50c1sw
XSwgYXNSR0JBLmNvbXBvbmVudHNbMV0sIGFzUkdCQS5jb21wb25lbnRzWzJdLCBhc1JHQkEuY29t
cG9uZW50c1szXSB9OwotICAgIH0KLQotI2lmIFVTRShHVEs0KQotICAgIGZsb2F0IHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhOwotI2Vsc2UKLSAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGE7Ci0jZW5kaWYKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBy
ZXR1cm4geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MTg5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlE
KCkpOwogCi0gICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICBDb2xvcihwcmVtdWx0aXBsaWVkQVJH
QkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgLy8gRklYTUU6IERv
IHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc2
LDEzICsyNzYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAg
ICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3
ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhl
IHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSwgY29s
b3IuYXNFeHRlbmRlZCgpLmdyZWVuKCksIGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKSwgY29sb3Iu
YXNFeHRlbmRlZCgpLmFscGhhKCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCByLCBnLCBi
LCBhOwotICAgICAgICBjb2xvci5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwotICAgIH0KKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjYWlyb19maWxsKGNyKTsKQEAgLTQyMCw4ICs0MTUsOCBA
QCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5l
ZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRp
bmcuCi0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgICAgICAgICAgQ29sb3IocHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5nZXRSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENv
bXBvbmVudHMgZGlyZWN0bHkuCisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9y
KHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0
aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVy
UmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5o
ZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRM
b2NhdGlvbigpLCAwLCAwKTsKQEAgLTY4Myw4ICs2NzgsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGZsb2F0IHIsIGcsIGIsIGE7Ci0g
ICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS5nZXRSR0JBKHIsIGcs
IGIsIGEpOworICAgIC8vIEZJWE1FOiBEbyB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21wb25l
bnRzIGRpcmVjdGx5LgorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgZ2xV
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAo
YSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5k
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYxODk4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MiwxMSArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50
KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsK
ICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9yIChh
dXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGZsb2F0IHI7Ci0gICAgICAgIGZsb2F0IGc7
Ci0gICAgICAgIGZsb2F0IGI7Ci0gICAgICAgIGZsb2F0IGE7Ci0gICAgICAgIHN0b3AuY29sb3Iu
Z2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5k
KEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEp
KSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI2
MTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwyNCArMTcwLDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7CiB9CiAKLS8vIFB1bGxlZCBmcm9tIEdyYXBoaWNzQ29udGV4dENHCi1z
dGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAg
ICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBDR0NvbnRleHRT
ZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBDb2xvciYgc3BlbGxpbmdQYXR0ZXJuQ29sb3IoKSB7Ci0gICAgc3RhdGlj
IGNvbnN0IENvbG9yIHNwZWxsaW5nQ29sb3IoMjU1LCAwLCAwKTsKLSAgICByZXR1cm4gc3BlbGxp
bmdDb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBncmFtbWFyUGF0dGVybkNvbG9yKCkg
ewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBncmFtbWFyQ29sb3IoMCwgMTI4LCAwKTsKLSAgICBy
ZXR1cm4gZ3JhbW1hckNvbG9yOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0yMTYsOCAr
MTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW4KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5
bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1t
YXJQYXR0ZXJuQ29sb3IoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yKCk7Ci0gICAgc2V0Q0dTdHJv
a2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBtYWtlUkdCKDI1NSwgMCwgMCkgfTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0ZXJuQ29sb3IgeyBtYWtl
UkdCKDAsIDEyOCwgMCkgfTsKKworICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29sb3Ig
PSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8g
Z3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOworICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQoKSwg
cGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9uZW50
KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgIENHQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogICAgIENHUG9pbnQg
cGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHVzZXJUb0Jhc2UpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZp
c2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdp
YmxlQWdhaW5zdEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0
aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4K
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJh
c3QtY29udHJhc3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IsIGJhY2tncm91
bmRDb2xvcikgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxpdHlP
bkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTE4ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgYWxtb3N0IGFs
d2F5cyBpbmNvcnJlY3QgQ29sb3I6OmdldFJHQkEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyIGFuZCBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNvbG9y
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1
cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IFJlcGxhY2UgQ29sb3I6OmdldFJHQkEgd2l0aCBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpCisKIDIwMjAtMDUtMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgX1dLRG93bmxvYWREZWxlZ2F0ZSBjYWxsYmFjayBpbmNsdWRp
bmcgdG90YWxCeXRlc1dyaXR0ZW4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNjE4OTgpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsOCArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNvbG9yLmlzVmFsaWQoKSk7CiAKLSAgICBkb3Vi
bGUgciwgZywgYiwgYTsKLSAgICB3ZWJDb3JlQ29sb3IuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xv
ci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjYxODk4KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNyw4ICszMzcsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAgICAg
ICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAgICAg
ICAgICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgICAgICAgICAgICAgIGNv
bG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICAgICAgICAgIGF1
dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybiA9IGFk
b3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMjYxODk4KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NjAsNyArNjYwLDExIEBAIGJvb2wgV2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENv
bG8KICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBiZ0NvbG9yLmdldFJHQkEoKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKmFscGhhKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAg
ICpyZWQgPSByOworICAgICpncmVlbiA9IGc7CisgICAgKmJsdWUgPSBiOworICAgICphbHBoYSA9
IGE7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>