<?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>212396</bug_id>
          
          <creation_ts>2020-05-26 19:12:45 -0700</creation_ts>
          <short_desc>Extended Color: Experiment with strongly typed ColorComponents</short_desc>
          <delta_ts>2020-06-13 09:44:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656255</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-26 19:12:45 -0700</bug_when>
    <thetext>Extended Color: Experiment with strongly typed FloatComponents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656257</commentid>
    <comment_count>1</comment_count>
      <attachid>400296</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-26 19:17:09 -0700</bug_when>
    <thetext>Created attachment 400296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656258</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-26 19:23:18 -0700</bug_when>
    <thetext>Posting my proof-of-concept for strongly typed FloatComponents. 

- Separate types for SRGBFloatComponents, DisplayP3FloatComponents, etc. (uses templates so that they all are implemented using template&lt;&gt; FloatComponents).

- ExtendedColor now has a Variant&lt;SRGBFloatComponents, DisplayP3FloatComponents&gt; (didn&apos;t add LinearSRGB yet since it&apos;s just a proof-of-concept). Currently very explicit about using switchOn() to visit each type even if they are identical to show what it would it would look like with color spaces that were no quite as similar as sRGB and P3 are.

- Conversion from one to the other can now have more simplified names, e.g. toSRGB() since the from is implicit in the type.


Curious to know what others thoughts on this are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656422</commentid>
    <comment_count>3</comment_count>
      <attachid>400296</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-27 10:25:05 -0700</bug_when>
    <thetext>Comment on attachment 400296
Patch

I think that the typed components should have a member that contains the untyped components; that member can be sort of like a tuple. Some functions can take the typed components. Others can take untyped. This could let us share as much code as we like and write short forwarding functions rather than writing out the logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656423</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-27 10:25:25 -0700</bug_when>
    <thetext>Generally type is a powerful tool for helping us get this right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656473</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 11:43:07 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 400296 [details]
&gt; Patch
&gt; 
&gt; I think that the typed components should have a member that contains the
&gt; untyped components; that member can be sort of like a tuple. Some functions
&gt; can take the typed components. Others can take untyped. This could let us
&gt; share as much code as we like and write short forwarding functions rather
&gt; than writing out the logic.

They essentially have that already since each of them wraps a std::array&lt;float, 4&gt;. (Note, I think we should probably switch this to a WTF based simd wrapper at somepoint, using simd::float4 on Darwin at least would actually simplify things here and model things better).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656494</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-27 11:52:12 -0700</bug_when>
    <thetext>Another thought: I suppose the layers of meaning would be:

1) just a bunch of floats
2) one of these is alpha and the rest are components in some color space
3) here&apos;s what color space

Not sure if there’s much code that could be shared in (2).

Also is there some kind of thing where the floats are known to be in the range [0,1]? I guess for P3 that’s not how it works?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662058</commentid>
    <comment_count>7</comment_count>
      <attachid>401754</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 11:27:24 -0700</bug_when>
    <thetext>Created attachment 401754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662075</commentid>
    <comment_count>8</comment_count>
      <attachid>401761</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 11:57:33 -0700</bug_when>
    <thetext>Created attachment 401761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662080</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-06-12 12:08:34 -0700</bug_when>
    <thetext>&gt; Source/WebCore/ChangeLog:10
&gt; +        ColorComponents&lt;float&gt; is east but explicit to make conversions

east

&gt; Source/WebCore/platform/graphics/ColorTypes.h:35
&gt; +struct SRGBAColor {
&gt; +    float red;
&gt; +    float green;
&gt; +    float blue;
&gt; +    float alpha;
&gt; +};

I wonder if this should be more like template&lt;typename T&gt; class ColorComponents { std::array&lt;float, 4&gt; ... } 

enum class sRGBType { };
using sRGBColor = ObjectIdentifier&lt; sRGBType &gt;;

I think I&apos;d like the name to suggest that it&apos;s 0-1 float components too. Just SRGBColor doesn&apos;t make it sound different enough from Color.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662082</commentid>
    <comment_count>10</comment_count>
      <attachid>401761</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-12 12:16:17 -0700</bug_when>
    <thetext>Comment on attachment 401761
Patch

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

My review comments are more of a &quot;response to the experiment&quot; than a &quot;checking over whether this is OK to land&quot;.

&gt; Source/WebCore/ChangeLog:17
&gt; +        us to simplify the naming of functions that convert between color 
&gt; +        types as now only the output type needs to be in the function name.

That’s the part I really like.

&gt; Source/WebCore/platform/graphics/Color.h:136
&gt; +    WEBCORE_EXPORT SRGBAColor toSRGBAColorLossy() const;

I don’t think this function needs the word &quot;Color&quot; in its name.

&gt; Source/WebCore/platform/graphics/ColorTypes.h:35
&gt; +struct SRGBAColor {
&gt; +    float red;
&gt; +    float green;
&gt; +    float blue;
&gt; +    float alpha;
&gt; +};

Seems limiting that we only have this for float, not for 0-255 bytes, and not for double (matches Core Graphics API). On the other hand, I do like that this is just a struct and not a template.

Makes me think about the premultiplication issue. Is this intrinsically not premultiplied, or can it be used for both?

Should the r/g/b component values be typed, or just the struct?

Should we initialize everything to 0 to make it harder to make the mistake of leaving things uninitialized? Are there any range restrictions? What about use of infinity and NaN?

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:35
&gt; +static float linearToRGBColorComponent(float c)

Seems like the same kind of issue comes up here. Without type safety, we can accidentally do this twice, or forget to do it.

More food for thought, does this function work on all float values, or must they be in the 0-1 range?

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:142
&gt; +    auto linearDisplayP3 = toLinearDisplayP3(displayP3);
&gt; +    auto xyz = toXYZ(linearDisplayP3);
&gt; +    auto linearSRGB = toLinearSRGBA(xyz);
&gt; +    return toSRGBA(linearSRGB);

Better without the local variables, don&apos;t you think?

    return toSRGBA(toLinearSRGBA(toXYZ(toLinearDisplayP3(sRGBA))));

Not beautiful, but easier to see it’s correct.

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:150
&gt; +    auto linearSRGBA = toLinearSRGBA(sRGBA);
&gt; +    auto xyz = toXYZ(linearSRGBA);
&gt; +    auto linearDisplayP3 = toLinearDisplayP3(xyz);
&gt; +    return toDisplayP3(linearDisplayP3);

return toDisplayP3(toLinearDisplayP3(toXYZ(toLinearSRGBA(sRGBA))));

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:155
&gt; +    auto [r, g, b, a] = sRGBA;

Annoying that this could scramble values if we wrote the left side wrong. Also annoying that we end up defining the unused alpha. In Swift it would be _ or something.

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:165
&gt; +    //      auto linearSRGBAComponents = toLinearSRGBA(sRGBA);
&gt; +    //      return linearSRGBAComponents * linearSRGBToXYZMatrix.row(1);

Code in comment should be a one-liner:

    return toLinearSRGBA(sRGBA) * linearSRGBToXYZMatrix.row(1);

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:170
&gt; +float contrastRatio(const SRGBAColor&amp; sRGBA1, const SRGBAColor&amp; sRGBA2)

Having the color space in the variable name seems way less valuable when it’s also in the type! Could just be color1, color2. Same applies many other places.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:55
&gt; +    SRGBAColor toSRGBAColorLossy() const;

Don’t need the word &quot;Color&quot; in the function name here.

&gt; Source/WebCore/platform/graphics/SimpleColor.h:69
&gt; +    constexpr SRGBAColor asSRGBAColor() const

Don’t need the word &quot;Color&quot; in the function name here.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:92
&gt;          auto matrix = grayscaleColorMatrix(m_amount);

No need to have this in a local variable. Could just make it part of the one-liner. Same below.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:163
&gt; +        sRGBAColor.red = 1 - (oneMinusAmount + sRGBAColor.red * (m_amount - oneMinusAmount));

Gotta find a way to apply operations/functions across the three channels other than writing them 3 times.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:263
&gt; +    hsla.hue = fmod(hsla.hue + 0.5f, 1.0f);

Why are we using the double overload of fmod here? Using std::fmod or fmodf would give us the float version. And I think that’s what we would prefer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662083</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 12:19:54 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #9)
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:35
&gt; &gt; +struct SRGBAColor {
&gt; &gt; +    float red;
&gt; &gt; +    float green;
&gt; &gt; +    float blue;
&gt; &gt; +    float alpha;
&gt; &gt; +};
&gt; 
&gt; I wonder if this should be more like template&lt;typename T&gt; class
&gt; ColorComponents { std::array&lt;float, 4&gt; ... } 
&gt; 
&gt; enum class sRGBType { };
&gt; using sRGBColor = ObjectIdentifier&lt; sRGBType &gt;;

It could, but you wouldn&apos;t get the benefit of having nice names. All the versions I tried ended up being less nice to use for callers. 

&gt; 
&gt; I think I&apos;d like the name to suggest that it&apos;s 0-1 float components too.
&gt; Just SRGBColor doesn&apos;t make it sound different enough from Color.

Yeah, that&apos;s the biggest issue in my mind as well. I am still struggling with what nomenclature to use to suggest float vs. byte. We could go ham and just templatize it:

  SRGBAColor&lt;float&gt;

and then SimpleColor essentially becomes SRGBAColor&lt;uint8_t&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662084</commentid>
    <comment_count>12</comment_count>
      <attachid>401762</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 12:22:41 -0700</bug_when>
    <thetext>Created attachment 401762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662086</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-12 12:23:23 -0700</bug_when>
    <thetext>I can think of a number of separate dimensions that *might* be worth considering:

1) named components vs. numbered (possibly unclear which is which), or std::array with named indices or accessors?

2) aggregates that support operating across multiple elements vs. structs (member function that ties the elements into a tuple?)

3) color space in the name, but also as a value to use for other purposes? using ColorSpace = xxx?

4) premultiplication somehow specified

5) with/without alpha

6) already normalized values (in range, not infinite) vs. unconstrained values

7) 0-1 vs. 0-255 vs. 0-1 concept but valid outside 0-1 as used in HDR

8) float vs. integer vs. double</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662142</commentid>
    <comment_count>14</comment_count>
      <attachid>401777</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 13:58:45 -0700</bug_when>
    <thetext>Created attachment 401777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662152</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 14:14:15 -0700</bug_when>
    <thetext>I quite like this last version, at least as a first step in the right direction:

- SRGBA&lt;float&gt; replaces ColorComponents&lt;float&gt; in most places.
- color.red replaces color[0]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662170</commentid>
    <comment_count>16</comment_count>
      <attachid>401784</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 14:41:52 -0700</bug_when>
    <thetext>Created attachment 401784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662172</commentid>
    <comment_count>17</comment_count>
      <attachid>401786</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 14:45:16 -0700</bug_when>
    <thetext>Created attachment 401786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662264</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-12 17:32:26 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #17)
&gt; Created attachment 401786 [details]
&gt; Patch

I think this is ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662274</commentid>
    <comment_count>19</comment_count>
      <attachid>401786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-12 17:53:09 -0700</bug_when>
    <thetext>Comment on attachment 401786
Patch

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

&gt; Source/WebCore/platform/graphics/Color.cpp:245
&gt; +    return { ColorSpace::SRGB, asColorComponents(asSimple().asSRGBA&lt;float&gt;()) };

my head is spinning about to vs. as

&gt; Source/WebCore/platform/graphics/ColorTypes.h:33
&gt; +template&lt;typename T&gt;
&gt; +struct SRGBA {

I always prefer these on the same line, but I guess I haven’t convinced you yet.

&gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:156
&gt; +    // NOTE: This is the equivilent of `toXYZ(toLinearSRGBA(color)).y`

spelling error I noticed in the existing comment here: &quot;equivilent&quot;. Also the use of backquote here ... ?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:28
&gt; +#include &quot;ColorTypes.h&quot;

Seems like this dependency could be satisfied with a forward declaration?

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:30
&gt; +#include &quot;ColorTypes.h&quot;

Seems like this dependency could be satisfied with a forward declaration?

&gt; Source/WebCore/platform/graphics/SimpleColor.h:76
&gt; -    constexpr ColorComponents&lt;float&gt; asSRGBFloatComponents() const
&gt; +    template&lt;typename T&gt;
&gt; +    constexpr SRGBA&lt;T&gt; asSRGBA() const
&gt;      {
&gt; -        return { convertToComponentFloat(redComponent()), convertToComponentFloat(greenComponent()), convertToComponentFloat(blueComponent()),  convertToComponentFloat(alphaComponent()) };
&gt; +        if constexpr (std::is_floating_point_v&lt;T&gt;)
&gt; +            return { convertToComponentFloat(redComponent()), convertToComponentFloat(greenComponent()), convertToComponentFloat(blueComponent()),  convertToComponentFloat(alphaComponent()) };
&gt; +        else
&gt; +            return { redComponent(), greenComponent(), blueComponent(), alphaComponent() };
&gt;      }

Consider moving these longer function bodies out of the class definition?

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:160
&gt; +            return 1.0f - (oneMinusAmount + component * (m_amount - oneMinusAmount));

I find this math truly mysterious, but at least it’s not changing.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:167
&gt; +            return std::clamp&lt;float&gt;(intercept + m_amount * component, 0.0f, 1.0f);

Surprised that &lt;float&gt; is needed here.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:173
&gt; +            return std::max&lt;float&gt;(m_amount * component, 0.0f);

Surprised that &lt;float&gt; is needed here.

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:225
&gt; +bool InvertLightnessFilterOperation::transformColor(SRGBA&lt;float&gt;&amp; color) const

So sad that these use bool plus out argument. Obviously we want these to be Optional instead some day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662357</commentid>
    <comment_count>20</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-13 09:03:33 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; Comment on attachment 401786 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=401786&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:245
&gt; &gt; +    return { ColorSpace::SRGB, asColorComponents(asSimple().asSRGBA&lt;float&gt;()) };
&gt; 
&gt; my head is spinning about to vs. as

Yeah, I was thinking that might be too easy to mix up. The intent was to* were  conversions that included some potentially non-invertible math and as* was really just a glorified cast. I am thinking in a follow up of replacing the to* functions with more explicit convertTo* functions to make it clearer.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:33
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +struct SRGBA {
&gt; 
&gt; I always prefer these on the same line, but I guess I haven’t convinced you
&gt; yet.

Heh. My brain does seem to have this preference, but it is such a weak preference I don&apos;t think I would remember it if you asked me which one I actually prefer. I think it comes down to not knowing what to do for weird cases like a templated mem

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.cpp:156
&gt; &gt; +    // NOTE: This is the equivilent of `toXYZ(toLinearSRGBA(color)).y`
&gt; 
&gt; spelling error I noticed in the existing comment here: &quot;equivilent&quot;. Also
&gt; the use of backquote here ... ?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:28
&gt; &gt; +#include &quot;ColorTypes.h&quot;
&gt; 
&gt; Seems like this dependency could be satisfied with a forward declaration?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ExtendedColor.h:30
&gt; &gt; +#include &quot;ColorTypes.h&quot;
&gt; 
&gt; Seems like this dependency could be satisfied with a forward declaration?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/SimpleColor.h:76
&gt; &gt; -    constexpr ColorComponents&lt;float&gt; asSRGBFloatComponents() const
&gt; &gt; +    template&lt;typename T&gt;
&gt; &gt; +    constexpr SRGBA&lt;T&gt; asSRGBA() const
&gt; &gt;      {
&gt; &gt; -        return { convertToComponentFloat(redComponent()), convertToComponentFloat(greenComponent()), convertToComponentFloat(blueComponent()),  convertToComponentFloat(alphaComponent()) };
&gt; &gt; +        if constexpr (std::is_floating_point_v&lt;T&gt;)
&gt; &gt; +            return { convertToComponentFloat(redComponent()), convertToComponentFloat(greenComponent()), convertToComponentFloat(blueComponent()),  convertToComponentFloat(alphaComponent()) };
&gt; &gt; +        else
&gt; &gt; +            return { redComponent(), greenComponent(), blueComponent(), alphaComponent() };
&gt; &gt;      }
&gt; 
&gt; Consider moving these longer function bodies out of the class definition?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:167
&gt; &gt; +            return std::clamp&lt;float&gt;(intercept + m_amount * component, 0.0f, 1.0f);
&gt; 
&gt; Surprised that &lt;float&gt; is needed here.

I believe it&apos;s due to m_amount being a double.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:173
&gt; &gt; +            return std::max&lt;float&gt;(m_amount * component, 0.0f);
&gt; 
&gt; Surprised that &lt;float&gt; is needed here.

Same. 



Thanks so much for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662358</commentid>
    <comment_count>21</comment_count>
      <attachid>401837</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-13 09:04:09 -0700</bug_when>
    <thetext>Created attachment 401837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662368</commentid>
    <comment_count>22</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-13 09:43:01 -0700</bug_when>
    <thetext>Committed r263000: &lt;https://trac.webkit.org/changeset/263000&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401837.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662370</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-13 09:44:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/64329874&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400296</attachid>
            <date>2020-05-26 19:17:09 -0700</date>
            <delta_ts>2020-06-12 11:27:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200526191708.patch</filename>
            <type>text/plain</type>
            <size>70378</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjIxNjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA1LTI2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogRXhwZXJpbWVudCB3aXRoIHN0
cm9uZ2x5IHR5cGVkIEZsb2F0Q29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZlLmg6CisKIDIwMjAtMDUtMjYg
IERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2Vd
IEFkZCBzdGF0aWMgYW5hbHl6ZXJzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAkocmV2aXNpb24g
MjYyMTY2KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxNSwxNiArNjE1LDE2IEBACiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMzAwMDAgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
QVhfQUxMT1dFRCA+PSAxMzA0MDApIFwKICAgICB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkKLSNkZWZpbmUgSEFWRV9QQVNTS0lU
X0lOU1RBTExNRU5UX0lERU5USUZJRVJTIDEKKyNkZWZpbmUgSEFWRV9QQVNTS0lUX0lOU1RBTExN
RU5UX0lERU5USUZJRVJTIDAKICNlbmRpZgogCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTMwMDAwICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTMwMTAwKSBcCiAgICAgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE1MDApCi0jZGVmaW5lIEhBVkVfUEFT
U0tJVF9JTlNUQUxMTUVOVFMgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRfSU5TVEFMTE1FTlRTIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMCkKLSNkZWZpbmUgSEFWRV9QQVNTS0lU
X1BBWU1FTlRfU0VUVVAgMQorI2RlZmluZSBIQVZFX1BBU1NLSVRfUEFZTUVOVF9TRVRVUCAwCiAj
ZW5kaWYKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxNTAwKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNU
KQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE5IEBACisyMDIwLTA1LTI2ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogRXhw
ZXJpbWVudCB3aXRoIHN0cm9uZ2x5IHR5cGVkIEZsb2F0Q29tcG9uZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzk2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBleHBlcmltZW50YXRp
b24gd2l0aCBzdHJvbmdseSB0eXBlZCBGbG9hdENvbXBvbmVudHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjphc1R5cGVkRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhclNSR0IpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9YWVopOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJQMyk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1NSR0IpOgorICAgICAgICAoV2ViQ29yZTo6dG9QMyk6CisgICAgICAg
IChXZWJDb3JlOjpsaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRyYXN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0wp
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvckNvbXBvbmVudHM6OkNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjphcmVFc3NlbnRpYWxseUVxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJn
YlRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJU
b1JHQkNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6eHl6VG9MaW5lYXJT
UkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclNSR0JUb1hZWik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYWVpUb0xpbmVhclAzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmxpbmVhclAzVG9YWVopOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cDNU
b1NSR0IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c1JHQlRvUDMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6c1JHQlRvSFNMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmhzbFRvU1JHQik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvck1hdHJpeDo6dHJh
bnNmb3JtQ29sb3JDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yTWF0cml4Ojp0cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OmFyZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5l
YXJDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUkdCQ29tcG9uZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvck1hdHJpeDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yTWF0cml4Ojp0cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbXBvbmVudHM6OmZyb21SR0JB
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29tcG9uZW50czo6Q29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29tcG9uZW50czo6dG9S
R0JBIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBlckNvbXBvbmVudE1heCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwZXJDb21wb25lbnRNaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wZWRDb2xvckNv
bXBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjptYWtlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbmRlZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6
YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y29sb3JTcGFj
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNzc1RleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjppc1doaXRlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmlzQmxhY2sgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5kZWRDb2xvcjo6Y29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6YWxwaGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y2hhbm5lbHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y29sb3JTcGFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xv
ckZyb21IU0xBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb21wb25lbnRzOjpmcm9tUkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvckNvbXBvbmVudHM6OkNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvckNvbXBvbmVudHM6OnRvUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpw
ZXJDb21wb25lbnRNYXgpOgorICAgICAgICAoV2ViQ29yZTo6cGVyQ29tcG9uZW50TWluKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCRmxvYXRDb21wb25lbnRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsZWFrQ0dDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
ZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpub2lzZTJEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRvQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFu
c2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0
ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorCiAyMDIwLTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBFbGltaW5hdGUgQ29sb3IgY29uc3RydWN0b3JzIHRoYXQgdGFrZSBzdHJpbmdz
LCBtb3ZpbmcgY29sb3IgcGFyc2luZyBlbnRpcmVseSBpbnRvIHRoZSBDU1MgcGFyc2VyCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAy
NjIxNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSwxMyArMjUxLDEzIEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhX
aGl0ZSgpIGNvbnN0CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShm
bG9hdCBhbW91bnQpIGNvbnN0CiB7Ci0gICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQgKiAoaXNF
eHRlbmRlZCgpID8gbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+YWxwaGEoKSA6IHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSgpKSAvIDI1NSk7CisgICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQg
KiBhbHBoYUFzRmxvYXQoKTsKICAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwog
fQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0g
YW1vdW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhh
KCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0Fs
cGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKG5ld0FscGhhKTsKIH0KIApAQCAtMzAyLDQ0ICszMDIs
MzEgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdAogewogICAgIGlmIChpc1Nl
bWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKLQogICAgIHJldHVybiB7IHRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CiB9CiAKLXN0ZDo6cGFpcjxDb2xvclNwYWNl
LCBGbG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0
CitFeHRlbmRlZENvbG9yOjpDb21wb25lbnRzVHlwZSBDb2xvcjo6YXNUeXBlZEZsb2F0Q29tcG9u
ZW50cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkgewotICAgICAgICBhdXRvJiBl
eHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4geyBleHRlbmRlZENv
bG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07Ci0gICAgfQotCi0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBhc1NpbXBsZUNvbG9yKCk7Ci0gICAgcmV0dXJuIHsgQ29s
b3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwg
YiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAg
ICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOworICAgIHJldHVybiBhc1NpbXBs
ZUNvbG9yKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9y
Ojp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQo
KSkgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOwogICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhy
LCBnLCBiLCBhKTsKICAgICB9CiAKICAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigpOwogfQogCi1G
bG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorU1JH
QkZsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CiB7
Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpOwotICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6
U1JHQjoKLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpM
aW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29tcG9uZW50
cyk7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBwM1Rv
U1JHQihjb21wb25lbnRzKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgIHJldHVybiBhc0V4
dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiBhc1NpbXBsZUNv
bG9yKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRDb2xvcnNF
cXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDgg
KzUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1JHQkEgR2RrUkdCQTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdHJ1Y3QgRmxvYXRDb21wb25lbnRzOwotCiBjbGFzcyBDb2xvciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsMTMgKzE0OCwxMyBAQCBw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEV4dGVuZGVkQ29sb3I6OkNvbXBv
bmVudHNUeXBlIGFzVHlwZWRGbG9hdENvbXBvbmVudHMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMg
d2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KICAgICBX
RUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0
OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMg
aW50byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU1JHQkZsb2F0Q29tcG9u
ZW50cyB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CiAKICAgICBDb2xvciBsaWdodCgp
IGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBjb25zdDsKQEAgLTM1MiwxMyArMzUwLDEzIEBAIHZv
aWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb24KICAgICBpZiAoaXNFeHRlbmRl
ZCgpKSB7CiAgICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKIAotICAgICAgICBhdXRvJiBleHRlbmRl
ZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgYzE7Ci0gICAg
ICAgIGVuY29kZXIgPDwgYzI7Ci0gICAgICAgIGVuY29kZXIgPDwgYzM7Ci0gICAgICAgIGVuY29k
ZXIgPDwgYWxwaGE7Ci0gICAgICAgIGVuY29kZXIgPDwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNl
KCk7CisvLyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKKy8vICAg
ICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCk7
CisvLyAgICAgICAgZW5jb2RlciA8PCBjMTsKKy8vICAgICAgICBlbmNvZGVyIDw8IGMyOworLy8g
ICAgICAgIGVuY29kZXIgPDwgYzM7CisvLyAgICAgICAgZW5jb2RlciA8PCBhbHBoYTsKKy8vICAg
ICAgICBlbmNvZGVyIDw8IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjIxNjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDI2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKIAotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ29sb3JDb21wb25lbnRzOjpDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRD
b21wb25lbnRzJiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAgY29tcG9uZW50c1swXSA9IGNsYW1w
ZWRDb2xvckNvbXBvbmVudChmbG9hdENvbXBvbmVudHMuY29tcG9uZW50c1swXSk7Ci0gICAgY29t
cG9uZW50c1sxXSA9IGNsYW1wZWRDb2xvckNvbXBvbmVudChmbG9hdENvbXBvbmVudHMuY29tcG9u
ZW50c1sxXSk7Ci0gICAgY29tcG9uZW50c1syXSA9IGNsYW1wZWRDb2xvckNvbXBvbmVudChmbG9h
dENvbXBvbmVudHMuY29tcG9uZW50c1syXSk7Ci0gICAgY29tcG9uZW50c1szXSA9IGNsYW1wZWRD
b2xvckNvbXBvbmVudChmbG9hdENvbXBvbmVudHMuY29tcG9uZW50c1szXSk7Ci19Ci0KLWJvb2wg
YXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBGbG9hdENvbXBvbmVudHMmIGEsIGNvbnN0IEZsb2F0
Q29tcG9uZW50cyYgYikKLXsKLSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGEu
Y29tcG9uZW50c1swXSwgYi5jb21wb25lbnRzWzBdKQotICAgICAgICAmJiBXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoYS5jb21wb25lbnRzWzFdLCBiLmNvbXBvbmVudHNbMV0pCi0gICAgICAgICYm
IFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhLmNvbXBvbmVudHNbMl0sIGIuY29tcG9uZW50c1sy
XSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGEuY29tcG9uZW50c1szXSwg
Yi5jb21wb25lbnRzWzNdKTsKLX0KLQogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwt
PiBsaW5lYXJSR0IgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCBjKQog
ewpAQCAtNjMsMjcgKzQ1LDcgQEAgZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9h
dCBjKQogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6OnBvdygoYyArIDAuMDU1ZikgLyAx
LjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAotRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29t
cG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIFJHQkNvbG9yKQotewotICAgIHJldHVybiB7
Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3IuY29tcG9uZW50c1sw
XSksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3IuY29tcG9uZW50
c1sxXSksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3IuY29tcG9u
ZW50c1syXSksCi0gICAgICAgIFJHQkNvbG9yLmNvbXBvbmVudHNbM10KLSAgICB9OwotfQotCi1G
bG9hdENvbXBvbmVudHMgbGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYgbGluZWFyUkdCKQotewotICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQobGluZWFyUkdCLmNvbXBvbmVudHNbMF0pLAotICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGxpbmVhclJHQi5jb21wb25lbnRzWzFdKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0IuY29tcG9uZW50c1syXSksCi0gICAgICAgIGxpbmVh
clJHQi5jb21wb25lbnRzWzNdCi0gICAgfTsKLX0KLQotc3RhdGljIEZsb2F0Q29tcG9uZW50cyB4
eXpUb0xpbmVhclNSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJiBYWVpDb21wb25lbnRzKQorc3Rh
dGljIExpbmVhclNSR0JGbG9hdENvbXBvbmVudHMgdG9MaW5lYXJTUkdCKGNvbnN0IFhZWkZsb2F0
Q29tcG9uZW50cyYgWFlaQ29tcG9uZW50cykKIHsKICAgICAvLyBodHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9TUkdCCiAgICAgLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbApAQCAtOTQsMTAgKzU2LDEwIEBAIHN0YXRp
YyBGbG9hdENvbXBvbmVudHMgeHl6VG9MaW5lYXJTUkdCKGMKICAgICAgICAgIDAuMGYsICAgICAg
ICAwLjBmLCAgICAgICAgMC4wZiwgICAgICAgMS4wZiwgMC4wZiwKICAgICB9OwogICAgIENvbG9y
TWF0cml4IHh5elRvTGluZWFyU1JHQk1hdHJpeCh2YWx1ZXMpOwotICAgIHJldHVybiB4eXpUb0xp
bmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7
CisgICAgcmV0dXJuIHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50czxMaW5lYXJTUkdCRmxvYXRDb21wb25lbnRzPihYWVpDb21wb25lbnRzKTsKIH0KIAotc3Rh
dGljIEZsb2F0Q29tcG9uZW50cyBsaW5lYXJTUkdCVG9YWVooY29uc3QgRmxvYXRDb21wb25lbnRz
JiBYWVpDb21wb25lbnRzKQorc3RhdGljIFhZWkZsb2F0Q29tcG9uZW50cyB0b1hZWihjb25zdCBM
aW5lYXJTUkdCRmxvYXRDb21wb25lbnRzJiBYWVpDb21wb25lbnRzKQogewogICAgIC8vIGh0dHBz
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAgICAvLyBodHRwOi8vd3d3LmJydWNlbGlu
ZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCkBAIC0xMDgsMTAg
KzcwLDEwIEBAIHN0YXRpYyBGbG9hdENvbXBvbmVudHMgbGluZWFyU1JHQlRvWFlaKGMKICAgICAg
ICAgMC4wZiwgICAgICAgIDAuMGYsICAgICAgICAwLjBmLCAgICAgICAxLjBmLCAwLjBmLAogICAg
IH07CiAgICAgQ29sb3JNYXRyaXggbGluZWFyU1JHQlRvWFlaTWF0cml4KHZhbHVlcyk7Ci0gICAg
cmV0dXJuIGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhY
WVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4gbGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzPFhZWkZsb2F0Q29tcG9uZW50cz4oWFlaQ29tcG9uZW50cyk7CiB9
CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMgWFlaVG9MaW5lYXJQMyhjb25zdCBGbG9hdENvbXBv
bmVudHMmIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgTGluZWFyUDNGbG9hdENvbXBvbmVudHMgdG9M
aW5lYXJQMyhjb25zdCBYWVpGbG9hdENvbXBvbmVudHMmIFhZWkNvbXBvbmVudHMpCiB7CiAgICAg
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1j
b2RlCiAgICAgY29uc3QgZmxvYXQgdmFsdWVzW10gPSB7CkBAIC0xMjEsMTAgKzgzLDEwIEBAIHN0
YXRpYyBGbG9hdENvbXBvbmVudHMgWFlaVG9MaW5lYXJQMyhjb24KICAgICAgICAgIDAuMGYsICAg
ICAgICAgICAgICAgICAwLjBmLCAgICAgICAgICAgICAgICAgMC4wZiwgICAgICAgICAgICAgICAg
MS4wZiwgMC4wZiwKICAgICB9OwogICAgIENvbG9yTWF0cml4IHh5elRvTGluZWFyU1JHQk1hdHJp
eCh2YWx1ZXMpOwotICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIHh5elRvTGluZWFyU1JH
Qk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50czxMaW5lYXJQM0Zsb2F0Q29tcG9uZW50
cz4oWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMgbGluZWFyUDNU
b1hZWihjb25zdCBGbG9hdENvbXBvbmVudHMmIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgWFlaRmxv
YXRDb21wb25lbnRzIHRvWFlaKGNvbnN0IExpbmVhclAzRmxvYXRDb21wb25lbnRzJiBsaW5lYXJQ
M0NvbXBvbmVudCkKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9y
LyNjb2xvci1jb252ZXJzaW9uLWNvZGUKICAgICBjb25zdCBmbG9hdCB2YWx1ZXNbXSA9IHsKQEAg
LTEzNCwyNiArOTYsMjYgQEAgc3RhdGljIEZsb2F0Q29tcG9uZW50cyBsaW5lYXJQM1RvWFlaKGNv
bgogICAgICAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjBm
LCAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsCiAgICAgfTsKICAgICBDb2xvck1hdHJpeCBsaW5l
YXJQM1RvWFlaTWF0cml4KHZhbHVlcyk7Ci0gICAgcmV0dXJuIGxpbmVhclAzVG9YWVpNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGxp
bmVhclAzVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHM8WFlaRmxvYXRDb21w
b25lbnRzPihsaW5lYXJQM0NvbXBvbmVudCk7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBwM1RvU1JH
Qihjb25zdCBGbG9hdENvbXBvbmVudHMmIHAzKQorU1JHQkZsb2F0Q29tcG9uZW50cyB0b1NSR0Io
Y29uc3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBwMykKIHsKLSAgICBhdXRvIGxpbmVhclAz
ID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHAzKTsKLSAgICBhdXRvIHh5eiA9IGxpbmVhclAzVG9Y
WVoobGluZWFyUDMpOwotICAgIGF1dG8gbGluZWFyU1JHQiA9IHh5elRvTGluZWFyU1JHQih4eXop
OwotICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyU1JHQik7CisgICAgYXV0
byBsaW5lYXJQMyAgID0gdG9MaW5lYXJDb21wb25lbnRzKHAzKTsKKyAgICBhdXRvIHh5eiAgICAg
ICAgPSB0b1hZWihsaW5lYXJQMyk7CisgICAgYXV0byBsaW5lYXJTUkdCID0gdG9MaW5lYXJTUkdC
KHh5eik7CisgICAgcmV0dXJuIHRvUkdCQ29tcG9uZW50cyhsaW5lYXJTUkdCKTsKIH0KIAotRmxv
YXRDb21wb25lbnRzIHNSR0JUb1AzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQikKK0Rpc3Bs
YXlQM0Zsb2F0Q29tcG9uZW50cyB0b1AzKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIHNSR0Ip
CiB7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0IpOwot
ICAgIGF1dG8geHl6ID0gbGluZWFyU1JHQlRvWFlaKGxpbmVhclNSR0IpOwotICAgIGF1dG8gbGlu
ZWFyUDMgPSBYWVpUb0xpbmVhclAzKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9u
ZW50cyhsaW5lYXJQMyk7CisgICAgYXV0byBsaW5lYXJTUkdCID0gdG9MaW5lYXJDb21wb25lbnRz
KHNSR0IpOworICAgIGF1dG8geHl6ICAgICAgICA9IHRvWFlaKGxpbmVhclNSR0IpOworICAgIGF1
dG8gbGluZWFyUDMgICA9IHRvTGluZWFyUDMoeHl6KTsKKyAgICByZXR1cm4gdG9SR0JDb21wb25l
bnRzKGxpbmVhclAzKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYgc1JHQkNvbXBvbnRlbnRzKQorZmxvYXQgbGlnaHRuZXNzKGNvbnN0IFNSR0JGbG9hdENvbXBv
bmVudHMmIHNSR0JDb21wb250ZW50cykKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JD
b21wb250ZW50czsKIApAQCAtMTc0LDcgKzEzNiw3IEBAIHN0YXRpYyBmbG9hdCBzUkdCVG9MaW5l
YXJDb2xvckNvbXBvbmVudEYKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpwb3coKGMg
KyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLWZsb2F0IGx1bWluYW5jZShj
b25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQorZmxvYXQgbHVtaW5hbmNlKGNv
bnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQogewogICAgIC8vIFZhbHVl
cyBmcm9tIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Jl
bGF0aXZlbHVtaW5hbmNlZGVmCiAgICAgcmV0dXJuIDAuMjEyNmYgKiBzUkdCVG9MaW5lYXJDb2xv
ckNvbXBvbmVudEZvckx1bWluYW5jZShzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzBdKQpAQCAt
MTgyLDcgKzE0NCw3IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMmIHMK
ICAgICAgICAgKyAwLjA3MjJmICogc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnRGb3JMdW1pbmFu
Y2Uoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1syXSk7CiB9CiAKLWZsb2F0IGNvbnRyYXN0UmF0
aW8oY29uc3QgRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzQSwgY29uc3QgRmxvYXRDb21wb25l
bnRzJiBjb21wb25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgU1JHQkZsb2F0Q29t
cG9uZW50cyYgY29tcG9uZW50c0EsIGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVu
dHNCKQogewogICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgY29udHJhc3Qg
cmF0aW8uCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0
aW9kZWYKQEAgLTE5NSw3ICsxNTcsNyBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IEZsb2F0
Q29tcG9uZW50CiAgICAgcmV0dXJuIChsaWdodGVyTHVtaW5hbmNlICsgMC4wNSkgLyAoZGFya2Vy
THVtaW5hbmNlICsgMC4wNSk7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBzUkdCVG9IU0woY29uc3Qg
RmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpCitIU0xGbG9hdENvbXBvbmVudHMgdG9I
U0woY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKQogewogICAgIC8v
IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLgogICAgIGF1dG8g
W3IsIGcsIGIsIGFscGhhXSA9IHNSR0JDb21wb250ZW50czsKQEAgLTI1NSwxMSArMjE3LDkgQEAg
c3RhdGljIGZsb2F0IGNhbGNIdWUoZmxvYXQgdGVtcDEsIGZsb2F0IAogLy8gRXhwbGFuYXRpb24g
b2YgdGhpcyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluIHRoZSBDU1MgQ29sb3IgNCBNb2R1bGUK
IC8vIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00
LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxhYmxlIGF0IGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlCi1GbG9hdENvbXBvbmVu
dHMgaHNsVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgaHNsQ29sb3IpCitTUkdCRmxvYXRD
b21wb25lbnRzIHRvU1JHQihjb25zdCBIU0xGbG9hdENvbXBvbmVudHMmIGhzbENvbG9yKQogewot
ICAgIGZsb2F0IGh1ZSA9IGhzbENvbG9yLmNvbXBvbmVudHNbMF07Ci0gICAgZmxvYXQgc2F0dXJh
dGlvbiA9IGhzbENvbG9yLmNvbXBvbmVudHNbMV07Ci0gICAgZmxvYXQgbGlnaHRuZXNzID0gaHNs
Q29sb3IuY29tcG9uZW50c1syXTsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGFdID0gaHNsQ29sb3I7CiAKICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgogICAg
IGlmICghc2F0dXJhdGlvbikgewpAQCAtMjY3LDcgKzIyNyw3IEBAIEZsb2F0Q29tcG9uZW50cyBo
c2xUb1NSR0IoY29uc3QgRmxvYXRDb20KICAgICAgICAgICAgIGxpZ2h0bmVzcywKICAgICAgICAg
ICAgIGxpZ2h0bmVzcywKICAgICAgICAgICAgIGxpZ2h0bmVzcywKLSAgICAgICAgICAgIGhzbENv
bG9yLmNvbXBvbmVudHNbM10KKyAgICAgICAgICAgIGFscGhhCiAgICAgICAgIH07CiAgICAgfQog
ICAgIApAQCAtMjc5LDE5ICsyMzksMTQgQEAgRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25z
dCBGbG9hdENvbQogICAgICAgICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlICsgMi4wZiksCiAg
ICAgICAgIGNhbGNIdWUodGVtcDEsIHRlbXAyLCBodWUpLAogICAgICAgICBjYWxjSHVlKHRlbXAx
LCB0ZW1wMiwgaHVlIC0gMi4wZiksCi0gICAgICAgIGhzbENvbG9yLmNvbXBvbmVudHNbM10KKyAg
ICAgICAgYWxwaGEKICAgICB9OwogfQogCi1GbG9hdENvbXBvbmVudHMgcHJlbXVsdGlwbGllZChj
b25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQorU1JHQkZsb2F0Q29tcG9uZW50
cyBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRz
KQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgciAqIGEsCi0gICAgICAgIGcgKiBhLAotICAgICAgICBiICogYSwKLSAgICAg
ICAgYQotICAgIH07CisgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQog
CiBDb2xvck1hdHJpeDo6Q29sb3JNYXRyaXgoKQpAQCAtNDIyLDMyICszNzcsNCBAQCBDb2xvck1h
dHJpeCBDb2xvck1hdHJpeDo6c2VwaWFNYXRyaXgoZmxvCiAgICAgcmV0dXJuIG1hdHJpeDsKIH0K
IAotdm9pZCBDb2xvck1hdHJpeDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKEZsb2F0Q29tcG9u
ZW50cyYgY29sb3JDb21wb25lbnRzKSBjb25zdAotewotICAgIGZsb2F0IHJlZCA9IGNvbG9yQ29t
cG9uZW50cy5jb21wb25lbnRzWzBdOwotICAgIGZsb2F0IGdyZWVuID0gY29sb3JDb21wb25lbnRz
LmNvbXBvbmVudHNbMV07Ci0gICAgZmxvYXQgYmx1ZSA9IGNvbG9yQ29tcG9uZW50cy5jb21wb25l
bnRzWzJdOwotICAgIGZsb2F0IGFscGhhID0gY29sb3JDb21wb25lbnRzLmNvbXBvbmVudHNbM107
Ci0KLSAgICBjb2xvckNvbXBvbmVudHMuY29tcG9uZW50c1swXSA9IG1fbWF0cml4WzBdWzBdICog
cmVkICsgbV9tYXRyaXhbMF1bMV0gKiBncmVlbiArIG1fbWF0cml4WzBdWzJdICogYmx1ZSArIG1f
bWF0cml4WzBdWzNdICogYWxwaGEgKyBtX21hdHJpeFswXVs0XTsKLSAgICBjb2xvckNvbXBvbmVu
dHMuY29tcG9uZW50c1sxXSA9IG1fbWF0cml4WzFdWzBdICogcmVkICsgbV9tYXRyaXhbMV1bMV0g
KiBncmVlbiArIG1fbWF0cml4WzFdWzJdICogYmx1ZSArIG1fbWF0cml4WzFdWzNdICogYWxwaGEg
KyBtX21hdHJpeFsxXVs0XTsKLSAgICBjb2xvckNvbXBvbmVudHMuY29tcG9uZW50c1syXSA9IG1f
bWF0cml4WzJdWzBdICogcmVkICsgbV9tYXRyaXhbMl1bMV0gKiBncmVlbiArIG1fbWF0cml4WzJd
WzJdICogYmx1ZSArIG1fbWF0cml4WzJdWzNdICogYWxwaGEgKyBtX21hdHJpeFsyXVs0XTsKLSAg
ICBjb2xvckNvbXBvbmVudHMuY29tcG9uZW50c1szXSA9IG1fbWF0cml4WzNdWzBdICogcmVkICsg
bV9tYXRyaXhbM11bMV0gKiBncmVlbiArIG1fbWF0cml4WzNdWzJdICogYmx1ZSArIG1fbWF0cml4
WzNdWzNdICogYWxwaGEgKyBtX21hdHJpeFszXVs0XTsKLX0KLQotRmxvYXRDb21wb25lbnRzIENv
bG9yTWF0cml4Ojp0cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVu
dHMmIGNvbG9yQ29tcG9uZW50cykgY29uc3QKLXsKLSAgICBmbG9hdCByZWQgPSBjb2xvckNvbXBv
bmVudHMuY29tcG9uZW50c1swXTsKLSAgICBmbG9hdCBncmVlbiA9IGNvbG9yQ29tcG9uZW50cy5j
b21wb25lbnRzWzFdOwotICAgIGZsb2F0IGJsdWUgPSBjb2xvckNvbXBvbmVudHMuY29tcG9uZW50
c1syXTsKLSAgICBmbG9hdCBhbHBoYSA9IGNvbG9yQ29tcG9uZW50cy5jb21wb25lbnRzWzNdOwot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgbV9tYXRyaXhbMF1bMF0gKiByZWQgKyBtX21hdHJpeFsw
XVsxXSAqIGdyZWVuICsgbV9tYXRyaXhbMF1bMl0gKiBibHVlICsgbV9tYXRyaXhbMF1bM10gKiBh
bHBoYSArIG1fbWF0cml4WzBdWzRdLAotICAgICAgICBtX21hdHJpeFsxXVswXSAqIHJlZCArIG1f
bWF0cml4WzFdWzFdICogZ3JlZW4gKyBtX21hdHJpeFsxXVsyXSAqIGJsdWUgKyBtX21hdHJpeFsx
XVszXSAqIGFscGhhICsgbV9tYXRyaXhbMV1bNF0sCi0gICAgICAgIG1fbWF0cml4WzJdWzBdICog
cmVkICsgbV9tYXRyaXhbMl1bMV0gKiBncmVlbiArIG1fbWF0cml4WzJdWzJdICogYmx1ZSArIG1f
bWF0cml4WzJdWzNdICogYWxwaGEgKyBtX21hdHJpeFsyXVs0XSwKLSAgICAgICAgbV9tYXRyaXhb
M11bMF0gKiByZWQgKyBtX21hdHJpeFszXVsxXSAqIGdyZWVuICsgbV9tYXRyaXhbM11bMl0gKiBi
bHVlICsgbV9tYXRyaXhbM11bM10gKiBhbHBoYSArIG1fbWF0cml4WzNdWzRdCi0gICAgfTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjIxNjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw5ICsyOCwxOCBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDxhcnJheT4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgU1JHQlVzZUlkZW50aWZpZXIgeyB9Owor
c3RydWN0IExpbmVhcnNSR0JVc2VJZGVudGlmaWVyIHsgfTsKK3N0cnVjdCBEaXNwbGF5UDNVc2VJ
ZGVudGlmaWVyIHsgfTsKK3N0cnVjdCBMaW5lYXJQM1VzZUlkZW50aWZpZXIgeyB9Oworc3RydWN0
IEhTTFVzZUlkZW50aWZpZXIgeyB9Oworc3RydWN0IFhZWlVzZUlkZW50aWZpZXIgeyB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBVc2VJZGVudGlmaWVyPgogc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7
CiAgICAgRmxvYXRDb21wb25lbnRzKGZsb2F0IGEgPSAwLCBmbG9hdCBiID0gMCwgZmxvYXQgYyA9
IDAsIGZsb2F0IGQgPSAwKQogICAgIHsKQEAgLTEwNiw5MiArMTE1LDY4IEBAIHN0cnVjdCBGbG9h
dENvbXBvbmVudHMgewogICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+IGNvbXBvbmVudHM7CiB9Owog
Ci1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgRmxvYXRDb21wb25lbnRzJiwgY29uc3Qg
RmxvYXRDb21wb25lbnRzJik7CiAKLXN0cnVjdCBDb2xvckNvbXBvbmVudHMgewotICAgIENvbG9y
Q29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLSAgICAKLSAgICBzdGF0aWMgQ29s
b3JDb21wb25lbnRzIGZyb21SR0JBKHVuc2lnbmVkIHBpeGVsKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIENvbG9yQ29tcG9uZW50cygocGl4ZWwgPj4gMjQpICYgMHhGRiwgKHBpeGVsID4+IDE2KSAm
IDB4RkYsIChwaXhlbCA+PiA4KSAmIDB4RkYsIHBpeGVsICYgMHhGRik7Ci0gICAgfQotICAgIAot
ICAgIENvbG9yQ29tcG9uZW50cyh1aW50OF90IGEgPSAwLCB1aW50OF90IGIgPSAwLCB1aW50OF90
IGMgPSAwLCB1aW50OF90IGQgPSAwKQotICAgIHsKLSAgICAgICAgY29tcG9uZW50c1swXSA9IGE7
Ci0gICAgICAgIGNvbXBvbmVudHNbMV0gPSBiOwotICAgICAgICBjb21wb25lbnRzWzJdID0gYzsK
LSAgICAgICAgY29tcG9uZW50c1szXSA9IGQ7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHRv
UkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcG9uZW50c1swXSA8PCAyNCB8
IGNvbXBvbmVudHNbMV0gPDwgMTYgfCBjb21wb25lbnRzWzJdIDw8IDggfCBjb21wb25lbnRzWzNd
OwotICAgIH0KK3VzaW5nIFNSR0JGbG9hdENvbXBvbmVudHMgPSBGbG9hdENvbXBvbmVudHM8U1JH
QlVzZUlkZW50aWZpZXI+OwordXNpbmcgTGluZWFyU1JHQkZsb2F0Q29tcG9uZW50cyA9IEZsb2F0
Q29tcG9uZW50czxMaW5lYXJzUkdCVXNlSWRlbnRpZmllcj47Cit1c2luZyBEaXNwbGF5UDNGbG9h
dENvbXBvbmVudHMgPSBGbG9hdENvbXBvbmVudHM8RGlzcGxheVAzVXNlSWRlbnRpZmllcj47Cit1
c2luZyBMaW5lYXJQM0Zsb2F0Q29tcG9uZW50cyA9IEZsb2F0Q29tcG9uZW50czxMaW5lYXJQM1Vz
ZUlkZW50aWZpZXI+OwordXNpbmcgSFNMRmxvYXRDb21wb25lbnRzID0gRmxvYXRDb21wb25lbnRz
PEhTTFVzZUlkZW50aWZpZXI+OwordXNpbmcgWFlaRmxvYXRDb21wb25lbnRzID0gRmxvYXRDb21w
b25lbnRzPFhZWlVzZUlkZW50aWZpZXI+OwogCi0gICAgc3RkOjphcnJheTx1aW50OF90LCA0PiBj
b21wb25lbnRzOwotfTsKIAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNYXgo
Y29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCi17Ci0g
ICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBdLCBiLmNvbXBvbmVu
dHNbMF0pLAotICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMV0sIGIuY29tcG9uZW50c1sx
XSksCi0gICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1syXSwgYi5jb21wb25lbnRzWzJdKSwK
LSAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzNdLCBiLmNvbXBvbmVudHNbM10pCi0gICAg
fTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIEZsb2F0Q29tcG9uZW50cz4gc3RydWN0IEZsb2F0Q29t
cG9uZW50c1RyYWl0cyB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGbG9hdENvbXBvbmVudHNUcmFp
dHM8U1JHQkZsb2F0Q29tcG9uZW50cz4gICAgICAgIHsgdXNpbmcgTGluZWFyVHlwZSA9IExpbmVh
clNSR0JGbG9hdENvbXBvbmVudHM7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGbG9hdENvbXBvbmVu
dHNUcmFpdHM8RGlzcGxheVAzRmxvYXRDb21wb25lbnRzPiAgIHsgdXNpbmcgTGluZWFyVHlwZSA9
IExpbmVhclAzRmxvYXRDb21wb25lbnRzOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRmxvYXRDb21w
b25lbnRzVHJhaXRzPExpbmVhclNSR0JGbG9hdENvbXBvbmVudHM+ICB7IHVzaW5nIFJHQlR5cGUg
PSBTUkdCRmxvYXRDb21wb25lbnRzOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRmxvYXRDb21wb25l
bnRzVHJhaXRzPExpbmVhclAzRmxvYXRDb21wb25lbnRzPiAgICB7IHVzaW5nIFJHQlR5cGUgPSBE
aXNwbGF5UDNGbG9hdENvbXBvbmVudHM7IH07CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHMgcGVy
Q29tcG9uZW50TWluKGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21wb25l
bnRzJiBiKQotewotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1sw
XSwgYi5jb21wb25lbnRzWzBdKSwKLSAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzFdLCBi
LmNvbXBvbmVudHNbMV0pLAotICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMl0sIGIuY29t
cG9uZW50c1syXSksCi0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1szXSwgYi5jb21wb25l
bnRzWzNdKQotICAgIH07Ci19CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JD
b21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb21wb25lbnRUeXBlPgorYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbXBvbmVu
dFR5cGUmIGEsIGNvbnN0IENvbXBvbmVudFR5cGUmIGIpCiB7Ci0gICAgcmV0dXJuIGEuY29tcG9u
ZW50cyA9PSBiLmNvbXBvbmVudHM7CisgICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSkKKyAgICAgICAgJiYgV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRzWzFdKQorICAgICAg
ICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVu
dHNbMl0pCisgICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhLmNvbXBvbmVudHNb
M10sIGIuY29tcG9uZW50c1szXSk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCi17Ci0gICAgcmV0
dXJuICEoYSA9PSBiKTsKLX0KKy8vLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNsYW1wZWQu
CitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKK2Zsb2F0IHJnYlRvTGlu
ZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1pbmxpbmUgdWludDhfdCBjbGFtcGVkQ29sb3JD
b21wb25lbnQoZmxvYXQgZikKK3RlbXBsYXRlPHR5cGVuYW1lIFJHQlR5cGU+Cit0eXBlbmFtZSBG
bG9hdENvbXBvbmVudHNUcmFpdHM8UkdCVHlwZT46OkxpbmVhclR5cGUgdG9MaW5lYXJDb21wb25l
bnRzKGNvbnN0IFJHQlR5cGUmIFJHQkNvbG9yKQogewotICAgIC8vIFNlZSBhbHNvIGNvbG9yRmxv
YXRUb1JHQkFCeXRlKCkuCi0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKKyAgICByZXR1cm4geworICAgICAgICByZ2JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yLmNvbXBvbmVudHNbMF0pLAorICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yLmNvbXBvbmVudHNbMV0pLAorICAgICAg
ICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yLmNvbXBvbmVudHNbMl0pLAorICAg
ICAgICBSR0JDb2xvci5jb21wb25lbnRzWzNdCisgICAgfTsKIH0KIAotaW5saW5lIHVuc2lnbmVk
IGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5
dGVzKQordGVtcGxhdGU8dHlwZW5hbWUgTGluZWFyUkdCVHlwZT4KK3R5cGVuYW1lIEZsb2F0Q29t
cG9uZW50c1RyYWl0czxMaW5lYXJSR0JUeXBlPjo6UkdCVHlwZSB0b1JHQkNvbXBvbmVudHMoY29u
c3QgTGluZWFyUkdCVHlwZSYgbGluZWFyUkdCKQogewotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVz
UGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRl
czsKKyAgICByZXR1cm4geworICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVh
clJHQi5jb21wb25lbnRzWzBdKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChs
aW5lYXJSR0IuY29tcG9uZW50c1sxXSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnQobGluZWFyUkdCLmNvbXBvbmVudHNbMl0pLAorICAgICAgICBsaW5lYXJSR0IuY29tcG9uZW50
c1szXQorICAgIH07CiB9CiAKLS8vIDAtMSBjb21wb25lbnRzLCByZXN1bHQgaXMgY2xhbXBlZC4K
LWZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudChmbG9hdCk7CitXRUJDT1JFX0VYUE9SVCBTUkdCRmxvYXRDb21wb25l
bnRzIHRvU1JHQihjb25zdCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMmKTsKK1dFQkNPUkVfRVhQ
T1JUIERpc3BsYXlQM0Zsb2F0Q29tcG9uZW50cyB0b1AzKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVu
dHMmKTsKIAotRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBGbG9h
dENvbXBvbmVudHMmKTsKLUZsb2F0Q29tcG9uZW50cyBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29u
c3QgRmxvYXRDb21wb25lbnRzJik7CitXRUJDT1JFX0VYUE9SVCBIU0xGbG9hdENvbXBvbmVudHMg
dG9IU0woY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYpOworV0VCQ09SRV9FWFBPUlQgU1JHQkZs
b2F0Q29tcG9uZW50cyB0b1NSR0IoY29uc3QgSFNMRmxvYXRDb21wb25lbnRzJik7CiAKLUZsb2F0
Q29tcG9uZW50cyBwM1RvU1JHQihjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLUZsb2F0Q29tcG9u
ZW50cyBzUkdCVG9QMyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKK2Zsb2F0IGxpZ2h0bmVzcyhj
b25zdCBTUkdCRmxvYXRDb21wb25lbnRzJik7CitmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkZs
b2F0Q29tcG9uZW50cyYpOworZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBTUkdCRmxvYXRDb21w
b25lbnRzJiwgY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYpOwogCi1XRUJDT1JFX0VYUE9SVCBG
bG9hdENvbXBvbmVudHMgc1JHQlRvSFNMKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotV0VCQ09S
RV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25zdCBGbG9hdENvbXBvbmVudHMm
KTsKLQotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRl
bnRzKTsKLWZsb2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250
ZW50cyk7Ci1mbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYsIGNvbnN0
IEZsb2F0Q29tcG9uZW50cyYpOwotCi1GbG9hdENvbXBvbmVudHMgcHJlbXVsdGlwbGllZChjb25z
dCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7CitTUkdCRmxvYXRDb21wb25lbnRz
IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYpOwogCiBjbGFzcyBDb2xv
ck1hdHJpeCB7CiBwdWJsaWM6CkBAIC0yMDMsOCArMTg4LDExIEBAIHB1YmxpYzoKICAgICBDb2xv
ck1hdHJpeCgpOwogICAgIENvbG9yTWF0cml4KGNvbnN0IGZsb2F0WzIwXSk7CiAgICAgCi0gICAg
dm9pZCB0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoRmxvYXRDb21wb25lbnRzJikgY29uc3Q7Ci0g
ICAgRmxvYXRDb21wb25lbnRzIHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0
Q29tcG9uZW50cyYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0Q29tcG9uZW50
VHlwZT4KKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhGbG9hdENvbXBvbmVudFR5
cGUmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRvRmxvYXRDb21wb25lbnRUeXBl
LCB0eXBlbmFtZSBGcm9tRmxvYXRDb21wb25lbnRUeXBlPgorICAgIFRvRmxvYXRDb21wb25lbnRU
eXBlIHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IEZyb21GbG9hdENvbXBvbmVudFR5
cGUmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VJZGVudGl0eSgpOwpAQCAtMjEy
LDE2ICsyMDAsMzQgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21hdHJpeFs0XVs1XTsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZsb2F0Q29tcG9uZW50VHlwZT4KK3ZvaWQgQ29sb3JNYXRyaXg6
OnRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhGbG9hdENvbXBvbmVudFR5cGUmIGNvbG9yQ29tcG9u
ZW50cykgY29uc3QKK3sKKyAgICBjb2xvckNvbXBvbmVudHMgPSB0cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50czxGbG9hdENvbXBvbmVudFR5cGU+KGNvbG9yQ29tcG9uZW50cyk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFRvRmxvYXRDb21wb25lbnRUeXBlLCB0eXBlbmFtZSBGcm9tRmxvYXRDb21w
b25lbnRUeXBlPgorVG9GbG9hdENvbXBvbmVudFR5cGUgQ29sb3JNYXRyaXg6OnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKGNvbnN0IEZyb21GbG9hdENvbXBvbmVudFR5cGUmIGZyb20pIGNvbnN0
Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gZnJvbTsKKyAgICByZXR1cm4gVG9G
bG9hdENvbXBvbmVudFR5cGUgeworICAgICAgICBtX21hdHJpeFswXVswXSAqIGMxICsgbV9tYXRy
aXhbMF1bMV0gKiBjMiArIG1fbWF0cml4WzBdWzJdICogYzMgKyBtX21hdHJpeFswXVszXSAqIGFs
cGhhICsgbV9tYXRyaXhbMF1bNF0sCisgICAgICAgIG1fbWF0cml4WzFdWzBdICogYzEgKyBtX21h
dHJpeFsxXVsxXSAqIGMyICsgbV9tYXRyaXhbMV1bMl0gKiBjMyArIG1fbWF0cml4WzFdWzNdICog
YWxwaGEgKyBtX21hdHJpeFsxXVs0XSwKKyAgICAgICAgbV9tYXRyaXhbMl1bMF0gKiBjMSArIG1f
bWF0cml4WzJdWzFdICogYzIgKyBtX21hdHJpeFsyXVsyXSAqIGMzICsgbV9tYXRyaXhbMl1bM10g
KiBhbHBoYSArIG1fbWF0cml4WzJdWzRdLAorICAgICAgICBtX21hdHJpeFszXVswXSAqIGMxICsg
bV9tYXRyaXhbM11bMV0gKiBjMiArIG1fbWF0cml4WzNdWzJdICogYzMgKyBtX21hdHJpeFszXVsz
XSAqIGFscGhhICsgbV9tYXRyaXhbM11bNF0KKyAgICB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewogCi10ZW1wbGF0ZTw+Ci1jbGFzcyB0dXBsZV9zaXpl
PFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFu
dDxzdGQ6OnNpemVfdCwgND4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIHR1cGxlX3Np
emU8V2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPFQ+PiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2Nv
bnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7CiB9OwogCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgot
Y2xhc3MgdHVwbGVfZWxlbWVudDxOLCBXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+IHsKK3RlbXBs
YXRlPHN0ZDo6c2l6ZV90IE4sIHR5cGVuYW1lIFQ+CitjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdl
YkNvcmU6OkZsb2F0Q29tcG9uZW50czxUPj4gewogcHVibGljOgogICAgIHVzaW5nIHR5cGUgPSBm
bG9hdDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRl
ZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYyICszMiwxNjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgRXh0ZW5kZWRD
b2xvcjo6Q29tcG9uZW50c1R5cGUgbWFrZUNvbXBvbmVudHMoZmxvYXQgYzEsIGZsb2F0IGMyLCBm
bG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0
Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJl
dHVybiBTUkdCRmxvYXRDb21wb25lbnRzIHsgYzEsIGMyLCBjMywgYWxwaGEgfTsKKyAgICBjYXNl
IENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIERpc3BsYXlQM0Zsb2F0Q29t
cG9uZW50cyB7IGMxLCBjMiwgYzMsIGFscGhhIH07CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU1JH
QkZsb2F0Q29tcG9uZW50cyB7IH07CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFNSR0JGbG9hdENvbXBvbmVudHMgeyB9OworfQorCiBSZWY8RXh0ZW5kZWRD
b2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMs
IGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IobWFrZUNvbXBvbmVudHMoYzEs
IGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpKSk7CiB9CiAKLXVuc2lnbmVkIEV4dGVuZGVkQ29s
b3I6Omhhc2goKSBjb25zdAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShTUkdCRmxvYXRDb21wb25lbnRzJiYgY29tcG9uZW50cykKIHsKLSAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjaGFubmVscygpOwotICAgIHJldHVybiBjb21wdXRlSGFzaChjMSwgYzIs
IGMzLCBhbHBoYSwgbV9jb2xvclNwYWNlKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRl
bmRlZENvbG9yKGNvbXBvbmVudHMpKTsKIH0KIAotU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1Rl
eHQoKSBjb25zdAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShEaXNw
bGF5UDNGbG9hdENvbXBvbmVudHMmJiBjb21wb25lbnRzKQogewotICAgIGNvbnN0IGNoYXIqIGNv
bG9yU3BhY2U7Ci0gICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3Bh
Y2U6OlNSR0I6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSAic3JnYiI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICBjb2xvclNwYWNlID0gImRp
c3BsYXktcDMiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKLSAgICB9
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihjb21wb25lbnRzKSk7Cit9
CisKK2Zsb2F0IEV4dGVuZGVkQ29sb3I6OmFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX2NvbXBvbmVudHMsCisgICAgICAgIFtdKGNvbnN0IFNSR0JGbG9hdENvbXBv
bmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzLmNvbXBv
bmVudHNbM107CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0IERpc3BsYXlQM0Zsb2F0Q29t
cG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHMuY29t
cG9uZW50c1szXTsKKyAgICAgICAgfQorICAgICk7Cit9CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMz
LCBleGlzdGluZ0FscGhhXSA9IGNoYW5uZWxzKCk7CitDb2xvclNwYWNlIEV4dGVuZGVkQ29sb3I6
OmNvbG9yU3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fY29tcG9u
ZW50cywKKyAgICAgICAgW10oY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYpIHsKKyAgICAgICAg
ICAgIHJldHVybiBDb2xvclNwYWNlOjpTUkdCOworICAgICAgICB9LAorICAgICAgICBbXShjb25z
dCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMmKSB7CisgICAgICAgICAgICByZXR1cm4gQ29sb3JT
cGFjZTo6RGlzcGxheVAzOworICAgICAgICB9CisgICAgKTsKK30KIAotICAgIGlmIChXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEoKSwgMS4wZikpCi0gICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScp
OwordW5zaWduZWQgRXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9jb21wb25lbnRzLAorICAgICAgICBbXShjb25zdCBTUkdCRmxvYXRDb21w
b25lbnRzJiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBo
YV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGMxLCBjMiwg
YzMsIGFscGhhLCBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29u
c3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBh
dXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgcmV0dXJu
IGNvbXB1dGVIYXNoKGMxLCBjMiwgYzMsIGFscGhhLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwor
ICAgICAgICB9CisgICAgKTsKK30KIAotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBj
b2xvclNwYWNlLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgZXhpc3RpbmdBbHBo
YSwgJyknKTsKK1N0cmluZyBFeHRlbmRlZENvbG9yOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBh
dXRvIGNvbXBvc2UgPSBbXShjb25zdCBjaGFyKiBjb2xvclNwYWNlLCBmbG9hdCBjMSwgZmxvYXQg
YzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygiY29sb3IoIiwgY29sb3JTcGFjZSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywg
JyknKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIGNvbG9yU3BhY2UsICcg
JywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKKyAgICB9OworCisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9jb21wb25lbnRzLAorICAgICAgICBbJl0oY29uc3Qg
U1JHQkZsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50czsKKyAgICAgICAgICAgIHJldHVybiBjb21wb3Nl
KCJzcmdiIiwgYzEsIGMyLCBjMywgYWxwaGEpOworICAgICAgICB9LAorICAgICAgICBbJl0oY29u
c3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBh
dXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgcmV0dXJu
IGNvbXBvc2UoImRpc3BsYXktcDMiLCBjMSwgYzIsIGMzLCBhbHBoYSk7CisgICAgICAgIH0KKyAg
ICApOwogfQogCiBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y29sb3JXaXRoQWxw
aGEoZmxvYXQgb3ZlcnJpZGVBbHBoYSkgY29uc3QKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBl
eGlzdGluZ0FscGhhXSA9IGNoYW5uZWxzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNy
ZWF0ZShjMSwgYzIsIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fY29tcG9uZW50cywKKyAgICAgICAgWyZdKGNvbnN0IFNSR0JGbG9h
dENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIFNSR0JGbG9hdENvbXBvbmVu
dHMgY29tcG9uZW50c0NvcHkgPSBjb21wb25lbnRzOworICAgICAgICAgICAgY29tcG9uZW50c0Nv
cHkuY29tcG9uZW50c1szXSA9IG92ZXJyaWRlQWxwaGE7CisgICAgICAgICAgICByZXR1cm4gRXh0
ZW5kZWRDb2xvcjo6Y3JlYXRlKHN0ZDo6bW92ZShjb21wb25lbnRzQ29weSkpOworICAgICAgICB9
LAorICAgICAgICBbJl0oY29uc3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRz
KSB7CisgICAgICAgICAgICBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMgY29tcG9uZW50c0NvcHkg
PSBjb21wb25lbnRzOworICAgICAgICAgICAgY29tcG9uZW50c0NvcHkuY29tcG9uZW50c1szXSA9
IG92ZXJyaWRlQWxwaGE7CisgICAgICAgICAgICByZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRl
KHN0ZDo6bW92ZShjb21wb25lbnRzQ29weSkpOworICAgICAgICB9CisgICAgKTsKIH0KIAogUmVm
PEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxv
YXQgb3ZlcnJpZGVBbHBoYSkgY29uc3QKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBleGlzdGlu
Z0FscGhhXSA9IGNoYW5uZWxzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgx
LjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNl
KCkpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fY29tcG9uZW50cywKKyAgICAgICAgWyZd
KGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHM7CisgICAgICAgICAgICByZXR1cm4g
RXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKFNSR0JGbG9hdENvbXBvbmVudHMgeyAxLjBmIC0gYzEsIDEu
MGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhIH0pOworICAgICAgICB9LAorICAgICAg
ICBbJl0oY29uc3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzKSB7CisgICAg
ICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25lbnRzOworICAgICAgICAg
ICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMg
eyAxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhIH0pOworICAg
ICAgICB9CisgICAgKTsKIH0KIAogYm9vbCBFeHRlbmRlZENvbG9yOjppc1doaXRlKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjaGFubmVscygpOwotICAgIHJldHVy
biBjMSA9PSAxICYmIGMyID09IDEgJiYgYzMgPT0gMSAmJiBhbHBoYSA9PSAxOworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fY29tcG9uZW50cywKKyAgICAgICAgW10oY29uc3QgU1JHQkZsb2F0
Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgYXV0byBbYzEsIGMyLCBjMywg
YWxwaGFdID0gY29tcG9uZW50czsKKyAgICAgICAgICAgIHJldHVybiBjMSA9PSAxICYmIGMyID09
IDEgJiYgYzMgPT0gMSAmJiBhbHBoYSA9PSAxOworICAgICAgICB9LAorICAgICAgICBbXShjb25z
dCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHM7CisgICAgICAgICAgICByZXR1cm4g
YzEgPT0gMSAmJiBjMiA9PSAxICYmIGMzID09IDEgJiYgYWxwaGEgPT0gMTsKKyAgICAgICAgfQor
ICAgICk7CiB9CiAKIGJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNCbGFjaygpIGNvbnN0CiB7Ci0gICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY2hhbm5lbHMoKTsKLSAgICByZXR1cm4gIWMxICYm
ICFjMiAmJiAhYzMgJiYgYWxwaGEgPT0gMTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Nv
bXBvbmVudHMsCisgICAgICAgIFtdKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVu
dHMpIHsKKyAgICAgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHM7
CisgICAgICAgICAgICByZXR1cm4gIWMxICYmICFjMiAmJiAhYzMgJiYgYWxwaGEgPT0gMTsKKyAg
ICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21w
b25lbnRzKSB7CisgICAgICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25l
bnRzOworICAgICAgICAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09IDE7
CisgICAgICAgIH0KKyAgICApOworfQorCitTUkdCRmxvYXRDb21wb25lbnRzIEV4dGVuZGVkQ29s
b3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fY29tcG9uZW50cywKKyAgICAgICAgW10oY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50
cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7CisgICAgICAg
IH0sCisgICAgICAgIFtdKGNvbnN0IERpc3BsYXlQM0Zsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50
cykgeworICAgICAgICAgICAgcmV0dXJuIHRvU1JHQihjb21wb25lbnRzKTsKKyAgICAgICAgfQor
ICAgICk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyMCAr
MjcsMjQgQEAKIAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb2xvclV0aWxp
dGllcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFeHRlbmRlZENvbG9yIDogcHVibGljIFJlZkNvdW50ZWQ8RXh0ZW5kZWRDb2xvcj4gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQik7Cisg
ICAgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoU1JHQkZsb2F0Q29tcG9uZW50cyYm
KTsKKyAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShEaXNwbGF5UDNGbG9hdENv
bXBvbmVudHMmJik7CiAKLSAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5l
bHMuY29tcG9uZW50c1szXTsgfQorICAgIHVzaW5nIENvbXBvbmVudHNUeXBlID0gVmFyaWFudDxT
UkdCRmxvYXRDb21wb25lbnRzLCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHM+OworICAgIENvbXBv
bmVudHNUeXBlIGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KIAot
ICAgIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgY2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2No
YW5uZWxzOyB9Ci0gICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclNwYWNlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgYWxwaGEoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIApAQCAtNTIsMTkgKzU2LDI5IEBA
IHB1YmxpYzoKICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2soKSBj
b25zdDsKIAorICAgIFNSR0JGbG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
IGNvbnN0OworCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9y
JiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBiKTsKKwogcHJpdmF0ZToKLSAgICBFeHRlbmRlZENv
bG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCi0gICAgICAgIDogbV9jaGFubmVscyhjMSwgYzIsIGMzLCBhbHBoYSkKLSAg
ICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLSAgICB7IH0KKyAgICBFeHRlbmRlZENv
bG9yKENvbXBvbmVudHNUeXBlJiYgY29tcG9uZW50cykKKyAgICAgICAgOiBtX2NvbXBvbmVudHMg
eyBjb21wb25lbnRzIH0KKyAgICB7CisgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRzIG1fY2hh
bm5lbHM7Ci0gICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07
CisgICAgQ29tcG9uZW50c1R5cGUgbV9jb21wb25lbnRzOwogfTsKIAogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBiKQog
ewotICAgIHJldHVybiBhLmNvbG9yU3BhY2UoKSA9PSBiLmNvbG9yU3BhY2UoKSAmJiBhLmNoYW5u
ZWxzKCkgPT0gYi5jaGFubmVscygpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEubV9jb21w
b25lbnRzLAorICAgICAgICBbJl0oY29uc3QgYXV0byYgY29tcG9uZW50cykgeworICAgICAgICAg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxkZWNsdHlwZShjb21wb25lbnRzKT46OnR5cGU+Ojp0
eXBlOworICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbXBvbmVudFR5
cGU+KGIubV9jb21wb25lbnRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gY29tcG9uZW50cy5jb21wb25lbnRzID09IFdURjo6Z2V0PENvbXBvbmVu
dFR5cGU+KGIubV9jb21wb25lbnRzKS5jb21wb25lbnRzOworICAgICAgICB9CisgICAgKTsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBF
eHRlbmRlZENvbG9yJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NCwxMyArNzQsMTIgQEAgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbAog
CiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNh
dHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7Ci0gICAgY29uc3QgZmxv
YXQgc2NhbGVGYWN0b3IgPSAyNTUuMDsKLSAgICBGbG9hdENvbXBvbmVudHMgZmxvYXRSZXN1bHQg
PSBoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7CisgICAg
YXV0byBzcmdiQ29tcG9uZW50cyA9IHRvU1JHQihIU0xGbG9hdENvbXBvbmVudHMgeyBodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cigKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9y
KSk7CisgICAgICAgIHJvdW5kKHNyZ2JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUuMCks
CisgICAgICAgIHJvdW5kKHNyZ2JDb21wb25lbnRzLmNvbXBvbmVudHNbMV0gKiAyNTUuMCksCisg
ICAgICAgIHJvdW5kKHNyZ2JDb21wb25lbnRzLmNvbXBvbmVudHNbMl0gKiAyNTUuMCksCisgICAg
ICAgIHJvdW5kKHNyZ2JDb21wb25lbnRzLmNvbXBvbmVudHNbM10gKiAyNTUuMCkpOwogfQogCiBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ29sb3JDb21w
b25lbnRzIHsKKyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzIGZyb21SR0JBKHVuc2lnbmVkIHBp
eGVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbG9yQ29tcG9uZW50cygocGl4ZWwgPj4gMjQp
ICYgMHhGRiwgKHBpeGVsID4+IDE2KSAmIDB4RkYsIChwaXhlbCA+PiA4KSAmIDB4RkYsIHBpeGVs
ICYgMHhGRik7CisgICAgfQorCisgICAgQ29sb3JDb21wb25lbnRzKHVpbnQ4X3QgYSA9IDAsIHVp
bnQ4X3QgYiA9IDAsIHVpbnQ4X3QgYyA9IDAsIHVpbnQ4X3QgZCA9IDApCisgICAgeworICAgICAg
ICBjb21wb25lbnRzWzBdID0gYTsKKyAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7CisgICAgICAg
IGNvbXBvbmVudHNbMl0gPSBjOworICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCB0b1JHQkEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBv
bmVudHNbMF0gPDwgMjQgfCBjb21wb25lbnRzWzFdIDw8IDE2IHwgY29tcG9uZW50c1syXSA8PCA4
IHwgY29tcG9uZW50c1szXTsKKyAgICB9CisKKyAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDQ+IGNv
bXBvbmVudHM7Cit9OworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1heChj
b25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAg
ICByZXR1cm4geworICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50
c1swXSksCisgICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRzWzFd
KSwKKyAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVudHNbMl0pLAor
ICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50c1szXSkKKyAgICB9
OworfQorCitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xv
ckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAgICByZXR1cm4g
eworICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSksCisg
ICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRzWzFdKSwKKyAgICAg
ICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVudHNbMl0pLAorICAgICAgICBz
dGQ6Om1pbihhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50c1szXSkKKyAgICB9OworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29s
b3JDb21wb25lbnRzJiBiKQoreworICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25l
bnRzOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYg
YSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9
CisKIC8vIENvbG9yIHZhbHVlIHdpdGggOC1iaXQgY29tcG9uZW50cyBmb3IgcmVkLCBncmVlbiwg
Ymx1ZSwgYW5kIGFscGhhLgogLy8gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgc3RvcmVkIGFzIGEg
MzItYml0IGludGVnZXIsIHdpdGggYWxwaGEgaW4gdGhlIGhpZ2ggYml0czogQVJHQi4KIC8vIEZJ
WE1FOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBjb25zb2xpZGF0ZWQgd2l0aCBDb2xvckNvbXBvbmVu
dHMuCkBAIC02OCw2ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gYWxwaGFD
b21wb25lbnQoKTsKICAgICB9CiAKKyAgICBTUkdCRmxvYXRDb21wb25lbnRzIGFzU1JHQkZsb2F0
Q29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIHsgcmVkQ29tcG9uZW50KCkgLyAyNTUuMGYsIGdy
ZWVuQ29tcG9uZW50KCkgLyAyNTUuMGYsIGJsdWVDb21wb25lbnQoKSAvIDI1NS4wZiwgIGFscGhh
Q29tcG9uZW50KCkgLyAyNTUuMGYgfTsgfQorCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fdmFs
dWUgeyAwIH07CiB9OwpAQCAtMTMxLDcgKzE4NSw2IEBAIGlubGluZSB1aW50MTZfdCBmYXN0RGl2
aWRlQnkyNTUodWludDE2X3QKIAogaW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29s
b3JCeXRlKGZsb2F0IGYpCiB7Ci0gICAgLy8gRklYTUU6IENvbnNvbGlkYXRlIHdpdGggY2xhbXBl
ZENvbG9yQ29tcG9uZW50KCkuCiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFk
IG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCiAgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCShyZXZpc2lvbiAyNjIxNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDIyICsxMDksMTkg
QEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVAogCiBzdGF0aWMgQ0dD
b2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKLSAgICBDR0Zsb2F0IGNnRmxvYXRD
b21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OwotCi0gICAgc3dpdGNoIChjb2xvclNwYWNlKSB7
Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICByZXR1cm4gQ0dDb2xvckNyZWF0
ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjZ0Zsb2F0Q29tcG9uZW50cyk7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKGRpc3BsYXlQ
M0NvbG9yU3BhY2VSZWYoKSwgY2dGbG9hdENvbXBvbmVudHMpOwotICAgIGNhc2UgQ29sb3JTcGFj
ZTo6TGluZWFyUkdCOgotICAgICAgICAvLyBGSVhNRTogRG8gd2UgZXZlciBjcmVhdGUgQ0dDb2xv
clJlZnMgaW4gdGhlc2Ugc3BhY2VzPyBJdCBtYXkgb25seSBiZSBJbWFnZUJ1ZmZlcnMuCi0gICAg
ICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNnRmxvYXRDb21w
b25lbnRzKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBjb2xvci5hc1R5cGVkRmxvYXRDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29tcG9uZW50cywKKyAgICAgICAgW10o
Y29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgQ0dGbG9hdCBjZ0Zsb2F0
Q29tcG9uZW50c1s0XSB7IHIsIGcsIGIsIGEgfTsKKyAgICAgICAgICAgIHJldHVybiBDR0NvbG9y
Q3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNnRmxvYXRDb21wb25lbnRzKTsKKyAgICAgICAg
fSwKKyAgICAgICAgW10oY29uc3QgRGlzcGxheVAzRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRz
KSB7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgICAg
ICAgICBDR0Zsb2F0IGNnRmxvYXRDb21wb25lbnRzWzRdIHsgciwgZywgYiwgYSB9OworICAgICAg
ICAgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpLCBjZ0Zs
b2F0Q29tcG9uZW50cyk7CisgICAgICAgIH0KKyAgICApOwogfQogCiBDR0NvbG9yUmVmIGNhY2hl
ZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDI2MjE2NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIENHR3JhZGllbnRSZWYgR3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQKIAogICAgIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBhdXRv
IGNvbG9yc0FycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBtX3N0b3BzLnNp
emUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIHVuc2lnbmVkIG51bVN0b3BzID0g
bV9zdG9wcy5zaXplKCk7CiAKICAgICBjb25zdCBpbnQgcmVzZXJ2ZWRTdG9wcyA9IDM7CkBAIC01
OCwzMiArNTcsNDQgQEAgQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudAog
ICAgIFZlY3RvcjxDR0Zsb2F0LCA0ICogcmVzZXJ2ZWRTdG9wcz4gY29sb3JDb21wb25lbnRzOwog
ICAgIGNvbG9yQ29tcG9uZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVN0b3BzICogNCk7
CiAKLSAgICBib29sIGhhc0V4dGVuZGVkQ29sb3JzID0gZmFsc2U7CisgICAgYm9vbCBoYXNOb25T
UkdCQ29sb3JzID0gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9wIDogbV9zdG9wcykg
ewogCiAgICAgICAgIC8vIElmIGFsbCB0aGUgc3RvcHMgYXJlIHNSR0IsIGl0IGlzIGZhc3RlciB0
byBjcmVhdGUgYSBncmFkaWVudCB1c2luZwogICAgICAgICAvLyBjb21wb25lbnRzIHRoYW4gQ0dD
b2xvcnMuCi0gICAgICAgIC8vIEZJWE1FOiBSYXRoZXIgdGhhbiBqdXN0IGNoZWNrIGZvciBleHRl
bmRlZCBjb2xvcnMsIHdlIHNob3VsZCBjaGVjayB0aGUgYWN0dWFsCi0gICAgICAgIC8vIGNvbG9y
IHNwYWNlLCBhbmQgd2hldGhlciBvciBub3QgdGhlIGNvbXBvbmVudHMgYXJlIG91dHNpZGUgWzAt
MV0uCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMjkyNjYwNj4KIAotICAgICAgICBpZiAo
c3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICBoYXNFeHRlbmRlZENvbG9ycyA9
IHRydWU7CisgICAgICAgIC8vIEZJWE1FOiBSYXRoZXIgdGhhbiBzcGVjaWFsIGNhc2luZyBzUkdC
IGhlcmUsIHdlIHNob3VsZCBjb252ZXJ0IHRoaXMgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAg
ICAgLy8gMSkgMXN0IGxvb3A6IERldGVybWluZSBhbiBpbmNsdXNpdmUgY29sb3Igc3BhY2UgZm9y
IGVudGlyZSBncmFkaWVudCAoZS5nLiBvbmUgdGhhdCBpcworICAgICAgICAvLyAgICBpbmNsdXNp
dmUgYWxsIHRoZSBjb2xvciBzdG9wcykuCisgICAgICAgIC8vIDIpIDJuZCBsb29wOiBDb3ZlcnQg
ZWFjaCBjb2xvciBzdG9wIHRvIHRoYXQgaW5jbHVzaXZlIGNvbG9yIHNwYWNlIGFuZCB1c2UgQ0dH
cmFkaWVudENyZWF0ZVdpdGhDb2xvckNvbXBvbmVudHMoKS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gV2UgY291bGQgbWFpbnRhaW4gdGhlIHNSR0Igb3B0aW1pemF0aW9uIGJ5IGFzc3VtaW5nIGFs
bCBjb2xvcnMgd2lsbCBiZSBzUkdCIGFuZCBvbmx5IGRvaW5nIG9uZSBsb29wLCBidXQgSSBhbQor
ICAgICAgICAvLyBub3Qgc3VyZSB0aGF0IHdvdWxkIGJ1eSB1cyBhbnl0aGluZyByZWFsbHkuCisg
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMjkyNjYwNj4KIAotICAgICAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KTsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwotICAgICAgICBjb2xv
ckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKHIpOwotICAgICAgICBjb2xvckNvbXBvbmVudHMu
dW5jaGVja2VkQXBwZW5kKGcpOwotICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBw
ZW5kKGIpOwotICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKGEpOworICAg
ICAgICBhdXRvIGNvbXBvbmVudHMgPSBzdG9wLmNvbG9yLmFzVHlwZWRGbG9hdENvbXBvbmVudHMo
KTsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihjb21wb25lbnRzLAorICAgICAgICAgICAgWyZdKGNv
bnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgICAgICAgICAgICAgY29sb3JDb21w
b25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKKyAgICAgICAgICAgICAgICBjb2xvckNvbXBvbmVu
dHMudW5jaGVja2VkQXBwZW5kKGcpOworICAgICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51
bmNoZWNrZWRBcHBlbmQoYik7CisgICAgICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hl
Y2tlZEFwcGVuZChhKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgRGlz
cGxheVAzRmxvYXRDb21wb25lbnRzJikgeworICAgICAgICAgICAgICAgIGhhc05vblNSR0JDb2xv
cnMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICApOwogCi0gICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShjb2xvcnNBcnJheS5nZXQoKSwgY2FjaGVkQ0dDb2xvcihzdG9wLmNvbG9yKSk7
CiAgICAgICAgIGxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoc3RvcC5vZmZzZXQpOwogICAgIH0K
IAotICAgIGlmIChoYXNFeHRlbmRlZENvbG9ycykKKyAgICBpZiAoaGFzTm9uU1JHQkNvbG9ycykg
eworICAgICAgICBhdXRvIGNvbG9yc0FycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJs
ZSgwLCBtX3N0b3BzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBtX3N0b3BzKQorICAgICAgICAgICAgQ0ZBcnJheUFwcGVu
ZFZhbHVlKGNvbG9yc0FycmF5LmdldCgpLCBjYWNoZWRDR0NvbG9yKHN0b3AuY29sb3IpKTsKICAg
ICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JzKGV4dGVuZGVkU1JH
QkNvbG9yU3BhY2VSZWYoKSwgY29sb3JzQXJyYXkuZ2V0KCksIGxvY2F0aW9ucy5kYXRhKCkpOwot
ICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVh
dGVXaXRoQ29sb3JDb21wb25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9uZW50
cy5kYXRhKCksIGxvY2F0aW9ucy5kYXRhKCksIG51bVN0b3BzKTsKIAogICAgIHJldHVybiBtX2dy
YWRpZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDI2MjE2
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4NiwxMiBAQCB2b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAKK2lubGluZSB1bnNpZ25l
ZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dC
eXRlcykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKKyAgICByZXR1
cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Cit9CisKIHZvaWQgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjIxNjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQsOCArNDA0LDEzIEBAIGJvb2wgRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3
aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAg
ICAgCi0gICAgRmxvYXRDb21wb25lbnRzIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFj
ZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgPyByZ2JUb0xpbmVhckNvbXBvbmVudHMobV9s
aWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgOiBtX2xpZ2h0aW5nQ29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKGxpZ2h0Q29sb3IuY29tcG9uZW50c1sw
XSwgbGlnaHRDb2xvci5jb21wb25lbnRzWzFdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMl0pOwor
ICAgIGlmIChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
CisgICAgICAgIGF1dG8gbGlnaHRDb2xvciA9IHRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5n
Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmlu
aXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5j
b21wb25lbnRzWzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9u
ZW50c1syXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBsaWdodENvbG9yID0gbV9saWdo
dGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICAgICAgcGFpbnRpbmdEYXRh
LmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xv
ci5jb21wb25lbnRzWzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29t
cG9uZW50c1syXSk7CisgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEo
KnRoaXMsIHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcg
KzIxNyw3IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmMKIH0KIAog
Ly8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1GbG9hdENvbXBvbmVudHMg
RkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBj
b25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3Rv
cikgY29uc3QKK1NSR0JGbG9hdENvbXBvbmVudHMgRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKIHsKICAgICBzdHJ1Y3QgTm9p
c2VQb3NpdGlvbiB7CiAgICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMg
dGV4dC4KQEAgLTMyMiwxOSArMzIyLDE5IEBAIEZsb2F0Q29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoY28KIH0KIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0
bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9y
IGNvbXBvbmVudHMuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50cyB0b0NvbG9yQ29tcG9u
ZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGZsb2F0Q29tcG9uZW50cykKK3N0YXRpYyBpbmxp
bmUgQ29sb3JDb21wb25lbnRzIHRvQ29sb3JDb21wb25lbnRzKGNvbnN0IFNSR0JGbG9hdENvbXBv
bmVudHMmIGZsb2F0Q29tcG9uZW50cykKIHsKICAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1h
eDx1aW50OF90PigwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50cy5j
b21wb25lbnRzWzBdICogMjU1KSwgMjU1KSksCi0gICAgICAgIHN0ZDo6bWF4PHVpbnQ4X3Q+KDAs
IHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMV0g
KiAyNTUpLCAyNTUpKSwKLSAgICAgICAgc3RkOjptYXg8dWludDhfdD4oMCwgc3RkOjptaW4oc3Rh
dGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHMuY29tcG9uZW50c1syXSAqIDI1NSksIDI1NSkp
LAotICAgICAgICBzdGQ6Om1heDx1aW50OF90PigwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzNdICogMjU1KSwgMjU1KSkKKyAgICAgICAgc3Rk
OjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50cy5jb21wb25l
bnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzFdICogMjU1KSwgMCwgMjU1
KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29t
cG9uZW50cy5jb21wb25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFt
cDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzNd
ICogMjU1KSwgMCwgMjU1KQogICAgIH07CiB9CiAKIENvbG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVu
Y2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQ7CisgICAgU1JHQkZsb2F0Q29tcG9uZW50cyB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7CiAg
ICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZy
ZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7CiAgICAg
ZmxvYXQgcmF0aW8gPSAxOwogICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVt
T2N0YXZlczsgKytvY3RhdmUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gMjYyMTY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0
Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFz
ZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIEZsb2F0Q29tcG9uZW50cyBub2lzZTJEKGNvbnN0IFBh
aW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgU1JHQkZsb2F0Q29tcG9uZW50cyBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNv
bnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgQ29sb3JDb21w
b25lbnRzIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0
YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGZpbGxS
ZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4CiAgICAgcmV0
dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVu
ZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogfQogCi1ib29sIEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9u
ZW50cyYgY29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21wb25lbnRzJiBjb2xvckNvbXBv
bmVudHMpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FM
RTogewpAQCAtMTUxLDcgKzE1MSw3IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29t
cG9uZW50VHIKICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyks
IG1fdHlwZSk7CiB9CiAKLWJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bjo6dHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJiBjb2xvckNvbXBvbmVudHMpIGNvbnN0
Citib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNv
bG9yKFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbG9yQ29tcG9uZW50cykgY29uc3QKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgT1BBQ0lUWToKQEAgLTIyNSwxNSArMjI1LDE1IEBA
IFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0YKICAgICByZXR1cm4gSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKIH0KIAotYm9vbCBJbnZlcnRM
aWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYg
c1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3Bl
cmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21wb25lbnRzJiBzUkdCQ29sb3JDb21w
b25lbnRzKSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyBoc2xDb21wb25lbnRzID0gc1JH
QlRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOwotICAgIAorICAgIGF1dG8gaHNsQ29tcG9uZW50
cyA9IHRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworCiAgICAgLy8gUm90YXRlIHRoZSBodWUg
MTgwZGVnLgogICAgIGhzbENvbXBvbmVudHMuY29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29tcG9u
ZW50cy5jb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7CiAgICAgCiAgICAgLy8gQ29udmVydCBi
YWNrIHRvIFJHQi4KLSAgICBzUkdCQ29sb3JDb21wb25lbnRzID0gaHNsVG9TUkdCKGhzbENvbXBv
bmVudHMpOworICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSB0b1NSR0IoaHNsQ29tcG9uZW50cyk7
CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2
NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3QgZmxvYXQgbWF0
cml4VmFsdWVzWzIwXSA9IHsKQEAgLTI0OCw5ICsyNDgsOSBAQCBib29sIEludmVydExpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW52ZXJ0
TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IoRmxvYXRDb21w
b25lbnRzJiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBJbnZlcnRMaWdodG5lc3NG
aWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21wb25lbnRz
JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyByZ2JD
b21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9uZW50czsKKyAgICBTUkdCRmxvYXRDb21wb25lbnRz
IHJnYkNvbXBvbmVudHMgPSBzUkdCQ29sb3JDb21wb25lbnRzOwogICAgIC8vIEFwcGx5IHRoZSBt
YXRyaXguCiAgICAgY29uc3QgZmxvYXQgbWF0cml4VmFsdWVzWzIwXSA9IHsKICAgICAgICAgLTEu
MzAwLCAtMC4wOTcsICAwLjE0NywgMCwgMS4yNSwKQEAgLTI2MiwxMSArMjYyLDExIEBAIGJvb2wg
SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnYKICAgICB0b0xpZ2h0TW9kZU1hdHJp
eC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMocmdiQ29tcG9uZW50cyk7CiAKICAgICAvLyBDb252
ZXJ0IHRvIEhTTC4KLSAgICBGbG9hdENvbXBvbmVudHMgaHNsQ29tcG9uZW50cyA9IHNSR0JUb0hT
TChyZ2JDb21wb25lbnRzKTsKKyAgICBhdXRvIGhzbENvbXBvbmVudHMgPSB0b0hTTChyZ2JDb21w
b25lbnRzKTsKICAgICAvLyBIdWUgcm90YXRlIGJ5IDE4MGRlZy4KICAgICBoc2xDb21wb25lbnRz
LmNvbXBvbmVudHNbMF0gPSBmbW9kKGhzbENvbXBvbmVudHMuY29tcG9uZW50c1swXSArIDAuNWYs
IDEuMGYpOwogICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMg
PSBoc2xUb1NSR0IoaHNsQ29tcG9uZW50cyk7CisgICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IHRv
U1JHQihoc2xDb21wb25lbnRzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyNjIxNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOwogY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U7CiBjbGFzcyBGaWx0ZXJFZmZl
Y3Q7Ci1zdHJ1Y3QgRmxvYXRDb21wb25lbnRzOwogc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9u
czsKIAogY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEZpbHRlck9wZXJhdGlvbj4gewpAQCAtNzksOCArNzgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdHJhbnNmb3JtQ29s
b3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNvbG9yKFNSR0JGbG9hdENv
bXBvbmVudHMmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZl
cnNlVHJhbnNmb3JtQ29sb3IoU1JHQkZsb2F0Q29tcG9uZW50cyYpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KIApAQCAtMjI4LDcgKzIyNyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJv
b2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21wb25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjYzLDcgKzI2Miw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRz
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21w
b25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAt
MjkwLDggKzI4OSw4IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNm
b3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpbnZlcnNl
VHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgZmluYWw7CisgICAgYm9vbCB0
cmFuc2Zvcm1Db2xvcihTUkdCRmxvYXRDb21wb25lbnRzJikgY29uc3QgZmluYWw7CisgICAgYm9v
bCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoU1JHQkZsb2F0Q29tcG9uZW50cyYpIGNvbnN0IGZpbmFs
OwogfTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgQmx1ckZpbHRlck9wZXJhdGlvbiA6IHB1Ymxp
YyBGaWx0ZXJPcGVyYXRpb24gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyNjIxNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTQgKzExMSwxNCBA
QCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9y
LmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRDb21wb25l
bnRzIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0
byBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRp
b24tPnRyYW5zZm9ybUNvbG9yKGNvbXBvbmVudHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGNvbG9yID0gQ29sb3IoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBj
b21wb25lbnRzLmNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9u
ZW50cy5jb21wb25lbnRzWzNdKTsKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIGNv
bXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDE0ICsxMzAsMTQgQEAgYm9vbCBGaWx0ZXJPcGVyYXRp
b25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0Q29tcG9uZW50cyBjb21wb25lbnRzID0gY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
bV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3Jt
Q29sb3IoY29tcG9uZW50cykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgY29sb3IgPSBDb2xvcihjb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29t
cG9uZW50c1sxXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVu
dHNbM10pOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhjb21wb25lbnRz
LmNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgY29tcG9uZW50cy5jb21w
b25lbnRzWzJdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbM10pOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjIxNzIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0wNS0yNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVyaW1lbnQgd2l0aCBzdHJvbmdseSB0eXBl
ZCBGbG9hdENvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKwogMjAyMC0wNS0yNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVURi04IGVuY29kZSBzdHJpbmdzIG9mIGludmFsaWQg
VVJMcyB3aGVuIGNvbnZlcnRpbmcgV1RGOjpVUkwgdG8gTlNVUkwgaW5zdGVhZCBvZiB0cnVuY2F0
aW5nIHRoZSBVVEYtMTYgZW5jb2RpbmcKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjE2NikKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKIHsKICAgICBD
b2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gdG9I
U0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBodWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKQEAgLTUzLDcg
KzUzLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAg
YXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHRvSFNMKGNvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7CkBAIC02OSw3ICs2OSw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBDb2xvciBjb2xvcigyNTUsIDAsIDApOwog
Ci0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hT
TChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gW2h1ZSwgc2F0dXJh
dGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSB0b0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDEsIHNhdHVyYXRpb24pOwpAQCAtODUsNyArODUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvcigwLCAyNTUsIDApOwogCi0gICAgYXV0byBbaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYV0gPSB0b0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEs
IHNhdHVyYXRpb24pOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0Js
dWUpCiB7CiAgICAgQ29sb3IgY29sb3IoMCwgMCwgMjU1KTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGFdID0gdG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIAogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjY2NjY2NjY5LCBodWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1
cmF0aW9uKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3Jh
eSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gW2h1
ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGFdID0gdG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIAogICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0
aW9uKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewog
ICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7CisgICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9
IHRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7CkBAIC0x
NDksNyArMTQ5LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENv
bG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpKTsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0g
dG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBodWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRl
ZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjIxNjYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksMTIgKzM5LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAgICAgQ29s
b3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFd
ID0gYzEuYXNFeHRlbmRlZCgpLmNoYW5uZWxzKCk7CisgICAgYXV0byBjb21wb25lbnRzID0gYzEu
YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKKyAgICBXVEY6OnN3aXRjaE9uKGNvbXBvbmVudHMs
CisgICAgICAgIFtdKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAg
ICAgICAgICAgIEZBSUwoKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgRGlzcGxheVAz
RmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwg
cik7CisgICAgICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICAgICAgICAgIEVY
UEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAs
IGFscGhhKTsKKyAgICAgICAgfQorICAgICk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBy
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4y
NSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgx
dSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogICAgIEVYUEVDVF9FUShjMS5jc3NUZXh0
KCksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7CiB9CkBAIC01NiwxMiArNjQsMjAg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKICAgICBDb2xvciBjMihj
MSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMi5hc0V4dGVuZGVkKCkuY2hhbm5l
bHMoKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBjMi5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
OworICAgIFdURjo6c3dpdGNoT24oY29tcG9uZW50cywKKyAgICAgICAgW10oY29uc3QgU1JHQkZs
b2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgRkFJTCgpOworICAgICAg
ICB9LAorICAgICAgICBbXShjb25zdCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVu
dHMpIHsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7Cisg
ICAgICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICAgICAgICAgIEVYUEVDVF9G
TE9BVF9FUSgwLjUsIGcpOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwor
ICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgICAgICB9CisgICAg
KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgw
LjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291
bnQoKSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7CiAg
ICAgRVhQRUNUX0VRKGMyLmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSki
KTsKQEAgLTc0LDEyICs5MCwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiAK
ICAgICBDb2xvciBjMiA9IGMxOwogCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzIuYXNF
eHRlbmRlZCgpLmNoYW5uZWxzKCk7CisgICAgYXV0byBjb21wb25lbnRzID0gYzIuYXNFeHRlbmRl
ZCgpLmNvbXBvbmVudHMoKTsKKyAgICBXVEY6OnN3aXRjaE9uKGNvbXBvbmVudHMsCisgICAgICAg
IFtdKGNvbnN0IFNSR0JGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAg
IEZBSUwoKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgRGlzcGxheVAzRmxvYXRDb21w
b25lbnRzJiBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0g
PSBjb21wb25lbnRzOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CisgICAg
ICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICAgICAgICAgIEVYUEVDVF9GTE9B
VF9FUSgwLjI1LCBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsK
KyAgICAgICAgfQorICAgICk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgydSwgYzEuYXNF
eHRlbmRlZCgpLnJlZkNvdW50KCkpOwogICAgIEVYUEVDVF9FUSgydSwgYzIuYXNFeHRlbmRlZCgp
LnJlZkNvdW50KCkpOwogICAgIEVYUEVDVF9FUShjMi5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5
LXAzIDEgMC41IDAuMjUpIik7CkBAIC0xNTksMTIgKzE4MywyMCBAQCBURVNUKEV4dGVuZGVkQ29s
b3IsIE1vdmVDb25zdHJ1Y3RvcikKICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNFeHRlbmRlZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFs
cGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jaGFubmVscygpOworICAgIGF1dG8gY29tcG9uZW50cyA9
IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CisgICAgV1RGOjpzd2l0Y2hPbihjb21wb25l
bnRzLAorICAgICAgICBbXShjb25zdCBTUkdCRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzKSB7
CisgICAgICAgICAgICBGQUlMKCk7CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0IERpc3Bs
YXlQM0Zsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKKyAgICAgICAgICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIHIpOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
MS4wLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICApOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEu
MCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1Rf
RVEoMXUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKICAgICBFWFBFQ1RfRVEoYzIuY3Nz
VGV4dCgpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQpAQCAtMTgxLDEyICsy
MTMsMTkgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKICAgICBFWFBFQ1Rf
RkFMU0UoYzEuaXNFeHRlbmRlZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsK
IAotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jaGFubmVscygp
OwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAu
NSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgxLjAsIGFscGhhKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBjMi5hc0V4dGVuZGVkKCkuY29t
cG9uZW50cygpOworICAgIFdURjo6c3dpdGNoT24oY29tcG9uZW50cywKKyAgICAgICAgW10oY29u
c3QgU1JHQkZsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAgICAgICAgICAgRkFJTCgp
OworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBEaXNwbGF5UDNGbG9hdENvbXBvbmVudHMm
IGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBv
bmVudHM7CisgICAgICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICAgICAgICAg
IEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDAu
MjUsIGIpOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgICAg
ICB9CisgICAgKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgp
KTsKICAgICBFWFBFQ1RfRVEoYzIuY3NzVGV4dCgpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAw
LjI1KSIpOwogfQpAQCAtMTk5LDEyICsyMzgsMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNp
Y1JlZmVyZW5jZUNvdW50aQogICAgIENvbG9yKiBjMiA9IG5ldyBDb2xvcigqYzEpOwogICAgIENv
bG9yKiBjMyA9IG5ldyBDb2xvcigqYzIpOwogCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0g
YzItPmFzRXh0ZW5kZWQoKS5jaGFubmVscygpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGMyLT5h
c0V4dGVuZGVkKCkuY29tcG9uZW50cygpOworICAgIFdURjo6c3dpdGNoT24oY29tcG9uZW50cywK
KyAgICAgICAgW10oY29uc3QgU1JHQkZsb2F0Q29tcG9uZW50cyYgY29tcG9uZW50cykgeworICAg
ICAgICAgICAgRkFJTCgpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBEaXNwbGF5UDNG
bG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbXBvbmVudHM7CisgICAgICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBy
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOworICAgICAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAuMjUsIGIpOworICAgICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwg
YWxwaGEpOworICAgICAgICB9CisgICAgKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1
LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQRUNUX0VRKDN1
LCBjMi0+YXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogICAgIEVYUEVDVF9FUShjMi0+Y3NzVGV4
dCgpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401754</attachid>
            <date>2020-06-12 11:27:24 -0700</date>
            <delta_ts>2020-06-12 11:57:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612112723.patch</filename>
            <type>text/plain</type>
            <size>55586</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3QgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisgICAgICAgIAorICAgICAgICBUaGUg
Z29hbCBpcyB0byBhZGQgdHlwZSBjbGFyaXR5ICh5b3Uga25vdyB3aGVuIHlvdSBhcmUgZGVhbGlu
ZworICAgICAgICB3aXRoIGFuIHNSR0IgY29sb3IgdnMuIGEgRGlzcGxheVAzIGNvbG9yKSBhbmQg
bWFrZSBkZWFsaW5nIHdpdGgKKyAgICAgICAgdGhlIGNvbG9ycyBuaWNlciAoY29sb3IucmVkIHJh
dGhlciB0aGFuIGNvbG9yWzBdKS4gSXQgYWxzbyBhbGxvd3MKKyAgICAgICAgdXMgdG8gc2ltcGxp
ZnkgdGhlIG5hbWluZyBvZiBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGJldHdlZW4gY29sb3IgCisg
ICAgICAgIHR5cGVzIGFzIG5vdyBvbmx5IHRoZSBvdXRwdXQgdHlwZSBuZWVkcyB0byBiZSBpbiB0
aGUgZnVuY3Rpb24gbmFtZS4KKyAKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICBB
ZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgaGVhZGVyLCBDb2xvclR5cGVzLmgK
KworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VIU0xQYXJhbWV0
ZXJzKToKKyAgICAgICAgU3dpdGNoIGZyb20gaHNsVG9TUkdCKHsgLi4uIH0pIHRvIHRvU1JHQkEo
SFNMQUNvbG9yIHsgLi4uIH0pCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
YW5nZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgdG9IU0xBKCkgYW5kIEhTTEFDb2xvciBtYWtp
bmcgdGhlIGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb2xvckxvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAg
ICBSZW5hbWVzIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSB0byB0b1NSR0JBQ29sb3JMb3NzeSgp
IHdoaWNoIG5vdyByZXR1cm5zCisgICAgICAgIGEgU1JHQkFDb2xvci4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yTWF0cml4Ojp0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICBSZW1vdmUgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzLCBrZWVwaW5nIGp1c3QgdHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gc2ltcGxpZnkgdGhlIGludGVyZmFj
ZS4gV2l0aCBsYXRlIGNvbnZlcnNpb24gdG8gQ29sb3JDb21wb25lbnRzLCB0aGUKKyAgICAgICAg
bGF0dGVyIGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZSBpbiBtb3N0IGNhc2VzIGFueXdh
eS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpyZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvTGluZWFyU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3Bs
YXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b1hZWik6CisgICAgICAgIChXZWJDb3JlOjpsaWdo
dG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRyYXN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKFdl
YkNvcmU6OnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmdiVG9MaW5lYXJDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclRvUkdCQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp4eXpUb0xpbmVhclNSR0IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyU1JHQlRvWFlaKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlhZWlRvTGluZWFyUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGlu
ZWFyUDNUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwM1RvU1JHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdCVG9QMyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzUkdCVG9IU0wpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aHNsVG9TUkdCKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgor
ICAgICAgICBSZW5hbWUgLyByZXdvcmsgY29udmVyc2lvbiBhbmQgdXRpbGl0eSBmdW5jdGlvbnMg
dG8gb3BlcmF0ZSBvbiBleHBsaWNpdCBDb2xvciAKKyAgICAgICAgdHlwZXMuIEluIGRvaW5nIHNv
LCBzaW1wbGlmeSB0aGUgbmFtZXMgb2YgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNvIG9ubHkg
bmFtZQorICAgICAgICB0aGUgb3V0cHV0IHR5cGUuIEZvciBpbnN0YW5jZToKKworICAgICAgICAg
ICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7CisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IAorICAgICAgICAKKyAgICAg
ICAgICAgIFNSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYpOworICAgICAg
ICAKKyAgICAgICAgYXMgdGhlIGlucHV0IHR5cGUgaXMgaW1wbGljaXQgaW4gdGhlIGNhbGwuIEEg
bGl0dGxlIGR1cGxpY2F0aW9uIHdhcyBuZWVkZWQgCisgICAgICAgIGZvciBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50L3JnYlRvTGluZWFyQ29sb3JDb21wb25lbnQgKGFzIGl0IHdhcyB1c2VkIGZv
cgorICAgICAgICBib3RoIHNSR0IgYW5kIERpc3BsYXlQMyBsaW5lYXJpemF0aW9uKSwgYnV0IG1v
c3RseSB0aGluZ3Mgc3RheSB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjp0b1NSR0JBQ29sb3JMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRl
ZENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIHRvU1JHQkFDb2xvckxvc3N5KCkgYW5kIGhhdmUgaXQK
KyAgICAgICAgcmV0dXJuIGEgU1JHQkFDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdC
QUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgUmVuYW1lIGFzU1JHQkZsb2F0Q29tcG9uZW50cygpIHRvIGFzU1JH
QkFDb2xvcigpIGFuZCBoYXZlIGl0IAorICAgICAgICByZXR1cm4gYSBTUkdCQUNvbG9yLiBSZXBs
YWNlIG1ha2VTaW1wbGVDb2xvciB0YWtpbmcgRmxvYXRDb21wb25lbnRzCisgICAgICAgIHdpdGgg
b25lIHRha2luZyBhIFNSR0JBQ29sb3IsIG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlz
CisgICAgICAgIGlzIG9ubHkgdmFsaWQgZm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUg
dHlwZXMgZm9yIFNSR0JDb2xvciBhbmQgTGluZWFyU1JHQkFDb2xvcnMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVy
dExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xv
ciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVy
c2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIFVzZSBTUkdCQUNvbG9yIHJhdGhlciB0
aGFuIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG8gbWFrZSBpdCBjbGVhcgorICAgICAgICB0aGF0
IHRoZSBmaWx0ZXJzIG9ubHkgd29yayBvbiBzUkdCIGNvbG9ycyByaWdodCBub3cuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmRpc2FibGVkVGV4dENvbG9yIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwg
dG9TUkdCQUNvbG9yTG9zc3koKSByYXRoZXIgdGhhbiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCku
CisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IFVwZGF0ZSB0byBjYWxsIHRvU1JHQkFDb2xvckxvc3N5KCkgcmF0aGVyIHRoYW4gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpLgorCiAyMDIwLTA2LTEyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjYyNjE4KTogVmVyeSBzbG93IHR5cGlu
ZyBpbiBhIGdpdGh1YiBpc3N1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjI5
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgzLDYgKzEwODMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvck1hdHJpeC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNjI5NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMDYsNiArMjIwNiw3IEBACiAJCTdBRjlCMjBE
MThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRU
UmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lv
bkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
RjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0JF
NzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4
RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLzsgfTsKKwkJN0MwMjlDNkUyNDkzQzhG
ODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxODQz
RkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2Zp
bGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QzE5M0JCQjFGNUUwRUVEMDA4OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JCNjFGNUUwRUI5MDA4OEYz
RTYgLyogQ2FudmFzRGlyZWN0aW9uLmggKi87IH07CiAJCTdDMTkzQkJDMUY1RTBFRUQwMDg4RjNF
NiAvKiBDYW52YXNGaWxsUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MxOTNCQTExRjVFMEVBQjAwODhGM0U2IC8qIENhbnZhc0ZpbGxSdWxlLmgg
Ki87IH07CkBAIC05ODkwLDYgKzk4OTEsNyBAQAogCQk3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYg
LyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRS
ZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEExOENGQjVGMzAw
QzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMENFRjI4MUU0QTU0MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAg
LyogSlNET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMENFRjJBMUU0QTU1NkMwMDhERUI4MCAvKiBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTQ0NSw2ICsyNTQ0Nyw3IEBACiAJCQkJMzEwM0I3REUxREIwMTU1NjAwOEJCODkwIC8qIENvbG9y
SGFzaC5oICovLAogCQkJCTdDQUM2QUU4MjQ3RjA4MjAwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLywKIAkJCQkwRkU2
Qzc2QjFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JVdGlsaXRpZXMuY3BwICovLAogCQkJCTBGRTZD
NzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4
MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovLApAQCAtMzMx
MTcsNiArMzMxMjAsNyBAQAogCQkJCUZFMzZGRDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFu
c2FjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MkU2RTVBMENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
N0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2Qjk5OTkxMTgwM0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2Mjk0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJz
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7
IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodG9TUkdC
QShIU0xBQ29sb3IgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
Ml0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIENvbG9yIHBh
cnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShy
ZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxOSwxMyArNjE5LDEzIEBAIE5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTCh0
ZXh0Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0
aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEg
YnkgMzglLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBw
ZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBj
YW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVM
aWdodG5lc3MgPSAwLjVmOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVB
bHBoYU11bHRpcGxpZXIgPSAwLjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5k
ZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9u
LCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBoc2xhQ29sb3IubGlnaHRuZXNzID0gMC41ZjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhzbGFDb2xvci5hbHBoYSAqPSAwLjM4ZjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9T
UkdCQShoc2xhQ29sb3IpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJl
bnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJsaW5l
Q29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcg
KzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBs
ZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFj
azsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICBmbG9hdCB2
ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEyMyw3
ICsxMjMsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBs
ZSgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRl
OwogICAgIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKIAogICAgIGZs
b2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0
ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMzQsNyArMTM0LDcgQEAgQ29sb3Ig
Q29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb2xvckxvc3N5KCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAu
NSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQyLDEzICsxNDIsMTMg
QEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9u
IHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAg
ICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBQ29sb3JMb3NzeSgpKTsKIH0KIAog
ZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3Bh
Y2UgYWxnb3JpdGhtcyBmb3IgbHVtaW5hbmNlIChlLmcuIGNvbnZlcnRUb1hZWihjKS55Q29tcG9u
ZW50KCkpLgotICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb2xvckxvc3N5
KCkpOwogfQogCiBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QK
QEAgLTI0MiwyMSArMjQyLDIxIEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVu
dHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4geyBhc0V4dGVu
ZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07Ci0gICAgcmV0
dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNTaW1wbGUoKS5hc1NSR0JGbG9hdENvbXBvbmVudHMo
KSB9OworICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGFz
U2ltcGxlKCkuYXNTUkdCQUNvbG9yKCkpIH07CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihhc0V4dGVuZGVkKCku
dG9TUkdCQUNvbG9yTG9zc3koKSk7CiAgICAgcmV0dXJuIGFzU2ltcGxlKCk7CiB9CiAKLUNvbG9y
Q29tcG9uZW50czxmbG9hdD4gQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAor
U1JHQkFDb2xvciBDb2xvcjo6dG9TUkdCQUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChp
c0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OworICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFDb2xvckxvc3N5KCk7CisgICAg
cmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQUNvbG9yKCk7CiB9CiAKIENvbG9yIGJsZW5kKGNvbnN0
IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVD
b2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxs
IGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JBQ29sb3IgdG9TUkdCQUNvbG9yTG9zc3ko
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRhcmtlbmVkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAgcHVibGljOgogICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZi4uLihUcykgPT0gUm93cyAqIENvbHVtbnMpOwogICAgIH0KIAotICAgIGNv
bnN0ZXhwciB2b2lkIHRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JikgY29uc3Q7CiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0
OwogCiAgICAgY29uc3RleHByIGZsb2F0IGF0KHNpemVfdCByb3csIHNpemVfdCBjb2x1bW4pIGNv
bnN0CkBAIC0xMDEsMTIgKzEwMCw2IEBAIGlubGluZSBDb2xvck1hdHJpeDwzLCAzPiBodWVSb3Rh
dGVDb2xvck0KIH0KIAogdGVtcGxhdGU8c2l6ZV90IENvbHVtbnMsIHNpemVfdCBSb3dzPgotY29u
c3RleHByIHZvaWQgQ29sb3JNYXRyaXg8Q29sdW1ucywgUm93cz46OnRyYW5zZm9ybUNvbG9yQ29t
cG9uZW50cyhDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBpbnB1dFZlY3RvcikgY29uc3QKLXsKLSAg
ICBpbnB1dFZlY3RvciA9IHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGlucHV0VmVjdG9yKTsK
LX0KLQotdGVtcGxhdGU8c2l6ZV90IENvbHVtbnMsIHNpemVfdCBSb3dzPgogY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gQ29sb3JNYXRyaXg8Q29sdW1ucywgUm93cz46OnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVj
dG9yKSBjb25zdAogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JDb21wb25lbnRzPGZsb2F0Pjo6
U2l6ZSA+PSBSb3dzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIGFy
ZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIGNvbnZlcnNpb24gZnVuY3Rpb25zICho
dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdCQ29s
b3JDb21wb25lbnQoZmxvYXQgYykKKy8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4g
bGluZWFyUkdCIC8gc3RhbmRhcmQgRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVy
c2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgorc3Rh
dGljIGZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQgYykKIHsKICAgICBpZiAo
YyA8IDAuMDAzMTMwOGYpCiAgICAgICAgIHJldHVybiAxMi45MmYgKiBjOwpAQCAtNDAsNyArNDAs
NyBAQCBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJu
IGNsYW1wVG88ZmxvYXQ+KDEuMDU1ZiAqIHN0ZDo6cG93KGMsIDEuMGYgLyAyLjRmKSAtIDAuMDU1
ZiwgMCwgMSk7CiB9CiAKLWZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykK
K3N0YXRpYyBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiB7CiAgICAg
aWYgKGMgPD0gMC4wNDA0NWYpCiAgICAgICAgIHJldHVybiBjIC8gMTIuOTJmOwpAQCAtNDgsMjcg
KzQ4LDQ3IEBAIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKICAgICBy
ZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpwb3coKGMgKyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRm
KSwgMCwgMSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFJHQkNvbG9yKQorTGluZWFyU1JHQkFD
b2xvciB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewogICAgIHJldHVy
biB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMF0pLAotICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yWzFdKSwKLSAgICAgICAgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xvclsyXSksCi0gICAgICAgIFJHQkNvbG9yWzNd
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoc1JHQkEucmVkKSwKKyAgICAgICAg
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChzUkdCQS5ncmVlbiksCisgICAgICAgIHJnYlRvTGlu
ZWFyQ29sb3JDb21wb25lbnQoc1JHQkEuYmx1ZSksCisgICAgICAgIHNSR0JBLmFscGhhCiAgICAg
fTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgbGluZWFyUkdCKQorU1JHQkFDb2xvciB0b1NSR0JB
KGNvbnN0IExpbmVhclNSR0JBQ29sb3ImIGxpbmVhclNSR0JBKQogewogICAgIHJldHVybiB7Ci0g
ICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzBdKSwKLSAgICAgICAg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMV0pLAotICAgICAgICBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclJHQlsyXSksCi0gICAgICAgIGxpbmVhclJHQlszXQor
ICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclNSR0JBLnJlZCksCisgICAg
ICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyU1JHQkEuZ3JlZW4pLAorICAgICAg
ICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclNSR0JBLmJsdWUpLAorICAgICAgICBs
aW5lYXJTUkdCQS5hbHBoYQogICAgIH07CiB9CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHh5elRvTGluZWFyU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21w
b25lbnRzKQorTGluZWFyRGlzcGxheVAzQ29sb3IgdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzQ29sb3ImIGRpc3BsYXlQMykKK3sKKyAgICByZXR1cm4geworICAgICAgICByZ2JUb0xp
bmVhckNvbG9yQ29tcG9uZW50KGRpc3BsYXlQMy5yZWQpLAorICAgICAgICByZ2JUb0xpbmVhckNv
bG9yQ29tcG9uZW50KGRpc3BsYXlQMy5ncmVlbiksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JD
b21wb25lbnQoZGlzcGxheVAzLmJsdWUpLAorICAgICAgICBkaXNwbGF5UDMuYWxwaGEKKyAgICB9
OworfQorCitEaXNwbGF5UDNDb2xvciB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDND
b2xvciYgbGluZWFyRGlzcGxheVAzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGxpbmVhclRv
UkdCQ29sb3JDb21wb25lbnQobGluZWFyRGlzcGxheVAzLnJlZCksCisgICAgICAgIGxpbmVhclRv
UkdCQ29sb3JDb21wb25lbnQobGluZWFyRGlzcGxheVAzLmdyZWVuKSwKKyAgICAgICAgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJEaXNwbGF5UDMuYmx1ZSksCisgICAgICAgIGxpbmVh
ckRpc3BsYXlQMy5hbHBoYQorICAgIH07Cit9CisKK3N0YXRpYyBMaW5lYXJTUkdCQUNvbG9yIHRv
TGluZWFyU1JHQkEoY29uc3QgWFlaQUNvbG9yJiB4eXopCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvU1JHQgogICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20u
Y29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKQEAgLTc3LDEwICs5NywxMCBA
QCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB4eXpUb0xpbmVhCiAgICAgICAgIC0wLjk2
OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCiAgICAgICAgICAwLjA1NTY0MzRmLCAt
MC4yMDQwMjU5ZiwgIDEuMDU3MjI1MmYKICAgICB9OwotICAgIHJldHVybiB4eXpUb0xpbmVhclNS
R0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAg
cmV0dXJuIGFzTGluZWFyU1JHQkFDb2xvcih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoeHl6KSkpOwogfQogCi1zdGF0aWMg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJTUkdCVG9YWVooY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBYWVpBQ29sb3IgdG9YWVooY29uc3Qg
TGluZWFyU1JHQkFDb2xvciYgbGluZWFyU1JHQkEpCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQgogICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29t
L2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKQEAgLTg5LDcyICsxMDksNzAgQEAg
c3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyU1JHQgogICAgICAgICAwLjIxMjY3
MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcyMTc1MGYsCiAgICAgICAgIDAuMDE5MzMzOWYsICAwLjEx
OTE5MjBmLCAgMC45NTAzMDQxZgogICAgIH07Ci0gICAgcmV0dXJuIGxpbmVhclNSR0JUb1hZWk1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1
cm4gYXNYWVpBQ29sb3IobGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21w
b25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGxpbmVhclNSR0JBKSkpOwogfQogCi1zdGF0aWMgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgTGluZWFyRGlzcGxheVAzQ29sb3IgdG9MaW5l
YXJEaXNwbGF5UDMoY29uc3QgWFlaQUNvbG9yJiB4eXopCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFm
dHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3Rl
eHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyU1JHQk1hdHJpeCB7CisgICAgY29uc3Rl
eHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0cml4IHsKICAgICAg
ICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40MDI3MTA3
ODQ0NTA3MTY4ZiwKICAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2MjY2NDA2MDMx
ODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKICAgICAgICAgIDAuMDM1ODQ1ODMwMjQzNzg0
NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcyZgogICAgIH07Ci0g
ICAgcmV0dXJuIHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4gYXNMaW5lYXJEaXNwbGF5UDNDb2xvcih4eXpU
b0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyh4eXopKSk7CiB9CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxp
bmVhclAzVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50cykK
K3N0YXRpYyBYWVpBQ29sb3IgdG9YWVooY29uc3QgTGluZWFyRGlzcGxheVAzQ29sb3ImIGxpbmVh
ckRpc3BsYXlQMykKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9y
LyNjb2xvci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4g
bGluZWFyUDNUb1hZWk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxp
bmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKICAgICAgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwg
MC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNmLAogICAgICAgICAwLjIyODk3
NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCiAg
ICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0
MzY4OTAwOTc2ZgogICAgIH07Ci0gICAgcmV0dXJuIGxpbmVhclAzVG9YWVpNYXRyaXgudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzWFlaQUNv
bG9yKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGxpbmVhckRpc3BsYXlQMykpKTsKIH0KIAotQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBwMykKK1NS
R0JBQ29sb3IgdG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYgZGlzcGxheVAzKQogewotICAg
IGF1dG8gbGluZWFyUDMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMocDMpOwotICAgIGF1dG8geHl6
ID0gbGluZWFyUDNUb1hZWihsaW5lYXJQMyk7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0geHl6VG9M
aW5lYXJTUkdCKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJT
UkdCKTsKKyAgICBhdXRvIGxpbmVhckRpc3BsYXlQMyA9IHRvTGluZWFyRGlzcGxheVAzKGRpc3Bs
YXlQMyk7CisgICAgYXV0byB4eXogPSB0b1hZWihsaW5lYXJEaXNwbGF5UDMpOworICAgIGF1dG8g
bGluZWFyU1JHQiA9IHRvTGluZWFyU1JHQkEoeHl6KTsKKyAgICByZXR1cm4gdG9TUkdCQShsaW5l
YXJTUkdCKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9QMyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCKQorRGlzcGxheVAzQ29sb3IgdG9EaXNwbGF5UDMoY29u
c3QgU1JHQkFDb2xvciYgc1JHQkEpCiB7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0gcmdiVG9MaW5l
YXJDb21wb25lbnRzKHNSR0IpOwotICAgIGF1dG8geHl6ID0gbGluZWFyU1JHQlRvWFlaKGxpbmVh
clNSR0IpOwotICAgIGF1dG8gbGluZWFyUDMgPSBYWVpUb0xpbmVhclAzKHh5eik7Ci0gICAgcmV0
dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJQMyk7CisgICAgYXV0byBsaW5lYXJTUkdC
QSA9IHRvTGluZWFyU1JHQkEoc1JHQkEpOworICAgIGF1dG8geHl6ID0gdG9YWVoobGluZWFyU1JH
QkEpOworICAgIGF1dG8gbGluZWFyRGlzcGxheVAzID0gdG9MaW5lYXJEaXNwbGF5UDMoeHl6KTsK
KyAgICByZXR1cm4gdG9EaXNwbGF5UDMobGluZWFyRGlzcGxheVAzKTsKIH0KIAotZmxvYXQgbGln
aHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKK2Zs
b2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQUNvbG9yJiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHNSR0JDb21wb250ZW50czsKLQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JH
QkE7CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwotCiAg
ICAgcmV0dXJuIDAuNWYgKiAobWF4ICsgbWluKTsKIH0KIAotZmxvYXQgbHVtaW5hbmNlKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQorZmxvYXQgbHVtaW5hbmNl
KGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewotICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVx
dWl2aWxlbnQgb2YgYGxpbmVhclNSR0JUb1hZWihyZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNv
bXBvbmVudHMpKVsxXWAKKyAgICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGB0
b1hZWih0b0xpbmVhclNSR0JBKHNSR0JBKSlbMV1gCiAgICAgLy8gRklNWEU6IElmIHdlIGNhbiBn
ZW5lcmFsaXplIENvbG9yTWF0cml4IGEgYml0IG1vcmUsIGl0IG1pZ2h0IGJlIG5pY2UgdG8gd3Jp
dGUgdGhpcyBhczoKLSAgICAvLyAgICAgIGF1dG8gbGluZWFyU1JHQkNvbXBvbmVudHMgPSByZ2JU
b0xpbmVhckNvbXBvbmVudHMoc1JHQkNvbXBvbmVudHMpOwotICAgIC8vICAgICAgcmV0dXJuIGxp
bmVhclNSR0JDb21wb25lbnRzICogbGluZWFyU1JHQlRvWFlaTWF0cml4LnJvdygxKTsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCQ29tcG9uZW50cyk7
CisgICAgLy8gICAgICBhdXRvIGxpbmVhclNSR0JBQ29tcG9uZW50cyA9IHRvTGluZWFyU1JHQkEo
c1JHQkEpOworICAgIC8vICAgICAgcmV0dXJuIGxpbmVhclNSR0JBQ29tcG9uZW50cyAqIGxpbmVh
clNSR0JUb1hZWk1hdHJpeC5yb3coMSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVh
clNSR0JBKHNSR0JBKTsKICAgICByZXR1cm4gMC4yMTI2ZiAqIHIgKyAwLjcxNTJmICogZyArIDAu
MDcyMmYgKiBiOwogfQogCi1mbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIGNvbXBvbmVudHNBLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21w
b25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgU1JHQkFDb2xvciYgc1JHQkExLCBj
b25zdCBTUkdCQUNvbG9yJiBzUkdCQTIpCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVm
aW5pdGlvbiBvZiBjb250cmFzdCByYXRpby4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
V0NBRzIwLyNjb250cmFzdC1yYXRpb2RlZgotICAgIGZsb2F0IGxpZ2h0ZXJMdW1pbmFuY2UgPSBs
dW1pbmFuY2UoY29tcG9uZW50c0EpOwotICAgIGZsb2F0IGRhcmtlckx1bWluYW5jZSA9IGx1bWlu
YW5jZShjb21wb25lbnRzQik7CisgICAgZmxvYXQgbGlnaHRlckx1bWluYW5jZSA9IGx1bWluYW5j
ZShzUkdCQTEpOworICAgIGZsb2F0IGRhcmtlckx1bWluYW5jZSA9IGx1bWluYW5jZShzUkdCQTIp
OwogCiAgICAgaWYgKGxpZ2h0ZXJMdW1pbmFuY2UgPCBkYXJrZXJMdW1pbmFuY2UpCiAgICAgICAg
IHN0ZDo6c3dhcChsaWdodGVyTHVtaW5hbmNlLCBkYXJrZXJMdW1pbmFuY2UpOwpAQCAtMTYyLDEw
ICsxODAsMTAgQEAgZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudAogICAg
IHJldHVybiAobGlnaHRlckx1bWluYW5jZSArIDAuMDUpIC8gKGRhcmtlckx1bWluYW5jZSArIDAu
MDUpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JUb0hTTChjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpCitIU0xBQ29sb3IgdG9IU0xBKGNvbnN0
IFNSR0JBQ29sb3ImIHNSR0JBKQogewogICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvSFNMX2NvbG9yX3NwYWNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IHNSR0JDb21w
b250ZW50czsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBzUkdCQTsKIAogICAgIGF1dG8g
W21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEg
PSBtYXggLSBtaW47CkBAIC0yMjEsOSArMjM5LDkgQEAgc3RhdGljIGZsb2F0IGNhbGNIdWUoZmxv
YXQgdGVtcDEsIGZsb2F0IAogLy8gRXhwbGFuYXRpb24gb2YgdGhpcyBhbGdvcml0aG0gY2FuIGJl
IGZvdW5kIGluIHRoZSBDU1MgQ29sb3IgNCBNb2R1bGUKIC8vIHNwZWNpZmljYXRpb24gYXQgaHR0
cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1
cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxhYmxlIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvSFNMX2NvbG9yX3NwYWNlCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBoc2xDb2xvcikKK1NSR0JBQ29sb3IgdG9TUkdCQShj
b25zdCBIU0xBQ29sb3ImIGhzbGFDb2xvcikKIHsKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGFdID0gaHNsQ29sb3I7CisgICAgYXV0byBbaHVlLCBzYXR1cmF0aW9u
LCBsaWdodG5lc3MsIGFscGhhXSA9IGhzbGFDb2xvcjsKIAogICAgIC8vIENvbnZlcnQgYmFjayB0
byBSR0IuCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CkBAIC0yNDcsOSArMjY1LDkgQEAgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBoc2xUb1NSR0IoY29uc3QgQwogICAgIH07CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JiBzUkdCQ29tcG9uZW50cykKK1NSR0JBQ29sb3IgcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQUNv
bG9yJiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7CiAgICAgcmV0dXJuIHsKICAgICAgICAgciAq
IGEsCiAgICAgICAgIGcgKiBhLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwzMSArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvclR5
cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1hdGguaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbG9yQ29tcG9uZW50
czsKK0xpbmVhclNSR0JBQ29sb3IgdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQUNvbG9yJik7CitT
UkdCQUNvbG9yIHRvU1JHQkEoY29uc3QgTGluZWFyU1JHQkFDb2xvciYpOwogCi0vLyAwLTEgY29t
cG9uZW50cywgcmVzdWx0IGlzIGNsYW1wZWQuCi1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGZsb2F0KTsKLWZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOworTGlu
ZWFyRGlzcGxheVAzQ29sb3IgdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzQ29sb3Im
KTsKK0Rpc3BsYXlQM0NvbG9yIHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQM0NvbG9y
Jik7CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFy
VG9SR0JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK1NSR0JBQ29s
b3IgdG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYpOworRGlzcGxheVAzQ29sb3IgdG9EaXNw
bGF5UDMoY29uc3QgU1JHQkFDb2xvciYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHAzVG9T
UkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKLUNvbG9yQ29tcG9uZW50czxmbG9h
dD4gc1JHQlRvUDMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBP
UlQgSFNMQUNvbG9yIHRvSFNMQShjb25zdCBTUkdCQUNvbG9yJik7CitXRUJDT1JFX0VYUE9SVCBT
UkdCQUNvbG9yIHRvU1JHQkEoY29uc3QgSFNMQUNvbG9yJik7CiAKLVdFQkNPUkVfRVhQT1JUIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mKTsKLVdFQkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdC
QUNvbG9yJik7CitmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkFDb2xvciYpOwogCi1mbG9hdCBs
aWdodG5lc3MoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsK
LWZsb2F0IGx1bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9u
dGVudHMpOwotZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JiBzUkdCQ29tcG9udGVudHNBLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29t
cG9udGVudHNCKTsKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgU1JHQkFDb2xvciYsIGNvbnN0
IFNSR0JBQ29sb3ImKTsKIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7CitTUkdCQUNvbG9y
IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkFDb2xvciYpOwogCiBpbmxpbmUgdWludDhfdCBjb252
ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNp
b24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE4ICs4MCwyMyBAQCBSZWY8RXh0ZW5kZWRD
b2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNy
ZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xv
clNwYWNlKCkpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorU1JHQkFDb2xvciBFeHRlbmRlZENvbG9yOjp0
b1NSR0JBQ29sb3JMb3NzeSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsK
LSAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBtX2NvbXBvbmVudHM7
Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJU
b1JHQkNvbXBvbmVudHMobV9jb21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6
IHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJl
dHVybiBTUkdCQUNvbG9yIHsgciwgZywgYiwgYSB9OworICAgIH0KKyAgICBjYXNlIENvbG9yU3Bh
Y2U6OkxpbmVhclJHQjogeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fY29tcG9uZW50
czsKKyAgICAgICAgcmV0dXJuIHRvU1JHQkEoTGluZWFyU1JHQkFDb2xvciB7IHIsIGcsIGIsIGEg
fSk7CisgICAgfQogICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1
cm4gcDNUb1NSR0IobV9jb21wb25lbnRzKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBt
X2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiB0b1NSR0JBKERpc3BsYXlQM0NvbG9yIHsgciwg
ZywgYiwgYSB9KTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiB9CiAKIGJvb2wgRXh0ZW5kZWRDb2xv
cjo6aXNXaGl0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUg
IkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBSZWY8RXh0ZW5kZWRDb2xv
cj4gY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogICAgIFJlZjxFeHRlbmRlZENvbG9yPiBp
bnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9uZW50
czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworICAgIFNSR0JBQ29sb3Ig
dG9TUkdCQUNvbG9yTG9zc3koKSBjb25zdDsKIAogICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0Owog
ICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50
cy5oIgorI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02NSw3ICs2Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIHJlZENv
bXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGdyZWVuQ29tcG9uZW50KCkp
LCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gYmx1ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsK
ICAgICB9CiAKLSAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc1NSR0JGbG9h
dENvbXBvbmVudHMoKSBjb25zdAorICAgIGNvbnN0ZXhwciBTUkdCQUNvbG9yIGFzU1JHQkFDb2xv
cigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50
KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSkgfTsKICAgICB9CkBAIC0xMjIsOSArMTIz
LDkgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RkOjpjbGFtcChiLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xh
bXAoYSwgMCwgMHhGRikpIH07CiB9CiAKLWlubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCitpbmxpbmUg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBzUkdCQTsKICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBn
LCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDQsOCArNDA0LDEzIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAt
IDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0g
ICAgYXV0byBsaWdodENvbG9yID0gKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IpID8gcmdiVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpIDogbV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3Rv
ciA9IEZsb2F0UG9pbnQzRChsaWdodENvbG9yWzBdLCBsaWdodENvbG9yWzFdLCBsaWdodENvbG9y
WzJdKTsKKyAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVh
clJHQikgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdo
dGluZ0NvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpOworICAgICAgICBwYWludGluZ0RhdGEuaW5p
dGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50
b1NSR0JBQ29sb3JMb3NzeSgpOworICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5n
RGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKKyAgICB9CiAgICAgbV9s
aWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIAogICAg
IC8vIFRvcCBsZWZ0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjYy
OTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwyNyArODUsMjcgQEAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gQmFzaWNDb2xvck1hdHJpeAogICAgIHJldHVybiBCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9h
bW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xv
ckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246
OnRyYW5zZm9ybUNvbG9yKFNSR0JBQ29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FMRTogewogICAgICAgICBhdXRvIG1hdHJp
eCA9IGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRyYW5z
Zm9ybUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBzUkdCQUNvbG9y
ID0gYXNTUkdCQUNvbG9yKG1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhzUkdCQUNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBTRVBJQTogewogICAgICAgICBhdXRvIG1hdHJpeCA9IHNlcGlhQ29sb3JNYXRyaXgo
bV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNvbG9y
Q29tcG9uZW50cyk7CisgICAgICAgIHNSR0JBQ29sb3IgPSBhc1NSR0JBQ29sb3IobWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHNSR0JBQ29sb3IpKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKICAg
ICAgICAgYXV0byBtYXRyaXggPSBodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAg
ICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAg
ICAgICAgc1JHQkFDb2xvciA9IGFzU1JHQkFDb2xvcihtYXRyaXgudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoc1JHQkFDb2xvcikpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGNhc2UgU0FUVVJBVEU6IHsKICAgICAgICAgYXV0byBtYXRyaXgg
PSBzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNm
b3JtQ29sb3JDb21wb25lbnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAgIHNSR0JBQ29sb3Ig
PSBhc1NSR0JBQ29sb3IobWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKHNSR0JBQ29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBkZWZhdWx0OgpAQCAtMTUyLDMwICsxNTIsMzAgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
QmFzaWNDb21wb25lbnRUcgogICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHBy
b2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvckNv
bXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yKFNSR0JBQ29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAgIGNvbG9yQ29tcG9u
ZW50c1szXSAqPSBtX2Ftb3VudDsKKyAgICAgICAgc1JHQkFDb2xvci5hbHBoYSAqPSBtX2Ftb3Vu
dDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAgICAgICAgZmxv
YXQgb25lTWludXNBbW91bnQgPSAxLmYgLSBtX2Ftb3VudDsKLSAgICAgICAgY29sb3JDb21wb25l
bnRzWzBdID0gMSAtIChvbmVNaW51c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50c1swXSAqIChtX2Ft
b3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9IDEg
LSAob25lTWludXNBbW91bnQgKyBjb2xvckNvbXBvbmVudHNbMV0gKiAobV9hbW91bnQgLSBvbmVN
aW51c0Ftb3VudCkpOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMl0gPSAxIC0gKG9uZU1pbnVz
QW1vdW50ICsgY29sb3JDb21wb25lbnRzWzJdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQp
KTsKKyAgICAgICAgc1JHQkFDb2xvci5yZWQgPSAxIC0gKG9uZU1pbnVzQW1vdW50ICsgc1JHQkFD
b2xvci5yZWQgKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBzUkdCQUNv
bG9yLmdyZWVuID0gMSAtIChvbmVNaW51c0Ftb3VudCArIHNSR0JBQ29sb3IuZ3JlZW4gKiAobV9h
bW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBzUkdCQUNvbG9yLmJsdWUgPSAxIC0g
KG9uZU1pbnVzQW1vdW50ICsgc1JHQkFDb2xvci5ibHVlICogKG1fYW1vdW50IC0gb25lTWludXNB
bW91bnQpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ09OVFJBU1Q6
IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVmICogbV9hbW91bnQpICsgMC41ZjsK
LSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gY2xhbXBUbzxmbG9hdD4oaW50ZXJjZXB0ICsg
bV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMF0sIDAsIDEpOwotICAgICAgICBjb2xvckNvbXBv
bmVudHNbMV0gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbG9yQ29t
cG9uZW50c1sxXSwgMCwgMSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1syXSA9IGNsYW1wVG88
ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwLCAxKTsK
KyAgICAgICAgc1JHQkFDb2xvci5yZWQgPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ft
b3VudCAqIHNSR0JBQ29sb3IucmVkLCAwLCAxKTsKKyAgICAgICAgc1JHQkFDb2xvci5ncmVlbiA9
IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogc1JHQkFDb2xvci5ncmVlbiwg
MCwgMSk7CisgICAgICAgIHNSR0JBQ29sb3IuYmx1ZSA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2Vw
dCArIG1fYW1vdW50ICogc1JHQkFDb2xvci5ibHVlLCAwLCAxKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGNhc2UgQlJJR0hUTkVTUzoKLSAgICAgICAgY29sb3JDb21wb25lbnRz
WzBdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzBdLCAwKTsK
LSAgICAgICAgY29sb3JDb21wb25lbnRzWzFdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICog
Y29sb3JDb21wb25lbnRzWzFdLCAwKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzJdID0gc3Rk
OjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwKTsKKyAgICAgICAg
c1JHQkFDb2xvci5yZWQgPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBzUkdCQUNvbG9yLnJl
ZCwgMCk7CisgICAgICAgIHNSR0JBQ29sb3IuZ3JlZW4gPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91
bnQgKiBzUkdCQUNvbG9yLmdyZWVuLCAwKTsKKyAgICAgICAgc1JHQkFDb2xvci5ibHVlID0gc3Rk
OjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogc1JHQkFDb2xvci5ibHVlLCAwKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yMjYsMTUgKzIyNiwxNSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5l
c3NGCiAgICAgcmV0dXJuIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7
CiB9CiAKLWJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xv
cihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAorYm9v
bCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBQ29s
b3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JHQlRv
SFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNMQShzUkdCQUNv
bG9yKTsKICAgICAKICAgICAvLyBSb3RhdGUgdGhlIGh1ZSAxODBkZWcuCi0gICAgaHNsQ29tcG9u
ZW50c1swXSA9IGZtb2QoaHNsQ29tcG9uZW50c1swXSArIDAuNWYsIDEuMGYpOworICAgIGhzbGEu
aHVlID0gZm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOwogICAgIAogICAgIC8vIENvbnZlcnQg
YmFjayB0byBSR0IuCi0gICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xDb21w
b25lbnRzKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbG9yID0gdG9TUkdCQShoc2xhKTsK
ICAgICAKICAgICAvLyBBcHBseSB0aGUgbWF0cml4LiBTZWUgcmRhcjovL3Byb2JsZW0vNDExNDY2
NTAgZm9yIGhvdyB0aGlzIG1hdHJpeCB3YXMgZGVyaXZlZC4KICAgICBjb25zdGV4cHIgQ29sb3JN
YXRyaXg8NSwgMz4gdG9EYXJrTW9kZU1hdHJpeCB7CkBAIC0yNDIsMjggKzI0MiwyOCBAQCBib29s
IEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMwZiwgLTAu
NzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlmLCAtMC44
OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICB0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybUNv
bG9yQ29tcG9uZW50cyhzUkdCQ29sb3JDb21wb25lbnRzKTsKKyAgICBzUkdCQUNvbG9yID0gYXNT
UkdCQUNvbG9yKHRvRGFya01vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXND
b2xvckNvbXBvbmVudHMoaHVlUm90YXRlZFNSR0JBQ29sb3IpKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNm
b3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29u
c3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3Jt
Q29sb3IoU1JHQkFDb2xvciYgc1JHQkFDb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIHJnYkNvbXBv
bmVudHMgPSBzUkdCQ29sb3JDb21wb25lbnRzOwotCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4K
ICAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8NSwgMz4gdG9MaWdodE1vZGVNYXRyaXggewogICAg
ICAgICAtMS4zMDBmLCAtMC4wOTdmLCAgMC4xNDdmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAu
MDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0w
LjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICB0b0xpZ2h0TW9kZU1hdHJp
eC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBsaWdo
dE1vZGVTUkdCQUNvbG9yID0gYXNTUkdCQUNvbG9yKHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHNSR0JBQ29sb3IpKSk7CiAKICAg
ICAvLyBDb252ZXJ0IHRvIEhTTC4KLSAgICBhdXRvIGhzbENvbXBvbmVudHMgPSBzUkdCVG9IU0wo
cmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBoc2xhID0gdG9IU0xBKGxpZ2h0TW9kZVNSR0JBQ29s
b3IpOworCiAgICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNsQ29tcG9uZW50c1sw
XSA9IGZtb2QoaHNsQ29tcG9uZW50c1swXSArIDAuNWYsIDEuMGYpOworICAgIGhzbGEuaHVlID0g
Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOworCiAgICAgLy8gQW5kIHJldHVybiBSR0IuCi0g
ICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xDb21wb25lbnRzKTsKKyAgICBz
UkdCQUNvbG9yID0gdG9TUkdCQShoc2xhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaW52ZXJz
ZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNv
bG9yKFNSR0JBQ29sb3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgT3BlcmF0aW9u
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKQEAgLTIyOSw3ICsyMjksNyBA
QCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9y
Q29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHRyYW5zZm9ybUNv
bG9yKFNSR0JBQ29sb3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGRvdWJsZSBtX2Ftb3VudDsK
IH07CkBAIC0yNjQsNyArMjY0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9v
bCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjkxLDggKzI5MSw4IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZs
b2F0PiYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9y
Q29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHRyYW5zZm9ybUNvbG9y
KFNSR0JBQ29sb3ImKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGludmVyc2VUcmFuc2Zvcm1Db2xv
cihTUkdCQUNvbG9yJikgY29uc3QgZmluYWw7CiB9OwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBC
bHVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSwxNCArMTExLDE0IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJhbnNm
b3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBQ29sb3JMb3Nz
eSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKLSAgICAg
ICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisgICAg
ICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihz
UkdCQUNvbXBvbmVudHMpOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29sb3Ip
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzAsMTQgKzEzMCwxNCBAQCBib29sIEZpbHRl
ck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbXBvbmVudHMgPSBj
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29s
b3IudG9TUkdCQUNvbG9yTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9v
cGVyYXRpb25zKSB7Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29s
b3Ioc1JHQkFDb21wb25lbnRzKSkKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFu
c2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbXBvbmVudHMpOworICAgIGNv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29sb3IpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9u
IDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MDEsNyArMTQwMSw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkaXNh
YmxlZFRleHRDb2xvcihjb24KICAgICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29udHJh
c3QgYmV0d2VlbiB0aGUgZGlzYWJsZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAog
ICAgIC8vIGp1c3QgbGVhdmUgdGhlIHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQgdG8g
Y2hhbmdlIGEgZ29vZCBjb250cmFzdCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVhbGx5
IGJhZCBjb250cmFzdC4KICAgICAvLyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9vciwg
dGhlbiBpdCBkb2Vzbid0IGRvIGFueSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVudCBw
b29yIGNvbnRyYXN0IGNvbG9yIHNjaGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxl
ZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCisgICAgaWYgKGNvbnRy
YXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpLCBiYWNrZ3JvdW5kQ29s
b3IudG9TUkdCQUNvbG9yTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCiAgICAgICAg
IHJldHVybiB0ZXh0Q29sb3I7CiAKICAgICByZXR1cm4gZGlzYWJsZWRDb2xvcjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYy
OTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWlu
c3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBs
ZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8g
aHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRy
YXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgPiA0LjU7
CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCks
IGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKSA+IDQuNTsKIH0KIAogc3RhdGlj
IENvbG9yIGFkanVzdENvbG9yRm9yVmlzaWJpbGl0eU9uQmFja2dyb3VuZChjb25zdCBDb2xvciYg
dGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyOTU4KQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAt
MDYtMTIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVk
IENvbG9yOiBFeHBlcmltZW50IHdpdGggc3Ryb25nbHkgdHlwZWQgQ29sb3JDb21wb25lbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRl
ZENvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
IFVwZGF0ZSBmb3IgY2hhbmdlZCBuYW1lcyAoZS5nLiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkg
LT4gdG9TUkdCQUNvbG9yTG9zc3koKSkKKyAgICAgICAgYW5kIHVzZSBvZiBleHBsaWNpdCB0eXBl
cy4KKwogMjAyMC0wNi0xMiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgU3VwcG9ydCBidWlsZGluZyB0ZXN0IHJ1bm5lcnMgZm9yIHdhdGNoT1MgYW5kIHR2
T1MKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6
OndoaXRlOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9
IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNs
YUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24pOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVy
YXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAg
ICAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApA
QCAtNTMsMTUgKzUzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENv
bG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5
KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBsaWdodG5lc3MpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
bGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFD
b2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1h
a2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRv
U1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xv
cik7CiB9CiAKQEAgLTY5LDE1ICs2OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7
CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAotICAgIGF1
dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMC41LCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVY
UEVDVF9GTE9BVF9FUSgwLjUsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJv
dW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1Rf
RVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtODUsMTUgKzg1LDE1IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNzKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCBy
b3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwMSwxNSArMTAxLDE1IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMjU1KTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0g
PSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhz
bGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjY2NjY2NjY5LCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1
cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBsaWdodG5lc3MpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjY2NjY2NjY5LCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGhz
bGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBl
ZENvbG9yKTsKIH0KIApAQCAtMTE3LDE1ICsxMTcsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xf
RGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBh
dXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEo
Y29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVl
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGhzbGFD
b2xvci5saWdodG5lc3MpOwogICAgIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5l
c3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCks
IGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENv
bG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBw
ZWRDb2xvcik7CiB9CiAKQEAgLTEzMywxNSArMTMzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gW2h1
ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42
Mjc0NTA5ODAzOTIxNTY4NSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0
bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3Iu
bGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2lt
cGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0p
KSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JB
KGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwog
fQogCkBAIC0xNDksMTUgKzE0OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkp
CiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBbaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRv
U1JHQkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1
Mjk0MTE3NjQ3MDU4ODIyLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24p
OworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRu
ZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5s
aWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1w
bGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkp
KTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEo
aHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9
CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9y
VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM3LDI3ICsyMzcsMjUgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1
ZXMpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewotICAgIHsK
LSAgICAgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKHAz
Q29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBF
WFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgYXV0byBzUkdCQ29t
cG9uZW50cyA9IHAzQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICBFWFBF
Q1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50
c1swXSwgMS4wZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgMC40NjI1Mzc4ODVmKSk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21w
b25lbnRzWzJdLCAwLjE0OTE0NzgzOGYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbM10sIDAuNzVmKSk7Ci0g
ICAgfQotCi0gICAgewotICAgICAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgICAgIGF1dG8g
c1JHQkNvbXBvbmVudHMgPSBsaW5lYXJDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50
cy5jb21wb25lbnRzWzBdLCAxLjBmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzFdLCAwLjczNTM1NjkyN2Yp
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21w
b25lbnRzLmNvbXBvbmVudHNbMl0sIDAuNTM3MDk4NzA2ZikpOwotICAgICAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1szXSwg
MC43NWYpKTsKLSAgICB9CisgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBQ29s
b3JMb3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
QUNvbG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlF
cXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzNzg4NWYpKTsKKyAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsK
KyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5hbHBo
YSwgMC43NWYpKTsKIH0KIAorVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lv
blRvU1JHQikKK3sKKyAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CisgICAgRVhQRUNU
X1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBs
aW5lYXJDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJl
RXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVF
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2Yp
KTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5i
bHVlLCAwLjUzNzA5ODcwNmYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoc1JHQkFDb2xvci5hbHBoYSwgMC43NWYpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401761</attachid>
            <date>2020-06-12 11:57:33 -0700</date>
            <delta_ts>2020-06-12 12:22:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612115732.patch</filename>
            <type>text/plain</type>
            <size>59424</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3QgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisgICAgICAgIAorICAgICAgICBUaGUg
Z29hbCBpcyB0byBhZGQgdHlwZSBjbGFyaXR5ICh5b3Uga25vdyB3aGVuIHlvdSBhcmUgZGVhbGlu
ZworICAgICAgICB3aXRoIGFuIHNSR0IgY29sb3IgdnMuIGEgRGlzcGxheVAzIGNvbG9yKSBhbmQg
bWFrZSBkZWFsaW5nIHdpdGgKKyAgICAgICAgdGhlIGNvbG9ycyBuaWNlciAoY29sb3IucmVkIHJh
dGhlciB0aGFuIGNvbG9yWzBdKS4gSXQgYWxzbyBhbGxvd3MKKyAgICAgICAgdXMgdG8gc2ltcGxp
ZnkgdGhlIG5hbWluZyBvZiBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGJldHdlZW4gY29sb3IgCisg
ICAgICAgIHR5cGVzIGFzIG5vdyBvbmx5IHRoZSBvdXRwdXQgdHlwZSBuZWVkcyB0byBiZSBpbiB0
aGUgZnVuY3Rpb24gbmFtZS4KKyAKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICBB
ZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgaGVhZGVyLCBDb2xvclR5cGVzLmgK
KworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VIU0xQYXJhbWV0
ZXJzKToKKyAgICAgICAgU3dpdGNoIGZyb20gaHNsVG9TUkdCKHsgLi4uIH0pIHRvIHRvU1JHQkEo
SFNMQUNvbG9yIHsgLi4uIH0pCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
YW5nZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgdG9IU0xBKCkgYW5kIEhTTEFDb2xvciBtYWtp
bmcgdGhlIGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb2xvckxvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAg
ICBSZW5hbWVzIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSB0byB0b1NSR0JBQ29sb3JMb3NzeSgp
IHdoaWNoIG5vdyByZXR1cm5zCisgICAgICAgIGEgU1JHQkFDb2xvci4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yTWF0cml4Ojp0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICBSZW1vdmUgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzLCBrZWVwaW5nIGp1c3QgdHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gc2ltcGxpZnkgdGhlIGludGVyZmFj
ZS4gV2l0aCBsYXRlIGNvbnZlcnNpb24gdG8gQ29sb3JDb21wb25lbnRzLCB0aGUKKyAgICAgICAg
bGF0dGVyIGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZSBpbiBtb3N0IGNhc2VzIGFueXdh
eS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpyZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvTGluZWFyU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3Bs
YXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b1hZWik6CisgICAgICAgIChXZWJDb3JlOjpsaWdo
dG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRyYXN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKFdl
YkNvcmU6OnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmdiVG9MaW5lYXJDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclRvUkdCQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp4eXpUb0xpbmVhclNSR0IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyU1JHQlRvWFlaKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlhZWlRvTGluZWFyUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGlu
ZWFyUDNUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwM1RvU1JHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdCVG9QMyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzUkdCVG9IU0wpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aHNsVG9TUkdCKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgor
ICAgICAgICBSZW5hbWUgLyByZXdvcmsgY29udmVyc2lvbiBhbmQgdXRpbGl0eSBmdW5jdGlvbnMg
dG8gb3BlcmF0ZSBvbiBleHBsaWNpdCBDb2xvciAKKyAgICAgICAgdHlwZXMuIEluIGRvaW5nIHNv
LCBzaW1wbGlmeSB0aGUgbmFtZXMgb2YgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNvIG9ubHkg
bmFtZQorICAgICAgICB0aGUgb3V0cHV0IHR5cGUuIEZvciBpbnN0YW5jZToKKworICAgICAgICAg
ICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7CisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IAorICAgICAgICAKKyAgICAg
ICAgICAgIFNSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYpOworICAgICAg
ICAKKyAgICAgICAgYXMgdGhlIGlucHV0IHR5cGUgaXMgaW1wbGljaXQgaW4gdGhlIGNhbGwuIEEg
bGl0dGxlIGR1cGxpY2F0aW9uIHdhcyBuZWVkZWQgCisgICAgICAgIGZvciBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50L3JnYlRvTGluZWFyQ29sb3JDb21wb25lbnQgKGFzIGl0IHdhcyB1c2VkIGZv
cgorICAgICAgICBib3RoIHNSR0IgYW5kIERpc3BsYXlQMyBsaW5lYXJpemF0aW9uKSwgYnV0IG1v
c3RseSB0aGluZ3Mgc3RheSB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjp0b1NSR0JBQ29sb3JMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRl
ZENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIHRvU1JHQkFDb2xvckxvc3N5KCkgYW5kIGhhdmUgaXQK
KyAgICAgICAgcmV0dXJuIGEgU1JHQkFDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdC
QUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgUmVuYW1lIGFzU1JHQkZsb2F0Q29tcG9uZW50cygpIHRvIGFzU1JH
QkFDb2xvcigpIGFuZCBoYXZlIGl0IAorICAgICAgICByZXR1cm4gYSBTUkdCQUNvbG9yLiBSZXBs
YWNlIG1ha2VTaW1wbGVDb2xvciB0YWtpbmcgRmxvYXRDb21wb25lbnRzCisgICAgICAgIHdpdGgg
b25lIHRha2luZyBhIFNSR0JBQ29sb3IsIG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlz
CisgICAgICAgIGlzIG9ubHkgdmFsaWQgZm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUg
dHlwZXMgZm9yIFNSR0JDb2xvciBhbmQgTGluZWFyU1JHQkFDb2xvcnMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVy
dExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xv
ciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVy
c2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIFVzZSBTUkdCQUNvbG9yIHJhdGhlciB0
aGFuIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG8gbWFrZSBpdCBjbGVhcgorICAgICAgICB0aGF0
IHRoZSBmaWx0ZXJzIG9ubHkgd29yayBvbiBzUkdCIGNvbG9ycyByaWdodCBub3cuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmRpc2FibGVkVGV4dENvbG9yIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwg
dG9TUkdCQUNvbG9yTG9zc3koKSByYXRoZXIgdGhhbiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCku
CisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IFVwZGF0ZSB0byBjYWxsIHRvU1JHQkFDb2xvckxvc3N5KCkgcmF0aGVyIHRoYW4gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpLgorCiAyMDIwLTA2LTEyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjYyNjE4KTogVmVyeSBzbG93IHR5cGlu
ZyBpbiBhIGdpdGh1YiBpc3N1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjI5
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgzLDYgKzEwODMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvck1hdHJpeC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNjI5NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMDYsNiArMjIwNiw3IEBACiAJCTdBRjlCMjBE
MThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRU
UmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lv
bkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
RjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0JF
NzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4
RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLzsgfTsKKwkJN0MwMjlDNkUyNDkzQzhG
ODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxODQz
RkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2Zp
bGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QzE5M0JCQjFGNUUwRUVEMDA4OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JCNjFGNUUwRUI5MDA4OEYz
RTYgLyogQ2FudmFzRGlyZWN0aW9uLmggKi87IH07CiAJCTdDMTkzQkJDMUY1RTBFRUQwMDg4RjNF
NiAvKiBDYW52YXNGaWxsUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MxOTNCQTExRjVFMEVBQjAwODhGM0U2IC8qIENhbnZhc0ZpbGxSdWxlLmgg
Ki87IH07CkBAIC05ODkwLDYgKzk4OTEsNyBAQAogCQk3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYg
LyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRS
ZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEExOENGQjVGMzAw
QzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMENFRjI4MUU0QTU0MkMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBDRUYyOTFFNEE1NEQzMDA4REVCODAg
LyogSlNET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMENFRjJBMUU0QTU1NkMwMDhERUI4MCAvKiBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01C
dWlsdGluQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTQ0NSw2ICsyNTQ0Nyw3IEBACiAJCQkJMzEwM0I3REUxREIwMTU1NjAwOEJCODkwIC8qIENvbG9y
SGFzaC5oICovLAogCQkJCTdDQUM2QUU4MjQ3RjA4MjAwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5o
ICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8sCisJ
CQkJN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLywKIAkJCQkwRkU2
Qzc2QjFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JVdGlsaXRpZXMuY3BwICovLAogCQkJCTBGRTZD
NzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4
MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovLApAQCAtMzMx
MTcsNiArMzMxMjAsNyBAQAogCQkJCUZFMzZGRDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFu
c2FjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MkU2RTVBMENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
N0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2Qjk5OTkxMTgwM0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2Mjk0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJz
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7
IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodG9TUkdC
QShIU0xBQ29sb3IgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
Ml0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIENvbG9yIHBh
cnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShy
ZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxOSwxMyArNjE5LDEzIEBAIE5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTCh0
ZXh0Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0
aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEg
YnkgMzglLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBw
ZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBj
YW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVM
aWdodG5lc3MgPSAwLjVmOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVB
bHBoYU11bHRpcGxpZXIgPSAwLjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5k
ZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9u
LCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBoc2xhQ29sb3IubGlnaHRuZXNzID0gMC41ZjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhzbGFDb2xvci5hbHBoYSAqPSAwLjM4ZjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9T
UkdCQShoc2xhQ29sb3IpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJl
bnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJsaW5l
Q29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcg
KzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBs
ZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFj
azsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICBmbG9hdCB2
ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEyMyw3
ICsxMjMsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBs
ZSgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRl
OwogICAgIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKIAogICAgIGZs
b2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0
ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMzQsNyArMTM0LDcgQEAgQ29sb3Ig
Q29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb2xvckxvc3N5KCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAu
NSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQyLDEzICsxNDIsMTMg
QEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9u
IHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAg
ICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBQ29sb3JMb3NzeSgpKTsKIH0KIAog
ZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3Bh
Y2UgYWxnb3JpdGhtcyBmb3IgbHVtaW5hbmNlIChlLmcuIGNvbnZlcnRUb1hZWihjKS55Q29tcG9u
ZW50KCkpLgotICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb2xvckxvc3N5
KCkpOwogfQogCiBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QK
QEAgLTI0MiwyMSArMjQyLDIxIEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVu
dHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4geyBhc0V4dGVu
ZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07Ci0gICAgcmV0
dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNTaW1wbGUoKS5hc1NSR0JGbG9hdENvbXBvbmVudHMo
KSB9OworICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGFz
U2ltcGxlKCkuYXNTUkdCQUNvbG9yKCkpIH07CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihhc0V4dGVuZGVkKCku
dG9TUkdCQUNvbG9yTG9zc3koKSk7CiAgICAgcmV0dXJuIGFzU2ltcGxlKCk7CiB9CiAKLUNvbG9y
Q29tcG9uZW50czxmbG9hdD4gQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAor
U1JHQkFDb2xvciBDb2xvcjo6dG9TUkdCQUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChp
c0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OworICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFDb2xvckxvc3N5KCk7CisgICAg
cmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQUNvbG9yKCk7CiB9CiAKIENvbG9yIGJsZW5kKGNvbnN0
IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVD
b2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxs
IGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JBQ29sb3IgdG9TUkdCQUNvbG9yTG9zc3ko
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRhcmtlbmVkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAgcHVibGljOgogICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZi4uLihUcykgPT0gUm93cyAqIENvbHVtbnMpOwogICAgIH0KIAotICAgIGNv
bnN0ZXhwciB2b2lkIHRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JikgY29uc3Q7CiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0
OwogCiAgICAgY29uc3RleHByIGZsb2F0IGF0KHNpemVfdCByb3csIHNpemVfdCBjb2x1bW4pIGNv
bnN0CkBAIC0xMDEsMTIgKzEwMCw2IEBAIGlubGluZSBDb2xvck1hdHJpeDwzLCAzPiBodWVSb3Rh
dGVDb2xvck0KIH0KIAogdGVtcGxhdGU8c2l6ZV90IENvbHVtbnMsIHNpemVfdCBSb3dzPgotY29u
c3RleHByIHZvaWQgQ29sb3JNYXRyaXg8Q29sdW1ucywgUm93cz46OnRyYW5zZm9ybUNvbG9yQ29t
cG9uZW50cyhDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBpbnB1dFZlY3RvcikgY29uc3QKLXsKLSAg
ICBpbnB1dFZlY3RvciA9IHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGlucHV0VmVjdG9yKTsK
LX0KLQotdGVtcGxhdGU8c2l6ZV90IENvbHVtbnMsIHNpemVfdCBSb3dzPgogY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gQ29sb3JNYXRyaXg8Q29sdW1ucywgUm93cz46OnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVj
dG9yKSBjb25zdAogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JDb21wb25lbnRzPGZsb2F0Pjo6
U2l6ZSA+PSBSb3dzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclR5cGVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFNSR0JBQ29sb3IgeworICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVlbjsKKyAgICBmbG9h
dCBibHVlOworICAgIGZsb2F0IGFscGhhOworfTsKKworY29uc3RleHByIENvbG9yQ29tcG9uZW50
czxmbG9hdD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgU1JHQkFDb2xvciYgYykKK3sKKyAgICBy
ZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK2NvbnN0ZXhw
ciBTUkdCQUNvbG9yIGFzU1JHQkFDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBj
KQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKworc3RydWN0
IExpbmVhclNSR0JBQ29sb3IgeworICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVlbjsKKyAg
ICBmbG9hdCBibHVlOworICAgIGZsb2F0IGFscGhhOworfTsKKworY29uc3RleHByIENvbG9yQ29t
cG9uZW50czxmbG9hdD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGluZWFyU1JHQkFDb2xvciYg
YykKK3sKKyAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9
CisKK2NvbnN0ZXhwciBMaW5lYXJTUkdCQUNvbG9yIGFzTGluZWFyU1JHQkFDb2xvcihjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNb
Ml0sIGNbM10gfTsKK30KKworc3RydWN0IERpc3BsYXlQM0NvbG9yIHsKKyAgICBmbG9hdCByZWQ7
CisgICAgZmxvYXQgZ3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAgICBmbG9hdCBhbHBoYTsKK307
CisKK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGFzQ29sb3JDb21wb25lbnRzKGNv
bnN0IERpc3BsYXlQM0NvbG9yJiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBj
LmJsdWUsIGMuYWxwaGEgfTsKK30KKworY29uc3RleHByIERpc3BsYXlQM0NvbG9yIGFzRGlzcGxh
eVAzQ29sb3IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYykKK3sKKyAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9CisKK3N0cnVjdCBMaW5lYXJEaXNwbGF5UDND
b2xvciB7CisgICAgZmxvYXQgcmVkOworICAgIGZsb2F0IGdyZWVuOworICAgIGZsb2F0IGJsdWU7
CisgICAgZmxvYXQgYWxwaGE7Cit9OworCitjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBMaW5lYXJEaXNwbGF5UDNDb2xvciYgYykKK3sKKyAg
ICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK2NvbnN0
ZXhwciBMaW5lYXJEaXNwbGF5UDNDb2xvciBhc0xpbmVhckRpc3BsYXlQM0NvbG9yKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OworfQorCitzdHJ1Y3QgSFNMQUNvbG9yIHsKKyAgICBmbG9hdCBodWU7CisgICAg
ZmxvYXQgc2F0dXJhdGlvbjsKKyAgICBmbG9hdCBsaWdodG5lc3M7CisgICAgZmxvYXQgYWxwaGE7
Cit9OworCitjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBIU0xBQ29sb3ImIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlv
biwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKK30KKworY29uc3RleHByIEhTTEFDb2xvciBhc0hT
TEFDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjKQoreworICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKworc3RydWN0IFhZWkFDb2xvciB7CisgICAg
ZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHo7CisgICAgZmxvYXQgYWxwaGE7Cit9
OworCitjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc0NvbG9yQ29tcG9uZW50cyhj
b25zdCBYWVpBQ29sb3ImIGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBo
YSB9OworfQorCitjb25zdGV4cHIgWFlaQUNvbG9yIGFzWFlaQUNvbG9yKGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1sz
XSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
NjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0vLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IGxpbmVhclJHQiBjb252
ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCi1m
bG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCisvLyBUaGVzZSBhcmUgdGhl
IHN0YW5kYXJkIHNSR0IgPC0+IGxpbmVhclJHQiAvIHN0YW5kYXJkIERpc3BsYXlQMyA8LT4gTGlu
ZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9TUkdCKS4KK3N0YXRpYyBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZs
b2F0IGMpCiB7CiAgICAgaWYgKGMgPCAwLjAwMzEzMDhmKQogICAgICAgICByZXR1cm4gMTIuOTJm
ICogYzsKQEAgLTQwLDcgKzQwLDcgQEAgZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChm
bG9hdCBjKQogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PigxLjA1NWYgKiBzdGQ6OnBvdyhjLCAx
LjBmIC8gMi40ZikgLSAwLjA1NWYsIDAsIDEpOwogfQogCi1mbG9hdCByZ2JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGZsb2F0IGMpCitzdGF0aWMgZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChmbG9hdCBjKQogewogICAgIGlmIChjIDw9IDAuMDQwNDVmKQogICAgICAgICByZXR1cm4gYyAv
IDEyLjkyZjsKQEAgLTQ4LDI3ICs0OCw0NyBAQCBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9u
ZW50KGZsb2F0IGMpCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4w
NTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+
IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBSR0JD
b2xvcikKK0xpbmVhclNSR0JBQ29sb3IgdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQUNvbG9yJiBz
UkdCQSkKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KFJHQkNvbG9yWzBdKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xv
clsxXSksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMl0pLAot
ICAgICAgICBSR0JDb2xvclszXQorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KHNS
R0JBLnJlZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoc1JHQkEuZ3JlZW4p
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KHNSR0JBLmJsdWUpLAorICAgICAg
ICBzUkdCQS5hbHBoYQogICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFy
VG9SR0JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGxpbmVhclJHQikK
K1NSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQUNvbG9yJiBsaW5lYXJTUkdCQSkK
IHsKICAgICByZXR1cm4gewotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVh
clJHQlswXSksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzFd
KSwKLSAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMl0pLAotICAg
ICAgICBsaW5lYXJSR0JbM10KKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5l
YXJTUkdCQS5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclNS
R0JBLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJTUkdC
QS5ibHVlKSwKKyAgICAgICAgbGluZWFyU1JHQkEuYWxwaGEKICAgICB9OwogfQogCi1zdGF0aWMg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiB4eXpUb0xpbmVhclNSR0IoY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50cykKK0xpbmVhckRpc3BsYXlQM0NvbG9yIHRvTGluZWFy
RGlzcGxheVAzKGNvbnN0IERpc3BsYXlQM0NvbG9yJiBkaXNwbGF5UDMpCit7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChkaXNwbGF5UDMucmVkKSwKKyAg
ICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChkaXNwbGF5UDMuZ3JlZW4pLAorICAgICAg
ICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGRpc3BsYXlQMy5ibHVlKSwKKyAgICAgICAgZGlz
cGxheVAzLmFscGhhCisgICAgfTsKK30KKworRGlzcGxheVAzQ29sb3IgdG9EaXNwbGF5UDMoY29u
c3QgTGluZWFyRGlzcGxheVAzQ29sb3ImIGxpbmVhckRpc3BsYXlQMykKK3sKKyAgICByZXR1cm4g
eworICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhckRpc3BsYXlQMy5yZWQp
LAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhckRpc3BsYXlQMy5ncmVl
biksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyRGlzcGxheVAzLmJs
dWUpLAorICAgICAgICBsaW5lYXJEaXNwbGF5UDMuYWxwaGEKKyAgICB9OworfQorCitzdGF0aWMg
TGluZWFyU1JHQkFDb2xvciB0b0xpbmVhclNSR0JBKGNvbnN0IFhZWkFDb2xvciYgeHl6KQogewog
ICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAgICAvLyBodHRwOi8v
d3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1s
CkBAIC03NywxMCArOTcsMTAgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4geHl6VG9M
aW5lYQogICAgICAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYsICAwLjA0MTU1NjBmLAogICAg
ICAgICAgMC4wNTU2NDM0ZiwgLTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCiAgICAgfTsKLSAgICBy
ZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZ
WkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc0xpbmVhclNSR0JBQ29sb3IoeHl6VG9MaW5lYXJT
UkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHh5
eikpKTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyU1JHQlRvWFla
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgWFla
QUNvbG9yIHRvWFlaKGNvbnN0IExpbmVhclNSR0JBQ29sb3ImIGxpbmVhclNSR0JBKQogewogICAg
IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAgICAvLyBodHRwOi8vd3d3
LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCkBA
IC04OSw3MiArMTA5LDcwIEBAIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclNS
R0IKICAgICAgICAgMC4yMTI2NzI5ZiwgIDAuNzE1MTUyMmYsICAwLjA3MjE3NTBmLAogICAgICAg
ICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKICAgICB9OwotICAgIHJldHVy
biBsaW5lYXJTUkdCVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29t
cG9uZW50cyk7CisgICAgcmV0dXJuIGFzWFlaQUNvbG9yKGxpbmVhclNSR0JUb1hZWk1hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhsaW5lYXJTUkdCQSkp
KTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gWFlaVG9MaW5lYXJQMyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorc3RhdGljIExpbmVhckRp
c3BsYXlQM0NvbG9yIHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkFDb2xvciYgeHl6KQogewog
ICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNp
b24tY29kZQotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhclNSR0JN
YXRyaXggeworICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3Bs
YXlQM01hdHJpeCB7CiAgICAgICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5
MTkxMjM5ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCiAgICAgICAgIC0wLjgyOTQ4ODk2OTU2MTU3
NDdmLCAgMS43NjI2NjQwNjAzMTgzNDYzZiwgIDAuMDIzNjI0Njg1ODQxOTQzNmYsCiAgICAgICAg
ICAwLjAzNTg0NTgzMDI0Mzc4NDVmLCAtMC4wNzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0
MDA3Njg3MmYKICAgICB9OwotICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzTGluZWFy
RGlzcGxheVAzQ29sb3IoeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoeHl6KSkpOwogfQogCi1zdGF0aWMgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBsaW5lYXJQM1RvWFlaKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgWFlaQUNvbG9yIHRvWFlaKGNvbnN0IExpbmVhckRp
c3BsYXlQM0NvbG9yJiBsaW5lYXJEaXNwbGF5UDMpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3RleHBy
IENvbG9yTWF0cml4PDMsIDM+IGxpbmVhclAzVG9YWVpNYXRyaXggeworICAgIGNvbnN0ZXhwciBD
b2xvck1hdHJpeDwzLCAzPiBsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeCB7CiAgICAgICAgIDAu
NDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkzMWYsIDAuMTk4MjE3Mjg1MjM0MzYz
ZiwKICAgICAgICAgMC4yMjg5NzQ1NjQwNjk3NDg4ZiwgMC42OTE3Mzg1MjE4MzY1MDY0ZiwgMC4w
NzkyODY5MTQwOTM3NDVmLAogICAgICAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjA0NTExMzM4
MTg1ODkwMjZmLCAxLjA0Mzk0NDM2ODkwMDk3NmYKICAgICB9OwotICAgIHJldHVybiBsaW5lYXJQ
M1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOwor
ICAgIHJldHVybiBhc1hZWkFDb2xvcihsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhsaW5lYXJEaXNwbGF5UDMpKSk7
CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgcDMpCitTUkdCQUNvbG9yIHRvU1JHQkEoY29uc3QgRGlzcGxheVAzQ29sb3Im
IGRpc3BsYXlQMykKIHsKLSAgICBhdXRvIGxpbmVhclAzID0gcmdiVG9MaW5lYXJDb21wb25lbnRz
KHAzKTsKLSAgICBhdXRvIHh5eiA9IGxpbmVhclAzVG9YWVoobGluZWFyUDMpOwotICAgIGF1dG8g
bGluZWFyU1JHQiA9IHh5elRvTGluZWFyU1JHQih4eXopOwotICAgIHJldHVybiBsaW5lYXJUb1JH
QkNvbXBvbmVudHMobGluZWFyU1JHQik7CisgICAgYXV0byBsaW5lYXJEaXNwbGF5UDMgPSB0b0xp
bmVhckRpc3BsYXlQMyhkaXNwbGF5UDMpOworICAgIGF1dG8geHl6ID0gdG9YWVoobGluZWFyRGlz
cGxheVAzKTsKKyAgICBhdXRvIGxpbmVhclNSR0IgPSB0b0xpbmVhclNSR0JBKHh5eik7CisgICAg
cmV0dXJuIHRvU1JHQkEobGluZWFyU1JHQik7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4g
c1JHQlRvUDMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQikKK0Rpc3BsYXlQM0Nv
bG9yIHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewotICAgIGF1dG8gbGlu
ZWFyU1JHQiA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCKTsKLSAgICBhdXRvIHh5eiA9IGxp
bmVhclNSR0JUb1hZWihsaW5lYXJTUkdCKTsKLSAgICBhdXRvIGxpbmVhclAzID0gWFlaVG9MaW5l
YXJQMyh4eXopOwotICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyUDMpOwor
ICAgIGF1dG8gbGluZWFyU1JHQkEgPSB0b0xpbmVhclNSR0JBKHNSR0JBKTsKKyAgICBhdXRvIHh5
eiA9IHRvWFlaKGxpbmVhclNSR0JBKTsKKyAgICBhdXRvIGxpbmVhckRpc3BsYXlQMyA9IHRvTGlu
ZWFyRGlzcGxheVAzKHh5eik7CisgICAgcmV0dXJuIHRvRGlzcGxheVAzKGxpbmVhckRpc3BsYXlQ
Myk7CiB9CiAKLWZsb2F0IGxpZ2h0bmVzcyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBz
UkdCQ29tcG9udGVudHMpCitmbG9hdCBsaWdodG5lc3MoY29uc3QgU1JHQkFDb2xvciYgc1JHQkEp
CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQ29tcG9udGVudHM7Ci0KKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHNSR0JBOwogICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4
KHsgciwgZywgYiB9KTsKLQogICAgIHJldHVybiAwLjVmICogKG1heCArIG1pbik7CiB9CiAKLWZs
b2F0IGx1bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50
cykKK2Zsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQUNvbG9yJiBzUkdCQSkKIHsKLSAgICAvLyBO
T1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGBsaW5lYXJTUkdCVG9YWVoocmdiVG9MaW5l
YXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKSlbMV1gCisgICAgLy8gTk9URTogVGhpcyBpcyB0
aGUgZXF1aXZpbGVudCBvZiBgdG9YWVoodG9MaW5lYXJTUkdCQShzUkdCQSkpWzFdYAogICAgIC8v
IEZJTVhFOiBJZiB3ZSBjYW4gZ2VuZXJhbGl6ZSBDb2xvck1hdHJpeCBhIGJpdCBtb3JlLCBpdCBt
aWdodCBiZSBuaWNlIHRvIHdyaXRlIHRoaXMgYXM6Ci0gICAgLy8gICAgICBhdXRvIGxpbmVhclNS
R0JDb21wb25lbnRzID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKTsKLSAg
ICAvLyAgICAgIHJldHVybiBsaW5lYXJTUkdCQ29tcG9uZW50cyAqIGxpbmVhclNSR0JUb1hZWk1h
dHJpeC5yb3coMSk7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSByZ2JUb0xpbmVhckNvbXBvbmVu
dHMoc1JHQkNvbXBvbmVudHMpOworICAgIC8vICAgICAgYXV0byBsaW5lYXJTUkdCQUNvbXBvbmVu
dHMgPSB0b0xpbmVhclNSR0JBKHNSR0JBKTsKKyAgICAvLyAgICAgIHJldHVybiBsaW5lYXJTUkdC
QUNvbXBvbmVudHMgKiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgucm93KDEpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9MaW5lYXJTUkdCQShzUkdCQSk7CiAgICAgcmV0dXJuIDAuMjEyNmYgKiBy
ICsgMC43MTUyZiAqIGcgKyAwLjA3MjJmICogYjsKIH0KIAotZmxvYXQgY29udHJhc3RSYXRpbyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQSwgY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgY29tcG9uZW50c0IpCitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IFNS
R0JBQ29sb3ImIHNSR0JBMSwgY29uc3QgU1JHQkFDb2xvciYgc1JHQkEyKQogewogICAgIC8vIFVz
ZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgY29udHJhc3QgcmF0aW8uCiAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWYKLSAgICBmbG9hdCBs
aWdodGVyTHVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbXBvbmVudHNBKTsKLSAgICBmbG9hdCBkYXJr
ZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29tcG9uZW50c0IpOworICAgIGZsb2F0IGxpZ2h0ZXJM
dW1pbmFuY2UgPSBsdW1pbmFuY2Uoc1JHQkExKTsKKyAgICBmbG9hdCBkYXJrZXJMdW1pbmFuY2Ug
PSBsdW1pbmFuY2Uoc1JHQkEyKTsKIAogICAgIGlmIChsaWdodGVyTHVtaW5hbmNlIDwgZGFya2Vy
THVtaW5hbmNlKQogICAgICAgICBzdGQ6OnN3YXAobGlnaHRlckx1bWluYW5jZSwgZGFya2VyTHVt
aW5hbmNlKTsKQEAgLTE2MiwxMCArMTgwLDEwIEBAIGZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3Qg
Q29sb3JDb21wb25lbnQKICAgICByZXR1cm4gKGxpZ2h0ZXJMdW1pbmFuY2UgKyAwLjA1KSAvIChk
YXJrZXJMdW1pbmFuY2UgKyAwLjA1KTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdC
VG9IU0woY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKQorSFNM
QUNvbG9yIHRvSFNMQShjb25zdCBTUkdCQUNvbG9yJiBzUkdCQSkKIHsKICAgICAvLyBodHRwOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KLSAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBzUkdCQ29tcG9udGVudHM7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0g
c1JHQkE7CiAKICAgICBhdXRvIFttaW4sIG1heF0gPSBzdGQ6Om1pbm1heCh7IHIsIGcsIGIgfSk7
CiAgICAgZmxvYXQgY2hyb21hID0gbWF4IC0gbWluOwpAQCAtMjIxLDkgKzIzOSw5IEBAIHN0YXRp
YyBmbG9hdCBjYWxjSHVlKGZsb2F0IHRlbXAxLCBmbG9hdCAKIC8vIEV4cGxhbmF0aW9uIG9mIHRo
aXMgYWxnb3JpdGhtIGNhbiBiZSBmb3VuZCBpbiB0aGUgQ1NTIENvbG9yIDQgTW9kdWxlCiAvLyBz
cGVjaWZpY2F0aW9uIGF0IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNs
LXRvLXJnYiB3aXRoCiAvLyBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF2YWlsYWJsZSBhdCBodHRwOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZQotQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBoc2xUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaHNsQ29sb3IpCitT
UkdCQUNvbG9yIHRvU1JHQkEoY29uc3QgSFNMQUNvbG9yJiBoc2xhQ29sb3IpCiB7Ci0gICAgYXV0
byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGhzbENvbG9yOworICAgIGF1
dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBoc2xhQ29sb3I7CiAKICAg
ICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgogICAgIGlmICghc2F0dXJhdGlvbikgewpAQCAtMjQ3
LDkgKzI2NSw5IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0IEMKICAg
ICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCitTUkdCQUNvbG9yIHByZW11bHRp
cGxpZWQoY29uc3QgU1JHQkFDb2xvciYgc1JHQkEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBzUkdCQ29tcG9uZW50czsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwogICAgIHJl
dHVybiB7CiAgICAgICAgIHIgKiBhLAogICAgICAgICBnICogYSwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzEgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0
cnVjdCBDb2xvckNvbXBvbmVudHM7CitMaW5lYXJTUkdCQUNvbG9yIHRvTGluZWFyU1JHQkEoY29u
c3QgU1JHQkFDb2xvciYpOworU1JHQkFDb2xvciB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBQ29s
b3ImKTsKIAotLy8gMC0xIGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgotZmxvYXQgbGlu
ZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7Ci1mbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGZsb2F0KTsKK0xpbmVhckRpc3BsYXlQM0NvbG9yIHRvTGluZWFyRGlzcGxheVAzKGNv
bnN0IERpc3BsYXlQM0NvbG9yJik7CitEaXNwbGF5UDNDb2xvciB0b0Rpc3BsYXlQMyhjb25zdCBM
aW5lYXJEaXNwbGF5UDNDb2xvciYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGlu
ZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1Db2xvckNvbXBv
bmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7CitTUkdCQUNvbG9yIHRvU1JHQkEoY29uc3QgRGlzcGxheVAzQ29sb3ImKTsKK0Rp
c3BsYXlQM0NvbG9yIHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBQ29sb3ImKTsKIAotQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mKTsKK1dFQkNPUkVfRVhQT1JUIEhTTEFDb2xvciB0b0hTTEEoY29uc3QgU1JHQkFDb2xvciYp
OworV0VCQ09SRV9FWFBPUlQgU1JHQkFDb2xvciB0b1NSR0JBKGNvbnN0IEhTTEFDb2xvciYpOwog
Ci1XRUJDT1JFX0VYUE9SVCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JUb0hTTChjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CitmbG9hdCBs
aWdodG5lc3MoY29uc3QgU1JHQkFDb2xvciYpOworZmxvYXQgbHVtaW5hbmNlKGNvbnN0IFNSR0JB
Q29sb3ImKTsKIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IHNSR0JDb21wb250ZW50cyk7Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKLWZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQik7CitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0
IFNSR0JBQ29sb3ImLCBjb25zdCBTUkdCQUNvbG9yJik7CiAKLUNvbG9yQ29tcG9uZW50czxmbG9h
dD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9u
dGVudHMpOworU1JHQkFDb2xvciBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBQ29sb3ImKTsKIAog
aW5saW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5k
ZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxOCArODAs
MjMgQEAgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydAogICAgIHJldHVy
biBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywg
b3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3QKK1NSR0JBQ29s
b3IgRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIHN3aXRj
aCAobV9jb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICBy
ZXR1cm4gbV9jb21wb25lbnRzOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgotICAg
ICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKG1fY29tcG9uZW50cyk7CisgICAgY2Fz
ZSBDb2xvclNwYWNlOjpTUkdCOiB7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9jb21w
b25lbnRzOworICAgICAgICByZXR1cm4gU1JHQkFDb2xvciB7IHIsIGcsIGIsIGEgfTsKKyAgICB9
CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6IHsKKyAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiB0b1NSR0JBKExpbmVhclNSR0JB
Q29sb3IgeyByLCBnLCBiLCBhIH0pOworICAgIH0KICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMzoKLSAgICAgICAgcmV0dXJuIHAzVG9TUkdCKG1fY29tcG9uZW50cyk7CisgICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gbV9jb21wb25lbnRzOworICAgICAgICByZXR1cm4gdG9TUkdCQShE
aXNwbGF5UDNDb2xvciB7IHIsIGcsIGIsIGEgfSk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogfQog
CiBib29sIEV4dGVuZGVkQ29sb3I6OmlzV2hpdGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYy
OTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBv
bmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5o
IgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBS
ZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAK
LSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25z
dDsKKyAgICBTUkdCQUNvbG9yIHRvU1JHQkFDb2xvckxvc3N5KCkgY29uc3Q7CiAKICAgICBib29s
IGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2soKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJDb2xvckNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVk
ZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYg
LSBncmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21w
b25lbnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50
czxmbG9hdD4gYXNTUkdCRmxvYXRDb21wb25lbnRzKCkgY29uc3QKKyAgICBjb25zdGV4cHIgU1JH
QkFDb2xvciBhc1NSR0JBQ29sb3IoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHsgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBv
bmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CiAg
ICAgfQpAQCAtMTIyLDkgKzEyMyw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3IoaW4KICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKHIs
IDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAweEZGKSks
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdGQ6OmNsYW1wKGEsIDAsIDB4RkYpKSB9OwogfQogCi1pbmxpbmUgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JD
b21wb25lbnRzKQoraW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdC
QUNvbG9yJiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRz
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2
aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDggKzQwNCwxMyBAQCBib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wCiAgICAgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lID0gd2lkdGggLSAxOwogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBo
ZWlnaHQgLSAxOwogICAgIAotICAgIGF1dG8gbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNw
YWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyht
X2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdo
dGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvclswXSwgbGlnaHRD
b2xvclsxXSwgbGlnaHRDb2xvclsyXSk7CisgICAgaWYgKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9
PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0
b0xpbmVhclNSR0JBKG1fbGlnaHRpbmdDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBv
aW50M0QociwgZywgYik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKKyAgICAgICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7CisgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBh
aW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjcg
Kzg1LDI3IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRyaXgKICAgICBy
ZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJs
ZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWJvb2wg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJiBzUkdCQUNvbG9y
KSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6IHsK
ICAgICAgICAgYXV0byBtYXRyaXggPSBncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0g
ICAgICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsK
KyAgICAgICAgc1JHQkFDb2xvciA9IGFzU1JHQkFDb2xvcihtYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoc1JHQkFDb2xvcikpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKICAgICAgICAgYXV0byBtYXRyaXgg
PSBzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRyYW5zZm9ybUNv
bG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBzUkdCQUNvbG9yID0gYXNT
UkdCQUNvbG9yKG1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhzUkdCQUNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2Fz
ZSBIVUVfUk9UQVRFOiB7CiAgICAgICAgIGF1dG8gbWF0cml4ID0gaHVlUm90YXRlQ29sb3JNYXRy
aXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNv
bG9yQ29tcG9uZW50cyk7CisgICAgICAgIHNSR0JBQ29sb3IgPSBhc1NSR0JBQ29sb3IobWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHNSR0JBQ29sb3Ip
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7CiAg
ICAgICAgIGF1dG8gbWF0cml4ID0gc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAg
ICAgICAgbWF0cml4LnRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOwor
ICAgICAgICBzUkdCQUNvbG9yID0gYXNTUkdCQUNvbG9yKG1hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhzUkdCQUNvbG9yKSkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE1MiwzMCArMTUyLDMwIEBAIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29tcG9uZW50VHIKICAgICByZXR1cm4gQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21B
bW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWJvb2wgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJiBzUkdCQUNv
bG9yKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgot
ICAgICAgICBjb2xvckNvbXBvbmVudHNbM10gKj0gbV9hbW91bnQ7CisgICAgICAgIHNSR0JBQ29s
b3IuYWxwaGEgKj0gbV9hbW91bnQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgSU5W
RVJUOiB7CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS5mIC0gbV9hbW91bnQ7Ci0g
ICAgICAgIGNvbG9yQ29tcG9uZW50c1swXSA9IDEgLSAob25lTWludXNBbW91bnQgKyBjb2xvckNv
bXBvbmVudHNbMF0gKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOwotICAgICAgICBjb2xv
ckNvbXBvbmVudHNbMV0gPSAxIC0gKG9uZU1pbnVzQW1vdW50ICsgY29sb3JDb21wb25lbnRzWzFd
ICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQpKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRz
WzJdID0gMSAtIChvbmVNaW51c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50c1syXSAqIChtX2Ftb3Vu
dCAtIG9uZU1pbnVzQW1vdW50KSk7CisgICAgICAgIHNSR0JBQ29sb3IucmVkID0gMSAtIChvbmVN
aW51c0Ftb3VudCArIHNSR0JBQ29sb3IucmVkICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQp
KTsKKyAgICAgICAgc1JHQkFDb2xvci5ncmVlbiA9IDEgLSAob25lTWludXNBbW91bnQgKyBzUkdC
QUNvbG9yLmdyZWVuICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgc1JH
QkFDb2xvci5ibHVlID0gMSAtIChvbmVNaW51c0Ftb3VudCArIHNSR0JBQ29sb3IuYmx1ZSAqICht
X2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIENPTlRSQVNUOiB7CiAgICAgICAgIGZsb2F0IGludGVyY2VwdCA9IC0oMC41ZiAq
IG1fYW1vdW50KSArIDAuNWY7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1swXSA9IGNsYW1wVG88
ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzBdLCAwLCAxKTsK
LSAgICAgICAgY29sb3JDb21wb25lbnRzWzFdID0gY2xhbXBUbzxmbG9hdD4oaW50ZXJjZXB0ICsg
bV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMV0sIDAsIDEpOwotICAgICAgICBjb2xvckNvbXBv
bmVudHNbMl0gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbG9yQ29t
cG9uZW50c1syXSwgMCwgMSk7CisgICAgICAgIHNSR0JBQ29sb3IucmVkID0gY2xhbXBUbzxmbG9h
dD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBzUkdCQUNvbG9yLnJlZCwgMCwgMSk7CisgICAgICAg
IHNSR0JBQ29sb3IuZ3JlZW4gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAq
IHNSR0JBQ29sb3IuZ3JlZW4sIDAsIDEpOworICAgICAgICBzUkdCQUNvbG9yLmJsdWUgPSBjbGFt
cFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIHNSR0JBQ29sb3IuYmx1ZSwgMCwgMSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEJSSUdIVE5FU1M6Ci0gICAg
ICAgIGNvbG9yQ29tcG9uZW50c1swXSA9IHN0ZDo6bWF4PGZsb2F0PihtX2Ftb3VudCAqIGNvbG9y
Q29tcG9uZW50c1swXSwgMCk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9IHN0ZDo6bWF4
PGZsb2F0PihtX2Ftb3VudCAqIGNvbG9yQ29tcG9uZW50c1sxXSwgMCk7Ci0gICAgICAgIGNvbG9y
Q29tcG9uZW50c1syXSA9IHN0ZDo6bWF4PGZsb2F0PihtX2Ftb3VudCAqIGNvbG9yQ29tcG9uZW50
c1syXSwgMCk7CisgICAgICAgIHNSR0JBQ29sb3IucmVkID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1v
dW50ICogc1JHQkFDb2xvci5yZWQsIDApOworICAgICAgICBzUkdCQUNvbG9yLmdyZWVuID0gc3Rk
OjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogc1JHQkFDb2xvci5ncmVlbiwgMCk7CisgICAgICAgIHNS
R0JBQ29sb3IuYmx1ZSA9IHN0ZDo6bWF4PGZsb2F0PihtX2Ftb3VudCAqIHNSR0JBQ29sb3IuYmx1
ZSwgMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI2LDE1ICsyMjYsMTUgQEAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gSW52ZXJ0TGlnaHRuZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgpOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFu
c2Zvcm1Db2xvcihTUkdCQUNvbG9yJiBzUkdCQUNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNs
Q29tcG9uZW50cyA9IHNSR0JUb0hTTChzUkdCQ29sb3JDb21wb25lbnRzKTsKKyAgICBhdXRvIGhz
bGEgPSB0b0hTTEEoc1JHQkFDb2xvcik7CiAgICAgCiAgICAgLy8gUm90YXRlIHRoZSBodWUgMTgw
ZGVnLgotICAgIGhzbENvbXBvbmVudHNbMF0gPSBmbW9kKGhzbENvbXBvbmVudHNbMF0gKyAwLjVm
LCAxLjBmKTsKKyAgICBoc2xhLmh1ZSA9IGZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKICAg
ICAKICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMg
PSBoc2xUb1NSR0IoaHNsQ29tcG9uZW50cyk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb2xv
ciA9IHRvU1JHQkEoaHNsYSk7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJk
YXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAg
ICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMjQy
LDI4ICsyNDIsMjggQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYQog
ICAgICAgICAwLjAzMGYsIC0wLjc0MWYsIC0wLjA4OWYsIDAuMGYsIDEuMGYsCiAgICAgICAgIDAu
MDMwZiwgIDAuMDU5ZiwgLTAuODkwZiwgMC4wZiwgMS4wZgogICAgIH07Ci0gICAgdG9EYXJrTW9k
ZU1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoc1JHQkNvbG9yQ29tcG9uZW50cyk7Cisg
ICAgc1JHQkFDb2xvciA9IGFzU1JHQkFDb2xvcih0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQUNvbG9yKSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JD
b2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKFNSR0JBQ29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7
Ci0gICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9uZW50czsKLQogICAgIC8v
IEFwcGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvTGln
aHRNb2RlTWF0cml4IHsKICAgICAgICAgLTEuMzAwZiwgLTAuMDk3ZiwgIDAuMTQ3ZiwgMC4wZiwg
MS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAog
ICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0g
ICAgdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHJnYkNvbXBvbmVu
dHMpOworICAgIGF1dG8gbGlnaHRNb2RlU1JHQkFDb2xvciA9IGFzU1JHQkFDb2xvcih0b0xpZ2h0
TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhz
UkdCQUNvbG9yKSkpOwogCiAgICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBoc2xDb21w
b25lbnRzID0gc1JHQlRvSFNMKHJnYkNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNM
QShsaWdodE1vZGVTUkdCQUNvbG9yKTsKKwogICAgIC8vIEh1ZSByb3RhdGUgYnkgMTgwZGVnLgot
ICAgIGhzbENvbXBvbmVudHNbMF0gPSBmbW9kKGhzbENvbXBvbmVudHNbMF0gKyAwLjVmLCAxLjBm
KTsKKyAgICBoc2xhLmh1ZSA9IGZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKwogICAgIC8v
IEFuZCByZXR1cm4gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSBoc2xUb1NSR0IoaHNs
Q29tcG9uZW50cyk7CisgICAgc1JHQkFDb2xvciA9IHRvU1JHQkEoaHNsYSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdHJhbnNmb3JtQ29s
b3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGludmVyc2VUcmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdHJhbnNmb3JtQ29s
b3IoU1JHQkFDb2xvciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGludmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIE9wZXJhdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
CkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB0
cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjY0LDcgKzI2NCw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoU1JHQkFDb2xvciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZG91YmxlIG1fYW1vdW50OwogfTsKQEAgLTI5MSw4ICsy
OTEsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9y
KENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGludmVyc2VU
cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
bnZlcnNlVHJhbnNmb3JtQ29sb3IoU1JHQkFDb2xvciYpIGNvbnN0IGZpbmFsOwogfTsKIAogY2xh
c3MgV0VCQ09SRV9FWFBPUlQgQmx1ckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVy
YXRpb24gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjI5NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTQgKzExMSwxNCBAQCBib29sIEZpbHRl
ck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbXBvbmVudHMgPSBj
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29s
b3IudG9TUkdCQUNvbG9yTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9v
cGVyYXRpb25zKSB7Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdC
QUNvbXBvbmVudHMpKQorICAgICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JH
QkFDb2xvcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFDb21wb25lbnRzKTsKKyAgICBjb2xvciA9IG1ha2VTaW1w
bGVDb2xvcihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDE0ICsx
MzAsMTQgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAgIGlm
IChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
c1JHQkFDb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1
dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAKICAgICBmb3IgKGF1
dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewotICAgICAgICBpZiAoIW9wZXJhdGlvbi0+
aW52ZXJzZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisgICAgICAgIGlmICghb3Bl
cmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFD
b21wb25lbnRzKTsKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbG9yKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBDb2xv
ciBSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IoY29uCiAgICAgLy8gSWYgdGhlcmUncyBu
b3QgdmVyeSBtdWNoIGNvbnRyYXN0IGJldHdlZW4gdGhlIGRpc2FibGVkIGNvbG9yIGFuZCB0aGUg
YmFja2dyb3VuZCBjb2xvciwKICAgICAvLyBqdXN0IGxlYXZlIHRoZSB0ZXh0IGNvbG9yIGFsb25l
LiBXZSBkb24ndCB3YW50IHRvIGNoYW5nZSBhIGdvb2QgY29udHJhc3QgY29sb3Igc2NoZW1lIHNv
IHRoYXQgaXQgaGFzIHJlYWxseSBiYWQgY29udHJhc3QuCiAgICAgLy8gSWYgdGhlIGNvbnRyYXN0
IHdhcyBhbHJlYWR5IHBvb3IsIHRoZW4gaXQgZG9lc24ndCBkbyBhbnkgZ29vZCB0byBjaGFuZ2Ug
aXQgdG8gYSBkaWZmZXJlbnQgcG9vciBjb250cmFzdCBjb2xvciBzY2hlbWUuCi0gICAgaWYgKGNv
bnRyYXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCksIGJhY2tn
cm91bmRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpIDwgbWluQ29sb3JDb250cmFzdFZh
bHVlKQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUNvbG9yTG9z
c3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpIDwgbWluQ29sb3JDb250
cmFzdFZhbHVlKQogICAgICAgICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAgcmV0dXJuIGRpc2Fi
bGVkQ29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHls
ZS5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgYm9vbCB0ZXh0
Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZAogewogICAgIC8vIFVzZXMgdGhlIFdDQUcg
Mi4wIGRlZmluaXRpb24gb2YgbGVnaWJpbGl0eTogYSBjb250cmFzdCByYXRpbyBvZiA0LjU6MSBv
ciBncmVhdGVyLgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3VhbC1h
dWRpby1jb250cmFzdC1jb250cmFzdAotICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCkpID4gNC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50
b1NSR0JBQ29sb3JMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSkg
PiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2liaWxpdHlPbkJhY2tn
cm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI2Mjk1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDIwLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBFeHRlbmRlZCBDb2xvcjogRXhwZXJpbWVudCB3aXRoIHN0cm9uZ2x5IHR5cGVk
IENvbG9yQ29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEyMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZWQgbmFtZXMgKGUuZy4gdG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpIC0+IHRvU1JHQkFDb2xvckxvc3N5KCkpCisgICAgICAgIGFuZCB1
c2Ugb2YgZXhwbGljaXQgdHlwZXMuCisKIDIwMjAtMDYtMTIgIEpvbmF0aGFuIEJlZGFyZCAgPGpi
ZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgYnVpbGRpbmcgdGVzdCBydW5uZXJz
IGZvciB3YXRjaE9TIGFuZCB0dk9TCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE1ICszNywxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKIHsKICAgICBD
b2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBQ29sb3JMb3Nz
eSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgbGlnaHRuZXNzKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0
bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRy
aXBwZWRDb2xvcik7CiB9CiAKQEAgLTUzLDE1ICs1MywxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8g
W2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xv
ci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02OSwxNSArNjksMTUgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFd
ID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBo
c2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2F0dXJhdGlvbik7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5z
YXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5l
c3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
cihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNv
bG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAg
LTg1LDE1ICs4NSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKICAgICBDb2xv
ciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApOwogCi0gICAgYXV0byBbaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGh1ZSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9F
USgwLjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFD
b2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdC
KHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMDEsMTUgKzEw
MSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUNvbG9yTG9z
c3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHVlKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGln
aHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHNsYUNvbG9yLmh1ZSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9B
VF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VR
KGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTExNywxNSArMTE3LDE1IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6
OmRhcmtHcmF5OwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
XSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24p
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUwMTk2MDc4NDMxMzcyNTQ4LCBsaWdodG5lc3MpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUwMTk2
MDc4NDMxMzcyNTQ4LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91
bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9F
UShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6Omdy
YXk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JH
QlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29s
b3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNjI3NDUwOTgwMzkyMTU2ODUsIGxpZ2h0bmVzcyk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjI3NDUwOTgwMzky
MTU2ODUsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQ5LDE1ICsxNDksMTUgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3Jh
eTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdC
VG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xv
ciA9IHRvSFNMQShjb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwgbGlnaHRuZXNzKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC43NTI5NDExNzY0NzA1
ODgyMiwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91
bmRUcmlwcGVkQ29sb3IpOwogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYy
OTQ0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JU
ZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNywyNyArMjM3LDI1IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgUmV0dXJuVmFsdWVzKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lv
blRvU1JHQikKIHsKLSAgICB7Ci0gICAgICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwotICAg
ICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CisgICAgQ29sb3IgcDNDb2xv
ciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgRVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0g
ICAgICAgIGF1dG8gc1JHQkNvbXBvbmVudHMgPSBwM0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JD
b21wb25lbnRzLmNvbXBvbmVudHNbMF0sIDEuMGYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIDAuNDYy
NTM3ODg1ZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
c1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgMC4xNDkxNDc4MzhmKSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25l
bnRzWzNdLCAwLjc1ZikpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgbGluZWFyQ29s
b3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6
TGluZWFyUkdCKSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVk
KCkpOwotICAgICAgICBhdXRvIHNSR0JDb21wb25lbnRzID0gbGluZWFyQ29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1swXSwgMS4wZikpOwotICAgICAgICBFWFBF
Q1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50
c1sxXSwgMC43MzUzNTY5MjdmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50
aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzJdLCAwLjUzNzA5ODcwNmYpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25l
bnRzLmNvbXBvbmVudHNbM10sIDAuNzVmKSk7Ci0gICAgfQorICAgIGF1dG8gc1JHQkFDb2xvciA9
IHAzQ29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKKyAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1Mzc4ODVmKSk7
CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1
ZSwgMC4xNDkxNDc4MzhmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKSk7CiB9CiAKK1RFU1QoRXh0ZW5kZWRDb2xvciwg
TGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCit7CisgICAgQ29sb3IgbGluZWFyQ29sb3IgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6TGluZWFy
UkdCKSB9OworICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKKyAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYp
KTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5n
cmVlbiwgMC43MzUzNTY5MjdmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7CisgICAgRVhQRUNUX1RSVUUo
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401762</attachid>
            <date>2020-06-12 12:22:41 -0700</date>
            <delta_ts>2020-06-12 13:58:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612122239.patch</filename>
            <type>text/plain</type>
            <size>70346</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3kgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisgICAgICAgIAorICAgICAgICBUaGUg
Z29hbCBpcyB0byBhZGQgdHlwZSBjbGFyaXR5ICh5b3Uga25vdyB3aGVuIHlvdSBhcmUgZGVhbGlu
ZworICAgICAgICB3aXRoIGFuIHNSR0IgY29sb3IgdnMuIGEgRGlzcGxheVAzIGNvbG9yKSBhbmQg
bWFrZSBkZWFsaW5nIHdpdGgKKyAgICAgICAgdGhlIGNvbG9ycyBuaWNlciAoY29sb3IucmVkIHJh
dGhlciB0aGFuIGNvbG9yWzBdKS4gSXQgYWxzbyBhbGxvd3MKKyAgICAgICAgdXMgdG8gc2ltcGxp
ZnkgdGhlIG5hbWluZyBvZiBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGJldHdlZW4gY29sb3IgCisg
ICAgICAgIHR5cGVzIGFzIG5vdyBvbmx5IHRoZSBvdXRwdXQgdHlwZSBuZWVkcyB0byBiZSBpbiB0
aGUgZnVuY3Rpb24gbmFtZS4KKyAKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICBB
ZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgaGVhZGVyLCBDb2xvclR5cGVzLmgK
KworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VIU0xQYXJhbWV0
ZXJzKToKKyAgICAgICAgU3dpdGNoIGZyb20gaHNsVG9TUkdCKHsgLi4uIH0pIHRvIHRvU1JHQkEo
SFNMQUNvbG9yIHsgLi4uIH0pCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
YW5nZSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgdG9IU0xBKCkgYW5kIEhTTEFDb2xvciBtYWtp
bmcgdGhlIGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb2xvckxvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAg
ICBSZW5hbWVzIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSB0byB0b1NSR0JBQ29sb3JMb3NzeSgp
IHdoaWNoIG5vdyByZXR1cm5zCisgICAgICAgIGEgU1JHQkFDb2xvci4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yTWF0cml4Ojp0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICBSZW1vdmUgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzLCBrZWVwaW5nIGp1c3QgdHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gc2ltcGxpZnkgdGhlIGludGVyZmFj
ZS4gV2l0aCBsYXRlIGNvbnZlcnNpb24gdG8gQ29sb3JDb21wb25lbnRzLCB0aGUKKyAgICAgICAg
bGF0dGVyIGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZSBpbiBtb3N0IGNhc2VzIGFueXdh
eS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpyZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvTGluZWFyU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3Bs
YXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b1hZWik6CisgICAgICAgIChXZWJDb3JlOjpsaWdo
dG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRyYXN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKFdl
YkNvcmU6OnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmdiVG9MaW5lYXJDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclRvUkdCQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp4eXpUb0xpbmVhclNSR0IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyU1JHQlRvWFlaKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlhZWlRvTGluZWFyUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGlu
ZWFyUDNUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwM1RvU1JHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdCVG9QMyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzUkdCVG9IU0wpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aHNsVG9TUkdCKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgor
ICAgICAgICBSZW5hbWUgLyByZXdvcmsgY29udmVyc2lvbiBhbmQgdXRpbGl0eSBmdW5jdGlvbnMg
dG8gb3BlcmF0ZSBvbiBleHBsaWNpdCBDb2xvciAKKyAgICAgICAgdHlwZXMuIEluIGRvaW5nIHNv
LCBzaW1wbGlmeSB0aGUgbmFtZXMgb2YgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNvIG9ubHkg
bmFtZQorICAgICAgICB0aGUgb3V0cHV0IHR5cGUuIEZvciBpbnN0YW5jZToKKworICAgICAgICAg
ICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7CisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IAorICAgICAgICAKKyAgICAg
ICAgICAgIFNSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYpOworICAgICAg
ICAKKyAgICAgICAgYXMgdGhlIGlucHV0IHR5cGUgaXMgaW1wbGljaXQgaW4gdGhlIGNhbGwuIEEg
bGl0dGxlIGR1cGxpY2F0aW9uIHdhcyBuZWVkZWQgCisgICAgICAgIGZvciBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50L3JnYlRvTGluZWFyQ29sb3JDb21wb25lbnQgKGFzIGl0IHdhcyB1c2VkIGZv
cgorICAgICAgICBib3RoIHNSR0IgYW5kIERpc3BsYXlQMyBsaW5lYXJpemF0aW9uKSwgYnV0IG1v
c3RseSB0aGluZ3Mgc3RheSB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENv
bG9yOjp0b1NSR0JBQ29sb3JMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRl
ZENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIHRvU1JHQkFDb2xvckxvc3N5KCkgYW5kIGhhdmUgaXQK
KyAgICAgICAgcmV0dXJuIGEgU1JHQkFDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdC
QUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgUmVuYW1lIGFzU1JHQkZsb2F0Q29tcG9uZW50cygpIHRvIGFzU1JH
QkFDb2xvcigpIGFuZCBoYXZlIGl0IAorICAgICAgICByZXR1cm4gYSBTUkdCQUNvbG9yLiBSZXBs
YWNlIG1ha2VTaW1wbGVDb2xvciB0YWtpbmcgRmxvYXRDb21wb25lbnRzCisgICAgICAgIHdpdGgg
b25lIHRha2luZyBhIFNSR0JBQ29sb3IsIG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlz
CisgICAgICAgIGlzIG9ubHkgdmFsaWQgZm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUg
dHlwZXMgZm9yIFNSR0JDb2xvciBhbmQgTGluZWFyU1JHQkFDb2xvcnMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVy
dExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xv
ciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVy
c2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIFVzZSBTUkdCQUNvbG9yIHJhdGhlciB0
aGFuIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG8gbWFrZSBpdCBjbGVhcgorICAgICAgICB0aGF0
IHRoZSBmaWx0ZXJzIG9ubHkgd29yayBvbiBzUkdCIGNvbG9ycyByaWdodCBub3cuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmRpc2FibGVkVGV4dENvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4
dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdh
aW5zdEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlUkdCQUZyb21D
b2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGRDb2xvclN0b3BSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENvcm5lckNvbG9yUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUNv
bG9yU3RvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBHZGtSR0JBIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
cGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNsZWFy
Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEgY29u
c3QpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCB0b1NSR0JBQ29sb3JMb3NzeSgpIHJhdGhlciB0
aGFuIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKS4KKwogMjAyMC0wNi0xMiAgQW5keSBFc3RlcyAg
PGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRmlsZUlucHV0VHlwZSBzaG91bGQgdXNlIFdl
YWtQdHIgZm9yIEZpbGVMaXN0Q3JlYXRvciBsYW1iZGFzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJ
KHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRl
eHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVy
LmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI2Mjk0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIwNiw2ICsyMjA2LDcg
QEAKIAkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBD
NjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLzsgfTsKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5o
ICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0
QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OworCQk3
QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8q
IENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJF
Qjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDMTkzQkJCMUY1RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTkzQkI2
MUY1RTBFQjkwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCAqLzsgfTsKIAkJN0MxOTNCQkMx
RjVFMEVFRDAwODhGM0U2IC8qIENhbnZhc0ZpbGxSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JBMTFGNUUwRUFCMDA4OEYzRTYgLyogQ2Fu
dmFzRmlsbFJ1bGUuaCAqLzsgfTsKQEAgLTk4OTAsNiArOTg5MSw3IEBACiAJCTdBRjlCMjA5MThD
RkI1RjIwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1ZUVFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5
QjIwQTE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lv
bkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIw
NCAvKiBDb2xvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQ0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9NQ29u
c3RydWN0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29u
c3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5MUU0
QTU0RDMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQ0VGMkExRTRBNTU2QzAwOERFQjgwIC8q
IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI1NDQ1LDYgKzI1NDQ3LDcgQEAKIAkJCQkzMTAzQjdERTFEQjAxNTU2MDA4
QkI4OTAgLyogQ29sb3JIYXNoLmggKi8sCiAJCQkJN0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8q
IENvbG9yTWF0cml4LmggKi8sCiAJCQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9y
U3BhY2UuaCAqLywKKwkJCQk3QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5o
ICovLAogCQkJCTBGRTZDNzZCMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5jcHAg
Ki8sCiAJCQkJMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8s
CiAJCQkJQzJGNEU3ODgxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAgKi8sCkBAIC0zMzExNyw2ICszMzEyMCw3IEBACiAJCQkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4
N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE3
MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NjMwODI0NUU1OTAwMUU5QUJDIC8qIFNTTEtleUdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0
YWNrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIy
QTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDAsNyArNjQwLDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoaHNsVG9TUkdCKHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5
WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcih0b1NSR0JBKEhTTEFDb2xvciB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5
WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOwogfQogCiBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjE5LDEzICs2MTksMTMg
QEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUgogICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHRleHRDb2xv
ciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7
CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFd
ID0gc1JHQlRvSFNMKHRleHRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JH
QkFDb2xvckxvc3N5KCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUg
bGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRp
cGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUg
Y29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9u
bHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzhmOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBo
dWUsIHNhdHVyYXRpb24sIG92ZXJyaWRlTGlnaHRuZXNzLCBvdmVycmlkZUFscGhhTXVsdGlwbGll
ciAqIGFscGhhIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhzbGFDb2xvci5saWdodG5l
c3MgPSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgaHNsYUNvbG9yLmFscGhhICo9IDAu
MzhmOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3Is
IENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNv
bG9yLCB1bmRlcmxpbmVDb2xvci5zZXJpYWxpemF0aW9uRm9yQ1NTKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgpIGNvbnN0CiAg
ICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBibGFjaykKICAgICAgICAgcmV0dXJu
IGxpZ2h0ZW5lZEJsYWNrOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29sb3JMb3NzeSgp
OwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAw
LjBmKQpAQCAtMTIzLDcgKzEyMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CiAg
ICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAgICAgICAgcmV0dXJu
IGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29sb3JMb3Nz
eSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBt
dWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTEzNCw3ICsx
MzQsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogYm9vbCBDb2xvcjo6aXNEYXJr
KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcg
bHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICBm
bG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAg
IHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7CiB9CkBAIC0x
NDIsMTMgKzE0MiwxMyBAQCBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb2xvckxv
c3N5KCkpOwogfQogCiBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lvbiB0byBzUkdCIGJ5IGhhdmlu
ZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9T
UkdCQUNvbG9yTG9zc3koKSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYg
c291cmNlKSBjb25zdApAQCAtMjQyLDIxICsyNDIsMjEgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2Us
IENvbG9yQ29tcG9uZW50czxmbAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJl
dHVybiB7IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRz
KCkgfTsKLSAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc1NpbXBsZSgpLmFzU1JHQkZs
b2F0Q29tcG9uZW50cygpIH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xv
ckNvbXBvbmVudHMoYXNTaW1wbGUoKS5hc1NSR0JBQ29sb3IoKSkgfTsKIH0KIAogU2ltcGxlQ29s
b3IgQ29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKIHsKICAgICBpZiAoaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGFzRXh0ZW5kZWQoKS50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KGFzRXh0ZW5kZWQoKS50b1NSR0JBQ29sb3JMb3NzeSgpKTsKICAgICByZXR1cm4gYXNTaW1wbGUo
KTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpIGNvbnN0CitTUkdCQUNvbG9yIENvbG9yOjp0b1NSR0JBQ29sb3JMb3NzeSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCRmxv
YXRDb21wb25lbnRzKCk7CisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUNvbG9y
TG9zc3koKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBQ29sb3IoKTsKIH0KIAogQ29s
b3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dy
ZXNzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7CiAKICAg
ICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNS
R0IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU1JHQkFDb2xvciB0b1NS
R0JBQ29sb3JMb3NzeSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRl
bmVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXgu
aAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mLi4uKFRzKSA9PSBSb3dzICogQ29sdW1ucyk7CiAg
ICAgfQogCi0gICAgY29uc3RleHByIHZvaWQgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9y
Q29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3Q7CiAKICAgICBjb25zdGV4cHIgZmxvYXQgYXQoc2l6ZV90IHJvdywgc2l6
ZV90IGNvbHVtbikgY29uc3QKQEAgLTEwMSwxMiArMTAwLDYgQEAgaW5saW5lIENvbG9yTWF0cml4
PDMsIDM+IGh1ZVJvdGF0ZUNvbG9yTQogfQogCiB0ZW1wbGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6
ZV90IFJvd3M+Ci1jb25zdGV4cHIgdm9pZCBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJh
bnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVjdG9y
KSBjb25zdAotewotICAgIGlucHV0VmVjdG9yID0gdHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
aW5wdXRWZWN0b3IpOwotfQotCi10ZW1wbGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+
CiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvck1hdHJpeDxDb2x1bW5zLCBS
b3dzPjo6dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZs
b2F0PiYgaW5wdXRWZWN0b3IpIGNvbnN0CiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+OjpTaXplID49IFJvd3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdHJ1Y3QgU1JHQkFDb2xvciB7CisgICAgZmxvYXQgcmVkOworICAgIGZsb2F0IGdy
ZWVuOworICAgIGZsb2F0IGJsdWU7CisgICAgZmxvYXQgYWxwaGE7Cit9OworCitjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBTUkdCQUNvbG9y
JiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsK
K30KKworY29uc3RleHByIFNSR0JBQ29sb3IgYXNTUkdCQUNvbG9yKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9
OworfQorCitzdHJ1Y3QgTGluZWFyU1JHQkFDb2xvciB7CisgICAgZmxvYXQgcmVkOworICAgIGZs
b2F0IGdyZWVuOworICAgIGZsb2F0IGJsdWU7CisgICAgZmxvYXQgYWxwaGE7Cit9OworCitjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBMaW5l
YXJTUkdCQUNvbG9yJiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUs
IGMuYWxwaGEgfTsKK30KKworY29uc3RleHByIExpbmVhclNSR0JBQ29sb3IgYXNMaW5lYXJTUkdC
QUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgcmV0dXJuIHsg
Y1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCitzdHJ1Y3QgRGlzcGxheVAzQ29sb3Igewor
ICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVlbjsKKyAgICBmbG9hdCBibHVlOworICAgIGZs
b2F0IGFscGhhOworfTsKKworY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNDb2xv
ckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzQ29sb3ImIGMpCit7CisgICAgcmV0dXJuIHsgYy5y
ZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCitjb25zdGV4cHIgRGlzcGxheVAz
Q29sb3IgYXNEaXNwbGF5UDNDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjKQor
eworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKworc3RydWN0IExp
bmVhckRpc3BsYXlQM0NvbG9yIHsKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQgZ3JlZW47Cisg
ICAgZmxvYXQgYmx1ZTsKKyAgICBmbG9hdCBhbHBoYTsKK307CisKK2NvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhckRpc3BsYXlQM0Nv
bG9yJiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEg
fTsKK30KKworY29uc3RleHByIExpbmVhckRpc3BsYXlQM0NvbG9yIGFzTGluZWFyRGlzcGxheVAz
Q29sb3IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYykKK3sKKyAgICByZXR1cm4geyBj
WzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9CisKK3N0cnVjdCBIU0xBQ29sb3IgeworICAgIGZs
b2F0IGh1ZTsKKyAgICBmbG9hdCBzYXR1cmF0aW9uOworICAgIGZsb2F0IGxpZ2h0bmVzczsKKyAg
ICBmbG9hdCBhbHBoYTsKK307CisKK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IEhTTEFDb2xvciYgYykKK3sKKyAgICByZXR1cm4geyBjLmh1
ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OworfQorCitjb25zdGV4cHIg
SFNMQUNvbG9yIGFzSFNMQUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7
CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCitzdHJ1Y3QgWFla
QUNvbG9yIHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBm
bG9hdCBhbHBoYTsKK307CisKK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGFzQ29s
b3JDb21wb25lbnRzKGNvbnN0IFhZWkFDb2xvciYgYykKK3sKKyAgICByZXR1cm4geyBjLngsIGMu
eSwgYy56LCBjLmFscGhhIH07Cit9CisKK2NvbnN0ZXhwciBYWVpBQ29sb3IgYXNYWVpBQ29sb3Io
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBj
WzFdLCBjWzJdLCBjWzNdIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4g
bGluZWFyUkdCIGNvbnZlcnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQgYykKKy8v
IFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIC8gc3RhbmRhcmQgRGlz
cGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgorc3RhdGljIGZsb2F0IGxpbmVhclRvUkdCQ29s
b3JDb21wb25lbnQoZmxvYXQgYykKIHsKICAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCiAgICAgICAg
IHJldHVybiAxMi45MmYgKiBjOwpAQCAtNDAsNyArNDAsNyBAQCBmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KDEuMDU1ZiAq
IHN0ZDo6cG93KGMsIDEuMGYgLyAyLjRmKSAtIDAuMDU1ZiwgMCwgMSk7CiB9CiAKLWZsb2F0IHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKK3N0YXRpYyBmbG9hdCByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCiAgICAg
ICAgIHJldHVybiBjIC8gMTIuOTJmOwpAQCAtNDgsMjcgKzQ4LDQ3IEBAIGZsb2F0IHJnYlRvTGlu
ZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3Rk
Ojpwb3coKGMgKyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIFJHQkNvbG9yKQorTGluZWFyU1JHQkFDb2xvciB0b0xpbmVhclNSR0JBKGNvbnN0
IFNSR0JBQ29sb3ImIHNSR0JBKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnQoUkdCQ29sb3JbMF0pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KFJHQkNvbG9yWzFdKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChS
R0JDb2xvclsyXSksCi0gICAgICAgIFJHQkNvbG9yWzNdCisgICAgICAgIHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoc1JHQkEucmVkKSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChzUkdCQS5ncmVlbiksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoc1JHQkEu
Ymx1ZSksCisgICAgICAgIHNSR0JBLmFscGhhCiAgICAgfTsKIH0KIAotQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYgbGluZWFyUkdCKQorU1JHQkFDb2xvciB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBQ29sb3Im
IGxpbmVhclNSR0JBKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQobGluZWFyUkdCWzBdKSwKLSAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dChsaW5lYXJSR0JbMV0pLAotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVh
clJHQlsyXSksCi0gICAgICAgIGxpbmVhclJHQlszXQorICAgICAgICBsaW5lYXJUb1JHQkNvbG9y
Q29tcG9uZW50KGxpbmVhclNSR0JBLnJlZCksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21w
b25lbnQobGluZWFyU1JHQkEuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGxpbmVhclNSR0JBLmJsdWUpLAorICAgICAgICBsaW5lYXJTUkdCQS5hbHBoYQogICAgIH07
CiB9CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHh5elRvTGluZWFyU1JHQihjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorTGluZWFyRGlzcGxheVAz
Q29sb3IgdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzQ29sb3ImIGRpc3BsYXlQMykK
K3sKKyAgICByZXR1cm4geworICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGRpc3Bs
YXlQMy5yZWQpLAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGRpc3BsYXlQMy5n
cmVlbiksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZGlzcGxheVAzLmJsdWUp
LAorICAgICAgICBkaXNwbGF5UDMuYWxwaGEKKyAgICB9OworfQorCitEaXNwbGF5UDNDb2xvciB0
b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDNDb2xvciYgbGluZWFyRGlzcGxheVAzKQor
eworICAgIHJldHVybiB7CisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFy
RGlzcGxheVAzLnJlZCksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFy
RGlzcGxheVAzLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5l
YXJEaXNwbGF5UDMuYmx1ZSksCisgICAgICAgIGxpbmVhckRpc3BsYXlQMy5hbHBoYQorICAgIH07
Cit9CisKK3N0YXRpYyBMaW5lYXJTUkdCQUNvbG9yIHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQUNv
bG9yJiB4eXopCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgog
ICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9Y
WVpfTWF0cml4Lmh0bWwKQEAgLTc3LDEwICs5NywxMCBAQCBzdGF0aWMgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiB4eXpUb0xpbmVhCiAgICAgICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAu
MDQxNTU2MGYsCiAgICAgICAgICAwLjA1NTY0MzRmLCAtMC4yMDQwMjU5ZiwgIDEuMDU3MjI1MmYK
ICAgICB9OwotICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzTGluZWFyU1JHQkFDb2xv
cih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoeHl6KSkpOwogfQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBs
aW5lYXJTUkdCVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50
cykKK3N0YXRpYyBYWVpBQ29sb3IgdG9YWVooY29uc3QgTGluZWFyU1JHQkFDb2xvciYgbGluZWFy
U1JHQkEpCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgogICAg
IC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpf
TWF0cml4Lmh0bWwKQEAgLTg5LDcyICsxMDksNzAgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxm
bG9hdD4gbGluZWFyU1JHQgogICAgICAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcy
MTc1MGYsCiAgICAgICAgIDAuMDE5MzMzOWYsICAwLjExOTE5MjBmLCAgMC45NTAzMDQxZgogICAg
IH07Ci0gICAgcmV0dXJuIGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4gYXNYWVpBQ29sb3IobGluZWFyU1JH
QlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGxpbmVhclNSR0JBKSkpOwogfQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBYWVpU
b0xpbmVhclAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitz
dGF0aWMgTGluZWFyRGlzcGxheVAzQ29sb3IgdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgWFlaQUNv
bG9yJiB4eXopCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
Y29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5
elRvTGluZWFyU1JHQk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5
elRvTGluZWFyRGlzcGxheVAzTWF0cml4IHsKICAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1Ziwg
IC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKICAgICAgICAgLTAu
ODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5
NDM2ZiwKICAgICAgICAgIDAuMDM1ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThm
LCAgMC45NTY4ODQ1MjQwMDc2ODcyZgogICAgIH07Ci0gICAgcmV0dXJuIHh5elRvTGluZWFyU1JH
Qk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICBy
ZXR1cm4gYXNMaW5lYXJEaXNwbGF5UDNDb2xvcih4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyh4eXopKSk7CiB9CiAK
LXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclAzVG9YWVooY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBYWVpBQ29sb3IgdG9YWVoo
Y29uc3QgTGluZWFyRGlzcGxheVAzQ29sb3ImIGxpbmVhckRpc3BsYXlQMykKIHsKICAgICAvLyBo
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUK
LSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyUDNUb1hZWk1hdHJpeCB7Cisg
ICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4
IHsKICAgICAgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4x
OTgyMTcyODUyMzQzNjNmLAogICAgICAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUy
MTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCiAgICAgICAgIDAuMGYsICAgICAgICAgICAg
ICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgogICAgIH07Ci0gICAg
cmV0dXJuIGxpbmVhclAzVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFla
Q29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzWFlaQUNvbG9yKGxpbmVhckRpc3BsYXlQM1RvWFla
TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGxpbmVh
ckRpc3BsYXlQMykpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBwMykKK1NSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBE
aXNwbGF5UDNDb2xvciYgZGlzcGxheVAzKQogewotICAgIGF1dG8gbGluZWFyUDMgPSByZ2JUb0xp
bmVhckNvbXBvbmVudHMocDMpOwotICAgIGF1dG8geHl6ID0gbGluZWFyUDNUb1hZWihsaW5lYXJQ
Myk7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0geHl6VG9MaW5lYXJTUkdCKHh5eik7Ci0gICAgcmV0
dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJTUkdCKTsKKyAgICBhdXRvIGxpbmVhckRp
c3BsYXlQMyA9IHRvTGluZWFyRGlzcGxheVAzKGRpc3BsYXlQMyk7CisgICAgYXV0byB4eXogPSB0
b1hZWihsaW5lYXJEaXNwbGF5UDMpOworICAgIGF1dG8gbGluZWFyU1JHQiA9IHRvTGluZWFyU1JH
QkEoeHl6KTsKKyAgICByZXR1cm4gdG9TUkdCQShsaW5lYXJTUkdCKTsKIH0KIAotQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBzUkdCVG9QMyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdC
KQorRGlzcGxheVAzQ29sb3IgdG9EaXNwbGF5UDMoY29uc3QgU1JHQkFDb2xvciYgc1JHQkEpCiB7
Ci0gICAgYXV0byBsaW5lYXJTUkdCID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0IpOwotICAg
IGF1dG8geHl6ID0gbGluZWFyU1JHQlRvWFlaKGxpbmVhclNSR0IpOwotICAgIGF1dG8gbGluZWFy
UDMgPSBYWVpUb0xpbmVhclAzKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50
cyhsaW5lYXJQMyk7CisgICAgYXV0byBsaW5lYXJTUkdCQSA9IHRvTGluZWFyU1JHQkEoc1JHQkEp
OworICAgIGF1dG8geHl6ID0gdG9YWVoobGluZWFyU1JHQkEpOworICAgIGF1dG8gbGluZWFyRGlz
cGxheVAzID0gdG9MaW5lYXJEaXNwbGF5UDMoeHl6KTsKKyAgICByZXR1cm4gdG9EaXNwbGF5UDMo
bGluZWFyRGlzcGxheVAzKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdC
QUNvbG9yJiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb250ZW50
czsKLQorICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7CiAgICAgYXV0byBbbWluLCBtYXhd
ID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwotCiAgICAgcmV0dXJuIDAuNWYgKiAobWF4ICsg
bWluKTsKIH0KIAotZmxvYXQgbHVtaW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IHNSR0JDb21wb25lbnRzKQorZmxvYXQgbHVtaW5hbmNlKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JB
KQogewotICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2aWxlbnQgb2YgYGxpbmVhclNSR0JU
b1hZWihyZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNvbXBvbmVudHMpKVsxXWAKKyAgICAvLyBO
T1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGB0b1hZWih0b0xpbmVhclNSR0JBKHNSR0JB
KSlbMV1gCiAgICAgLy8gRklNWEU6IElmIHdlIGNhbiBnZW5lcmFsaXplIENvbG9yTWF0cml4IGEg
Yml0IG1vcmUsIGl0IG1pZ2h0IGJlIG5pY2UgdG8gd3JpdGUgdGhpcyBhczoKLSAgICAvLyAgICAg
IGF1dG8gbGluZWFyU1JHQkNvbXBvbmVudHMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNv
bXBvbmVudHMpOwotICAgIC8vICAgICAgcmV0dXJuIGxpbmVhclNSR0JDb21wb25lbnRzICogbGlu
ZWFyU1JHQlRvWFlaTWF0cml4LnJvdygxKTsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYlRv
TGluZWFyQ29tcG9uZW50cyhzUkdCQ29tcG9uZW50cyk7CisgICAgLy8gICAgICBhdXRvIGxpbmVh
clNSR0JBQ29tcG9uZW50cyA9IHRvTGluZWFyU1JHQkEoc1JHQkEpOworICAgIC8vICAgICAgcmV0
dXJuIGxpbmVhclNSR0JBQ29tcG9uZW50cyAqIGxpbmVhclNSR0JUb1hZWk1hdHJpeC5yb3coMSk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKHNSR0JBKTsKICAgICByZXR1
cm4gMC4yMTI2ZiAqIHIgKyAwLjcxNTJmICogZyArIDAuMDcyMmYgKiBiOwogfQogCi1mbG9hdCBj
b250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbXBvbmVudHNBLCBj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkFDb2xvciYgc1JHQkExLCBjb25zdCBTUkdCQUNvbG9yJiBzUkdCQTIp
CiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBjb250cmFzdCByYXRp
by4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNjb250cmFzdC1yYXRpb2Rl
ZgotICAgIGZsb2F0IGxpZ2h0ZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29tcG9uZW50c0EpOwot
ICAgIGZsb2F0IGRhcmtlckx1bWluYW5jZSA9IGx1bWluYW5jZShjb21wb25lbnRzQik7CisgICAg
ZmxvYXQgbGlnaHRlckx1bWluYW5jZSA9IGx1bWluYW5jZShzUkdCQTEpOworICAgIGZsb2F0IGRh
cmtlckx1bWluYW5jZSA9IGx1bWluYW5jZShzUkdCQTIpOwogCiAgICAgaWYgKGxpZ2h0ZXJMdW1p
bmFuY2UgPCBkYXJrZXJMdW1pbmFuY2UpCiAgICAgICAgIHN0ZDo6c3dhcChsaWdodGVyTHVtaW5h
bmNlLCBkYXJrZXJMdW1pbmFuY2UpOwpAQCAtMTYyLDEwICsxODAsMTAgQEAgZmxvYXQgY29udHJh
c3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudAogICAgIHJldHVybiAobGlnaHRlckx1bWluYW5j
ZSArIDAuMDUpIC8gKGRhcmtlckx1bWluYW5jZSArIDAuMDUpOwogfQogCi1Db2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IHNSR0JUb0hTTChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29t
cG9udGVudHMpCitIU0xBQ29sb3IgdG9IU0xBKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewog
ICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLgotICAg
IGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IHNSR0JDb21wb250ZW50czsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhbHBoYV0gPSBzUkdCQTsKIAogICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4
KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47CkBAIC0yMjEsOSAr
MjM5LDkgQEAgc3RhdGljIGZsb2F0IGNhbGNIdWUoZmxvYXQgdGVtcDEsIGZsb2F0IAogLy8gRXhw
bGFuYXRpb24gb2YgdGhpcyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluIHRoZSBDU1MgQ29sb3Ig
NCBNb2R1bGUKIC8vIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxh
YmxlIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JiBoc2xDb2xvcikKK1NSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBIU0xBQ29sb3ImIGhzbGFDb2xv
cikKIHsKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gaHNs
Q29sb3I7CisgICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGhz
bGFDb2xvcjsKIAogICAgIC8vIENvbnZlcnQgYmFjayB0byBSR0IuCiAgICAgaWYgKCFzYXR1cmF0
aW9uKSB7CkBAIC0yNDcsOSArMjY1LDkgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBoc2xUb1NS
R0IoY29uc3QgQwogICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlw
bGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50cykKK1NSR0JB
Q29sb3IgcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQUNvbG9yJiBzUkdCQSkKIHsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c1JHQkE7CiAgICAgcmV0dXJuIHsKICAgICAgICAgciAqIGEsCiAgICAgICAgIGcgKiBhLApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzMSArMjUsMzAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKK0xpbmVhclNSR0JBQ29sb3IgdG9M
aW5lYXJTUkdCQShjb25zdCBTUkdCQUNvbG9yJik7CitTUkdCQUNvbG9yIHRvU1JHQkEoY29uc3Qg
TGluZWFyU1JHQkFDb2xvciYpOwogCi0vLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNsYW1w
ZWQuCi1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLWZsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOworTGluZWFyRGlzcGxheVAzQ29sb3IgdG9MaW5l
YXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzQ29sb3ImKTsKK0Rpc3BsYXlQM0NvbG9yIHRvRGlz
cGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQM0NvbG9yJik7CiAKLUNvbG9yQ29tcG9uZW50czxm
bG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
KTsKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK1NSR0JBQ29sb3IgdG9TUkdCQShjb25zdCBEaXNwbGF5
UDNDb2xvciYpOworRGlzcGxheVAzQ29sb3IgdG9EaXNwbGF5UDMoY29uc3QgU1JHQkFDb2xvciYp
OwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHAzVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mKTsKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvUDMoY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgSFNMQUNvbG9yIHRvSFNMQShjb25z
dCBTUkdCQUNvbG9yJik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQUNvbG9yIHRvU1JHQkEoY29uc3Qg
SFNMQUNvbG9yJik7CiAKLVdFQkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JH
QlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mKTsKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQUNvbG9yJik7CitmbG9hdCBsdW1pbmFu
Y2UoY29uc3QgU1JHQkFDb2xvciYpOwogCi1mbG9hdCBsaWdodG5lc3MoY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKLWZsb2F0IGx1bWluYW5jZShjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwotZmxvYXQgY29udHJhc3RS
YXRpbyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHNBLCBjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHNCKTsKK2Zsb2F0IGNvbnRy
YXN0UmF0aW8oY29uc3QgU1JHQkFDb2xvciYsIGNvbnN0IFNSR0JBQ29sb3ImKTsKIAotQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIHNSR0JDb21wb250ZW50cyk7CitTUkdCQUNvbG9yIHByZW11bHRpcGxpZWQoY29uc3QgU1JH
QkFDb2xvciYpOwogCiBpbmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRC
eXRlKGZsb2F0IGYpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDE4ICs4MCwyMyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52
ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBj
MiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwogfQogCi1Db2xvckNv
bXBvbmVudHM8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBj
b25zdAorU1JHQkFDb2xvciBFeHRlbmRlZENvbG9yOjp0b1NSR0JBQ29sb3JMb3NzeSgpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHJldHVybiBtX2NvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpM
aW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobV9jb21wb25l
bnRzKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6IHsKKyAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiBTUkdCQUNvbG9yIHsgciwgZywg
YiwgYSB9OworICAgIH0KKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjogeworICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fY29tcG9uZW50czsKKyAgICAgICAgcmV0dXJuIHRvU1JH
QkEoTGluZWFyU1JHQkFDb2xvciB7IHIsIGcsIGIsIGEgfSk7CisgICAgfQogICAgIGNhc2UgQ29s
b3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gcDNUb1NSR0IobV9jb21wb25lbnRz
KTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJl
dHVybiB0b1NSR0JBKERpc3BsYXlQM0NvbG9yIHsgciwgZywgYiwgYSB9KTsKICAgICB9CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4geyAwLCAw
LCAwLCAwIH07CiB9CiAKIGJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5o
CShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRl
ICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01MSw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JXaXRoQWxwaGEoZmxvYXQp
IGNvbnN0OwogICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZs
b2F0KSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpIGNvbnN0OworICAgIFNSR0JBQ29sb3IgdG9TUkdCQUNvbG9yTG9zc3koKSBjb25z
dDsKIAogICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yVHlw
ZXMuaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHsg
c3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8
dWludDhfdD4oMHhGRiAtIGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pigw
eEZGIC0gYmx1ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSBjb25zdAorICAg
IGNvbnN0ZXhwciBTUkdCQUNvbG9yIGFzU1JHQkFDb2xvcigpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21w
b25lbnQoKSkgfTsKICAgICB9CkBAIC0xMjIsOSArMTIzLDkgQEAgY29uc3RleHByIFNpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvcihpbgogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1w
KGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChiLCAwLCAweEZG
KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYSwgMCwgMHhGRikpIH07CiB9CiAK
LWlubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCitpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yKGNvbnN0IFNSR0JBQ29sb3ImIHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c1JHQkNvbXBvbmVudHM7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKICAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAog
dm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb2xvckxv
c3N5KCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkK
IAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50
LCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Cisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAg
ICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNl
dCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNh
aXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9w
LCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3Rv
cC5jb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpOwogICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRf
Y29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEp
OwogfQogCkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fp
cm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNvbG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9y
U3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8pCiB7
Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCk7Ci0gICAgYXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3Iu
dG9TUkdCQUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5jb2xv
ci50b1NSR0JBQ29sb3JMb3NzeSgpOwogCiAgICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQg
KyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQpICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAo
cjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDQsOCArNDA0LDEzIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0
aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAg
Ci0gICAgYXV0byBsaWdodENvbG9yID0gKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpID8gcmdiVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpIDogbV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZl
Y3RvciA9IEZsb2F0UG9pbnQzRChsaWdodENvbG9yWzBdLCBsaWdodENvbG9yWzFdLCBsaWdodENv
bG9yWzJdKTsKKyAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6Okxp
bmVhclJHQikgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9s
aWdodGluZ0NvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpOworICAgICAgICBwYWludGluZ0RhdGEu
aW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBQ29sb3JMb3NzeSgpOworICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0
aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKKyAgICB9CiAgICAg
bV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIAog
ICAgIC8vIFRvcCBsZWZ0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwyNyArODUsMjcgQEAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb2xvck1hdHJpeAogICAgIHJldHVybiBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwg
bV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBj
b2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yKFNSR0JBQ29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FMRTogewogICAgICAgICBhdXRvIG1h
dHJpeCA9IGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRy
YW5zZm9ybUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBzUkdCQUNv
bG9yID0gYXNTUkdCQUNvbG9yKG1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0Nv
bG9yQ29tcG9uZW50cyhzUkdCQUNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgY2FzZSBTRVBJQTogewogICAgICAgICBhdXRvIG1hdHJpeCA9IHNlcGlhQ29sb3JNYXRy
aXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNv
bG9yQ29tcG9uZW50cyk7CisgICAgICAgIHNSR0JBQ29sb3IgPSBhc1NSR0JBQ29sb3IobWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHNSR0JBQ29sb3Ip
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsK
ICAgICAgICAgYXV0byBtYXRyaXggPSBodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0g
ICAgICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsK
KyAgICAgICAgc1JHQkFDb2xvciA9IGFzU1JHQkFDb2xvcihtYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoc1JHQkFDb2xvcikpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0FUVVJBVEU6IHsKICAgICAgICAgYXV0byBtYXRy
aXggPSBzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJh
bnNmb3JtQ29sb3JDb21wb25lbnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAgIHNSR0JBQ29s
b3IgPSBhc1NSR0JBQ29sb3IobWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKHNSR0JBQ29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBkZWZhdWx0OgpAQCAtMTUyLDMwICsxNTIsMzAgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gQmFzaWNDb21wb25lbnRUcgogICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQs
IHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xv
ckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBQ29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAgIGNvbG9yQ29t
cG9uZW50c1szXSAqPSBtX2Ftb3VudDsKKyAgICAgICAgc1JHQkFDb2xvci5hbHBoYSAqPSBtX2Ft
b3VudDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAgICAgICAg
ZmxvYXQgb25lTWludXNBbW91bnQgPSAxLmYgLSBtX2Ftb3VudDsKLSAgICAgICAgY29sb3JDb21w
b25lbnRzWzBdID0gMSAtIChvbmVNaW51c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50c1swXSAqICht
X2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9
IDEgLSAob25lTWludXNBbW91bnQgKyBjb2xvckNvbXBvbmVudHNbMV0gKiAobV9hbW91bnQgLSBv
bmVNaW51c0Ftb3VudCkpOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMl0gPSAxIC0gKG9uZU1p
bnVzQW1vdW50ICsgY29sb3JDb21wb25lbnRzWzJdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91
bnQpKTsKKyAgICAgICAgc1JHQkFDb2xvci5yZWQgPSAxIC0gKG9uZU1pbnVzQW1vdW50ICsgc1JH
QkFDb2xvci5yZWQgKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBzUkdC
QUNvbG9yLmdyZWVuID0gMSAtIChvbmVNaW51c0Ftb3VudCArIHNSR0JBQ29sb3IuZ3JlZW4gKiAo
bV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBzUkdCQUNvbG9yLmJsdWUgPSAx
IC0gKG9uZU1pbnVzQW1vdW50ICsgc1JHQkFDb2xvci5ibHVlICogKG1fYW1vdW50IC0gb25lTWlu
dXNBbW91bnQpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ09OVFJB
U1Q6IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVmICogbV9hbW91bnQpICsgMC41
ZjsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gY2xhbXBUbzxmbG9hdD4oaW50ZXJjZXB0
ICsgbV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMF0sIDAsIDEpOwotICAgICAgICBjb2xvckNv
bXBvbmVudHNbMV0gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbG9y
Q29tcG9uZW50c1sxXSwgMCwgMSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1syXSA9IGNsYW1w
VG88ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwLCAx
KTsKKyAgICAgICAgc1JHQkFDb2xvci5yZWQgPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBt
X2Ftb3VudCAqIHNSR0JBQ29sb3IucmVkLCAwLCAxKTsKKyAgICAgICAgc1JHQkFDb2xvci5ncmVl
biA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogc1JHQkFDb2xvci5ncmVl
biwgMCwgMSk7CisgICAgICAgIHNSR0JBQ29sb3IuYmx1ZSA9IGNsYW1wVG88ZmxvYXQ+KGludGVy
Y2VwdCArIG1fYW1vdW50ICogc1JHQkFDb2xvci5ibHVlLCAwLCAxKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGNhc2UgQlJJR0hUTkVTUzoKLSAgICAgICAgY29sb3JDb21wb25l
bnRzWzBdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzBdLCAw
KTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzFdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50
ICogY29sb3JDb21wb25lbnRzWzFdLCAwKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzJdID0g
c3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwKTsKKyAgICAg
ICAgc1JHQkFDb2xvci5yZWQgPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBzUkdCQUNvbG9y
LnJlZCwgMCk7CisgICAgICAgIHNSR0JBQ29sb3IuZ3JlZW4gPSBzdGQ6Om1heDxmbG9hdD4obV9h
bW91bnQgKiBzUkdCQUNvbG9yLmdyZWVuLCAwKTsKKyAgICAgICAgc1JHQkFDb2xvci5ibHVlID0g
c3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogc1JHQkFDb2xvci5ibHVlLCAwKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yMjYsMTUgKzIyNiwxNSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdo
dG5lc3NGCiAgICAgcmV0dXJuIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KCk7CiB9CiAKLWJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1D
b2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAor
Ym9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JB
Q29sb3ImIHNSR0JBQ29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JH
QlRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNMQShzUkdC
QUNvbG9yKTsKICAgICAKICAgICAvLyBSb3RhdGUgdGhlIGh1ZSAxODBkZWcuCi0gICAgaHNsQ29t
cG9uZW50c1swXSA9IGZtb2QoaHNsQ29tcG9uZW50c1swXSArIDAuNWYsIDEuMGYpOworICAgIGhz
bGEuaHVlID0gZm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOwogICAgIAogICAgIC8vIENvbnZl
cnQgYmFjayB0byBSR0IuCi0gICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xD
b21wb25lbnRzKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbG9yID0gdG9TUkdCQShoc2xh
KTsKICAgICAKICAgICAvLyBBcHBseSB0aGUgbWF0cml4LiBTZWUgcmRhcjovL3Byb2JsZW0vNDEx
NDY2NTAgZm9yIGhvdyB0aGlzIG1hdHJpeCB3YXMgZGVyaXZlZC4KICAgICBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8NSwgMz4gdG9EYXJrTW9kZU1hdHJpeCB7CkBAIC0yNDIsMjggKzI0MiwyOCBAQCBi
b29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMwZiwg
LTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlmLCAt
MC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICB0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9y
bUNvbG9yQ29tcG9uZW50cyhzUkdCQ29sb3JDb21wb25lbnRzKTsKKyAgICBzUkdCQUNvbG9yID0g
YXNTUkdCQUNvbG9yKHRvRGFya01vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoaHVlUm90YXRlZFNSR0JBQ29sb3IpKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJh
bnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9uZW50cykg
Y29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNm
b3JtQ29sb3IoU1JHQkFDb2xvciYgc1JHQkFDb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIHJnYkNv
bXBvbmVudHMgPSBzUkdCQ29sb3JDb21wb25lbnRzOwotCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJp
eC4KICAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8NSwgMz4gdG9MaWdodE1vZGVNYXRyaXggewog
ICAgICAgICAtMS4zMDBmLCAtMC4wOTdmLCAgMC4xNDdmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAg
LTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYs
IC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICB0b0xpZ2h0TW9kZU1h
dHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBs
aWdodE1vZGVTUkdCQUNvbG9yID0gYXNTUkdCQUNvbG9yKHRvTGlnaHRNb2RlTWF0cml4LnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKHNSR0JBQ29sb3IpKSk7CiAK
ICAgICAvLyBDb252ZXJ0IHRvIEhTTC4KLSAgICBhdXRvIGhzbENvbXBvbmVudHMgPSBzUkdCVG9I
U0wocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBoc2xhID0gdG9IU0xBKGxpZ2h0TW9kZVNSR0JB
Q29sb3IpOworCiAgICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNsQ29tcG9uZW50
c1swXSA9IGZtb2QoaHNsQ29tcG9uZW50c1swXSArIDAuNWYsIDEuMGYpOworICAgIGhzbGEuaHVl
ID0gZm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOworCiAgICAgLy8gQW5kIHJldHVybiBSR0Iu
Ci0gICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xDb21wb25lbnRzKTsKKyAg
ICBzUkdCQUNvbG9yID0gdG9TUkdCQShoc2xhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaW52
ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5zZm9y
bUNvbG9yKFNSR0JBQ29sb3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgT3BlcmF0
aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKQEAgLTIyOSw3ICsyMjks
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHRyYW5zZm9y
bUNvbG9yKFNSR0JBQ29sb3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGRvdWJsZSBtX2Ftb3Vu
dDsKIH07CkBAIC0yNjQsNyArMjY0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAg
Ym9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQUNvbG9yJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjkxLDggKzI5MSw4IEBAIHByaXZhdGU6
CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHRyYW5zZm9ybUNv
bG9yKFNSR0JBQ29sb3ImKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGludmVyc2VUcmFuc2Zvcm1D
b2xvcihTUkdCQUNvbG9yJikgY29uc3QgZmluYWw7CiB9OwogCiBjbGFzcyBXRUJDT1JFX0VYUE9S
VCBCbHVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMSwxNCArMTExLDE0IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJh
bnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFDb21w
b25lbnRzTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBQ29sb3JM
b3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKLSAg
ICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisg
ICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xv
cihzUkdCQUNvbXBvbmVudHMpOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29s
b3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzAsMTQgKzEzMCwxNCBAQCBib29sIEZp
bHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50
aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbXBvbmVudHMg
PSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0g
Y29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
bV9vcGVyYXRpb25zKSB7Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3Jt
Q29sb3Ioc1JHQkFDb21wb25lbnRzKSkKKyAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VU
cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbXBvbmVudHMpOworICAg
IGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29sb3IpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtS
R0JBKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb2xvckxvc3N5KCk7CiAg
ICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDCiAgICAgUmVmPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dy
YW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogICAgIGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHBy
ZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAg
ICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAg
ICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVh
dGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9h
ZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNy
LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBw
cmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBj
b2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJl
bXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NSR0JBQ29sb3JMb3NzeSgpKTsKICAgICAgICAg
ICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAg
ICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNo
YWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAg
IGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC02
NzYsNyArNjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgog
ICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRT
aGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRp
cGxpZWQoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3Jh
bS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYgaXNCbGVu
ZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNjg2LDcgKzY4
Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICBnbENsZWFy
Q29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Q29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTMgKzQxLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCiAKIENvbG9y
OjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUNvbG9yTG9zc3koKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwog
fQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUNvbG9yTG9zc3koKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYo
ciwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2Mjk0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEdyYWRpZW50Ojpn
ZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4g
Z3JhZGllbnRTdG9wczsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29s
b3IuCiAgICAgZm9yIChhdXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAgICAgICAgIGdy
YWRpZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6
Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cm90CiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhh
KGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBi
LCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQwMSw3ICsxNDAxLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNv
bgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IHZlcnkgbXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBk
aXNhYmxlZCBjb2xvciBhbmQgdGhlIGJhY2tncm91bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2
ZSB0aGUgdGV4dCBjb2xvciBhbG9uZS4gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNv
bnRyYXN0IGNvbG9yIHNjaGVtZSBzbyB0aGF0IGl0IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0Lgog
ICAgIC8vIElmIHRoZSBjb250cmFzdCB3YXMgYWxyZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3Qg
ZG8gYW55IGdvb2QgdG8gY2hhbmdlIGl0IHRvIGEgZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29s
b3Igc2NoZW1lLgotICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
KSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKKyAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxl
ZENvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29sb3JM
b3NzeSgpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRDb2xv
cjsKIAogICAgIHJldHVybiBkaXNhYmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91bmQKIHsK
ICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGxlZ2liaWxpdHk6IGEgY29u
dHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4KICAgICAvLyBodHRwczovL3d3dy53My5v
cmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QKLSAgICByZXR1cm4g
Y29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpLCBiYWNrZ3Jv
dW5kQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA+IDQuNTsKKyAgICByZXR1cm4gY29u
dHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSwgYmFja2dyb3VuZENvbG9y
LnRvU1JHQkFDb2xvckxvc3N5KCkpID4gNC41OwogfQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29s
b3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYyOTY0KQor
KysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAyMC0wNi0xMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
RXh0ZW5kZWQgQ29sb3I6IEV4cGVyaW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBv
bmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MjM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JG
aWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3Jv
dW5kQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCB0b1NSR0JBQ29sb3JMb3NzeSgpIHJh
dGhlciB0aGFuIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKS4KKwogMjAyMC0wNi0xMiAgQW50b2lu
ZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBEb3VibGUgdGFwIHRvIHpv
b20gb3V0IGRvZXNuJ3Qgd29yayBhZnRlciB1cGdyYWRpbmcgdG8gaU9TIDEzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNp
b24gMjYyOTQ0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZp
bGxGcm9tV2ViQ29yZUNvbG9yKGNvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xv
ci5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNv
bG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3It
PmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAko
cmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0
dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAgIGlmIChjb2xv
ci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNu
YXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQ
YXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFd
ID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICAgICAgICAgIGF1dG8g
W3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCk7CiAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdFJlZihj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcg
KzY2MCw3IEBAIGJvb2wgV2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBp
ZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpOwogICAgICpyZWQg
PSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUgPSBiOwpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyOTU4KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDYt
MTIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENv
bG9yOiBFeHBlcmltZW50IHdpdGggc3Ryb25nbHkgdHlwZWQgQ29sb3JDb21wb25lbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVw
ZGF0ZSBmb3IgY2hhbmdlZCBuYW1lcyAoZS5nLiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgLT4g
dG9TUkdCQUNvbG9yTG9zc3koKSkKKyAgICAgICAgYW5kIHVzZSBvZiBleHBsaWNpdCB0eXBlcy4K
KwogMjAyMC0wNi0xMiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3VwcG9ydCBidWlsZGluZyB0ZXN0IHJ1bm5lcnMgZm9yIHdhdGNoT1MgYW5kIHR2T1MK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6Ondo
aXRlOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNS
R0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24pOwotICAg
IEVYUEVDVF9GTE9BVF9FUSgxLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRp
b24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
ICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9y
KGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29s
b3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
NTMsMTUgKzUzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9y
IGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkp
OworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFDb2xvckxvc3N5KCkp
OwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAs
IHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBsaWdodG5lc3MpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iu
bGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGln
aHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VT
aW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEg
fSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTY5LDE1ICs2OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAotICAgIGF1dG8g
W2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xv
ci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MC41LCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjUsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtODUsMTUgKzg1LDE1IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAg
YXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNzKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xv
ciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxp
Z2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3Vu
ZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwMSwxNSArMTAxLDE1IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwg
MjU1KTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBz
UkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9G
TE9BVF9FUSgwLjY2NjY2NjY5LCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1cmF0
aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgwLjY2NjY2NjY5LCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGhzbGFD
b2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
LCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNs
YUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3Io
bWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBh
bHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
dG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENv
bG9yKTsKIH0KIApAQCAtMTE3LDE1ICsxMTcsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFy
a0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBhdXRv
IFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29s
b3IudG9TUkdCQUNvbG9yTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAuNTAxOTYwNzg0MzEzNzI1NDgsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAs
IGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJh
dGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogICAgIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhz
bGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9y
KG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CiB9CiAKQEAgLTEzMywxNSArMTMzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gW2h1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NS
R0JBQ29sb3JMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0
NTA5ODAzOTIxNTY4NSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNv
bG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwgaHNsYUNvbG9yLmxpZ2h0
bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVz
cyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxl
Q29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7
CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhz
bGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC0xNDksMTUgKzE0OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiB7
CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBbaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFDb2xvckxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1Mjk0
MTE3NjQ3MDU4ODIyLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCBoc2xhQ29sb3IubGlnaHRu
ZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNz
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdo
dG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVD
b2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsK
KyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9F
eHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM3LDI3ICsyMzcsMjUgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMp
CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewotICAgIHsKLSAg
ICAgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAw
Ljc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKHAzQ29s
b3IuaXNFeHRlbmRlZCgpKTsKKyAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBFWFBF
Q1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgYXV0byBzUkdCQ29tcG9u
ZW50cyA9IHAzQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1sw
XSwgMS4wZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
c1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgMC40NjI1Mzc4ODVmKSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25l
bnRzWzJdLCAwLjE0OTE0NzgzOGYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbM10sIDAuNzVmKSk7Ci0gICAg
fQotCi0gICAgewotICAgICAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07Ci0gICAgICAg
IEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgICAgIGF1dG8gc1JH
QkNvbXBvbmVudHMgPSBsaW5lYXJDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5j
b21wb25lbnRzWzBdLCAxLjBmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50
aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzFdLCAwLjczNTM1NjkyN2YpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25l
bnRzLmNvbXBvbmVudHNbMl0sIDAuNTM3MDk4NzA2ZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1szXSwgMC43
NWYpKTsKLSAgICB9CisgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBQ29sb3JM
b3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNv
bG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzNzg4NWYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKKyAg
ICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5hbHBoYSwg
MC43NWYpKTsKIH0KIAorVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvblRv
U1JHQikKK3sKKyAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwg
MC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CisgICAgRVhQRUNUX1RS
VUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5l
YXJDb2xvci50b1NSR0JBQ29sb3JMb3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsK
KyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVl
LCAwLjUzNzA5ODcwNmYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwoc1JHQkFDb2xvci5hbHBoYSwgMC43NWYpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401777</attachid>
            <date>2020-06-12 13:58:45 -0700</date>
            <delta_ts>2020-06-12 14:41:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612135844.patch</filename>
            <type>text/plain</type>
            <size>69923</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3kgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisKKyAgICAgICAgVGhlIGdvYWwgaXMg
dG8gYWRkIHR5cGUgY2xhcml0eSAoeW91IGtub3cgd2hlbiB5b3UgYXJlIGRlYWxpbmcKKyAgICAg
ICAgd2l0aCBhbiBzUkdCIGNvbG9yIHZzLiBhIERpc3BsYXlQMyBjb2xvcikgYW5kIG1ha2UgZGVh
bGluZyB3aXRoCisgICAgICAgIHRoZSBjb2xvcnMgbmljZXIgKGNvbG9yLnJlZCByYXRoZXIgdGhh
biBjb2xvclswXSkuIEl0IGFsc28gYWxsb3dzCisgICAgICAgIHVzIHRvIHNpbXBsaWZ5IHRoZSBu
YW1pbmcgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBiZXR3ZWVuIGNvbG9yIAorICAgICAgICB0
eXBlcyBhcyBub3cgb25seSB0aGUgb3V0cHV0IHR5cGUgbmVlZHMgdG8gYmUgaW4gdGhlIGZ1bmN0
aW9uIG5hbWUuCisgCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgQWRkIG5ldyBo
ZWFkZXIsIENvbG9yVHlwZXMuaAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6Cisg
ICAgICAgIFN3aXRjaCBmcm9tIGhzbFRvU1JHQih7IC4uLiB9KSB0byB0b1NSR0JBKEhTTEFDb2xv
ciB7IC4uLiB9KQorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIHRvSFNMQSgpIGFuZCBIU0xBQ29sb3IgbWFraW5nIHRoZSBj
b2RlIGEgYml0IG1vcmUgcmVhZGFibGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGlnaHRlbmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aXNEYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5l
c3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIFJlbmFtZXMgdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpIHRvIHRvU1JHQkFMb3NzeSgpIHdoaWNoIG5vdyByZXR1cm5z
CisgICAgICAgIGEgU1JHQkFDb2xvci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yTWF0cml4Ojp0cmFu
c2Zvcm1Db2xvckNvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdHJh
bnNmb3JtQ29sb3JDb21wb25lbnRzLCBrZWVwaW5nIGp1c3QgdHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMKKyAgICAgICAgdG8gc2ltcGxpZnkgdGhlIGludGVyZmFjZS4gV2l0aCBsYXRlIGNvbnZl
cnNpb24gdG8gQ29sb3JDb21wb25lbnRzLCB0aGUKKyAgICAgICAgbGF0dGVyIGlzIG1vcmUgc3Ry
YWlnaHRmb3J3YXJkIHRvIHVzZSBpbiBtb3N0IGNhc2VzIGFueXdheS4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZ2JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvTGluZWFyU1JHQkEp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVh
ckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1hZWik6CisgICAgICAgIChXZWJDb3JlOjpsaWdodG5lc3MpOgorICAgICAgICAo
V2ViQ29yZTo6bHVtaW5hbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRyYXN0UmF0aW8pOgor
ICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmdiVG9MaW5lYXJDb21wb25lbnRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclRvUkdCQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjp4eXpUb0xpbmVhclNSR0IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bGluZWFyU1JHQlRvWFlaKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhZWlRvTGlu
ZWFyUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGluZWFyUDNUb1hZWik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpwM1RvU1JHQik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzUkdCVG9QMyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzUkdCVG9IU0wpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aHNsVG9TUkdCKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICBSZW5hbWUgLyBy
ZXdvcmsgY29udmVyc2lvbiBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgdG8gb3BlcmF0ZSBvbiBleHBs
aWNpdCBDb2xvciAKKyAgICAgICAgdHlwZXMuIEluIGRvaW5nIHNvLCBzaW1wbGlmeSB0aGUgbmFt
ZXMgb2YgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNvIG9ubHkgbmFtZQorICAgICAgICB0aGUg
b3V0cHV0IHR5cGUuIEZvciBpbnN0YW5jZToKKworICAgICAgICAgICAgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CisgICAgICAg
ICAgICAKKyAgICAgICAgaXMgbm93IAorICAgICAgICAKKyAgICAgICAgICAgIFNSR0JBQ29sb3Ig
dG9TUkdCQShjb25zdCBEaXNwbGF5UDNDb2xvciYpOworICAgICAgICAKKyAgICAgICAgYXMgdGhl
IGlucHV0IHR5cGUgaXMgaW1wbGljaXQgaW4gdGhlIGNhbGwuIEEgbGl0dGxlIGR1cGxpY2F0aW9u
IHdhcyBuZWVkZWQgCisgICAgICAgIGZvciBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50L3JnYlRv
TGluZWFyQ29sb3JDb21wb25lbnQgKGFzIGl0IHdhcyB1c2VkIGZvcgorICAgICAgICBib3RoIHNS
R0IgYW5kIERpc3BsYXlQMyBsaW5lYXJpemF0aW9uKSwgYnV0IG1vc3RseSB0aGluZ3Mgc3RheSB0
aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5oOgorICAgICAgICBSZW5hbWVkIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSB0
byB0b1NSR0JBTG9zc3koKSBhbmQgaGF2ZSBpdAorICAgICAgICByZXR1cm4gYSBTUkdCQUNvbG9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JBQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjph
c1NSR0JGbG9hdENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBSZW5hbWUgYXNT
UkdCRmxvYXRDb21wb25lbnRzKCkgdG8gYXNTUkdCQUNvbG9yKCkgYW5kIGhhdmUgaXQgCisgICAg
ICAgIHJldHVybiBhIFNSR0JBQ29sb3IuIFJlcGxhY2UgbWFrZVNpbXBsZUNvbG9yIHRha2luZyBG
bG9hdENvbXBvbmVudHMKKyAgICAgICAgd2l0aCBvbmUgdGFraW5nIGEgU1JHQkFDb2xvciwgbWFr
aW5nIGl0IG11Y2ggY2xlYXJlciB0aGF0IHRoaXMKKyAgICAgICAgaXMgb25seSB2YWxpZCBmb3Ig
c1JHQi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAg
ICBSZXdvcmsgdG8gc3VwcG9ydCBzZXBlcmF0ZSB0eXBlcyBmb3IgU1JHQkNvbG9yIGFuZCBMaW5l
YXJTUkdCQUNvbG9ycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRy
YW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpp
bnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAg
ICAgICAgVXNlIFNSR0JBQ29sb3IgcmF0aGVyIHRoYW4gQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0
byBtYWtlIGl0IGNsZWFyCisgICAgICAgIHRoYXQgdGhlIGZpbHRlcnMgb25seSB3b3JrIG9uIHNS
R0IgY29sb3JzIHJpZ2h0IG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENv
bG9yU3RvcFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9w
ZXJhdG9yIEdka1JHQkEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
Om9wZXJhdG9yIEQyRDFfQ09MT1JfRiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IHRvU1JHQkFMb3NzeSgpIHJhdGhlciB0aGFuIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKS4KKwog
MjAyMC0wNi0xMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRmls
ZUlucHV0VHlwZSBzaG91bGQgdXNlIFdlYWtQdHIgZm9yIEZpbGVMaXN0Q3JlYXRvciBsYW1iZGFz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clR5cGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2Mjk0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjIwNiw2ICsyMjA2LDcgQEAKIAkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8q
IEpTVlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLzsgfTsKIAkJ
N0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVGMzAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBG
MkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBo
aWNzRWxlbWVudC5oICovOyB9OworCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
MjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAyRUI5NzMg
LyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTkzQkJCMUY1RTBFRUQwMDg4
RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMTkzQkI2MUY1RTBFQjkwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rp
b24uaCAqLzsgfTsKIAkJN0MxOTNCQkMxRjVFMEVFRDAwODhGM0U2IC8qIENhbnZhc0ZpbGxSdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JB
MTFGNUUwRUFCMDA4OEYzRTYgLyogQ2FudmFzRmlsbFJ1bGUuaCAqLzsgfTsKQEAgLTk4OTAsNiAr
OTg5MSw3IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdp
b25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVlRUUmVn
aW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBCMThDRkI1
RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwQ0VGMjgxRTRB
NTQyQzAwOERFQjgwIC8qIEpTRE9NQ29uc3RydWN0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMENFRjI5MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9y
V2l0aERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29u
c3RydWN0b3JXaXRoRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Mw
Q0VGMkExRTRBNTU2QzAwOERFQjgwIC8qIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDQ1LDYgKzI1NDQ3LDcgQEAK
IAkJCQkzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNoLmggKi8sCiAJCQkJN0NB
QzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8sCiAJCQkJOTM4MkRGNTcx
MEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKKwkJCQk3QzAyOUM2RDI0OTNDOEY4
MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovLAogCQkJCTBGRTZDNzZCMUZCRkI3QTYwMDI1QzA1
MyAvKiBDb2xvclV0aWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUz
IC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1QUVERjAwNkQ3MTA1IC8q
IENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0zMzExNyw2ICszMzEyMCw3IEBACiAJ
CQkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlv
blN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEy
MDYyIC8qIFNRTFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzAyOUM2RTI0OTNDOEY4MDAy
NjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NjMwODI0NUU1
OTAwMUU5QUJDIC8qIFNTTEtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5
OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NDAsNyArNjQwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQ
YXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9
KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKEhTTEE8ZmxvYXQ+IHsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JB
cnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02MTksMTMgKzYxOSwxMyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0eWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdGV4dENvbG9yID0gcmVuZGVyU3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRD
b2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gW2h1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0wodGV4dENvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGhzbGEgPSB0
b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBt
aWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tn
cm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjVmOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4ZjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJp
ZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBo
c2xhLmxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhh
ICo9IDAuMzhmOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGEpKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9y
LCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25D
b2xvciwgdW5kZXJsaW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2Mjk0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAog
ICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVy
biBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAg
ICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlmICh2ID09IDAuMGYp
CkBAIC0xMjMsNyArMTIzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBp
ZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOwogCiAg
ICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVy
ID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBD
b2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNl
LgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAu
NSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQyLDEzICsxNDIsMTMg
QEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9u
IHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAg
ICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7CiB9CiAKIGZsb2F0
IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9i
YWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFs
Z29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBvbmVudCgp
KS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3koKSk7CiB9CiAK
IENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdApAQCAtMjQyLDIx
ICsyNDIsMjEgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbAogewog
ICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiB7IGFzRXh0ZW5kZWQoKS5jb2xv
clNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCkgfTsKLSAgICByZXR1cm4geyBDb2xv
clNwYWNlOjpTUkdCLCBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygpIH07CisgICAg
cmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoYXNTaW1wbGUoKS5h
c1NSR0JBPGZsb2F0PigpKSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgpLnRvU1JHQkFM
b3NzeSgpKTsKICAgICByZXR1cm4gYXNTaW1wbGUoKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CitTUkdCQTxmbG9hdD4g
Q29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAg
cmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7CisgICAgICAgIHJldHVy
biBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNT
UkdCQTxmbG9hdD4oKTsKIH0KIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0
IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBj
b2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IgZGFya2VuZWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JNYXRyaXguaAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mLi4uKFRzKSA9
PSBSb3dzICogQ29sdW1ucyk7CiAgICAgfQogCi0gICAgY29uc3RleHByIHZvaWQgdHJhbnNmb3Jt
Q29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsKICAgICBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CiAKICAgICBjb25zdGV4cHIgZmxv
YXQgYXQoc2l6ZV90IHJvdywgc2l6ZV90IGNvbHVtbikgY29uc3QKQEAgLTEwMSwxMiArMTAwLDYg
QEAgaW5saW5lIENvbG9yTWF0cml4PDMsIDM+IGh1ZVJvdGF0ZUNvbG9yTQogfQogCiB0ZW1wbGF0
ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+Ci1jb25zdGV4cHIgdm9pZCBDb2xvck1hdHJp
eDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIGlucHV0VmVjdG9yKSBjb25zdAotewotICAgIGlucHV0VmVjdG9yID0gdHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoaW5wdXRWZWN0b3IpOwotfQotCi10ZW1wbGF0ZTxzaXplX3Qg
Q29sdW1ucywgc2l6ZV90IFJvd3M+CiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBD
b2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaW5wdXRWZWN0b3IpIGNvbnN0CiB7CiAgICAgc3Rh
dGljX2Fzc2VydChDb2xvckNvbXBvbmVudHM8ZmxvYXQ+OjpTaXplID49IFJvd3MpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU1JHQkEgeworICAgIFQgcmVkOworICAg
IFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhj
b25zdCBTUkdCQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVl
LCBjLmFscGhhIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgU1JHQkE8
VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsg
Y1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IExpbmVhclNSR0JBIHsKKyAgICBUIHJlZDsKKyAgICBUIGdyZWVuOworICAgIFQgYmx1ZTsK
KyAgICBUIGFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGluZWFyU1JHQkE8VD4mIGMp
Cit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIExpbmVhclNSR0JBPFQ+IGFzTGluZWFy
U1JHQkEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0s
IGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBE
aXNwbGF5UDMgeworICAgIFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQg
YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9u
ZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBEaXNwbGF5UDM8VD4mIGMpCit7CisgICAg
cmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIERpc3BsYXlQMzxUPiBhc0Rpc3BsYXlQMyhjb25zdCBD
b2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwg
Y1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IExpbmVhckRpc3BsYXlQ
MyB7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7CisgICAgVCBhbHBoYTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+
IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYykKK3sKKyAgICBy
ZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxh
eVAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBj
WzFdLCBjWzJdLCBjWzNdIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSFNM
QSB7CisgICAgVCBodWU7CisgICAgVCBzYXR1cmF0aW9uOworICAgIFQgbGlnaHRuZXNzOworICAg
IFQgYWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29t
cG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBIU0xBPFQ+JiBjKQoreworICAgIHJl
dHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29s
b3JDb21wb25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNb
M10gfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBYWVpBIHsKKyAgICBUIHg7
CisgICAgVCB5OworICAgIFQgejsKKyAgICBUIGFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29u
c3QgWFlaQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29u
c3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNb
Ml0sIGNbM10gfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBsaW5lYXJS
R0IgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NS
R0IpLgorLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBsaW5lYXJSR0IgLyBzdGFu
ZGFyZCBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAo
aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPCAwLjAwMzEzMDhmKQpAQCAtNDgs
MjcgKzQ4LDQ3IEBAIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKICAg
ICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpwb3coKGMgKyAwLjA1NWYpIC8gMS4wNTVmLCAy
LjRmKSwgMCwgMSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21w
b25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFJHQkNvbG9yKQorTGluZWFyU1JH
QkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAg
ICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yWzBd
KSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xvclsxXSksCi0gICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMl0pLAotICAgICAgICBSR0JD
b2xvclszXQorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCisg
ICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xvci5hbHBo
YQogICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyVG9SR0JDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGxpbmVhclJHQikKK1NSR0JBPGZsb2F0
PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJu
IHsKLSAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMF0pLAotICAg
ICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclJHQlsxXSksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzJdKSwKLSAgICAgICAgbGluZWFyUkdC
WzNdCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKKyAgICAg
ICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCisgICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4geHl6VG9MaW5lYXJTUkdC
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitMaW5lYXJEaXNw
bGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNv
bG9yKQoreworICAgIHJldHVybiB7CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQo
Y29sb3IucmVkKSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ncmVl
biksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAg
ICAgIGNvbG9yLmFscGhhCisgICAgfTsKK30KKworRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQ
Myhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gewor
ICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCisgICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xvci5hbHBoYQorICAgIH07
Cit9CisKK3N0YXRpYyBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBYWVpB
PGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
U1JHQgogICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFu
X1JHQl9YWVpfTWF0cml4Lmh0bWwKQEAgLTc3LDEwICs5NywxMCBAQCBzdGF0aWMgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiB4eXpUb0xpbmVhCiAgICAgICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4
ZiwgIDAuMDQxNTU2MGYsCiAgICAgICAgICAwLjA1NTY0MzRmLCAtMC4yMDQwMjU5ZiwgIDEuMDU3
MjI1MmYKICAgICB9OwotICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzTGluZWFyU1JH
QkEoeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBsaW5lYXJTUkdCVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9u
ZW50cykKK3N0YXRpYyBYWVpBPGZsb2F0PiB0b1hZWihjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
IGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAg
ICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFla
X01hdHJpeC5odG1sCkBAIC04OSw3MiArMTA5LDYzIEBAIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+IGxpbmVhclNSR0IKICAgICAgICAgMC4yMTI2NzI5ZiwgIDAuNzE1MTUyMmYsICAwLjA3
MjE3NTBmLAogICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKICAg
ICB9OwotICAgIHJldHVybiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0dXJuIGFzWFlaQShsaW5lYXJTUkdCVG9Y
WVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29s
b3IpKSk7CiB9CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IFhZWlRvTGluZWFyUDMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xv
ci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9M
aW5lYXJTUkdCTWF0cml4IHsKKyAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9M
aW5lYXJEaXNwbGF5UDNNYXRyaXggewogICAgICAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAu
OTMxMzgzNjE3OTE5MTIzOWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAogICAgICAgICAtMC44Mjk0
ODg5Njk1NjE1NzQ3ZiwgIDEuNzYyNjY0MDYwMzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZm
LAogICAgICAgICAgMC4wMzU4NDU4MzAyNDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAw
Ljk1Njg4NDUyNDAwNzY4NzJmCiAgICAgfTsKLSAgICByZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0
cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOworICAgIHJldHVy
biBhc0xpbmVhckRpc3BsYXlQMyh4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotc3RhdGlj
IENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyUDNUb1hZWihjb25zdCBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorc3RhdGljIFhZWkE8ZmxvYXQ+IHRvWFlaKGNvbnN0
IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQotICAgIGNvbnN0ZXhw
ciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJQM1RvWFlaTWF0cml4IHsKKyAgICBjb25zdGV4cHIg
Q29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9YWVpNYXRyaXggewogICAgICAgICAw
LjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2
M2YsCiAgICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2NTA2NGYsIDAu
MDc5Mjg2OTE0MDkzNzQ1ZiwKICAgICAgICAgMC4wZiwgICAgICAgICAgICAgICAgMC4wNDUxMTMz
ODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCiAgICAgfTsKLSAgICByZXR1cm4gbGluZWFy
UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsK
KyAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCi1Db2xvckNv
bXBvbmVudHM8ZmxvYXQ+IHAzVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHAz
KQorU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCiB7
Ci0gICAgYXV0byBsaW5lYXJQMyA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhwMyk7Ci0gICAgYXV0
byB4eXogPSBsaW5lYXJQM1RvWFlaKGxpbmVhclAzKTsKLSAgICBhdXRvIGxpbmVhclNSR0IgPSB4
eXpUb0xpbmVhclNSR0IoeHl6KTsKLSAgICByZXR1cm4gbGluZWFyVG9SR0JDb21wb25lbnRzKGxp
bmVhclNSR0IpOworICAgIHJldHVybiB0b1NSR0JBKHRvTGluZWFyU1JHQkEodG9YWVoodG9MaW5l
YXJEaXNwbGF5UDMoY29sb3IpKSkpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JU
b1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0IpCitEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBsaW5l
YXJTUkdCID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0IpOwotICAgIGF1dG8geHl6ID0gbGlu
ZWFyU1JHQlRvWFlaKGxpbmVhclNSR0IpOwotICAgIGF1dG8gbGluZWFyUDMgPSBYWVpUb0xpbmVh
clAzKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJQMyk7Cisg
ICAgcmV0dXJuIHRvRGlzcGxheVAzKHRvTGluZWFyRGlzcGxheVAzKHRvWFlaKHRvTGluZWFyU1JH
QkEoY29sb3IpKSkpOwogfQogCi1mbG9hdCBsaWdodG5lc3MoY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKQorZmxvYXQgbGlnaHRuZXNzKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQ29tcG9udGVudHM7
Ci0KKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKLQogICAgIHJldHVybiAwLjVmICogKG1heCArIG1p
bik7CiB9CiAKLWZsb2F0IGx1bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBz
UkdCQ29tcG9uZW50cykKK2Zsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2aWxlbnQgb2YgYGxpbmVhclNSR0JU
b1hZWihyZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNvbXBvbmVudHMpKVsxXWAKKyAgICAvLyBO
T1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGB0b1hZWih0b0xpbmVhclNSR0JBKGNvbG9y
KSkueWAKICAgICAvLyBGSU1YRTogSWYgd2UgY2FuIGdlbmVyYWxpemUgQ29sb3JNYXRyaXggYSBi
aXQgbW9yZSwgaXQgbWlnaHQgYmUgbmljZSB0byB3cml0ZSB0aGlzIGFzOgotICAgIC8vICAgICAg
YXV0byBsaW5lYXJTUkdCQ29tcG9uZW50cyA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCQ29t
cG9uZW50cyk7Ci0gICAgLy8gICAgICByZXR1cm4gbGluZWFyU1JHQkNvbXBvbmVudHMgKiBsaW5l
YXJTUkdCVG9YWVpNYXRyaXgucm93KDEpOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiVG9M
aW5lYXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKTsKKyAgICAvLyAgICAgIHJldHVybiB0b0xp
bmVhclNSR0JBKGNvbG9yKSAqIGxpbmVhclNSR0JUb1hZWk1hdHJpeC5yb3coMSk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKGNvbG9yKTsKICAgICByZXR1cm4gMC4yMTI2
ZiAqIHIgKyAwLjcxNTJmICogZyArIDAuMDcyMmYgKiBiOwogfQogCi1mbG9hdCBjb250cmFzdFJh
dGlvKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbXBvbmVudHNBLCBjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29u
c3QgU1JHQkE8ZmxvYXQ+JiBjb2xvckEsIGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3JCKQogewog
ICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgY29udHJhc3QgcmF0aW8uCiAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWYKLSAg
ICBmbG9hdCBsaWdodGVyTHVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbXBvbmVudHNBKTsKLSAgICBm
bG9hdCBkYXJrZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29tcG9uZW50c0IpOworICAgIGZsb2F0
IGxpZ2h0ZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29sb3JBKTsKKyAgICBmbG9hdCBkYXJrZXJM
dW1pbmFuY2UgPSBsdW1pbmFuY2UoY29sb3JCKTsKIAogICAgIGlmIChsaWdodGVyTHVtaW5hbmNl
IDwgZGFya2VyTHVtaW5hbmNlKQogICAgICAgICBzdGQ6OnN3YXAobGlnaHRlckx1bWluYW5jZSwg
ZGFya2VyTHVtaW5hbmNlKTsKQEAgLTE2MiwxMCArMTczLDEwIEBAIGZsb2F0IGNvbnRyYXN0UmF0
aW8oY29uc3QgQ29sb3JDb21wb25lbnQKICAgICByZXR1cm4gKGxpZ2h0ZXJMdW1pbmFuY2UgKyAw
LjA1KSAvIChkYXJrZXJMdW1pbmFuY2UgKyAwLjA1KTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBzUkdCVG9IU0woY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRl
bnRzKQorSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuCi0gICAg
YXV0byBbciwgZywgYiwgYWxwaGFdID0gc1JHQkNvbXBvbnRlbnRzOworICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGNvbG9yOwogCiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgo
eyByLCBnLCBiIH0pOwogICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKQEAgLTIyMSw5ICsy
MzIsOSBAQCBzdGF0aWMgZmxvYXQgY2FsY0h1ZShmbG9hdCB0ZW1wMSwgZmxvYXQgCiAvLyBFeHBs
YW5hdGlvbiBvZiB0aGlzIGFsZ29yaXRobSBjYW4gYmUgZm91bmQgaW4gdGhlIENTUyBDb2xvciA0
IE1vZHVsZQogLy8gc3BlY2lmaWNhdGlvbiBhdCBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nz
LWNvbG9yLTQvI2hzbC10by1yZ2Igd2l0aAogLy8gZnVydGhlciBleHBsYW5hdGlvbiBhdmFpbGFi
bGUgYXQgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UKLUNvbG9y
Q29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IGhzbENvbG9yKQorU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBoc2xD
b2xvcjsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29s
b3I7CiAKICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgogICAgIGlmICghc2F0dXJhdGlvbikg
ewpAQCAtMjQ3LDkgKzI1OCw5IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNv
bnN0IEMKICAgICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCitTUkdCQTxmbG9h
dD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvcjsKICAgICByZXR1cm4gewogICAgICAgICByICogYSwKICAgICAgICAgZyAqIGEsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDMxICsyNSwzNCBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRzOwotCiAvLyAwLTEgY29tcG9uZW50cywg
cmVzdWx0IGlzIGNsYW1wZWQuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0
KTsKIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7Ci1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CitMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
YXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOworCitMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFy
RGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK0Rpc3BsYXlQMzxmbG9hdD4gdG9E
aXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOworCitTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlz
cGxheVAzKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHAz
VG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKLUNvbG9yQ29tcG9uZW50czxm
bG9hdD4gc1JHQlRvUDMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworV0VCQ09SRV9F
WFBPUlQgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9F
WFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIAotV0VCQ09S
RV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9IU0woY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBo
c2xUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworZmxvYXQgbGlnaHRuZXNz
KGNvbnN0IFNSR0JBPGZsb2F0PiYpOworZmxvYXQgbHVtaW5hbmNlKGNvbnN0IFNSR0JBPGZsb2F0
PiYpOwogCi1mbG9hdCBsaWdodG5lc3MoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JH
QkNvbXBvbnRlbnRzKTsKLWZsb2F0IGx1bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JiBzUkdCQ29tcG9udGVudHMpOwotZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHNBLCBjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHNCKTsKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgU1JH
QkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKLUNvbG9yQ29tcG9uZW50czxmbG9h
dD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9u
dGVudHMpOworU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQg
ZikKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTgg
KzgwLDIzIEBAIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjppbnZlcnQKICAgICBy
ZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKDEuMGYgLSBjMSwgMS4wZiAtIGMyLCAxLjBmIC0g
YzMsIG92ZXJyaWRlQWxwaGEsIGNvbG9yU3BhY2UoKSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxm
bG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CitTUkdC
QTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKG1fY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKLSAgICAgICAg
cmV0dXJuIG1fY29tcG9uZW50czsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAg
ICAgICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhtX2NvbXBvbmVudHMpOworICAgIGNh
c2UgQ29sb3JTcGFjZTo6U1JHQjogeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fY29t
cG9uZW50czsKKyAgICAgICAgcmV0dXJuIFNSR0JBPGZsb2F0PiB7IHIsIGcsIGIsIGEgfTsKKyAg
ICB9CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6IHsKKyAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiB0b1NSR0JBKExpbmVhclNS
R0JBPGZsb2F0PiB7IHIsIGcsIGIsIGEgfSk7CisgICAgfQogICAgIGNhc2UgQ29sb3JTcGFjZTo6
RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gcDNUb1NSR0IobV9jb21wb25lbnRzKTsKKyAgICAg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiB0b1NS
R0JBKERpc3BsYXlQMzxmbG9hdD4geyByLCBnLCBiLCBhIH0pOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiB7IDAsIDAsIDAsIDAg
fTsKIH0KIAogYm9vbCBFeHRlbmRlZENvbG9yOjppc1doaXRlKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlz
aW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29s
b3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkNvbG9y
VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUxLDcgKzUyLDcgQEAgcHVi
bGljOgogICAgIFJlZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7
CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNv
bnN0OwogCi0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCkgY29uc3Q7CisgICAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAgICAg
Ym9vbCBpc1doaXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlz
aW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTY1LDkgKzY2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8dWludDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
MHhGRiAtIGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gYmx1
ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50
KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9h
dGluZ19wb2ludF92PFQ+KQorICAgICAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50
RmxvYXQocmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBv
bmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVlbkNvbXBvbmVudCgpLCBibHVl
Q29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxz
dGQ6OnNpemVfdCBOPgpAQCAtMTIyLDkgKzEyNyw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3IoaW4KICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6
OmNsYW1wKHIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAw
LCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCBz
dGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGEsIDAsIDB4RkYpKSB9OwogfQogCi1pbmxp
bmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIHNSR0JDb21wb25lbnRzKQoraW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihj
b25zdCBTUkdCQTxmbG9hdD4mIHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JH
QkNvbXBvbmVudHM7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKICAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9p
ZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwog
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHN0YXRp
YyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGll
bnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKICAgICBjYWlyb19wYXR0
ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBh
ICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBv
aW50X3QgewogCiBzdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90
KiBncmFkaWVudCwgaW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2Jh
bEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JH
QkFMb3NzeSgpOwogICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEo
Z3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC0xMzUsOCAr
MTM1LDggQEAgc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybgogCiBzdGF0
aWMgR3JhZGllbnQ6OkNvbG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9yU3RvcChHcmFkaWVudDo6Q29s
b3JTdG9wIGZyb20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8pCiB7Ci0gICAgYXV0byBbcjEsIGcx
LCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgYXV0
byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwor
ICAgIGF1dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUxvc3N5KCk7Cisg
ICAgYXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5KCk7CiAKICAg
ICBmbG9hdCBvZmZzZXQgPSBmcm9tLm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkg
KiAwLjVmOwogICAgIGZsb2F0IHIgPSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw4ICs0
MDQsMTMgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRh
dGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKICAgICBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAgICAKLSAgICBhdXRvIGxpZ2h0Q29sb3IgPSAob3Bl
cmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgPyByZ2JUb0xpbmVh
ckNvbXBvbmVudHMobV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgOiBt
X2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgIHBhaW50aW5nRGF0
YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKGxpZ2h0Q29s
b3JbMF0sIGxpZ2h0Q29sb3JbMV0sIGxpZ2h0Q29sb3JbMl0pOworICAgIGlmIChvcGVyYXRpbmdD
b2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CisgICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9MaW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkp
OworICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9
IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgcGFpbnRp
bmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qociwg
ZywgYik7CisgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMs
IHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUs
MjcgKzg1LDIzIEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRyaXgKICAg
ICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6
OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWJv
b2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9y
KSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6IHsK
LSAgICAgICAgYXV0byBtYXRyaXggPSBncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0g
ICAgICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsK
KyAgICAgICAgY29sb3IgPSBhc1NSR0JBKGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KS50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKLSAgICAgICAgYXV0
byBtYXRyaXggPSBzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRy
YW5zZm9ybUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBjb2xvciA9
IGFzU1JHQkEoc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgYXV0byBtYXRyaXggPSBodWVS
b3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAgICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xv
ckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAgICAgICAgY29sb3IgPSBhc1NSR0JBKGh1
ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGNhc2UgU0FUVVJBVEU6IHsKLSAgICAgICAgYXV0byBtYXRyaXggPSBzYXR1cmF0aW9uQ29s
b3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25l
bnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1cmF0aW9u
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVm
YXVsdDoKQEAgLTE1MiwzMCArMTQ4LDM4IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2lj
Q29tcG9uZW50VHIKICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVz
cyksIG1fdHlwZSk7CiB9CiAKLWJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25l
bnRzKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3N0YXRpYyB2b2lkIGZvckVh
Y2hOb25BbHBoYUNvbXBvbmVudChTUkdCQTxmbG9hdD4mIGNvbG9yLCBGdW5jdG9yJiYgZikKK3sK
KyAgICBjb2xvci5yZWQgPSBmKGNvbG9yLnJlZCk7CisgICAgY29sb3IuZ3JlZW4gPSBmKGNvbG9y
LmdyZWVuKTsKKyAgICBjb2xvci5ibHVlID0gZihjb2xvci5ibHVlKTsKK30KKworYm9vbCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxm
bG9hdD4mIGNvbG9yKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBP
UEFDSVRZOgotICAgICAgICBjb2xvckNvbXBvbmVudHNbM10gKj0gbV9hbW91bnQ7CisgICAgICAg
IGNvbG9yLmFscGhhICo9IG1fYW1vdW50OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNl
IElOVkVSVDogewotICAgICAgICBmbG9hdCBvbmVNaW51c0Ftb3VudCA9IDEuZiAtIG1fYW1vdW50
OwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMF0gPSAxIC0gKG9uZU1pbnVzQW1vdW50ICsgY29s
b3JDb21wb25lbnRzWzBdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQpKTsKLSAgICAgICAg
Y29sb3JDb21wb25lbnRzWzFdID0gMSAtIChvbmVNaW51c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50
c1sxXSAqIChtX2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgIGNvbG9yQ29tcG9u
ZW50c1syXSA9IDEgLSAob25lTWludXNBbW91bnQgKyBjb2xvckNvbXBvbmVudHNbMl0gKiAobV9h
bW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBmbG9hdCBvbmVNaW51c0Ftb3VudCA9
IDEuMGYgLSBtX2Ftb3VudDsKKyAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9y
LCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICByZXR1cm4gMS4wZiAtIChvbmVN
aW51c0Ftb3VudCArIGNvbXBvbmVudCAqIChtX2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Cisg
ICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDT05UUkFT
VDogewogICAgICAgICBmbG9hdCBpbnRlcmNlcHQgPSAtKDAuNWYgKiBtX2Ftb3VudCkgKyAwLjVm
OwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMF0gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQg
KyBtX2Ftb3VudCAqIGNvbG9yQ29tcG9uZW50c1swXSwgMCwgMSk7Ci0gICAgICAgIGNvbG9yQ29t
cG9uZW50c1sxXSA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29sb3JD
b21wb25lbnRzWzFdLCAwLCAxKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzJdID0gY2xhbXBU
bzxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMl0sIDAsIDEp
OworICAgICAgICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFsmXShmbG9hdCBjb21w
b25lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0PihpbnRlcmNlcHQg
KyBtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwgMS4wZik7CisgICAgICAgIH0pOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBCUklHSFRORVNTOgotICAgICAgICBjb2xv
ckNvbXBvbmVudHNbMF0gPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBjb2xvckNvbXBvbmVu
dHNbMF0sIDApOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMV0gPSBzdGQ6Om1heDxmbG9hdD4o
bV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMV0sIDApOwotICAgICAgICBjb2xvckNvbXBvbmVu
dHNbMl0gPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMl0sIDAp
OworICAgICAgICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFsmXShmbG9hdCBjb21w
b25lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBj
b21wb25lbnQsIDAuMGYpOworICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjYsMTUgKzIzMCwx
NSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5lc3NGCiAgICAgcmV0dXJu
IEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7CiB9CiAKLWJvb2wgSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBJbnZlcnRMaWdodG5l
c3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29sb3IpIGNv
bnN0CiB7Ci0gICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JHQlRvSFNMKHNSR0JDb2xvckNvbXBv
bmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb2xvcik7CiAgICAgCiAgICAgLy8gUm90
YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbENvbXBvbmVudHNbMF0gPSBmbW9kKGhzbENvbXBv
bmVudHNbMF0gKyAwLjVmLCAxLjBmKTsKKyAgICBoc2xhLmh1ZSA9IHN0ZDo6Zm1vZChoc2xhLmh1
ZSArIDAuNWYsIDEuMGYpOwogICAgIAogICAgIC8vIENvbnZlcnQgYmFjayB0byBSR0IuCi0gICAg
c1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xDb21wb25lbnRzKTsKKyAgICBhdXRv
IGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNsYSk7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhl
IG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXgg
d2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVN
YXRyaXggewpAQCAtMjQyLDI4ICsyNDYsMjggQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OnRyYQogICAgICAgICAwLjAzMGYsIC0wLjc0MWYsIC0wLjA4OWYsIDAuMGYsIDEu
MGYsCiAgICAgICAgIDAuMDMwZiwgIDAuMDU5ZiwgLTAuODkwZiwgMC4wZiwgMS4wZgogICAgIH07
Ci0gICAgdG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoc1JHQkNvbG9y
Q29tcG9uZW50cyk7CisgICAgY29sb3IgPSBhc1NSR0JBKHRvRGFya01vZGVNYXRyaXgudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoaHVlUm90YXRlZFNSR0JBKSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JD
b2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CiB7Ci0g
ICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9uZW50czsKLQogICAgIC8vIEFw
cGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvTGlnaHRN
b2RlTWF0cml4IHsKICAgICAgICAgLTEuMzAwZiwgLTAuMDk3ZiwgIDAuMTQ3ZiwgMC4wZiwgMS4y
NWYsCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAogICAg
ICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0gICAg
dG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHJnYkNvbXBvbmVudHMp
OworICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGUgPSBhc1NSR0JBKHRvTGlnaHRNb2RlTWF0
cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkp
OwogCiAgICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JH
QlRvSFNMKHJnYkNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRU
b0xpZ2h0TW9kZSk7CisKICAgICAvLyBIdWUgcm90YXRlIGJ5IDE4MGRlZy4KLSAgICBoc2xDb21w
b25lbnRzWzBdID0gZm1vZChoc2xDb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7CisgICAgaHNs
YS5odWUgPSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKwogICAgIC8vIEFuZCBy
ZXR1cm4gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSBoc2xUb1NSR0IoaHNsQ29tcG9u
ZW50cyk7CisgICAgY29sb3IgPSB0b1NSR0JBKGhzbGEpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9yQ29t
cG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNvbG9yKFNSR0JBPGZs
b2F0PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGludmVyc2VU
cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKQEAgLTIy
OSw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9y
bUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IHRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZG91
YmxlIG1fYW1vdW50OwogfTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIHRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgZG91YmxlIG1fYW1vdW50OwogfTsKQEAgLTI5MSw4ICsyOTEs
OCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGludmVyc2VUcmFu
c2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3QgZmluYWw7CisgICAgYm9v
bCB0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlu
dmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBmaW5hbDsKIH07CiAKIGNs
YXNzIFdFQkNPUkVfRVhQT1JUIEJsdXJGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3Bl
cmF0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyOTQ0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE0ICsxMTEsMTQgQEAgYm9vbCBGaWx0
ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGlj
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb21wb25lbnRzID0g
Y29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNv
bG9yLnRvU1JHQkFMb3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJh
dGlvbnMpIHsKLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29t
cG9uZW50cykpCisgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNv
bG9yKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IG1h
a2VTaW1wbGVDb2xvcihzUkdCQUNvbXBvbmVudHMpOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKHNSR0JBQ29sb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzAsMTQgKzEzMCwx
NCBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNv
bG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdC
QUNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBz
UkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJh
dGlvbiA6IG1fb3BlcmF0aW9ucykgewotICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJzZVRy
YW5zZm9ybUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisgICAgICAgIGlmICghb3BlcmF0aW9uLT5p
bnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFDb21wb25lbnRz
KTsKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjKQogCiBDb2xvcjo6b3BlcmF0
b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsK
ICAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1
Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IEMKICAgICBSZWY8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcik7CiAgICAgZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
cHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3koKSk7CiAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBn
bExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUo
c3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGlu
ZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2JhKGNyLCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZp
bHRlclByb2dyYW0oVGV4dHVyZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToK
ICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5k
IHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxp
ZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOwogICAgICAgICAgICAgZ2xVbmlmb3Jt
NGYocHJvZ3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xV
bmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlh
dGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYo
cHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTY3Niw3ICs2NzYsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0o
b3B0aW9ucyk7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50
b1NSR0JBTG9zc3koKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigp
LCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAg
ICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNs
ZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9z
c3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOwogICAgIHJldHVy
biBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZF
Q1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsKICAg
ICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgVmVj
dG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsKICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9yIChhdXRvIHN0b3AgOiBtX3N0b3Bz
KSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFM
b3NzeSgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Ao
c3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNyArMzc5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnJvdAogCiBEMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpj
b2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKICAgICByZXR1cm4gRDJEMTo6
Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAy
NjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGlzYWJs
ZWRUZXh0Q29sb3IoY29uCiAgICAgLy8gSWYgdGhlcmUncyBub3QgdmVyeSBtdWNoIGNvbnRyYXN0
IGJldHdlZW4gdGhlIGRpc2FibGVkIGNvbG9yIGFuZCB0aGUgYmFja2dyb3VuZCBjb2xvciwKICAg
ICAvLyBqdXN0IGxlYXZlIHRoZSB0ZXh0IGNvbG9yIGFsb25lLiBXZSBkb24ndCB3YW50IHRvIGNo
YW5nZSBhIGdvb2QgY29udHJhc3QgY29sb3Igc2NoZW1lIHNvIHRoYXQgaXQgaGFzIHJlYWxseSBi
YWQgY29udHJhc3QuCiAgICAgLy8gSWYgdGhlIGNvbnRyYXN0IHdhcyBhbHJlYWR5IHBvb3IsIHRo
ZW4gaXQgZG9lc24ndCBkbyBhbnkgZ29vZCB0byBjaGFuZ2UgaXQgdG8gYSBkaWZmZXJlbnQgcG9v
ciBjb250cmFzdCBjb2xvciBzY2hlbWUuCi0gICAgaWYgKGNvbnRyYXN0UmF0aW8oZGlzYWJsZWRD
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQorICAgIGlmIChjb250cmFz
dFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NS
R0JBTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCiAgICAgICAgIHJldHVybiB0ZXh0
Q29sb3I7CiAKICAgICByZXR1cm4gZGlzYWJsZWRDb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsNyBAQCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWluc3RCYWNrZ3JvdW5k
CiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdpYmlsaXR5OiBh
IGNvbnRyYXN0IHJhdGlvIG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0Ci0gICAgcmV0
dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSwgYmFj
a2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgPiA0LjU7CisgICAgcmV0dXJu
IGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3Iu
dG9TUkdCQUxvc3N5KCkpID4gNC41OwogfQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JW
aXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9y
JiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYyOTY0KQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAy
MC0wNi0xMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5k
ZWQgQ29sb3I6IEV4cGVyaW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJv
bVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJl
Z2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCB0b1NSR0JBTG9zc3koKSByYXRoZXIgdGhhbiB0
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkuCisKIDIwMjAtMDYtMTIgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG91YmxlIHRhcCB0byB6b29tIG91dCBkb2Vz
bid0IHdvcmsgYWZ0ZXIgdXBncmFkaW5nIHRvIGlPUyAxMwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI2Mjk0NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNv
cmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgp
KTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b1NSR0JB
TG9zc3koKTsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAg
IGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3
R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjI5NDQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewog
ICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsK
ICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9y
Z2JhKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJ
KHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3IEBAIGJvb2wgV2ViRnJh
bWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdD
b2xvci50b1NSR0JBTG9zc3koKTsKICAgICAqcmVkID0gcjsKICAgICAqZ3JlZW4gPSBnOwogICAg
ICpibHVlID0gYjsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTEyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogRXhwZXJpbWVudCB3aXRoIHN0cm9u
Z2x5IHR5cGVkIENvbG9yQ29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZWQgbmFtZXMgKGUu
Zy4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIC0+IHRvU1JHQkFMb3NzeSgpKQorICAgICAgICBh
bmQgdXNlIG9mIGV4cGxpY2l0IHR5cGVzLgorCiAyMDIwLTA2LTEyICBKb25hdGhhbiBCZWRhcmQg
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGJ1aWxkaW5nIHRlc3QgcnVu
bmVycyBmb3Igd2F0Y2hPUyBhbmQgdHZPUwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNSArMzcsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5
KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBsaWdodG5lc3MpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBo
c2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Q29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRu
ZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJp
cHBlZENvbG9yKTsKIH0KIApAQCAtNTMsMTUgKzUzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9y
LnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgbGln
aHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91
bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02OSwxNSArNjksMTUgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwg
MCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JH
QlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29s
b3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRpb24pOwotICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdC
KHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC04NSwxNSArODUs
MTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JlZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7
CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNz
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwMSwxNSArMTAxLDE1IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MCwgMCwgMjU1KTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoMC42NjY2NjY2OSwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2F0dXJh
dGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMC42NjY2NjY2OSwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBoc2xh
Q29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhz
bGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9y
KG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CiB9CiAKQEAgLTExNywxNSArMTE3LDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0Rh
cmtHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwogCi0gICAgYXV0
byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNv
bG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41
MDE5NjA3ODQzMTM3MjU0OCwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41MDE5NjA3ODQzMTM3MjU0OCwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CiAgICAgCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBs
aWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFr
ZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9T
UkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9y
KTsKIH0KIApAQCAtMTMzLDE1ICsxMzMsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAgYXV0byBbaHVlLCBzYXR1
cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFM
b3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIx
NTY4NSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
IAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNs
VG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikp
OwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xNDks
MTUgKzE0OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiB7CiAgICAgQ29s
b3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9u
LCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgp
KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwg
bGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdC
KHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRl
c3RzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNywyNyAr
MjM3LDI1IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVzKQogCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICB7Ci0gICAgICAgIENvbG9yIHAz
Q29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQo
KSk7CisgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgRVhQRUNUX1RSVUUocDNDb2xv
ci5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIGF1dG8gc1JHQkNvbXBvbmVudHMgPSBwM0NvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIDEuMGYpKTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRz
LmNvbXBvbmVudHNbMV0sIDAuNDYyNTM3ODg1ZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgMC4xNDkx
NDc4MzhmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChz
UkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzNdLCAwLjc1ZikpOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgQ29sb3IgbGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4y
NSwgMC43NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShs
aW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgICAgICBhdXRvIHNSR0JDb21wb25lbnRzID0g
bGluZWFyQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1swXSwg
MS4wZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JH
QkNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgMC43MzUzNTY5MjdmKSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRz
WzJdLCAwLjUzNzA5ODcwNmYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbM10sIDAuNzVmKSk7Ci0gICAgfQor
ICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgRVhQRUNU
X1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7Cisg
ICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3JlZW4s
IDAuNDYyNTM3ODg1ZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTQ3ODM4ZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmFscGhhLCAwLjc1ZikpOwogfQogCitURVNU
KEV4dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQoreworICAgIENvbG9y
IGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENv
bG9yU3BhY2U6OkxpbmVhclJHQikgfTsKKyAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4
dGVuZGVkKCkpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3Nz
eSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9y
LnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChz
UkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsKKyAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5hbHBoYSwgMC43
NWYpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401784</attachid>
            <date>2020-06-12 14:41:52 -0700</date>
            <delta_ts>2020-06-12 14:45:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612144150.patch</filename>
            <type>text/plain</type>
            <size>69936</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3kgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisKKyAgICAgICAgVGhlIGdvYWwgaXMg
dG8gYWRkIHR5cGUgY2xhcml0eSAoeW91IGtub3cgd2hlbiB5b3UgYXJlIGRlYWxpbmcKKyAgICAg
ICAgd2l0aCBhbiBzUkdCIGNvbG9yIHZzLiBhIERpc3BsYXlQMyBjb2xvcikgYW5kIG1ha2UgZGVh
bGluZyB3aXRoCisgICAgICAgIHRoZSBjb2xvcnMgbmljZXIgKGNvbG9yLnJlZCByYXRoZXIgdGhh
biBjb2xvclswXSkuIEl0IGFsc28gYWxsb3dzCisgICAgICAgIHVzIHRvIHNpbXBsaWZ5IHRoZSBu
YW1pbmcgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBiZXR3ZWVuIGNvbG9yIAorICAgICAgICB0
eXBlcyBhcyBub3cgb25seSB0aGUgb3V0cHV0IHR5cGUgbmVlZHMgdG8gYmUgaW4gdGhlIGZ1bmN0
aW9uIG5hbWUuCisgCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgQWRkIG5ldyBo
ZWFkZXIsIENvbG9yVHlwZXMuaAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6Cisg
ICAgICAgIFN3aXRjaCBmcm9tIGhzbFRvU1JHQih7IC4uLiB9KSB0byB0b1NSR0JBKEhTTEFDb2xv
ciB7IC4uLiB9KQorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIHRvSFNMQSgpIGFuZCBIU0xBPGZsb2F0PiBtYWtpbmcgdGhl
IGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
bmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgUmVuYW1lcyB0
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gdG9TUkdCQUxvc3N5KCkgd2hpY2ggbm93IHJldHVy
bnMKKyAgICAgICAgYSBTUkdCQTxmbG9hdD4uCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvck1hdHJpeDo6
dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3Zl
IHRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cywga2VlcGluZyBqdXN0IHRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzCisgICAgICAgIHRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UuIFdpdGggbGF0ZSBj
b252ZXJzaW9uIHRvIENvbG9yQ29tcG9uZW50cywgdGhlCisgICAgICAgIGxhdHRlciBpcyBtb3Jl
IHN0cmFpZ2h0Zm9yd2FyZCB0byB1c2UgaW4gbW9zdCBjYXNlcyBhbnl3YXkuCisgICAgICAgIAor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhclNS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9M
aW5lYXJEaXNwbGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9EaXNwbGF5UDMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9YWVopOgorICAgICAgICAoV2ViQ29yZTo6bGlnaHRuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cmFzdFJhdGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSFNMQSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0
aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnJnYlRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJUb1JHQkNvbXBvbmVudHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6eHl6VG9MaW5lYXJTUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVhclNSR0JUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpYWVpU
b0xpbmVhclAzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclAzVG9YWVopOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cDNUb1NSR0IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6c1JHQlRvUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c1JHQlRvSFNM
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmhzbFRvU1JHQik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgUmVuYW1l
IC8gcmV3b3JrIGNvbnZlcnNpb24gYW5kIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24g
ZXhwbGljaXQgQ29sb3IgCisgICAgICAgIHR5cGVzLiBJbiBkb2luZyBzbywgc2ltcGxpZnkgdGhl
IG5hbWVzIG9mIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzbyBvbmx5IG5hbWUKKyAgICAgICAg
dGhlIG91dHB1dCB0eXBlLiBGb3IgaW5zdGFuY2U6CisKKyAgICAgICAgICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworICAg
ICAgICAgICAgCisgICAgICAgIGlzIG5vdyAKKyAgICAgICAgCisgICAgICAgICAgICBTUkdCQTxm
bG9hdD4gdG9TUkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CisgICAgICAgIAorICAgICAg
ICBhcyB0aGUgaW5wdXQgdHlwZSBpcyBpbXBsaWNpdCBpbiB0aGUgY2FsbC4gQSBsaXR0bGUgZHVw
bGljYXRpb24gd2FzIG5lZWRlZCAKKyAgICAgICAgZm9yIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnQvcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudCAoYXMgaXQgd2FzIHVzZWQgZm9yCisgICAgICAg
IGJvdGggc1JHQiBhbmQgRGlzcGxheVAzIGxpbmVhcml6YXRpb24pLCBidXQgbW9zdGx5IHRoaW5n
cyBzdGF5IHRoZSBzYW1lLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JH
QkFMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JB
Q29tcG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpIHRvIHRvU1JHQkFMb3NzeSgpIGFuZCBoYXZlIGl0CisgICAgICAgIHJldHVybiBhIFNS
R0JBPGZsb2F0Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29s
b3I6OmFzU1JHQkZsb2F0Q29tcG9uZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbmFt
ZSBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSB0byBhc1NSR0JBPFQ+KCkgYW5kIGhhdmUgaXQgCisg
ICAgICAgIHJldHVybiBhIFNSR0JBPGZsb2F0Pi4gUmVwbGFjZSBtYWtlU2ltcGxlQ29sb3IgdGFr
aW5nIEZsb2F0Q29tcG9uZW50cworICAgICAgICB3aXRoIG9uZSB0YWtpbmcgYSBTUkdCQTxmbG9h
dD4sIG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlzCisgICAgICAgIGlzIG9ubHkgdmFs
aWQgZm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToK
KyAgICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUgdHlwZXMgZm9yIFNSR0I8ZmxvYXQ+
IGFuZCBMaW5lYXJTUkdCQTxmbG9hdD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBj
b25zdCk6CisgICAgICAgIFVzZSBTUkdCQTxmbG9hdD4gcmF0aGVyIHRoYW4gQ29sb3JDb21wb25l
bnRzPGZsb2F0PiB0byBtYWtlIGl0IGNsZWFyCisgICAgICAgIHRoYXQgdGhlIGZpbHRlcnMgb25s
eSB3b3JrIG9uIHNSR0IgY29sb3JzIHJpZ2h0IG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRU
ZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29s
b3JSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIFVw
ZGF0ZSB0byBjYWxsIHRvU1JHQkFMb3NzeSgpIHJhdGhlciB0aGFuIHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKS4KKwogMjAyMC0wNi0xMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRmlsZUlucHV0VHlwZSBzaG91bGQgdXNlIFdlYWtQdHIgZm9yIEZpbGVMaXN0Q3Jl
YXRvciBsYW1iZGFzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2Mjk0NCkKKysr
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNiAr
MTA4Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0
cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Mjk0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjIwNiw2ICsyMjA2LDcgQEAKIAkJN0FGOUIyMEQxOENGQjVG
NDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24u
aCAqLzsgfTsKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3Mzgx
RkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAv
KiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OworCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgy
MDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3
MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTkzQkJC
MUY1RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTkzQkI2MUY1RTBFQjkwMDg4RjNFNiAvKiBD
YW52YXNEaXJlY3Rpb24uaCAqLzsgfTsKIAkJN0MxOTNCQkMxRjVFMEVFRDAwODhGM0U2IC8qIENh
bnZhc0ZpbGxSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzE5M0JBMTFGNUUwRUFCMDA4OEYzRTYgLyogQ2FudmFzRmlsbFJ1bGUuaCAqLzsgfTsK
QEAgLTk4OTAsNiArOTg5MSw3IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYg
LyogSlNWVFRSZWdpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTVlRUUmVnaW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
RjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MwQ0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9NQ29uc3RydWN0b3JCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MwQ0VGMkExRTRBNTU2QzAwOERFQjgwIC8qIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDQ1LDYg
KzI1NDQ3LDcgQEAKIAkJCQkzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNoLmgg
Ki8sCiAJCQkJN0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8sCiAJ
CQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKKwkJCQk3QzAy
OUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovLAogCQkJCTBGRTZDNzZCMUZC
RkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFNkM3NkMxRkJG
QjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1QUVE
RjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0zMzExNyw2ICsz
MzEyMCw3IEBACiAJCQkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9u
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBT
UUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEw
Q0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzAyOUM2
RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5NjMwODI0NUU1OTAwMUU5QUJDIC8qIFNTTEtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZCOTk5OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNrQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3Qu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDAsNyArNjQwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
Q29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJh
eVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFscGhhKSB9KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKEhTTEE8
ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNp
b24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MTksMTMgKzYxOSwxMyBAQCBOU0FycmF5ICpEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0eWxl
KSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dENvbG9yID0gcmVuZGVyU3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHRDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0wodGV4dENv
bG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNv
bG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFu
ZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVk
LgotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjVm
OwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIg
PSAwLjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0
bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAg
ICBoc2xhLmFscGhhICo9IDAuMzhmOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRl
cmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGEpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb25Db2xvciwgdW5kZXJsaW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVu
ZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAg
ICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUxvc3N5KCk7CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlm
ICh2ID09IDAuMGYpCkBAIC0xMjMsNyArMTIzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAg
ICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFM
b3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTEzNCw3
ICsxMzQsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogYm9vbCBDb2xvcjo6aXNE
YXJrKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNp
bmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgZmxv
YXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBy
ZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQy
LDEzICsxNDIsMTMgQEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjps
aWdodG5lc3MoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMg
Zm9yIEhTTC4KLSAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7
CiB9CiAKIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBU
aGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1j
b2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYyku
eUNvbXBvbmVudCgpKS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9z
c3koKSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25z
dApAQCAtMjQyLDIxICsyNDIsMjEgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiB7IGFzRXh0
ZW5kZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCkgfTsKLSAgICBy
ZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50
cygpIH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMo
YXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpKSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRl
ZCgpLnRvU1JHQkFMb3NzeSgpKTsKICAgICByZXR1cm4gYXNTaW1wbGUoKTsKIH0KIAotQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CitT
UkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0
ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7Cisg
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7CisgICAgcmV0dXJuIGFz
U2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKTsKIH0KIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3Im
IGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVy
dCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0Owog
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkocmV2aXNpb24gMjYyOTQ0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mLi4uKFRzKSA9PSBSb3dzICogQ29sdW1ucyk7CiAgICAgfQogCi0gICAgY29uc3RleHByIHZv
aWQgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25z
dDsKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CiAKICAgICBj
b25zdGV4cHIgZmxvYXQgYXQoc2l6ZV90IHJvdywgc2l6ZV90IGNvbHVtbikgY29uc3QKQEAgLTEw
MSwxMiArMTAwLDYgQEAgaW5saW5lIENvbG9yTWF0cml4PDMsIDM+IGh1ZVJvdGF0ZUNvbG9yTQog
fQogCiB0ZW1wbGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+Ci1jb25zdGV4cHIgdm9p
ZCBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVjdG9yKSBjb25zdAotewotICAgIGlucHV0VmVj
dG9yID0gdHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoaW5wdXRWZWN0b3IpOwotfQotCi10ZW1w
bGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+CiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaW5wdXRWZWN0b3IpIGNvbnN0
CiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvckNvbXBvbmVudHM8ZmxvYXQ+OjpTaXplID49IFJv
d3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlw
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU1JHQkEgeworICAg
IFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9y
Q29tcG9uZW50cyhjb25zdCBTUkdCQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjLnJlZCwgYy5n
cmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25z
dGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7Cisg
ICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQo
U1JHQkE8VD4mIGNvbG9yLCBGdW5jdG9yJiYgZikKK3sKKyAgICBjb2xvci5yZWQgPSBmKGNvbG9y
LnJlZCk7CisgICAgY29sb3IuZ3JlZW4gPSBmKGNvbG9yLmdyZWVuKTsKKyAgICBjb2xvci5ibHVl
ID0gZihjb2xvci5ibHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBMaW5l
YXJTUkdCQSB7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7CisgICAgVCBh
bHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhclNSR0JBPFQ+JiBjKQoreworICAg
IHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBMaW5lYXJTUkdCQTxUPiBhc0xpbmVhclNSR0JBKGNv
bnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBj
WzJdLCBjWzNdIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRGlzcGxheVAz
IHsKKyAgICBUIHJlZDsKKyAgICBUIGdyZWVuOworICAgIFQgYmx1ZTsKKyAgICBUIGFscGhhOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4g
YXNDb2xvckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQoreworICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBMaW5lYXJEaXNwbGF5UDMgeworICAg
IFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9y
Q29tcG9uZW50cyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsg
Yy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY29uc3RleHByIExpbmVhckRpc3BsYXlQMzxUPiBhc0xpbmVhckRpc3BsYXlQMyhjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEhTTEEgeworICAg
IFQgaHVlOworICAgIFQgc2F0dXJhdGlvbjsKKyAgICBUIGxpZ2h0bmVzczsKKyAgICBUIGFscGhh
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBj
Lmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIEhTTEE8VD4gYXNIU0xBKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgWFlaQSB7CisgICAgVCB4OworICAgIFQg
eTsKKyAgICBUIHo7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
b25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8
VD4mIGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIFhZWkE8VD4gYXNYWVpBKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNd
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIGNvbnZl
cnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KKy8v
IFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIC8gc3RhbmRhcmQgRGlz
cGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKQEAgLTQ4LDI3ICs0OCw0
NyBAQCBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJu
IGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAs
IDEpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBSR0JDb2xvcikKK0xpbmVhclNSR0JBPGZsb2F0
PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJu
IHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xvclswXSksCi0gICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMV0pLAotICAgICAgICByZ2JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yWzJdKSwKLSAgICAgICAgUkdCQ29sb3JbM10K
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEKICAgICB9
OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBsaW5lYXJSR0IpCitTUkdCQTxmbG9hdD4gdG9TUkdC
QShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAg
ICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzBdKSwKLSAgICAgICAgbGlu
ZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMV0pLAotICAgICAgICBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGxpbmVhclJHQlsyXSksCi0gICAgICAgIGxpbmVhclJHQlszXQorICAg
ICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCisgICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9
CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHh5elRvTGluZWFyU1JHQihjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorTGluZWFyRGlzcGxheVAzPGZs
b2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sK
KyAgICByZXR1cm4geworICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLnJl
ZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xv
ci5hbHBoYQorICAgIH07Cit9CisKK0Rpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3Qg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEKKyAgICB9OworfQorCitz
dGF0aWMgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQTxmbG9hdD4m
IGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAg
ICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFla
X01hdHJpeC5odG1sCkBAIC03NywxMCArOTcsMTAgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxm
bG9hdD4geHl6VG9MaW5lYQogICAgICAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYsICAwLjA0
MTU1NjBmLAogICAgICAgICAgMC4wNTU2NDM0ZiwgLTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCiAg
ICAgfTsKLSAgICByZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc0xpbmVhclNSR0JBKHh5elRv
TGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFy
U1JHQlRvWFlaKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitz
dGF0aWMgWFlaQTxmbG9hdD4gdG9YWVooY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikK
IHsKICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCiAgICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXgu
aHRtbApAQCAtODksNzIgKzEwOSw2MyBAQCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBs
aW5lYXJTUkdCCiAgICAgICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwK
ICAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCiAgICAgfTsKLSAg
ICByZXR1cm4gbGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRvWFlaTWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwog
fQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgTGluZWFyRGlzcGxh
eVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7
CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVy
c2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyU1JH
Qk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlz
cGxheVAzTWF0cml4IHsKICAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYx
NzkxOTEyMzlmLCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKICAgICAgICAgLTAuODI5NDg4OTY5NTYx
NTc0N2YsICAxLjc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKICAgICAg
ICAgIDAuMDM1ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1
MjQwMDc2ODcyZgogICAgIH07Ci0gICAgcmV0dXJuIHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4gYXNMaW5l
YXJEaXNwbGF5UDMoeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLXN0YXRpYyBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IGxpbmVhclAzVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBYWVpBPGZsb2F0PiB0b1hZWihjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JN
YXRyaXg8MywgMz4gbGluZWFyUDNUb1hZWk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0
cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKICAgICAgICAgMC40ODY1NzA5
NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNmLAogICAg
ICAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4Njkx
NDA5Mzc0NWYsCiAgICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgxODU4OTAy
NmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgogICAgIH07Ci0gICAgcmV0dXJuIGxpbmVhclAzVG9YWVpN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0
dXJuIGFzWFlaQShsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBwMykKK1NSR0JB
PGZsb2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1
dG8gbGluZWFyUDMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMocDMpOwotICAgIGF1dG8geHl6ID0g
bGluZWFyUDNUb1hZWihsaW5lYXJQMyk7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0geHl6VG9MaW5l
YXJTUkdCKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJTUkdC
KTsKKyAgICByZXR1cm4gdG9TUkdCQSh0b0xpbmVhclNSR0JBKHRvWFlaKHRvTGluZWFyRGlzcGxh
eVAzKGNvbG9yKSkpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9QMyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCKQorRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3Bs
YXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gbGluZWFyU1JHQiA9
IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCKTsKLSAgICBhdXRvIHh5eiA9IGxpbmVhclNSR0JU
b1hZWihsaW5lYXJTUkdCKTsKLSAgICBhdXRvIGxpbmVhclAzID0gWFlaVG9MaW5lYXJQMyh4eXop
OwotICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyUDMpOworICAgIHJldHVy
biB0b0Rpc3BsYXlQMyh0b0xpbmVhckRpc3BsYXlQMyh0b1hZWih0b0xpbmVhclNSR0JBKGNvbG9y
KSkpKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IHNSR0JDb21wb250ZW50cykKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbnRlbnRzOwotCisgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKICAgICBhdXRvIFttaW4sIG1heF0gPSBzdGQ6Om1p
bm1heCh7IHIsIGcsIGIgfSk7Ci0KICAgICByZXR1cm4gMC41ZiAqIChtYXggKyBtaW4pOwogfQog
Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBv
bmVudHMpCitmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGBsaW5lYXJTUkdCVG9YWVoocmdi
VG9MaW5lYXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKSlbMV1gCisgICAgLy8gTk9URTogVGhp
cyBpcyB0aGUgZXF1aXZpbGVudCBvZiBgdG9YWVoodG9MaW5lYXJTUkdCQShjb2xvcikpLnlgCiAg
ICAgLy8gRklNWEU6IElmIHdlIGNhbiBnZW5lcmFsaXplIENvbG9yTWF0cml4IGEgYml0IG1vcmUs
IGl0IG1pZ2h0IGJlIG5pY2UgdG8gd3JpdGUgdGhpcyBhczoKLSAgICAvLyAgICAgIGF1dG8gbGlu
ZWFyU1JHQkNvbXBvbmVudHMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNvbXBvbmVudHMp
OwotICAgIC8vICAgICAgcmV0dXJuIGxpbmVhclNSR0JDb21wb25lbnRzICogbGluZWFyU1JHQlRv
WFlaTWF0cml4LnJvdygxKTsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYlRvTGluZWFyQ29t
cG9uZW50cyhzUkdCQ29tcG9uZW50cyk7CisgICAgLy8gICAgICByZXR1cm4gdG9MaW5lYXJTUkdC
QShjb2xvcikgKiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgucm93KDEpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9MaW5lYXJTUkdCQShjb2xvcik7CiAgICAgcmV0dXJuIDAuMjEyNmYgKiByICsg
MC43MTUyZiAqIGcgKyAwLjA3MjJmICogYjsKIH0KIAotZmxvYXQgY29udHJhc3RSYXRpbyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgY29tcG9uZW50c0IpCitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3JBLCBjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yQikKIHsKICAgICAvLyBV
c2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGNvbnRyYXN0IHJhdGlvLgogICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI2NvbnRyYXN0LXJhdGlvZGVmCi0gICAgZmxvYXQg
bGlnaHRlckx1bWluYW5jZSA9IGx1bWluYW5jZShjb21wb25lbnRzQSk7Ci0gICAgZmxvYXQgZGFy
a2VyTHVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbXBvbmVudHNCKTsKKyAgICBmbG9hdCBsaWdodGVy
THVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbG9yQSk7CisgICAgZmxvYXQgZGFya2VyTHVtaW5hbmNl
ID0gbHVtaW5hbmNlKGNvbG9yQik7CiAKICAgICBpZiAobGlnaHRlckx1bWluYW5jZSA8IGRhcmtl
ckx1bWluYW5jZSkKICAgICAgICAgc3RkOjpzd2FwKGxpZ2h0ZXJMdW1pbmFuY2UsIGRhcmtlckx1
bWluYW5jZSk7CkBAIC0xNjIsMTAgKzE3MywxMCBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0
IENvbG9yQ29tcG9uZW50CiAgICAgcmV0dXJuIChsaWdodGVyTHVtaW5hbmNlICsgMC4wNSkgLyAo
ZGFya2VyTHVtaW5hbmNlICsgMC4wNSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JH
QlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKK0hT
TEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLgotICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IHNSR0JDb21wb250ZW50czsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBo
YV0gPSBjb2xvcjsKIAogICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywg
YiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47CkBAIC0yMjEsOSArMjMyLDkgQEAg
c3RhdGljIGZsb2F0IGNhbGNIdWUoZmxvYXQgdGVtcDEsIGZsb2F0IAogLy8gRXhwbGFuYXRpb24g
b2YgdGhpcyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluIHRoZSBDU1MgQ29sb3IgNCBNb2R1bGUK
IC8vIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00
LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxhYmxlIGF0IGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlCi1Db2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBoc2xDb2xv
cikKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gaHNsQ29sb3I7Cisg
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOwogCiAg
ICAgLy8gQ29udmVydCBiYWNrIHRvIFJHQi4KICAgICBpZiAoIXNhdHVyYXRpb24pIHsKQEAgLTI0
Nyw5ICsyNTgsOSBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDCiAg
ICAgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQorU1JHQkE8ZmxvYXQ+IHByZW11
bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHNSR0JDb21wb25lbnRzOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CiAg
ICAgcmV0dXJuIHsKICAgICAgICAgciAqIGEsCiAgICAgICAgIGcgKiBhLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzMSArMjUsMzQgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKLQogLy8gMC0xIGNvbXBvbmVudHMsIHJlc3VsdCBp
cyBjbGFtcGVkLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7CiBmbG9h
dCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0PiByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYp
OwotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYpOworTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEo
Y29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mKTsKKworTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQ
Myhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAz
KGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKKworU1JHQkE8ZmxvYXQ+IHRvU1JHQkEo
Y29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhj
b25zdCBTUkdCQTxmbG9hdD4mKTsKIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNS
R0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIEhT
TEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNS
R0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLVdFQkNPUkVfRVhQT1JU
IENvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdC
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBT
UkdCQTxmbG9hdD4mKTsKK2Zsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAot
ZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250
ZW50cyk7Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JH
QkNvbXBvbnRlbnRzKTsKLWZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
c1JHQkNvbXBvbnRlbnRzQik7CitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IFNSR0JBPGZsb2F0
PiYsIGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11
bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsK
K1NSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBpbmxp
bmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE4ICs4MCwyMyBA
QCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4
dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVy
cmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IEV4
dGVuZGVkQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorU1JHQkE8ZmxvYXQ+
IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2Nv
bG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBt
X2NvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJl
dHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobV9jb21wb25lbnRzKTsKKyAgICBjYXNlIENvbG9y
U3BhY2U6OlNSR0I6IHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2NvbXBvbmVudHM7
CisgICAgICAgIHJldHVybiBTUkdCQTxmbG9hdD4geyByLCBnLCBiLCBhIH07CisgICAgfQorICAg
IGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOiB7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gbV9jb21wb25lbnRzOworICAgICAgICByZXR1cm4gdG9TUkdCQShMaW5lYXJTUkdCQTxmbG9h
dD4geyByLCBnLCBiLCBhIH0pOworICAgIH0KICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzoKLSAgICAgICAgcmV0dXJuIHAzVG9TUkdCKG1fY29tcG9uZW50cyk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gbV9jb21wb25lbnRzOworICAgICAgICByZXR1cm4gdG9TUkdCQShEaXNw
bGF5UDM8ZmxvYXQ+IHsgciwgZywgYiwgYSB9KTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiB9CiAK
IGJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNjI5
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9u
ZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoKICAg
ICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogICAgIFJl
ZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKIAot
ICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0
OworICAgIFNSR0JBPGZsb2F0PiB0b1NSR0JBTG9zc3koKSBjb25zdDsKIAogICAgIGJvb2wgaXNX
aGl0ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjI5
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02
NSw5ICs2NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBn
cmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21wb25l
bnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxm
bG9hdD4gYXNTUkdCRmxvYXRDb21wb25lbnRzKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNv
bXBvbmVudCgpKSB9OworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfZmxvYXRpbmdfcG9p
bnRfdjxUPikKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJl
ZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSks
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwgYmx1ZUNvbXBvbmVu
dCgpLCBhbHBoYUNvbXBvbmVudCgpIH07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c3RkOjpzaXpl
X3QgTj4KQEAgLTEyMiw5ICsxMjcsOSBAQCBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGluCiAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChy
LCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoZywgMCwgMHhGRikp
LCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4RkYpKSwgc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3RkOjpjbGFtcChhLCAwLCAweEZGKSkgfTsKIH0KIAotaW5saW5lIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdC
Q29tcG9uZW50cykKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JH
QkE8ZmxvYXQ+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25l
bnRzOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7CiAgICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBzcmNDCiAKIHZvaWQgc2V0U291
cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKICAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCB2b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQogCiBzdGF0aWMgdm9pZCBh
ZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIEdyYWRpZW50OjpDb2xv
clN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgY2Fpcm9fcGF0dGVybl9hZGRf
Y29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwgZywgYiwgYSAqIGdsb2Jh
bEFscGhhKTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsK
IAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGll
bnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3ko
KTsKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50
LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtMTM1LDggKzEzNSw4IEBA
IHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm4KIAogc3RhdGljIEdyYWRp
ZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBm
cm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQogewotICAgIGF1dG8gW3IxLCBnMSwgYjEsIGEx
XSA9IGZyb20uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgIGF1dG8gW3IyLCBn
MiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRv
IFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
W3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFMb3NzeSgpOwogCiAgICAgZmxvYXQg
b2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQpICogMC41ZjsK
ICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQsOCArNDA0LDEzIEBA
IGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgYXV0byBsaWdodENvbG9yID0gKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gcmdiVG9MaW5lYXJDb21wb25l
bnRzKG1fbGlnaHRpbmdDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpIDogbV9saWdodGlu
Z0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlh
bExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChsaWdodENvbG9yWzBdLCBs
aWdodENvbG9yWzFdLCBsaWdodENvbG9yWzJdKTsKKyAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFj
ZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBv
aW50M0QociwgZywgYik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwor
ICAgIH0KICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
CShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDI3ICs4NSwy
MyBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4CiAgICAgcmV0dXJu
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChm
cm9tQW1vdW50LCBtX2Ftb3VudCwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogfQogCi1ib29sIEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAg
IGF1dG8gbWF0cml4ID0gZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBt
YXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAg
IGNvbG9yID0gYXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGF1dG8gbWF0cml4
ID0gc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAgICAgIG1hdHJpeC50cmFuc2Zvcm1D
b2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAgICAgICAgY29sb3IgPSBhc1NSR0JB
KHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBIVUVfUk9UQVRFOiB7Ci0gICAgICAgIGF1dG8gbWF0cml4ID0gaHVlUm90YXRlQ29s
b3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25l
bnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAgIGNvbG9yID0gYXNTUkdCQShodWVSb3RhdGVD
b2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNv
bXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNl
IFNBVFVSQVRFOiB7Ci0gICAgICAgIGF1dG8gbWF0cml4ID0gc2F0dXJhdGlvbkNvbG9yTWF0cml4
KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhjb2xv
ckNvbXBvbmVudHMpOworICAgICAgICBjb2xvciA9IGFzU1JHQkEoc2F0dXJhdGlvbkNvbG9yTWF0
cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBA
IC0xNTIsMzAgKzE0OCwzMCBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbXBvbmVu
dFRyCiAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJvZ3Jlc3MpLCBtX3R5
cGUpOwogfQogCi1ib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRy
YW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykgY29u
c3QKK2Jvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3Jt
Q29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgT1BBQ0lUWToKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzNdICo9IG1fYW1v
dW50OworICAgICAgICBjb2xvci5hbHBoYSAqPSBtX2Ftb3VudDsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKLSAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAx
LmYgLSBtX2Ftb3VudDsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gMSAtIChvbmVNaW51
c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50c1swXSAqIChtX2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50
KSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9IDEgLSAob25lTWludXNBbW91bnQgKyBj
b2xvckNvbXBvbmVudHNbMV0gKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOwotICAgICAg
ICBjb2xvckNvbXBvbmVudHNbMl0gPSAxIC0gKG9uZU1pbnVzQW1vdW50ICsgY29sb3JDb21wb25l
bnRzWzJdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQpKTsKKyAgICAgICAgZmxvYXQgb25l
TWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7CisgICAgICAgIGZvckVhY2hOb25BbHBoYUNv
bXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAgICAgICAgICAgcmV0dXJu
IDEuMGYgLSAob25lTWludXNBbW91bnQgKyBjb21wb25lbnQgKiAobV9hbW91bnQgLSBvbmVNaW51
c0Ftb3VudCkpOworICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGNhc2UgQ09OVFJBU1Q6IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVmICogbV9h
bW91bnQpICsgMC41ZjsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gY2xhbXBUbzxmbG9h
dD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMF0sIDAsIDEpOwotICAg
ICAgICBjb2xvckNvbXBvbmVudHNbMV0gPSBjbGFtcFRvPGZsb2F0PihpbnRlcmNlcHQgKyBtX2Ft
b3VudCAqIGNvbG9yQ29tcG9uZW50c1sxXSwgMCwgMSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50
c1syXSA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29sb3JDb21wb25l
bnRzWzJdLCAwLCAxKTsKKyAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBb
Jl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjbGFtcDxmbG9h
dD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb21wb25lbnQsIDAuMGYsIDEuMGYpOworICAgICAg
ICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQlJJR0hUTkVTUzoK
LSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICog
Y29sb3JDb21wb25lbnRzWzBdLCAwKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzFdID0gc3Rk
OjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzFdLCAwKTsKLSAgICAgICAg
Y29sb3JDb21wb25lbnRzWzJdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21w
b25lbnRzWzJdLCAwKTsKKyAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBb
Jl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+
KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MjI2LDE1ICsyMjIsMTUgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRuZXNz
RgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwog
fQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Io
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wg
SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9h
dD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsQ29tcG9uZW50cyA9IHNSR0JUb0hTTChz
UkdCQ29sb3JDb21wb25lbnRzKTsKKyAgICBhdXRvIGhzbGEgPSB0b0hTTEEoY29sb3IpOwogICAg
IAogICAgIC8vIFJvdGF0ZSB0aGUgaHVlIDE4MGRlZy4KLSAgICBoc2xDb21wb25lbnRzWzBdID0g
Zm1vZChoc2xDb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7CisgICAgaHNsYS5odWUgPSBzdGQ6
OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKICAgICAKICAgICAvLyBDb252ZXJ0IGJhY2sg
dG8gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSBoc2xUb1NSR0IoaHNsQ29tcG9uZW50
cyk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkEgPSB0b1NSR0JBKGhzbGEpOwogICAgIAogICAg
IC8vIEFwcGx5IHRoZSBtYXRyaXguIFNlZSByZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBmb3IgaG93
IHRoaXMgbWF0cml4IHdhcyBkZXJpdmVkLgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1LCAz
PiB0b0RhcmtNb2RlTWF0cml4IHsKQEAgLTI0MiwyOCArMjM4LDI4IEBAIGJvb2wgSW52ZXJ0TGln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmEKICAgICAgICAgMC4wMzBmLCAtMC43NDFmLCAtMC4w
ODlmLCAwLjBmLCAxLjBmLAogICAgICAgICAwLjAzMGYsICAwLjA1OWYsIC0wLjg5MGYsIDAuMGYs
IDEuMGYKICAgICB9OwotICAgIHRvRGFya01vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25l
bnRzKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGNvbG9yID0gYXNTUkdCQSh0b0RhcmtNb2Rl
TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGh1ZVJv
dGF0ZWRTUkdCQSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbnZlcnRMaWdodG5l
c3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBJbnZlcnRMaWdodG5lc3NG
aWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9y
KSBjb25zdAogewotICAgIGF1dG8gcmdiQ29tcG9uZW50cyA9IHNSR0JDb2xvckNvbXBvbmVudHM7
Ci0KICAgICAvLyBBcHBseSB0aGUgbWF0cml4LgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1
LCAzPiB0b0xpZ2h0TW9kZU1hdHJpeCB7CiAgICAgICAgIC0xLjMwMGYsIC0wLjA5N2YsICAwLjE0
N2YsIDAuMGYsIDEuMjVmLAogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAgMC4xNDZmLCAwLjBm
LCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0ZiwgMC4wZiwgMS4yNWYK
ICAgICB9OwotICAgIHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhy
Z2JDb21wb25lbnRzKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlID0gYXNTUkdCQSh0
b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8gSFNMLgotICAgIGF1dG8gaHNsQ29t
cG9uZW50cyA9IHNSR0JUb0hTTChyZ2JDb21wb25lbnRzKTsKKyAgICBhdXRvIGhzbGEgPSB0b0hT
TEEoY29udmVydGVkVG9MaWdodE1vZGUpOworCiAgICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcu
Ci0gICAgaHNsQ29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29tcG9uZW50c1swXSArIDAuNWYsIDEu
MGYpOworICAgIGhzbGEuaHVlID0gc3RkOjpmbW9kKGhzbGEuaHVlICsgMC41ZiwgMS4wZik7CisK
ICAgICAvLyBBbmQgcmV0dXJuIFJHQi4KLSAgICBzUkdCQ29sb3JDb21wb25lbnRzID0gaHNsVG9T
UkdCKGhzbENvbXBvbmVudHMpOworICAgIGNvbG9yID0gdG9TUkdCQShoc2xhKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyNjI5NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1D
b2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9h
dD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1D
b2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JikgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIE9wZXJhdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogCkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAg
Ym9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIGRvdWJsZSBtX2Ftb3VudDsKIH07CkBAIC0yNjQsNyArMjY0LDcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdC
QTxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGRvdWJsZSBtX2Ftb3VudDsKIH07CkBA
IC0yOTEsOCArMjkxLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB0cmFu
c2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JikgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JikgY29uc3QgZmlu
YWw7CiB9OwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBCbHVyRmlsdGVyT3BlcmF0aW9uIDogcHVi
bGljIEZpbHRlck9wZXJhdGlvbiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxNCArMTExLDE0
IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29s
b3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JB
Q29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIHNS
R0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0
aW9uIDogbV9vcGVyYXRpb25zKSB7Ci0gICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1D
b2xvcihzUkdCQUNvbXBvbmVudHMpKQorICAgICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3Jt
Q29sb3Ioc1JHQkFDb2xvcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFDb21wb25lbnRzKTsKKyAgICBjb2xvciA9
IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTMwLDE0ICsxMzAsMTQgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3Jt
QwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8gc1JHQkFDb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogCiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKLSAgICAgICAgaWYgKCFvcGVyYXRp
b24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdCQUNvbXBvbmVudHMpKQorICAgICAgICBpZiAo
IW9wZXJhdGlvbi0+aW52ZXJzZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHNS
R0JBQ29tcG9uZW50cyk7CisgICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFDb2xvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKIAog
Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUxvc3N5KCk7CiAgICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25z
dCBDCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgp
LmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3Ip
OwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxv
c3N5KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywg
YiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bQogICAgIGNhaXJvX3QqIGNyID0g
Y2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAgICAgLy8gU2luY2Ugd2Ugd29uJ3Qgc3dhcCBSK0Ig
d2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBwYWludCB3aXRoIHRoZSBzd2FwcGVkIFIrQiBjb2xv
ci4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyB2
b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmUKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hh
ZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAg
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFMb3NzeSgpKTsKICAgICAgICAg
ICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAg
ICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNo
YWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAg
IGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC02
NzYsNyArNjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgog
ICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRT
aGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRp
cGxpZWQoY29sb3IudG9TUkdCQUxvc3N5KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNv
bG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdB
bGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKQEAgLTY4Niw3ICs2ODYsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBn
LCBiLCBhKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVj
dDJELmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEs
MTMgQEAgQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9y
IEQyRDFfQ09MT1JfRigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3ko
KTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3Bl
cmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUxvc3N5KCk7CiAgICAgcmV0dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJE
MVJlbgogICAgIFZlY3RvcjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7CiAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBFeHRlbmRlZENvbG9yLgogICAgIGZvciAoYXV0byBz
dG9wIDogbV9zdG9wcykgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5j
b2xvci50b1NSR0JBTG9zc3koKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6
R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYy
OTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QKIAogRDJEMV9DT0xPUl9GIEdyYXBo
aWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAg
cmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxw
aGEoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMSw3ICsxNDAxLDcgQEAgQ29sb3IgUmVuZGVy
VGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNvbgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IHZlcnkg
bXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBkaXNhYmxlZCBjb2xvciBhbmQgdGhlIGJhY2tncm91
bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2ZSB0aGUgdGV4dCBjb2xvciBhbG9uZS4gV2UgZG9u
J3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNvbnRyYXN0IGNvbG9yIHNjaGVtZSBzbyB0aGF0IGl0
IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0LgogICAgIC8vIElmIHRoZSBjb250cmFzdCB3YXMgYWxy
ZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3QgZG8gYW55IGdvb2QgdG8gY2hhbmdlIGl0IHRvIGEg
ZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29sb3Igc2NoZW1lLgotICAgIGlmIChjb250cmFzdFJh
dGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpLCBiYWNrZ3JvdW5kQ29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKKyAg
ICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxlZENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3Jv
dW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQogICAgICAg
ICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAgcmV0dXJuIGRpc2FibGVkQ29sb3I7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgYm9vbCB0ZXh0Q29sb3JJc0xlZ2libGVBZ2Fp
bnN0QmFja2dyb3VuZAogewogICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2Yg
bGVnaWJpbGl0eTogYSBjb250cmFzdCByYXRpbyBvZiA0LjU6MSBvciBncmVhdGVyLgogICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250
cmFzdAotICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpID4gNC41
OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSwgYmFj
a2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeSgpKSA+IDQuNTsKIH0KIAogc3RhdGljIENvbG9yIGFk
anVzdENvbG9yRm9yVmlzaWJpbGl0eU9uQmFja2dyb3VuZChjb25zdCBDb2xvciYgdGV4dENvbG9y
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2
Mjk2NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMjAtMDYtMTIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIEV4dGVuZGVkIENvbG9yOiBFeHBlcmltZW50IHdpdGggc3Ryb25nbHkgdHlwZWQgQ29s
b3JDb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTIzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtp
dENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmll
d0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVD
b250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50
QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgdG9TUkdCQUxvc3N5KCkg
cmF0aGVyIHRoYW4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpLgorCiAyMDIwLTA2LTEyICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIERvdWJsZSB0YXAgdG8g
em9vbSBvdXQgZG9lc24ndCB3b3JrIGFmdGVyIHVwZ3JhZGluZyB0byBpT1MgMTMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIHdlYmtpdENvbG9y
RmlsbEZyb21XZWJDb3JlQ29sb3IoY29uCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNv
bG9yLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3Jl
Q29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdy
ZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2
aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJl
Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAgIGlmIChjb2xvci5p
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBz
aG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0
ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0g
Y29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICAgICAgICAgIGF1dG8gW3Jl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYoY2Fpcm9fcGF0
dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw3ICs2NjAsNyBA
QCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvCiAgICAgaWYgKCFiZ0Nv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBbciwgZywg
YiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgKnJlZCA9IHI7CiAgICAgKmdy
ZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjI5NTgpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNi0xMiAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVyaW1l
bnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIGZvciBjaGFu
Z2VkIG5hbWVzIChlLmcuIHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSAtPiB0b1NSR0JBTG9zc3ko
KSkKKyAgICAgICAgYW5kIHVzZSBvZiBleHBsaWNpdCB0eXBlcy4KKwogMjAyMC0wNi0xMiAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCBidWls
ZGluZyB0ZXN0IHJ1bm5lcnMgZm9yIHdhdGNoT1MgYW5kIHR2T1MKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwogCi0gICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9y
LnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgbGln
aHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNv
bG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTUzLDE1ICs1MywxNSBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsK
IAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9I
U0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9
IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5o
dWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJv
dW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1Rf
RVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjksMTUgKzY5LDE1IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVD
b2xvcigyNTUsIDAsIDApOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3Ms
IGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAg
IGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzYXR1cmF0aW9u
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGhzbGFDb2xvci5saWdodG5l
c3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3Mp
OworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0
bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApA
QCAtODUsMTUgKzg1LDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENv
bG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIFtodWUs
IHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9T
UkdCQUxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGh1ZSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgw
LjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xv
ci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1
dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsg
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVY
UEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMDEsMTUgKzEwMSwx
NSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxp
Z2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwog
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDEsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGxpZ2h0bmVzcyk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29s
b3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9u
LCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwg
cm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMTcsMTUgKzExNywxNSBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9EYXJrR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3Jh
eTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdC
VG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xv
ciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgs
IGhzbGFDb2xvci5saWdodG5lc3MpOwogICAgIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xv
ciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxp
Z2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3Vu
ZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEzMywxNSArMTMzLDE1IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1
dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAu
NjI3NDUwOTgwMzkyMTU2ODUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjI3NDUwOTgwMzkyMTU2ODUsIGhzbGFDb2xvci5s
aWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdo
dG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNp
bXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9
KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdC
QShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
IH0KIApAQCAtMTQ5LDE1ICsxNDksMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5
KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gW2h1
ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNzUyOTQx
MTc2NDcwNTg4MjIsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuNzUyOTQxMTc2NDcwNTg4MjIsIGhzbGFDb2xvci5saWdodG5l
c3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3Mp
OworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0
bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzcsMjcgKzIzNywyNSBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFJldHVyblZhbHVlcykK
IAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7Ci0gICAgewotICAg
ICAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAu
NzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUocDNDb2xv
ci5pc0V4dGVuZGVkKCkpOworICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigx
LjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIEVYUEVD
VF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBhdXRvIHNSR0JDb21wb25l
bnRzID0gcDNDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzBd
LCAxLjBmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChz
UkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzFdLCAwLjQ2MjUzNzg4NWYpKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVu
dHNbMl0sIDAuMTQ5MTQ3ODM4ZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1szXSwgMC43NWYpKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKLSAgICAgICAg
RVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICAgICAgYXV0byBzUkdC
Q29tcG9uZW50cyA9IGxpbmVhckNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNv
bXBvbmVudHNbMF0sIDEuMGYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIDAuNzM1MzU2OTI3ZikpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVu
dHMuY29tcG9uZW50c1syXSwgMC41MzcwOTg3MDZmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzNdLCAwLjc1
ZikpOwotICAgIH0KKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgp
OworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJl
ZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
QUNvbG9yLmdyZWVuLCAwLjQ2MjUzNzg4NWYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKKyAgICBFWFBF
Q1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5hbHBoYSwgMC43NWYp
KTsKIH0KIAorVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikK
K3sKKyAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CisgICAgRVhQRUNUX1RSVUUobGlu
ZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xv
ci50b1NSR0JBTG9zc3koKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7CisgICAgRVhQRUNU
X1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3
MDZmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29s
b3IuYWxwaGEsIDAuNzVmKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401786</attachid>
            <date>2020-06-12 14:45:16 -0700</date>
            <delta_ts>2020-06-13 09:04:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200612144515.patch</filename>
            <type>text/plain</type>
            <size>69710</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAyMC0wNi0xMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5
cGVzIGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRp
c3BsYXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3kgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29u
dmVyc2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisKKyAgICAgICAgVGhlIGdvYWwgaXMg
dG8gYWRkIHR5cGUgY2xhcml0eSAoeW91IGtub3cgd2hlbiB5b3UgYXJlIGRlYWxpbmcKKyAgICAg
ICAgd2l0aCBhbiBzUkdCIGNvbG9yIHZzLiBhIERpc3BsYXlQMyBjb2xvcikgYW5kIG1ha2UgZGVh
bGluZyB3aXRoCisgICAgICAgIHRoZSBjb2xvcnMgbmljZXIgKGNvbG9yLnJlZCByYXRoZXIgdGhh
biBjb2xvclswXSkuIEl0IGFsc28gYWxsb3dzCisgICAgICAgIHVzIHRvIHNpbXBsaWZ5IHRoZSBu
YW1pbmcgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBiZXR3ZWVuIGNvbG9yIAorICAgICAgICB0
eXBlcyBhcyBub3cgb25seSB0aGUgb3V0cHV0IHR5cGUgbmVlZHMgdG8gYmUgaW4gdGhlIGZ1bmN0
aW9uIG5hbWUuCisgCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgQWRkIG5ldyBo
ZWFkZXIsIENvbG9yVHlwZXMuaAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6Cisg
ICAgICAgIFN3aXRjaCBmcm9tIGhzbFRvU1JHQih7IC4uLiB9KSB0byB0b1NSR0JBKEhTTEFDb2xv
ciB7IC4uLiB9KQorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgor
ICAgICAgICBVcGRhdGUgdG8gdXNlIHRvSFNMQSgpIGFuZCBIU0xBPGZsb2F0PiBtYWtpbmcgdGhl
IGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
bmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgUmVuYW1lcyB0
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gdG9TUkdCQUxvc3N5KCkgd2hpY2ggbm93IHJldHVy
bnMKKyAgICAgICAgYSBTUkdCQTxmbG9hdD4uCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvck1hdHJpeDo6
dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3Zl
IHRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cywga2VlcGluZyBqdXN0IHRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzCisgICAgICAgIHRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UuIFdpdGggbGF0ZSBj
b252ZXJzaW9uIHRvIENvbG9yQ29tcG9uZW50cywgdGhlCisgICAgICAgIGxhdHRlciBpcyBtb3Jl
IHN0cmFpZ2h0Zm9yd2FyZCB0byB1c2UgaW4gbW9zdCBjYXNlcyBhbnl3YXkuCisgICAgICAgIAor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhclNS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9M
aW5lYXJEaXNwbGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9EaXNwbGF5UDMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9YWVopOgorICAgICAgICAoV2ViQ29yZTo6bGlnaHRuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cmFzdFJhdGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSFNMQSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0
aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnJnYlRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJUb1JHQkNvbXBvbmVudHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6eHl6VG9MaW5lYXJTUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVhclNSR0JUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpYWVpU
b0xpbmVhclAzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclAzVG9YWVopOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cDNUb1NSR0IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6c1JHQlRvUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c1JHQlRvSFNM
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmhzbFRvU1JHQik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgUmVuYW1l
IC8gcmV3b3JrIGNvbnZlcnNpb24gYW5kIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24g
ZXhwbGljaXQgQ29sb3IgCisgICAgICAgIHR5cGVzLiBJbiBkb2luZyBzbywgc2ltcGxpZnkgdGhl
IG5hbWVzIG9mIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzbyBvbmx5IG5hbWUKKyAgICAgICAg
dGhlIG91dHB1dCB0eXBlLiBGb3IgaW5zdGFuY2U6CisKKyAgICAgICAgICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworICAg
ICAgICAgICAgCisgICAgICAgIGlzIG5vdyAKKyAgICAgICAgCisgICAgICAgICAgICBTUkdCQTxm
bG9hdD4gdG9TUkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CisgICAgICAgIAorICAgICAg
ICBhcyB0aGUgaW5wdXQgdHlwZSBpcyBpbXBsaWNpdCBpbiB0aGUgY2FsbC4gQSBsaXR0bGUgZHVw
bGljYXRpb24gd2FzIG5lZWRlZCAKKyAgICAgICAgZm9yIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnQvcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudCAoYXMgaXQgd2FzIHVzZWQgZm9yCisgICAgICAg
IGJvdGggc1JHQiBhbmQgRGlzcGxheVAzIGxpbmVhcml6YXRpb24pLCBidXQgbW9zdGx5IHRoaW5n
cyBzdGF5IHRoZSBzYW1lLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JH
QkFMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JB
Q29tcG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpIHRvIHRvU1JHQkFMb3NzeSgpIGFuZCBoYXZlIGl0CisgICAgICAgIHJldHVybiBhIFNS
R0JBPGZsb2F0Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29s
b3I6OmFzU1JHQkZsb2F0Q29tcG9uZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbmFt
ZSBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSB0byBhc1NSR0JBPFQ+KCkgYW5kIGhhdmUgaXQgCisg
ICAgICAgIHJldHVybiBhIFNSR0JBPGZsb2F0Pi4gUmVwbGFjZSBtYWtlU2ltcGxlQ29sb3IgdGFr
aW5nIEZsb2F0Q29tcG9uZW50cworICAgICAgICB3aXRoIG9uZSB0YWtpbmcgYSBTUkdCQTxmbG9h
dD4sIG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlzCisgICAgICAgIGlzIG9ubHkgdmFs
aWQgZm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToK
KyAgICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUgdHlwZXMgZm9yIFNSR0I8ZmxvYXQ+
IGFuZCBMaW5lYXJTUkdCQTxmbG9hdD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBj
b25zdCk6CisgICAgICAgIFVzZSBTUkdCQTxmbG9hdD4gcmF0aGVyIHRoYW4gQ29sb3JDb21wb25l
bnRzPGZsb2F0PiB0byBtYWtlIGl0IGNsZWFyCisgICAgICAgIHRoYXQgdGhlIGZpbHRlcnMgb25s
eSB3b3JrIG9uIHNSR0IgY29sb3JzIHJpZ2h0IG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRU
ZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29s
b3JSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIFVw
ZGF0ZSB0byBjYWxsIHRvU1JHQkFMb3NzeSgpIHJhdGhlciB0aGFuIHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKS4KKwogMjAyMC0wNi0xMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRmlsZUlucHV0VHlwZSBzaG91bGQgdXNlIFdlYWtQdHIgZm9yIEZpbGVMaXN0Q3Jl
YXRvciBsYW1iZGFzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2Mjk0NCkKKysr
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNiAr
MTA4Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0
cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
Mjk0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjIwNiw2ICsyMjA2LDcgQEAKIAkJN0FGOUIyMEQxOENGQjVG
NDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24u
aCAqLzsgfTsKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIx
OENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3Mzgx
RkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAv
KiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OworCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgy
MDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3
MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTkzQkJC
MUY1RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTkzQkI2MUY1RTBFQjkwMDg4RjNFNiAvKiBD
YW52YXNEaXJlY3Rpb24uaCAqLzsgfTsKIAkJN0MxOTNCQkMxRjVFMEVFRDAwODhGM0U2IC8qIENh
bnZhc0ZpbGxSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzE5M0JBMTFGNUUwRUFCMDA4OEYzRTYgLyogQ2FudmFzRmlsbFJ1bGUuaCAqLzsgfTsK
QEAgLTk4OTAsNiArOTg5MSw3IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYg
LyogSlNWVFRSZWdpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTVlRUUmVnaW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
RjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MwQ0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9NQ29uc3RydWN0b3JCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MwQ0VGMkExRTRBNTU2QzAwOERFQjgwIC8qIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJ1aWx0aW5D
b25zdHJ1Y3RvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDQ1LDYg
KzI1NDQ3LDcgQEAKIAkJCQkzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNoLmgg
Ki8sCiAJCQkJN0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8sCiAJ
CQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKKwkJCQk3QzAy
OUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovLAogCQkJCTBGRTZDNzZCMUZC
RkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFNkM3NkMxRkJG
QjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1QUVE
RjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0zMzExNyw2ICsz
MzEyMCw3IEBACiAJCQkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9u
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBT
UUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEw
Q0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzAyOUM2
RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5NjMwODI0NUU1OTAwMUU5QUJDIC8qIFNTTEtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZCOTk5OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNrQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3Qu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDAsNyArNjQwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
Q29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJh
eVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFscGhhKSB9KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKEhTTEE8
ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNp
b24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MTksMTMgKzYxOSwxMyBAQCBOU0FycmF5ICpEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0eWxl
KSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dENvbG9yID0gcmVuZGVyU3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHRDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0wodGV4dENv
bG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNv
bG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFu
ZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVk
LgotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjVm
OwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIg
PSAwLjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0
bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAg
ICBoc2xhLmFscGhhICo9IDAuMzhmOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRl
cmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGEpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb25Db2xvciwgdW5kZXJsaW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVu
ZWQoKSBjb25zdAogICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAg
ICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUxvc3N5KCk7CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlm
ICh2ID09IDAuMGYpCkBAIC0xMjMsNyArMTIzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAg
ICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFM
b3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTEzNCw3
ICsxMzQsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogYm9vbCBDb2xvcjo6aXNE
YXJrKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNp
bmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgZmxv
YXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBy
ZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQy
LDEzICsxNDIsMTMgQEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjps
aWdodG5lc3MoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMg
Zm9yIEhTTC4KLSAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7
CiB9CiAKIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBU
aGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1j
b2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYyku
eUNvbXBvbmVudCgpKS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9z
c3koKSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25z
dApAQCAtMjQyLDIxICsyNDIsMjEgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiB7IGFzRXh0
ZW5kZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCkgfTsKLSAgICBy
ZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50
cygpIH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMo
YXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpKSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRl
ZCgpLnRvU1JHQkFMb3NzeSgpKTsKICAgICByZXR1cm4gYXNTaW1wbGUoKTsKIH0KIAotQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CitT
UkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0
ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7Cisg
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7CisgICAgcmV0dXJuIGFz
U2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKTsKIH0KIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3Im
IGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVy
dCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0Owog
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkocmV2aXNpb24gMjYyOTQ0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mLi4uKFRzKSA9PSBSb3dzICogQ29sdW1ucyk7CiAgICAgfQogCi0gICAgY29uc3RleHByIHZv
aWQgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25z
dDsKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CiAKICAgICBj
b25zdGV4cHIgZmxvYXQgYXQoc2l6ZV90IHJvdywgc2l6ZV90IGNvbHVtbikgY29uc3QKQEAgLTEw
MSwxMiArMTAwLDYgQEAgaW5saW5lIENvbG9yTWF0cml4PDMsIDM+IGh1ZVJvdGF0ZUNvbG9yTQog
fQogCiB0ZW1wbGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+Ci1jb25zdGV4cHIgdm9p
ZCBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVjdG9yKSBjb25zdAotewotICAgIGlucHV0VmVj
dG9yID0gdHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoaW5wdXRWZWN0b3IpOwotfQotCi10ZW1w
bGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+CiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaW5wdXRWZWN0b3IpIGNvbnN0
CiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvckNvbXBvbmVudHM8ZmxvYXQ+OjpTaXplID49IFJv
d3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlw
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgU1JHQkEgeworICAg
IFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9y
Q29tcG9uZW50cyhjb25zdCBTUkdCQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjLnJlZCwgYy5n
cmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25z
dGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7Cisg
ICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQo
U1JHQkE8VD4mIGNvbG9yLCBGdW5jdG9yJiYgZikKK3sKKyAgICBjb2xvci5yZWQgPSBmKGNvbG9y
LnJlZCk7CisgICAgY29sb3IuZ3JlZW4gPSBmKGNvbG9yLmdyZWVuKTsKKyAgICBjb2xvci5ibHVl
ID0gZihjb2xvci5ibHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBMaW5l
YXJTUkdCQSB7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7CisgICAgVCBh
bHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhclNSR0JBPFQ+JiBjKQoreworICAg
IHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBMaW5lYXJTUkdCQTxUPiBhc0xpbmVhclNSR0JBKGNv
bnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBj
WzJdLCBjWzNdIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRGlzcGxheVAz
IHsKKyAgICBUIHJlZDsKKyAgICBUIGdyZWVuOworICAgIFQgYmx1ZTsKKyAgICBUIGFscGhhOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4g
YXNDb2xvckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQoreworICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBMaW5lYXJEaXNwbGF5UDMgeworICAg
IFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9y
Q29tcG9uZW50cyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsg
Yy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY29uc3RleHByIExpbmVhckRpc3BsYXlQMzxUPiBhc0xpbmVhckRpc3BsYXlQMyhjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEhTTEEgeworICAg
IFQgaHVlOworICAgIFQgc2F0dXJhdGlvbjsKKyAgICBUIGxpZ2h0bmVzczsKKyAgICBUIGFscGhh
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBj
Lmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIEhTTEE8VD4gYXNIU0xBKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgWFlaQSB7CisgICAgVCB4OworICAgIFQg
eTsKKyAgICBUIHo7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
b25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8
VD4mIGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIFhZWkE8VD4gYXNYWVpBKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNd
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIGNvbnZl
cnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KKy8v
IFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIC8gc3RhbmRhcmQgRGlz
cGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKQEAgLTQ4LDI3ICs0OCw0
NyBAQCBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJu
IGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAs
IDEpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBSR0JDb2xvcikKK0xpbmVhclNSR0JBPGZsb2F0
PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJu
IHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xvclswXSksCi0gICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMV0pLAotICAgICAgICByZ2JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yWzJdKSwKLSAgICAgICAgUkdCQ29sb3JbM10K
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEKICAgICB9
OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBsaW5lYXJSR0IpCitTUkdCQTxmbG9hdD4gdG9TUkdC
QShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAg
ICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzBdKSwKLSAgICAgICAgbGlu
ZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMV0pLAotICAgICAgICBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGxpbmVhclJHQlsyXSksCi0gICAgICAgIGxpbmVhclJHQlszXQorICAg
ICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCisgICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9
CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHh5elRvTGluZWFyU1JHQihjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorTGluZWFyRGlzcGxheVAzPGZs
b2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sK
KyAgICByZXR1cm4geworICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLnJl
ZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xv
ci5hbHBoYQorICAgIH07Cit9CisKK0Rpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3Qg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEKKyAgICB9OworfQorCitz
dGF0aWMgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQTxmbG9hdD4m
IGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAg
ICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFla
X01hdHJpeC5odG1sCkBAIC03NywxMCArOTcsMTAgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxm
bG9hdD4geHl6VG9MaW5lYQogICAgICAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYsICAwLjA0
MTU1NjBmLAogICAgICAgICAgMC4wNTU2NDM0ZiwgLTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCiAg
ICAgfTsKLSAgICByZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc0xpbmVhclNSR0JBKHh5elRv
TGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFy
U1JHQlRvWFlaKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitz
dGF0aWMgWFlaQTxmbG9hdD4gdG9YWVooY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikK
IHsKICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCiAgICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXgu
aHRtbApAQCAtODksNzIgKzEwOSw2MyBAQCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBs
aW5lYXJTUkdCCiAgICAgICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwK
ICAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCiAgICAgfTsKLSAg
ICByZXR1cm4gbGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRvWFlaTWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwog
fQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgTGluZWFyRGlzcGxh
eVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7
CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVy
c2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyU1JH
Qk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlz
cGxheVAzTWF0cml4IHsKICAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYx
NzkxOTEyMzlmLCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKICAgICAgICAgLTAuODI5NDg4OTY5NTYx
NTc0N2YsICAxLjc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKICAgICAg
ICAgIDAuMDM1ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1
MjQwMDc2ODcyZgogICAgIH07Ci0gICAgcmV0dXJuIHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4gYXNMaW5l
YXJEaXNwbGF5UDMoeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLXN0YXRpYyBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IGxpbmVhclAzVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBYWVpBPGZsb2F0PiB0b1hZWihjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JN
YXRyaXg8MywgMz4gbGluZWFyUDNUb1hZWk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0
cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKICAgICAgICAgMC40ODY1NzA5
NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNmLAogICAg
ICAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4Njkx
NDA5Mzc0NWYsCiAgICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgxODU4OTAy
NmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgogICAgIH07Ci0gICAgcmV0dXJuIGxpbmVhclAzVG9YWVpN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CisgICAgcmV0
dXJuIGFzWFlaQShsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBwMykKK1NSR0JB
PGZsb2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1
dG8gbGluZWFyUDMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMocDMpOwotICAgIGF1dG8geHl6ID0g
bGluZWFyUDNUb1hZWihsaW5lYXJQMyk7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0geHl6VG9MaW5l
YXJTUkdCKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJTUkdC
KTsKKyAgICByZXR1cm4gdG9TUkdCQSh0b0xpbmVhclNSR0JBKHRvWFlaKHRvTGluZWFyRGlzcGxh
eVAzKGNvbG9yKSkpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9QMyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCKQorRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3Bs
YXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gbGluZWFyU1JHQiA9
IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCKTsKLSAgICBhdXRvIHh5eiA9IGxpbmVhclNSR0JU
b1hZWihsaW5lYXJTUkdCKTsKLSAgICBhdXRvIGxpbmVhclAzID0gWFlaVG9MaW5lYXJQMyh4eXop
OwotICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyUDMpOworICAgIHJldHVy
biB0b0Rpc3BsYXlQMyh0b0xpbmVhckRpc3BsYXlQMyh0b1hZWih0b0xpbmVhclNSR0JBKGNvbG9y
KSkpKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IHNSR0JDb21wb250ZW50cykKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbnRlbnRzOwotCisgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKICAgICBhdXRvIFttaW4sIG1heF0gPSBzdGQ6Om1p
bm1heCh7IHIsIGcsIGIgfSk7Ci0KICAgICByZXR1cm4gMC41ZiAqIChtYXggKyBtaW4pOwogfQog
Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBv
bmVudHMpCitmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGBsaW5lYXJTUkdCVG9YWVoocmdi
VG9MaW5lYXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKSlbMV1gCisgICAgLy8gTk9URTogVGhp
cyBpcyB0aGUgZXF1aXZpbGVudCBvZiBgdG9YWVoodG9MaW5lYXJTUkdCQShjb2xvcikpLnlgCiAg
ICAgLy8gRklNWEU6IElmIHdlIGNhbiBnZW5lcmFsaXplIENvbG9yTWF0cml4IGEgYml0IG1vcmUs
IGl0IG1pZ2h0IGJlIG5pY2UgdG8gd3JpdGUgdGhpcyBhczoKLSAgICAvLyAgICAgIGF1dG8gbGlu
ZWFyU1JHQkNvbXBvbmVudHMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQkNvbXBvbmVudHMp
OwotICAgIC8vICAgICAgcmV0dXJuIGxpbmVhclNSR0JDb21wb25lbnRzICogbGluZWFyU1JHQlRv
WFlaTWF0cml4LnJvdygxKTsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYlRvTGluZWFyQ29t
cG9uZW50cyhzUkdCQ29tcG9uZW50cyk7CisgICAgLy8gICAgICByZXR1cm4gdG9MaW5lYXJTUkdC
QShjb2xvcikgKiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgucm93KDEpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9MaW5lYXJTUkdCQShjb2xvcik7CiAgICAgcmV0dXJuIDAuMjEyNmYgKiByICsg
MC43MTUyZiAqIGcgKyAwLjA3MjJmICogYjsKIH0KIAotZmxvYXQgY29udHJhc3RSYXRpbyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgY29tcG9uZW50c0IpCitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3JBLCBjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yQikKIHsKICAgICAvLyBV
c2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGNvbnRyYXN0IHJhdGlvLgogICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI2NvbnRyYXN0LXJhdGlvZGVmCi0gICAgZmxvYXQg
bGlnaHRlckx1bWluYW5jZSA9IGx1bWluYW5jZShjb21wb25lbnRzQSk7Ci0gICAgZmxvYXQgZGFy
a2VyTHVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbXBvbmVudHNCKTsKKyAgICBmbG9hdCBsaWdodGVy
THVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbG9yQSk7CisgICAgZmxvYXQgZGFya2VyTHVtaW5hbmNl
ID0gbHVtaW5hbmNlKGNvbG9yQik7CiAKICAgICBpZiAobGlnaHRlckx1bWluYW5jZSA8IGRhcmtl
ckx1bWluYW5jZSkKICAgICAgICAgc3RkOjpzd2FwKGxpZ2h0ZXJMdW1pbmFuY2UsIGRhcmtlckx1
bWluYW5jZSk7CkBAIC0xNjIsMTAgKzE3MywxMCBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0
IENvbG9yQ29tcG9uZW50CiAgICAgcmV0dXJuIChsaWdodGVyTHVtaW5hbmNlICsgMC4wNSkgLyAo
ZGFya2VyTHVtaW5hbmNlICsgMC4wNSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JH
QlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKK0hT
TEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLgotICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IHNSR0JDb21wb250ZW50czsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBo
YV0gPSBjb2xvcjsKIAogICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywg
YiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47CkBAIC0yMjEsOSArMjMyLDkgQEAg
c3RhdGljIGZsb2F0IGNhbGNIdWUoZmxvYXQgdGVtcDEsIGZsb2F0IAogLy8gRXhwbGFuYXRpb24g
b2YgdGhpcyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluIHRoZSBDU1MgQ29sb3IgNCBNb2R1bGUK
IC8vIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00
LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxhYmxlIGF0IGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlCi1Db2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBoc2xDb2xv
cikKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gaHNsQ29sb3I7Cisg
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOwogCiAg
ICAgLy8gQ29udmVydCBiYWNrIHRvIFJHQi4KICAgICBpZiAoIXNhdHVyYXRpb24pIHsKQEAgLTI0
Nyw5ICsyNTgsOSBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDCiAg
ICAgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQorU1JHQkE8ZmxvYXQ+IHByZW11
bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHNSR0JDb21wb25lbnRzOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CiAg
ICAgcmV0dXJuIHsKICAgICAgICAgciAqIGEsCiAgICAgICAgIGcgKiBhLApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzMSArMjUsMzQgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKLQogLy8gMC0xIGNvbXBvbmVudHMsIHJlc3VsdCBp
cyBjbGFtcGVkLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7CiBmbG9h
dCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0PiByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYp
OwotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYpOworTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEo
Y29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mKTsKKworTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQ
Myhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAz
KGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKKworU1JHQkE8ZmxvYXQ+IHRvU1JHQkEo
Y29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhj
b25zdCBTUkdCQTxmbG9hdD4mKTsKIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNS
R0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIEhT
TEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNS
R0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLVdFQkNPUkVfRVhQT1JU
IENvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdC
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBT
UkdCQTxmbG9hdD4mKTsKK2Zsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAot
ZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250
ZW50cyk7Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JH
QkNvbXBvbnRlbnRzKTsKLWZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
c1JHQkNvbXBvbnRlbnRzQik7CitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IFNSR0JBPGZsb2F0
PiYsIGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11
bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsK
K1NSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBpbmxp
bmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE4ICs4MCwxOCBA
QCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4
dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVy
cmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IEV4
dGVuZGVkQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorU1JHQkE8ZmxvYXQ+
IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2Nv
bG9yU3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBt
X2NvbXBvbmVudHM7CisgICAgICAgIHJldHVybiBhc1NSR0JBKG1fY29tcG9uZW50cyk7CiAgICAg
Y2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNv
bXBvbmVudHMobV9jb21wb25lbnRzKTsKKyAgICAgICAgcmV0dXJuIHRvU1JHQkEoYXNMaW5lYXJT
UkdCQShtX2NvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAg
ICAgICAgcmV0dXJuIHAzVG9TUkdCKG1fY29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiB0b1NS
R0JBKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKIH0K
IAogYm9vbCBFeHRlbmRlZENvbG9yOjppc1doaXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb21w
b25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkNvbG9yVHlwZXMu
aCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgog
ICAgIFJlZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAgICAg
UmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0Owog
Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29u
c3Q7CisgICAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAgICAgYm9vbCBp
c1doaXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUg
IkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTY1LDkgKzY2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAt
IGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gYmx1ZUNvbXBv
bmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50KCkpLCBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhh
Q29tcG9uZW50KCkpIH07CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9hdGluZ19w
b2ludF92PFQ+KQorICAgICAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQo
cmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgp
KSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVlbkNvbXBvbmVudCgpLCBibHVlQ29tcG9u
ZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgpAQCAtMTIyLDkgKzEyNyw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3IoaW4KICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1w
KHIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAweEZG
KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGEsIDAsIDB4RkYpKSB9OwogfQogCi1pbmxpbmUgU2lt
cGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNS
R0JDb21wb25lbnRzKQoraW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBT
UkdCQTxmbG9hdD4mIHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBv
bmVudHM7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKICAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lk
IGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNv
bG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHN0b3AuY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKICAgICBjYWlyb19wYXR0ZXJuX2Fk
ZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xv
YmFsQWxwaGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3Qg
ewogCiBzdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFk
aWVudCwgaW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhh
KQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3Nz
eSgpOwogICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGll
bnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC0xMzUsOCArMTM1LDgg
QEAgc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybgogCiBzdGF0aWMgR3Jh
ZGllbnQ6OkNvbG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9w
IGZyb20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8pCiB7Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwg
YTFdID0gZnJvbS5jb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgYXV0byBbcjIs
IGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1
dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0
byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5KCk7CiAKICAgICBmbG9h
dCBvZmZzZXQgPSBmcm9tLm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkgKiAwLjVm
OwogICAgIGZsb2F0IHIgPSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw4ICs0MDQsMTMg
QEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lID0gaGVpZ2h0IC0gMTsKICAgICAKLSAgICBhdXRvIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5n
Q29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgPyByZ2JUb0xpbmVhckNvbXBv
bmVudHMobV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgOiBtX2xpZ2h0
aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgIHBhaW50aW5nRGF0YS5pbml0
aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKGxpZ2h0Q29sb3JbMF0s
IGxpZ2h0Q29sb3JbMV0sIGxpZ2h0Q29sb3JbMl0pOworICAgIGlmIChvcGVyYXRpbmdDb2xvclNw
YWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CisgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9MaW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOworICAg
ICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0
UG9pbnQzRChyLCBnLCBiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgcGFpbnRpbmdEYXRh
LmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7
CisgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50
aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjcgKzg1
LDIzIEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRyaXgKICAgICByZXR1
cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5k
KGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWJvb2wgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBjb25zdAorYm9vbCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25z
dAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6IHsKLSAgICAg
ICAgYXV0byBtYXRyaXggPSBncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAgICAg
IG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAgICAg
ICAgY29sb3IgPSBhc1NSR0JBKGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKLSAgICAgICAgYXV0byBtYXRy
aXggPSBzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRyYW5zZm9y
bUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBjb2xvciA9IGFzU1JH
QkEoc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgYXV0byBtYXRyaXggPSBodWVSb3RhdGVD
b2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAgICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBv
bmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAgICAgICAgY29sb3IgPSBhc1NSR0JBKGh1ZVJvdGF0
ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNh
c2UgU0FUVVJBVEU6IHsKLSAgICAgICAgYXV0byBtYXRyaXggPSBzYXR1cmF0aW9uQ29sb3JNYXRy
aXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNv
bG9yQ29tcG9uZW50cyk7CisgICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1cmF0aW9uQ29sb3JN
YXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoK
QEAgLTE1MiwzMCArMTQ4LDMwIEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29tcG9u
ZW50VHIKICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1f
dHlwZSk7CiB9CiAKLWJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBj
b25zdAorYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBPUEFDSVRZOgotICAgICAgICBjb2xvckNvbXBvbmVudHNbM10gKj0gbV9h
bW91bnQ7CisgICAgICAgIGNvbG9yLmFscGhhICo9IG1fYW1vdW50OwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBjYXNlIElOVkVSVDogewotICAgICAgICBmbG9hdCBvbmVNaW51c0Ftb3VudCA9
IDEuZiAtIG1fYW1vdW50OwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMF0gPSAxIC0gKG9uZU1p
bnVzQW1vdW50ICsgY29sb3JDb21wb25lbnRzWzBdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91
bnQpKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzFdID0gMSAtIChvbmVNaW51c0Ftb3VudCAr
IGNvbG9yQ29tcG9uZW50c1sxXSAqIChtX2Ftb3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAg
ICAgIGNvbG9yQ29tcG9uZW50c1syXSA9IDEgLSAob25lTWludXNBbW91bnQgKyBjb2xvckNvbXBv
bmVudHNbMl0gKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICBmbG9hdCBv
bmVNaW51c0Ftb3VudCA9IDEuMGYgLSBtX2Ftb3VudDsKKyAgICAgICAgZm9yRWFjaE5vbkFscGhh
Q29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICByZXR1
cm4gMS4wZiAtIChvbmVNaW51c0Ftb3VudCArIGNvbXBvbmVudCAqIChtX2Ftb3VudCAtIG9uZU1p
bnVzQW1vdW50KSk7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBDT05UUkFTVDogewogICAgICAgICBmbG9hdCBpbnRlcmNlcHQgPSAtKDAuNWYgKiBt
X2Ftb3VudCkgKyAwLjVmOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMF0gPSBjbGFtcFRvPGZs
b2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbG9yQ29tcG9uZW50c1swXSwgMCwgMSk7Ci0g
ICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1f
YW1vdW50ICogY29sb3JDb21wb25lbnRzWzFdLCAwLCAxKTsKLSAgICAgICAgY29sb3JDb21wb25l
bnRzWzJdID0gY2xhbXBUbzxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb2xvckNvbXBv
bmVudHNbMl0sIDAsIDEpOworICAgICAgICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3Is
IFsmXShmbG9hdCBjb21wb25lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wPGZs
b2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwgMS4wZik7CisgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBCUklHSFRORVNT
OgotICAgICAgICBjb2xvckNvbXBvbmVudHNbMF0gPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQg
KiBjb2xvckNvbXBvbmVudHNbMF0sIDApOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMV0gPSBz
dGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBjb2xvckNvbXBvbmVudHNbMV0sIDApOwotICAgICAg
ICBjb2xvckNvbXBvbmVudHNbMl0gPSBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBjb2xvckNv
bXBvbmVudHNbMl0sIDApOworICAgICAgICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3Is
IFsmXShmbG9hdCBjb21wb25lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxmbG9h
dD4obV9hbW91bnQgKiBjb21wb25lbnQsIDAuMGYpOworICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yMjYsMTUgKzIyMiwxNSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5l
c3NGCiAgICAgcmV0dXJuIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7
CiB9CiAKLWJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xv
cihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAorYm9v
bCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZs
b2F0PiYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JHQlRvSFNM
KHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb2xvcik7CiAg
ICAgCiAgICAgLy8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbENvbXBvbmVudHNbMF0g
PSBmbW9kKGhzbENvbXBvbmVudHNbMF0gKyAwLjVmLCAxLjBmKTsKKyAgICBoc2xhLmh1ZSA9IHN0
ZDo6Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOwogICAgIAogICAgIC8vIENvbnZlcnQgYmFj
ayB0byBSR0IuCi0gICAgc1JHQkNvbG9yQ29tcG9uZW50cyA9IGhzbFRvU1JHQihoc2xDb21wb25l
bnRzKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNsYSk7CiAgICAgCiAg
ICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBo
b3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUs
IDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMjQyLDI4ICsyMzgsMjggQEAgYm9vbCBJbnZlcnRM
aWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYQogICAgICAgICAwLjAzMGYsIC0wLjc0MWYsIC0w
LjA4OWYsIDAuMGYsIDEuMGYsCiAgICAgICAgIDAuMDMwZiwgIDAuMDU5ZiwgLTAuODkwZiwgMC4w
ZiwgMS4wZgogICAgIH07Ci0gICAgdG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBv
bmVudHMoc1JHQkNvbG9yQ29tcG9uZW50cyk7CisgICAgY29sb3IgPSBhc1NSR0JBKHRvRGFya01v
ZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoaHVl
Um90YXRlZFNSR0JBKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludmVydExpZ2h0
bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIHNSR0JDb2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEludmVydExpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29s
b3IpIGNvbnN0CiB7Ci0gICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9uZW50
czsKLQogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4
PDUsIDM+IHRvTGlnaHRNb2RlTWF0cml4IHsKICAgICAgICAgLTEuMzAwZiwgLTAuMDk3ZiwgIDAu
MTQ3ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAu
MGYsIDEuMjVmLAogICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1
ZgogICAgIH07Ci0gICAgdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRz
KHJnYkNvbXBvbmVudHMpOworICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGUgPSBhc1NSR0JB
KHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogCiAgICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBoc2xD
b21wb25lbnRzID0gc1JHQlRvSFNMKHJnYkNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsYSA9IHRv
SFNMQShjb252ZXJ0ZWRUb0xpZ2h0TW9kZSk7CisKICAgICAvLyBIdWUgcm90YXRlIGJ5IDE4MGRl
Zy4KLSAgICBoc2xDb21wb25lbnRzWzBdID0gZm1vZChoc2xDb21wb25lbnRzWzBdICsgMC41Ziwg
MS4wZik7CisgICAgaHNsYS5odWUgPSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsK
KwogICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSBoc2xU
b1NSR0IoaHNsQ29tcG9uZW50cyk7CisgICAgY29sb3IgPSB0b1NSR0JBKGhzbGEpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI2Mjk0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIHRyYW5zZm9y
bUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZs
b2F0PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9y
bUNvbG9yKFNSR0JBPGZsb2F0PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGludmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAKQEAgLTIyOSw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAg
ICBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIHRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgZG91YmxlIG1fYW1vdW50OwogfTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9u
ZW50czxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHRyYW5zZm9ybUNvbG9yKFNS
R0JBPGZsb2F0PiYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZG91YmxlIG1fYW1vdW50OwogfTsK
QEAgLTI5MSw4ICsyOTEsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHRy
YW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIGludmVyc2VUcmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGludmVyc2VUcmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBm
aW5hbDsKIH07CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEJsdXJGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE0ICsxMTEs
MTQgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChj
b2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JH
QkFDb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8g
c1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVy
YXRpb24gOiBtX29wZXJhdGlvbnMpIHsKLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9y
bUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zv
cm1Db2xvcihzUkdCQUNvbG9yKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbXBvbmVudHMpOworICAgIGNvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29sb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMzAsMTQgKzEzMCwxNCBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zv
cm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byBzUkdCQUNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAKICAgICBm
b3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewotICAgICAgICBpZiAoIW9wZXJh
dGlvbi0+aW52ZXJzZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29tcG9uZW50cykpCisgICAgICAgIGlm
ICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
c1JHQkFDb21wb25lbnRzKTsKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbG9y
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjKQog
CiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0
b1NSR0JBTG9zc3koKTsKICAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNv
bnN0IEMKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRh
KCkuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xv
cik7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JB
TG9zc3koKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKICAgICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAgICAgY2Fpcm9fdCogY3Ig
PSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIr
QiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNv
bG9yLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGlj
IHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBz
aGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAg
ICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigp
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOwogICAgICAg
ICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwog
ICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAg
ICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAg
LTY3Niw3ICs2NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29u
CiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdl
dFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVs
dGlwbGllZChjb2xvci50b1NSR0JBTG9zc3koKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+
Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYgaXNCbGVuZGlu
Z0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNjg2LDcgKzY4Niw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgZ2xDbGVhckNvbG9yKHIs
IGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0
MSwxMyBAQCBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0
b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3Nz
eSgpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9CiAKIENvbG9yOjpv
cGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NS
R0JBTG9zc3koKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElE
MkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsKICAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9yIChhdXRv
IHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmFwcGVuZChEMkQx
OjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
NjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNyArMzc5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdAogCiBEMkQxX0NPTE9SX0YgR3Jh
cGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNv
bnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKICAg
ICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxB
bHBoYSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBDb2xvciBSZW5k
ZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IoY29uCiAgICAgLy8gSWYgdGhlcmUncyBub3QgdmVy
eSBtdWNoIGNvbnRyYXN0IGJldHdlZW4gdGhlIGRpc2FibGVkIGNvbG9yIGFuZCB0aGUgYmFja2dy
b3VuZCBjb2xvciwKICAgICAvLyBqdXN0IGxlYXZlIHRoZSB0ZXh0IGNvbG9yIGFsb25lLiBXZSBk
b24ndCB3YW50IHRvIGNoYW5nZSBhIGdvb2QgY29udHJhc3QgY29sb3Igc2NoZW1lIHNvIHRoYXQg
aXQgaGFzIHJlYWxseSBiYWQgY29udHJhc3QuCiAgICAgLy8gSWYgdGhlIGNvbnRyYXN0IHdhcyBh
bHJlYWR5IHBvb3IsIHRoZW4gaXQgZG9lc24ndCBkbyBhbnkgZ29vZCB0byBjaGFuZ2UgaXQgdG8g
YSBkaWZmZXJlbnQgcG9vciBjb250cmFzdCBjb2xvciBzY2hlbWUuCi0gICAgaWYgKGNvbnRyYXN0
UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQor
ICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tn
cm91bmRDb2xvci50b1NSR0JBTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCiAgICAg
ICAgIHJldHVybiB0ZXh0Q29sb3I7CiAKICAgICByZXR1cm4gZGlzYWJsZWRDb2xvcjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFn
YWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBv
ZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNv
bnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSkgPiA0
LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpLCBi
YWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpID4gNC41OwogfQogCiBzdGF0aWMgQ29sb3Ig
YWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNvbnN0IENvbG9yJiB0ZXh0Q29s
b3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjYyOTY0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAyMC0wNi0xMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVyaW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBD
b2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Vi
a2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9W
aWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0RG9jdW1l
bnRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCB0b1NSR0JBTG9zc3ko
KSByYXRoZXIgdGhhbiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkuCisKIDIwMjAtMDYtMTIgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG91YmxlIHRhcCB0
byB6b29tIG91dCBkb2Vzbid0IHdvcmsgYWZ0ZXIgdXBncmFkaW5nIHRvIGlPUyAxMwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJl
dmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgd2Via2l0Q29s
b3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3Jl
Q29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNv
cmVDb2xvci50b1NSR0JBTG9zc3koKTsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBjb2xvci0+
Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCShy
ZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIHZv
aWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYgKGNvbG9y
LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25h
cHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBh
dHRlcm4pIHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0g
PSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgICAgICAgICAgICAgYXV0byBb
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdFJlZihjYWlyb19w
YXR0ZXJuX2NyZWF0ZV9yZ2JhKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3
IEBAIGJvb2wgV2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAoIWJn
Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3koKTsKICAgICAqcmVkID0gcjsKICAgICAq
Z3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk1OCkKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTEyICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogRXhwZXJp
bWVudCB3aXRoIHN0cm9uZ2x5IHR5cGVkIENvbG9yQ29tcG9uZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzk2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgZm9yIGNo
YW5nZWQgbmFtZXMgKGUuZy4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIC0+IHRvU1JHQkFMb3Nz
eSgpKQorICAgICAgICBhbmQgdXNlIG9mIGV4cGxpY2l0IHR5cGVzLgorCiAyMDIwLTA2LTEyICBK
b25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGJ1
aWxkaW5nIHRlc3QgcnVubmVycyBmb3Igd2F0Y2hPUyBhbmQgdHZPUwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24g
MjYyOTQ0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNSArMzcsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfV2hpdGUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRv
IFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29s
b3IudG9TUkdCQUxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBs
aWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9B
VF9FUSgxLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNTMsMTUgKzUzLDE1IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNr
OwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JU
b0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
Lmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVD
VF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02OSwxNSArNjksMTUgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMCwgMCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwogCi0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRp
b24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29s
b3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0
bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVz
cyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxl
Q29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7
CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhz
bGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC04NSwxNSArODUsMTUgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JlZW4pCiB7CiAgICAg
Q29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsKIAotICAgIGF1dG8gW2h1
ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHVlKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAuNSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHNsYUNv
bG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0Io
eyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAg
RVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwMSwxNSArMTAx
LDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7
CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHVlKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMSwgc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgbGlnaHRuZXNz
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHNsYUNvbG9yLmh1ZSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMC41LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTExNywxNSArMTE3LDE1IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0RhcmtHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtH
cmF5OwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNS
R0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMC41MDE5NjA3ODQzMTM3MjU0OCwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41MDE5NjA3ODQzMTM3MjU0
OCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTMzLDE1ICsxMzMsMTUgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAg
YXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xv
ci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xB
KGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MC42Mjc0NTA5ODAzOTIxNTY4NSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0
aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxp
Z2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
U2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
IH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NS
R0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3Ip
OwogfQogCkBAIC0xNDksMTUgKzE0OSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9y
LnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC43NTI5
NDExNzY0NzA1ODgyMiwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNv
bG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC43NTI5NDExNzY0NzA1ODgyMiwgaHNsYUNvbG9yLmxpZ2h0
bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVz
cyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxl
Q29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7
CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhz
bGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRl
c3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNywyNyArMjM3LDI1IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVz
KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICB7Ci0g
ICAgICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwg
MC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShwM0Nv
bG9yLmlzRXh0ZW5kZWQoKSk7CisgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgRVhQ
RUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIGF1dG8gc1JHQkNvbXBv
bmVudHMgPSBwM0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNb
MF0sIDEuMGYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIDAuNDYyNTM3ODg1ZikpOwotICAgICAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9u
ZW50c1syXSwgMC4xNDkxNDc4MzhmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzNdLCAwLjc1ZikpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgbGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB9OwotICAgICAg
ICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgICAgICBhdXRvIHNS
R0JDb21wb25lbnRzID0gbGluZWFyQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAg
ICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMu
Y29tcG9uZW50c1swXSwgMS4wZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1sxXSwgMC43MzUzNTY5MjdmKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9u
ZW50cy5jb21wb25lbnRzWzJdLCAwLjUzNzA5ODcwNmYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbM10sIDAu
NzVmKSk7Ci0gICAgfQorICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3Iu
cmVkLCAxLjBmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNS
R0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTM3ODg1ZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJl
RXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTQ3ODM4ZikpOworICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmFscGhhLCAwLjc1
ZikpOwogfQogCitURVNUKEV4dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdC
KQoreworICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUs
IDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKKyAgICBFWFBFQ1RfVFJVRShs
aW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhckNv
bG9yLnRvU1JHQkFMb3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlF
cXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKKyAgICBFWFBF
Q1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5
ODcwNmYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFD
b2xvci5hbHBoYSwgMC43NWYpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401837</attachid>
            <date>2020-06-13 09:04:09 -0700</date>
            <delta_ts>2020-06-13 09:43:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212396-20200613090408.patch</filename>
            <type>text/plain</type>
            <size>70644</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAyMC0wNi0xMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVy
aW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZHMgc2ltcGxlIGV4cGxpY2l0IHR5cGVz
IGZvciBzUkdCQSwgTGluZWFyU1JHQkEsIERpc3BsYXlQMywgCisgICAgICAgIExpbmVhckRpc3Bs
YXlQMywgWFlaQSBhbmQgSFNMQSBjb2xvcnMuIENvbnZlcnNpb24gdG8vZnJvbQorICAgICAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IGlzIGVhc3kgYnV0IGV4cGxpY2l0IHRvIG1ha2UgY29udmVy
c2lvbnMKKyAgICAgICAgZWFzaWVyIHRvIHNwb3QuCisKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8g
YWRkIHR5cGUgY2xhcml0eSAoeW91IGtub3cgd2hlbiB5b3UgYXJlIGRlYWxpbmcKKyAgICAgICAg
d2l0aCBhbiBzUkdCIGNvbG9yIHZzLiBhIERpc3BsYXlQMyBjb2xvcikgYW5kIG1ha2UgZGVhbGlu
ZyB3aXRoCisgICAgICAgIHRoZSBjb2xvcnMgbmljZXIgKGNvbG9yLnJlZCByYXRoZXIgdGhhbiBj
b2xvclswXSkuIEl0IGFsc28gYWxsb3dzCisgICAgICAgIHVzIHRvIHNpbXBsaWZ5IHRoZSBuYW1p
bmcgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBiZXR3ZWVuIGNvbG9yIAorICAgICAgICB0eXBl
cyBhcyBub3cgb25seSB0aGUgb3V0cHV0IHR5cGUgbmVlZHMgdG8gYmUgaW4gdGhlIGZ1bmN0aW9u
IG5hbWUuCisgCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgQWRkIG5ldyBoZWFk
ZXIsIENvbG9yVHlwZXMuaAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgbmV3IGhlYWRlciwgQ29sb3JUeXBlcy5oCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6CisgICAg
ICAgIFN3aXRjaCBmcm9tIGhzbFRvU1JHQih7IC4uLiB9KSB0byB0b1NSR0JBKEhTTEFDb2xvciB7
IC4uLiB9KQorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAg
ICAgICBVcGRhdGUgdG8gdXNlIHRvSFNMQSgpIGFuZCBIU0xBPGZsb2F0PiBtYWtpbmcgdGhlIGNv
ZGUgYSBiaXQgbW9yZSByZWFkYWJsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc0RhcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVz
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgUmVuYW1lcyB0b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkgdG8gdG9TUkdCQUxvc3N5KCkgd2hpY2ggbm93IHJldHVybnMK
KyAgICAgICAgYSBTUkdCQTxmbG9hdD4uCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvck1hdHJpeDo6dHJh
bnNmb3JtQ29sb3JDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIHRy
YW5zZm9ybUNvbG9yQ29tcG9uZW50cywga2VlcGluZyBqdXN0IHRyYW5zZm9ybWVkQ29sb3JDb21w
b25lbnRzCisgICAgICAgIHRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UuIFdpdGggbGF0ZSBjb252
ZXJzaW9uIHRvIENvbG9yQ29tcG9uZW50cywgdGhlCisgICAgICAgIGxhdHRlciBpcyBtb3JlIHN0
cmFpZ2h0Zm9yd2FyZCB0byB1c2UgaW4gbW9zdCBjYXNlcyBhbnl3YXkuCisgICAgICAgIAorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhclNSR0JB
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5l
YXJEaXNwbGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9EaXNwbGF5UDMpOgorICAgICAgICAo
V2ViQ29yZTo6dG9YWVopOgorICAgICAgICAoV2ViQ29yZTo6bGlnaHRuZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6Omx1bWluYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cmFzdFJhdGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSFNMQSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBs
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnJnYlRvTGluZWFyQ29tcG9uZW50cyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJUb1JHQkNvbXBvbmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6eHl6VG9MaW5lYXJTUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmxpbmVhclNSR0JUb1hZWik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpYWVpUb0xp
bmVhclAzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhclAzVG9YWVopOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cDNUb1NSR0IpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c1JHQlRvUDMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c1JHQlRvSFNMKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmhzbFRvU1JHQik6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgUmVuYW1lIC8g
cmV3b3JrIGNvbnZlcnNpb24gYW5kIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gZXhw
bGljaXQgQ29sb3IgCisgICAgICAgIHR5cGVzLiBJbiBkb2luZyBzbywgc2ltcGxpZnkgdGhlIG5h
bWVzIG9mIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzbyBvbmx5IG5hbWUKKyAgICAgICAgdGhl
IG91dHB1dCB0eXBlLiBGb3IgaW5zdGFuY2U6CisKKyAgICAgICAgICAgIENvbG9yQ29tcG9uZW50
czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworICAgICAg
ICAgICAgCisgICAgICAgIGlzIG5vdyAKKyAgICAgICAgCisgICAgICAgICAgICBTUkdCQTxmbG9h
dD4gdG9TUkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CisgICAgICAgIAorICAgICAgICBh
cyB0aGUgaW5wdXQgdHlwZSBpcyBpbXBsaWNpdCBpbiB0aGUgY2FsbC4gQSBsaXR0bGUgZHVwbGlj
YXRpb24gd2FzIG5lZWRlZCAKKyAgICAgICAgZm9yIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQv
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudCAoYXMgaXQgd2FzIHVzZWQgZm9yCisgICAgICAgIGJv
dGggc1JHQiBhbmQgRGlzcGxheVAzIGxpbmVhcml6YXRpb24pLCBidXQgbW9zdGx5IHRoaW5ncyBz
dGF5IHRoZSBzYW1lLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBQ29t
cG9uZW50c0xvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIFJlbmFtZWQgdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIHRvIHRvU1JHQkFMb3NzeSgpIGFuZCBoYXZlIGl0CisgICAgICAgIHJldHVybiBhIFNSR0JB
PGZsb2F0Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6
OmFzU1JHQkZsb2F0Q29tcG9uZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbmFtZSBh
c1NSR0JGbG9hdENvbXBvbmVudHMoKSB0byBhc1NSR0JBPFQ+KCkgYW5kIGhhdmUgaXQgCisgICAg
ICAgIHJldHVybiBhIFNSR0JBPGZsb2F0Pi4gUmVwbGFjZSBtYWtlU2ltcGxlQ29sb3IgdGFraW5n
IEZsb2F0Q29tcG9uZW50cworICAgICAgICB3aXRoIG9uZSB0YWtpbmcgYSBTUkdCQTxmbG9hdD4s
IG1ha2luZyBpdCBtdWNoIGNsZWFyZXIgdGhhdCB0aGlzCisgICAgICAgIGlzIG9ubHkgdmFsaWQg
Zm9yIHNSR0IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAg
ICAgICAgUmV3b3JrIHRvIHN1cHBvcnQgc2VwZXJhdGUgdHlwZXMgZm9yIFNSR0I8ZmxvYXQ+IGFu
ZCBMaW5lYXJTUkdCQTxmbG9hdD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25z
dCk6CisgICAgICAgIFVzZSBTUkdCQTxmbG9hdD4gcmF0aGVyIHRoYW4gQ29sb3JDb21wb25lbnRz
PGZsb2F0PiB0byBtYWtlIGl0IGNsZWFyCisgICAgICAgIHRoYXQgdGhlIGZpbHRlcnMgb25seSB3
b3JrIG9uIHNSR0IgY29sb3JzIHJpZ2h0IG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0
Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6ZHJhd051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIHRvU1JHQkFMb3NzeSgpIHJhdGhlciB0aGFuIHRvU1JHQkFDb21wb25lbnRzTG9z
c3koKS4KKwogMjAyMC0wNi0xMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRmlsZUlucHV0VHlwZSBzaG91bGQgdXNlIFdlYWtQdHIgZm9yIEZpbGVMaXN0Q3JlYXRv
ciBsYW1iZGFzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNiArMTA4
Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2Mjk0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjIwNiw2ICsyMjA2LDcgQEAKIAkJN0FGOUIyMEQxOENGQjVGNDAw
QzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAq
LzsgfTsKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENG
QjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3MzgxRkE5
MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBK
U1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OworCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQg
LyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3Mjgz
MDAyRUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTkzQkJCMUY1
RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTkzQkI2MUY1RTBFQjkwMDg4RjNFNiAvKiBDYW52
YXNEaXJlY3Rpb24uaCAqLzsgfTsKIAkJN0MxOTNCQkMxRjVFMEVFRDAwODhGM0U2IC8qIENhbnZh
c0ZpbGxSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE5M0JBMTFGNUUwRUFCMDA4OEYzRTYgLyogQ2FudmFzRmlsbFJ1bGUuaCAqLzsgfTsKQEAg
LTk4OTAsNiArOTg5MSw3IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYgLyog
SlNWVFRSZWdpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTVlRUUmVnaW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlC
MjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Mw
Q0VGMjgxRTRBNTQyQzAwOERFQjgwIC8qIEpTRE9NQ29uc3RydWN0b3JCYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3JCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjI5MUU0QTU0RDMwMDhERUI4MCAvKiBKU0RPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MwQ0VGMkExRTRBNTU2QzAwOERFQjgwIC8qIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJ1aWx0aW5Db25z
dHJ1Y3RvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDQ1LDYgKzI1
NDQ3LDcgQEAKIAkJCQkzMTAzQjdERTFEQjAxNTU2MDA4QkI4OTAgLyogQ29sb3JIYXNoLmggKi8s
CiAJCQkJN0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8sCiAJCQkJ
OTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKKwkJCQk3QzAyOUM2
RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovLAogCQkJCTBGRTZDNzZCMUZCRkI3
QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFNkM3NkMxRkJGQjdB
NjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1QUVERjAw
NkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0zMzExNyw2ICszMzEy
MCw3IEBACiAJCQkJRkUzNkZEMTgxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxU
cmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1
NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzAyOUM2RTI0
OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
NjMwODI0NUU1OTAwMUU5QUJDIC8qIFNTTEtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZCOTk5OTExODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNrQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NDAsNyArNjQwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFNMUGFyYW1l
dGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gQ29s
b3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsx
XSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKSB9KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKEhTTEE8Zmxv
YXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MTksMTMgKzYxOSwxMyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0
aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0eWxlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dENvbG9yID0gcmVuZGVyU3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleHRDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
W2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0wodGV4dENvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNvbG9y
IHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBk
YXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjVmOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAw
LjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVz
cywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAgICBo
c2xhLmFscGhhICo9IDAuMzhmOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxp
bmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGEpKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb25Db2xvciwgdW5kZXJsaW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9u
IDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQo
KSBjb25zdAogICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAg
ICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5KCk7CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlmICh2
ID09IDAuMGYpCkBAIC0xMjMsNyArMTIzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29u
c3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICBy
ZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3Nz
eSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBt
dWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTEzNCw3ICsx
MzQsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogYm9vbCBDb2xvcjo6aXNEYXJr
KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcg
bHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgZmxvYXQg
bGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1
cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpAQCAtMTQyLDEz
ICsxNDIsMTMgQEAgYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdo
dG5lc3MoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBj
b252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9y
IEhTTC4KLSAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7CiB9
CiAKIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlz
IGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xv
cnNwYWNlIGFsZ29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNv
bXBvbmVudCgpKS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFDb21wb25l
bnRzTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3ko
KSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdApA
QCAtMjQyLDIxICsyNDIsMjEgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50
czxmbAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiB7IGFzRXh0ZW5k
ZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCkgfTsKLSAgICByZXR1
cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
IH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoYXNT
aW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpKSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCi0g
ICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRlZCgp
LnRvU1JHQkFMb3NzeSgpKTsKICAgICByZXR1cm4gYXNTaW1wbGUoKTsKIH0KIAotQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CitTUkdC
QTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCRmxvYXRDb21wb25lbnRzKCk7CisgICAg
ICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7CisgICAgcmV0dXJuIGFzU2lt
cGxlKCkuYXNTUkdCQTxmbG9hdD4oKTsKIH0KIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVydCBu
b24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
Li4uKFRzKSA9PSBSb3dzICogQ29sdW1ucyk7CiAgICAgfQogCi0gICAgY29uc3RleHByIHZvaWQg
dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsK
ICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CiAKICAgICBjb25z
dGV4cHIgZmxvYXQgYXQoc2l6ZV90IHJvdywgc2l6ZV90IGNvbHVtbikgY29uc3QKQEAgLTEwMSwx
MiArMTAwLDYgQEAgaW5saW5lIENvbG9yTWF0cml4PDMsIDM+IGh1ZVJvdGF0ZUNvbG9yTQogfQog
CiB0ZW1wbGF0ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+Ci1jb25zdGV4cHIgdm9pZCBD
b2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9y
Q29tcG9uZW50czxmbG9hdD4mIGlucHV0VmVjdG9yKSBjb25zdAotewotICAgIGlucHV0VmVjdG9y
ID0gdHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoaW5wdXRWZWN0b3IpOwotfQotCi10ZW1wbGF0
ZTxzaXplX3QgQ29sdW1ucywgc2l6ZV90IFJvd3M+CiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBDb2xvck1hdHJpeDxDb2x1bW5zLCBSb3dzPjo6dHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaW5wdXRWZWN0b3IpIGNvbnN0CiB7
CiAgICAgc3RhdGljX2Fzc2VydChDb2xvckNvbXBvbmVudHM8ZmxvYXQ+OjpTaXplID49IFJvd3Mp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSB7CisgICAgVCBy
ZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgU1JHQkE8VD4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4s
IGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
U1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0
dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChTUkdCQTxU
PiYgY29sb3IsIEZ1bmN0b3ImJiBmKQoreworICAgIGNvbG9yLnJlZCA9IGYoY29sb3IucmVkKTsK
KyAgICBjb2xvci5ncmVlbiA9IGYoY29sb3IuZ3JlZW4pOworICAgIGNvbG9yLmJsdWUgPSBmKGNv
bG9yLmJsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEg
eworICAgIFQgcmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhclNSR0JBPFQ+JiBjKQoreworICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIExpbmVhclNSR0JBPFQ+IGFzTGluZWFyU1JHQkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQMyB7CisgICAgVCBy
ZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdy
ZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIERpc3BsYXlQMzxUPiBhc0Rpc3BsYXlQMyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMp
Cit7CisgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxheVAzIHsKKyAgICBUIHJlZDsKKyAgICBU
IGdyZWVuOworICAgIFQgYmx1ZTsKKyAgICBUIGFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25z
dCBMaW5lYXJEaXNwbGF5UDM8VD4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4s
IGMuYmx1ZSwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
TGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxheVAzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIHsKKyAgICBUIGh1ZTsKKyAgICBUIHNh
dHVyYXRpb247CisgICAgVCBsaWdodG5lc3M7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVu
dHMoY29uc3QgSFNMQTxUPiYgYykKK3sKKyAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9u
LCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQoreworICAg
IHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IFhZWkEgeworICAgIFQgeDsKKyAgICBUIHk7CisgICAgVCB6OworICAgIFQg
YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8VD4mIGMpCit7CisgICAgcmV0dXJu
IHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQorewor
ICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMCArMjgsMTEgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkNvbG9yTWF0cml4LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdC
IGNvbnZlcnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdC
KS4KKy8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIC8gc3RhbmRh
cmQgRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudChmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKQEAgLTQ4LDI3
ICs0OSw0NyBAQCBmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAg
cmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40
ZiksIDAsIDEpOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBSR0JDb2xvcikKK0xpbmVhclNSR0JB
PGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAg
cmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChSR0JDb2xvclswXSks
Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3JbMV0pLAotICAgICAg
ICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yWzJdKSwKLSAgICAgICAgUkdCQ29s
b3JbM10KKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEK
ICAgICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBsaW5lYXJSR0IpCitTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7
Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCWzBdKSwKLSAgICAg
ICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChsaW5lYXJSR0JbMV0pLAotICAgICAgICBsaW5l
YXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclJHQlsyXSksCi0gICAgICAgIGxpbmVhclJHQlsz
XQorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCisgICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBjb2xvci5hbHBoYQogICAg
IH07CiB9CiAKLXN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHh5elRvTGluZWFyU1JHQihj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQorTGluZWFyRGlzcGxh
eVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4geworICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLnJlZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4p
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAg
ICBjb2xvci5hbHBoYQorICAgIH07Cit9CisKK0Rpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMo
Y29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAorICAgICAgICBsaW5l
YXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JD
b2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgY29sb3IuYWxwaGEKKyAgICB9Owor
fQorCitzdGF0aWMgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQTxm
bG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NS
R0IKICAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9S
R0JfWFlaX01hdHJpeC5odG1sCkBAIC03NywxMCArOTgsMTAgQEAgc3RhdGljIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4geHl6VG9MaW5lYQogICAgICAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYs
ICAwLjA0MTU1NjBmLAogICAgICAgICAgMC4wNTU2NDM0ZiwgLTAuMjA0MDI1OWYsICAxLjA1NzIy
NTJmCiAgICAgfTsKLSAgICByZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc0xpbmVhclNSR0JB
KHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bGluZWFyU1JHQlRvWFlaKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVu
dHMpCitzdGF0aWMgWFlaQTxmbG9hdD4gdG9YWVooY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCiAgICAg
Ly8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9N
YXRyaXguaHRtbApAQCAtODksNzIgKzExMCw2MyBAQCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBsaW5lYXJTUkdCCiAgICAgICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIx
NzUwZiwKICAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCiAgICAg
fTsKLSAgICByZXR1cm4gbGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21w
b25lbnRzKFhZWkNvbXBvbmVudHMpOworICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRvWFla
TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogfQogCi1zdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgTGluZWFy
RGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29s
b3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3It
Y29udmVyc2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGlu
ZWFyU1JHQk1hdHJpeCB7CisgICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGlu
ZWFyRGlzcGxheVAzTWF0cml4IHsKICAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkz
MTM4MzYxNzkxOTEyMzlmLCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKICAgICAgICAgLTAuODI5NDg4
OTY5NTYxNTc0N2YsICAxLjc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwK
ICAgICAgICAgIDAuMDM1ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45
NTY4ODQ1MjQwMDc2ODcyZgogICAgIH07Ci0gICAgcmV0dXJuIHh5elRvTGluZWFyU1JHQk1hdHJp
eC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKKyAgICByZXR1cm4g
YXNMaW5lYXJEaXNwbGF5UDMoeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLXN0YXRpYyBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclAzVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBYWVpBPGZsb2F0PiB0b1hZWihjb25zdCBM
aW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5j
c3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIg
Q29sb3JNYXRyaXg8MywgMz4gbGluZWFyUDNUb1hZWk1hdHJpeCB7CisgICAgY29uc3RleHByIENv
bG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKICAgICAgICAgMC40
ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNm
LAogICAgICAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3
OTI4NjkxNDA5Mzc0NWYsCiAgICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgx
ODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgogICAgIH07Ci0gICAgcmV0dXJuIGxpbmVhclAz
VG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7Cisg
ICAgcmV0dXJuIGFzWFlaQShsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENv
bG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBwMykK
K1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewot
ICAgIGF1dG8gbGluZWFyUDMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMocDMpOwotICAgIGF1dG8g
eHl6ID0gbGluZWFyUDNUb1hZWihsaW5lYXJQMyk7Ci0gICAgYXV0byBsaW5lYXJTUkdCID0geHl6
VG9MaW5lYXJTUkdCKHh5eik7Ci0gICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5l
YXJTUkdCKTsKKyAgICByZXR1cm4gdG9TUkdCQSh0b0xpbmVhclNSR0JBKHRvWFlaKHRvTGluZWFy
RGlzcGxheVAzKGNvbG9yKSkpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9Q
Myhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCKQorRGlzcGxheVAzPGZsb2F0PiB0
b0Rpc3BsYXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gbGluZWFy
U1JHQiA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCKTsKLSAgICBhdXRvIHh5eiA9IGxpbmVh
clNSR0JUb1hZWihsaW5lYXJTUkdCKTsKLSAgICBhdXRvIGxpbmVhclAzID0gWFlaVG9MaW5lYXJQ
Myh4eXopOwotICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyUDMpOworICAg
IHJldHVybiB0b0Rpc3BsYXlQMyh0b0xpbmVhckRpc3BsYXlQMyh0b1hZWih0b0xpbmVhclNSR0JB
KGNvbG9yKSkpKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mIHNSR0JDb21wb250ZW50cykKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbnRlbnRzOwot
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKICAgICBhdXRvIFttaW4sIG1heF0gPSBz
dGQ6Om1pbm1heCh7IHIsIGcsIGIgfSk7Ci0KICAgICByZXR1cm4gMC41ZiAqIChtYXggKyBtaW4p
OwogfQogCi1mbG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JH
QkNvbXBvbmVudHMpCitmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikK
IHsKLSAgICAvLyBOT1RFOiBUaGlzIGlzIHRoZSBlcXVpdmlsZW50IG9mIGBsaW5lYXJTUkdCVG9Y
WVoocmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKSlbMV1gCisgICAgLy8gTk9U
RTogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikp
LnkKICAgICAvLyBGSU1YRTogSWYgd2UgY2FuIGdlbmVyYWxpemUgQ29sb3JNYXRyaXggYSBiaXQg
bW9yZSwgaXQgbWlnaHQgYmUgbmljZSB0byB3cml0ZSB0aGlzIGFzOgotICAgIC8vICAgICAgYXV0
byBsaW5lYXJTUkdCQ29tcG9uZW50cyA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhzUkdCQ29tcG9u
ZW50cyk7Ci0gICAgLy8gICAgICByZXR1cm4gbGluZWFyU1JHQkNvbXBvbmVudHMgKiBsaW5lYXJT
UkdCVG9YWVpNYXRyaXgucm93KDEpOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiVG9MaW5l
YXJDb21wb25lbnRzKHNSR0JDb21wb25lbnRzKTsKKyAgICAvLyAgICAgIHJldHVybiB0b0xpbmVh
clNSR0JBKGNvbG9yKSAqIGxpbmVhclNSR0JUb1hZWk1hdHJpeC5yb3coMSk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKGNvbG9yKTsKICAgICByZXR1cm4gMC4yMTI2ZiAq
IHIgKyAwLjcxNTJmICogZyArIDAuMDcyMmYgKiBiOwogfQogCi1mbG9hdCBjb250cmFzdFJhdGlv
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbXBvbmVudHNBLCBjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3Qg
U1JHQkE8ZmxvYXQ+JiBjb2xvckEsIGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3JCKQogewogICAg
IC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgY29udHJhc3QgcmF0aW8uCiAgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWYKLSAgICBm
bG9hdCBsaWdodGVyTHVtaW5hbmNlID0gbHVtaW5hbmNlKGNvbXBvbmVudHNBKTsKLSAgICBmbG9h
dCBkYXJrZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29tcG9uZW50c0IpOworICAgIGZsb2F0IGxp
Z2h0ZXJMdW1pbmFuY2UgPSBsdW1pbmFuY2UoY29sb3JBKTsKKyAgICBmbG9hdCBkYXJrZXJMdW1p
bmFuY2UgPSBsdW1pbmFuY2UoY29sb3JCKTsKIAogICAgIGlmIChsaWdodGVyTHVtaW5hbmNlIDwg
ZGFya2VyTHVtaW5hbmNlKQogICAgICAgICBzdGQ6OnN3YXAobGlnaHRlckx1bWluYW5jZSwgZGFy
a2VyTHVtaW5hbmNlKTsKQEAgLTE2MiwxMCArMTc0LDEwIEBAIGZsb2F0IGNvbnRyYXN0UmF0aW8o
Y29uc3QgQ29sb3JDb21wb25lbnQKICAgICByZXR1cm4gKGxpZ2h0ZXJMdW1pbmFuY2UgKyAwLjA1
KSAvIChkYXJrZXJMdW1pbmFuY2UgKyAwLjA1KTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBzUkdCVG9IU0woY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRz
KQorSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAg
Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuCi0gICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gc1JHQkNvbXBvbnRlbnRzOworICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbG9yOwogCiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyBy
LCBnLCBiIH0pOwogICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKQEAgLTIyMSw5ICsyMzMs
OSBAQCBzdGF0aWMgZmxvYXQgY2FsY0h1ZShmbG9hdCB0ZW1wMSwgZmxvYXQgCiAvLyBFeHBsYW5h
dGlvbiBvZiB0aGlzIGFsZ29yaXRobSBjYW4gYmUgZm91bmQgaW4gdGhlIENTUyBDb2xvciA0IE1v
ZHVsZQogLy8gc3BlY2lmaWNhdGlvbiBhdCBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNv
bG9yLTQvI2hzbC10by1yZ2Igd2l0aAogLy8gZnVydGhlciBleHBsYW5hdGlvbiBhdmFpbGFibGUg
YXQgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UKLUNvbG9yQ29t
cG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGhz
bENvbG9yKQorU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9yKQog
ewotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBoc2xDb2xv
cjsKKyAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7
CiAKICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgogICAgIGlmICghc2F0dXJhdGlvbikgewpA
QCAtMjQ3LDkgKzI1OSw5IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0
IEMKICAgICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCitTUkdCQTxmbG9hdD4g
cHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
cjsKICAgICByZXR1cm4gewogICAgICAgICByICogYSwKICAgICAgICAgZyAqIGEsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI2ICszMCwzNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25l
bnRzOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Cit0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IEhTTEE7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhckRpc3Bs
YXlQMzsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Cit0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiAvLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNs
YW1wZWQuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+
IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+Jik7CitMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25z
dCBTUkdCQTxmbG9hdD4mKTsKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JB
PGZsb2F0PiYpOwogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQ+IHAzVG9TUkdCKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mKTsKLUNvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvUDMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xp
bmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIAotV0VCQ09SRV9F
WFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9IU0woY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBoc2xU
b1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQ
Myhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKLWZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQSwgY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzQik7CitXRUJDT1JFX0VY
UE9SVCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VY
UE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCi1Db2xvckNv
bXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYgc1JHQkNvbXBvbnRlbnRzKTsKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQTxmbG9hdD4m
KTsKK2Zsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworZmxvYXQgY29udHJh
c3RSYXRpbyhjb25zdCBTUkdCQTxmbG9hdD4mLCBjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JH
QkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIGlubGluZSB1
aW50OF90IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
Y3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
Q29sb3JUeXBlcy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC04MCwxOCArODEsMTgg
QEAgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydAogICAgIHJldHVybiBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgb3Zl
cnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0PiBF
eHRlbmRlZENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3QKK1NSR0JBPGZsb2F0
PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAogewogICAgIHN3aXRjaCAobV9j
b2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICByZXR1cm4g
bV9jb21wb25lbnRzOworICAgICAgICByZXR1cm4gYXNTUkdCQShtX2NvbXBvbmVudHMpOwogICAg
IGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgotICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JD
b21wb25lbnRzKG1fY29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiB0b1NSR0JBKGFzTGluZWFy
U1JHQkEobV9jb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0g
ICAgICAgIHJldHVybiBwM1RvU1JHQihtX2NvbXBvbmVudHMpOworICAgICAgICByZXR1cm4gdG9T
UkdCQShhc0Rpc3BsYXlQMyhtX2NvbXBvbmVudHMpKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiB9
CiAKIGJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAy
NjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ29sb3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiBjbGFz
cyBFeHRlbmRlZENvbG9yIDogcHVibGljIFJlZkNvdW50ZWQ8RXh0ZW5kZWRDb2xvcj4gewogcHVi
bGljOgpAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNv
bG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdDsKKyAgICBTUkdCQTxmbG9hdD4gdG9T
UkdCQUxvc3N5KCkgY29uc3Q7CiAKICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29s
IGlzQmxhY2soKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKKyNp
bmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjUsMTAgKzY2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gcmVkQ29tcG9uZW50
KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gZ3JlZW5Db21wb25lbnQoKSksIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBibHVlQ29tcG9uZW50KCkpLCBhbHBoYSB9OwogICAgIH0K
IAotICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGFzU1JHQkZsb2F0Q29tcG9u
ZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9u
ZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29udmVy
dFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSkgfTsKLSAgICB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdDsKIAogICAg
IHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CiAgICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0KCkgY29u
c3QKQEAgLTEyMiw5ICsxMjAsOSBAQCBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yKGluCiAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChyLCAw
LCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoZywgMCwgMHhGRikpLCBz
dGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3RkOjpjbGFtcChhLCAwLCAweEZGKSkgfTsKIH0KIAotaW5saW5lIFNpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29t
cG9uZW50cykKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRz
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKQEAgLTEzMyw2ICsxMzEsMTUgQEAgaW5s
aW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbAogICAgIHJldHVybiB7IGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZyksIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkgfTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IFNpbXBsZUNvbG9yOjphc1NSR0JB
KCkgY29uc3QKK3sKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnRfdjxU
PikKKyAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50
KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgZWxzZQorICAgICAgICByZXR1cm4geyByZWRDb21w
b25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwgYmx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVu
dCgpIH07Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2Ugc3RkIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190
KiBzcmNDCiAKIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3koKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwg
YSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ry
b3koKQogCiBzdGF0aWMgdm9pZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3Jh
ZGllbnQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CiAg
ICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNl
dCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNh
aXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9w
LCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3Rv
cC5jb2xvci50b1NSR0JBTG9zc3koKTsKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5l
cl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0K
IApAQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3Bh
dHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3Ao
R3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQogewotICAg
IGF1dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwotICAgIGF1dG8gW3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JH
QkFMb3NzeSgpOworICAgIGF1dG8gW3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFM
b3NzeSgpOwogCiAgICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0g
ZnJvbS5vZmZzZXQpICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVm
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDQsOCArNDA0LDEzIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgYXV0byBsaWdo
dENvbG9yID0gKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0Ip
ID8gcmdiVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCkpIDogbV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLSAg
ICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9p
bnQzRChsaWdodENvbG9yWzBdLCBsaWdodENvbG9yWzFdLCBsaWdodENvbG9yWzJdKTsKKyAgICBp
ZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
Y29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCk7Cisg
ICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxv
YXRQb2ludDNEKHIsIGcsIGIpOworICAgIH0KICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRp
bmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDI3ICs4NSwyMyBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0Nv
bG9yTWF0cml4CiAgICAgcmV0dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJvZ3Jlc3MpLCBtX3R5
cGUpOwogfQogCi1ib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9y
bUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jv
b2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JHQkE8
ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
R1JBWVNDQUxFOiB7Ci0gICAgICAgIGF1dG8gbWF0cml4ID0gZ3JheXNjYWxlQ29sb3JNYXRyaXgo
bV9hbW91bnQpOwotICAgICAgICBtYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNvbG9y
Q29tcG9uZW50cyk7CisgICAgICAgIGNvbG9yID0gYXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJp
eChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7
Ci0gICAgICAgIGF1dG8gbWF0cml4ID0gc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCk7Ci0gICAg
ICAgIG1hdHJpeC50cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoY29sb3JDb21wb25lbnRzKTsKKyAg
ICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVfUk9UQVRFOiB7Ci0gICAgICAgIGF1dG8g
bWF0cml4ID0gaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpOwotICAgICAgICBtYXRyaXgu
dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAgIGNvbG9y
ID0gYXNTUkdCQShodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGF1dG8gbWF0cml4ID0g
c2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KTsKLSAgICAgICAgbWF0cml4LnRyYW5zZm9y
bUNvbG9yQ29tcG9uZW50cyhjb2xvckNvbXBvbmVudHMpOworICAgICAgICBjb2xvciA9IGFzU1JH
QkEoc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTIsMzAgKzE0OCwzMCBAQCBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBCYXNpY0NvbXBvbmVudFRyCiAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ft
b3VudCwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogfQogCi1ib29sIEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IGNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgT1BBQ0lUWToKLSAgICAgICAgY29sb3JD
b21wb25lbnRzWzNdICo9IG1fYW1vdW50OworICAgICAgICBjb2xvci5hbHBoYSAqPSBtX2Ftb3Vu
dDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKLSAgICAgICAgZmxv
YXQgb25lTWludXNBbW91bnQgPSAxLmYgLSBtX2Ftb3VudDsKLSAgICAgICAgY29sb3JDb21wb25l
bnRzWzBdID0gMSAtIChvbmVNaW51c0Ftb3VudCArIGNvbG9yQ29tcG9uZW50c1swXSAqIChtX2Ft
b3VudCAtIG9uZU1pbnVzQW1vdW50KSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1sxXSA9IDEg
LSAob25lTWludXNBbW91bnQgKyBjb2xvckNvbXBvbmVudHNbMV0gKiAobV9hbW91bnQgLSBvbmVN
aW51c0Ftb3VudCkpOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMl0gPSAxIC0gKG9uZU1pbnVz
QW1vdW50ICsgY29sb3JDb21wb25lbnRzWzJdICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQp
KTsKKyAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7CisgICAg
ICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkg
eworICAgICAgICAgICAgcmV0dXJuIDEuMGYgLSAob25lTWludXNBbW91bnQgKyBjb21wb25lbnQg
KiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOworICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ09OVFJBU1Q6IHsKICAgICAgICAgZmxvYXQgaW50
ZXJjZXB0ID0gLSgwLjVmICogbV9hbW91bnQpICsgMC41ZjsKLSAgICAgICAgY29sb3JDb21wb25l
bnRzWzBdID0gY2xhbXBUbzxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb2xvckNvbXBv
bmVudHNbMF0sIDAsIDEpOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbMV0gPSBjbGFtcFRvPGZs
b2F0PihpbnRlcmNlcHQgKyBtX2Ftb3VudCAqIGNvbG9yQ29tcG9uZW50c1sxXSwgMCwgMSk7Ci0g
ICAgICAgIGNvbG9yQ29tcG9uZW50c1syXSA9IGNsYW1wVG88ZmxvYXQ+KGludGVyY2VwdCArIG1f
YW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwLCAxKTsKKyAgICAgICAgZm9yRWFjaE5vbkFs
cGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpjbGFtcDxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb21wb25lbnQs
IDAuMGYsIDEuMGYpOworICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGNhc2UgQlJJR0hUTkVTUzoKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzBdID0gc3RkOjpt
YXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzBdLCAwKTsKLSAgICAgICAgY29s
b3JDb21wb25lbnRzWzFdID0gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29sb3JDb21wb25l
bnRzWzFdLCAwKTsKLSAgICAgICAgY29sb3JDb21wb25lbnRzWzJdID0gc3RkOjptYXg8ZmxvYXQ+
KG1fYW1vdW50ICogY29sb3JDb21wb25lbnRzWzJdLCAwKTsKKyAgICAgICAgZm9yRWFjaE5vbkFs
cGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAg
ICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI2LDE1ICsyMjIsMTUgQEAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gSW52ZXJ0TGlnaHRuZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgpOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFu
c2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsQ29t
cG9uZW50cyA9IHNSR0JUb0hTTChzUkdCQ29sb3JDb21wb25lbnRzKTsKKyAgICBhdXRvIGhzbGEg
PSB0b0hTTEEoY29sb3IpOwogICAgIAogICAgIC8vIFJvdGF0ZSB0aGUgaHVlIDE4MGRlZy4KLSAg
ICBoc2xDb21wb25lbnRzWzBdID0gZm1vZChoc2xDb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7
CisgICAgaHNsYS5odWUgPSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKICAgICAK
ICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gUkdCLgotICAgIHNSR0JDb2xvckNvbXBvbmVudHMgPSBo
c2xUb1NSR0IoaHNsQ29tcG9uZW50cyk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkEgPSB0b1NS
R0JBKGhzbGEpOwogICAgIAogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguIFNlZSByZGFyOi8vcHJv
YmxlbS80MTE0NjY1MCBmb3IgaG93IHRoaXMgbWF0cml4IHdhcyBkZXJpdmVkLgogICAgIGNvbnN0
ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0b0RhcmtNb2RlTWF0cml4IHsKQEAgLTI0MiwyOCArMjM4
LDI4IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmEKICAgICAgICAg
MC4wMzBmLCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAogICAgICAgICAwLjAzMGYsICAw
LjA1OWYsIC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAgIHRvRGFya01vZGVNYXRyaXgu
dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGNvbG9y
ID0gYXNTUkdCQSh0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1D
b2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAor
Ym9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xv
cihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gcmdiQ29tcG9uZW50cyA9
IHNSR0JDb2xvckNvbXBvbmVudHM7Ci0KICAgICAvLyBBcHBseSB0aGUgbWF0cml4LgogICAgIGNv
bnN0ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0b0xpZ2h0TW9kZU1hdHJpeCB7CiAgICAgICAgIC0x
LjMwMGYsIC0wLjA5N2YsICAwLjE0N2YsIDAuMGYsIDEuMjVmLAogICAgICAgICAtMC4wNDlmLCAt
MS4zNDdmLCAgMC4xNDZmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3Ziwg
LTEuMTA0ZiwgMC4wZiwgMS4yNWYKICAgICB9OwotICAgIHRvTGlnaHRNb2RlTWF0cml4LnRyYW5z
Zm9ybUNvbG9yQ29tcG9uZW50cyhyZ2JDb21wb25lbnRzKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRv
TGlnaHRNb2RlID0gYXNTUkdCQSh0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8g
SFNMLgotICAgIGF1dG8gaHNsQ29tcG9uZW50cyA9IHNSR0JUb0hTTChyZ2JDb21wb25lbnRzKTsK
KyAgICBhdXRvIGhzbGEgPSB0b0hTTEEoY29udmVydGVkVG9MaWdodE1vZGUpOworCiAgICAgLy8g
SHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNsQ29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29t
cG9uZW50c1swXSArIDAuNWYsIDEuMGYpOworICAgIGhzbGEuaHVlID0gc3RkOjpmbW9kKGhzbGEu
aHVlICsgMC41ZiwgMS4wZik7CisKICAgICAvLyBBbmQgcmV0dXJuIFJHQi4KLSAgICBzUkdCQ29s
b3JDb21wb25lbnRzID0gaHNsVG9TUkdCKGhzbENvbXBvbmVudHMpOworICAgIGNvbG9yID0gdG9T
UkdCQShoc2xhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5oCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2U7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDb2xvckNvbXBvbmVudHM7Cit0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CiBwdWJsaWM6CkBAIC04
MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAotICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5z
Zm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3Io
U1JHQkE8ZmxvYXQ+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIE9wZXJhdGlvblR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCkBAIC0yMjksNyArMjI5LDcgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xv
cihTUkdCQTxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGRvdWJsZSBtX2Ftb3VudDsK
IH07CkBAIC0yNjQsNyArMjY0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgYm9v
bCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGRvdWJsZSBtX2Ftb3VudDsKIH07CkBAIC0yOTEsOCArMjkxLDggQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdHJhbnNmb3JtQ29s
b3IoU1JHQkE8ZmxvYXQ+JikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbnZlcnNlVHJhbnNmb3Jt
Q29sb3IoU1JHQkE8ZmxvYXQ+JikgY29uc3QgZmluYWw7CiB9OwogCiBjbGFzcyBXRUJDT1JFX0VY
UE9SVCBCbHVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMSwxNCArMTExLDE0IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6
dHJhbnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9z
c3koKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7Ci0gICAg
ICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbXBvbmVudHMpKQorICAg
ICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
c1JHQkFDb21wb25lbnRzKTsKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcihzUkdCQUNvbG9y
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDE0ICsxMzAsMTQgQEAgYm9vbCBGaWx0
ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAgIGlmIChjb2xvci5pc1NlbWFudGlj
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb21wb25lbnRzID0g
Y29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNv
bG9yLnRvU1JHQkFMb3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJh
dGlvbnMpIHsKLSAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihz
UkdCQUNvbXBvbmVudHMpKQorICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJzZVRyYW5zZm9y
bUNvbG9yKHNSR0JBQ29sb3IpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHNSR0JBQ29tcG9uZW50cyk7CisgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3Ioc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3Rr
LmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBDb2xv
cjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBj
b25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgcmV0dXJuIHsg
ciwgZywgYiwgYSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24g
MjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDCiAgICAgUmVmPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQo
Y29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5KCkpOwogICAgIGdsVW5pZm9ybTRmKHBy
b2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lk
dGgpOwogCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1i
ZXIoaW50IG51bQogICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAg
ICAgLy8gU2luY2Ugd2Ugd29uJ3Qgc3dhcCBSK0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBw
YWludCB3aXRoIHRoZSBzd2FwcGVkIFIrQiBjb2xvci4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwg
ZywgciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwpAQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRl
eHR1cmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAv
LyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0
ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
cHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwor
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xv
cigpLnRvU1JHQkFMb3NzeSgpKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29s
b3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dy
YW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0
KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93
T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAg
IGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5KCkp
OwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7
CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFncyB8PSBT
aG91bGRCbGVuZDsKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IoY29uCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFM
b3NzeSgpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBnbENsZWFyKEdMX0NP
TE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyOTQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgQ29sb3I6OkNvbG9yKEQyRDFfQ09M
T1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JG
KHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25z
dAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CiAgICAgcmV0dXJuIEQyRDE6
OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
ZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBH
cmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgIFZlY3RvcjxEMkQxX0dSQURJ
RU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBF
eHRlbmRlZENvbG9yLgogICAgIGZvciAoYXV0byBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKICAgICAg
ICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBE
MkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpyb3QKIAogRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFs
QWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBi
LCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQwMSw3ICsxNDAxLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNv
bgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IHZlcnkgbXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBk
aXNhYmxlZCBjb2xvciBhbmQgdGhlIGJhY2tncm91bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2
ZSB0aGUgdGV4dCBjb2xvciBhbG9uZS4gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNv
bnRyYXN0IGNvbG9yIHNjaGVtZSBzbyB0aGF0IGl0IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0Lgog
ICAgIC8vIElmIHRoZSBjb250cmFzdCB3YXMgYWxyZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3Qg
ZG8gYW55IGdvb2QgdG8gY2hhbmdlIGl0IHRvIGEgZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29s
b3Igc2NoZW1lLgotICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
KSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKKyAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxl
ZENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpIDwg
bWluQ29sb3JDb250cmFzdFZhbHVlKQogICAgICAgICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAg
cmV0dXJuIGRpc2FibGVkQ29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRTdHlsZS5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgYm9vbCB0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZAogewogICAgIC8vIFVz
ZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgbGVnaWJpbGl0eTogYSBjb250cmFzdCByYXRp
byBvZiA0LjU6MSBvciBncmVhdGVyLgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FH
MjAvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdAotICAgIHJldHVybiBjb250cmFzdFJh
dGlvKHRleHRDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCksIGJhY2tncm91bmRDb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpID4gNC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlv
KHRleHRDb2xvci50b1NSR0JBTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeSgp
KSA+IDQuNTsKIH0KIAogc3RhdGljIENvbG9yIGFkanVzdENvbG9yRm9yVmlzaWJpbGl0eU9uQmFj
a2dyb3VuZChjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mjk2NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMjAtMDYtMTMgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yOiBFeHBl
cmltZW50IHdpdGggc3Ryb25nbHkgdHlwZWQgQ29sb3JDb21wb25lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzOTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgdG9TUkdCQUxvc3N5KCkgcmF0aGVyIHRoYW4gdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpLgorCiAyMDIwLTA2LTEyICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIERvdWJsZSB0YXAgdG8gem9vbSBvdXQgZG9lc24ndCB3b3JrIGFmdGVyIHVw
Z3JhZGluZyB0byBpT1MgMTMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNjI5NDQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMs
NyArODMsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNvbG9yLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5KCk7CiAgICAgY29s
b3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dl
c3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjYyOTQ0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5T
d2lwZUdlCiAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFj
a2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAo
IW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBb
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9y
LnRvU1JHQkFMb3NzeSgpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQ
YXR0ZXJuID0gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjI5NDQp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2MCw3ICs2NjAsNyBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJh
Y2tncm91bmRDb2xvCiAgICAgaWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5
KCk7CiAgICAgKnJlZCA9IHI7CiAgICAgKmdyZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjI5NTgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAyMC0wNi0xMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgRXh0ZW5kZWQgQ29sb3I6IEV4cGVyaW1lbnQgd2l0aCBzdHJvbmdseSB0eXBlZCBDb2xvckNv
bXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgVXBkYXRlIGZvciBjaGFuZ2VkIG5hbWVzIChlLmcuIHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSAtPiB0b1NSR0JBTG9zc3koKSkKKyAgICAgICAgYW5kIHVzZSBvZiBleHBsaWNpdCB0
eXBlcy4KKwogMjAyMC0wNi0xMiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+
CiAKICAgICAgICAgU3VwcG9ydCBidWlsZGluZyB0ZXN0IHJ1bm5lcnMgZm9yIHdhdGNoT1MgYW5k
IHR2T1MKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3Rz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29s
b3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29s
b3I6OndoaXRlOwogCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
XSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9G
TE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBzYXR1cmF0aW9uKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMSwgbGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0
aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAg
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAgICAgCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
cihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNv
bG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAg
LTUzLDE1ICs1MywxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAgICBDb2xv
ciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
KTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0
dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5saWdo
dG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5l
c3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkp
OworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQSho
c2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0K
IApAQCAtNjksMTUgKzY5LDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBD
b2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogCi0gICAgYXV0byBbaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBodWUpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSgxLCBzYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBsaWdo
dG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLjUsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtODUsMTUgKzg1LDE1IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1
NSwgMCk7CiAKLSAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0g
c1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKDAuMzMzMzMzMzQsIGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRpb24p
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxp
Z2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
U2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
IH0pKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NS
R0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3Ip
OwogfQogCkBAIC0xMDEsMTUgKzEwMSwxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQog
ewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKLSAgICBh
dXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEo
Y29sb3IudG9TUkdCQUxvc3N5KCkpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2Njks
IGh1ZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9G
TE9BVF9FUSgwLjUsIGxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2Njks
IGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJh
dGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
IAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNs
VG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGhzbGFDb2xvcikp
OwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMTcs
MTUgKzExNywxNSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIHsKICAgICBDb2xv
ciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7
CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
c2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGxp
Z2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDAuNTAxOTYwNzg0MzEzNzI1NDgsIGhzbGFDb2xvci5saWdodG5lc3MpOwogICAgIAotICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0g
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NS
R0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKKyAgICBhdXRvIHJv
dW5kVHJpcHBlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAg
ICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEzMywxNSAr
MTMzLDE1IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBh
bHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBh
dXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjI3NDUwOTgwMzkyMTU2ODUsIGxpZ2h0bmVzcyk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjI3NDUw
OTgwMzkyMTU2ODUsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJp
cHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJh
dGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29s
b3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQ5LDE1ICsxNDksMTUgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6Omxp
Z2h0R3JheTsKIAotICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0g
PSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICBhdXRvIGhz
bGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CiAKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgc2F0dXJhdGlvbik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNzUyOTQxMTc2NDcwNTg4MjIsIGxpZ2h0bmVzcyk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNzUyOTQxMTc2NDcw
NTg4MjIsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYSB9KSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IodG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2
Mjk0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9y
VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsMjcgKzIzNywyNSBAQCBURVNUKEV4dGVu
ZGVkQ29sb3IsIFJldHVyblZhbHVlcykKIAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNp
b25Ub1NSR0IpCiB7Ci0gICAgewotICAgICAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOworICAgIENvbG9yIHAzQ29s
b3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OworICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAot
ICAgICAgICBhdXRvIHNSR0JDb21wb25lbnRzID0gcDNDb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
Q29tcG9uZW50cy5jb21wb25lbnRzWzBdLCAxLjBmKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzFdLCAwLjQ2
MjUzNzg4NWYpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMl0sIDAuMTQ5MTQ3ODM4ZikpOwotICAgICAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9u
ZW50c1szXSwgMC43NWYpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIENvbG9yIGxpbmVhckNv
bG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6
OkxpbmVhclJHQikgfTsKLSAgICAgICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRl
ZCgpKTsKLSAgICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9IGxpbmVhckNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIDEuMGYpKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVu
dHNbMV0sIDAuNzM1MzU2OTI3ZikpOwotICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgMC41MzcwOTg3MDZmKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9u
ZW50cy5jb21wb25lbnRzWzNdLCAwLjc1ZikpOwotICAgIH0KKyAgICBhdXRvIHNSR0JBQ29sb3Ig
PSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50
aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOworICAgIEVYUEVDVF9UUlVFKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzNzg4NWYpKTsKKyAg
ICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAw
LjE0OTE0NzgzOGYpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
c1JHQkFDb2xvci5hbHBoYSwgMC43NWYpKTsKIH0KIAorVEVTVChFeHRlbmRlZENvbG9yLCBMaW5l
YXJTUkdCQ29udmVyc2lvblRvU1JHQikKK3sKKyAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0Ip
IH07CisgICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKKyAgICBhdXRv
IHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKKyAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43
MzUzNTY5MjdmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNS
R0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKSk7Cit9CiAKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>