<?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>45612</bug_id>
          
          <creation_ts>2010-09-12 02:03:34 -0700</creation_ts>
          <short_desc>SVG Filter cleanup</short_desc>
          <delta_ts>2014-05-12 05:54:35 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
    
    <blocked>31370</blocked>
    
    <blocked>32486</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>277849</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-12 02:03:34 -0700</bug_when>
    <thetext>The filter code was modified several times and needs a cleanup now. Otherwise the code is to hard to understand. More than it should be. I provide a first cleanup shortly. This hopefully makes it easier to continue the work on the new primitive renderer as well as the smalles repaint rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277864</commentid>
    <comment_count>1</comment_count>
      <attachid>67336</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-12 08:07:57 -0700</bug_when>
    <thetext>Created attachment 67336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278119</commentid>
    <comment_count>2</comment_count>
      <attachid>67336</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-13 04:26:32 -0700</bug_when>
    <thetext>Comment on attachment 67336
Patch

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

Not sure if I should r+, please answer first.

&gt; WebCore/ChangeLog:8
&gt; +        Cleanup of FilterEffect, deleted unnecessary member variables and functinos.
typo: functions.

&gt; WebCore/ChangeLog:9
&gt; +        Renamed variables and functions to match name schema of SVG specification.
to match the name schema.

&gt; WebCore/ChangeLog:11
&gt; +        with followups.
in follow-up patches.

&gt; WebCore/ChangeLog:26
&gt; +        * platform/graphics/filters/FEBlend.cpp: dito.
&gt; +        (WebCore::FEBlend::apply):
&gt; +        * platform/graphics/filters/FEColorMatrix.cpp: dito.
&gt; +        (WebCore::FEColorMatrix::apply):
&gt; +        * platform/graphics/filters/FEComponentTransfer.cpp: dito.
&gt; +        (WebCore::FEComponentTransfer::apply):
&gt; +        * platform/graphics/filters/FEComposite.cpp: dito.
&gt; +        (WebCore::FEComposite::apply):
&gt; +        * platform/graphics/filters/FEGaussianBlur.cpp: dito.
&gt; +        (WebCore::FEGaussianBlur::apply):
s/dito/ditto/ everywhere in the ChangeLog.

&gt; WebCore/ChangeLog:52
&gt; +        (WebCore::RenderSVGResourceFilter::buildPrimitives): Don&apos;t set primitive properties to FilterEffect, ask for them during subregion calculation.
Don&apos;t store primitive properties in FilterEffect, query them during the subregion calculation.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:101
&gt; +    SVGFilterPrimitiveStandardAttributes* m_filterPrimitiveElement;
This is clearly a layering violation.
If we land this patch, will you have a follow-up patch ready soon, that fixes this problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279975</commentid>
    <comment_count>3</comment_count>
      <attachid>67776</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-16 01:33:15 -0700</bug_when>
    <thetext>Created attachment 67776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279978</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-16 01:38:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; WebCore/platform/graphics/filters/FilterEffect.h:101
&gt; &gt; +    SVGFilterPrimitiveStandardAttributes* m_filterPrimitiveElement;
&gt; This is clearly a layering violation.
&gt; If we land this patch, will you have a follow-up patch ready soon, that fixes this problem?

Thats right, it&apos;s a violation :-(
Uploaded a new patch, that concentrates more on the cleanup of unnecessary member variables and functions and follows the name schema of SVG.  
I put all SVG specific code in new public or private sections in FilterEffect.h to make clear that they should get removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281160</commentid>
    <comment_count>5</comment_count>
      <attachid>68014</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-18 12:12:47 -0700</bug_when>
    <thetext>Created attachment 68014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281161</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-18 12:16:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=68014) [details]
&gt; Patch

Even if the patch looks big, the most code shares the same pattern. Removed FilterEffect inputs from FilterEffect constructor. Instead append them to a FilterEffectVector and add this to the new created filter effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281263</commentid>
    <comment_count>7</comment_count>
      <attachid>68014</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-19 02:22:21 -0700</bug_when>
    <thetext>Comment on attachment 68014
Patch

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

&gt; WebCore/ChangeLog:9
&gt; +        All effect inputs are stored in a FilterEffectVector on FilterEffect instead of
&gt; +        passing them via the constructors of every single effect type.

All effect inputs are stored in a Vector in FIlterEffect instead of passing them via constructors to every effect type.

&gt; WebCore/ChangeLog:10
&gt; +        This simplifies the primitive subregion logic and concentrates it to determineFilterPrimitiveSubregion.

s/to/in/

&gt; WebCore/ChangeLog:18
&gt; +        renamed to repaintRectInLocalCoordinate since this is its properly meaning.

s/properly/proper/

&gt; WebCore/ChangeLog:23
&gt; +        * platform/graphics/cairo/GraphicsContextCairo.cpp: scaledSubRegion was renamed to repaintRectInLocalCoordinate

s/Coordinate/Coordinates./

&gt; WebCore/ChangeLog:31
&gt; +        * platform/graphics/filters/FEColorMatrix.cpp: Same as on FEBlend.

Same changes like FEBlend.

&gt; WebCore/ChangeLog:37
&gt; +        * platform/graphics/filters/FEComponentTransfer.cpp: Same as on FEBlend.

Just use &quot;Ditto&quot; here.

&gt; WebCore/ChangeLog:43
&gt; +        * platform/graphics/filters/FEComposite.cpp: Same as on FEBlend.

Ditto.

&gt; WebCore/ChangeLog:49
&gt; +        * platform/graphics/filters/FEGaussianBlur.cpp: Same as on FEBlend.

Ditto.

&gt; WebCore/ChangeLog:60
&gt; +        (WebCore::FilterEffect::calculateDrawingIntRect): Takes repaintRectInLocalCoordinate now.

s/Coordinate/Coordinates/

&gt; WebCore/ChangeLog:63
&gt; +        * platform/graphics/filters/FilterEffect.h: Changed names to match name schema. Removed unnecessary member variables and funtions.

s/funtions/functions/.

&gt; WebCore/ChangeLog:91
&gt; +        (WebCore::SourceGraphic::determineFilterPrimitiveSubregion): ditto.

s/ditto/Ditto.

&gt; WebCore/ChangeLog:94
&gt; +        * rendering/RenderSVGResourceFilter.cpp: Consider renamed functions in FilterEffect.

Adapt to renames in FilterEffect.

&gt; WebCore/ChangeLog:99
&gt; +        * svg/SVGFEColorMatrixElement.cpp: Same as on SVGFEBlendElement.

s/Same as....*/Ditto.

&gt; WebCore/ChangeLog:101
&gt; +        * svg/SVGFEComponentTransferElement.cpp: Same as on SVGFEBlendElement.

Ditto.

&gt; WebCore/ChangeLog:103
&gt; +        * svg/SVGFECompositeElement.cpp: Same as on SVGFEBlendElement.

Ditto.

&gt; WebCore/ChangeLog:105
&gt; +        * svg/SVGFEConvolveMatrixElement.cpp: Same as on SVGFEBlendElement.

Ditto.

&gt; WebCore/ChangeLog:107
&gt; +        * svg/SVGFEDiffuseLightingElement.cpp: Same as on SVGFEBlendElement.

Ditto.

&gt; WebCore/ChangeLog:109
&gt; +        * svg/SVGFEDisplacementMapElement.cpp: Same as on SVGFEBlendElement.

Ditto. (Several places which should also just say ditto below in the ChangeLog..)

&gt; WebCore/ChangeLog:174
&gt; +        (WebCore::FETile::determineFilterPrimitiveSubregion): Renamed to match name schema.

s/schema/scheme/ in mutiple places in the ChangeLog.

&gt; WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp:986
&gt; +    RefPtr&lt;FilterEffect&gt; blur = FEGaussianBlur::create(sd, sd);

You might want to change the &apos;sd&apos; variable to a more reasonable name here, even if your patch doesn&apos;t introduce/change it.

&gt; WebCore/platform/graphics/filters/FEBlend.cpp:91
&gt; +    FilterEffectVector inputEffects = inputFilterEffects();

Ouch, that&apos;s a bad idea, you&apos;re copying the vector here.
You want to use &quot;FilterEffectVector&amp; inputEffects = inputFilterEffects();&quot;.

I&apos;d propose to add accessor for &quot;get input effect at index&quot;, so the could could read lke:

ASSERT(inputEffects().size() == 2);
FilterEffect* in = inputFilterEffect(0);
FilterEffect* in2 = inputFilterEffect(1);
..

&gt; WebCore/platform/graphics/filters/FEBlend.cpp:171
&gt; +    FilterEffectVector inputEffects = inputFilterEffects();

Same here, do NOT copy.
Better add the &quot;inputFilterEffect(unsigned ..)&quot; function.

&gt; WebCore/platform/graphics/filters/FEColorMatrix.cpp:159
&gt; +    FilterEffect* in = inputFilterEffects()[0].get();

This also looks awkward, hence my proposal to add inputFilterEffects(unsigned number).

&gt; WebCore/platform/graphics/filters/FEColorMatrix.cpp:241
&gt; +    inputFilterEffects()[0]-&gt;externalRepresentation(ts, indent + 1);

Ok, this pattern is used everywhere, I&apos;m not going to repeat above comments for the rest.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:52
&gt; +    if (!m_inputEffects.size())
&gt; +        uniteRect = filter-&gt;filterRegion();
&gt; +
&gt; +    FilterEffectVector::const_iterator it = m_inputEffects.begin();
&gt; +    const FilterEffectVector::const_iterator end = m_inputEffects.end();
&gt; +    for (; it != end; ++it)
&gt; +        uniteRect.unite(it-&gt;get()-&gt;determineFilterPrimitiveSubregion(filter));

This could be simplifed:
unsigned size = m_inputEffects.size();
if (!size)
   uniteRect = filter-&gt;filterRegion();

for (unsigned i = 0; i &lt; size; ++i)
    uniteRect.unite(m_inputEffects.at(i)-&gt;determineFIlterPrimitiveSubregion(filter));
...

(I&apos;ve been told the vector-by-index access is faster than iterators, not sure about that though.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:60
&gt; +    IntPoint location = roundedIntPoint(FloatPoint(repaintRectInLocalCoordinates().x() - effectRect.x(),

I wouldn&apos;t call repaintRectInLocalCoordinates() twice. How about:

FloatPoint location = repaintRectInLocalCoordinates.location();
location.move(-effectRect.x(), -effectRect.y());
return IntRect(roundedIntPoint(location), resultImage()-&gt;size());

Question: Are you sure resultImage() is always not null here? Either chec or asser it.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:67
&gt; +    FloatPoint startPoint = FloatPoint(srcRect.x() - repaintRectInLocalCoordinates().x(), srcRect.y() - repaintRectInLocalCoordinates().y());

Same as above.
FloatPoint location = repaintRectInLocalCoordinates().location();
return FloatRect(FloatPoint(srcRect.x() - location.x(), srcRect.y() - location.y()), srcRect.size());

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:76
&gt; +    if (m_effectBuffer.get())

I&apos;d reverse the check:
if (!m_effectBuffer)
    return 0;
return m_effectBuffer-&gt;context();

Note: No need to call .get() as well.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:54
&gt; +    void setInputFilterEffects(FilterEffectVector&amp; inputEffects) { m_inputEffects = inputEffects; }    

I&apos;d call the function setInputEffects (FilterEffects sounds redundant). And let it take a const reference!
void setInputEffects(const FilterEffectVector&amp; inputEffects) { m_inputEffects = inputEffects; }
Please remove the trailing whitespace.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:55
&gt; +    FilterEffectVector&amp; inputFilterEffects() const { return m_inputEffects; }

This is awkward. You either want:
const FilterEffectVector&amp; inputEffects() const { return m_inputEffects;} for read only access or
FilterEffectVector&amp; inputEffects() { return m_inputEffects; } for read write access.

My proposal is to add:
FilterEffect* inputFilterEffect(unsigned number) const
{
    ASSERT(number &lt; m_inputEffects.size());
    return m_inputEffects.at(number).get();
}

This also removes the need for the ASSERT(foo.size() == xx) everywhere in the client code.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:103
&gt; +    mutable OwnPtr&lt;ImageBuffer&gt; m_effectBuffer;
&gt; +    mutable FilterEffectVector m_inputEffects;

Why are those mutable? Which const method needs to modify it? Change the design.

&gt; WebCore/svg/SVGFEBlendElement.cpp:96
&gt; +    FilterEffectVector inputEffects;
&gt; +    inputEffects.append(input1);
&gt; +    inputEffects.append(input2);
&gt;  
&gt; -    return FEBlend::create(input1, input2, static_cast&lt;BlendModeType&gt;(mode()));
&gt; +    PassRefPtr&lt;FilterEffect&gt; effect = FEBlend::create(static_cast&lt;BlendModeType&gt;(mode()));
&gt; +    effect-&gt;setInputFilterEffects(inputEffects);
&gt; +    return effect;

This is ineffcient. You want to use
RefPtr&lt;FilterEffect&gt; effect = FEBlend::Create(static_cast&lt;BlendModeType&gt;(mode());
FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();
inputEffects.append(input1);
inputEffects.append(input2);
return effect.release();

Note that you are not allowed to store the passed PassRefPtr in a PassRefPtr, you need to use a RefPtr here, and release it afterwards!

&gt; WebCore/svg/SVGFEColorMatrixElement.cpp:126
&gt; +    FilterEffectVector inputEffects;

Same as above, affects all SVGFE* files you&apos;ve touched! Won&apos;t repeat the comments for the following ones.

&gt; WebCore/svg/graphics/filters/SVGFEMerge.cpp:61
&gt; +    it = inputEffects.begin();

Use:
unsigned size = m_mergeInputs.size();
for (unsigned i = 0; i &lt; size; ++i) {
   FilterEffect* input = inputEffect(i);
   filterContext-&gt;drawImageBuffer(input-&gt;resultImage, DeviceColorSpace, calculateDrawingRect(input-&gt;repaintRectInLocalCoordinates()));
}

Looks cleaner.

Okay, that&apos;s my first iteration, if you upload a fixed version, I&apos;m going to recheck in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281333</commentid>
    <comment_count>8</comment_count>
      <attachid>68041</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-19 17:26:04 -0700</bug_when>
    <thetext>Created attachment 68041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281496</commentid>
    <comment_count>9</comment_count>
      <attachid>68041</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-20 05:02:27 -0700</bug_when>
    <thetext>Comment on attachment 68041
Patch

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

&gt; WebCore/ChangeLog:8
&gt; +        All effect inputs are stored in a Vector in FIlterEffect instead of passing them via constructors to every effect type.

s/FI/Fi/

&gt; WebCore/ChangeLog:9
&gt; +        This simplifies the primitive subregion logic and concentrates it in determineFilterPrimitiveSubregion.

s/concentrates/centralizes/ - not sure the former word can be used in this context in english :-)

&gt; WebCore/ChangeLog:17
&gt; +        renamed to repaintRectInLocalCoordinate since this is its proper meaning.

InLocalCoordinates.

&gt; WebCore/ChangeLog:20
&gt; +        No new tests added since the functionality didn&apos;t changed.

didn&apos;t change or hasn&apos;t changed.

&gt; WebCore/platform/graphics/filters/FEComposite.cpp:35
&gt; +FEComposite::FEComposite(const CompositeOperationType&amp; type, const float&amp; k1, const float&amp; k2, const float&amp; k3, const float&amp; k4)

While you&apos;re at it, s/const float&amp;/float/ please :-)

&gt; WebCore/platform/graphics/filters/FEComposite.cpp:213
&gt; +    inputEffect(0)-&gt;externalRepresentation(ts, indent + 1);

inputEffect(1)!

&gt; WebCore/platform/graphics/filters/FEComposite.h:45
&gt; +    static PassRefPtr&lt;FEComposite&gt; create(const CompositeOperationType&amp;, const float&amp;, const float&amp;, const float&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/platform/graphics/filters/FEComposite.h:67
&gt; +    FEComposite(const CompositeOperationType&amp;, const float&amp;, const float&amp;, const float&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.cpp:41
&gt; +FEGaussianBlur::FEGaussianBlur(const float&amp; x, const float&amp; y)

s/const float&amp;/float/

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.h:33
&gt; +    static PassRefPtr&lt;FEGaussianBlur&gt; create(const float&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/platform/graphics/filters/FEGaussianBlur.h:48
&gt; +    FEGaussianBlur(const float&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:52
&gt; +    if (!size)
&gt; +        uniteRect = filter-&gt;filterRegion();
&gt; +
&gt; +    for (unsigned i = 0; i &lt; size; ++i)
&gt; +        uniteRect.unite(m_inputEffects.at(i)-&gt;determineFilterPrimitiveSubregion(filter));

I&apos;d prefer:
if (!size)
    uniteRect = filter-&gt;filterRegion();
else {
     for (unsigned i = 0; i &lt; size; ++i)
        uniteRect.unite(m_inputEffects.at(i)-&gt;.....);
}

To make it a bit more obvious.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:58
&gt; +IntRect FilterEffect::calculateDrawingIntRect(const FloatRect&amp; effectRect) const

Hm, I don&apos;t see why calculateDrawingIntRect and calculateDrawingRect are not similar at all.
I&apos;d expect that calculateDrawingIntRect == roundedIntRect(calculateDrawingRect).

Can you explain the difference? If there&apos;s an important difference, the functions have to be renamed, it looks confusing.

calculateDrawingIntRect returns IntRect(roundedIntPoint(repaintRect.x() - effectRect.x(), repaintRect.y() - effectRect.y()), m_effectBuffer-&gt;size());
calculateDrawingRect returns FloatRect(FloatPoint(srcRect.x() - repaintRect.x(), srcRect.y() - repaintRect.y()), srcRect.size());

There is a difference that&apos;s not obvious to me from the naming of the functions.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:47
&gt; +    ImageBuffer* resultImage() { return m_effectBuffer.get(); }

This function should be const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:52
&gt; +    GraphicsContext* getEffectContext();

s/getEffectContext/effectContext/ - we don&apos;t use the get prefix anywhere in WebKit (at least we shouldn&apos;t.)
Is it possible to constify it? Didn&apos;t check.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:54
&gt; +    FilterEffectVector&amp; inputEffects() { return m_inputEffects; }

Is this accessor still used somewhere?

&gt; WebCore/platform/graphics/filters/FilterEffect.h:62
&gt; +    bool isAlphaImage() { return m_alphaImage; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:65
&gt; +    FloatRect repaintRectInLocalCoordinates() { return m_repaintRectInLocalCoordinates; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:71
&gt; +    virtual bool isSourceInput() { return false; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:78
&gt; +    bool hasX() { return m_hasX; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:81
&gt; +    bool hasY() { return m_hasY; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:84
&gt; +    bool hasWidth() { return m_hasWidth; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:87
&gt; +    bool hasHeight() { return m_hasHeight; }

Add const.

&gt; WebCore/platform/graphics/filters/FilterEffect.h:93
&gt; +    FloatRect filterPrimitiveSubregion() { return m_filterPrimitiveSubregion; }

Add const.

&gt; WebCore/svg/SVGFEBlendElement.cpp:91
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

Call inputEffects.reverseCapacity(2) before appending the two effects, to avoid reallocations.

&gt; WebCore/svg/SVGFEColorMatrixElement.cpp:127
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFEComponentTransferElement.cpp:87
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFECompositeElement.cpp:115
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

Call inputEffects.reverseCapacity(2) before appending the two effects, to avoid reallocations.

&gt; WebCore/svg/SVGFEConvolveMatrixElement.cpp:158
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFEDiffuseLightingElement.cpp:118
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFEDisplacementMapElement.cpp:107
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

Call inputEffect.reverseCapacity(2) before appending the two effects, to avoid reallocations.

&gt; WebCore/svg/SVGFEGaussianBlurElement.cpp:91
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFEMorphologyElement.cpp:105
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFEOffsetElement.cpp:90
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFESpecularLightingElement.cpp:124
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/SVGFETileElement.cpp:66
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();

No need for the local variable here, just call effect-&gt;inputEffects().append(input1);

&gt; WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp:34
&gt; +    : FELighting(DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0.0f, 0.0f, kernelUnitLengthX, kernelUnitLengthY, lightSource)

s/0.0f/0/g

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp:36
&gt; +FEDisplacementMap::FEDisplacementMap(ChannelSelectorType xChannelSelector,  ChannelSelectorType yChannelSelector, const float&amp; scale)

superfluous whitespace. s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp:44
&gt; +PassRefPtr&lt;FEDisplacementMap&gt; FEDisplacementMap::create(ChannelSelectorType xChannelSelector,

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.h:42
&gt; +        static PassRefPtr&lt;FEDisplacementMap&gt; create(ChannelSelectorType, ChannelSelectorType, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.h:58
&gt; +        FEDisplacementMap(ChannelSelectorType, ChannelSelectorType, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEMerge.cpp:40
&gt; +    return adoptRef(new FEMerge());

s/FEMerge()/FEMerge/

&gt; WebCore/svg/graphics/filters/SVGFEMerge.cpp:46
&gt; +    ASSERT(!size);

Oops, ASSERT(size &gt; 0) is what you want.

&gt; WebCore/svg/graphics/filters/SVGFEMerge.cpp:58
&gt; +    for (unsigned i = 0; i &lt; size; ++i) {

Where is size defined?

&gt; WebCore/svg/graphics/filters/SVGFEMerge.cpp:74
&gt; +    ASSERT(!size);

ASSERT(size &gt; 0)!

&gt; WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp:35
&gt; +    : FELighting(SpecularLighting, lightingColor, surfaceScale, 0.0f, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, lightSource)

s/0.0f/0/

&gt; WebCore/svg/graphics/filters/SVGFETile.cpp:41
&gt; +    return adoptRef(new FETile());

s/FETile()/FETile/

&gt; WebCore/svg/graphics/filters/SVGFETile.cpp:47
&gt; +    inputEffects()[0].get()-&gt;determineFilterPrimitiveSubregion(filter);

inputEffect(0)-&gt;determine...

&gt; WebCore/svg/graphics/filters/SVGFETile.cpp:82
&gt; +    matrix.translate(in-&gt;repaintRectInLocalCoordinates().x() - repaintRectInLocalCoordinates().x(), in-&gt;repaintRectInLocalCoordinates().y() - repaintRectInLocalCoordinates().y());

Use two lines here please, hard to read.


Almost there, good job Dirk!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281504</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 05:55:18 -0700</bug_when>
    <thetext>Thanks for the review. Great catches!

(In reply to comment #9)
&gt; Hm, I don&apos;t see why calculateDrawingIntRect and calculateDrawingRect are not similar at all.
&gt; I&apos;d expect that calculateDrawingIntRect == roundedIntRect(calculateDrawingRect).
&gt; 
&gt; Can you explain the difference? If there&apos;s an important difference, the functions have to be renamed, it looks confusing.
The first one is used to calculate the IntRect for getting the ImageData of a previous effect, the second one is to draw the result of a previous effect on top of the current effect&apos;s GraphicsContext.

Indeed the naming is bad and I plan to change it. But this is just the first cleanup patch in a row. Would like to fix it in another patch to reduce the size of this one.

&gt; 
&gt; calculateDrawingIntRect returns IntRect(roundedIntPoint(repaintRect.x() - effectRect.x(), repaintRect.y() - effectRect.y()), m_effectBuffer-&gt;size());
&gt; calculateDrawingRect returns FloatRect(FloatPoint(srcRect.x() - repaintRect.x(), srcRect.y() - repaintRect.y()), srcRect.size());
&gt; 
&gt; There is a difference that&apos;s not obvious to me from the naming of the functions.
See comment above, but like you can see: Int the first one we take our location and substract the location of the previous effect, and in the second one it&apos;s the other way arround.

&gt; 
&gt; &gt; WebCore/platform/graphics/filters/FilterEffect.h:52
&gt; &gt; +    GraphicsContext* getEffectContext();
&gt; 
&gt; s/getEffectContext/effectContext/ - we don&apos;t use the get prefix anywhere in WebKit (at least we shouldn&apos;t.)
Same as above, I already planned to fix it, but in another patch. It would be great to fix this naming together with calculateDrawingIntRect and calculateDrawingRect.

&gt; Is it possible to constify it? Didn&apos;t check.
No, the imageBuffer is created in this function.

&gt; 
&gt; &gt; WebCore/platform/graphics/filters/FilterEffect.h:54
&gt; &gt; +    FilterEffectVector&amp; inputEffects() { return m_inputEffects; }
&gt; 
&gt; Is this accessor still used somewhere?
inputEffects is used by the elements, to add the input effects.


Fixed all other issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281506</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 05:57:07 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Thanks for the review. Great catches!
&gt; 
&gt; (In reply to comment #9)
&gt; &gt; Hm, I don&apos;t see why calculateDrawingIntRect and calculateDrawingRect are not similar at all.
&gt; &gt; I&apos;d expect that calculateDrawingIntRect == roundedIntRect(calculateDrawingRect).
&gt; &gt; 
&gt; &gt; Can you explain the difference? If there&apos;s an important difference, the functions have to be renamed, it looks confusing.
&gt; The first one is used to calculate the IntRect for getting the ImageData of a previous effect, the second one is to draw the result of a previous effect on top of the current effect&apos;s GraphicsContext.
&gt; 
&gt; Indeed the naming is bad and I plan to change it. But this is just the first cleanup patch in a row. Would like to fix it in another patch to reduce the size of this one.
&gt; 
&gt; &gt; 
&gt; &gt; calculateDrawingIntRect returns IntRect(roundedIntPoint(repaintRect.x() - effectRect.x(), repaintRect.y() - effectRect.y()), m_effectBuffer-&gt;size());
&gt; &gt; calculateDrawingRect returns FloatRect(FloatPoint(srcRect.x() - repaintRect.x(), srcRect.y() - repaintRect.y()), srcRect.size());
&gt; &gt; 
&gt; &gt; There is a difference that&apos;s not obvious to me from the naming of the functions.
&gt; See comment above, but like you can see: Int the first one we take our location and substract the location of the previous effect, and in the second one it&apos;s the other way arround.
&gt; 

Btw, do you have an idea how to name the both functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281508</commentid>
    <comment_count>12</comment_count>
      <attachid>68072</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 06:11:39 -0700</bug_when>
    <thetext>Created attachment 68072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281525</commentid>
    <comment_count>13</comment_count>
      <attachid>68072</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-20 07:18:16 -0700</bug_when>
    <thetext>Comment on attachment 68072
Patch

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

&gt; WebCore/svg/graphics/filters/SVGFEOffset.cpp:34
&gt; +FEOffset::FEOffset(const float&amp; dx, const float&amp; dy)

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEOffset.cpp:41
&gt; +PassRefPtr&lt;FEOffset&gt; FEOffset::create(const float&amp; dx, const float&amp; dy)

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEOffset.h:33
&gt; +        static PassRefPtr&lt;FEOffset&gt; create(const float&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEOffset.h:46
&gt; +        FEOffset(const float&amp;, const float&amp;);

s/const float&amp;/float/

Looks good to me with these fixes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281533</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 07:40:21 -0700</bug_when>
    <thetext>Committed r67847: &lt;http://trac.webkit.org/changeset/67847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281585</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 09:06:19 -0700</bug_when>
    <thetext>Would like to add at least one more clean-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281852</commentid>
    <comment_count>16</comment_count>
      <attachid>68145</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-20 15:25:51 -0700</bug_when>
    <thetext>Created attachment 68145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282098</commentid>
    <comment_count>17</comment_count>
      <attachid>68145</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-20 22:15:12 -0700</bug_when>
    <thetext>Comment on attachment 68145
Patch

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

&gt; WebCore/platform/graphics/filters/FEBlend.h:33
&gt; +    FEBLEND_MODE_UNKNOWN  = 0,

Can you remove the whitespace before the =?

&gt; WebCore/platform/graphics/filters/FEColorMatrix.h:34
&gt; +    FECOLORMATRIX_TYPE_UNKNOWN          = 0,

Can you remove the whitespace before the =?

&gt; WebCore/platform/graphics/filters/FEComponentTransfer.h:34
&gt; +    FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0,

Can you remove the whitespace before the =?

&gt; WebCore/platform/graphics/filters/FEComponentTransfer.h:45
&gt; +        , slope(0.0f)

s/0.0f/0/

&gt; WebCore/platform/graphics/filters/FEComponentTransfer.h:67
&gt; +            const ComponentTransferFunction&amp;, const ComponentTransferFunction&amp;, const ComponentTransferFunction&amp;);

Move two transfer functions in one line and line up the &quot;const&quot; in the next line.
Also you should really provide a name :-) red/green/blue/alpha

&gt; WebCore/platform/graphics/filters/FEComposite.cpp:129
&gt;      FloatRect srcRect = FloatRect(0.f, 0.f, -1.f, -1.f);

FloatRect(0, 0, -1, -1)

&gt; WebCore/rendering/RenderTreeAsText.cpp:79
&gt; +    double epsilon = 0.0001;

This should be static const double s_epsilon. But I don&apos;t like these magic values. You want to use std::numeric_limits&lt;double&gt;::epsilon()?

&gt; WebCore/rendering/RenderTreeAsText.h:78
&gt; +    for (unsigned i = 0; i &lt; v.size(); i++) {

Cache v.size() in a local variable. Rename v to vector. Use ++i.

&gt; WebCore/rendering/SVGRenderTreeAsText.cpp:127
&gt;  static bool hasFractions(double val)

Can you remove hasFractions from here and reuse the one in TextStream?

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.h:33
&gt; +    CHANNEL_UNKNOWN = 0,

Can you remove the whitespace before the =?

&gt; WebCore/svg/graphics/filters/SVGFEDisplacementMap.h:42
&gt; +    static PassRefPtr&lt;FEDisplacementMap&gt; create(ChannelSelectorType, ChannelSelectorType, float);

Name these variables.

&gt; WebCore/svg/graphics/filters/SVGFEFlood.cpp:84
&gt; +    ts &lt;&lt; &quot; flood-color=\&quot;&quot; &lt;&lt; floodColor().name() &lt;&lt; &quot;\&quot; &quot;

Why is .name() needed now?

&gt; WebCore/svg/graphics/filters/SVGFEFlood.h:34
&gt; +    static PassRefPtr&lt;FEFlood&gt; create(const Color&amp;, const float&amp;);

s/const float&amp;/float/

&gt; WebCore/svg/graphics/filters/SVGFEImage.h:34
&gt; +    static PassRefPtr&lt;FEImage&gt; create(RefPtr&lt;Image&gt;, SVGPreserveAspectRatio);

Use const SVGPreserveAspectRatio&amp; here.
Why does it get a RefPtr&lt;Image&gt;, not a PassRefPtr?

&gt; WebCore/svg/graphics/filters/SVGFEMorphology.h:32
&gt; +    FEMORPHOLOGY_OPERATOR_UNKNOWN = 0,

Can you remove the whitespace before the =?

&gt; WebCore/svg/graphics/filters/SVGFEOffset.h:33
&gt; +    static PassRefPtr&lt;FEOffset&gt; create(float, float);

Name these variables.

Please fix these issues before landing, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282132</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 00:36:41 -0700</bug_when>
    <thetext>Committed r67929: &lt;http://trac.webkit.org/changeset/67929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282143</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-21 01:22:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67929 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/67929
http://trac.webkit.org/changeset/67930</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282154</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-21 02:21:59 -0700</bug_when>
    <thetext>Committed r67933: &lt;http://trac.webkit.org/changeset/67933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288831</commentid>
    <comment_count>21</comment_count>
      <attachid>68145</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-04 01:33:15 -0700</bug_when>
    <thetext>Comment on attachment 68145
Patch

Already committed. Clearing r-flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67336</attachid>
            <date>2010-09-12 08:07:57 -0700</date>
            <delta_ts>2010-09-16 01:33:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100912170755.patch</filename>
            <type>text/plain</type>
            <size>48558</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzMyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMTAtMDktMTIgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1NjEyCisKKyAgICAgICAgQ2xlYW51cCBvZiBGaWx0ZXJFZmZlY3QsIGRlbGV0ZWQg
dW5uZWNlc3NhcnkgbWVtYmVyIHZhcmlhYmxlcyBhbmQgZnVuY3Rpbm9zLgorICAgICAgICBSZW5h
bWVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRvIG1hdGNoIG5hbWUgc2NoZW1hIG9mIFNWRyBz
cGVjaWZpY2F0aW9uLgorICAgICAgICBNb3ZlIG1vcmUgY2FsY3VsYXRpb24gY29kZSB0byBTVkdG
aWx0ZXIuIFRoaXMgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
CisgICAgICAgIHdpdGggZm9sbG93dXBzLgorCisgICAgICAgIEp1c3QgYSBjbGVhbnVwLCBubyBu
ZXcgdGVzdCBhZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcDogVXNlIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGlu
c3RlYWQgb2Ygc2NhbGVkU3ViUmVnaW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6
IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDogZGl0
by4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDogZGl0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6IGRpdG8uCisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmg6IFJlbmFtZWQgY2FsY3VsYXRlRWZmZWN0UmVjdCB0byBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24uCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOiBVc2UgcmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMgaW5zdGVhZCBvZiBzY2FsZWRTdWJSZWdpb24uIAorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IG1lbWJlciB2
YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVVuaW9u
T2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCk6IEFkZGVkIGVhcmx5IHJldHVybiBpZiBu
byBJbWFnZUJ1ZmZlciB3YXMgY3JlYXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oOiAKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0RmlsdGVyUHJpbWl0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZpbHRlclByaW1pdGl2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDogVXNl
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGluc3RlYWQgb2Ygc2NhbGVkU3ViUmVnaW9u
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmlzU291cmNlSW5w
dXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHA6IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6aXNTb3VyY2VJbnB1dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcDogZGl0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpidWlsZFByaW1pdGl2ZXMpOiBEb24ndCBzZXQgcHJpbWl0aXZlIHByb3BlcnRpZXMgdG8g
RmlsdGVyRWZmZWN0LCBhc2sgZm9yIHRoZW0gZHVyaW5nIHN1YnJlZ2lvbiBjYWxjdWxhdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5jcHA6IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnByaW1pdHZlRWZmZWN0UmVnaW9uKToKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IFVzZSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcyBpbnN0ZWFkIG9mIHNjYWxlZFN1YlJlZ2lvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHA6IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRmxvb2QuY3BwOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkp
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOiBkaXRvLgor
ICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVy
Z2UuY3BwOiBkaXRvLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6dW5pdGVDaGlsZEVmZmVj
dFN1YnJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHkpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6IGRpdG8uCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpGRU9m
ZnNldDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5j
cHA6IGRpdG8uCisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnVuaXRlQ2hpbGRFZmZlY3RTdWJy
ZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6IFJlbmFtZWQgc29tZSB2YXJpYWJsZXMs
IGNvbXB1dGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBmcm9tIHByaW1pdGl2ZSBlbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzb3VyY2VJbWFn
ZVJlY3QpOgorCiAyMDEwLTA5LTEyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY1
LDEwICs5NjUsMTAgQEAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBHcmFwaGljcwog
ICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlciA9IEltYWdlQnVmZmVyRmlsdGVyOjpjcmVhdGUoKTsK
ICAgICBmaWx0ZXItPnNldFNvdXJjZUltYWdlKGJ1ZmZlcik7CiAgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gc291cmNlID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7Ci0gICAgc291cmNlLT5zZXRT
Y2FsZWRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkp
KTsKKyAgICBzb3VyY2UtPnNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHNoYWRvd1JlY3Quc2l6ZSgpKSk7CiAgICAgc291cmNlLT5zZXRJc0Fs
cGhhSW1hZ2UodHJ1ZSk7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYmx1ciA9IEZFR2F1c3Np
YW5CbHVyOjpjcmVhdGUoc291cmNlLmdldCgpLCBzZCwgc2QpOwotICAgIGJsdXItPnNldFNjYWxl
ZFN1YlJlZ2lvbihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOwor
ICAgIGJsdXItPnNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHNoYWRvd1JlY3Quc2l6ZSgpKSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdl
dCgpKTsKICAgICByZXR1cm4gYmx1ci0+cmVzdWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZTsK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMCArMTExLDEwIEBAIHZv
aWQgRkVCbGVuZDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgaWYgKCFnZXRFZmZlY3RDb250
ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOworICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9p
bi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgUmVmUHRyPENhbnZhc1Bp
eGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAotICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnNj
YWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIobV9pbjItPnJl
c3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0
KS0+ZGF0YSgpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlKCktPnNpemUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBm
aWx0ZXIKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkp
OworICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEocmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVj
dCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFw
cGx5KEZpbHRlciogCiAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7
IGNoYW5uZWwrKykKICAgICAgICAgKCpjYWxsRWZmZWN0W3RyYW5zZmVyRnVuY3Rpb25bY2hhbm5l
bF0udHlwZV0pKHRhYmxlc1tjaGFubmVsXSwgdHJhbnNmZXJGdW5jdGlvbltjaGFubmVsXSk7CiAK
LSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpOworICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVE
cmF3aW5nSW50UmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGRyYXdpbmdSZWN0KSk7CiAgICAgQ2FudmFzUGl4ZWxBcnJheSog
c3JjUGl4ZWxBcnJheShpbWFnZURhdGEtPmRhdGEoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNjcz
MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMzIgKzEzMSwzMiBAQCB2b2lkIEZFQ29tcG9zaXRlOjph
cHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LmYsIDAuZiwgLTEuZiwgLTEuZik7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRl
RHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CiAgICAgICAgIGZp
bHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VC
dWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5z
Y2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2lu
Z1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
Y2xpcFRvSW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VD
b2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdElt
YWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2Fs
ZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3Qs
IENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0
LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9u
KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3Vs
dEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9p
bi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0
ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQzogewotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0
ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICAgICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IHNyY1BpeGVsQXJyYXlBKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5z
Y2FsZWRTdWJSZWdpb24oKSk7CisgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0g
Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpOwogICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEobV9pbjItPnJlc3Vs
dEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KSk7
CiAgICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXlCKGltYWdlRGF0YS0+ZGF0
YSgpKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0ZXIqIGZpbHRl
CiAKICAgICBzZXRJc0FscGhhSW1hZ2UobV9pbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3Vs
YXRlRHJhd2luZ0ludFJlY3QobV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7
CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCkt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBJbnRS
ZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCShyZXZpc2lvbiA2
NzMxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKIAogICAgICAgICAv
LyBTVkcgc3BlY2lmaWMKLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUVmZmVjdFN1YlJl
Z2lvbihGaWx0ZXJFZmZlY3QqKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBjb25zdCBGbG9hdFJlY3QmKSB7
IH0KIAogICAgICAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBtYXhJbWFnZVNpemUoKSBjb25zdCA9IDA7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBjb25zdCA9IDA7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KCkK
LSAgICA6IG1faGFzWChmYWxzZSkKLSAgICAsIG1faGFzWShmYWxzZSkKLSAgICAsIG1faGFzV2lk
dGgoZmFsc2UpCi0gICAgLCBtX2hhc0hlaWdodChmYWxzZSkKLSAgICAsIG1fYWxwaGFJbWFnZShm
YWxzZSkKKyAgICA6IG1fYWxwaGFJbWFnZShmYWxzZSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICwg
bV9maWx0ZXJQcmltaXRpdmVFbGVtZW50KDApCisjZW5kaWYKIHsKIH0KIApAQCAtMzksNDIgKzM4
LDQ0IEBAIEZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpCiAKIEZsb2F0UmVjdCBGaWx0ZXJF
ZmZlY3Q6OmNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0
ZXIsIEZpbHRlckVmZmVjdCogaW4pCiB7Ci0gICAgcmV0dXJuIGluLT5jYWxjdWxhdGVFZmZlY3RS
ZWN0KGZpbHRlcik7CisgICAgcmV0dXJuIGluLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oZmlsdGVyKTsKIH0KIAogRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlVW5p
b25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlciwgRmlsdGVyRWZmZWN0KiBp
biwgRmlsdGVyRWZmZWN0KiBpbjIpCiB7Ci0gICAgRmxvYXRSZWN0IHVuaXRlRWZmZWN0UmVjdCA9
IGluLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlcik7Ci0gICAgdW5pdGVFZmZlY3RSZWN0LnVu
aXRlKGluMi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpKTsKKyAgICBGbG9hdFJlY3QgdW5p
dGVFZmZlY3RSZWN0ID0gaW4tPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0
ZXIpOworICAgIHVuaXRlRWZmZWN0UmVjdC51bml0ZShpbjItPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbihmaWx0ZXIpKTsKICAgICByZXR1cm4gdW5pdGVFZmZlY3RSZWN0OwogfQog
Ci1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciogZmls
dGVyKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKEZpbHRlciogZmlsdGVyKQogewotICAgIHNldFVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJl
Z2lvbnModW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyKSk7Ci0gICAgZmlsdGVyLT5j
YWxjdWxhdGVFZmZlY3RTdWJSZWdpb24odGhpcyk7Ci0gICAgcmV0dXJuIHN1YlJlZ2lvbigpOwor
ICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIHVuaXRl
Q2hpbGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlcikpOworICAgIHJldHVybiBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKIH0KIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdp
bmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKIHsKLSAgICBJbnRQb2ludCBs
b2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHNjYWxlZFN1YlJlZ2lvbigpLngo
KSAtIGVmZmVjdFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGVkU3ViUmVnaW9uKCkueSgpIC0gZWZmZWN0UmVjdC55KCkpKTsK
KyAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpIC0gZWZmZWN0UmVjdC54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLnkoKSAtIGVmZmVjdFJlY3QueSgpKSk7CiAgICAgcmV0dXJuIElu
dFJlY3QobG9jYXRpb24sIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiB9CiAKIEZsb2F0UmVjdCBG
aWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCkKIHsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHNyY1JlY3QueCgp
IC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLCBzcmNSZWN0LnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigp
LnkoKSk7CisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2ludChzcmNSZWN0Lngo
KSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLCBzcmNSZWN0LnkoKSAtIHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlY3QgPSBGbG9hdFJlY3Qoc3RhcnRQb2ludCwgc3JjUmVjdC5zaXplKCkpOwogICAgIHJldHVy
biBkcmF3aW5nUmVjdDsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZlY3Q6OmdldEVm
ZmVjdENvbnRleHQoKQogewotICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3Qoc2NhbGVkU3ViUmVnaW9uKCkpOworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgbV9lZmZlY3RC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBMaW5lYXJSR0Ip
OwotICAgIHJldHVybiBtX2VmZmVjdEJ1ZmZlci0+Y29udGV4dCgpOworICAgIGlmIChtX2VmZmVj
dEJ1ZmZlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLT5jb250ZXh0KCk7
CisKKyAgICByZXR1cm4gMDsKIH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lv
biA2NzMxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsODIgKzM0LDczIEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgRU5BQkxFKFNWRykKK2NsYXNzIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczsKKyNlbmRpZgogCi0gICAgY2xhc3Mg
RmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7Ci0gICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKK2NsYXNzIEZpbHRlckVmZmVj
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVmZmVjdD4geworcHVibGljOgorICAgIHZpcnR1
YWwgfkZpbHRlckVmZmVjdCgpOwogCi0gICAgICAgIHZvaWQgc2V0VW5pb25PZkNoaWxkRWZmZWN0
U3VicmVnaW9ucyhjb25zdCBGbG9hdFJlY3QmIHVuaXRlUmVjdCkgeyBtX3VuaW9uT2ZDaGlsZEVm
ZmVjdFN1YnJlZ2lvbnMgPSB1bml0ZVJlY3Q7IH0KLSAgICAgICAgRmxvYXRSZWN0IHVuaW9uT2ZD
aGlsZEVmZmVjdFN1YnJlZ2lvbnMoKSBjb25zdCB7IHJldHVybiBtX3VuaW9uT2ZDaGlsZEVmZmVj
dFN1YnJlZ2lvbnM7IH0KKyAgICAvLyBUaGUgcmVzdWx0IGlzIGJvdW5kZWQgdG8gdGhlIHNpemUg
b2YgdGhlIGZpbHRlciBwcmltaXRpdmUgdG8gc2F2ZSByZXNvdXJjZXMuCisgICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlKCkgeyByZXR1cm4gbV9lZmZlY3RCdWZmZXIuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIp
IHsgbV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KIAotICAgICAgICBGbG9hdFJlY3Qg
c3ViUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdWJSZWdpb247IH0KLSAgICAgICAgdm9pZCBz
ZXRTdWJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBzdWJSZWdpb24pIHsgbV9zdWJSZWdpb24gPSBz
dWJSZWdpb247IH0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIHVuaXRlIG9mIG9uZSBvciB0d28gcHJl
dmlvdXMgZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgorICAgIEZsb2F0UmVjdCBjYWxjdWxh
dGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciosIEZpbHRlckVmZmVjdCosIEZp
bHRlckVmZmVjdCopOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RT
dWJyZWdpb25zKEZpbHRlciosIEZpbHRlckVmZmVjdCopOwogCi0gICAgICAgIEZsb2F0UmVjdCBz
Y2FsZWRTdWJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFN1YlJlZ2lvbjsgfQotICAg
ICAgICB2b2lkIHNldFNjYWxlZFN1YlJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHNjYWxlZFN1YlJl
Z2lvbikgeyBtX3NjYWxlZFN1YlJlZ2lvbiA9IHNjYWxlZFN1YlJlZ2lvbjsgfQorICAgIC8vIENy
ZWF0ZXMgdGhlIEltYWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJl
c3VsdCBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0
aGUgR3JhcGhpY3NDb250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCisgICAgR3JhcGhpY3ND
b250ZXh0KiBnZXRFZmZlY3RDb250ZXh0KCk7CiAKLSAgICAgICAgRmxvYXRSZWN0IGVmZmVjdEJv
dW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAgICAg
dm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmll
cykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEludFJlY3Qg
Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICAgICAgYm9v
bCBoYXNYKCkgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzWChib29sIHZh
bHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9CisgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBk
aWZmZXJlbnQgYWxwaGEgdmFsdWVzLgorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgeyByZXR1cm4g
bV9hbHBoYUltYWdlOyB9CisgICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdl
KSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KIAotICAgICAgICBib29sIGhhc1koKSB7
IHJldHVybiBtX2hhc1k7IH0KLSAgICAgICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUpIHsgbV9o
YXNZID0gdmFsdWU7IH0KKyNpZiBFTkFCTEUoU1ZHKQorICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0
aXZlRWxlbWVudChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGZpbHRlclBy
aW1pdGl2ZUVsZW1lbnQpIHsgbV9maWx0ZXJQcmltaXRpdmVFbGVtZW50ID0gZmlsdGVyUHJpbWl0
aXZlRWxlbWVudDsgfQorICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyog
ZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpIHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlRWxlbWVu
dDsgfQorI2VuZGlmCiAKLSAgICAgICAgYm9vbCBoYXNXaWR0aCgpIHsgcmV0dXJuIG1faGFzV2lk
dGg7IH0KLSAgICAgICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFzV2lkdGgg
PSB2YWx1ZTsgfQorICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSB7IHJl
dHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
OyB9CiAKLSAgICAgICAgYm9vbCBoYXNIZWlnaHQoKSB7IHJldHVybiBtX2hhc0hlaWdodDsgfQot
ICAgICAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFs
dWU7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSB7IHJl
dHVybiBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzOyB9CisgICAgdm9pZCBzZXRSZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKSB7IG1fcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgPSByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlczsgfQogCi0gICAgICAgIC8vIFRoZSByZXN1bHQgaXMg
Ym91bmRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZSB0byBzYXZlIHJlc291
cmNlcwotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UoKSB7IHJldHVybiBtX2VmZmVj
dEJ1ZmZlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldEVmZmVjdEJ1ZmZlcihQYXNzT3duUHRy
PEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsgbV9lZmZlY3RCdWZmZXIgPSBlZmZlY3RCdWZm
ZXI7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhG
aWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsgfQorICAgIHZp
cnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIq
KTsKIAotICAgICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVn
aW9ucyhGaWx0ZXIqLCBGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqKTsKLSAgICAgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiwgRmls
dGVyRWZmZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpID0gMDsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQqIGdldEVm
ZmVjdENvbnRleHQoKTsKLSAgICAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgICAgICBJbnRSZWN0IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICAvLyBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBh
bHBoYSB2YWx1ZXMKLSAgICAgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSB7IHJldHVybiBtX2FscGhh
SW1hZ2U7IH0KLSAgICAgICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7
IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBjb25z
dDsKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJFZmZlY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1
cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsgfQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBj
YWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
RmlsdGVyKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpID0gMDsKK3ByaXZhdGU6
CisgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOwogCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIG1fYWxwaGFJbWFnZTsKIAotICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBjb25zdDsKLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEZpbHRlckVmZmVjdCgpOworICAgIC8vIEZJWE1FOiBTaG91
bGQgYmUgdGhlIHBhaW50IHJlZ2lvbiBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZSwgaW5zdGVhZCBv
ZiB0aGUgc2NhbGVkIHN1YnJlZ2lvbiBvbiB1c2Ugb2YgZmlsdGVyUmVzLgorICAgIEZsb2F0UmVj
dCBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzOwogCi0gICAgcHJpdmF0ZToKKyAgICAv
LyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNW
RyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KKyAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICAgICAgYm9vbCBtX3hCQm94TW9k
ZSA6IDE7Ci0gICAgICAgIGJvb2wgbV95QkJveE1vZGUgOiAxOwotICAgICAgICBib29sIG1fd2lk
dGhCQm94TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgbV9oZWlnaHRCQm94TW9kZSA6IDE7Ci0KLSAg
ICAgICAgYm9vbCBtX2hhc1ggOiAxOwotICAgICAgICBib29sIG1faGFzWSA6IDE7Ci0gICAgICAg
IGJvb2wgbV9oYXNXaWR0aCA6IDE7Ci0gICAgICAgIGJvb2wgbV9oYXNIZWlnaHQgOiAxOwotCi0g
ICAgICAgIGJvb2wgbV9hbHBoYUltYWdlOwotCi0gICAgICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJv
dW5kYXJpZXM7Ci0gICAgICAgIEZsb2F0UmVjdCBtX3N1YlJlZ2lvbjsKLSAgICAgICAgRmxvYXRS
ZWN0IG1fc2NhbGVkU3ViUmVnaW9uOwotICAgICAgICBGbG9hdFJlY3QgbV91bmlvbk9mQ2hpbGRF
ZmZlY3RTdWJyZWdpb25zOwotCi0gICAgICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2VmZmVjdEJ1ZmZlcjsKLSAgICB9OworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gVE9ETzogQ2Fu
IGJlIHJlbW92ZWQgb25jZSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSBpcyByZXNw
b25zaWJsZSBmb3IgdGhlIGxheW91dCBvZgorICAgIC8vIFNWRyBmaWx0ZXIgcHJpbWl0aXZlcy4g
U2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQuCisg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBtX2ZpbHRlclByaW1pdGl2
ZUVsZW1lbnQ7CisjZW5kaWYKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE2ICs0MiwxNiBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKIH0KIAotRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRl
ciogZmlsdGVyKQorRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IGNsaXBwZWRTb3Vy
Y2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKICAgICBpZiAoZmlsdGVyLT5zb3Vy
Y2VJbWFnZVJlY3QoKS54KCkgPCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSkKICAgICAgICAg
Y2xpcHBlZFNvdXJjZVJlY3Quc2V0WChmaWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSk7CiAgICAg
aWYgKGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCkueSgpIDwgZmlsdGVyLT5maWx0ZXJSZWdpb24o
KS55KCkpCiAgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LnNldFkoZmlsdGVyLT5maWx0ZXJSZWdp
b24oKS55KCkpOwotICAgIHNldFN1YlJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CisgICAgc2V0
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICBjbGlwcGVk
U291cmNlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0
ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgc2V0U2NhbGVkU3ViUmVnaW9u
KGNsaXBwZWRTb3VyY2VSZWN0KTsKKyAgICBzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyhjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5oCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGVmZmVjdE5hbWUoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsg
cmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0
UmVjdChGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAgICAgdm9p
ZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nv
dXJjZUlucHV0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CiAgICAgCiAgICAgcHJp
dmF0ZToKICAgICAgICAgU291cmNlQWxwaGEoKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHJldmlzaW9uIDY3
MzE3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNiArNDEsMTYgQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBTb3VyY2VHcmFwaGljOjplZmZlYwogICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLUZs
b2F0UmVjdCBTb3VyY2VHcmFwaGljOjpjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciogZmlsdGVy
KQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBGbG9hdFJlY3QgY2xpcHBlZFNvdXJjZVJlY3Qg
PSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwogICAgIGlmIChmaWx0ZXItPnNvdXJjZUltYWdl
UmVjdCgpLngoKSA8IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueCgpKQogICAgICAgICBjbGlwcGVk
U291cmNlUmVjdC5zZXRYKGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueCgpKTsKICAgICBpZiAoZmls
dGVyLT5zb3VyY2VJbWFnZVJlY3QoKS55KCkgPCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpLnkoKSkK
ICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0WShmaWx0ZXItPmZpbHRlclJlZ2lvbigpLnko
KSk7Ci0gICAgc2V0U3ViUmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsKKyAgICBzZXRGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOwogICAgIGNsaXBwZWRTb3VyY2VS
ZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRTY2FsZWRTdWJSZWdpb24oY2xpcHBl
ZFNvdXJjZVJlY3QpOworICAgIHNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKGNsaXBw
ZWRTb3VyY2VSZWN0KTsKICAgICByZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5oCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVFZmZlY3RS
ZWN0KEZpbHRlciopOwogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lk
IGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0gICAgCisKKyAgICAgICAgdmlydHVhbCBib29s
IGlzU291cmNlSW5wdXQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqKTsKICAgICBwcml2
YXRlOgogICAgICAgICBTb3VyY2VHcmFwaGljKCkgeyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDY3MzE3
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSwxNyArODksMTQgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cmVtb3ZlQ2xpZQogCiBQYXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoKQogewotICAgIFNWR0ZpbHRlckVsZW1lbnQq
IGZpbHRlckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQtPnByaW1p
dGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YOwotCiAgICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKICAgICBSZWZQdHI8U1ZH
RmlsdGVyQnVpbGRlcj4gYnVpbGRlciA9IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZSgpOwogICAg
IGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpbHRlckVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsK
LSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICBmb3IgKE5vZGUqIHByaW1p
dGl2ZU5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgcHJpbWl0aXZlTm9kZTsgcHJpbWl0aXZl
Tm9kZSA9IHByaW1pdGl2ZU5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFwcmlt
aXRpdmVOb2RlLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7
CisgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
cHJpbWl0aXZlTm9kZSk7CiAgICAgICAgIGlmICghZWxlbWVudC0+aXNGaWx0ZXJFZmZlY3QoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDksNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxT
VkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZQogICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJF
ZmZlY3RzKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlZmZl
Y3RFbGVtZW50LT5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMocHJpbWl0aXZlQm91bmRpbmdCb3hNb2Rl
LCBlZmZlY3QuZ2V0KCkpOworICAgICAgICBlZmZlY3QtPnNldEZpbHRlclByaW1pdGl2ZUVsZW1l
bnQoZWZmZWN0RWxlbWVudCk7CiAgICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LT5y
ZXN1bHQoKSwgZWZmZWN0KTsKICAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIucmVsZWFzZSgpOwpA
QCAtMTkzLDEyICsxOTAsMTIgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlS
ZXNvdQogICAgIGlmICghbGFzdEVmZmVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGxhc3RFZmZlY3QtPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyRGF0YS0+ZmlsdGVyLmdl
dCgpKTsKKyAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
ZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZm
ZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZm
ZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCiAgICAgaWYgKCFmaXRzSW5NYXhpbXVt
SW1hZ2VTaXplKGZpbHRlckRhdGEtPmZpbHRlci0+bWF4SW1hZ2VTaXplKCksIHNjYWxlKSkgewog
ICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwot
ICAgICAgICBsYXN0RWZmZWN0LT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlckRhdGEtPmZpbHRl
ci5nZXQoKSk7CisgICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIGNsaXBwZWRT
b3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKQEAgLTI1NSw3
ICsyNTIsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSCiAKICAg
ICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZm
ZWN0KCk7CiAgICAgCi0gICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRhdGEtPmJvdW5kYXJp
ZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5zdWJSZWdpb24oKS5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYg
IWxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0
IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcg
cHJvY2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCiAgICAg
ICAgIC8vIHNlY29uZCBkcmF3aW5nLgpAQCAtMjcyLDcgKzI2OSw3IEBAIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKIAogICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpOwogICAgICAgICBpZiAocmVzdWx0SW1h
Z2UpCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9i
amVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+
c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKSk7CiAgICAgfQogCiAgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci5jbGVh
cigpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NywzNCArMTA3LDE3IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUK
ICAgICAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGJvb2wgcHJpbWl0aXZlQm91bmRp
bmdCb3hNb2RlLCBGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnByaW1pdHZlRWZmZWN0UmVnaW9u
KGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSBjb25zdAogewotICAgIEFTU0VSVChmaWx0
ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAodGhpcy0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRl
ckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAodGhpcy0+aGFzQXR0cmlidXRlKFNWR05h
bWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBp
ZiAodGhpcy0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmICh0aGlzLT5oYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdo
dCh0cnVlKTsKLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCQm94OwogICAgIGlmIChwcmltaXRpdmVC
b3VuZGluZ0JveE1vZGUpCi0gICAgICAgIGVmZmVjdEJCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVl
QXNQZXJjZW50YWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVl
QXNQZXJjZW50YWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52
YWx1ZUFzUGVyY2VudGFnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwotICAgIGVsc2UKLSAgICAgICAgZWZmZWN0QkJveCA9
IEZsb2F0UmVjdCh4KCkudmFsdWUodGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeSgpLnZhbHVlKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
KCkudmFsdWUodGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCku
dmFsdWUodGhpcykpOwotCi0gICAgZmlsdGVyRWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKGVm
ZmVjdEJCb3gpOworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFn
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAg
ICByZXR1cm4gRmxvYXRSZWN0KHgoKS52YWx1ZSh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAg
IHkoKS52YWx1ZSh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkudmFsdWUodGhp
cyksCisgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7CiB9CiAKIFJl
bmRlck9iamVjdCogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZp
c2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIDogcHVi
bGljIFNWR1N0eWxlZEVsZW1lbnQgewogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRy
aWJ1dGVzKGJvb2wsIEZpbHRlckVmZmVjdCopIGNvbnN0OworICAgIEZsb2F0UmVjdCBwcmltaXR2
ZUVmZmVjdFJlZ2lvbihib29sKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqKSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAko
cmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29u
dm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNyArMzgyLDcgQEAgdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbAogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCht
X2luLT5zdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKIAog
ICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5OwogICAgIGlmIChtX3By
ZXNlcnZlQWxwaGEpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlz
cGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTMsMTAgKzkzLDEwIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZp
bHRlciogZmkKICAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVj
dChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1Jl
Y3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEo
bV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJh
d2luZ1JlY3QpLT5kYXRhKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBj
YWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpOworICAgIElu
dFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjIt
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxDYW52YXNQaXhl
bEFycmF5PiBzcmNQaXhlbEFycmF5QihtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAKICAgICBJbnRSZWN0
IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA2NzMx
NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBGRUZsb29kOjphcHBseShGaWx0ZXIqKQog
ICAgICAgICByZXR1cm47CiAKICAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxw
aGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0gICAgZmlsdGVyQ29udGV4
dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2NhbGVkU3ViUmVnaW9uKCkuc2l6
ZSgpKSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOworICAgIGZpbHRlckNvbnRleHQtPmZpbGxS
ZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkuc2l6ZSgpKSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogfQogCiB2b2lkIEZFRmxvb2Q6
OmR1bXAoKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBGRUltYWdl
OjphcHBseShGaWx0ZXIqKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVj
dChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0
KEZsb2F0UG9pbnQoKSwgc3ViUmVnaW9uKCkuc2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJl
Y3QoRmxvYXRQb2ludCgpLCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOwogCiAg
ICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3Qp
OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGlu
Zy5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQg
RkVMaWdodGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBzZXRJc0FscGhhSW1hZ2Uo
ZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdp
bmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKG1f
aW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5n
UmVjdCkpOwogICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1hZ2VEYXRh
LT5kYXRhKCkpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVy
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVN
ZXJnZS5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTAgKzU1LDEwIEBAIEZsb2F0
UmVjdCBGRU1lcmdlOjp1bml0ZUNoaWxkRWZmZWN0U3VicmUKIHsKICAgICBBU1NFUlQoIW1fbWVy
Z2VJbnB1dHMuaXNFbXB0eSgpKTsKIAotICAgIEZsb2F0UmVjdCB1bml0ZUVmZmVjdFJlY3QgPSBt
X21lcmdlSW5wdXRzWzBdLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlcik7CisgICAgRmxvYXRS
ZWN0IHVuaXRlRWZmZWN0UmVjdCA9IG1fbWVyZ2VJbnB1dHNbMF0tPmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHVuaXRlRWZmZWN0UmVjdC51bml0
ZShtX21lcmdlSW5wdXRzW2ldLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlcikpOworICAgICAg
ICB1bml0ZUVmZmVjdFJlY3QudW5pdGUobV9tZXJnZUlucHV0c1tpXS0+ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcikpOwogCiAgICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVj
dDsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBGRU1lcmdlOjphcHBseShGaWx0ZXIqIGZpbHRl
cikKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVy
Z2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkpOwor
ICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX21lcmdl
SW5wdXRzW2ldLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbWVyZ2VJbnB1dHNbaV0tPnJlc3VsdEltYWdl
KCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0KTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lv
biA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgaW1h
Z2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1
YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJh
d2luZ0ludFJlY3QobV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAg
UmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkobV9pbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7
CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1h
Z2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA2NzMxNykKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NiwxMCArODYsMTAgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0
ZXIpCiAgICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOwogICAg
IG1fZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CiAKLSAgICBGbG9h
dFJlY3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCku
eCgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZHkgKyBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJSZWdp
b24oKS55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVk
U3ViUmVnaW9uKCkud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luLT5zY2FsZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGRzdFJlY3Qg
PSBGbG9hdFJlY3QobV9keCArIG1faW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCku
eCgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9keSArIG1faW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0KCkpOwogCiAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNv
bG9yU3BhY2UsIGRzdFJlY3QpOwogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVUaWxlLmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
UGFzc1JlZlB0cjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlcgogCiBGbG9hdFJlY3QgRkVU
aWxlOjp1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBt
X2luLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlcik7CisgICAgbV9pbi0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CiAgICAgcmV0dXJuIGZpbHRlci0+ZmlsdGVy
UmVnaW9uKCk7CiB9CiAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogCiAgICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxwaGFJbWFnZSgpKTsK
IAotICAgIEludFJlY3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1
YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2lu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKIAogICAgIC8vIFNvdXJjZSBpbnB1
dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdp
b24gYnV0IGdpdmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBi
YWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4K
QEAgLTc2LDExICs3NiwxMSBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAg
ICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLT5j
b3B5SW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4Owot
ICAgIG1hdHJpeC50cmFuc2xhdGUobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gc2NhbGVk
U3ViUmVnaW9uKCkueCgpLCBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJS
ZWdpb24oKS55KCkpOworICAgIG1hdHJpeC50cmFuc2xhdGUobV9pbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngo
KSwgbV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLnkoKSk7CiAgICAgcGF0dGVybi5nZXQoKS0+c2V0UGF0dGVy
blNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CiAKICAgICBmaWx0ZXJDb250ZXh0LT5zZXRGaWxsUGF0
dGVybihwYXR0ZXJuKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBzY2FsZWRTdWJSZWdpb24oKS5zaXplKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0
LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpLnNpemUoKSkpOwogfQogCiB2b2lkIEZFVGlsZTo6ZHVtcCgpCkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCShyZXZpc2lvbiA2NzMxNykK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNjMgKzIxLDcwIEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0
ZXI6OlNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKICAgICA6IEZpbHRlcigpCi0gICAgLCBtX2l0ZW1C
b3goaXRlbUJveCkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gp
CiAgICAgLCBtX2ZpbHRlclJlY3QoZmlsdGVyUmVjdCkKICAgICAsIG1fZWZmZWN0QkJveE1vZGUo
ZWZmZWN0QkJveE1vZGUpCiB7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyOjpjYWxjdWxhdGVFZmZlY3RT
dWJSZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlcjo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMpCiB7Ci0gICAgRmxvYXRS
ZWN0IHN1YlJlZ2lvbkJCb3ggPSBlZmZlY3QtPmVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBGbG9h
dFJlY3QgdXNlQkJveCA9IGVmZmVjdC0+dW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucygpOwor
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZl
RWxlbWVudCA9IGVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpOworICAgIEFTU0VSVChm
aWx0ZXJQcmltaXRpdmVFbGVtZW50KTsKKworICAgIEZsb2F0UmVjdCBzdWJSZWdpb25CQm94ID0g
ZmlsdGVyUHJpbWl0aXZlRWxlbWVudC0+cHJpbWl0dmVFZmZlY3RSZWdpb24obV9lZmZlY3RCQm94
TW9kZSk7CiAgICAgRmxvYXRSZWN0IG5ld1N1YlJlZ2lvbiA9IHN1YlJlZ2lvbkJCb3g7CiAKICAg
ICBpZiAobV9lZmZlY3RCQm94TW9kZSkgewotICAgICAgICBuZXdTdWJSZWdpb24gPSB1c2VCQm94
OworICAgICAgICBuZXdTdWJSZWdpb24gPSB1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdp
b25zOwogCi0gICAgICAgIGlmIChlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJl
Z2lvbi5zZXRYKG1faXRlbUJveC54KCkgKyBzdWJSZWdpb25CQm94LngoKSAqIG1faXRlbUJveC53
aWR0aCgpKTsKKyAgICAgICAgaWYgKGZpbHRlclByaW1pdGl2ZUVsZW1lbnQtPmhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6eEF0dHIpKQorICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFgobV90YXJn
ZXRCb3VuZGluZ0JveC54KCkgKyBzdWJSZWdpb25CQm94LngoKSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3gud2lkdGgoKSk7CiAKLSAgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQotICAgICAgICAgICAg
bmV3U3ViUmVnaW9uLnNldFkobV9pdGVtQm94LnkoKSArIHN1YlJlZ2lvbkJCb3gueSgpICogbV9p
dGVtQm94LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGZpbHRlclByaW1pdGl2ZUVsZW1lbnQtPmhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNl
dFkobV90YXJnZXRCb3VuZGluZ0JveC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1fdGFyZ2V0
Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogCi0gICAgICAgIGlmIChlZmZlY3QtPmhhc1dpZHRoKCkp
Ci0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0V2lkdGgoc3ViUmVnaW9uQkJveC53aWR0aCgp
ICogbV9pdGVtQm94LndpZHRoKCkpOworICAgICAgICBpZiAoZmlsdGVyUHJpbWl0aXZlRWxlbWVu
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICAgICAgbmV3U3Vi
UmVnaW9uLnNldFdpZHRoKHN1YlJlZ2lvbkJCb3gud2lkdGgoKSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3gud2lkdGgoKSk7CiAKLSAgICAgICAgaWYgKGVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAg
ICAgICBuZXdTdWJSZWdpb24uc2V0SGVpZ2h0KHN1YlJlZ2lvbkJCb3guaGVpZ2h0KCkgKiBtX2l0
ZW1Cb3guaGVpZ2h0KCkpOworICAgICAgICBpZiAoZmlsdGVyUHJpbWl0aXZlRWxlbWVudC0+aGFz
QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lv
bi5zZXRIZWlnaHQoc3ViUmVnaW9uQkJveC5oZWlnaHQoKSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3gu
aGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZWZmZWN0LT5oYXNYKCkpCi0g
ICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WCh1c2VCQm94LngoKSk7CisgICAgICAgIGlmICgh
ZmlsdGVyUHJpbWl0aXZlRWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCisg
ICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WCh1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJy
ZWdpb25zLngoKSk7CiAKLSAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAg
IG5ld1N1YlJlZ2lvbi5zZXRZKHVzZUJCb3gueSgpKTsKKyAgICAgICAgaWYgKCFmaWx0ZXJQcmlt
aXRpdmVFbGVtZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKKyAgICAgICAgICAg
IG5ld1N1YlJlZ2lvbi5zZXRZKHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMueSgp
KTsKIAotICAgICAgICBpZiAoIWVmZmVjdC0+aGFzV2lkdGgoKSkKLSAgICAgICAgICAgIG5ld1N1
YlJlZ2lvbi5zZXRXaWR0aCh1c2VCQm94LndpZHRoKCkpOworICAgICAgICBpZiAoIWZpbHRlclBy
aW1pdGl2ZUVsZW1lbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKKyAgICAg
ICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRXaWR0aCh1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJy
ZWdpb25zLndpZHRoKCkpOwogCi0gICAgICAgIGlmICghZWZmZWN0LT5oYXNIZWlnaHQoKSkKLSAg
ICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRIZWlnaHQodXNlQkJveC5oZWlnaHQoKSk7CisgICAg
ICAgIGlmICghZmlsdGVyUHJpbWl0aXZlRWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpo
ZWlnaHRBdHRyKSkKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRIZWlnaHQodW5pb25PZlBy
ZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgLy8gY2xp
cCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uCiAgICAgbmV3U3ViUmVn
aW9uLmludGVyc2VjdChtX2ZpbHRlclJlY3QpOwogCi0gICAgZWZmZWN0LT5zZXRTdWJSZWdpb24o
bmV3U3ViUmVnaW9uKTsKKyAgICBlZmZlY3QtPnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihu
ZXdTdWJSZWdpb24pOworICAgIAorICAgIC8vIFRPRE86IEV2ZXJ5dGhpbmcgYWJvdmUgc2hvdWxk
IGJlIG1vdmVkIHRvIGEgZmlyc3QgcGhhc2Ugb2YgbGF5b3V0IGluIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLgorICAgIC8vIFRoZSBzY2FsaW5nIG9mIHRoZSBzdWJyZWdpb24gdG8g
dGhlIHJlcGFpbnQgcmVjdCBzaG91bGQgYmUgbWVyZ2VkIHdpdGggYSBtb3JlIGludGVsbGlnZW50
IHJlcGFpbnQgbG9naWMKKyAgICAvLyBhbmQgbW92ZWQgdG8gdGhlIHNlY29uZCBwaGFzZSBvZiBs
YXlvdXQgaW4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCiAgICAgbmV3U3ViUmVn
aW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwotICAgIGVmZmVjdC0+c2V0U2NhbGVkU3ViUmVnaW9uKG5ld1N1YlJlZ2lvbik7
CisgICAgZWZmZWN0LT5zZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhuZXdTdWJSZWdp
b24pOwogICAgIG1fbWF4SW1hZ2VTaXplID0gbV9tYXhJbWFnZVNpemUuZXhwYW5kZWRUbyhuZXdT
dWJSZWdpb24uc2l6ZSgpKTsgCiB9CiAKLVBhc3NSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6
OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1Bhc3NSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0
ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1vZGUpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdGaWx0ZXIoaXRlbUJveCwgZmlsdGVyUmVjdCwgZWZmZWN0QkJveE1vZGUp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcih0YXJnZXRCb3VuZGluZ0JveCwg
ZmlsdGVyUmVjdCwgZWZmZWN0QkJveE1vZGUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCShyZXZpc2lv
biA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDE2ICszOSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2VmZmVjdEJCb3hNb2RlOyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWN0OyB9Ci0gICAgICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbUJveDsgfQorICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIHRhcmdldHMgY29udGV4dCwgY2xpcHBl
ZCBieSB0aGUgZmlsdGVyIHJlZ2lvbi4KKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNl
SW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCiAgICAg
ICAgIHZpcnR1YWwgRmxvYXRTaXplIG1heEltYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
SW1hZ2VTaXplOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVFZmZlY3RTdWJSZWdp
b24oRmlsdGVyRWZmZWN0Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiBpdGVtQm94LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAgICAg
ICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKTsKIAogICAgICAgICBGbG9h
dFNpemUgbV9tYXhJbWFnZVNpemU7Ci0gICAgICAgIEZsb2F0UmVjdCBtX2l0ZW1Cb3g7CisgICAg
ICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgICAgICBGbG9hdFJlY3QgbV9m
aWx0ZXJSZWN0OwogICAgICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67776</attachid>
            <date>2010-09-16 01:33:15 -0700</date>
            <delta_ts>2010-09-18 12:12:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100916103313.patch</filename>
            <type>text/plain</type>
            <size>50688</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzU5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAwIEBACisyMDEwLTA5LTE2ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZH
IEZpbHRlciBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxMgorICAgICAgICAKKyAgICAgICAgQ2xlYW51cCBvZiBGaWx0ZXJFZmZlY3Qs
IGRlbGV0ZWQgdW5uZWNlc3NhcnkgbWVtYmVyIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgorICAg
ICAgICBSZW5hbWVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRvIG1hdGNoIHRoZSBuYW1lIHNj
aGVtYS4KKyAgICAgICAgTW92ZSBtb3JlIGNhbGN1bGF0aW9uIGNvZGUgdG8gU1ZHRmlsdGVyLiBU
aGlzIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAg
ICBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4KKworICAgICAgICBKdXN0IGEgY2xlYW51cCwgbm8gbmV3
IHRlc3QgYWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHA6IFVzZSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyBpbnN0
ZWFkIG9mIHNjYWxlZFN1YlJlZ2lvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y3JlYXRlU2hhZG93TWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcDogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDogZGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmg6IFJlbmFtZWQgY2FsY3VsYXRlRWZmZWN0UmVjdCB0byBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24uCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOiBSZW1vdmVkIHVubmVjZXNzYXJ5IG1l
bWJlciB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVVuaW9uT2ZD
aGlsZEVmZmVjdFN1YnJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCk6IEFkZGVkIGVhcmx5IHJldHVybiBpZiBubyBJ
bWFnZUJ1ZmZlciB3YXMgY3JlYXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOiBPcmRlcmVkIGZ1bnRjdGlvbnMgdG8gKG5vdCkgU1ZHIHNwZWNp
ZmljCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0QnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0SXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpoYXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6aGFzV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpz
ZXRIYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZWZmZWN0Qm91bmRhcmllcyk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEVmZmVjdEJvdW5kYXJpZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOiAgVXNl
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGluc3RlYWQgb2Ygc2NhbGVkU3ViUmVnaW9u
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjppc1NvdXJjZUlu
cHV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmg6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6aXNTb3VyY2VJbnB1dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcDogTWFrZSB1c2Ugb2YgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uIGFuZCBmaWx0ZXJQcmltaXRpdmVTdWJSZWdpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6IFVzZSByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcyBpbnN0ZWFkIG9mIHNjYWxlZFN1YlJlZ2lvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaDogZGl0dG8uCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IGRpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmNwcDogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRmxvb2QuY3BwOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFw
cGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSk6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6IGRpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTWVyZ2UuY3BwOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnVuaXRlQ2hp
bGRFZmZlY3RTdWJyZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5KToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwOiBkaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6YXBwbHkpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcDogZGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVGlsZS5jcHA6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjp1bml0ZUNoaWxk
RWZmZWN0U3VicmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5KToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOiBDaGFuZ2VkIG5hbWVz
IHRvIG1hdGNoIHNjaGVtYS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDogZGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCk6CisKIDIwMTAtMDktMTUgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNocm9taXVt
IGJ1aWxkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2NSwxMCArOTY1LDEwIEBAIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gR3JhcGhpY3MKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZp
bHRlcjo6Y3JlYXRlKCk7CiAgICAgZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShidWZmZXIpOwogICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZSA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOwot
ICAgIHNvdXJjZS0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNo
YWRvd1JlY3Quc2l6ZSgpKSk7CisgICAgc291cmNlLT5zZXRSZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOwogICAg
IHNvdXJjZS0+c2V0SXNBbHBoYUltYWdlKHRydWUpOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQoKSwgc2QsIHNkKTsKLSAg
ICBibHVyLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93
UmVjdC5zaXplKCkpKTsKKyAgICBibHVyLT5zZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOwogICAgIGJsdXIt
PmFwcGx5KGZpbHRlci5nZXQoKSk7CiAgICAgcmV0dXJuIGJsdXItPnJlc3VsdEltYWdlKCktPm1f
ZGF0YS5tX3N1cmZhY2U7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
MTAgKzExMSwxMCBAQCB2b2lkIEZFQmxlbmQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlm
ICghZ2V0RWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1
YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURy
YXdpbmdJbnRSZWN0KG1faW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAg
IFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEo
KSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJ
bnRSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJh
d2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luMi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVs
QXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQ
b2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gNjcz
MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6
OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0
SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2Nh
bGVkU3ViUmVnaW9uKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9p
bi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3Qo
bV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogCiAgICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBQYXNzUmVm
UHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShpbWFnZVJlY3QpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDY3
MzE3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBGRUNvbXBv
bmVudFRyYW5zZmVyOjphcHBseShGaWx0ZXIqIAogICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9
IDA7IGNoYW5uZWwgPCA0OyBjaGFubmVsKyspCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2Zl
ckZ1bmN0aW9uW2NoYW5uZWxdLnR5cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rp
b25bY2hhbm5lbF0pOwogCi0gICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdp
bmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGRyYXdpbmdS
ZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKG1faW4tPnJlc3Vs
dEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShkcmF3aW5nUmVjdCkpOwogICAgIENh
bnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoaW1hZ2VEYXRhLT5kYXRhKCkpOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5j
cHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDMyICsxMzEsMzIgQEAgdm9p
ZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgRmxvYXRSZWN0IHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYpOwogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3Vi
UmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4y
LT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdCht
X2luMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0
SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0LT5y
ZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
T1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0
SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2Nh
bGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5n
UmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5h
dGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5y
ZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJl
Z2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4t
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1f
aW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVT
b3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9YT1I6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjIt
PnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7
CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBz
cmNSZWN0LCBDb21wb3NpdGVYT1IpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM6IHsKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7
CisgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0lu
dFJlY3QobV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgICAgIFJl
ZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7
CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5n
SW50UmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpOworICAgICAgICBJbnRSZWN0IGVmZmVj
dEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVj
dEJEcmF3aW5nUmVjdCkpOwogICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5
QihpbWFnZURhdGEtPmRhdGEoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNjczMTcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBw
bHkoRmlsdGVyKiBmaWx0ZQogCiAgICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxwaGFJbWFn
ZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5n
SW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YShtX2lu
LT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdS
ZWN0KSk7CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+
c2l6ZSgpKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9
IDA7CiAKICAgICAgICAgLy8gU1ZHIHNwZWNpZmljCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxj
dWxhdGVFZmZlY3RTdWJSZWdpb24oRmlsdGVyRWZmZWN0KikgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiwgY29u
c3QgRmxvYXRSZWN0JikgeyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFNpemUgbWF4SW1hZ2VT
aXplKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZWZmZWN0Qm91bmRpbmdCb3hN
b2RlKCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjEgKzEsMjMgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSBBbGV4IE1hdGhld3MgPHBv
c3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4
IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKQEAgLTI1LDExICsyNywxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCgpCi0gICAgOiBtX2hhc1goZmFsc2UpCisg
ICAgOiBtX2FscGhhSW1hZ2UoZmFsc2UpCisgICAgLCBtX2hhc1goZmFsc2UpCiAgICAgLCBtX2hh
c1koZmFsc2UpCiAgICAgLCBtX2hhc1dpZHRoKGZhbHNlKQogICAgICwgbV9oYXNIZWlnaHQoZmFs
c2UpCi0gICAgLCBtX2FscGhhSW1hZ2UoZmFsc2UpCiB7CiB9CiAKQEAgLTM5LDQyICs0MSw0NCBA
QCBGaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKQogCiBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0
OjpjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyLCBG
aWx0ZXJFZmZlY3QqIGluKQogewotICAgIHJldHVybiBpbi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChm
aWx0ZXIpOworICAgIHJldHVybiBpbi0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KGZpbHRlcik7CiB9CiAKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVVuaW9uT2ZD
aGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIsIEZpbHRlckVmZmVjdCogaW4sIEZp
bHRlckVmZmVjdCogaW4yKQogewotICAgIEZsb2F0UmVjdCB1bml0ZUVmZmVjdFJlY3QgPSBpbi0+
Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpOwotICAgIHVuaXRlRWZmZWN0UmVjdC51bml0ZShp
bjItPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKSk7CisgICAgRmxvYXRSZWN0IHVuaXRlRWZm
ZWN0UmVjdCA9IGluLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsK
KyAgICB1bml0ZUVmZmVjdFJlY3QudW5pdGUoaW4yLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oZmlsdGVyKSk7CiAgICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKIH0KIAotRmxv
YXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikK
K0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBzZXRVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25z
KHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlcikpOwotICAgIGZpbHRlci0+Y2FsY3Vs
YXRlRWZmZWN0U3ViUmVnaW9uKHRoaXMpOwotICAgIHJldHVybiBzdWJSZWdpb24oKTsKKyAgICBm
aWx0ZXItPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbih0aGlzLCB1bml0ZUNoaWxk
RWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIpKTsKKyAgICByZXR1cm4gZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7CiB9CiAKIEludFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50
UmVjdChjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCiB7Ci0gICAgSW50UG9pbnQgbG9jYXRp
b24gPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChzY2FsZWRTdWJSZWdpb24oKS54KCkgLSBl
ZmZlY3RSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjYWxlZFN1YlJlZ2lvbigpLnkoKSAtIGVmZmVjdFJlY3QueSgpKSk7CisgICAg
SW50UG9pbnQgbG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIGVmZmVjdFJlY3QueCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKS55KCkgLSBlZmZlY3RSZWN0LnkoKSkpOwogICAgIHJldHVybiBJbnRSZWN0
KGxvY2F0aW9uLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogfQogCiBGbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCiB7
Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2ludChzcmNSZWN0LngoKSAtIHNj
YWxlZFN1YlJlZ2lvbigpLngoKSwgc3JjUmVjdC55KCkgLSBzY2FsZWRTdWJSZWdpb24oKS55KCkp
OworICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IEZsb2F0UG9pbnQoc3JjUmVjdC54KCkgLSBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSwgc3JjUmVjdC55KCkgLSByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSk7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
ID0gRmxvYXRSZWN0KHN0YXJ0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsKICAgICByZXR1cm4gZHJh
d2luZ1JlY3Q7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogRmlsdGVyRWZmZWN0OjpnZXRFZmZlY3RD
b250ZXh0KCkKIHsKLSAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNj
YWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIG1fZWZmZWN0QnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgTGluZWFyUkdCKTsKLSAg
ICByZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKKyAgICBpZiAobV9lZmZlY3RCdWZm
ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2VmZmVjdEJ1ZmZlci0+Y29udGV4dCgpOworCisg
ICAgcmV0dXJuIDA7CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgaW50KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gNjcz
MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjIgKzEsMjMgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gICAgICAg
ICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLwogCiAjaWZuZGVmIEZpbHRlckVmZmVjdF9oCiAjZGVmaW5lIEZpbHRlckVmZmVj
dF9oCkBAIC0zNSw4MSArMzYsOTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7Ci0gICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKK2NsYXNzIEZpbHRlckVm
ZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVmZmVjdD4geworcHVibGljOgorICAgIHZp
cnR1YWwgfkZpbHRlckVmZmVjdCgpOworCisgICAgLy8gVGhlIHJlc3VsdCBpcyBib3VuZGVkIHRv
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRvIHNhdmUgcmVzb3VyY2VzLgorICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgp
OyB9CisgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gZWZm
ZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0gZWZmZWN0QnVmZmVyOyB9CiAKLSAgICAgICAg
dm9pZCBzZXRVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKGNvbnN0IEZsb2F0UmVjdCYgdW5p
dGVSZWN0KSB7IG1fdW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyA9IHVuaXRlUmVjdDsgfQot
ICAgICAgICBGbG9hdFJlY3QgdW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9uczsgfQorICAgIC8vIENyZWF0ZXMg
dGhlIEltYWdlQnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJlc3VsdCBp
biB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0aGUgR3Jh
cGhpY3NDb250ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCisgICAgR3JhcGhpY3NDb250ZXh0
KiBnZXRFZmZlY3RDb250ZXh0KCk7CiAKLSAgICAgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3ViUmVnaW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0U3ViUmVnaW9uKGNv
bnN0IEZsb2F0UmVjdCYgc3ViUmVnaW9uKSB7IG1fc3ViUmVnaW9uID0gc3ViUmVnaW9uOyB9Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IEludFJlY3QgY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAg
ICAgICAgRmxvYXRSZWN0IHNjYWxlZFN1YlJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVk
U3ViUmVnaW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0U2NhbGVkU3ViUmVnaW9uKGNvbnN0IEZsb2F0
UmVjdCYgc2NhbGVkU3ViUmVnaW9uKSB7IG1fc2NhbGVkU3ViUmVnaW9uID0gc2NhbGVkU3ViUmVn
aW9uOyB9CisgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFs
dWVzLgorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Cisg
ICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9
IGFscGhhSW1hZ2U7IH0KIAotICAgICAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNv
bnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgICAgICB2b2lkIHNldEVmZmVj
dEJvdW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0
Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSB7IHJldHVybiBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzOyB9CisgICAgdm9pZCBzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhjb25z
dCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKSB7IG1fcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMgPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlczsgfQog
Ci0gICAgICAgIGJvb2wgaGFzWCgpIHsgcmV0dXJuIG1faGFzWDsgfQotICAgICAgICB2b2lkIHNl
dEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBh
cHBseShGaWx0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKSA9IDA7CiAKLSAgICAg
ICAgYm9vbCBoYXNZKCkgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzWShi
b29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9CisgICAgdmlydHVhbCBib29sIGlzU291cmNl
SW5wdXQoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIGJvb2wgaGFzV2lkdGgoKSB7IHJl
dHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkg
eyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBjb25zdDsKIAot
ICAgICAgICBib29sIGhhc0hlaWdodCgpIHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9Ci0gICAgICAg
IHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQor
cHVibGljOgorICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3BlY2lmaWMg
YW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KKyAgICAv
LyBTZWUgYnVnIAorICAgIGJvb2wgaGFzWCgpIHsgcmV0dXJuIG1faGFzWDsgfQorICAgIHZvaWQg
c2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9CiAKLSAgICAgICAgLy8gVGhl
IHJlc3VsdCBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRv
IHNhdmUgcmVzb3VyY2VzCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0
dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0QnVmZmVy
KFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGVmZmVjdEJ1ZmZlcikgeyBtX2VmZmVjdEJ1ZmZlciA9
IGVmZmVjdEJ1ZmZlcjsgfQorICAgIGJvb2wgaGFzWSgpIHsgcmV0dXJuIG1faGFzWTsgfQorICAg
IHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9CiAKLSAgICAgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiwg
RmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0Kik7Ci0gICAgICAgIEZsb2F0UmVjdCBjYWxjdWxh
dGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciosIEZpbHRlckVmZmVjdCopOwor
ICAgIGJvb2wgaGFzV2lkdGgoKSB7IHJldHVybiBtX2hhc1dpZHRoOyB9CisgICAgdm9pZCBzZXRI
YXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQogCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCogZ2V0RWZmZWN0Q29udGV4dCgpOwotICAgICAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIEludFJlY3QgY2Fs
Y3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBoYXNIZWln
aHQoKSB7IHJldHVybiBtX2hhc0hlaWdodDsgfQorICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wg
dmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBm
aWx0ZXItPmZpbHRlclJlZ2lvbigpOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciopOwogCi0gICAgICAgIC8vIGJsYWNrIGlt
YWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcwotICAgICAgICBib29sIGlzQWxwaGFJbWFn
ZSgpIHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgICAgICB2b2lkIHNldElzQWxwaGFJbWFn
ZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorICAgIEZs
b2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSB7IHJldHVybiBtX2ZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CiAKLSAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7IH0KLSAgICAgICAgdmlydHVhbCBGbG9h
dFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEZpbHRlciopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGR1bXAoKSA9IDA7Cisg
ICAgLy8gRGV0ZXJtaW5lIHRoZSB1bml0ZSBvZiBvbmUgb3IgdHdvIHByZXZpb3VzIGZpbHRlciBw
cmltaXRpdmUgc3VicmVnaW9ucy4KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkNoaWxk
RWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqLCBGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqKTsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0
ZXIqLCBGaWx0ZXJFZmZlY3QqKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1
dCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBj
b25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICB2b2lkIHNldEVmZmVjdEJv
dW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91
bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KIAotICAgICAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAw
KSBjb25zdDsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEZpbHRlckVmZmVjdCgpOworcHJvdGVj
dGVkOgorICAgIEZpbHRlckVmZmVjdCgpOwogCi0gICAgcHJpdmF0ZToKK3ByaXZhdGU6CisgICAg
bXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOwogCi0gICAgICAgIGJv
b2wgbV94QkJveE1vZGUgOiAxOwotICAgICAgICBib29sIG1feUJCb3hNb2RlIDogMTsKLSAgICAg
ICAgYm9vbCBtX3dpZHRoQkJveE1vZGUgOiAxOwotICAgICAgICBib29sIG1faGVpZ2h0QkJveE1v
ZGUgOiAxOworICAgIGJvb2wgbV9hbHBoYUltYWdlOwogCi0gICAgICAgIGJvb2wgbV9oYXNYIDog
MTsKLSAgICAgICAgYm9vbCBtX2hhc1kgOiAxOwotICAgICAgICBib29sIG1faGFzV2lkdGggOiAx
OwotICAgICAgICBib29sIG1faGFzSGVpZ2h0IDogMTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJl
IHRoZSBwYWludCByZWdpb24gb2YgdGhlIGZpbHRlciBwcmltaXRpdmUsIGluc3RlYWQgb2YgdGhl
IHNjYWxlZCBzdWJyZWdpb24gb24gdXNlIG9mIGZpbHRlclJlcy4KKyAgICBGbG9hdFJlY3QgbV9y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlczsKIAotICAgICAgICBib29sIG1fYWxwaGFJbWFn
ZTsKK3ByaXZhdGU6CisgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFyaWFibGVzIGFyZSBT
Vkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZS4KKyAgICAvLyBTZWUgYnVnIAogCi0gICAgICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5k
YXJpZXM7Ci0gICAgICAgIEZsb2F0UmVjdCBtX3N1YlJlZ2lvbjsKLSAgICAgICAgRmxvYXRSZWN0
IG1fc2NhbGVkU3ViUmVnaW9uOwotICAgICAgICBGbG9hdFJlY3QgbV91bmlvbk9mQ2hpbGRFZmZl
Y3RTdWJyZWdpb25zOworICAgIC8vIFRoZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZl
IGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBzcGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3Jk
aW5hdGVzLgorICAgIC8vIFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRv
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgorICAgIEZsb2F0UmVjdCBtX2ZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbV9lZmZlY3RCdWZmZXI7Ci0gICAgfTsKKyAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0
IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUg
c3VicmVnaW9uIG9mIHRoZQorICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVw
LgorICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CisgICAgYm9vbCBtX2hhc1g7Cisg
ICAgYm9vbCBtX2hhc1k7CisgICAgYm9vbCBtX2hhc1dpZHRoOworICAgIGJvb2wgbV9oYXNIZWln
aHQ7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gNjcz
MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBT
b3VyY2VBbHBoYTo6ZWZmZWN0TgogICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLUZsb2F0
UmVjdCBTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKK0Zs
b2F0UmVjdCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZp
bHRlciogZmlsdGVyKQogewogICAgIEZsb2F0UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IGZpbHRl
ci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgaWYgKGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCku
eCgpIDwgZmlsdGVyLT5maWx0ZXJSZWdpb24oKS54KCkpCiAgICAgICAgIGNsaXBwZWRTb3VyY2VS
ZWN0LnNldFgoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS54KCkpOwogICAgIGlmIChmaWx0ZXItPnNv
dXJjZUltYWdlUmVjdCgpLnkoKSA8IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKQogICAgICAg
ICBjbGlwcGVkU291cmNlUmVjdC5zZXRZKGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKTsKLSAg
ICBzZXRTdWJSZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOworICAgIHNldEZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2Nh
bGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldFNjYWxlZFN1YlJlZ2lvbihjbGlwcGVkU291cmNl
UmVjdCk7CisgICAgc2V0UmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoY2xpcHBlZFNvdXJj
ZVJlY3QpOwogICAgIHJldHVybiBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAkocmV2
aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7
CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUVmZmVjdFJlY3QoRmlsdGVyKik7
CiAgICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAg
ICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciopOwogICAgIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFNvdXJjZUFscGhhKCkgeyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWMKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi1GbG9hdFJlY3QgU291cmNl
R3JhcGhpYzo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKK0Zsb2F0UmVjdCBT
b3VyY2VHcmFwaGljOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBm
aWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gZmlsdGVyLT5zb3Vy
Y2VJbWFnZVJlY3QoKTsKICAgICBpZiAoZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKS54KCkgPCBm
aWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSkKICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0
WChmaWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSk7CiAgICAgaWYgKGZpbHRlci0+c291cmNlSW1h
Z2VSZWN0KCkueSgpIDwgZmlsdGVyLT5maWx0ZXJSZWdpb24oKS55KCkpCiAgICAgICAgIGNsaXBw
ZWRTb3VyY2VSZWN0LnNldFkoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS55KCkpOwotICAgIHNldFN1
YlJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CisgICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICBjbGlwcGVkU291cmNlUmVjdC5zY2FsZShmaWx0
ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgc2V0U2NhbGVkU3ViUmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsK
KyAgICBzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhjbGlwcGVkU291cmNlUmVjdCk7
CiAgICAgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAkocmV2aXNp
b24gNjczMTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsK
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsgcmV0dXJuIHRydWU7IH0K
LSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsK
ICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAg
ICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwotICAgIAorCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
U291cmNlR3JhcGhpYygpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw4ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogICAgICAgICAgICAgICAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOSw3ICsx
OSw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0xOTMsMTIg
KzE5MiwxMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAg
aWYgKCFsYXN0RWZmZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbGFzdEVm
ZmVjdC0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOworICAg
IGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXJEYXRh
LT5maWx0ZXIuZ2V0KCkpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEg
dG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KICAgICBpZiAoIWZpdHNJbk1heGltdW1JbWFnZVNpemUo
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5tYXhJbWFnZVNpemUoKSwgc2NhbGUpKSB7CiAgICAgICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxh
c3RFZmZlY3QtPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsK
KyAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZp
bHRlckRhdGEtPmZpbHRlci5nZXQoKSk7CiAgICAgfQogCiAgICAgY2xpcHBlZFNvdXJjZVJlY3Qu
c2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwpAQCAtMjU1LDcgKzI1NCw3IEBA
IHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKIAogICAgIEZpbHRlckVm
ZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKICAg
ICAKLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5
KCkgJiYgIWxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgIGlmIChsYXN0
RWZmZWN0ICYmICFmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVj
dC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8g
YmUgY2FsbGVkIG9uIHRoZQogICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBX
ZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKICAgICAgICAgLy8gc2Vj
b25kIGRyYXdpbmcuCkBAIC0yNzIsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UgogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxh
c3RFZmZlY3QtPnJlc3VsdEltYWdlKCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHls
ZSgpLT5jb2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5j
b2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAg
ICB9CiAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLmNsZWFyKCk7CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzMxNykK
KysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsMTYgQEAgdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VN
YXBwZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCit2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cgor
ICAgICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIKKyAgICAgICAgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpCisgICAgICAgIGludmFsaWRhdGUoKTsKK30K
Kwogdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN5bmNocm9uaXplUHJvcGVydHkoYXR0ck5hbWUpOwpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAgcHJpdmF0ZToKICAgICBTVkdGRUNvbG9yTWF0cml4RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJv
cGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqKTsKIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCShyZXZp
c2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2
ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OmFwcGx5KEZpbHRlciogZmlsCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Ci0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4t
PnN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QobV9pbi0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwogCiAgICAg
UmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2Vy
dmVBbHBoYSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MywxMCArOTMsMTAgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkoRmlsdGVy
KiBmaQogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1f
aW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpOwogICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2lu
LT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5n
UmVjdCktPmRhdGEoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAgSW50UmVj
dCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luMi0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJy
YXk+IHNyY1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAogICAgIEludFJlY3QgaW1h
Z2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJKHJldmlzaW9uIDY3MzE3KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEZFRmxvb2Q6OmFwcGx5KEZpbHRlciopCiAgICAg
ICAgIHJldHVybjsKIAogICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShm
bG9vZENvbG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzY2FsZWRTdWJSZWdpb24oKS5zaXplKCkp
LCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5z
aXplKCkpLCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgRkVGbG9vZDo6ZHVt
cCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJ
KHJldmlzaW9uIDY3MzE3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEZFSW1hZ2U6OmFw
cGx5KEZpbHRlciopCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZs
b2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxv
YXRQb2ludCgpLCBzdWJSZWdpb24oKS5zaXplKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdChG
bG9hdFBvaW50KCksIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CiAKICAgICBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNw
cAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBGRUxp
Z2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIAogICAgIHNldElzQWxwaGFJbWFnZShmYWxz
ZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0lu
dFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0
KSk7CiAgICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShzcmNJbWFnZURhdGEtPmRh
dGEoKSk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdl
LmNwcAkocmV2aXNpb24gNjczMTcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTAgQEAgRmxvYXRSZWN0
IEZFTWVyZ2U6OnVuaXRlQ2hpbGRFZmZlY3RTdWJyZQogewogICAgIEFTU0VSVCghbV9tZXJnZUlu
cHV0cy5pc0VtcHR5KCkpOwogCi0gICAgRmxvYXRSZWN0IHVuaXRlRWZmZWN0UmVjdCA9IG1fbWVy
Z2VJbnB1dHNbMF0tPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKTsKKyAgICBGbG9hdFJlY3Qg
dW5pdGVFZmZlY3RSZWN0ID0gbV9tZXJnZUlucHV0c1swXS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGZpbHRlcik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9t
ZXJnZUlucHV0cy5zaXplKCk7IGkrKykKLSAgICAgICAgdW5pdGVFZmZlY3RSZWN0LnVuaXRlKG1f
bWVyZ2VJbnB1dHNbaV0tPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKSk7CisgICAgICAgIHVu
aXRlRWZmZWN0UmVjdC51bml0ZShtX21lcmdlSW5wdXRzW2ldLT5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oZmlsdGVyKSk7CiAKICAgICByZXR1cm4gdW5pdGVFZmZlY3RSZWN0Owog
fQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tZXJnZUlu
cHV0cy5zaXplKCk7IGkrKykgewotICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxh
dGVEcmF3aW5nUmVjdChtX21lcmdlSW5wdXRzW2ldLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAg
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1fbWVyZ2VJbnB1
dHNbaV0tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3
MzE3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjphcHBs
eShGaWx0ZXIqIGZpbHRlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVn
aW9uKCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5n
SW50UmVjdChtX2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBSZWZQ
dHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShtX2luLT5yZXN1bHRJbWFnZSgpLT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKICAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJl
Y3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDEwICs4NiwxMCBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikK
ICAgICBtX2R4ICo9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCk7CiAgICAgbV9k
eSAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKTsKIAotICAgIEZsb2F0UmVj
dCBkc3RSZWN0ID0gRmxvYXRSZWN0KG1fZHggKyBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS54KCkg
LSBzY2FsZWRTdWJSZWdpb24oKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9keSArIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigp
LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW4t
PnNjYWxlZFN1YlJlZ2lvbigpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IEZs
b2F0UmVjdChtX2R4ICsgbV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCkg
LSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2R5ICsgbV9pbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5oZWlnaHQoKSk7CiAKICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JT
cGFjZSwgZHN0UmVjdCk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRVRpbGUuY3BwCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBQYXNz
UmVmUHRyPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmlsdGVyCiAKIEZsb2F0UmVjdCBGRVRpbGU6
OnVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKQogewotICAgIG1faW4t
PmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKTsKKyAgICBtX2luLT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKICAgICByZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdp
b24oKTsKIH0KIApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoRmlsdGVyKiBm
aWx0ZXIpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UobV9pbi0+aXNBbHBoYUltYWdlKCkpOwogCi0g
ICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVn
aW9uKCkpOworICAgIEludFJlY3QgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1faW4tPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogCiAgICAgLy8gU291cmNlIGlucHV0IG5l
ZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBi
dXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2su
IFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgpAQCAt
NzYsMTEgKzc2LDExIEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBS
ZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJ
bWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAg
bWF0cml4LnRyYW5zbGF0ZShtX2luLT5zY2FsZWRTdWJSZWdpb24oKS54KCkgLSBzY2FsZWRTdWJS
ZWdpb24oKS54KCksIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLnkoKSAtIHNjYWxlZFN1YlJlZ2lv
bigpLnkoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShtX2luLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLCBt
X2luLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkueSgpKTsKICAgICBwYXR0ZXJuLmdldCgpLT5zZXRQYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm0obWF0cml4KTsKIAogICAgIGZpbHRlckNvbnRleHQtPnNldEZpbGxQYXR0ZXJu
KHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIHNjYWxlZFN1YlJlZ2lvbigpLnNpemUoKSkpOworICAgIGZpbHRlckNvbnRleHQtPmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkuc2l6ZSgpKSk7CiB9CiAKIHZvaWQgRkVUaWxlOjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHJldmlzaW9uIDY3MzE3KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2MCArMjQsNjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6
OlNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKICAgICA6IEZpbHRlcigpCi0gICAgLCBtX2l0ZW1Cb3go
aXRlbUJveCkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCiAg
ICAgLCBtX2ZpbHRlclJlY3QoZmlsdGVyUmVjdCkKICAgICAsIG1fZWZmZWN0QkJveE1vZGUoZWZm
ZWN0QkJveE1vZGUpCiB7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyOjpjYWxjdWxhdGVFZmZlY3RTdWJS
ZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlcjo6ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMpCiB7CiAgICAgRmxvYXRSZWN0
IHN1YlJlZ2lvbkJCb3ggPSBlZmZlY3QtPmVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBGbG9hdFJl
Y3QgdXNlQkJveCA9IGVmZmVjdC0+dW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucygpOwogICAg
IEZsb2F0UmVjdCBuZXdTdWJSZWdpb24gPSBzdWJSZWdpb25CQm94OwogCiAgICAgaWYgKG1fZWZm
ZWN0QkJveE1vZGUpIHsKLSAgICAgICAgbmV3U3ViUmVnaW9uID0gdXNlQkJveDsKKyAgICAgICAg
bmV3U3ViUmVnaW9uID0gdW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9uczsKIAogICAg
ICAgICBpZiAoZWZmZWN0LT5oYXNYKCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WCht
X2l0ZW1Cb3gueCgpICsgc3ViUmVnaW9uQkJveC54KCkgKiBtX2l0ZW1Cb3gud2lkdGgoKSk7Cisg
ICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WChtX3RhcmdldEJvdW5kaW5nQm94LngoKSArIHN1
YlJlZ2lvbkJCb3gueCgpICogbV90YXJnZXRCb3VuZGluZ0JveC53aWR0aCgpKTsKIAotICAgICAg
ICBpZiAoZWZmZWN0LT5oYXNZKCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WShtX2l0
ZW1Cb3gueSgpICsgc3ViUmVnaW9uQkJveC55KCkgKiBtX2l0ZW1Cb3guaGVpZ2h0KCkpOworICAg
ICAgIGlmIChlZmZlY3QtPmhhc1koKSkKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRZKG1f
dGFyZ2V0Qm91bmRpbmdCb3gueSgpICsgc3ViUmVnaW9uQkJveC55KCkgKiBtX3RhcmdldEJvdW5k
aW5nQm94LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAoZWZmZWN0LT5oYXNXaWR0aCgpKQotICAg
ICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFdpZHRoKHN1YlJlZ2lvbkJCb3gud2lkdGgoKSAqIG1f
aXRlbUJveC53aWR0aCgpKTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRXaWR0aChzdWJS
ZWdpb25CQm94LndpZHRoKCkgKiBtX3RhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwogCiAgICAg
ICAgIGlmIChlZmZlY3QtPmhhc0hlaWdodCgpKQotICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNl
dEhlaWdodChzdWJSZWdpb25CQm94LmhlaWdodCgpICogbV9pdGVtQm94LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRIZWlnaHQoc3ViUmVnaW9uQkJveC5oZWlnaHQoKSAq
IG1fdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghZWZmZWN0LT5oYXNYKCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WCh1c2VCQm94
LngoKSk7CisgICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0WCh1bmlvbk9mUHJldmlvdXNQcmlt
aXRpdmVTdWJyZWdpb25zLngoKSk7CiAKICAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1koKSkKLSAg
ICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRZKHVzZUJCb3gueSgpKTsKKyAgICAgICAgICAgIG5l
d1N1YlJlZ2lvbi5zZXRZKHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMueSgpKTsK
IAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFzV2lkdGgoKSkKLSAgICAgICAgICAgIG5ld1N1YlJl
Z2lvbi5zZXRXaWR0aCh1c2VCQm94LndpZHRoKCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9u
LnNldFdpZHRoKHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMud2lkdGgoKSk7CiAK
ICAgICAgICAgaWYgKCFlZmZlY3QtPmhhc0hlaWdodCgpKQotICAgICAgICAgICAgbmV3U3ViUmVn
aW9uLnNldEhlaWdodCh1c2VCQm94LmhlaWdodCgpKTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lv
bi5zZXRIZWlnaHQodW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy5oZWlnaHQoKSk7
CiAgICAgfQogCiAgICAgLy8gY2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIg
cmVnaW9uCiAgICAgbmV3U3ViUmVnaW9uLmludGVyc2VjdChtX2ZpbHRlclJlY3QpOwogCi0gICAg
ZWZmZWN0LT5zZXRTdWJSZWdpb24obmV3U3ViUmVnaW9uKTsKKyAgICBlZmZlY3QtPnNldEZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihuZXdTdWJSZWdpb24pOworICAgIAorICAgIC8vIFRPRE86IEV2
ZXJ5dGhpbmcgYWJvdmUgc2hvdWxkIGJlIG1vdmVkIHRvIGEgZmlyc3QgcGhhc2Ugb2YgbGF5b3V0
IGluIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgorICAgIC8vIFRoZSBzY2FsaW5n
IG9mIHRoZSBzdWJyZWdpb24gdG8gdGhlIHJlcGFpbnQgcmVjdCBzaG91bGQgYmUgbWVyZ2VkIHdp
dGggYSBtb3JlIGludGVsbGlnZW50IHJlcGFpbnQgbG9naWMKKyAgICAvLyBhbmQgbW92ZWQgdG8g
dGhlIHNlY29uZCBwaGFzZSBvZiBsYXlvdXQgaW4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUuCiAgICAgbmV3U3ViUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
LCBmaWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIGVmZmVjdC0+c2V0U2NhbGVkU3Vi
UmVnaW9uKG5ld1N1YlJlZ2lvbik7CisgICAgZWZmZWN0LT5zZXRSZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcyhuZXdTdWJSZWdpb24pOwogICAgIG1fbWF4SW1hZ2VTaXplID0gbV9tYXhJbWFn
ZVNpemUuZXhwYW5kZWRUbyhuZXdTdWJSZWdpb24uc2l6ZSgpKTsgCiB9CiAKLVBhc3NSZWZQdHI8
U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIGl0ZW1Cb3gsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1Bhc3NSZWZQ
dHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJv
dW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1v
ZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoaXRlbUJveCwgZmlsdGVy
UmVjdCwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRl
cih0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyUmVjdCwgZWZmZWN0QkJveE1vZGUpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCShyZXZpc2lvbiA2NzMxNykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE2ICszOSwxOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJCb3hNb2RlOyB9CiAKICAgICAgICAgdmlydHVh
bCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWN0OyB9
Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbUJveDsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIHRh
cmdldHMgY29udGV4dCwgY2xpcHBlZCBieSB0aGUgZmlsdGVyIHJlZ2lvbi4KKyAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRC
b3VuZGluZ0JveDsgfQogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRTaXplIG1heEltYWdlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4SW1hZ2VTaXplOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
YWxjdWxhdGVFZmZlY3RTdWJSZWdpb24oRmlsdGVyRWZmZWN0Kik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiwgY29u
c3QgRmxvYXRSZWN0Jik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBTVkdGaWx0ZXIoY29uc3Qg
RmxvYXRSZWN0JiBpdGVtQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZm
ZWN0QkJveE1vZGUpOworICAgICAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hN
b2RlKTsKIAogICAgICAgICBGbG9hdFNpemUgbV9tYXhJbWFnZVNpemU7Ci0gICAgICAgIEZsb2F0
UmVjdCBtX2l0ZW1Cb3g7CisgICAgICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94Owog
ICAgICAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWN0OwogICAgICAgICBib29sIG1fZWZmZWN0QkJv
eE1vZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68014</attachid>
            <date>2010-09-18 12:12:47 -0700</date>
            <delta_ts>2010-09-19 17:25:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100918211244.patch</filename>
            <type>text/plain</type>
            <size>112010</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg3IEBACisyMDEwLTA5LTE4ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZH
IEZpbHRlciBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxMgorICAgICAgICAKKyAgICAgICAgQWxsIGVmZmVjdCBpbnB1dHMgYXJlIHN0
b3JlZCBpbiBhIEZpbHRlckVmZmVjdFZlY3RvciBvbiBGaWx0ZXJFZmZlY3QgaW5zdGVhZCBvZgor
ICAgICAgICBwYXNzaW5nIHRoZW0gdmlhIHRoZSBjb25zdHJ1Y3RvcnMgb2YgZXZlcnkgc2luZ2xl
IGVmZmVjdCB0eXBlLgorICAgICAgICBUaGlzIHNpbXBsaWZpZXMgdGhlIHByaW1pdGl2ZSBzdWJy
ZWdpb24gbG9naWMgYW5kIGNvbmNlbnRyYXRlcyBpdCB0byBkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24uCisgICAgICAgIEp1c3QgU291cmNlR3JhcGhpYywgU291cmNlQWxwaGEgYW5k
IEZFVGlsZSBzdGlsbCBjYWxjdWxhdGUgZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb25zIG9uCisg
ICAgICAgIHRoZWlyIG93bi4gV29ya2luZyBvbiBpdCBpbiBhIGZvbGxvd3VwIHBhdGNoLgorICAg
ICAgICBUaGUgc3VicmVnaW9ucyBjb2RlIGlzIFNWRyBzcGVjaWZpYyBhbmQgbW92aW5nIHRoaXMg
Y2FsY3VsYXRpb24gdG8gRmlsdGVyRWZmZWN0IGlzIGFuCisgICAgICAgIGludGVybWVkaWF0ZSBz
dGVwIGJlZm9yZSBtb3ZpbmcgaXQgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUg
aW4gYSBmb2xsb3dpbmcgcGF0Y2guCisgICAgICAgIFRoZSBuZXcgRmlsdGVyRWZmZWN0VmVjdG9y
IHdpbGwgYWxzbyBtYWtlIGl0IHBvc3NpYmxlIHRvIGFkZCBjb2RlIHRvIGRldGVybWluZSB0aGUK
KyAgICAgICAgc21hbGxlc3QgdXNlZCByZWdpb24gb2YgYW4gZWZmZWN0IGFuZCB3aWxsIGhlbHAg
c2F2ZSBtZW1vcnkgYW5kIHJlc291cmNlcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICBzdWJSZWdp
b24gZ290IHJlbmFtZWQgdG8gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIHRvIG1hdGNoIHRoZSBu
YW1lIHNjaGVtYS4gc2NhbGVkU3ViUmVnaW9uIGdvdAorICAgICAgICByZW5hbWVkIHRvIHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGUgc2luY2UgdGhpcyBpcyBpdHMgcHJvcGVybHkgbWVhbmlu
Zy4KKyAgICAgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBtZW1iZXIgdmFyaWFibGVzIGFuZCBmdW5j
dGlvbnMgZnJvbSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFkZGVkIHNp
bmNlIHRoZSBmdW5jdGlvbmFsaXR5IGRpZG4ndCBjaGFuZ2VkLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOiBzY2FsZWRTdWJSZWdp
b24gd2FzIHJlbmFtZWQgdG8gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZQorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOiBSZW1vdmVkIEZpbHRlciBlZmZl
Y3QgaW5wdXRzIGZyb20gY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpG
RUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6IENhbGwgaW5wdXRGaWx0ZXJFZmZlY3RzIHRvIGdldCBp
bnB1dCBmaWx0ZXIgcHJpbWl0aXZlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24pOiBDYWxsIGlucHV0RmlsdGVyRWZmZWN0cyB0byBnZXQgaW5wdXQg
ZmlsdGVyIHByaW1pdGl2ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcDogU2FtZSBhcyBvbiBGRUJsZW5kLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDogU2Ft
ZSBhcyBvbiBGRUJsZW5kLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHA6IFNhbWUgYXMgb24gRkVCbGVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOiBTYW1lIGFzIG9uIEZFQmxl
bmQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBSZW5hbWVkIGZyb20gY2FsY3VsYXRlRWZmZWN0U3Vi
UmVnaW9uIHRvIG1hdGNoIG5hbWUgc2NoZW1hLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogVGhlIG1haW4gcGxhY2UgZm9yIHN1YnJlZ2lv
biBjYWxjdWxhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QpOiBUYWtlcyByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlIG5vdy4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ1JlY3QpOiBk
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCk6
IENoZWNrIGlmIEltYWdlQnVmZmVyIHdhcyBjcmVhdGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6IENoYW5nZWQgbmFtZXMgdG8gbWF0Y2ggbmFt
ZSBzY2hlbWEuIFJlbW92ZWQgdW5uZWNlc3NhcnkgbWVtYmVyIHZhcmlhYmxlcyBhbmQgZnVudGlv
bnMuCisgICAgICAgICAgICBTZXBlcmF0ZSBTVkcgc3BlY2lmaWMgbWVtYmVyIHZhcmlhYmxlcyBh
bmQgZnVuY3Rpb25zLiBXaWxsIGdldCByZW1vdmVkIGluIGZvbGxvd3VwIHBhdGNoZXMuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdEltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6aW5wdXRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6aXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRIYXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
aGFzV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBSZW5hbWVkIHRv
IG1hdGNoIG5hbWUgc2NoZW1hLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjppc1NvdXJjZUlu
cHV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogZGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpp
c1NvdXJjZUlucHV0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwOiBDb25zaWRlciByZW5hbWVkIGZ1bmN0aW9ucyBpbiBGaWx0ZXJFZmZlY3QuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3Vy
Y2UpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6IENvbnN0cnVjdG9yIG9m
IEZFQmxlbmQgZG9lc24ndCB0YWtlIGlucHV0IGVmZmVjdHMuIEFkZGluZyB0aGVtIGFmdGVyd2Fy
ZHMuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6IFNhbWUgYXMgb24gU1ZHRkVCbGVu
ZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVp
bGQpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHA6IFNh
bWUgYXMgb24gU1ZHRkVCbGVuZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwOiBTYW1lIGFzIG9uIFNWR0ZFQmxlbmRFbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDogU2FtZSBhcyBvbiBTVkdGRUJsZW5kRWxlbWVudC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6IFNhbWUgYXMgb24g
U1ZHRkVCbGVuZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcDogU2FtZSBhcyBvbiBTVkdGRUJsZW5kRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwOiBTYW1lIGFzIG9uIFNWR0ZFQmxlbmRFbGVtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDogU2FtZSBhcyBvbiBTVkdGRUJsZW5kRWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOiBTYW1lIGFzIG9uIFNWR0ZFQmxl
bmRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVp
bGQpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOiBTYW1lIGFzIG9uIFNW
R0ZFQmxlbmRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50Ojpi
dWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOiBT
YW1lIGFzIG9uIFNWR0ZFQmxlbmRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVt
ZW50LmNwcDogU2FtZSBhcyBvbiBTVkdGRUJsZW5kRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcDogU2FtZSBhcyBvbiBGRUJsZW5kLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDogU2FtZSBhcyBvbiBGRUJsZW5kLgorICAgICAgICAo
V2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwOiBTYW1lIGFzIG9uIEZF
QmxlbmQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1l
bnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6YXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHA6IFNhbWUgYXMgb24gRkVCbGVu
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDogU2FtZSBhcyBvbiBGRUJsZW5kLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwOiBTYW1lIGFzIG9uIEZFQmxlbmQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5n
Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6IFNhbWUg
YXMgb24gRkVCbGVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVy
Z2U6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaDoKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwOiBTYW1lIGFz
IG9uIEZFQmxlbmQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9n
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwOiBTYW1lIGFzIG9uIEZFQmxlbmQuCisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
RkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDogU2FtZSBhcyBvbiBGRUJsZW5kLgorICAgICAgICAo
V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOiBTYW1lIGFzIG9uIEZFQmxlbmQu
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6IFJlbmFtZWQgdG8gbWF0Y2ggbmFtZSBzY2hlbWEuCisgICAg
ICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVUaWxlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cDogUmVuYW1lZCBpdGVtQm94IHRvIHRhcmdldEJvdW5kaW5nQm94IHRvIG1hdGNoIG5hbWUgc2No
ZW1hLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBS
ZW5hbWVkIHRvIG1hdGNoIG5hbWUgc2NoZW1hLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QpOgorCiAyMDEwLTA5
LTE4ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNp
b24gNjc3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgxLDEwICs5ODEsMTMgQEAgUGxhdGZv
cm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBHcmFwaGljcwogICAgIFJlZlB0cjxGaWx0ZXI+IGZp
bHRlciA9IEltYWdlQnVmZmVyRmlsdGVyOjpjcmVhdGUoKTsKICAgICBmaWx0ZXItPnNldFNvdXJj
ZUltYWdlKGJ1ZmZlcik7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlID0gU291cmNl
R3JhcGhpYzo6Y3JlYXRlKCk7Ci0gICAgc291cmNlLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKKyAgICBzb3VyY2UtPnNldFJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRv
d1JlY3Quc2l6ZSgpKSk7CiAgICAgc291cmNlLT5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYmx1ciA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc291cmNl
LmdldCgpLCBzZCwgc2QpOwotICAgIGJsdXItPnNldFNjYWxlZFN1YlJlZ2lvbihGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNkLCBzZCk7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKHNvdXJjZS5n
ZXQoKSk7CisgICAgYmx1ci0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKGlucHV0RWZmZWN0cyk7Cisg
ICAgYmx1ci0+c2V0UmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKICAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0
KCkpOwogICAgIHJldHVybiBibHVyLT5yZXN1bHRJbWFnZSgpLT5tX2RhdGEubV9zdXJmYWNlOwog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjcgKzM1LDE1IEBAIHR5cGVk
ZWYgdW5zaWduZWQgY2hhciAoKkJsZW5kVHlwZSkodW5zaWcKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4y
LCBCbGVuZE1vZGVUeXBlIG1vZGUpCitGRUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZVR5cGUgbW9k
ZSkKICAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQotICAgICwgbV9pbjIoaW4y
KQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVCbGVuZD4gRkVCbGVu
ZDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yLCBCbGVuZE1vZGVU
eXBlIG1vZGUpCitQYXNzUmVmUHRyPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGVU
eXBlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJsZW5kKGluLCBpbjIsIG1v
ZGUpKTsKLX0KLQotRmlsdGVyRWZmZWN0KiBGRUJsZW5kOjppbjIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2luMi5nZXQoKTsKLX0KLQotdm9pZCBGRUJsZW5kOjpzZXRJbjIoRmlsdGVyRWZmZWN0
KiBpbjIpCi17Ci0gICAgbV9pbjIgPSBpbjI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJs
ZW5kKG1vZGUpKTsKIH0KIAogQmxlbmRNb2RlVHlwZSBGRUJsZW5kOjpibGVuZE1vZGUoKSBjb25z
dApAQCAtMTAwLDkgKzg4LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpZ2h0ZW4odW5zaWdu
ZWQgY2gKIAogdm9pZCBGRUJsZW5kOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2lu
LT5hcHBseShmaWx0ZXIpOwotICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9p
bi0+cmVzdWx0SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VS
VChpbnB1dEVmZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNb
MV0uZ2V0KCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0ZXIp
OworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbW9kZSA9PSBGRUJMRU5EX01PREVfVU5LTk9XTikK
QEAgLTExMSwxMSArMTAzLDExIEBAIHZvaWQgRkVCbGVuZDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
dFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhl
bEFycmF5QShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1Jl
Y3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGlu
LT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5n
UmVjdCktPmRhdGEoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRy
PENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7Cisg
ICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChp
bjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIFJlZlB0cjxDYW52YXNQ
aXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QihpbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgUmVm
UHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0Lndp
ZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0xNzYsOCArMTY4LDEwIEBAIFRleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXQKICAgICB0cyA8PCAiW2ZlQmxlbmQiOwog
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgdHMgPDwg
IiBtb2RlPVwiIiA8PCBtX21vZGUgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICBtX2luMi0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGlucHV0RWZmZWN0
cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgp
ID09IDIpOworICAgIGlucHV0RWZmZWN0c1swXS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3RzWzFdLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkocmV2aXNpb24gNjc3ODEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwyNCArNDAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVCbGVuZD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCos
IEJsZW5kTW9kZVR5cGUpOwotCi0gICAgICAgIEZpbHRlckVmZmVjdCogaW4yKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgc2V0SW4yKEZpbHRlckVmZmVjdCopOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlVHlwZSk7CiAKICAgICAgICAgQmxlbmRNb2Rl
VHlwZSBibGVuZE1vZGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRN
b2RlVHlwZSk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1
YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVm
ZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpLCBtX2luMi5nZXQoKSk7IH0KICAgICAg
ICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRkVCbGVuZChGaWx0ZXJFZmZlY3QqLCBG
aWx0ZXJFZmZlY3QqLCBCbGVuZE1vZGVUeXBlKTsKKyAgICAgICAgRkVCbGVuZChCbGVuZE1vZGVU
eXBlKTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwotICAgICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX2luMjsKICAgICAgICAgQmxlbmRNb2RlVHlwZSBtX21vZGU7CiAg
ICAgfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDE3ICszNCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZF
Q29sb3JNYXRyaXgoRmlsdGVyRWZmZWN0KiBpbiwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29s
b3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKICAgICA6IEZp
bHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBt
X3ZhbHVlcyh2YWx1ZXMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIENvbG9yTWF0cml4VHlwZSB0eXBlLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCitQYXNzUmVmUHRyPEZFQ29sb3JNYXRyaXg+IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZShDb2xvck1hdHJpeFR5cGUgdHlwZSwgY29uc3QgVmVjdG9yPGZs
b2F0PiYgdmFsdWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb2xvck1hdHJpeChp
biwgdHlwZSwgdmFsdWVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbG9yTWF0cml4
KHR5cGUsIHZhbHVlcykpOwogfQogCiBDb2xvck1hdHJpeFR5cGUgRkVDb2xvck1hdHJpeDo6dHlw
ZSgpIGNvbnN0CkBAIC0xNTYsMTUgKzE1NSwxNyBAQCB2b2lkIGVmZmVjdFR5cGUoY29uc3QgUGFz
c1JlZlB0cjxDYW52YXNQCiAKIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0
ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdElt
YWdlKCkpCisgICAgQVNTRVJUKGlucHV0RmlsdGVyRWZmZWN0cygpLnNpemUoKSA9PSAxKTsKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRGaWx0ZXJFZmZlY3RzKClbMF0uZ2V0KCk7CisgICAg
aW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0
Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lv
bigpKSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJl
Y3QpKTsKQEAgLTIzNiw3ICsyMzcsOCBAQCBUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRl
cm5hbFJlcHJlCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwot
ICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIEFT
U0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXplKCkgPT0gMSk7CisgICAgaW5wdXRGaWx0ZXJF
ZmZlY3RzKClbMF0tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwogICAg
IHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRkVDb2xvck1h
dHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIENvbG9yTWF0
cml4VHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CiAKICAgICAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAg
dm9pZCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC00OCwxNSArNDgsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25z
dDsKICAgICAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0gICAg
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciog
ZmlsdGVyKSB7IHJldHVybiBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKGZp
bHRlciwgbV9pbi5nZXQoKSk7IH0KICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAg
ICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgRkVDb2xvck1hdHJpeChGaWx0ZXJFZmZlY3QqLCBDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mKTsKKyAgICAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2lu
OwogICAgICAgICBDb2xvck1hdHJpeFR5cGUgbV90eXBlOwogICAgICAgICBWZWN0b3I8ZmxvYXQ+
IG1fdmFsdWVzOwogICAgIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCShyZXZpc2lvbiA2Nzc4
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB0eXBlZGVmIHZvaWQgKCpUcmFuc2ZlclR5cGUpKHVuc2lnbmVkIGNoYXIqLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKLUZFQ29tcG9uZW50VHJhbnNmZXI6OkZF
Q29tcG9uZW50VHJhbnNmZXIoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuYywgCitGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRy
YW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIAogICAgIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGFscGhhRnVuYykKICAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQogICAg
ICwgbV9yZWRGdW5jKHJlZEZ1bmMpCiAgICAgLCBtX2dyZWVuRnVuYyhncmVlbkZ1bmMpCiAgICAg
LCBtX2JsdWVGdW5jKGJsdWVGdW5jKQpAQCAtNDcsMTAgKzQ2LDEwIEBAIEZFQ29tcG9uZW50VHJh
bnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIKIHsKIH0KIAotUGFzc1JlZlB0cjxGRUNvbXBvbmVu
dFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyRWZmZWN0KiBpbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgCitQYXNzUmVmUHRyPEZF
Q29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCAKICAgICBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGluLCByZWRGdW5j
LCBncmVlbkZ1bmMsIGJsdWVGdW5jLCBhbHBoYUZ1bmMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuYywgZ3JlZW5GdW5jLCBibHVlRnVuYywgYWxw
aGFGdW5jKSk7CiB9CiAKIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gRkVDb21wb25lbnRUcmFu
c2Zlcjo6cmVkRnVuY3Rpb24oKSBjb25zdApAQCAtMTUwLDggKzE0OSwxMCBAQCBzdGF0aWMgdm9p
ZCBnYW1tYSh1bnNpZ25lZCBjaGFyKiB2YWx1ZXMsCiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAg
ICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisgICAgQVNTRVJUKGlucHV0RmlsdGVyRWZmZWN0
cygpLnNpemUoKSA9PSAxKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRGaWx0ZXJFZmZl
Y3RzKClbMF0uZ2V0KCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0
KCkpCkBAIC0xNjcsOCArMTY4LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXIqIAogICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyBjaGFu
bmVsKyspCiAgICAgICAgICgqY2FsbEVmZmVjdFt0cmFuc2ZlckZ1bmN0aW9uW2NoYW5uZWxdLnR5
cGVdKSh0YWJsZXNbY2hhbm5lbF0sIHRyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0pOwogCi0gICAg
SW50UmVjdCBkcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxl
ZFN1YlJlZ2lvbigpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEobV9pbi0+cmVz
dWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGRyYXdpbmdSZWN0KSk7CisgICAg
SW50UmVjdCBkcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShkcmF3aW5nUmVj
dCkpOwogICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoaW1hZ2VEYXRhLT5kYXRh
KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
c3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTIzNSw3ICsy
MzYsOCBAQCBUZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hCiAgICAgdHMg
PDwgIntibHVlOiAiIDw8IG1fYmx1ZUZ1bmMgPDwgIn1cbiI7ICAgIAogICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQgKyAyKTsKICAgICB0cyA8PCAie2FscGhhOiAiIDw8IG1fYWxwaGFGdW5jIDw8
ICJ9XVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAx
KTsKKyAgICBBU1NFUlQoaW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIGlu
cHV0RmlsdGVyRWZmZWN0cygpWzBdLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQg
KyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAkocmV2aXNpb24g
Njc3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXIgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29tcG9uZW50
VHJhbnNmZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiwgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+
IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgCiAgICAgICAgICAgICAg
ICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0OwpAQCAtNzgs
MTYgKzc4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0QWxwaGFG
dW5jdGlvbihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKLSAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIp
IHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBt
X2luLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lk
IGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRUNv
bXBvbmVudFRyYW5zZmVyKEZpbHRlckVmZmVjdCosY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLAotICAgICAgICAgICAgICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7CisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKLSAgICAgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gbV9pbjsKICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3Jl
ZEZ1bmM7CiAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmM7CiAg
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ibHVlRnVuYzsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2
aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqIGluLCBG
aWx0ZXJFZmZlY3QqIGluMiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwKLSAg
ICBjb25zdCBmbG9hdCYgazEsIGNvbnN0IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQmIGszLCBjb25z
dCBmbG9hdCYgazQpCitGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZSwgY29uc3QgZmxvYXQmIGsxLCBjb25zdCBmbG9hdCYgazIsIGNvbnN0
IGZsb2F0JiBrMywgY29uc3QgZmxvYXQmIGs0KQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAs
IG1faW4oaW4pCi0gICAgLCBtX2luMihpbjIpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1f
azEoazEpCiAgICAgLCBtX2syKGsyKQpAQCAtNDUsMTAgKzQyLDEwIEBAIEZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqIGkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRUNvbXBvc2l0
ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGlu
MiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwKK1Bhc3NSZWZQdHI8RkVDb21w
b3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYg
dHlwZSwKICAgICBjb25zdCBmbG9hdCYgazEsIGNvbnN0IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQm
IGszLCBjb25zdCBmbG9hdCYgazQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbXBv
c2l0ZShpbiwgaW4yLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVDb21wb3NpdGUodHlwZSwgazEsIGsyLCBrMywgazQpKTsKIH0KIAogQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSBGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uKCkgY29uc3QKQEAgLTExOSw5ICsx
MTYsMTMgQEAgaW5saW5lIHZvaWQgYXJpdGhtZXRpYyhjb25zdCBSZWZQdHI8Q2FudgogCiB2b2lk
IEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShm
aWx0ZXIpOwotICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0
SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VSVChpbnB1dEVm
ZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7
CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29u
dGV4dCgpOwpAQCAtMTMxLDMzICsxMzIsMzMgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIpCiAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYs
IC0xLmYsIC0xLmYpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
bV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2Fs
Y3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2
ZSgpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2luMi0+cmVz
dWx0SW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJ
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2Fs
ZWRTdWJSZWdpb24oKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZl
cihpbjItPnJlc3VsdEltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluMi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgICAg
IGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2Us
IGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3Qs
IENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9u
KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3Vs
dEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNj
YWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSwgc3JjUmVjdCwgQ29tcG9zaXRl
U291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJl
c3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4y
LT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1Ip
OworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3Qs
IENvbXBvc2l0ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzogewotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICAg
ICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKG1faW4tPnJlc3VsdElt
YWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0
YSgpKTsKKyAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3
aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAg
IFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkp
OwogCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2lu
Z0ludFJlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICAgICAgUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCkpOworICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3
aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShpbjIt
PnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdS
ZWN0KSk7CiAgICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXlCKGltYWdlRGF0
YS0+ZGF0YSgpKTsKIAogICAgICAgICBhcml0aG1ldGljKHNyY1BpeGVsQXJyYXlBLCBzcmNQaXhl
bEFycmF5QiwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CkBAIC0yMTAsOCArMjExLDEwIEBAIFRl
eHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2UKICAgICBpZiAobV90eXBlID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAgIHRzIDw8ICIgazE9XCIi
IDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1cIiIgPDwgbV9rMyA8PCAi
XCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxuIjsKLSAgICBtX2luLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICBtX2luMi0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VSVChpbnB1dEVm
ZmVjdHMuc2l6ZSgpID09IDIpOworICAgIGlucHV0RWZmZWN0c1swXS0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3RzWzFdLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCShy
ZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBAIGVudW0gQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb3NpdGU+IGNyZWF0ZShG
aWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiwKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYs
IGNvbnN0IGZsb2F0Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb3NpdGU+IGNyZWF0
ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9h
dCYsIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmKTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSk7CkBAIC02MCwxNyArNTksMTMgQEAgcHVibGljOgogICAgIGZsb2F0IGs0
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRLNChmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2Fs
Y3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCksIG1f
aW4yLmdldCgpKTsgfQogICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgdm9pZCBkdW1wKCk7
CiAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50
IGluZGVudCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb3NpdGUoRmlsdGVyRWZmZWN0
KiwgRmlsdGVyRWZmZWN0KiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsCi0gICAgICAg
ICAgICBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9h
dCYpOworICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBjb25z
dCBmbG9hdCYsIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYpOwogCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBt
X2luMjsKICAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2sx
OwogICAgIGZsb2F0IG1fazI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMTcgKzM4LDE2IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBnR2F1c3NpYW5L
ZXJuZWxGYWN0b3IKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUdhdXNzaWFuQmx1cjo6RkVH
YXVzc2lhbkJsdXIoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgZmxvYXQmIHgsIGNvbnN0IGZsb2F0
JiB5KQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGNvbnN0IGZsb2F0JiB4LCBjb25z
dCBmbG9hdCYgeSkKICAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQogICAgICwg
bV9zdGRYKHgpCiAgICAgLCBtX3N0ZFkoeSkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRUdhdXNzaWFu
Qmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBmbG9h
dCYgeCwgY29uc3QgZmxvYXQmIHkpCitQYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKGNvbnN0IGZsb2F0JiB4LCBjb25zdCBmbG9hdCYgeSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZFR2F1c3NpYW5CbHVyKGluLCB4LCB5KSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGRUdhdXNzaWFuQmx1cih4LCB5KSk7CiB9CiAKIGZsb2F0IEZFR2F1c3Np
YW5CbHVyOjpzdGREZXZpYXRpb25YKCkgY29uc3QKQEAgLTEyOCwxNyArMTI3LDE5IEBAIHZvaWQg
RkVHYXVzc2lhbkJsdXI6Omtlcm5lbFBvc2l0aW9uKGludCAKIAogdm9pZCBGRUdhdXNzaWFuQmx1
cjo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAg
ICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisgICAgQVNTRVJUKGlucHV0RmlsdGVyRWZmZWN0
cygpLnNpemUoKSA9PSAxKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRGaWx0ZXJFZmZl
Y3RzKClbMF0uZ2V0KCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0FscGhh
SW1hZ2UoKSk7CisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9p
bi0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0
YShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERy
YXdpbmdSZWN0KSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURy
YXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogCiAgICAgaWYgKCFtX3N0
ZFggJiYgIW1fc3RkWSkgewpAQCAtMTk2LDcgKzE5Nyw4IEBAIFRleHRTdHJlYW0mIEZFR2F1c3Np
YW5CbHVyOjpleHRlcm5hbFJlcHIKICAgICB0cyA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKICAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgIHRzIDw8ICIgc3Rk
RGV2aWF0aW9uPVwiIiA8PCBtX3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLSAg
ICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBBU1NF
UlQoaW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIGlucHV0RmlsdGVyRWZm
ZWN0cygpWzBdLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVHYXVzc2lhbkJs
dXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IGZsb2F0JiwgY29u
c3QgZmxvYXQmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRl
KGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgo
KSBjb25zdDsKICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAtMzgsNyArMzgs
NiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0OwogICAgIHZvaWQg
c2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNo
aWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5p
b25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAgdm9p
ZCBhcHBseShGaWx0ZXIqKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKQEAgLTQ2
LDEwICs0NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlU3RkRGV2aWF0
aW9uKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgRkVHYXVzc2lhbkJsdXIoY29uc3Qg
ZmxvYXQmLCBjb25zdCBmbG9hdCYpOwogICAgIHN0YXRpYyB2b2lkIGtlcm5lbFBvc2l0aW9uKGlu
dCBib3hCbHVyLCB1bnNpZ25lZCYgc3RkLCBpbnQmIGRMZWZ0LCBpbnQmIGRSaWdodCk7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9h
dCBtX3N0ZFk7CiB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25z
dCA9IDA7CiAKICAgICAgICAgLy8gU1ZHIHNwZWNpZmljCi0gICAgICAgIHZpcnR1YWwgdm9pZCBj
YWxjdWxhdGVFZmZlY3RTdWJSZWdpb24oRmlsdGVyRWZmZWN0KikgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgRmxvYXRSZWN0JikgeyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFNpemUgbWF4SW1h
Z2VTaXplKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZWZmZWN0Qm91bmRpbmdC
b3hNb2RlKCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjEgKzEsMjMgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSBBbGV4IE1hdGhld3Mg
PHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
bGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKQEAgLTI1LDExICsyNywxMSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCgpCi0gICAgOiBtX2hhc1goZmFsc2Up
CisgICAgOiBtX2FscGhhSW1hZ2UoZmFsc2UpCisgICAgLCBtX2hhc1goZmFsc2UpCiAgICAgLCBt
X2hhc1koZmFsc2UpCiAgICAgLCBtX2hhc1dpZHRoKGZhbHNlKQogICAgICwgbV9oYXNIZWlnaHQo
ZmFsc2UpCi0gICAgLCBtX2FscGhhSW1hZ2UoZmFsc2UpCiB7CiB9CiAKQEAgLTM3LDQ0ICszOSw0
NCBAQCBGaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKQogewogfQogCi1GbG9hdFJlY3QgRmls
dGVyRWZmZWN0OjpjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciog
ZmlsdGVyLCBGaWx0ZXJFZmZlY3QqIGluKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciogZmlsdGVyKQogewotICAgIHJldHVy
biBpbi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpOwotfQorICAgIEZsb2F0UmVjdCB1bml0
ZVJlY3Q7CisgICAgLy8gRkVUdXJidWxlbmNlLCBGRUltYWdlIGFuZCBGRUZsb29kIGRvbid0IGhh
dmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0Lgor
ICAgIGlmICghbV9pbnB1dEVmZmVjdHMuc2l6ZSgpKQorICAgICAgICB1bml0ZVJlY3QgPSBmaWx0
ZXItPmZpbHRlclJlZ2lvbigpOworCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1faW5wdXRFZmZlY3RzLmJlZ2luKCk7CisgICAgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2lucHV0RWZmZWN0cy5lbmQoKTsKKyAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB1bml0ZVJlY3QudW5pdGUoaXQtPmdldCgp
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKSk7CiAKLUZsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmls
dGVyKiBmaWx0ZXIsIEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQotewotICAg
IEZsb2F0UmVjdCB1bml0ZUVmZmVjdFJlY3QgPSBpbi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0
ZXIpOwotICAgIHVuaXRlRWZmZWN0UmVjdC51bml0ZShpbjItPmNhbGN1bGF0ZUVmZmVjdFJlY3Qo
ZmlsdGVyKSk7Ci0gICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKLX0KLQotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdDo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBz
ZXRVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25z
KGZpbHRlcikpOwotICAgIGZpbHRlci0+Y2FsY3VsYXRlRWZmZWN0U3ViUmVnaW9uKHRoaXMpOwot
ICAgIHJldHVybiBzdWJSZWdpb24oKTsKKyAgICBmaWx0ZXItPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbih0aGlzLCB1bml0ZVJlY3QpOworICAgIHJldHVybiBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKIH0KIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdp
bmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKIHsKLSAgICBJbnRQb2ludCBs
b2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHNjYWxlZFN1YlJlZ2lvbigpLngo
KSAtIGVmZmVjdFJlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGVkU3ViUmVnaW9uKCkueSgpIC0gZWZmZWN0UmVjdC55KCkpKTsK
KyAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpIC0gZWZmZWN0UmVjdC54KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLnkoKSAtIGVmZmVjdFJlY3QueSgpKSk7CiAgICAgcmV0dXJuIElu
dFJlY3QobG9jYXRpb24sIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiB9CiAKIEZsb2F0UmVjdCBG
aWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCkKIHsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHNyY1JlY3QueCgp
IC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLCBzcmNSZWN0LnkoKSAtIHNjYWxlZFN1YlJlZ2lvbigp
LnkoKSk7CisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2ludChzcmNSZWN0Lngo
KSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLCBzcmNSZWN0LnkoKSAtIHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpKTsKICAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlY3QgPSBGbG9hdFJlY3Qoc3RhcnRQb2ludCwgc3JjUmVjdC5zaXplKCkpOwogICAgIHJldHVy
biBkcmF3aW5nUmVjdDsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZlY3Q6OmdldEVm
ZmVjdENvbnRleHQoKQogewotICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3Qoc2NhbGVkU3ViUmVnaW9uKCkpOworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgbV9lZmZlY3RC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBMaW5lYXJSR0Ip
OwotICAgIHJldHVybiBtX2VmZmVjdEJ1ZmZlci0+Y29udGV4dCgpOworICAgIGlmIChtX2VmZmVj
dEJ1ZmZlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLT5jb250ZXh0KCk7
CisKKyAgICByZXR1cm4gMDsKIH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBpbnQpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lv
biA2Nzc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwyMyBAQAogLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAg
ICAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLworICog
Q29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCiAKICNpZm5kZWYgRmlsdGVyRWZmZWN0X2gKICNkZWZpbmUgRmlsdGVy
RWZmZWN0X2gKQEAgLTMyLDg0ICszMyw5NiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOwordHlwZWRlZiBWZWN0b3I8
UmVmUHRyPEZpbHRlckVmZmVjdD4gPiBGaWx0ZXJFZmZlY3RWZWN0b3I7CisKK2NsYXNzIEZpbHRl
ckVmZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVmZmVjdD4geworcHVibGljOgorICAg
IHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOworCisgICAgLy8gVGhlIHJlc3VsdCBpcyBib3VuZGVk
IHRvIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRvIHNhdmUgcmVzb3VyY2VzLgor
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIoUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
ZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0gZWZmZWN0QnVmZmVyOyB9CisKKyAgICAv
LyBDcmVhdGVzIHRoZSBJbWFnZUJ1ZmZlciBmb3IgdGhlIGN1cnJlbnQgZmlsdGVyIHByaW1pdGl2
ZSByZXN1bHQgaW4gdGhlIHNpemUgb2YgdGhlCisgICAgLy8gcmVwYWludFJlY3QuIEdpdmVzIGJh
Y2sgdGhlIEdyYXBoaWNzQ29udGV4dCBvZiB0aGUgb3duIEltYWdlQnVmZmVyLgorICAgIEdyYXBo
aWNzQ29udGV4dCogZ2V0RWZmZWN0Q29udGV4dCgpOwogCi0gICAgICAgIHZvaWQgc2V0VW5pb25P
ZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhjb25zdCBGbG9hdFJlY3QmIHVuaXRlUmVjdCkgeyBtX3Vu
aW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMgPSB1bml0ZVJlY3Q7IH0KLSAgICAgICAgRmxvYXRS
ZWN0IHVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoKSBjb25zdCB7IHJldHVybiBtX3VuaW9u
T2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnM7IH0KKyAgICB2b2lkIHNldElucHV0RmlsdGVyRWZmZWN0
cyhGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgeyBtX2lucHV0RWZmZWN0cyA9IGlu
cHV0RWZmZWN0czsgfSAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RmlsdGVyRWZm
ZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAKLSAgICAgICAgRmxvYXRS
ZWN0IHN1YlJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3ViUmVnaW9uOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3ViUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgc3ViUmVnaW9uKSB7IG1fc3ViUmVnaW9u
ID0gc3ViUmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIEludFJlY3QgY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CiAKLSAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFN1YlJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2NhbGVkU3ViUmVnaW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0U2NhbGVkU3Vi
UmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgc2NhbGVkU3ViUmVnaW9uKSB7IG1fc2NhbGVkU3ViUmVn
aW9uID0gc2NhbGVkU3ViUmVnaW9uOyB9CisgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBk
aWZmZXJlbnQgYWxwaGEgdmFsdWVzLgorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgeyByZXR1cm4g
bV9hbHBoYUltYWdlOyB9CisgICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdl
KSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KIAotICAgICAgICBGbG9hdFJlY3QgZWZm
ZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAg
ICAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3Vu
ZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICBG
bG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSB7IHJldHVybiBtX3JlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzOyB9CisgICAgdm9pZCBzZXRSZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKSB7IG1fcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgPSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlczsgfQogCi0gICAgICAgIGJvb2wgaGFzWCgpIHsgcmV0dXJuIG1faGFzWDsg
fQotICAgICAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1
bXAoKSA9IDA7CiAKLSAgICAgICAgYm9vbCBoYXNZKCkgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAg
ICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9CisgICAgdmly
dHVhbCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIGJv
b2wgaGFzV2lkdGgoKSB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFz
V2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24gPSAwKSBjb25zdDsKIAotICAgICAgICBib29sIGhhc0hlaWdodCgpIHsgcmV0dXJuIG1faGFz
SGVpZ2h0OyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNI
ZWlnaHQgPSB2YWx1ZTsgfQorcHVibGljOgorICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z
IGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS4KKyAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NTYxNC4KKyAgICBib29sIGhhc1goKSB7IHJldHVybiBtX2hhc1g7IH0KKyAg
ICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQogCi0gICAgICAg
IC8vIFRoZSByZXN1bHQgaXMgYm91bmRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHByaW1p
dGl2ZSB0byBzYXZlIHJlc291cmNlcwotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Uo
KSB7IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldEVmZmVj
dEJ1ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsgbV9lZmZlY3RC
dWZmZXIgPSBlZmZlY3RCdWZmZXI7IH0KKyAgICBib29sIGhhc1koKSB7IHJldHVybiBtX2hhc1k7
IH0KKyAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQogCi0g
ICAgICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZp
bHRlciosIEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCopOwotICAgICAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqLCBGaWx0ZXJFZmZl
Y3QqKTsKKyAgICBib29sIGhhc1dpZHRoKCkgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQorICAgIHZv
aWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KIAotICAg
ICAgICBHcmFwaGljc0NvbnRleHQqIGdldEVmZmVjdENvbnRleHQoKTsKLSAgICAgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICBJbnRS
ZWN0IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIGJvb2wg
aGFzSGVpZ2h0KCkgeyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhhc0hlaWdo
dChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KIAotICAgICAgICAvLyBibGFj
ayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMKLSAgICAgICAgYm9vbCBpc0FscGhh
SW1hZ2UoKSB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICAgICAgdm9pZCBzZXRJc0FscGhh
SW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KKyAg
ICAvLyBGSVhNRTogUHNldWRvIHByaW1pdGl2ZXMgbGlrZSBTb3VyY2VHcmFwaGljIGFuZCBTb3Vy
Y2VBbHBoYSBhcyB3ZWxsIGFzIEZFVGlsZSBzdGlsbCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcuCisg
ICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZp
bHRlciopOwogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJy
ZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOyB9
Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUVmZmVjdFJlY3QoRmlsdGVyKik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCkgPSAwOworICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKSB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZvaWQgc2V0
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVz
KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMg
PSBlZmZlY3RCb3VuZGFyaWVzOyB9CiAKLSAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uID0gMCkgY29uc3Q7
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBGaWx0ZXJFZmZlY3QoKTsKK3Byb3RlY3RlZDoKKyAg
ICBGaWx0ZXJFZmZlY3QoKTsKIAotICAgIHByaXZhdGU6Citwcml2YXRlOgorICAgIG11dGFibGUg
T3duUHRyPEltYWdlQnVmZmVyPiBtX2VmZmVjdEJ1ZmZlcjsKKyAgICBtdXRhYmxlIEZpbHRlckVm
ZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAotICAgICAgICBib29sIG1feEJCb3hNb2RlIDog
MTsKLSAgICAgICAgYm9vbCBtX3lCQm94TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgbV93aWR0aEJC
b3hNb2RlIDogMTsKLSAgICAgICAgYm9vbCBtX2hlaWdodEJCb3hNb2RlIDogMTsKKyAgICBib29s
IG1fYWxwaGFJbWFnZTsKIAotICAgICAgICBib29sIG1faGFzWCA6IDE7Ci0gICAgICAgIGJvb2wg
bV9oYXNZIDogMTsKLSAgICAgICAgYm9vbCBtX2hhc1dpZHRoIDogMTsKLSAgICAgICAgYm9vbCBt
X2hhc0hlaWdodCA6IDE7CisgICAgLy8gRklYTUU6IFNob3VsZCBiZSB0aGUgcGFpbnQgcmVnaW9u
IG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlLCBpbnN0ZWFkIG9mIHRoZSBzY2FsZWQgc3VicmVnaW9u
IG9uIHVzZSBvZiBmaWx0ZXJSZXMuCisgICAgRmxvYXRSZWN0IG1fcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXM7CiAKLSAgICAgICAgYm9vbCBtX2FscGhhSW1hZ2U7Citwcml2YXRlOgorICAg
IC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyBhcmUgU1ZHIHNwZWNpZmljIGFuZCB3
aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCisgICAgLy8gU2Vl
IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQuCiAKLSAg
ICAgICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAgICAgICAgRmxvYXRSZWN0IG1f
c3ViUmVnaW9uOwotICAgICAgICBGbG9hdFJlY3QgbV9zY2FsZWRTdWJSZWdpb247Ci0gICAgICAg
IEZsb2F0UmVjdCBtX3VuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnM7CisgICAgLy8gVGhlIHN1
YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVy
IHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCisgICAgLy8gVGhpcyBpcyBTVkcg
c3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUuCisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwogCi0gICAg
ICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2VmZmVjdEJ1ZmZlcjsKLSAgICB9Owor
ICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50
LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCisgICAgLy8gZmls
dGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCisgICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91
bmRhcmllczsKKyAgICBib29sIG1faGFzWDsKKyAgICBib29sIG1faGFzWTsKKyAgICBib29sIG1f
aGFzV2lkdGg7CisgICAgYm9vbCBtX2hhc0hlaWdodDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE2ICs0
MiwxNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROCiAgICAgcmV0
dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVF
ZmZlY3RSZWN0KEZpbHRlciogZmlsdGVyKQorRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCiB7CiAgICAgRmxvYXRS
ZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKICAgICBp
ZiAoZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKS54KCkgPCBmaWx0ZXItPmZpbHRlclJlZ2lvbigp
LngoKSkKICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0WChmaWx0ZXItPmZpbHRlclJlZ2lv
bigpLngoKSk7CiAgICAgaWYgKGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCkueSgpIDwgZmlsdGVy
LT5maWx0ZXJSZWdpb24oKS55KCkpCiAgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LnNldFkoZmls
dGVyLT5maWx0ZXJSZWdpb24oKS55KCkpOwotICAgIHNldFN1YlJlZ2lvbihjbGlwcGVkU291cmNl
UmVjdCk7CisgICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0
KTsKICAgICBjbGlwcGVkU291cmNlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgc2V0
U2NhbGVkU3ViUmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsKKyAgICBzZXRSZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcyhjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgcmV0dXJuIGZpbHRlci0+
ZmlsdGVyUmVnaW9uKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMSArMzQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
b3VyY2VJbnB1dCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIq
KTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7
CiAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgU291cmNlQWxwaGEoKSB7IH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNiArNDEsMTYgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZlYwogICAgIHJldHVybiBzX2VmZmVj
dE5hbWU7CiB9CiAKLUZsb2F0UmVjdCBTb3VyY2VHcmFwaGljOjpjYWxjdWxhdGVFZmZlY3RSZWN0
KEZpbHRlciogZmlsdGVyKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBGbG9hdFJlY3QgY2xp
cHBlZFNvdXJjZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwogICAgIGlmIChmaWx0
ZXItPnNvdXJjZUltYWdlUmVjdCgpLngoKSA8IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueCgpKQog
ICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5zZXRYKGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueCgp
KTsKICAgICBpZiAoZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKS55KCkgPCBmaWx0ZXItPmZpbHRl
clJlZ2lvbigpLnkoKSkKICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0WShmaWx0ZXItPmZp
bHRlclJlZ2lvbigpLnkoKSk7Ci0gICAgc2V0U3ViUmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsK
KyAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOwogICAg
IGNsaXBwZWRTb3VyY2VSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRTY2FsZWRT
dWJSZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOworICAgIHNldFJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICByZXR1cm4gZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEyICszNSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nv
dXJjZUlucHV0KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBj
YWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciopOwogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciop
OwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0gICAgCisKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0
ZXIqKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFNvdXJjZUdyYXBoaWMoKSB7IH0KICAgICB9
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw4IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTksNyArMTksNiBAQAogICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KICAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMTkzLDEyICsxOTIsMTIgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAgIGlmICghbGFzdEVmZmVjdCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIGxhc3RFZmZlY3QtPmNhbGN1bGF0ZUVmZmVjdFJlY3Qo
ZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKKyAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKICAgICAvLyBB
dCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAv
LyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCiAg
ICAgaWYgKCFmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGZpbHRlckRhdGEtPmZpbHRlci0+bWF4SW1h
Z2VTaXplKCksIHNjYWxlKSkgewogICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LT5jYWxjdWxhdGVFZmZlY3RS
ZWN0KGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7CisgICAgICAgIGxhc3RFZmZlY3QtPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwog
ICAgIH0KIAogICAgIGNsaXBwZWRTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxl
LmhlaWdodCgpKTsKQEAgLTI1NSw3ICsyNTQsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpwb3N0QXBwbHlSCiAKICAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJE
YXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7CiAgICAgCi0gICAgaWYgKGxhc3RFZmZlY3QgJiYg
IWZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5zdWJSZWdp
b24oKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91
bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBv
ZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAg
Ly8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmls
dGVyIHJlc3VsdCBvbiBhCiAgICAgICAgIC8vIHNlY29uZCBkcmF3aW5nLgpAQCAtMjcyLDcgKzI3
MSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKIAogICAgICAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpOwog
ICAgICAgICBpZiAocmVzdWx0SW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZm
ZWN0LT5zdWJSZWdpb24oKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
cmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5m
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CiAgICAgfQogCiAgICAgZmlsdGVyRGF0YS0+c291
cmNlR3JhcGhpY0J1ZmZlci5jbGVhcigpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDggKzg2LDE0IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUJsZW5kRWxlbWUKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAg
IHJldHVybiAwOworICAgICAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgaW5wdXRFZmZlY3Rz
OworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1dEVmZmVjdHMuYXBw
ZW5kKGlucHV0Mik7CiAKLSAgICByZXR1cm4gRkVCbGVuZDo6Y3JlYXRlKGlucHV0MSwgaW5wdXQy
LCBzdGF0aWNfY2FzdDxCbGVuZE1vZGVUeXBlPihtb2RlKCkpKTsKKyAgICBQYXNzUmVmUHRyPEZp
bHRlckVmZmVjdD4gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKHN0YXRpY19jYXN0PEJsZW5kTW9k
ZVR5cGU+KG1vZGUoKSkpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKGlucHV0
RWZmZWN0cyk7CisgICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsx
MjMsMTIgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0
ZShpbnB1dDEsIGZpbHRlclR5cGUsIGZpbHRlclZhbHVlcyk7CisgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7CisKKyAg
ICBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KGZpbHRlclR5cGUsIGZpbHRlclZhbHVlcyk7CisgICAgZWZmZWN0LT5zZXRJbnB1dEZpbHRlckVm
ZmVjdHMoaW5wdXRFZmZlY3RzKTsKKyAgICByZXR1cm4gZWZmZWN0OwogfQogCiB9IC8vbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4MywxMiBAQCBQ
YXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUCiAgICAgICAgICAgICBhbHBo
YSA9IHN0YXRpY19jYXN0PFNWR0ZFRnVuY0FFbGVtZW50Kj4obiktPnRyYW5zZmVyRnVuY3Rpb24o
KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShp
bnB1dDEsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Ig
aW5wdXRFZmZlY3RzOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKworICAgIFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJF
ZmZlY3RzKGlucHV0RWZmZWN0cyk7CisgICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MCw4ICsxMTAsMTQgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRQog
ICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAg
IHJldHVybiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGlucHV0MSwgaW5wdXQyLCBzdGF0aWNfY2FzdDxD
b21wb3NpdGVPcGVyYXRpb25UeXBlPihfb3BlcmF0b3IoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgazEoKSwgazIoKSwgazMoKSwgazQoKSk7CisgICAgRmlsdGVy
RWZmZWN0VmVjdG9yIGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0
MSk7CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOworCisgICAgUGFzc1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q29t
cG9zaXRlT3BlcmF0aW9uVHlwZT4oX29wZXJhdG9yKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxKCksIGsyKCksIGszKCksIGs0
KCkpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKGlucHV0RWZmZWN0cyk7Cisg
ICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSwxMCArMTUx
LDE1IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWEKICAgICAgICAg
ICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgcmV0dXJuIEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZSgKLSAgICAgICAgaW5wdXQxLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwKLSAgICAgICAgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFs
dWUsIHRhcmdldFlWYWx1ZSksIHN0YXRpY19jYXN0PEVkZ2VNb2RlVHlwZT4oZWRnZU1vZGUoKSks
Ci0gICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0
aFgoKSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4VmFsdWVzKTsKKyAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3IgaW5wdXRFZmZlY3RzOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQx
KTsKKworICAgIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0
cml4OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUsIG9y
ZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgICAgICAgICBiaWFzKCksIElu
dFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgc3RhdGljX2Nhc3Q8RWRnZU1vZGVU
eXBlPihlZGdlTW9kZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJu
ZWxNYXRyaXhWYWx1ZXMpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKGlucHV0
RWZmZWN0cyk7CisgICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsMTMgQEAgUGFzc1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZmlsdGVy
U3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7CiAgICAgQ29sb3IgY29sb3IgPSBmaWx0ZXJTdHls
ZS0+c3ZnU3R5bGUoKS0+bGlnaHRpbmdDb2xvcigpOwogICAgIAotICAgIHJldHVybiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKGlucHV0MSwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNl
Q29uc3RhbnQoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIGZpbmRMaWdodHMoKSk7
CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMu
YXBwZW5kKGlucHV0MSk7CisKKyAgICBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VD
b25zdGFudCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WSgpLCBmaW5kTGlnaHRzKCkpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKGlu
cHV0RWZmZWN0cyk7CisgICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaW5kTGlnaHRzKCkgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkocmV2aXNp
b24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDE0IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURpc3BsYWNlbWUKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgCi0gICAgcmV0dXJuIEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoaW5wdXQxLCBpbnB1dDIsIHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+
KHhDaGFubmVsU2VsZWN0b3IoKSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHlDaGFubmVsU2VsZWN0b3IoKSks
IHNjYWxlKCkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBpbnB1dEVmZmVjdHM7CisgICAgaW5w
dXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQy
KTsKKworICAgIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRURpc3BsYWNlbWVu
dE1hcDo6Y3JlYXRlKHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHhDaGFubmVsU2Vs
ZWN0b3IoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHlDaGFu
bmVsU2VsZWN0b3IoKSksIHNjYWxlKCkpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZl
Y3RzKGlucHV0RWZmZWN0cyk7CisgICAgcmV0dXJuIGVmZmVjdDsKIH0KIAogfQpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDEyIEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFu
QmwKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZShpbnB1dDEsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgaW5wdXRFZmZlY3RzOworICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKKworICAgIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpKTsKKyAgICBlZmZlY3QtPnNldElucHV0RmlsdGVyRWZmZWN0cyhpbnB1dEVmZmVjdHMpOwor
ICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIFBhc3NSZWZQdHI8U1ZHRkVNZXJnZUVs
ZW1lbnQ+IFNWR0ZFTWVyZ2UKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1lcmdlSW5wdXRzOworICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtZXJnZUlucHV0czsKICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG4g
IT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OmZlTWVyZ2VOb2RlVGFnKSkgewogICAgICAgICAgICAgRmlsdGVyRWZmZWN0KiBt
ZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoc3RhdGljX2Nhc3Q8U1ZH
RkVNZXJnZU5vZGVFbGVtZW50Kj4obiktPmluMSgpKTsKQEAgLTUyLDcgKzUyLDkgQEAgUGFzc1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZQogICAgIGlmIChtZXJnZUlucHV0cy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0
ZShtZXJnZUlucHV0cyk7CisgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZF
TWVyZ2U6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+c2V0SW5wdXRGaWx0ZXJFZmZlY3RzKG1lcmdl
SW5wdXRzKTsKKyAgICByZXR1cm4gZWZmZWN0OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSwx
MiBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5CiAgICAgaWYgKHhS
YWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVy
biBGRU1vcnBob2xvZ3k6OmNyZWF0ZShpbnB1dDEsIHN0YXRpY19jYXN0PE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU+KF9vcGVyYXRvcigpKSwgeFJhZGl1cywgeVJhZGl1cyk7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7
CisKKyAgICBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVNb3JwaG9sb2d5Ojpj
cmVhdGUoc3RhdGljX2Nhc3Q8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oX29wZXJhdG9yKCkpLCB4
UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBlZmZlY3QtPnNldElucHV0RmlsdGVyRWZmZWN0cyhpbnB1
dEVmZmVjdHMpOworICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDcgKzg2LDEyIEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW0KICAg
ICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gRkVPZmZzZXQ6
OmNyZWF0ZShpbnB1dDEsIGR4KCksIGR5KCkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBpbnB1
dEVmZmVjdHM7CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOworCisgICAgUGFzc1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7
CisgICAgZWZmZWN0LT5zZXRJbnB1dEZpbHRlckVmZmVjdHMoaW5wdXRFZmZlY3RzKTsKKyAgICBy
ZXR1cm4gZWZmZWN0OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDggKzEx
OSwxMyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpCiAgICAgCiAg
ICAgQ29sb3IgY29sb3IgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+bGlnaHRpbmdDb2xvcigp
OwogICAgIAotICAgIHJldHVybiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShpbnB1dDEsIGNv
bG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVu
Z3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOworICAgIEZpbHRlckVm
ZmVjdFZlY3RvciBpbnB1dEVmZmVjdHM7CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEp
OworCisgICAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdo
dGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGFyRXhwb25l
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgZmluZExpZ2h0
cygpKTsKKyAgICBlZmZlY3QtPnNldElucHV0RmlsdGVyRWZmZWN0cyhpbnB1dEVmZmVjdHMpOwor
ICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2MiwxMiBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVUaWxlRWxlbWVuCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIEZFVGlsZTo6Y3JlYXRlKGlucHV0MSk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGlucHV0RWZmZWN0czsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7CisKKyAgICBQ
YXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoKTsKKyAgICBl
ZmZlY3QtPnNldElucHV0RmlsdGVyRWZmZWN0cyhpbnB1dEVmZmVjdHMpOworICAgIHJldHVybiBl
ZmZlY3Q7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVD
b252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxMSArMzMsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZv
bHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IEludFNp
emUmIGtlcm5lbFNpemUsCitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0
IEludFNpemUmIGtlcm5lbFNpemUsCiAgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29u
c3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAogICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAg
ICAsIG1faW4oaW4pCiAgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2
aXNvcihkaXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCkBAIC00OSwxMSArNDgsMTEgQEAgRkVD
b252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZQogewogfQogCi1QYXNzUmVmUHRy
PEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXJFZmZlY3Qq
IGluLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAorUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0
cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwK
ICAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCiAgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJu
ZWxNYXRyaXgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGlu
LCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJu
ZWxVbml0TGVuZ3RoLAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb252b2x2ZU1hdHJpeChr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKIH0KIApA
QCAtMzc0LDIxICszNzMsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OnNldAogCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewot
ICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpKQor
ICAgIEFTU0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXplKCkgPT0gMSk7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RmlsdGVyRWZmZWN0cygpWzBdLmdldCgpOworICAgIGluLT5hcHBs
eShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJ
bnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAg
IEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2lu
LT5zdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0
ZURyYXdpbmdJbnRSZWN0KGluLT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CiAKICAgICBS
ZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheTsKICAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gbV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAg
ICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKICAgICBlbHNlCi0gICAgICAgIHNyY1Bp
eGVsQXJyYXkgPSBtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4t
PnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1Jl
Y3QpLT5kYXRhKCk7CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKIApAQCAt
NDYzLDcgKzQ2NCw4IEBAIFRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmUK
ICAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8
PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAg
ICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4i
OwotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAg
IEFTU0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXplKCkgPT0gMSk7CisgICAgaW5wdXRGaWx0
ZXJFZmZlY3RzKClbMF0tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwog
ICAgIHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKIAogY2xhc3MgRkVD
b252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25z
dCBJbnRTaXplJiwKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVh
dGUoY29uc3QgSW50U2l6ZSYsCiAgICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBv
aW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKICAgICAgICAgICAgIGJvb2ws
IGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIApAQCAtNzIsMTMgKzcyLDEyIEBAIHB1YmxpYzoKICAg
ICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdDsKICAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEo
Ym9vbCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9u
cyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3Vi
cmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsK
ICAgICB2b2lkIGR1bXAoKTsKICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRUNvbnZv
bHZlTWF0cml4KEZpbHRlckVmZmVjdCosIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCisg
ICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAogICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBi
b29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
QEAgLTEwMSw3ICsxMDAsNiBAQCBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJ
bnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwg
aW50IGNsaXBCb3R0b20pOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHky
KTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAgSW50U2l6ZSBtX2tlcm5l
bFNpemU7CiAgICAgZmxvYXQgbV9kaXZpc29yOwogICAgIGZsb2F0IG1fYmlhczsKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNyArMjksMTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAogICAgIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6IEZF
TGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBpbiwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBkaWZmdXNlQ29uc3RhbnQsIDAuMGYsIDAuMGYsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGlu
ZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAuMGYsIDAu
MGYsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCiB7
CiB9CiAKLVBhc3NSZWZQdHI8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpj
cmVhdGUoRmlsdGVyRWZmZWN0KiBpbiAsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAorUGFz
c1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCiAgICAgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRkVEaWZmdXNlTGlnaHRpbmcoaW4sIGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVs
VW5pdExlbmd0aFksIGxpZ2h0U291cmNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURp
ZmZ1c2VMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwog
fQogCiBGRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkKQEAgLTExOCw3ICsx
MTgsOCBAQCBUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSCiAgICAgdHMg
PDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAg
PDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwgIlwiICIKICAg
ICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAi
LCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBBU1NFUlQoaW5wdXRGaWx0ZXJF
ZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIGlucHV0RmlsdGVyRWZmZWN0cygpWzBdLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBAIGNsYXNzIExpZ2h0U291cmNlOwogCiBjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1Ymxp
YyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRURpZmZ1c2VM
aWdodGluZz4gY3JlYXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0
LAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3Qg
Q29sb3ImLCBmbG9hdCwgZmxvYXQsCiAgICAgICAgIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxM
aWdodFNvdXJjZT4pOwogICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CiAKQEAgLTU3
LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFRGlm
ZnVzZUxpZ2h0aW5nKEZpbHRlckVmZmVjdCosIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAor
ICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAogICAgICAg
ICBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKIH07CiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMSArMzMsMTgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFj
ZW1lbnRNYXAoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IsIGNvbnN0IGZsb2F0JiBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURp
c3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsICBDaGFu
bmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGNvbnN0IGZsb2F0JiBzY2FsZSkKICAg
ICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQotICAgICwgbV9pbjIoaW4yKQogICAg
ICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3lDaGFubmVs
U2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKICAgICAsIG1fc2NhbGUoc2NhbGUpCiB7CiB9CiAK
LVBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUo
RmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIsCi0gICAgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IsIGNvbnN0IGZsb2F0JiBzY2FsZSkKK1Bhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IEZF
RGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVj
dG9yLAorICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgY29uc3QgZmxv
YXQmIHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaXNwbGFjZW1lbnRNYXAo
aW4sIGluMiwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3Is
IHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIENoYW5uZWxTZWxlY3RvclR5cGUgRkVE
aXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0b3IoKSBjb25zdApAQCAtODIsOSArNzksMTMg
QEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgcwogCiB2b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShm
aWx0ZXIpOwotICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0
SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VSVChpbnB1dEVm
ZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7
CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlm
ICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04gfHwg
bV95Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTikKQEAgLTkzLDExICs5NCwxMSBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXIqIGZpCiAgICAgaWYgKCFnZXRF
ZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZWZmZWN0QURy
YXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVj
dCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVE
cmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAg
UmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGluLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7
CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRS
ZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJy
YXk+IHNyY1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKyAgICBJbnRSZWN0IGVmZmVj
dEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluMi0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1Bp
eGVsQXJyYXlCKGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQ
b2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+IGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3Qu
aGVpZ2h0KCkpOwpAQCAtMTYzLDggKzE2NCwxMCBAQCBUZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVu
dE1hcDo6ZXh0ZXJuYWxSCiAgICAgdHMgPDwgIiBzY2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIg
IgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3Ig
PDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNl
bGVjdG9yIDw8ICJcIl1cbiI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7Ci0gICAgbV9pbjItPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVu
dCArIDEpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBpbnB1dEVmZmVjdHMgPSBpbnB1dEZpbHRl
ckVmZmVjdHMoKTsKKyAgICBBU1NFUlQoaW5wdXRFZmZlY3RzLnNpemUoKSA9PSAyKTsKKyAgICBp
bnB1dEVmZmVjdHNbMF0tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwor
ICAgIGlucHV0RWZmZWN0c1sxXS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsg
MSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA2Nzc4MSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksOCArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAg
ICAgY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVh
dGUoRmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0KiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSwKLSAg
ICAgICAgICAgICAgICBDaGFubmVsU2VsZWN0b3JUeXBlLCBjb25zdCBmbG9hdCYpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxl
Y3RvclR5cGUsIENoYW5uZWxTZWxlY3RvclR5cGUsIGNvbnN0IGZsb2F0Jik7CiAKICAgICAgICAg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTUx
LDE3ICs1MCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpOwogCi0gICAgICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVy
KSB7IHJldHVybiBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlciwg
bV9pbi5nZXQoKSwgbV9pbjIuZ2V0KCkpOyB9CiAgICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7
CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAgICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCos
IENoYW5uZWxTZWxlY3RvclR5cGUsCi0gICAgICAgICAgICBDaGFubmVsU2VsZWN0b3JUeXBlLCBj
b25zdCBmbG9hdCYpOworICAgICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JU
eXBlLCBDaGFubmVsU2VsZWN0b3JUeXBlLCBjb25zdCBmbG9hdCYpOwogCi0gICAgICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IG1faW47Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW4y
OwogICAgICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICAg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CiAgICAgICAgIGZsb2F0
IG1fc2NhbGU7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9v
ZC5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEZFRmxv
b2Q6OmFwcGx5KEZpbHRlciopCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbG9yIGNvbG9yID0g
Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgp
KTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
Y2FsZWRTdWJSZWdpb24oKS5zaXplKCkpLCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAg
ZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpLCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7
CiB9CiAKIHZvaWQgRkVGbG9vZDo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5KEZpbHRlciopCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzdWJSZWdpb24oKS5zaXplKCkpOwor
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpLnNpemUoKSk7CiAKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVj
dChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMiArMzUsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxp
Z2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIEZpbHRlckVmZmVjdCogaW4sIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCitGRUxpZ2h0aW5nOjpG
RUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGlu
Z0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAogICAgIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQogICAgICwgbV9s
aWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9pbihpbikKICAgICAsIG1fbGlnaHRT
b3VyY2UobGlnaHRTb3VyY2UpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikK
ICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKQEAgLTI0Myw4ICsyNDIsMTAgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZQogCiB2b2lkIEZFTGlnaHRp
bmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewotICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0g
ICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpKQorICAgIEFTU0VSVChpbnB1dEZpbHRlckVmZmVj
dHMoKS5zaXplKCkgPT0gMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RmlsdGVyRWZm
ZWN0cygpWzBdLmdldCgpOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJl
c3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4
dCgpKQpAQCAtMjUyLDggKzI1Myw4IEBAIHZvaWQgRkVMaWdodGluZzo6YXBwbHkoRmlsdGVyKiBm
aWx0ZXIpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJl
Z2lvbigpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7Cisg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGlu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3REcmF3aW5nUmVjdCkpOwogICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJy
YXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVs
VW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUg
VzMKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5o
CShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVM
aWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIENhbnZhc1Bp
eGVsQXJyYXk7CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhG
aWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVn
aW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKIAog
cHJvdGVjdGVkOgpAQCAtNzIsMTUgKzcxLDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQUxXQVlT
X0lOTElORSBpbnQgZG93blJpZ2h0UGl4ZWxWYWx1ZSgpOwogICAgIH07CiAKLSAgICBGRUxpZ2h0
aW5nKExpZ2h0aW5nVHlwZSwgRmlsdGVyRWZmZWN0KiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LAotICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPik7CisgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4pOwogCiAgICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSosIGludCwg
aW50KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiwgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCiAgICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFks
IGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFsWSk7
CiAKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9pbjsKICAgICBSZWZQdHI8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiAKICAg
ICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFTWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNDYgKzMw
LDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNZXJnZTo6RkVNZXJnZShjb25zdCBW
ZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpIAorRkVNZXJnZTo6RkVN
ZXJnZSgpIAogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fbWVyZ2VJbnB1dHMobWVyZ2VJ
bnB1dHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKGNvbnN0
IFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+JiBtZXJnZUlucHV0cykKK1Bhc3NSZWZQdHI8
RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZF
TWVyZ2UobWVyZ2VJbnB1dHMpKTsKLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+ID4mIEZFTWVyZ2U6Om1lcmdlSW5wdXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZXJn
ZUlucHV0czsKLX0KLQotdm9pZCBGRU1lcmdlOjpzZXRNZXJnZUlucHV0cyhjb25zdCBWZWN0b3I8
UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpCi17Ci0gICAgbV9tZXJnZUlucHV0
cyA9IG1lcmdlSW5wdXRzOwotfQotCi1GbG9hdFJlY3QgRkVNZXJnZTo6dW5pdGVDaGlsZEVmZmVj
dFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgQVNTRVJUKCFtX21lcmdlSW5wdXRz
LmlzRW1wdHkoKSk7Ci0KLSAgICBGbG9hdFJlY3QgdW5pdGVFZmZlY3RSZWN0ID0gbV9tZXJnZUlu
cHV0c1swXS0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHVuaXRlRWZm
ZWN0UmVjdC51bml0ZShtX21lcmdlSW5wdXRzW2ldLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRl
cikpOwotCi0gICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZFTWVyZ2UoKSk7CiB9CiAKIHZvaWQgRkVNZXJnZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiB7Ci0gICAgQVNTRVJUKCFtX21lcmdlSW5wdXRzLmlzRW1wdHkoKSk7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIEFTU0VS
VCghaW5wdXRFZmZlY3RzLmlzRW1wdHkoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9tZXJnZUlucHV0cy5zaXplKCk7IGkrKykgewotICAgICAgICBtX21lcmdlSW5wdXRzW2ld
LT5hcHBseShmaWx0ZXIpOwotICAgICAgICBpZiAoIW1fbWVyZ2VJbnB1dHNbaV0tPnJlc3VsdElt
YWdlKCkpCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGlucHV0
RWZmZWN0cy5iZWdpbigpOworICAgIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gaW5wdXRFZmZlY3RzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGl0LT5nZXQoKTsKKyAgICAgICAgaW4t
PmFwcGx5KGZpbHRlcik7CisgICAgICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC03Nyw5ICs1OCwxMSBAQCB2b2lkIEZFTWVyZ2U6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ1Jl
Y3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKSwg
RGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOworICAgIGl0ID0gaW5wdXRFZmZlY3RzLmJlZ2lu
KCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaXQtPmdldCgpOworICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjYWxjdWxhdGVE
cmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgZGVzdFJlY3QpOwogICAgIH0KIH0KIApAQCAtOTIsMTAgKzc1LDEyIEBAIFRl
eHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXQKICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50KTsKICAgICB0cyA8PCAiW2ZlTWVyZ2UiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBt
X21lcmdlSW5wdXRzLnNpemUoKSA8PCAiXCJdXG4iOwotICAgIGlmICghbV9tZXJnZUlucHV0cy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWVyZ2VJbnB1dHMuZW5kKCk7Ci0gICAgICAgIGZvciAo
VmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXJn
ZUlucHV0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGlucHV0RWZmZWN0cyA9IGlucHV0RmlsdGVyRWZmZWN0cygpOworICAgIHRzIDw8ICIgbWVyZ2VO
b2Rlcz1cIiIgPDwgaW5wdXRFZmZlY3RzLnNpemUoKSA8PCAiXCJdXG4iOworICAgIGlmICghaW5w
dXRFZmZlY3RzLmlzRW1wdHkoKSkgeworICAgICAgICBGaWx0ZXJFZmZlY3RWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaW5wdXRFZmZlY3RzLmJlZ2luKCk7CisgICAgICAgIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5wdXRFZmZlY3RzLmVuZCgpOwor
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgKCppdCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwogICAgIH0KICAgICByZXR1cm4gdHM7
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAkocmV2aXNp
b24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVm
UHRyPEZpbHRlckVmZmVjdD4gPiYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1lcmdl
PiBjcmVhdGUoKTsKIAotICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4g
PiYgbWVyZ2VJbnB1dHMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRNZXJnZUlucHV0cyhjb25z
dCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpOwotCi0gICAgICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciopOwog
ICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAg
ICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRU1lcmdlKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+Jik7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+ID4gbV9tZXJnZUlucHV0czsKKyAgICAgICAgRkVNZXJnZSgpOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxOCArMzcsMTcgQEAgdXNpbmcgc3RkOjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyRWZmZWN0KiBpbiwgTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVN
b3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9h
dCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1f
aW4oaW4pCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAg
ICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBG
RU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitQYXNzUmVmUHRyPEZFTW9y
cGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBl
LCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRkVNb3JwaG9sb2d5KGluLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGRU1vcnBob2xvZ3kodHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQog
CiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIEZFTW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9y
KCkgY29uc3QKQEAgLTgzLDE0ICs4MiwxNiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVz
WShmbG9hdCByYWRpCiAKIHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikK
IHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2Uo
KSkKKyAgICBBU1NFUlQoaW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEZpbHRlckVmZmVjdHMoKVswXS5nZXQoKTsKKyAgICBpbi0+
YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBpbnQgcmFkaXVzWCA9IHN0YXRp
Y19jYXN0PGludD4obV9yYWRpdXNYICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFkaXVzWSAqIGZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKQEAgLTk4LDggKzk5LDggQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCht
X2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNy
Y1BpeGVsQXJyYXkobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5n
UmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShp
bi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5n
UmVjdCktPmRhdGEoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAKICAg
ICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogNDsKQEAgLTE3
OSw4ICsxODAsOSBAQCBUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzCiAg
ICAgdHMgPDwgIltmZU1vcnBob2xvZ3kiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cyk7CiAgICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9w
ZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwg
IiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsgICAgIAotICAgIG1faW4tPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IHJh
ZGl1c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAKKyAgICBBU1NFUlQo
aW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIGlucHV0RmlsdGVyRWZmZWN0
cygpWzBdLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3Jw
aG9sb2d5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RU1vcnBob2xvZ3kuaAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVN
b3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyRWZmZWN0KiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7ICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSk7ICAKICAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBt
b3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3Bl
cmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAKQEAgLTQ2LDE1ICs0NiwxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IHJhZGl1c1koKSBjb25zdDsKICAgICAgICAg
dm9pZCBzZXRSYWRpdXNZKGZsb2F0KTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0
ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRl
VW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAg
ICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAgICAgICBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZFTW9ycGhvbG9neShGaWx0ZXJFZmZl
Y3QqLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZ
KTsKKyAgICAgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJh
ZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9pbjsKICAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CiAgICAg
ICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICAgICAgZmxvYXQgbV9yYWRpdXNZOwpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHJldmlzaW9uIDY3
NzgxKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBmbG9hdCYgZHgsIGNv
bnN0IGZsb2F0JiBkeSkKK0ZFT2Zmc2V0OjpGRU9mZnNldChjb25zdCBmbG9hdCYgZHgsIGNvbnN0
IGZsb2F0JiBkeSkKICAgICA6IEZpbHRlckVmZmVjdCgpCi0gICAgLCBtX2luKGluKQogICAgICwg
bV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVPZmZzZXQ+IEZF
T2Zmc2V0OjpjcmVhdGUoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgZmxvYXQmIGR4LCBjb25zdCBm
bG9hdCYgZHkpCitQYXNzUmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGNvbnN0IGZs
b2F0JiBkeCwgY29uc3QgZmxvYXQmIGR5KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVP
ZmZzZXQoaW4sIGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVPZmZzZXQoZHgs
IGR5KSk7CiB9CiAKIGZsb2F0IEZFT2Zmc2V0OjpkeCgpIGNvbnN0CkBAIC02NiwxNSArNjUsMTcg
QEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAKIHZvaWQgRkVPZmZzZXQ6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQogewotICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFt
X2luLT5yZXN1bHRJbWFnZSgpKQorICAgIEFTU0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXpl
KCkgPT0gMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RmlsdGVyRWZmZWN0cygpWzBd
LmdldCgpOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IGdldEVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0FscGhhSW1hZ2UoKSk7Cisg
ICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBGbG9hdFJlY3Qg
c291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKICAgICBzb3VyY2VJ
bWFnZVJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwpAQCAtODYsMTIgKzg3LDEyIEBAIHZvaWQg
RkVPZmZzZXQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIG1fZHggKj0gZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKTsKICAgICBtX2R5ICo9IGZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLmhlaWdodCgpOwogCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBGbG9hdFJlY3QobV9k
eCArIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLngoKSAtIHNjYWxlZFN1YlJlZ2lvbigpLngoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2R5ICsgbV9pbi0+c2NhbGVkU3Vi
UmVnaW9uKCkueSgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkuaGVpZ2h0
KCkpOworICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gRmxvYXRSZWN0KG1fZHggKyBpbi0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2R5ICsgaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKS55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkud2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5o
ZWlnaHQoKSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHN0UmVjdCk7CisgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBk
c3RSZWN0KTsKIH0KIAogdm9pZCBGRU9mZnNldDo6ZHVtcCgpCkBAIC0xMDQsNyArMTA1LDggQEAg
VGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YQogICAgIHRzIDw8ICJbZmVP
ZmZzZXQiOyAKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwog
ICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwiIGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1c
biI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Cisg
ICAgQVNTRVJUKGlucHV0RmlsdGVyRWZmZWN0cygpLnNpemUoKSA9PSAxKTsKKyAgICBpbnB1dEZp
bHRlckVmZmVjdHMoKVswXS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU9mZnNldC5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVPZmZzZXQ+
IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFT2Zmc2V0PiBjcmVhdGUoY29uc3QgZmxvYXQmLCBjb25z
dCBmbG9hdCYpOwogCiAgICAgICAgIGZsb2F0IGR4KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0
RHgoZmxvYXQpOwpAQCAtMzgsMTUgKzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgZmxvYXQgZHkoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXREeShmbG9hdCk7CiAKLSAgICAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBm
aWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmls
dGVyLCBtX2luLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAg
ICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBGRU9mZnNldChGaWx0ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7Cisg
ICAgICAgIEZFT2Zmc2V0KGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmKTsKIAotICAgICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwogICAgICAgICBmbG9hdCBtX2R4OwogICAgICAgICBm
bG9hdCBtX2R5OwogICAgIH07CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2Nzc4MSkKKysr
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTggKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyRWZmZWN0KiBp
biwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKK0ZFU3Bl
Y3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCiAgICAgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQot
ICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBpbiwgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLjBmLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQorICAgIDogRkVM
aWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAu
MGYsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXJFZmZlY3Qq
IGluLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKK1Bhc3NSZWZQdHI8RkVTcGVjdWxhckxp
Z2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsCiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhpbiwgbGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKICAg
ICAgICAga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkp
OwogfQogCkBAIC0xMzAsNyArMTMwLDggQEAgVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5n
OjpleHRlcm5hbAogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2Fs
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3BlY3VsYXJD
b25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBtX3Nw
ZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBBU1NFUlQoaW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6
ZSgpID09IDEpOworICAgIGlucHV0RmlsdGVyRWZmZWN0cygpWzBdLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcu
aAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
U3BlY3VsYXJMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEZFTGln
aHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFU3BlY3VsYXJMaWdodGlu
Zz4gY3JlYXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9y
JiwgZmxvYXQsIGZsb2F0LAogICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRy
PExpZ2h0U291cmNlPik7CiAgICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CiAKQEAg
LTU4LDggKzU4LDcgQEAgcHVibGljOgogICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZF
U3BlY3VsYXJMaWdodGluZyhGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsCi0gICAgICAgIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4p
OworICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVUaWxlLmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDQwICszMSw0NCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlckVmZmVjdCogaW4pCitG
RVRpbGU6OkZFVGlsZSgpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9pbihpbikKIHsK
IH0KIAotUGFzc1JlZlB0cjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4p
CitQYXNzUmVmUHRyPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRkVUaWxlKGluKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVRpbGUoKSk7
CiB9CiAKLUZsb2F0UmVjdCBGRVRpbGU6OnVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRl
ciogZmlsdGVyKQorRmxvYXRSZWN0IEZFVGlsZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKEZpbHRlciogZmlsdGVyKQogewotICAgIG1faW4tPmNhbGN1bGF0ZUVmZmVjdFJlY3Qo
ZmlsdGVyKTsKLSAgICByZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKKyAgICBBU1NFUlQo
aW5wdXRGaWx0ZXJFZmZlY3RzKCkuc2l6ZSgpID09IDEpOworICAgIGlucHV0RmlsdGVyRWZmZWN0
cygpWzBdLmdldCgpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsK
KworICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHRoaXMsIGZp
bHRlci0+ZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKIH0KIAogdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewotICAgIG1f
aW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpKQorICAgIEFT
U0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXplKCkgPT0gMSk7CisgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RmlsdGVyRWZmZWN0cygpWzBdLmdldCgpOworICAgIGluLT5hcHBseShmaWx0
ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGdldEVmZmVjdENvbnRleHQoKTsKICAg
ICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldElzQWxwaGFJ
bWFnZShtX2luLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0Fs
cGhhSW1hZ2UoKSk7CiAKLSAgICBJbnRSZWN0IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCht
X2luLT5zY2FsZWRTdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogCiAgICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgotICAgIGlmIChtX2luLT5pc1NvdXJjZUlucHV0KCkpIHsKKyAgICBpZiAoaW4t
PmlzU291cmNlSW5wdXQoKSkgewogICAgICAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gZmls
dGVyLT5maWx0ZXJSZWdpb24oKTsKICAgICAgICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlci0+
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpKTsKICAgICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlZ2lv
bik7CkBAIC03MiwxNSArNzYsMTUgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHRpbGVSZWN0LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250
ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50
KCkpOworICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CiAgICAgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLT5jb3B5SW1hZ2UoKSwgdHJ1ZSwg
dHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwotICAgIG1hdHJpeC50cmFuc2xh
dGUobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLCBt
X2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJSZWdpb24oKS55KCkpOworICAg
IG1hdHJpeC50cmFuc2xhdGUoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgp
IC0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS54KCksIGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLnkoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCku
eSgpKTsKICAgICBwYXR0ZXJuLmdldCgpLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0obWF0cml4
KTsKIAogICAgIGZpbHRlckNvbnRleHQtPnNldEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZp
bHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNjYWxlZFN1YlJl
Z2lvbigpLnNpemUoKSkpOworICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuc2l6ZSgpKSk7CiB9
CiAKIHZvaWQgRkVUaWxlOjpkdW1wKCkKQEAgLTkzLDcgKzk3LDggQEAgVGV4dFN0cmVhbSYgRkVU
aWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aQogICAgIHRzIDw8ICJbZmVUaWxlIjsKICAgICBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgIHRzIDw8ICJdXG4iOwot
ICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIEFT
U0VSVChpbnB1dEZpbHRlckVmZmVjdHMoKS5zaXplKCkgPT0gMSk7CisgICAgaW5wdXRGaWx0ZXJF
ZmZlY3RzKClbMF0tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwogCiAg
ICAgcmV0dXJuIHRzOwogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5oCShyZXZpc2lvbiA2Nzc4MSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZShG
aWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVUaWxlPiBjcmVhdGUo
KTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9u
cyhGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBk
dW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqKTsKICAgICAgICAgCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgRkVUaWxlKEZpbHRlckVmZmVjdCopOwotICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKKyAgICAgICAgRkVUaWxlKCk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmNwcAkocmV2aXNpb24gNjc3ODEpCisrKyBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYwICsyNCw2
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0
IEZsb2F0UmVjdCYgaXRlbUJveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVm
ZmVjdEJCb3hNb2RlKQorU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJC
b3hNb2RlKQogICAgIDogRmlsdGVyKCkKLSAgICAsIG1faXRlbUJveChpdGVtQm94KQorICAgICwg
bV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKICAgICAsIG1fZmlsdGVyUmVj
dChmaWx0ZXJSZWN0KQogICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsK
IH0KIAotdm9pZCBTVkdGaWx0ZXI6OmNhbGN1bGF0ZUVmZmVjdFN1YlJlZ2lvbihGaWx0ZXJFZmZl
Y3QqIGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdW5pb25PZlByZXZp
b3VzUHJpbWl0aXZlU3VicmVnaW9ucykKIHsKICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uQkJveCA9
IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwotICAgIEZsb2F0UmVjdCB1c2VCQm94ID0gZWZm
ZWN0LT51bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKCk7CiAgICAgRmxvYXRSZWN0IG5ld1N1
YlJlZ2lvbiA9IHN1YlJlZ2lvbkJCb3g7CiAKICAgICBpZiAobV9lZmZlY3RCQm94TW9kZSkgewot
ICAgICAgICBuZXdTdWJSZWdpb24gPSB1c2VCQm94OworICAgICAgICBuZXdTdWJSZWdpb24gPSB1
bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25zOwogCiAgICAgICAgIGlmIChlZmZlY3Qt
Pmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKG1faXRlbUJveC54KCkgKyBz
dWJSZWdpb25CQm94LngoKSAqIG1faXRlbUJveC53aWR0aCgpKTsKKyAgICAgICAgICAgIG5ld1N1
YlJlZ2lvbi5zZXRYKG1fdGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3ViUmVnaW9uQkJveC54KCkg
KiBtX3RhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwogCi0gICAgICAgIGlmIChlZmZlY3QtPmhh
c1koKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRZKG1faXRlbUJveC55KCkgKyBzdWJS
ZWdpb25CQm94LnkoKSAqIG1faXRlbUJveC5oZWlnaHQoKSk7CisgICAgICAgaWYgKGVmZmVjdC0+
aGFzWSgpKQorICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFkobV90YXJnZXRCb3VuZGluZ0Jv
eC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkp
OwogCiAgICAgICAgIGlmIChlZmZlY3QtPmhhc1dpZHRoKCkpCi0gICAgICAgICAgICBuZXdTdWJS
ZWdpb24uc2V0V2lkdGgoc3ViUmVnaW9uQkJveC53aWR0aCgpICogbV9pdGVtQm94LndpZHRoKCkp
OworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFdpZHRoKHN1YlJlZ2lvbkJCb3gud2lkdGgo
KSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7CiAKICAgICAgICAgaWYgKGVmZmVjdC0+
aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0SGVpZ2h0KHN1YlJlZ2lv
bkJCb3guaGVpZ2h0KCkgKiBtX2l0ZW1Cb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgbmV3U3Vi
UmVnaW9uLnNldEhlaWdodChzdWJSZWdpb25CQm94LmhlaWdodCgpICogbV90YXJnZXRCb3VuZGlu
Z0JveC5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1go
KSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKHVzZUJCb3gueCgpKTsKKyAgICAgICAg
ICAgIG5ld1N1YlJlZ2lvbi5zZXRYKHVuaW9uT2ZQcmV2aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMu
eCgpKTsKIAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFzWSgpKQotICAgICAgICAgICAgbmV3U3Vi
UmVnaW9uLnNldFkodXNlQkJveC55KCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFko
dW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy55KCkpOwogCiAgICAgICAgIGlmICgh
ZWZmZWN0LT5oYXNXaWR0aCgpKQotICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFdpZHRoKHVz
ZUJCb3gud2lkdGgoKSk7CisgICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0V2lkdGgodW5pb25P
ZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy53aWR0aCgpKTsKIAogICAgICAgICBpZiAoIWVm
ZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0SGVpZ2h0KHVz
ZUJCb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldEhlaWdodCh1bmlv
bk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25zLmhlaWdodCgpKTsKICAgICB9CiAKICAgICAv
LyBjbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24KICAgICBuZXdT
dWJSZWdpb24uaW50ZXJzZWN0KG1fZmlsdGVyUmVjdCk7CiAKLSAgICBlZmZlY3QtPnNldFN1YlJl
Z2lvbihuZXdTdWJSZWdpb24pOworICAgIGVmZmVjdC0+c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKG5ld1N1YlJlZ2lvbik7CisgICAgCisgICAgLy8gVE9ETzogRXZlcnl0aGluZyBhYm92ZSBz
aG91bGQgYmUgbW92ZWQgdG8gYSBmaXJzdCBwaGFzZSBvZiBsYXlvdXQgaW4gUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUuCisgICAgLy8gVGhlIHNjYWxpbmcgb2YgdGhlIHN1YnJlZ2lv
biB0byB0aGUgcmVwYWludCByZWN0IHNob3VsZCBiZSBtZXJnZWQgd2l0aCBhIG1vcmUgaW50ZWxs
aWdlbnQgcmVwYWludCBsb2dpYworICAgIC8vIGFuZCBtb3ZlZCB0byB0aGUgc2Vjb25kIHBoYXNl
IG9mIGxheW91dCBpbiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KKyAgICAvLyBT
ZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KICAg
ICBuZXdTdWJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlclJl
c29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0LT5zZXRTY2FsZWRTdWJSZWdpb24obmV3
U3ViUmVnaW9uKTsKKyAgICBlZmZlY3QtPnNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KG5ld1N1YlJlZ2lvbik7CiAgICAgbV9tYXhJbWFnZVNpemUgPSBtX21heEltYWdlU2l6ZS5leHBh
bmRlZFRvKG5ld1N1YlJlZ2lvbi5zaXplKCkpOyAKIH0KIAotUGFzc1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgaXRlbUJveCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKQorUGFzc1JlZlB0cjxTVkdGaWx0
ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihpdGVtQm94LCBmaWx0ZXJSZWN0LCBlZmZl
Y3RCQm94TW9kZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyKHRhcmdldEJv
dW5kaW5nQm94LCBmaWx0ZXJSZWN0LCBlZmZlY3RCQm94TW9kZSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmgJKHJldmlzaW9uIDY3NzgxKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJvdW5kaW5nQm94TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZWZmZWN0QkJveE1vZGU7IH0KIAogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlY3Q7IH0KLSAgICAgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVt
Qm94OyB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgdGFyZ2V0cyBjb250
ZXh0LCBjbGlwcGVkIGJ5IHRoZSBmaWx0ZXIgcmVnaW9uLgorICAgICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94
OyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFNpemUgbWF4SW1hZ2VTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhJbWFnZVNpemU7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUVm
ZmVjdFN1YlJlZ2lvbihGaWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBjb25zdCBGbG9hdFJl
Y3QmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3Qm
IGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94TW9k
ZSk7CisgICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1vZGUpOwogCiAg
ICAgICAgIEZsb2F0U2l6ZSBtX21heEltYWdlU2l6ZTsKLSAgICAgICAgRmxvYXRSZWN0IG1faXRl
bUJveDsKKyAgICAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgICAgIEZs
b2F0UmVjdCBtX2ZpbHRlclJlY3Q7CiAgICAgICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKICAg
ICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68041</attachid>
            <date>2010-09-19 17:26:04 -0700</date>
            <delta_ts>2010-09-20 06:11:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100920022601.patch</filename>
            <type>text/plain</type>
            <size>109790</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg3IEBACisyMDEwLTA5LTE5ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZH
IEZpbHRlciBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxMgorICAgICAgICAKKyAgICAgICAgQWxsIGVmZmVjdCBpbnB1dHMgYXJlIHN0
b3JlZCBpbiBhIFZlY3RvciBpbiBGSWx0ZXJFZmZlY3QgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0g
dmlhIGNvbnN0cnVjdG9ycyB0byBldmVyeSBlZmZlY3QgdHlwZS4KKyAgICAgICAgVGhpcyBzaW1w
bGlmaWVzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGxvZ2ljIGFuZCBjb25jZW50cmF0ZXMgaXQg
aW4gZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLgorICAgICAgICBKdXN0IFNvdXJj
ZUdyYXBoaWMsIFNvdXJjZUFscGhhIGFuZCBGRVRpbGUgc3RpbGwgY2FsY3VsYXRlIGZpbHRlciBw
cmltaXRpdmUgc3VicmVnaW9ucyBvbgorICAgICAgICB0aGVpciBvd24uIFdvcmtpbmcgb24gaXQg
aW4gYSBmb2xsb3d1cCBwYXRjaC4KKyAgICAgICAgVGhlIHN1YnJlZ2lvbnMgY29kZSBpcyBTVkcg
c3BlY2lmaWMgYW5kIG1vdmluZyB0aGlzIGNhbGN1bGF0aW9uIHRvIEZpbHRlckVmZmVjdCBpcyBh
bgorICAgICAgICBpbnRlcm1lZGlhdGUgc3RlcCBiZWZvcmUgbW92aW5nIGl0IHRvIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIGluIGEgZm9sbG93aW5nIHBhdGNoLgorICAgICAgICBU
aGUgbmV3IEZpbHRlckVmZmVjdFZlY3RvciB3aWxsIGFsc28gbWFrZSBpdCBwb3NzaWJsZSB0byBh
ZGQgY29kZSB0byBkZXRlcm1pbmUgdGhlCisgICAgICAgIHNtYWxsZXN0IHVzZWQgcmVnaW9uIG9m
IGFuIGVmZmVjdCBhbmQgd2lsbCBoZWxwIHNhdmUgbWVtb3J5IGFuZCByZXNvdXJjZXMgaW4gdGhl
IGZ1dHVyZS4KKyAgICAgICAgc3ViUmVnaW9uIGdvdCByZW5hbWVkIHRvIGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbiB0byBtYXRjaCB0aGUgbmFtZSBzY2hlbWUuIHNjYWxlZFN1YlJlZ2lvbiBnb3QK
KyAgICAgICAgcmVuYW1lZCB0byByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlIHNpbmNlIHRo
aXMgaXMgaXRzIHByb3BlciBtZWFuaW5nLgorICAgICAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IG1l
bWJlciB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmcm9tIEZpbHRlckVmZmVjdC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYWRkZWQgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgZGlkbid0IGNoYW5n
ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHA6IHNjYWxlZFN1YlJlZ2lvbiB3YXMgcmVuYW1lZCB0byByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRl
U2hhZG93TWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcDogUmVtb3ZlZCBGaWx0ZXIgZWZmZWN0IGlucHV0cyBmcm9tIGNvbnN0cnVjdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkpOiBDYWxsIGlu
cHV0RmlsdGVyRWZmZWN0cyB0byBnZXQgaW5wdXQgZmlsdGVyIHByaW1pdGl2ZXMuCisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKTogQ2FsbCBpbnB1dEZp
bHRlckVmZmVjdHMgdG8gZ2V0IGlucHV0IGZpbHRlciBwcmltaXRpdmVzLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21w
b3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBS
ZW5hbWVkIGZyb20gY2FsY3VsYXRlRWZmZWN0U3ViUmVnaW9uIHRvIG1hdGNoIG5hbWUgc2NoZW1l
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KTogVGhlIG1haW4gcGxhY2UgZm9yIHN1YnJlZ2lvbiBjYWxjdWxhdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QpOiBUYWtlcyByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcyBub3cuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQpOiBDaGVjayBpZiBJbWFnZUJ1ZmZlciB3YXMg
Y3JlYXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oOiBDaGFuZ2VkIG5hbWVzIHRvIG1hdGNoIG5hbWUgc2NoZW1lLiBSZW1vdmVkIHVubmVjZXNz
YXJ5IG1lbWJlciB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFNlcGVyYXRl
IFNWRyBzcGVjaWZpYyBtZW1iZXIgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIFdpbGwgZ2V0IHJl
bW92ZWQgaW4gZm9sbG93dXAgcGF0Y2hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6cmVzdWx0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZl
Y3RCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9maW5wdXRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0SXNBbHBoYUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpoYXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpzZXRIYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24pOiBSZW5hbWVkIHRvIG1hdGNoIG5hbWUgc2NoZW1lLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjppc1NvdXJjZUlucHV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjppc1NvdXJjZUlucHV0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOiBBZGFwdCB0byByZW5hbWVzIGluIEZpbHRlckVmZmVjdC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcDogQ29uc3RydWN0
b3Igb2YgRkVCbGVuZCBkb2Vzbid0IHRha2UgaW5wdXQgZWZmZWN0cy4gQWRkaW5nIHRoZW0gYWZ0
ZXJ3YXJkcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50
OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3Bw
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUZsb29kLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjphcHBseSk6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaDoKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVy
Z2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpG
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5Lmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNl
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik6IFJlbmFtZWQgdG8gbWF0Y2ggbmFtZSBzY2hlbWUuCisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmg6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDogUmVuYW1lZCBpdGVt
Qm94IHRvIHRhcmdldEJvdW5kaW5nQm94IHRvIG1hdGNoIG5hbWUgc2NoZW1lLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBSZW5hbWVkIHRvIG1hdGNo
IG5hbWUgc2NoZW1lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QpOgorCiAyMDEwLTA5LTE5ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTczLDE4ICs5NzMsMjAgQEAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBHcmFwaGljcwogICAgICAgICByZXR1cm4gYnVmZmVyLT5tX2RhdGEubV9zdXJmYWNlOwog
CiAgICAgRmxvYXRQb2ludCBibHVyUmFkaXVzID0gRmxvYXRQb2ludChyYWRpdXMsIHJhZGl1cyk7
Ci0gICAgZmxvYXQgc2QgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJh
ZGl1cyk7Ci0gICAgaWYgKCFzZCkKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlU3RkRGV2aWF0aW9uKHJhZGl1cyk7CisgICAgaWYgKCFzdGREZXZpYXRp
b24pCiAgICAgICAgIHJldHVybiBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7CiAKICAgICAvLyBj
cmVhdGUgZmlsdGVyCiAgICAgUmVmUHRyPEZpbHRlcj4gZmlsdGVyID0gSW1hZ2VCdWZmZXJGaWx0
ZXI6OmNyZWF0ZSgpOwogICAgIGZpbHRlci0+c2V0U291cmNlSW1hZ2UoYnVmZmVyKTsKICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2UgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKLSAg
ICBzb3VyY2UtPnNldFNjYWxlZFN1YlJlZ2lvbihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFk
b3dSZWN0LnNpemUoKSkpOworICAgIHNvdXJjZS0+c2V0UmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKICAgICBz
b3VyY2UtPnNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
bHVyID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0KCksIHNkLCBzZCk7Ci0gICAg
Ymx1ci0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1Jl
Y3Quc2l6ZSgpKSk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYmx1ciA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24pOworICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gYmx1ci0+aW5wdXRFZmZlY3RzKCk7CisgICAgaW5wdXRF
ZmZlY3RzLmFwcGVuZChzb3VyY2UuZ2V0KCkpOworICAgIGJsdXItPnNldFJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1JlY3Quc2l6ZSgp
KSk7CiAgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKICAgICByZXR1cm4gYmx1ci0+cmVz
dWx0SW1hZ2UoKS0+bV9kYXRhLm1fc3VyZmFjZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkocmV2aXNpb24gNjc4MTUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDI3ICszNSwxNSBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKCpCbGVuZFR5
cGUpKHVuc2lnCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0
ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMiwgQmxlbmRNb2RlVHlwZSBtb2RlKQorRkVC
bGVuZDo6RkVCbGVuZChCbGVuZE1vZGVUeXBlIG1vZGUpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQot
ICAgICwgbV9pbihpbikKLSAgICAsIG1faW4yKGluMikKICAgICAsIG1fbW9kZShtb2RlKQogewog
fQogCi1QYXNzUmVmUHRyPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGlu
LCBGaWx0ZXJFZmZlY3QqIGluMiwgQmxlbmRNb2RlVHlwZSBtb2RlKQorUGFzc1JlZlB0cjxGRUJs
ZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxlbmRNb2RlVHlwZSBtb2RlKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRkVCbGVuZChpbiwgaW4yLCBtb2RlKSk7Ci19Ci0KLUZpbHRlckVmZmVjdCog
RkVCbGVuZDo6aW4yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbjIuZ2V0KCk7Ci19Ci0KLXZv
aWQgRkVCbGVuZDo6c2V0SW4yKEZpbHRlckVmZmVjdCogaW4yKQotewotICAgIG1faW4yID0gaW4y
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVCbGVuZChtb2RlKSk7CiB9CiAKIEJsZW5kTW9k
ZVR5cGUgRkVCbGVuZDo6YmxlbmRNb2RlKCkgY29uc3QKQEAgLTEwMCw5ICs4OCwxMSBAQCBzdGF0
aWMgdW5zaWduZWQgY2hhciBsaWdodGVuKHVuc2lnbmVkIGNoCiAKIHZvaWQgRkVCbGVuZDo6YXBw
bHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBtX2lu
Mi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkgfHwgIW1faW4y
LT5yZXN1bHRJbWFnZSgpKQorICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
KyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGluLT5hcHBseShm
aWx0ZXIpOworICAgIGluMi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X21vZGUgPT0gRkVCTEVORF9NT0RFX1VOS05PV04pCkBAIC0xMTEsMTEgKzEwMSwxMSBAQCB2b2lk
IEZFQmxlbmQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICBS
ZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEobV9pbi0+cmVzdWx0SW1hZ2Uo
KS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkp
OworICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJl
Y3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIFJlZlB0cjxDYW52
YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwogCi0gICAgSW50
UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luMi0+
c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhl
bEFycmF5QihtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShl
ZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRhKCkpOworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdS
ZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIo
aW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3
aW5nUmVjdCktPmRhdGEoKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkp
OwpAQCAtMTc2LDggKzE2Niw4IEBAIFRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVz
ZW50YXQKICAgICB0cyA8PCAiW2ZlQmxlbmQiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cyk7CiAgICAgdHMgPDwgIiBtb2RlPVwiIiA8PCBtX21vZGUgPDwgIlwi
XVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsK
LSAgICBtX2luMi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwor
ICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAx
KTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNCArNDAs
MTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCosIEJsZW5kTW9kZVR5cGUp
OwotCi0gICAgICAgIEZpbHRlckVmZmVjdCogaW4yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
SW4yKEZpbHRlckVmZmVjdCopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUJsZW5kPiBj
cmVhdGUoQmxlbmRNb2RlVHlwZSk7CiAKICAgICAgICAgQmxlbmRNb2RlVHlwZSBibGVuZE1vZGUo
KSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlVHlwZSk7CiAKLSAg
ICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVy
KiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMo
ZmlsdGVyLCBtX2luLmdldCgpLCBtX2luMi5nZXQoKSk7IH0KICAgICAgICAgdm9pZCBhcHBseShG
aWx0ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgRkVCbGVuZChGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBC
bGVuZE1vZGVUeXBlKTsKKyAgICAgICAgRkVCbGVuZChCbGVuZE1vZGVUeXBlKTsKIAotICAgICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2luMjsKICAgICAgICAgQmxlbmRNb2RlVHlwZSBtX21vZGU7CiAgICAgfTsKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE3ICszNCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmls
dGVyRWZmZWN0KiBpbiwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIHR5
cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKICAgICA6IEZpbHRlckVmZmVjdCgpCi0g
ICAgLCBtX2luKGluKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3ZhbHVlcyh2YWx1ZXMp
CiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KEZpbHRlckVmZmVjdCogaW4sIENvbG9yTWF0cml4VHlwZSB0eXBlLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMpCitQYXNzUmVmUHRyPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZShDb2xvck1hdHJpeFR5cGUgdHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQog
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb2xvck1hdHJpeChpbiwgdHlwZSwgdmFsdWVz
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbG9yTWF0cml4KHR5cGUsIHZhbHVlcykp
OwogfQogCiBDb2xvck1hdHJpeFR5cGUgRkVDb2xvck1hdHJpeDo6dHlwZSgpIGNvbnN0CkBAIC0x
NTYsMTUgKzE1NSwxNiBAQCB2b2lkIGVmZmVjdFR5cGUoY29uc3QgUGFzc1JlZlB0cjxDYW52YXNQ
CiAKIHZvaWQgRkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9p
bi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOwor
ICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGdldEVmZmVjdENvbnRleHQoKTsKICAgICBpZiAo
IWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCkt
PnNpemUoKSk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShyZXN1bHRJbWFn
ZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KSk7CkBAIC0yMzYsNyArMjM2
LDcgQEAgVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZQogICAgICAgICB0
cyA8PCAiXCIiOwogICAgIH0KICAgICB0cyA8PCAiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbG9y
TWF0cml4PiBjcmVhdGUoRmlsdGVyRWZmZWN0KiwgQ29sb3JNYXRyaXhUeXBlLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29sb3JNYXRyaXg+IGNy
ZWF0ZShDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAogICAgICAgICBD
b2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFR5cGUoQ29sb3JN
YXRyaXhUeXBlKTsKQEAgLTQ4LDE1ICs0OCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNh
bGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsg
fQogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAg
ICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50
IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRUNvbG9yTWF0cml4KEZp
bHRlckVmZmVjdCosIENvbG9yTWF0cml4VHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAg
ICAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYp
OwogCi0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAgICAgIENvbG9yTWF0
cml4VHlwZSBtX3R5cGU7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7CiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMCArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgdm9p
ZCAoKlRyYW5zZmVyVHlwZSkodW5zaWduZWQgY2hhciosIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKTsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
LCAKK0ZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgCiAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBi
bHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKQogICAg
IDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBtX3JlZEZ1bmMocmVkRnVu
YykKICAgICAsIG1fZ3JlZW5GdW5jKGdyZWVuRnVuYykKICAgICAsIG1fYmx1ZUZ1bmMoYmx1ZUZ1
bmMpCkBAIC00NywxMCArNDYsMTAgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRU
cmFuc2ZlcgogewogfQogCi1QYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW5jLCAKK1Bhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIAogICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVu
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYykKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoaW4sIHJlZEZ1bmMsIGdyZWVuRnVuYywgYmx1ZUZ1
bmMsIGFscGhhRnVuYykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb21wb25lbnRUcmFu
c2ZlcihyZWRGdW5jLCBncmVlbkZ1bmMsIGJsdWVGdW5jLCBhbHBoYUZ1bmMpKTsKIH0KIAogQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBGRUNvbXBvbmVudFRyYW5zZmVyOjpyZWRGdW5jdGlvbigp
IGNvbnN0CkBAIC0xNTAsOCArMTQ5LDkgQEAgc3RhdGljIHZvaWQgZ2FtbWEodW5zaWduZWQgY2hh
ciogdmFsdWVzLAogCiB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlciogZmls
dGVyKQogewotICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJ
bWFnZSgpKQorICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+
YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKQEAgLTE2Nyw4ICsxNjcsOCBAQCB2
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlciogCiAgICAgZm9yICh1bnNpZ25l
ZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7IGNoYW5uZWwrKykKICAgICAgICAgKCpjYWxsRWZm
ZWN0W3RyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0udHlwZV0pKHRhYmxlc1tjaGFubmVsXSwgdHJh
bnNmZXJGdW5jdGlvbltjaGFubmVsXSk7CiAKLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gY2Fs
Y3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0
cjxJbWFnZURhdGE+IGltYWdlRGF0YShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoZHJhd2luZ1JlY3QpKTsKKyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gY2Fs
Y3VsYXRlRHJhd2luZ0ludFJlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
OworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGRyYXdpbmdSZWN0KSk7CiAgICAgQ2FudmFzUGl4ZWxBcnJh
eSogc3JjUGl4ZWxBcnJheShpbWFnZURhdGEtPmRhdGEoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsg
cGl4ZWxPZmZzZXQgKz0gNCkgewpAQCAtMjM1LDcgKzIzNSw3IEBAIFRleHRTdHJlYW0mIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmV4dGVybmEKICAgICB0cyA8PCAie2JsdWU6ICIgPDwgbV9ibHVlRnVu
YyA8PCAifVxuIjsgICAgCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDIpOwogICAgIHRz
IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmMgPDwgIn1dXG4iOwotICAgIG1faW4tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZFQ29t
cG9uZW50VHJhbnNmZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiwgCiAgICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiByZWRGdW5jdGlvbigpIGNvbnN0OwpAQCAtNzgsMTYgKzc4LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9u
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0QWxwaGFGdW5jdGlvbihjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGls
ZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9u
T2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQogICAgICAgICB2
b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29u
c3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlckVm
ZmVjdCosY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mLAotICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgICAgIEZF
Q29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7CiAKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3JlZEZ1bmM7CiAgICAgICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmM7CiAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbV9ibHVlRnVuYzsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMSArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMiwgY29uc3Qg
Q29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwKLSAgICBjb25zdCBmbG9hdCYgazEsIGNvbnN0
IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQmIGszLCBjb25zdCBmbG9hdCYgazQpCitGRUNvbXBvc2l0
ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgY29uc3Qg
ZmxvYXQmIGsxLCBjb25zdCBmbG9hdCYgazIsIGNvbnN0IGZsb2F0JiBrMywgY29uc3QgZmxvYXQm
IGs0KQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCi0gICAgLCBtX2luMihp
bjIpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQpA
QCAtNDUsMTAgKzQyLDEwIEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3Qq
IGkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShG
aWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYgdHlwZSwKK1Bhc3NSZWZQdHI8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVh
dGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwKICAgICBjb25zdCBmbG9hdCYg
azEsIGNvbnN0IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQmIGszLCBjb25zdCBmbG9hdCYgazQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbXBvc2l0ZShpbiwgaW4yLCB0eXBlLCBrMSwg
azIsIGszLCBrNCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb21wb3NpdGUodHlwZSwg
azEsIGsyLCBrMywgazQpKTsKIH0KIAogQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBGRUNvbXBvc2l0
ZTo6b3BlcmF0aW9uKCkgY29uc3QKQEAgLTExOSw5ICsxMTYsMTEgQEAgaW5saW5lIHZvaWQgYXJp
dGhtZXRpYyhjb25zdCBSZWZQdHI8Q2FudgogCiB2b2lkIEZFQ29tcG9zaXRlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIG1faW4yLT5hcHBs
eShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3Vs
dEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZp
bHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7
CisgICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwg
IWluMi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOwpAQCAtMTMxLDMzICsxMzAs
MzMgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgRmxvYXRS
ZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYpOwogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERl
dmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdp
b24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2lu
Z1JlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBmaWx0ZXJDb250
ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgY2FsY3VsYXRlRHJh
d2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIGNh
bGN1bGF0ZURyYXdpbmdSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdl
KCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgp
LCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjIt
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1f
aW4yLT5zY2FsZWRTdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0
KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBzcmNSZWN0
LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3Bh
Y2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVj
dCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3Vi
UmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzogewotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0
KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJy
YXk+IHNyY1BpeGVsQXJyYXlBKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKyAgICAgICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5
PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwogCi0gICAgICAgIEludFJlY3QgZWZm
ZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnNjYWxlZFN1
YlJlZ2lvbigpKTsKLSAgICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKG1faW4yLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVj
dCkpOworICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdp
bmdJbnRSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShpbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KSk7CiAgICAgICAgIENhbnZhc1Bp
eGVsQXJyYXkqIHNyY1BpeGVsQXJyYXlCKGltYWdlRGF0YS0+ZGF0YSgpKTsKIAogICAgICAgICBh
cml0aG1ldGljKHNyY1BpeGVsQXJyYXlBLCBzcmNQaXhlbEFycmF5QiwgbV9rMSwgbV9rMiwgbV9r
MywgbV9rNCk7CkBAIC0yMTAsOCArMjA5LDggQEAgVGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4
dGVybmFsUmVwcmVzZQogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBrMT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8
IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2szIDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIi
OwogICAgIHRzIDw8ICJdXG4iOwotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IGluZGVudCArIDEpOwotICAgIG1faW4yLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRl
bnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIGluZGVudCArIDEpOwogICAgIHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgJKHJldmlzaW9uIDY3ODE1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlckVmZmVjdCos
IEZpbHRlckVmZmVjdCosIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLAotICAgICAgICAg
ICAgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQm
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbXBvc2l0ZT4gY3JlYXRlKGNvbnN0IENvbXBv
c2l0ZU9wZXJhdGlvblR5cGUmLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxv
YXQmLCBjb25zdCBmbG9hdCYpOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24oKSBjb25zdDsKICAgICB2b2lkIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBl
KTsKQEAgLTYwLDE3ICs1OSwxMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdDsKICAg
ICB2b2lkIHNldEs0KGZsb2F0KTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRF
ZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBjYWxjdWxhdGVVbmlvbk9m
Q2hpbGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlciwgbV9pbi5nZXQoKSwgbV9pbjIuZ2V0KCkpOyB9
CiAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25z
dDsKIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwKLSAgICAgICAgICAgIGNvbnN0IGZs
b2F0JiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgRkVD
b21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGNvbnN0IGZsb2F0JiwgY29u
c3QgZmxvYXQmLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBtX2luOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW4yOwogICAgIENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fazE7CiAgICAgZmxvYXQg
bV9rMjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxNyArMzgsMTYgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGdHYXVzc2lhbktlcm5lbEZhY3Rvcgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBmbG9hdCYgeCwgY29uc3QgZmxvYXQmIHkpCitGRUdhdXNz
aWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoY29uc3QgZmxvYXQmIHgsIGNvbnN0IGZsb2F0JiB5KQog
ICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBtX3N0ZFgoeCkKICAg
ICAsIG1fc3RkWSh5KQogewogfQogCi1QYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGZsb2F0JiB4LCBjb25zdCBm
bG9hdCYgeSkKK1Bhc3NSZWZQdHI8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoY29uc3QgZmxvYXQmIHgsIGNvbnN0IGZsb2F0JiB5KQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVHYXVzc2lhbkJsdXIoaW4sIHgsIHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZFR2F1c3NpYW5CbHVyKHgsIHkpKTsKIH0KIAogZmxvYXQgRkVHYXVzc2lhbkJsdXI6OnN0ZERl
dmlhdGlvblgoKSBjb25zdApAQCAtMTI4LDE3ICsxMjcsMTggQEAgdm9pZCBGRUdhdXNzaWFuQmx1
cjo6a2VybmVsUG9zaXRpb24oaW50IAogCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+
cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgc2V0
SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9u
KCkpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdlRGF0YShtX2luLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7CisgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBz
cmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
ZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogCiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkgewpA
QCAtMTk2LDcgKzE5Niw3IEBAIFRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJl
cHIKICAgICB0cyA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBt
X3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVHYXVzc2lhbkJsdXI+
IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShjb25zdCBmbG9hdCYsIGNv
bnN0IGZsb2F0Jik7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0KTsKQEAgLTM4LDcgKzM4LDYgQEAgcHVibGljOgogICAg
IGZsb2F0IHN0ZERldmlhdGlvblkoKSBjb25zdDsKICAgICB2b2lkIHNldFN0ZERldmlhdGlvblko
ZmxvYXQpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lv
bnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1
YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQogICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7
CiAgICAgdm9pZCBkdW1wKCk7CiAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CkBAIC00NiwxMCArNDUsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVN0ZERldmlhdGlvbihmbG9hdCk7CiAKIHBy
aXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmlsdGVyRWZmZWN0KiwgY29uc3QgZmxvYXQmLCBj
b25zdCBmbG9hdCYpOworICAgIEZFR2F1c3NpYW5CbHVyKGNvbnN0IGZsb2F0JiwgY29uc3QgZmxv
YXQmKTsKICAgICBzdGF0aWMgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYm94Qmx1ciwgdW5zaWdu
ZWQmIHN0ZCwgaW50JiBkTGVmdCwgaW50JiBkUmlnaHQpOwogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9pbjsKICAgICBmbG9hdCBtX3N0ZFg7CiAgICAgZmxvYXQgbV9zdGRZOwogfTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgJKHJldmlzaW9u
IDY3ODE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwogCiAgICAgICAg
IC8vIFNWRyBzcGVjaWZpYwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlRWZmZWN0U3Vi
UmVnaW9uKEZpbHRlckVmZmVjdCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCosIGNvbnN0IEZsb2F0UmVjdCYp
IHsgfQogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRTaXplIG1heEltYWdlU2l6ZSgpIGNvbnN0ID0g
MDsKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0g
MDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxICsxLDIz
IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3Nz
ZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCkBAIC0yNSwxMSArMjcsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsdGVyRWZm
ZWN0OjpGaWx0ZXJFZmZlY3QoKQotICAgIDogbV9oYXNYKGZhbHNlKQorICAgIDogbV9hbHBoYUlt
YWdlKGZhbHNlKQorICAgICwgbV9oYXNYKGZhbHNlKQogICAgICwgbV9oYXNZKGZhbHNlKQogICAg
ICwgbV9oYXNXaWR0aChmYWxzZSkKICAgICAsIG1faGFzSGVpZ2h0KGZhbHNlKQotICAgICwgbV9h
bHBoYUltYWdlKGZhbHNlKQogewogfQogCkBAIC0zNyw0MyArMzksNDggQEAgRmlsdGVyRWZmZWN0
Ojp+RmlsdGVyRWZmZWN0KCkKIHsKIH0KIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3Vs
YXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlciwgRmlsdGVyRWZm
ZWN0KiBpbikKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICByZXR1cm4gaW4tPmNhbGN1bGF0ZUVm
ZmVjdFJlY3QoZmlsdGVyKTsKLX0KKyAgICBGbG9hdFJlY3QgdW5pdGVSZWN0OworICAgIHVuc2ln
bmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7CiAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZl
Y3Q6OmNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIs
IEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQotewotICAgIEZsb2F0UmVjdCB1
bml0ZUVmZmVjdFJlY3QgPSBpbi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpOwotICAgIHVu
aXRlRWZmZWN0UmVjdC51bml0ZShpbjItPmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKSk7Ci0g
ICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKKyAgICAvLyBGRVR1cmJ1bGVuY2UsIEZFSW1hZ2Ug
YW5kIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVn
aW9uIGFzIHVuaXRlIHJlY3QuCisgICAgaWYgKCFzaXplKQorICAgICAgICB1bml0ZVJlY3QgPSBm
aWx0ZXItPmZpbHRlclJlZ2lvbigpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgdW5pdGVSZWN0LnVuaXRlKG1faW5wdXRFZmZlY3RzLmF0KGkpLT5k
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKSk7CisKKyAgICBmaWx0ZXIt
PmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbih0aGlzLCB1bml0ZVJlY3QpOworICAg
IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKK0ludFJlY3QgRmls
dGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGVmZmVj
dFJlY3QpIGNvbnN0CiB7Ci0gICAgc2V0VW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyh1bml0
ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIpKTsKLSAgICBmaWx0ZXItPmNhbGN1bGF0ZUVm
ZmVjdFN1YlJlZ2lvbih0aGlzKTsKLSAgICByZXR1cm4gc3ViUmVnaW9uKCk7CisgICAgQVNTRVJU
KG1fZWZmZWN0QnVmZmVyKTsKKyAgICBGbG9hdFBvaW50IGxvY2F0aW9uID0gbV9yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcy5sb2NhdGlvbigpOworICAgIGxvY2F0aW9uLm1vdmUoLWVmZmVj
dFJlY3QueCgpLCAtZWZmZWN0UmVjdC55KCkpOworICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJ
bnRQb2ludChsb2NhdGlvbiksIG1fZWZmZWN0QnVmZmVyLT5zaXplKCkpOwogfQogCi1JbnRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBl
ZmZlY3RSZWN0KQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAogewotICAgIEludFBvaW50IGxvY2F0aW9u
ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gZWZm
ZWN0UmVjdC54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY2FsZWRTdWJSZWdpb24oKS55KCkgLSBlZmZlY3RSZWN0LnkoKSkpOwotICAgIHJl
dHVybiBJbnRSZWN0KGxvY2F0aW9uLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOworICAgIHJldHVy
biBGbG9hdFJlY3QoRmxvYXRQb2ludChzcmNSZWN0LngoKSAtIG1fcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0
LnkoKSAtIG1fcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMueSgpKSwgc3JjUmVjdC5zaXpl
KCkpOwogfQogCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nUmVjdChj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCitGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5w
dXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAogewotICAgIEZsb2F0UG9pbnQgc3RhcnRQ
b2ludCA9IEZsb2F0UG9pbnQoc3JjUmVjdC54KCkgLSBzY2FsZWRTdWJSZWdpb24oKS54KCksIHNy
Y1JlY3QueSgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueSgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlY3QgPSBGbG9hdFJlY3Qoc3RhcnRQb2ludCwgc3JjUmVjdC5zaXplKCkpOwotICAgIHJldHVy
biBkcmF3aW5nUmVjdDsKKyAgICBBU1NFUlQobnVtYmVyIDwgbV9pbnB1dEVmZmVjdHMuc2l6ZSgp
KTsKKyAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQoKQogewotICAgIElu
dFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkU3ViUmVnaW9uKCkpOwor
ICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcyk7CiAgICAgbV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBMaW5lYXJSR0IpOworICAgIGlmICghbV9lZmZlY3RCdWZm
ZXIpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2VmZmVjdEJ1ZmZlci0+Y29udGV4
dCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMSwy
MyBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRw
ZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAgICAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0qLworICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCiAKICNpZm5kZWYgRmlsdGVy
RWZmZWN0X2gKICNkZWZpbmUgRmlsdGVyRWZmZWN0X2gKQEAgLTMyLDg0ICszMyw5NyBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXJFZmZlY3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZpbHRlckVm
ZmVjdCgpOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiBGaWx0ZXJFZmZl
Y3RWZWN0b3I7CisKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRl
ckVmZmVjdD4geworcHVibGljOgorICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOworCisgICAg
Ly8gVGhlIHJlc3VsdCBpcyBib3VuZGVkIHRvIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlIHRvIHNhdmUgcmVzb3VyY2VzLgorICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsg
cmV0dXJuIG1fZWZmZWN0QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RCdWZmZXIo
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gZWZmZWN0QnVmZmVyKSB7IG1fZWZmZWN0QnVmZmVyID0g
ZWZmZWN0QnVmZmVyOyB9CisKKyAgICAvLyBDcmVhdGVzIHRoZSBJbWFnZUJ1ZmZlciBmb3IgdGhl
IGN1cnJlbnQgZmlsdGVyIHByaW1pdGl2ZSByZXN1bHQgaW4gdGhlIHNpemUgb2YgdGhlCisgICAg
Ly8gcmVwYWludFJlY3QuIEdpdmVzIGJhY2sgdGhlIEdyYXBoaWNzQ29udGV4dCBvZiB0aGUgb3du
IEltYWdlQnVmZmVyLgorICAgIEdyYXBoaWNzQ29udGV4dCogZ2V0RWZmZWN0Q29udGV4dCgpOwog
Ci0gICAgICAgIHZvaWQgc2V0VW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhjb25zdCBGbG9h
dFJlY3QmIHVuaXRlUmVjdCkgeyBtX3VuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMgPSB1bml0
ZVJlY3Q7IH0KLSAgICAgICAgRmxvYXRSZWN0IHVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMo
KSBjb25zdCB7IHJldHVybiBtX3VuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnM7IH0KKyAgICBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
OyB9CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7IH0KIAotICAgICAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWJSZWdpb247IH0KLSAgICAgICAgdm9pZCBzZXRTdWJSZWdpb24oY29uc3QgRmxv
YXRSZWN0JiBzdWJSZWdpb24pIHsgbV9zdWJSZWdpb24gPSBzdWJSZWdpb247IH0KKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlRHJhd2luZ1JlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAg
SW50UmVjdCBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
IAotICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkU3ViUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZWRTdWJSZWdpb247IH0KLSAgICAgICAgdm9pZCBzZXRTY2FsZWRTdWJSZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBzY2FsZWRTdWJSZWdpb24pIHsgbV9zY2FsZWRTdWJSZWdpb24gPSBzY2FsZWRT
dWJSZWdpb247IH0KKyAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBo
YSB2YWx1ZXMuCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSB7IHJldHVybiBtX2FscGhhSW1hZ2U7
IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUlt
YWdlID0gYWxwaGFJbWFnZTsgfQogCi0gICAgICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVz
KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgICAgIHZvaWQgc2V0
RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9l
ZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQorICAgIEZsb2F0UmVjdCByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIHsgcmV0dXJuIG1fcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXM7IH0KKyAgICB2b2lkIHNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpIHsgbV9yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcyA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
OyB9CiAKLSAgICAgICAgYm9vbCBoYXNYKCkgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgICAgIHZv
aWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEZpbHRlciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpID0gMDsKIAot
ICAgICAgICBib29sIGhhc1koKSB7IHJldHVybiBtX2hhc1k7IH0KLSAgICAgICAgdm9pZCBzZXRI
YXNZKGJvb2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNT
b3VyY2VJbnB1dCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAgICAgYm9vbCBoYXNXaWR0aCgp
IHsgcmV0dXJuIG1faGFzV2lkdGg7IH0KLSAgICAgICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZh
bHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbiA9IDApIGNvbnN0
OwogCi0gICAgICAgIGJvb2wgaGFzSGVpZ2h0KCkgeyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAg
ICAgICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVl
OyB9CitwdWJsaWM6CisgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVj
aWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgor
ICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjE0LgorICAgIGJvb2wgaGFzWCgpIHsgcmV0dXJuIG1faGFzWDsgfQorICAgIHZvaWQgc2V0SGFz
WChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9CiAKLSAgICAgICAgLy8gVGhlIHJlc3Vs
dCBpcyBib3VuZGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHRvIHNhdmUg
cmVzb3VyY2VzCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSgpIHsgcmV0dXJuIG1f
ZWZmZWN0QnVmZmVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0QnVmZmVyKFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IGVmZmVjdEJ1ZmZlcikgeyBtX2VmZmVjdEJ1ZmZlciA9IGVmZmVj
dEJ1ZmZlcjsgfQorICAgIGJvb2wgaGFzWSgpIHsgcmV0dXJuIG1faGFzWTsgfQorICAgIHZvaWQg
c2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9CiAKLSAgICAgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiwgRmlsdGVy
RWZmZWN0KiwgRmlsdGVyRWZmZWN0Kik7Ci0gICAgICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlv
bk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciosIEZpbHRlckVmZmVjdCopOworICAgIGJv
b2wgaGFzV2lkdGgoKSB7IHJldHVybiBtX2hhc1dpZHRoOyB9CisgICAgdm9pZCBzZXRIYXNXaWR0
aChib29sIHZhbHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQogCi0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCogZ2V0RWZmZWN0Q29udGV4dCgpOwotICAgICAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
RHJhd2luZ1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIEludFJlY3QgY2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBoYXNIZWlnaHQoKSB7
IHJldHVybiBtX2hhc0hlaWdodDsgfQorICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUp
IHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQogCi0gICAgICAgIC8vIGJsYWNrIGltYWdlIHdpdGgg
ZGlmZmVyZW50IGFscGhhIHZhbHVlcwotICAgICAgICBib29sIGlzQWxwaGFJbWFnZSgpIHsgcmV0
dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgICAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFs
cGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorICAgIC8vIEZJWE1FOiBQ
c2V1ZG8gcHJpbWl0aXZlcyBsaWtlIFNvdXJjZUdyYXBoaWMgYW5kIFNvdXJjZUFscGhhIGFzIHdl
bGwgYXMgRkVUaWxlIHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZy4KKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CiAKLSAg
ICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVy
KiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7IH0KLSAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEZpbHRlciopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGR1bXAo
KSA9IDA7CisgICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIHsgcmV0dXJu
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsg
bV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0K
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVj
dEJvdW5kYXJpZXM7IH0KKyAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgRmxvYXRS
ZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5k
YXJpZXM7IH0KIAotICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBjb25zdDsKLSAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIEZpbHRlckVmZmVjdCgpOworcHJvdGVjdGVkOgorICAgIEZpbHRlckVmZmVj
dCgpOwogCi0gICAgcHJpdmF0ZToKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2VmZmVjdEJ1ZmZlcjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAK
LSAgICAgICAgYm9vbCBtX3hCQm94TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgbV95QkJveE1vZGUg
OiAxOwotICAgICAgICBib29sIG1fd2lkdGhCQm94TW9kZSA6IDE7Ci0gICAgICAgIGJvb2wgbV9o
ZWlnaHRCQm94TW9kZSA6IDE7CisgICAgYm9vbCBtX2FscGhhSW1hZ2U7CiAKLSAgICAgICAgYm9v
bCBtX2hhc1ggOiAxOwotICAgICAgICBib29sIG1faGFzWSA6IDE7Ci0gICAgICAgIGJvb2wgbV9o
YXNXaWR0aCA6IDE7Ci0gICAgICAgIGJvb2wgbV9oYXNIZWlnaHQgOiAxOworICAgIC8vIEZJWE1F
OiBTaG91bGQgYmUgdGhlIHBhaW50IHJlZ2lvbiBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZSwgaW5z
dGVhZCBvZiB0aGUgc2NhbGVkIHN1YnJlZ2lvbiBvbiB1c2Ugb2YgZmlsdGVyUmVzLgorICAgIEZs
b2F0UmVjdCBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzOwogCi0gICAgICAgIGJvb2wg
bV9hbHBoYUltYWdlOworcHJpdmF0ZToKKyAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciB2YXJp
YWJsZXMgYXJlIFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLgorICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ1NjE0LgogCi0gICAgICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5k
YXJpZXM7Ci0gICAgICAgIEZsb2F0UmVjdCBtX3N1YlJlZ2lvbjsKLSAgICAgICAgRmxvYXRSZWN0
IG1fc2NhbGVkU3ViUmVnaW9uOwotICAgICAgICBGbG9hdFJlY3QgbV91bmlvbk9mQ2hpbGRFZmZl
Y3RTdWJyZWdpb25zOworICAgIC8vIFRoZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZl
IGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBzcGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3Jk
aW5hdGVzLgorICAgIC8vIFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRv
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgorICAgIEZsb2F0UmVjdCBtX2ZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZUJ1ZmZl
cj4gbV9lZmZlY3RCdWZmZXI7Ci0gICAgfTsKKyAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0
IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUg
c3VicmVnaW9uIG9mIHRoZQorICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVw
LgorICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CisgICAgYm9vbCBtX2hhc1g7Cisg
ICAgYm9vbCBtX2hhc1k7CisgICAgYm9vbCBtX2hhc1dpZHRoOworICAgIGJvb2wgbV9oYXNIZWln
aHQ7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gNjc4
MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBT
b3VyY2VBbHBoYTo6ZWZmZWN0TgogICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLUZsb2F0
UmVjdCBTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKK0Zs
b2F0UmVjdCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZp
bHRlciogZmlsdGVyKQogewogICAgIEZsb2F0UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IGZpbHRl
ci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgaWYgKGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCku
eCgpIDwgZmlsdGVyLT5maWx0ZXJSZWdpb24oKS54KCkpCiAgICAgICAgIGNsaXBwZWRTb3VyY2VS
ZWN0LnNldFgoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS54KCkpOwogICAgIGlmIChmaWx0ZXItPnNv
dXJjZUltYWdlUmVjdCgpLnkoKSA8IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKQogICAgICAg
ICBjbGlwcGVkU291cmNlUmVjdC5zZXRZKGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKTsKLSAg
ICBzZXRTdWJSZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOworICAgIHNldEZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CiAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2Nh
bGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldFNjYWxlZFN1YlJlZ2lvbihjbGlwcGVkU291cmNl
UmVjdCk7CisgICAgc2V0UmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoY2xpcHBlZFNvdXJj
ZVJlY3QpOwogICAgIHJldHVybiBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAkocmV2
aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7
CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUVmZmVjdFJlY3QoRmlsdGVyKik7
CiAgICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAg
ICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciopOwogICAgIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFNvdXJjZUFscGhhKCkgeyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWMKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi1GbG9hdFJlY3QgU291cmNl
R3JhcGhpYzo6Y2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqIGZpbHRlcikKK0Zsb2F0UmVjdCBT
b3VyY2VHcmFwaGljOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBm
aWx0ZXIpCiB7CiAgICAgRmxvYXRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gZmlsdGVyLT5zb3Vy
Y2VJbWFnZVJlY3QoKTsKICAgICBpZiAoZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKS54KCkgPCBm
aWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSkKICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0
WChmaWx0ZXItPmZpbHRlclJlZ2lvbigpLngoKSk7CiAgICAgaWYgKGZpbHRlci0+c291cmNlSW1h
Z2VSZWN0KCkueSgpIDwgZmlsdGVyLT5maWx0ZXJSZWdpb24oKS55KCkpCiAgICAgICAgIGNsaXBw
ZWRTb3VyY2VSZWN0LnNldFkoZmlsdGVyLT5maWx0ZXJSZWdpb24oKS55KCkpOwotICAgIHNldFN1
YlJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CisgICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICBjbGlwcGVkU291cmNlUmVjdC5zY2FsZShmaWx0
ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgc2V0U2NhbGVkU3ViUmVnaW9uKGNsaXBwZWRTb3VyY2VSZWN0KTsK
KyAgICBzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhjbGlwcGVkU291cmNlUmVjdCk7
CiAgICAgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAkocmV2aXNp
b24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsK
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIHsgcmV0dXJuIHRydWU7IH0K
LSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsK
ICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAg
ICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwotICAgIAorCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CisKICAgICBwcml2YXRlOgogICAgICAg
ICBTb3VyY2VHcmFwaGljKCkgeyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDggKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogICAgICAgICAgICAgICAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE5LDcg
KzE5LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTE5Mywx
MiArMTkyLDEyIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAg
ICBpZiAoIWxhc3RFZmZlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBsYXN0
RWZmZWN0LT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7Cisg
ICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlckRh
dGEtPmZpbHRlci5nZXQoKSk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMg
YSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXpl
cyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgogICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6
ZShmaWx0ZXJEYXRhLT5maWx0ZXItPm1heEltYWdlU2l6ZSgpLCBzY2FsZSkpIHsKICAgICAgICAg
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAg
bGFzdEVmZmVjdC0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkp
OworICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
ZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKICAgICB9CiAKICAgICBjbGlwcGVkU291cmNlUmVj
dC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CkBAIC0yNTUsNyArMjU0LDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UgogCiAgICAgRmlsdGVy
RWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwog
ICAgIAotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1w
dHkoKSAmJiAhbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGxh
c3RFZmZlY3QgJiYgIWZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZm
ZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0
byBiZSBjYWxsZWQgb24gdGhlCiAgICAgICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3Mu
IFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQogICAgICAgICAvLyBz
ZWNvbmQgZHJhd2luZy4KQEAgLTI3Miw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSCiAKICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
bGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKTsKICAgICAgICAgaWYgKHJlc3VsdEltYWdlKQotICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKHJlc3VsdEltYWdlLCBvYmplY3QtPnN0
eWxlKCktPmNvbG9yU3BhY2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKHJlc3VsdEltYWdlLCBvYmplY3QtPnN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwog
ICAgIH0KIAogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIuY2xlYXIoKTsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nywx
MSBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lCiAgICAgaWYgKCFp
bnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gRkVCbGVu
ZDo6Y3JlYXRlKGlucHV0MSwgaW5wdXQyLCBzdGF0aWNfY2FzdDxCbGVuZE1vZGVUeXBlPihtb2Rl
KCkpKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8QmxlbmRNb2RlVHlwZT4obW9kZSgpKSk7CisgICAgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAg
IAorICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcg
KzEyMywxMCBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGlucHV0MSwgZmlsdGVyVHlwZSwgZmlsdGVyVmFsdWVzKTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgZmlsdGVy
VmFsdWVzKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCk7CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOworICAgIHJl
dHVybiBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlz
aW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4MywxMCBAQCBQYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb21wb25lbnRUCiAgICAgICAgICAgICBhbHBoYSA9IHN0YXRpY19jYXN0PFNW
R0ZFRnVuY0FFbGVtZW50Kj4obiktPnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShpbnB1dDEsIHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAg
ICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNl
KCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkocmV2
aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDEzIEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbXBvc2l0ZUUKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gRkVDb21wb3NpdGU6OmNyZWF0ZShpbnB1
dDEsIGlucHV0Miwgc3RhdGljX2Nhc3Q8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4oX29wZXJhdG9y
KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxKCksIGsyKCks
IGszKCksIGs0KCkpOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVDb21w
b3NpdGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRpb25UeXBlPihfb3BlcmF0
b3IoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgazEoKSwgazIoKSwgazMoKSwgazQoKSk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIGlucHV0RWZmZWN0
cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAor
ICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDEwICsxNTEsMTMgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVN
YQogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICByZXR1cm4gRkVD
b252b2x2ZU1hdHJpeDo6Y3JlYXRlKAotICAgICAgICBpbnB1dDEsIEludFNpemUob3JkZXJYVmFs
dWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLAotICAgICAgICBiaWFzKCksIEludFBvaW50
KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgc3RhdGljX2Nhc3Q8RWRnZU1vZGVUeXBlPihl
ZGdlTW9kZSgpKSwKLSAgICAgICAgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXhWYWx1ZXMpOwor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUp
LCBkaXZpc29yVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGJpYXMoKSwgSW50UG9pbnQodGFy
Z2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBzdGF0aWNfY2FzdDxFZGdlTW9kZVR5cGU+KGVkZ2VN
b2RlKCkpLAorICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhY
KCksIGtlcm5lbFVuaXRMZW5ndGhYKCkpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeFZh
bHVlcyk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICByZXR1
cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2
NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsMTEgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFRGlmZnVzZUxpZwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZmlsdGVyU3R5bGUgPSBz
dHlsZUZvclJlbmRlcmVyKCk7CiAgICAgQ29sb3IgY29sb3IgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5
bGUoKS0+bGlnaHRpbmdDb2xvcigpOwogICAgIAotICAgIHJldHVybiBGRURpZmZ1c2VMaWdodGlu
Zzo6Y3JlYXRlKGlucHV0MSwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQo
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbFVu
aXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIGZpbmRMaWdodHMoKSk7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xv
ciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxVbml0
TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOworICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAg
ICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNl
KCk7CiB9CiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudDo6ZmluZExpZ2h0cygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEwICsx
MDEsMTMgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZQogICAgIAog
ICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiAwOwotICAgICAgICAK
LSAgICAKLSAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShpbnB1dDEsIGlucHV0
Miwgc3RhdGljX2Nhc3Q8Q2hhbm5lbFNlbGVjdG9yVHlwZT4oeENoYW5uZWxTZWxlY3RvcigpKSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hhbm5l
bFNlbGVjdG9yVHlwZT4oeUNoYW5uZWxTZWxlY3RvcigpKSwgc2NhbGUoKSk7CisKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHN0YXRp
Y19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHhDaGFubmVsU2VsZWN0b3IoKSksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHlDaGFubmVsU2VsZWN0b3IoKSksIHNj
YWxlKCkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7CisgICAgaW5w
dXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKKyAgICByZXR1cm4gZWZmZWN0LnJlbGVhc2Uo
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEwIEBAIFBhc3NSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUdhdXNzaWFuQmwKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShpbnB1dDEsIHN0ZERldmlh
dGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOworICAgIHJldHVy
biBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBAQCBQYXNzUmVmUHRyPFNWR0ZFTWVyZ2VF
bGVtZW50PiBTVkdGRU1lcmdlCiAKIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdl
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAgICBW
ZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtZXJnZUlucHV0czsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoKTsKKyAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKICAgICBmb3IgKE5v
ZGUqIG4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlTWVyZ2VOb2RlVGFnKSkgewogICAg
ICAgICAgICAgRmlsdGVyRWZmZWN0KiBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZU5vZGVFbGVtZW50Kj4obiktPmluMSgpKTsK
QEAgLTUyLDcgKzUzLDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVt
ZQogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0ZShtZXJnZUlucHV0cyk7CisgICAgcmV0dXJuIGVmZmVj
dC5yZWxlYXNlKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDEwIEBAIFBhc3NSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3kKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJh
ZGl1cyA8IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEZFTW9ycGhvbG9neTo6
Y3JlYXRlKGlucHV0MSwgc3RhdGljX2Nhc3Q8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oX29wZXJh
dG9yKCkpLCB4UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShzdGF0aWNfY2FzdDxNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlPihfb3BlcmF0b3IoKSksIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVm
ZmVjdHMuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CiAK
IH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDEwIEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRU9mZnNldEVsZW0KICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gRkVPZmZzZXQ6OmNyZWF0ZShpbnB1dDEsIGR4KCksIGR5KCkpOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7
CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICByZXR1cm4gZWZm
ZWN0LnJlbGVhc2UoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5ICsx
MTgsMTIgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaQogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gZmlsdGVyU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7ICAgIAog
ICAgIAogICAgIENvbG9yIGNvbG9yID0gZmlsdGVyU3R5bGUtPnN2Z1N0eWxlKCktPmxpZ2h0aW5n
Q29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoaW5w
dXQxLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVs
VW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgZmluZExpZ2h0cygpKTsKKworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRl
KGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVs
VW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgZmluZExpZ2h0cygpKTsKKyAgICBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7
CisgICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOworICAgIHJldHVybiBlZmZlY3QucmVs
ZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkocmV2aXNpb24g
Njc4MTUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsMTAgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVs
ZW1lbgogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBG
RVRpbGU6OmNyZWF0ZShpbnB1dDEpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9
IEZFVGlsZTo6Y3JlYXRlKCk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMg
PSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQx
KTsKKyAgICByZXR1cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCShy
ZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252
b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmls
dGVyRWZmZWN0KiBpbiwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKK0ZFQ29udm9sdmVNYXRy
aXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBmbG9h
dCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUsCiAgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0
aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgp
CiAgICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9pbihpbikKICAgICAsIG1fa2VybmVsU2l6
ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlh
cykKQEAgLTQ5LDExICs0OCwxMSBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4
KEZpbHRlCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1h
dHJpeDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
CitQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMs
IGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKICAg
ICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEs
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFQ29udm9sdmVNYXRyaXgoaW4sIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRh
cmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdl
dE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCiAgICAgICAgIHByZXNlcnZlQWxw
aGEsIGtlcm5lbE1hdHJpeCkpOwogfQogCkBAIC0zNzQsMjEgKzM3MywyMiBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0CiAKIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBp
ZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZSgpLT5zaXplKCkpOwotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxh
dGVEcmF3aW5nSW50UmVjdChtX2luLT5zdWJSZWdpb24oKSk7CisgICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5maWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKSk7CiAKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJh
eTsKICAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gbV9p
bi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdS
ZWN0KS0+ZGF0YSgpOworICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCkt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKTsKICAg
ICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOworICAgICAg
ICBzcmNQaXhlbEFycmF5ID0gaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5kYXRhKCk7CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VS
ZWN0LmhlaWdodCgpKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIFRleHRTdHJlYW0mIEZFQ29udm9s
dmVNYXRyaXg6OmV4dGVybmFsUmUKICAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1v
ZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJl
c2VydmVBbHBoYSA8PCAiXCJdXG4iOwotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCShyZXZp
c2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2
ZU1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIENhbnZhc1Bp
eGVsQXJyYXk7CiAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVh
dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgSW50U2l6ZSYsCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUmLAogICAgICAgICAgICAgZmxv
YXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2lu
dCYsCiAgICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKQEAgLTcyLDEz
ICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgdW5p
dGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0
ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQogICAg
IHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgdm9pZCBkdW1wKCk7CiAgICAgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0ZXJFZmZlY3QqLCBjb25zdCBJbnRT
aXplJiwgZmxvYXQsIGZsb2F0LAorICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYs
IGZsb2F0LCBmbG9hdCwKICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBl
LCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAg
c3RydWN0IFBhaW50aW5nRGF0YSB7CkBAIC0xMDEsNyArMTAwLDYgQEAgcHJpdmF0ZToKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tKTsKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5Mik7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2lu
OwogICAgIEludFNpemUgbV9rZXJuZWxTaXplOwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBm
bG9hdCBtX2JpYXM7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTcgKzI5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZm
dXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCitGRURpZmZ1c2VMaWdodGlu
Zzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwKICAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgaW4sIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLjBmLCAwLjBmLCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQorICAgIDogRkVM
aWdodGluZyhEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCAwLjBmLCAwLjBmLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExl
bmd0aFksIGxpZ2h0U291cmNlKQogewogfQogCi1QYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5n
PiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4gLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwKK1Bhc3NSZWZQdHI8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVz
ZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsCiAgICAgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRGlmZnVzZUxpZ2h0
aW5nKGluLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFj
ZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVu
Z3RoWSwgbGlnaHRTb3VyY2UpKTsKIH0KIAogRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VM
aWdodGluZygpCkBAIC0xMTgsNyArMTE4LDcgQEAgVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRp
bmc6OmV4dGVybmFsUgogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VT
Y2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVz
ZUNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1f
a2VybmVsVW5pdExlbmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1c
biI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Cisg
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEp
OwogICAgIHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaAkocmV2aXNpb24gNjc4MTUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7CiAKIGNsYXNzIEZF
RGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaWZmdXNl
TGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKICAgICAgICAgZmxv
YXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CiAgICAgdmlydHVhbCB+RkVEaWZm
dXNlTGlnaHRpbmcoKTsKIApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
Q29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
LCBmbG9hdCwgZmxvYXQsCiAgICAgICAgIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4pOwogfTsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURp
c3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDIxICszMywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlz
cGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJF
ZmZlY3QqIGluMiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLAotICAgIENo
YW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgY29uc3QgZmxvYXQmIHNjYWxlKQor
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvciwgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
Y29uc3QgZmxvYXQmIHNjYWxlKQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4p
Ci0gICAgLCBtX2luMihpbjIpCiAgICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxl
Y3RvcikKICAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQogICAgICwg
bV9zY2FsZShzY2FsZSkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gRkVE
aXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGlu
MiwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgY29uc3QgZmxvYXQmIHNjYWxlKQorUGFzc1JlZlB0
cjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCisgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yLCBjb25zdCBmbG9hdCYgc2NhbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBGRURpc3BsYWNlbWVudE1hcChpbiwgaW4yLCB4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5l
bFNlbGVjdG9yLCBzY2FsZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaXNwbGFjZW1l
bnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAog
Q2hhbm5lbFNlbGVjdG9yVHlwZSBGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxTZWxlY3Rvcigp
IGNvbnN0CkBAIC04Miw5ICs3OSwxMSBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2Fs
ZShmbG9hdCBzCiAKIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogewotICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgbV9pbjItPmFwcGx5KGZpbHRlcik7
Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpIHx8ICFtX2luMi0+cmVzdWx0SW1hZ2UoKSkK
KyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0
KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpbjIt
PmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAhaW4yLT5yZXN1
bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9y
ID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lDaGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktO
T1dOKQpAQCAtOTMsMTEgKzkyLDExIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZp
bHRlciogZmkKICAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVj
dChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+
IHNyY1BpeGVsQXJyYXlBKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEFE
cmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxB
cnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAg
ICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIobV9pbjItPnJlc3VsdElt
YWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRh
KCkpOworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0lu
dFJlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8
Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIoaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAogICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CiAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0xNjMsOCArMTYyLDggQEAgVGV4
dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUgogICAgIHRzIDw8ICIgc2NhbGU9
XCIiIDw8IG1fc2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIg
PDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIiAiCiAgICAgICAgPDwgInlDaGFubmVsU2VsZWN0
b3I9XCIiIDw8IG1feUNoYW5uZWxTZWxlY3RvciA8PCAiXCJdXG4iOwotICAgIG1faW4tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgIG1faW4yLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwogICAgIHJldHVybiB0czsKIH0K
IApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNw
bGFjZW1lbnRNYXAuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIEZFRGlzcGxhY2VtZW50
TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIEZpbHRl
ckVmZmVjdCosIENoYW5uZWxTZWxlY3RvclR5cGUsCi0gICAgICAgICAgICAgICAgQ2hhbm5lbFNl
bGVjdG9yVHlwZSwgY29uc3QgZmxvYXQmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVE
aXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlLCBDaGFubmVsU2VsZWN0
b3JUeXBlLCBjb25zdCBmbG9hdCYpOwogCiAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENo
YW5uZWxTZWxlY3RvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFhDaGFubmVsU2VsZWN0b3Io
Y29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CkBAIC01MSwxNyArNTAsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBmbG9hdCBzY2FsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dFNjYWxlKGZsb2F0IHNjYWxlKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNo
aWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5p
b25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCksIG1faW4yLmdldCgp
KTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsK
ICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwg
aW50IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRURpc3BsYWNlbWVu
dE1hcChGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBDaGFubmVsU2VsZWN0b3JUeXBlLAot
ICAgICAgICAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSwgY29uc3QgZmxvYXQmKTsKKyAgICAgICAg
RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSwgY29uc3QgZmxvYXQmKTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwot
ICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luMjsKICAgICAgICAgQ2hhbm5lbFNlbGVj
dG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CiAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUg
bV95Q2hhbm5lbFNlbGVjdG9yOwogICAgICAgICBmbG9hdCBtX3NjYWxlOwpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA2NzgxNSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBGRUZsb29kOjphcHBseShGaWx0ZXIqKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
Zmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2NhbGVkU3ViUmVnaW9uKCkuc2l6ZSgp
KSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOworICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCku
c2l6ZSgpKSwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOwogfQogCiB2b2lkIEZFRmxvb2Q6OmR1
bXAoKQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBGRUltYWdlOjph
cHBseShGaWx0ZXIqKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChG
bG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZs
b2F0UG9pbnQoKSwgc3ViUmVnaW9uKCkuc2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3Qo
RmxvYXRQb2ludCgpLCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOwogCiAgICAg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwog
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5j
cHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDExIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGln
aHRpbmdUeXBlLCBGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLAorRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUg
bGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLAogICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KQogICAgIDogRmlsdGVyRWZmZWN0KCkKICAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlw
ZSkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBtX2xpZ2h0U291cmNlKGxpZ2h0U291cmNlKQogICAg
ICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCiAgICAgLCBtX3N1cmZhY2VTY2FsZShz
dXJmYWNlU2NhbGUpCkBAIC0yNDMsOCArMjQyLDkgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGln
aHRpbmcoQ2FudmFzUGl4ZQogCiB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogewotICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFn
ZSgpKQorICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+YXBw
bHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKQEAgLTI1Miw4ICsyNTIsOCBAQCB2b2lk
IEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogCiAgICAgc2V0SXNBbHBoYUltYWdl
KGZhbHNlKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3
aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0
YT4gc3JjSW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFn
ZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBD
YW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKIAog
ICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSku
IFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNiBAQCBjbGFzcyBDYW52YXNQaXhlbEFycmF5OwogCiBjbGFzcyBGRUxpZ2h0aW5n
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
dW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1
bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQog
ICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAKIHByb3RlY3RlZDoKQEAgLTcyLDE1ICs3MSwxMyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25SaWdodFBpeGVsVmFs
dWUoKTsKICAgICB9OwogCi0gICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIEZpbHRlckVmZmVj
dCosIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOworICAgIEZFTGlnaHRpbmcoTGln
aHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKIAogICAgIGJvb2wgZHJhd0xpZ2h0
aW5nKENhbnZhc1BpeGVsQXJyYXkqLCBpbnQsIGludCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldFBpeGVsKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAogICAg
ICAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwg
ZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpOwogCiAgICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRp
bmdUeXBlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAgUmVmUHRyPExpZ2h0
U291cmNlPiBtX2xpZ2h0U291cmNlOwogCiAgICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOwpJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCShyZXZpc2lv
biA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDQ2ICszMCwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4m
IG1lcmdlSW5wdXRzKSAKK0ZFTWVyZ2U6OkZFTWVyZ2UoKSAKICAgICA6IEZpbHRlckVmZmVjdCgp
Ci0gICAgLCBtX21lcmdlSW5wdXRzKG1lcmdlSW5wdXRzKQogewogfQogCi1QYXNzUmVmUHRyPEZF
TWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4g
PiYgbWVyZ2VJbnB1dHMpCitQYXNzUmVmUHRyPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZSgpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1lcmdlKG1lcmdlSW5wdXRzKSk7Ci19Ci0KLWNv
bnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+JiBGRU1lcmdlOjptZXJnZUlucHV0cygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWVyZ2VJbnB1dHM7Ci19Ci0KLXZvaWQgRkVNZXJnZTo6
c2V0TWVyZ2VJbnB1dHMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4mIG1lcmdl
SW5wdXRzKQotewotICAgIG1fbWVyZ2VJbnB1dHMgPSBtZXJnZUlucHV0czsKLX0KLQotRmxvYXRS
ZWN0IEZFTWVyZ2U6OnVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKQot
ewotICAgIEFTU0VSVCghbV9tZXJnZUlucHV0cy5pc0VtcHR5KCkpOwotCi0gICAgRmxvYXRSZWN0
IHVuaXRlRWZmZWN0UmVjdCA9IG1fbWVyZ2VJbnB1dHNbMF0tPmNhbGN1bGF0ZUVmZmVjdFJlY3Qo
ZmlsdGVyKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX21lcmdlSW5wdXRzLnNp
emUoKTsgaSsrKQotICAgICAgICB1bml0ZUVmZmVjdFJlY3QudW5pdGUobV9tZXJnZUlucHV0c1tp
XS0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpKTsKLQotICAgIHJldHVybiB1bml0ZUVmZmVj
dFJlY3Q7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1lcmdlKCkpOwogfQogCiB2b2lkIEZF
TWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewotICAgIEFTU0VSVCghbV9tZXJnZUlucHV0
cy5pc0VtcHR5KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1
dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9tZXJnZUlucHV0c1tpXS0+YXBwbHkoZmlsdGVy
KTsKLSAgICAgICAgaWYgKCFtX21lcmdlSW5wdXRzW2ldLT5yZXN1bHRJbWFnZSgpKQorICAgIHVu
c2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOworICAgIEFTU0VSVCghc2l6ZSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIp
OworICAgICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNzcsOSArNTUsOSBAQCB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRlciogZmls
dGVyKQogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9tZXJnZUlucHV0
c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIobV9tZXJnZUlucHV0c1tpXS0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOworICAgICAgICBmaWx0
ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9y
U3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKSk7CiAgICAgfQogfQogCkBAIC05MiwxMiArNzAsMTEgQEAgVGV4dFN0cmVhbSYgRkVN
ZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwog
ICAgIHRzIDw8ICJbZmVNZXJnZSI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbWVyZ2VJbnB1dHMu
c2l6ZSgpIDw8ICJcIl1cbiI7Ci0gICAgaWYgKCFtX21lcmdlSW5wdXRzLmlzRW1wdHkoKSkgewot
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9tZXJnZUlucHV0cy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8UmVmUHRy
PEZpbHRlckVmZmVjdD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21lcmdlSW5wdXRzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICB9CisgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJl
ck9mRWZmZWN0SW5wdXRzKCk7CisgICAgQVNTRVJUKCFzaXplKTsKKyAgICB0cyA8PCAiIG1lcmdl
Tm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAkocmV2aXNpb24gNjc4MTUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMjAgKzMxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZFTWVy
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVj
dD4gPiYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1lcmdlPiBjcmVhdGUoKTsKIAot
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMo
KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRNZXJnZUlucHV0cyhjb25zdCBWZWN0b3I8UmVmUHRy
PEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpOwotCi0gICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciopOwogICAgICAgICB2b2lkIGFw
cGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBGRU1lcmdlKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0PiA+Jik7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9t
ZXJnZUlucHV0czsKKyAgICAgICAgRkVNZXJnZSgpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9s
b2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcs
MTcgQEAgdXNpbmcgc3RkOjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyRWZmZWN0KiBpbiwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1v
cnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9h
dCByYWRpdXNZKQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBt
X3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJh
ZGl1c1kpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNy
ZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5
KGluLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
RU1vcnBob2xvZ3kodHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCiBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIEZFTW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QKQEAgLTgz
LDE0ICs4MiwxNSBAQCB2b2lkIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpCiAK
IHZvaWQgRkVNb3JwaG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5h
cHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAg
aWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYg
KCFnZXRFZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldElzQWxwaGFJ
bWFnZShtX2luLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0Fs
cGhhSW1hZ2UoKSk7CiAKICAgICBpbnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRp
dXNYICogZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1
c1kgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmFkaXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLmhlaWdodCgpKTsKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5
KEZpbHRlciogZmlsdGVyKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGltYWdlUmVj
dChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdp
b24oKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVj
dCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURy
YXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBS
ZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheShpbi0+cmVzdWx0SW1hZ2UoKS0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VS
ZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAKICAgICBpbnQgZWZmZWN0V2lkdGgg
PSBlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogNDsKQEAgLTE3OSw4ICsxNzksOCBAQCBUZXh0
U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzCiAgICAgdHMgPDwgIltmZU1vcnBo
b2xvZ3kiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAg
ICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIK
LSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkg
PDwgIlwiXVxuIjsgICAgIAotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGlu
ZGVudCArIDEpOworICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IHJhZGl1c1goKSA8PCAiLCAiIDw8
IHJhZGl1c1koKSA8PCAiXCJdXG4iOyAgICAKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmgJKHJl
dmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBo
b2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gY3JlYXRl
KEZpbHRlckVmZmVjdCosIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpOyAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4g
Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpOyAgCiAgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9y
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUpOwogCkBAIC00NiwxNSArNDYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBmbG9hdCByYWRpdXNZKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UmFkaXVzWShm
bG9hdCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJl
Z2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVj
dFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZp
bHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBGRU1vcnBob2xvZ3koRmlsdGVyRWZmZWN0KiwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgICAgIEZFTW9y
cGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAg
ICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90eXBlOwogICAgICAgICBmbG9hdCBtX3JhZGl1
c1g7CiAgICAgICAgIGZsb2F0IG1fcmFkaXVzWTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNyArMzEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZz
ZXQoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgZmxvYXQmIGR4LCBjb25zdCBmbG9hdCYgZHkpCitG
RU9mZnNldDo6RkVPZmZzZXQoY29uc3QgZmxvYXQmIGR4LCBjb25zdCBmbG9hdCYgZHkpCiAgICAg
OiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9pbihpbikKICAgICAsIG1fZHgoZHgpCiAgICAgLCBt
X2R5KGR5KQogewogfQogCi1QYXNzUmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZp
bHRlckVmZmVjdCogaW4sIGNvbnN0IGZsb2F0JiBkeCwgY29uc3QgZmxvYXQmIGR5KQorUGFzc1Jl
ZlB0cjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShjb25zdCBmbG9hdCYgZHgsIGNvbnN0IGZs
b2F0JiBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFT2Zmc2V0KGluLCBkeCwgZHkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiBmbG9h
dCBGRU9mZnNldDo6ZHgoKSBjb25zdApAQCAtNjYsMTUgKzY1LDE2IEBAIHZvaWQgRkVPZmZzZXQ6
OnNldER5KGZsb2F0IGR5KQogCiB2b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikK
IHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2Uo
KSkKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5
KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgp
OwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SXNB
bHBoYUltYWdlKG1faW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4t
PmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0
ZXItPnNvdXJjZUltYWdlUmVjdCgpOwogICAgIHNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKSk7CkBAIC04NiwxMiArODYsMTIgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVy
KiBmaWx0ZXIpCiAgICAgbV9keCAqPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
OwogICAgIG1fZHkgKj0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CiAKLSAg
ICBGbG9hdFJlY3QgZHN0UmVjdCA9IEZsb2F0UmVjdChtX2R4ICsgbV9pbi0+c2NhbGVkU3ViUmVn
aW9uKCkueCgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZHkgKyBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRT
dWJSZWdpb24oKS55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luLT5zY2FsZWRTdWJSZWdpb24oKS5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGRz
dFJlY3QgPSBGbG9hdFJlY3QobV9keCArIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpLngoKSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHkgKyBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS55KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLmhlaWdodCgpKTsKIAotICAgIGZpbHRl
ckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xv
clNwYWNlLCBkc3RSZWN0KTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4t
PnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwogfQogCiB2b2lkIEZF
T2Zmc2V0OjpkdW1wKCkKQEAgLTEwNCw3ICsxMDQsNyBAQCBUZXh0U3RyZWFtJiBGRU9mZnNldDo6
ZXh0ZXJuYWxSZXByZXNlbnRhCiAgICAgdHMgPDwgIltmZU9mZnNldCI7IAogICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwg
ZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQog
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCShyZXZp
c2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVPZmZzZXQ+IGNyZWF0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZFT2Zmc2V0PiBjcmVhdGUoY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYpOwogCiAgICAgICAg
IGZsb2F0IGR4KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RHgoZmxvYXQpOwpAQCAtMzgsMTUg
KzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZmxvYXQgZHkoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBzZXREeShmbG9hdCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
dW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1
bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQog
ICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAg
ICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRU9mZnNldChGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgICAgIEZFT2Zmc2V0KGNvbnN0
IGZsb2F0JiwgY29uc3QgZmxvYXQmKTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBt
X2luOwogICAgICAgICBmbG9hdCBtX2R4OwogICAgICAgICBmbG9hdCBtX2R5OwogICAgIH07Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTggKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVTcGVjdWxhckxpZ2h0aW5n
OjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVj
dWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBh
c3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhTcGVj
dWxhckxpZ2h0aW5nLCBpbiwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLjBmLCBzcGVj
dWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVs
VW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0
aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAuMGYsIHNwZWN1bGFyQ29uc3RhbnQs
IHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
bGlnaHRTb3VyY2UpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwKK1Bhc3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGln
aHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKICAgICBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQ
YXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhpbiwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LAorICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3Bl
Y3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKICAgICAgICAga2VybmVsVW5pdExlbmd0
aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkpOwogfQogCkBAIC0xMzAsNyArMTMw
LDcgQEAgVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbAogICAgIHRzIDw8
ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8
ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAg
ICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwi
XVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsK
KyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsg
MSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3ODE1KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
RVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKICAg
ICAgICAgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogICAg
IHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOwogCkBAIC01OCw4ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmls
dGVyRWZmZWN0KiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LAotICAgICAgICBm
bG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKKyAgICBGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBh
c3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9u
IDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw0MCArMzEsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRVRpbGU6OkZFVGlsZShGaWx0ZXJFZmZlY3QqIGluKQorRkVUaWxlOjpGRVRpbGUoKQogICAg
IDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVU
aWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluKQorUGFzc1JlZlB0cjxGRVRpbGU+
IEZFVGlsZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVGlsZShpbikp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUaWxlKCkpOwogfQogCi1GbG9hdFJlY3QgRkVU
aWxlOjp1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikKK0Zsb2F0UmVj
dCBGRVRpbGU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRl
cikKIHsKLSAgICBtX2luLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZpbHRlcik7Ci0gICAgcmV0dXJu
IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgQVNTRVJUKGlucHV0RWZmZWN0cygpLnNpemUo
KSA9PSAxKTsKKyAgICBpbnB1dEVmZmVjdHMoKVswXS5nZXQoKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisKKyAgICBmaWx0ZXItPmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbih0aGlzLCBmaWx0ZXItPmZpbHRlclJlZ2lvbigpKTsKKyAgICByZXR1
cm4gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiB9CiAKIHZvaWQgRkVUaWxlOjphcHBseShG
aWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9p
bi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0
RWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgdGlsZVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7CiAKICAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0
IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKICAgICAvLyBz
aXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBz
cGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgaWYgKG1faW4tPmlzU291cmNlSW5w
dXQoKSkgeworICAgIGlmIChpbi0+aXNTb3VyY2VJbnB1dCgpKSB7CiAgICAgICAgIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwogICAgICAgICBmaWx0ZXJS
ZWdpb24uc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwogICAgICAgICB0aWxlUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZmlsdGVyUmVnaW9uKTsKQEAgLTcyLDE1ICs3NSwxNSBAQCB2b2lkIEZFVGlsZTo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpKTsKICAgICBHcmFwaGljc0Nv
bnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxl
SW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgSW50UG9pbnQoKSk7CisgICAgdGlsZUltYWdlQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2ludCgpKTsK
ICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2Ut
PmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7
Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShtX2luLT5zY2FsZWRTdWJSZWdpb24oKS54KCkgLSBzY2Fs
ZWRTdWJSZWdpb24oKS54KCksIG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLnkoKSAtIHNjYWxlZFN1
YlJlZ2lvbigpLnkoKSk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShpbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKS54KCkgLSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngo
KSwgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkpOwogICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRlcm5T
cGFjZVRyYW5zZm9ybShtYXRyaXgpOwogCiAgICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBhdHRl
cm4ocGF0dGVybik7Ci0gICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgc2NhbGVkU3ViUmVnaW9uKCkuc2l6ZSgpKSk7CisgICAgZmlsdGVyQ29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKS5zaXplKCkpKTsKIH0KIAogdm9pZCBGRVRpbGU6OmR1bXAoKQpAQCAtOTMsNyArOTYs
NyBAQCBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpCiAgICAgdHMgPDwg
IltmZVRpbGUiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7
CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIGluZGVudCArIDEpOwogCiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3
ICszMCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgRkVUaWxlIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVUaWxlPiBjcmVhdGUoKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0
ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBhcHBseShGaWx0
ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0
ZXIqKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRkVUaWxlKEZpbHRlckVmZmVj
dCopOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKKyAgICAg
ICAgRkVUaWxlKCk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAkocmV2aXNpb24gNjc4MTUp
CisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDYwICsyNCw2NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0Zp
bHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgaXRlbUJveCwgY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKQorU1ZHRmlsdGVyOjpTVkdGaWx0ZXIo
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKQogICAgIDogRmlsdGVyKCkKLSAgICAsIG1faXRl
bUJveChpdGVtQm94KQorICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0Jv
eCkKICAgICAsIG1fZmlsdGVyUmVjdChmaWx0ZXJSZWN0KQogICAgICwgbV9lZmZlY3RCQm94TW9k
ZShlZmZlY3RCQm94TW9kZSkKIHsKIH0KIAotdm9pZCBTVkdGaWx0ZXI6OmNhbGN1bGF0ZUVmZmVj
dFN1YlJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucykKIHsKICAgICBGbG9h
dFJlY3Qgc3ViUmVnaW9uQkJveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwotICAgIEZs
b2F0UmVjdCB1c2VCQm94ID0gZWZmZWN0LT51bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKCk7
CiAgICAgRmxvYXRSZWN0IG5ld1N1YlJlZ2lvbiA9IHN1YlJlZ2lvbkJCb3g7CiAKICAgICBpZiAo
bV9lZmZlY3RCQm94TW9kZSkgewotICAgICAgICBuZXdTdWJSZWdpb24gPSB1c2VCQm94OworICAg
ICAgICBuZXdTdWJSZWdpb24gPSB1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25zOwog
CiAgICAgICAgIGlmIChlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5z
ZXRYKG1faXRlbUJveC54KCkgKyBzdWJSZWdpb25CQm94LngoKSAqIG1faXRlbUJveC53aWR0aCgp
KTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKG1fdGFyZ2V0Qm91bmRpbmdCb3gueCgp
ICsgc3ViUmVnaW9uQkJveC54KCkgKiBtX3RhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwogCi0g
ICAgICAgIGlmIChlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRZ
KG1faXRlbUJveC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1faXRlbUJveC5oZWlnaHQoKSk7
CisgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQorICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNl
dFkobV90YXJnZXRCb3VuZGluZ0JveC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1fdGFyZ2V0
Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogCiAgICAgICAgIGlmIChlZmZlY3QtPmhhc1dpZHRoKCkp
Ci0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0V2lkdGgoc3ViUmVnaW9uQkJveC53aWR0aCgp
ICogbV9pdGVtQm94LndpZHRoKCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFdpZHRo
KHN1YlJlZ2lvbkJCb3gud2lkdGgoKSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7CiAK
ICAgICAgICAgaWYgKGVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdp
b24uc2V0SGVpZ2h0KHN1YlJlZ2lvbkJCb3guaGVpZ2h0KCkgKiBtX2l0ZW1Cb3guaGVpZ2h0KCkp
OworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldEhlaWdodChzdWJSZWdpb25CQm94LmhlaWdo
dCgpICogbV90YXJnZXRCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKCFlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKHVz
ZUJCb3gueCgpKTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKHVuaW9uT2ZQcmV2aW91
c1ByaW1pdGl2ZVN1YnJlZ2lvbnMueCgpKTsKIAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFzWSgp
KQotICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFkodXNlQkJveC55KCkpOworICAgICAgICAg
ICAgbmV3U3ViUmVnaW9uLnNldFkodW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy55
KCkpOwogCiAgICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQotICAgICAgICAgICAgbmV3
U3ViUmVnaW9uLnNldFdpZHRoKHVzZUJCb3gud2lkdGgoKSk7CisgICAgICAgICAgICBuZXdTdWJS
ZWdpb24uc2V0V2lkdGgodW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy53aWR0aCgp
KTsKIAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdT
dWJSZWdpb24uc2V0SGVpZ2h0KHVzZUJCb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgbmV3U3Vi
UmVnaW9uLnNldEhlaWdodCh1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25zLmhlaWdo
dCgpKTsKICAgICB9CiAKICAgICAvLyBjbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZp
bHRlciByZWdpb24KICAgICBuZXdTdWJSZWdpb24uaW50ZXJzZWN0KG1fZmlsdGVyUmVjdCk7CiAK
LSAgICBlZmZlY3QtPnNldFN1YlJlZ2lvbihuZXdTdWJSZWdpb24pOworICAgIGVmZmVjdC0+c2V0
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKG5ld1N1YlJlZ2lvbik7CisgICAgCisgICAgLy8gVE9E
TzogRXZlcnl0aGluZyBhYm92ZSBzaG91bGQgYmUgbW92ZWQgdG8gYSBmaXJzdCBwaGFzZSBvZiBs
YXlvdXQgaW4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCisgICAgLy8gVGhlIHNj
YWxpbmcgb2YgdGhlIHN1YnJlZ2lvbiB0byB0aGUgcmVwYWludCByZWN0IHNob3VsZCBiZSBtZXJn
ZWQgd2l0aCBhIG1vcmUgaW50ZWxsaWdlbnQgcmVwYWludCBsb2dpYworICAgIC8vIGFuZCBtb3Zl
ZCB0byB0aGUgc2Vjb25kIHBoYXNlIG9mIGxheW91dCBpbiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS4KKyAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NTYxNC4KICAgICBuZXdTdWJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCksIGZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0LT5z
ZXRTY2FsZWRTdWJSZWdpb24obmV3U3ViUmVnaW9uKTsKKyAgICBlZmZlY3QtPnNldFJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKG5ld1N1YlJlZ2lvbik7CiAgICAgbV9tYXhJbWFnZVNpemUg
PSBtX21heEltYWdlU2l6ZS5leHBhbmRlZFRvKG5ld1N1YlJlZ2lvbi5zaXplKCkpOyAKIH0KIAot
UGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
aXRlbUJveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2Rl
KQorUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBl
ZmZlY3RCQm94TW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihpdGVt
Qm94LCBmaWx0ZXJSZWN0LCBlZmZlY3RCQm94TW9kZSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHRmlsdGVyKHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJSZWN0LCBlZmZlY3RCQm94TW9k
ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJv
dW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0QkJveE1vZGU7IH0KIAogICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlclJlY3Q7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9pdGVtQm94OyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5n
Qm94OyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFNpemUgbWF4SW1hZ2VTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhJbWFnZVNpemU7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0
ZUVmZmVjdFN1YlJlZ2lvbihGaWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBjb25zdCBGbG9h
dFJlY3QmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJl
Y3QmIGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RCQm94
TW9kZSk7CisgICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1vZGUpOwog
CiAgICAgICAgIEZsb2F0U2l6ZSBtX21heEltYWdlU2l6ZTsKLSAgICAgICAgRmxvYXRSZWN0IG1f
aXRlbUJveDsKKyAgICAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgICAg
IEZsb2F0UmVjdCBtX2ZpbHRlclJlY3Q7CiAgICAgICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsK
ICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68072</attachid>
            <date>2010-09-20 06:11:39 -0700</date>
            <delta_ts>2010-09-20 15:25:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100920151136.patch</filename>
            <type>text/plain</type>
            <size>109337</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg3IEBACisyMDEwLTA5LTE5ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZH
IEZpbHRlciBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxMgorICAgICAgICAKKyAgICAgICAgQWxsIGVmZmVjdCBpbnB1dHMgYXJlIHN0
b3JlZCBpbiBhIFZlY3RvciBpbiBGaWx0ZXJFZmZlY3QgaW5zdGVhZCBvZiBwYXNzaW5nIHRoZW0g
dmlhIGNvbnN0cnVjdG9ycyB0byBldmVyeSBlZmZlY3QgdHlwZS4KKyAgICAgICAgVGhpcyBzaW1w
bGlmaWVzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGxvZ2ljIGFuZCBjZW50cmFsaXplcyBpdCBp
biBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24uCisgICAgICAgIEp1c3QgU291cmNl
R3JhcGhpYywgU291cmNlQWxwaGEgYW5kIEZFVGlsZSBzdGlsbCBjYWxjdWxhdGUgZmlsdGVyIHBy
aW1pdGl2ZSBzdWJyZWdpb25zIG9uCisgICAgICAgIHRoZWlyIG93bi4gV29ya2luZyBvbiBpdCBp
biBhIGZvbGxvd3VwIHBhdGNoLgorICAgICAgICBUaGUgc3VicmVnaW9ucyBjb2RlIGlzIFNWRyBz
cGVjaWZpYyBhbmQgbW92aW5nIHRoaXMgY2FsY3VsYXRpb24gdG8gRmlsdGVyRWZmZWN0IGlzIGFu
CisgICAgICAgIGludGVybWVkaWF0ZSBzdGVwIGJlZm9yZSBtb3ZpbmcgaXQgdG8gUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUgaW4gYSBmb2xsb3dpbmcgcGF0Y2guCisgICAgICAgIFRo
ZSBuZXcgRmlsdGVyRWZmZWN0VmVjdG9yIHdpbGwgYWxzbyBtYWtlIGl0IHBvc3NpYmxlIHRvIGFk
ZCBjb2RlIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgc21hbGxlc3QgdXNlZCByZWdpb24gb2Yg
YW4gZWZmZWN0IGFuZCB3aWxsIGhlbHAgc2F2ZSBtZW1vcnkgYW5kIHJlc291cmNlcyBpbiB0aGUg
ZnV0dXJlLgorICAgICAgICBzdWJSZWdpb24gZ290IHJlbmFtZWQgdG8gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIHRvIG1hdGNoIHRoZSBuYW1lIHNjaGVtZS4gc2NhbGVkU3ViUmVnaW9uIGdvdAor
ICAgICAgICByZW5hbWVkIHRvIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIHNpbmNlIHRo
aXMgaXMgaXRzIHByb3BlciBtZWFuaW5nLgorICAgICAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IG1l
bWJlciB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmcm9tIEZpbHRlckVmZmVjdC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYWRkZWQgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgZGlkbid0IGNoYW5n
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDogc2NhbGVkU3ViUmVnaW9uIHdhcyByZW5hbWVkIHRvIHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVT
aGFkb3dNYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOiBSZW1vdmVkIEZpbHRlciBlZmZlY3QgaW5wdXRzIGZyb20gY29uc3RydWN0b3IuCisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxl
bmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6IENhbGwgaW5w
dXRGaWx0ZXJFZmZlY3RzIHRvIGdldCBpbnB1dCBmaWx0ZXIgcHJpbWl0aXZlcy4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOiBDYWxsIGlucHV0Rmls
dGVyRWZmZWN0cyB0byBnZXQgaW5wdXQgZmlsdGVyIHByaW1pdGl2ZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZF
Q29tcG9uZW50VHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBv
c2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IFJl
bmFtZWQgZnJvbSBjYWxjdWxhdGVFZmZlY3RTdWJSZWdpb24gdG8gbWF0Y2ggbmFtZSBzY2hlbWUu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24p
OiBUaGUgbWFpbiBwbGFjZSBmb3Igc3VicmVnaW9uIGNhbGN1bGF0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCk6IFRha2VzIHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ1JlY3QpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCk6IENoZWNrIGlmIEltYWdlQnVmZmVyIHdhcyBj
cmVhdGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
Lmg6IENoYW5nZWQgbmFtZXMgdG8gbWF0Y2ggbmFtZSBzY2hlbWUuIFJlbW92ZWQgdW5uZWNlc3Nh
cnkgbWVtYmVyIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgorICAgICAgICAgICAgU2VwZXJhdGUg
U1ZHIHNwZWNpZmljIG1lbWJlciB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4gV2lsbCBnZXQgcmVt
b3ZlZCBpbiBmb2xsb3d1cCBwYXRjaGVzLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpyZXN1bHRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEVmZmVj
dEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bnVtYmVyT2ZpbnB1dEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojppc0FscGhhSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRJc0FscGhhSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldFJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNTb3VyY2VJbnB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1gpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpzZXRIYXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1kpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpoYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldEhhc1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZWZmZWN0Qm91bmRhcmllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEVmZmVjdEJvdW5kYXJpZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bik6IFJlbmFtZWQgdG8gbWF0Y2ggbmFtZSBzY2hlbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6IEFkYXB0IHRvIHJlbmFtZXMgaW4gRmlsdGVyRWZmZWN0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJl
c291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOiBDb25zdHJ1Y3Rv
ciBvZiBGRUJsZW5kIGRvZXNuJ3QgdGFrZSBpbnB1dCBlZmZlY3RzLiBBZGRpbmcgdGhlbSBhZnRl
cndhcmRzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAg
ICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHA6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGRURp
ZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRmxvb2QuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5KToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6RkVMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBs
eSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6YXBwbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5jcHA6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKTogUmVuYW1lZCB0byBtYXRjaCBuYW1lIHNjaGVtZS4KKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaDoKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOiBSZW5hbWVkIGl0ZW1C
b3ggdG8gdGFyZ2V0Qm91bmRpbmdCb3ggdG8gbWF0Y2ggbmFtZSBzY2hlbWUuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IFJlbmFtZWQgdG8gbWF0Y2gg
bmFtZSBzY2hlbWUuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCk6CisKIDIwMTAtMDktMTkgIEtlbnQgVGFtdXJh
ICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NzMsMTggKzk3MywyMCBAQCBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IEdyYXBoaWNzCiAgICAgICAgIHJldHVybiBidWZmZXItPm1fZGF0YS5tX3N1cmZhY2U7CiAK
ICAgICBGbG9hdFBvaW50IGJsdXJSYWRpdXMgPSBGbG9hdFBvaW50KHJhZGl1cywgcmFkaXVzKTsK
LSAgICBmbG9hdCBzZCA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVTdGREZXZpYXRpb24ocmFk
aXVzKTsKLSAgICBpZiAoIXNkKQorICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVTdGREZXZpYXRpb24ocmFkaXVzKTsKKyAgICBpZiAoIXN0ZERldmlhdGlv
bikKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bV9kYXRhLm1fc3VyZmFjZTsKIAogICAgIC8vIGNy
ZWF0ZSBmaWx0ZXIKICAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIgPSBJbWFnZUJ1ZmZlckZpbHRl
cjo6Y3JlYXRlKCk7CiAgICAgZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShidWZmZXIpOwogICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZSA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOwotICAg
IHNvdXJjZS0+c2V0U2NhbGVkU3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRv
d1JlY3Quc2l6ZSgpKSk7CisgICAgc291cmNlLT5zZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOwogICAgIHNv
dXJjZS0+c2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJs
dXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQoKSwgc2QsIHNkKTsKLSAgICBi
bHVyLT5zZXRTY2FsZWRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVj
dC5zaXplKCkpKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBibHVyID0gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbik7CisgICAgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBibHVyLT5pbnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVm
ZmVjdHMuYXBwZW5kKHNvdXJjZS5nZXQoKSk7CisgICAgYmx1ci0+c2V0UmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkp
KTsKICAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0KCkpOwogICAgIHJldHVybiBibHVyLT5yZXN1
bHRJbWFnZSgpLT5tX2RhdGEubV9zdXJmYWNlOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMjcgKzM1LDE1IEBAIHR5cGVkZWYgdW5zaWduZWQgY2hhciAoKkJsZW5kVHlw
ZSkodW5zaWcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRl
ckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yLCBCbGVuZE1vZGVUeXBlIG1vZGUpCitGRUJs
ZW5kOjpGRUJsZW5kKEJsZW5kTW9kZVR5cGUgbW9kZSkKICAgICA6IEZpbHRlckVmZmVjdCgpCi0g
ICAgLCBtX2luKGluKQotICAgICwgbV9pbjIoaW4yKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9
CiAKLVBhc3NSZWZQdHI8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yLCBCbGVuZE1vZGVUeXBlIG1vZGUpCitQYXNzUmVmUHRyPEZFQmxl
bmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGVUeXBlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGRUJsZW5kKGluLCBpbjIsIG1vZGUpKTsKLX0KLQotRmlsdGVyRWZmZWN0KiBG
RUJsZW5kOjppbjIoKSBjb25zdAotewotICAgIHJldHVybiBtX2luMi5nZXQoKTsKLX0KLQotdm9p
ZCBGRUJsZW5kOjpzZXRJbjIoRmlsdGVyRWZmZWN0KiBpbjIpCi17Ci0gICAgbV9pbjIgPSBpbjI7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJsZW5kKG1vZGUpKTsKIH0KIAogQmxlbmRNb2Rl
VHlwZSBGRUJsZW5kOjpibGVuZE1vZGUoKSBjb25zdApAQCAtMTAwLDkgKzg4LDExIEBAIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIGxpZ2h0ZW4odW5zaWduZWQgY2gKIAogdm9pZCBGRUJsZW5kOjphcHBs
eShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIG1faW4y
LT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSB8fCAhbV9pbjIt
PnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwor
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgaW4tPmFwcGx5KGZp
bHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdl
KCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
bW9kZSA9PSBGRUJMRU5EX01PREVfVU5LTk9XTikKQEAgLTExMSwxMSArMTAxLDExIEBAIHZvaWQg
RkVCbGVuZDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0g
Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOwotICAgIFJl
ZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7
CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVj
dChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZh
c1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAKLSAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5z
Y2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVs
QXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVm
ZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOworICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5Qihp
bjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdp
bmdSZWN0KS0+ZGF0YSgpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlKCktPnNpemUoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
CkBAIC0xNzYsOCArMTY2LDggQEAgVGV4dFN0cmVhbSYgRkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdAogICAgIHRzIDw8ICJbZmVCbGVuZCI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzKTsKICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8IG1fbW9kZSA8PCAiXCJd
XG4iOwotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwot
ICAgIG1faW4yLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Cisg
ICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEp
OwogICAgIHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDI0ICs0MCwx
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUJs
ZW5kPiBjcmVhdGUoRmlsdGVyRWZmZWN0KiwgRmlsdGVyRWZmZWN0KiwgQmxlbmRNb2RlVHlwZSk7
Ci0KLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbjIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJ
bjIoRmlsdGVyRWZmZWN0Kik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQmxlbmQ+IGNy
ZWF0ZShCbGVuZE1vZGVUeXBlKTsKIAogICAgICAgICBCbGVuZE1vZGVUeXBlIGJsZW5kTW9kZSgp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldEJsZW5kTW9kZShCbGVuZE1vZGVUeXBlKTsKIAotICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIq
IGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhm
aWx0ZXIsIG1faW4uZ2V0KCksIG1faW4yLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZp
bHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBGRUJsZW5kKEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCosIEJs
ZW5kTW9kZVR5cGUpOworICAgICAgICBGRUJsZW5kKEJsZW5kTW9kZVR5cGUpOwogCi0gICAgICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IG1faW4yOwogICAgICAgICBCbGVuZE1vZGVUeXBlIG1fbW9kZTsKICAgICB9OwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcgKzM0LDE2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChGaWx0
ZXJFZmZlY3QqIGluLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKQorRkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlw
ZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAg
ICAsIG1faW4oaW4pCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fdmFsdWVzKHZhbHVlcykK
IHsKIH0KIAotUGFzc1JlZlB0cjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
RmlsdGVyRWZmZWN0KiBpbiwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcykKK1Bhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbG9yTWF0cml4KGluLCB0eXBlLCB2YWx1ZXMp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgdmFsdWVzKSk7
CiB9CiAKIENvbG9yTWF0cml4VHlwZSBGRUNvbG9yTWF0cml4Ojp0eXBlKCkgY29uc3QKQEAgLTE1
NiwxNSArMTU1LDE2IEBAIHZvaWQgZWZmZWN0VHlwZShjb25zdCBQYXNzUmVmUHRyPENhbnZhc1AK
IAogdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2lu
LT5hcHBseShmaWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7Cisg
ICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOwogICAgIGlmICgh
ZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgZmlsdGVyQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNl
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+
c2l6ZSgpKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdl
KCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QpKTsKQEAgLTIzNiw3ICsyMzYs
NyBAQCBUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlCiAgICAgICAgIHRz
IDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwotICAgIG1faW4tPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29sb3JN
YXRyaXg+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKENvbG9yTWF0cml4VHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgICAgIENv
bG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VHlwZShDb2xvck1h
dHJpeFR5cGUpOwpAQCAtNDgsMTUgKzQ4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2Fs
Y3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9
CiAgICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAg
ICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50KSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXgoRmls
dGVyRWZmZWN0KiwgQ29sb3JNYXRyaXhUeXBlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAg
ICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7
CiAKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKICAgICAgICAgQ29sb3JNYXRy
aXhUeXBlIG1fdHlwZTsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKICAgICB9OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEwICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiB2b2lk
ICgqVHJhbnNmZXJUeXBlKSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYpOwogCi1GRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZp
bHRlckVmZmVjdCogaW4sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMs
IAorRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCAKICAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpCiAgICAg
OiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9pbihpbikKICAgICAsIG1fcmVkRnVuYyhyZWRGdW5j
KQogICAgICwgbV9ncmVlbkZ1bmMoZ3JlZW5GdW5jKQogICAgICwgbV9ibHVlRnVuYyhibHVlRnVu
YykKQEAgLTQ3LDEwICs0NiwxMCBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRy
YW5zZmVyCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIAorUGFzc1JlZlB0cjxGRUNvbXBvbmVudFRyYW5zZmVyPiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgcmVkRnVuYywgCiAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5G
dW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihpbiwgcmVkRnVuYywgZ3JlZW5GdW5jLCBibHVlRnVu
YywgYWxwaGFGdW5jKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbXBvbmVudFRyYW5z
ZmVyKHJlZEZ1bmMsIGdyZWVuRnVuYywgYmx1ZUZ1bmMsIGFscGhhRnVuYykpOwogfQogCiBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIEZFQ29tcG9uZW50VHJhbnNmZXI6OnJlZEZ1bmN0aW9uKCkg
Y29uc3QKQEAgLTE1MCw4ICsxNDksOSBAQCBzdGF0aWMgdm9pZCBnYW1tYSh1bnNpZ25lZCBjaGFy
KiB2YWx1ZXMsCiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoRmlsdGVyKiBmaWx0
ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdElt
YWdlKCkpCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5h
cHBseShmaWx0ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQpAQCAtMTY3LDggKzE2Nyw4IEBAIHZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoRmlsdGVyKiAKICAgICBmb3IgKHVuc2lnbmVk
IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgY2hhbm5lbCsrKQogICAgICAgICAoKmNhbGxFZmZl
Y3RbdHJhbnNmZXJGdW5jdGlvbltjaGFubmVsXS50eXBlXSkodGFibGVzW2NoYW5uZWxdLCB0cmFu
c2ZlckZ1bmN0aW9uW2NoYW5uZWxdKTsKIAotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBjYWxj
dWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShkcmF3aW5nUmVjdCkpOworICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBjYWxj
dWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoZHJhd2luZ1JlY3QpKTsKICAgICBDYW52YXNQaXhlbEFycmF5
KiBzcmNQaXhlbEFycmF5KGltYWdlRGF0YS0+ZGF0YSgpKTsKIAogICAgIGZvciAodW5zaWduZWQg
cGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOyBw
aXhlbE9mZnNldCArPSA0KSB7CkBAIC0yMzUsNyArMjM1LDcgQEAgVGV4dFN0cmVhbSYgRkVDb21w
b25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYQogICAgIHRzIDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5j
IDw8ICJ9XG4iOyAgICAKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMik7CiAgICAgdHMg
PDwgInthbHBoYTogIiA8PCBtX2FscGhhRnVuYyA8PCAifV1cbiI7Ci0gICAgbV9pbi0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwogICAgIHJldHVybiB0czsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRkVDb21w
b25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCAKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mLCAKICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKIAogICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3Q7CkBAIC03OCwxNiArNzgsMTQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24o
KSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRBbHBoYUZ1bmN0aW9uKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxk
RWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25P
ZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAgICAgIHZv
aWQgYXBwbHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAgICAgICBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25z
dDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyRWZm
ZWN0Kixjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYsCi0gICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICAgICAgRkVD
b21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwogICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuYzsKICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuYzsKICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBtX2JsdWVGdW5jOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDExICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb3NpdGU6
OkZFQ29tcG9zaXRlKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLAotICAgIGNvbnN0IGZsb2F0JiBrMSwgY29uc3Qg
ZmxvYXQmIGsyLCBjb25zdCBmbG9hdCYgazMsIGNvbnN0IGZsb2F0JiBrNCkKK0ZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKICAgICA6IEZpbHRlckVmZmVjdCgpCi0g
ICAgLCBtX2luKGluKQotICAgICwgbV9pbjIoaW4yKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAg
LCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKQEAgLTQ1LDEwICs0Miw5IEBAIEZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqIGkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRUNvbXBv
c2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3Qq
IGluMiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwKLSAgICBjb25zdCBmbG9h
dCYgazEsIGNvbnN0IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQmIGszLCBjb25zdCBmbG9hdCYgazQp
CitQYXNzUmVmUHRyPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbnN0IENvbXBv
c2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb21wb3NpdGUoaW4sIGluMiwg
dHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQ29tcG9z
aXRlKHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CiB9CiAKIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUg
RkVDb21wb3NpdGU6Om9wZXJhdGlvbigpIGNvbnN0CkBAIC0xMTksOSArMTE1LDExIEBAIGlubGlu
ZSB2b2lkIGFyaXRobWV0aWMoY29uc3QgUmVmUHRyPENhbnYKIAogdm9pZCBGRUNvbXBvc2l0ZTo6
YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBt
X2luMi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkgfHwgIW1f
aW4yLT5yZXN1bHRJbWFnZSgpKQorICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGluLT5hcHBs
eShmaWx0ZXIpOworICAgIGluMi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJ
bWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGdldEVmZmVjdENvbnRleHQoKTsKQEAgLTEz
MSwzMyArMTI5LDMzIEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQog
ICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0gRmxvYXRSZWN0KDAuZiwgMC5mLCAtMS5mLCAtMS5mKTsK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZF
UjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJ
bWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2Nh
bGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KG1faW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfSU46CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobV9pbjItPnJlc3VsdEltYWdlKCksIGNh
bGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNl
Q29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkp
KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJ
bWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5y
ZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0
LT5yZXN0b3JlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9pbi0+cmVz
dWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+
c2NhbGVkU3ViUmVnaW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3
aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0
aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihtX2luMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbjItPnNjYWxlZFN1YlJlZ2lvbigpKSk7Ci0gICAgICAg
IGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24o
KSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICBmaWx0ZXJDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFn
ZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4yLT5yZXN1bHRJbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c2NhbGVkU3ViUmVn
aW9uKCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1faW4tPnJl
c3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4t
PnNjYWxlZFN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9SKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVYT1Ip
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVU
SUM6IHsKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3
aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIFJlZlB0cjxDYW52
YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgICAgICBSZWZQdHI8Q2FudmFz
UGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAotICAgICAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4y
LT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0
YShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RC
RHJhd2luZ1JlY3QpKTsKKyAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxj
dWxhdGVEcmF3aW5nSW50UmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
OworICAgICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEoaW4yLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCkpOwogICAgICAg
ICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5QihpbWFnZURhdGEtPmRhdGEoKSk7CiAK
ICAgICAgICAgYXJpdGhtZXRpYyhzcmNQaXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJheUIsIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwpAQCAtMjEwLDggKzIwOCw4IEBAIFRleHRTdHJlYW0mIEZFQ29t
cG9zaXRlOjpleHRlcm5hbFJlcHJlc2UKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAgIHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwi
IGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1cIiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1f
azQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICBtX2luMi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCShyZXZp
c2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBAIGVudW0gQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSB7CiAKIGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0
ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwK
LSAgICAgICAgICAgIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYsIGNv
bnN0IGZsb2F0Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb3NpdGU+IGNyZWF0ZShj
b25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQp
OwogCiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdDsKICAgICB2
b2lkIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKQEAgLTYwLDE3ICs1OSwx
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdDsKICAgICB2b2lkIHNldEs0KGZsb2F0
KTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZp
bHRlciogZmlsdGVyKSB7IHJldHVybiBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdp
b25zKGZpbHRlciwgbV9pbi5nZXQoKSwgbV9pbjIuZ2V0KCkpOyB9CiAgICAgdm9pZCBhcHBseShG
aWx0ZXIqKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBGRUNvbXBvc2l0ZShGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiwKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQm
LCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgRkVDb21wb3NpdGUoY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9p
bjI7CiAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9rMTsK
ICAgICBmbG9hdCBtX2syOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDE3ICszOCwxNiBAQCBzdGF0aWMgY29uc3QgZmxvYXQgZ0dhdXNzaWFuS2Vy
bmVsRmFjdG9yCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVHYXVzc2lhbkJsdXI6OkZFR2F1
c3NpYW5CbHVyKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGZsb2F0JiB4LCBjb25zdCBmbG9hdCYg
eSkKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5KQogICAg
IDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBtX3N0ZFgoeCkKICAgICAs
IG1fc3RkWSh5KQogewogfQogCi1QYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGZsb2F0JiB4LCBjb25zdCBmbG9h
dCYgeSkKK1Bhc3NSZWZQdHI8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFR2F1c3NpYW5C
bHVyKGluLCB4LCB5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUdhdXNzaWFuQmx1cih4
LCB5KSk7CiB9CiAKIGZsb2F0IEZFR2F1c3NpYW5CbHVyOjpzdGREZXZpYXRpb25YKCkgY29uc3QK
QEAgLTEyOCwxNyArMTI3LDE4IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6Omtlcm5lbFBvc2l0aW9u
KGludCAKIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0g
ICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0
ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJc0Fs
cGhhSW1hZ2UobV9pbi0+aXNBbHBoYUltYWdlKCkpOworICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0
KSk7CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6
ZSgpKTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpIHsKQEAgLTE5Niw3ICsxOTYsNyBA
QCBUZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByCiAgICAgdHMgPDwgIltm
ZUdhdXNzaWFuQmx1ciI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKICAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwg
bV9zdGRZIDw8ICJcIl1cbiI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
aW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIGluZGVudCArIDEpOwogICAgIHJldHVybiB0czsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgJKHJldmlzaW9u
IDY3ODE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgZmxvYXQmLCBjb25zdCBmbG9hdCYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0KTsKIAogICAgIGZsb2F0IHN0ZERl
dmlhdGlvblgoKSBjb25zdDsKICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAt
MzgsNyArMzgsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2Fs
Y3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9
CiAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25z
dDsKQEAgLTQ2LDEwICs0NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgY2FsY3VsYXRl
U3RkRGV2aWF0aW9uKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihGaWx0
ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0IGZsb2F0Jik7CisgICAgRkVHYXVzc2lhbkJs
dXIoZmxvYXQsIGZsb2F0KTsKICAgICBzdGF0aWMgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYm94
Qmx1ciwgdW5zaWduZWQmIHN0ZCwgaW50JiBkTGVmdCwgaW50JiBkUmlnaHQpOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKICAgICBmbG9hdCBtX3N0ZFg7CiAgICAgZmxvYXQgbV9z
dGRZOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAw
OwogCiAgICAgICAgIC8vIFNWRyBzcGVjaWZpYwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY3Vs
YXRlRWZmZWN0U3ViUmVnaW9uKEZpbHRlckVmZmVjdCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCosIGNvbnN0
IEZsb2F0UmVjdCYpIHsgfQogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRTaXplIG1heEltYWdlU2l6
ZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJvdW5kaW5nQm94TW9k
ZSgpIGNvbnN0ID0gMDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIxICsxLDIzIEBACiAvKgotICAgIENvcHlyaWdodCAoQykgQWxleCBNYXRoZXdzIDxwb3Nz
ZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCkBAIC0yNSwxMSArMjcsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoKQotICAgIDogbV9oYXNYKGZhbHNlKQorICAg
IDogbV9hbHBoYUltYWdlKGZhbHNlKQorICAgICwgbV9oYXNYKGZhbHNlKQogICAgICwgbV9oYXNZ
KGZhbHNlKQogICAgICwgbV9oYXNXaWR0aChmYWxzZSkKICAgICAsIG1faGFzSGVpZ2h0KGZhbHNl
KQotICAgICwgbV9hbHBoYUltYWdlKGZhbHNlKQogewogfQogCkBAIC0zNyw0MyArMzksNDkgQEAg
RmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkKIHsKIH0KIAotRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRl
ciwgRmlsdGVyRWZmZWN0KiBpbikKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICByZXR1cm4gaW4t
PmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyKTsKLX0KKyAgICBGbG9hdFJlY3QgdW5pdGVSZWN0
OworICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7CiAKLUZsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmls
dGVyKiBmaWx0ZXIsIEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQotewotICAg
IEZsb2F0UmVjdCB1bml0ZUVmZmVjdFJlY3QgPSBpbi0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0
ZXIpOwotICAgIHVuaXRlRWZmZWN0UmVjdC51bml0ZShpbjItPmNhbGN1bGF0ZUVmZmVjdFJlY3Qo
ZmlsdGVyKSk7Ci0gICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKKyAgICAvLyBGRVR1cmJ1bGVu
Y2UsIEZFSW1hZ2UgYW5kIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRo
ZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCisgICAgaWYgKCFzaXplKQorICAgICAgICB1
bml0ZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgIGVsc2UgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgdW5pdGVSZWN0
LnVuaXRlKG1faW5wdXRFZmZlY3RzLmF0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oZmlsdGVyKSk7CisgICAgfQorCisgICAgZmlsdGVyLT5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24odGhpcywgdW5pdGVSZWN0KTsKKyAgICByZXR1cm4gbV9maWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb247CiB9CiAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUVm
ZmVjdFJlY3QoRmlsdGVyKiBmaWx0ZXIpCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewotICAg
IHNldFVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnModW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lv
bnMoZmlsdGVyKSk7Ci0gICAgZmlsdGVyLT5jYWxjdWxhdGVFZmZlY3RTdWJSZWdpb24odGhpcyk7
Ci0gICAgcmV0dXJuIHN1YlJlZ2lvbigpOworICAgIEFTU0VSVChtX2VmZmVjdEJ1ZmZlcik7Cisg
ICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IG1fcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMu
bG9jYXRpb24oKTsKKyAgICBsb2NhdGlvbi5tb3ZlKC1lZmZlY3RSZWN0LngoKSwgLWVmZmVjdFJl
Y3QueSgpKTsKKyAgICByZXR1cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQobG9jYXRpb24pLCBt
X2VmZmVjdEJ1ZmZlci0+c2l6ZSgpKTsKIH0KIAotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKK0Zsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCkgY29uc3QKIHsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHJvdW5kZWRJbnRQb2ludChG
bG9hdFBvaW50KHNjYWxlZFN1YlJlZ2lvbigpLngoKSAtIGVmZmVjdFJlY3QueCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkU3ViUmVn
aW9uKCkueSgpIC0gZWZmZWN0UmVjdC55KCkpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlv
biwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9p
bnQoc3JjUmVjdC54KCkgLSBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzLngoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC55KCkgLSBtX3JlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzLnkoKSksIHNyY1JlY3Quc2l6ZSgpKTsKIH0KIAotRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ1JlY3QoY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0KQorRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51
bWJlcikgY29uc3QKIHsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHNy
Y1JlY3QueCgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueCgpLCBzcmNSZWN0LnkoKSAtIHNjYWxlZFN1
YlJlZ2lvbigpLnkoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gRmxvYXRSZWN0KHN0
YXJ0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsKLSAgICByZXR1cm4gZHJhd2luZ1JlY3Q7CisgICAg
QVNTRVJUKG51bWJlciA8IG1faW5wdXRFZmZlY3RzLnNpemUoKSk7CisgICAgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogRmlsdGVy
RWZmZWN0OjpnZXRFZmZlY3RDb250ZXh0KCkKIHsKLSAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHNjYWxlZFN1YlJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGJ1ZmZlclJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOwog
ICAgIG1fZWZmZWN0QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUo
KSwgTGluZWFyUkdCKTsKKyAgICBpZiAoIW1fZWZmZWN0QnVmZmVyKQorICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2
aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIgKzEsMjMgQEAKIC8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
Ci0gICAgICAgICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLwogCiAjaWZuZGVmIEZpbHRlckVmZmVjdF9oCiAjZGVmaW5lIEZp
bHRlckVmZmVjdF9oCkBAIC0zMiw4NCArMzMsOTcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7Ci0g
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKK3R5cGVkZWYgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gRmlsdGVyRWZmZWN0VmVjdG9yOworCitjbGFzcyBG
aWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKKworICAgIC8vIFRoZSByZXN1bHQgaXMgYm91
bmRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZSB0byBzYXZlIHJlc291cmNl
cy4KKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2VmZmVj
dEJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0QnVmZmVyKFBhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IGVmZmVjdEJ1ZmZlcikgeyBtX2VmZmVjdEJ1ZmZlciA9IGVmZmVjdEJ1ZmZlcjsg
fQorCisgICAgLy8gQ3JlYXRlcyB0aGUgSW1hZ2VCdWZmZXIgZm9yIHRoZSBjdXJyZW50IGZpbHRl
ciBwcmltaXRpdmUgcmVzdWx0IGluIHRoZSBzaXplIG9mIHRoZQorICAgIC8vIHJlcGFpbnRSZWN0
LiBHaXZlcyBiYWNrIHRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhlIG93biBJbWFnZUJ1ZmZlci4K
KyAgICBHcmFwaGljc0NvbnRleHQqIGdldEVmZmVjdENvbnRleHQoKTsKIAotICAgICAgICB2b2lk
IHNldFVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoY29uc3QgRmxvYXRSZWN0JiB1bml0ZVJl
Y3QpIHsgbV91bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zID0gdW5pdGVSZWN0OyB9Ci0gICAg
ICAgIEZsb2F0UmVjdCB1bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKCkgY29uc3QgeyByZXR1
cm4gbV91bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zOyB9CisgICAgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQorICAgIEZpbHRl
ckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OworICAgIHVuc2lnbmVkIG51bWJl
ck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9
CiAKLSAgICAgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3ViUmVn
aW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0U3ViUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgc3ViUmVn
aW9uKSB7IG1fc3ViUmVnaW9uID0gc3ViUmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEludFJlY3QgY2FsY3Vs
YXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgRmxv
YXRSZWN0IHNjYWxlZFN1YlJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkU3ViUmVnaW9u
OyB9Ci0gICAgICAgIHZvaWQgc2V0U2NhbGVkU3ViUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgc2Nh
bGVkU3ViUmVnaW9uKSB7IG1fc2NhbGVkU3ViUmVnaW9uID0gc2NhbGVkU3ViUmVnaW9uOyB9Cisg
ICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgorICAg
IGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9CisgICAg
dm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFs
cGhhSW1hZ2U7IH0KIAotICAgICAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0
IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgICAgICB2b2lkIHNldEVmZmVjdEJv
dW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91
bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzOyB9CisgICAgdm9pZCBzZXRSZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyhj
b25zdCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKSB7IG1fcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMgPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlczsg
fQogCi0gICAgICAgIGJvb2wgaGFzWCgpIHsgcmV0dXJuIG1faGFzWDsgfQotICAgICAgICB2b2lk
IHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShGaWx0ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKSA9IDA7CiAKLSAg
ICAgICAgYm9vbCBoYXNZKCkgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFz
WShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9CisgICAgdmlydHVhbCBib29sIGlzU291
cmNlSW5wdXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgICAgIGJvb2wgaGFzV2lk
dGgoKSB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9v
bCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBj
b25zdDsKIAotICAgICAgICBib29sIGhhc0hlaWdodCgpIHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9
Ci0gICAgICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2
YWx1ZTsgfQorcHVibGljOgorICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcg
c3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS4KKyAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTYxNC4KKyAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0KKyAgICB2
b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQogCi0gICAgICAgIC8v
IFRoZSByZXN1bHQgaXMgYm91bmRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyIHByaW1pdGl2
ZSB0byBzYXZlIHJlc291cmNlcwotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UoKSB7
IHJldHVybiBtX2VmZmVjdEJ1ZmZlci5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldEVmZmVjdEJ1
ZmZlcihQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBlZmZlY3RCdWZmZXIpIHsgbV9lZmZlY3RCdWZm
ZXIgPSBlZmZlY3RCdWZmZXI7IH0KKyAgICBib29sIGhhc1koKSBjb25zdCB7IHJldHVybiBtX2hh
c1k7IH0KKyAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQog
Ci0gICAgICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25z
KEZpbHRlciosIEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVjdCopOwotICAgICAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqLCBGaWx0ZXJF
ZmZlY3QqKTsKKyAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNXaWR0aDsg
fQorICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7
IH0KIAotICAgICAgICBHcmFwaGljc0NvbnRleHQqIGdldEVmZmVjdENvbnRleHQoKTsKLSAgICAg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAg
ICAgICBJbnRSZWN0IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KKyAgICB2
b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KIAot
ICAgICAgICAvLyBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMKLSAgICAg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoKSB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICAgICAg
dm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFs
cGhhSW1hZ2U7IH0KKyAgICAvLyBGSVhNRTogUHNldWRvIHByaW1pdGl2ZXMgbGlrZSBTb3VyY2VH
cmFwaGljIGFuZCBTb3VyY2VBbHBoYSBhcyB3ZWxsIGFzIEZFVGlsZSBzdGlsbCBuZWVkIHNwZWNp
YWwgaGFuZGxpbmcuCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKEZpbHRlciopOwogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRl
Q2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBmaWx0ZXItPmZp
bHRlclJlZ2lvbigpOyB9Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUVmZmVj
dFJlY3QoRmlsdGVyKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkgPSAwOworICAgIEZsb2F0UmVjdCBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29s
IGlzU291cmNlSW5wdXQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIEZsb2F0UmVjdCBlZmZlY3RC
b3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgdm9p
ZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykg
eyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CiAKLSAgICAgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uID0gMCkgY29uc3Q7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBGaWx0ZXJFZmZl
Y3QoKTsKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJFZmZlY3QoKTsKIAotICAgIHByaXZhdGU6Citw
cml2YXRlOgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9lZmZlY3RCdWZmZXI7CisgICAgRmls
dGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCi0gICAgICAgIGJvb2wgbV94QkJveE1v
ZGUgOiAxOwotICAgICAgICBib29sIG1feUJCb3hNb2RlIDogMTsKLSAgICAgICAgYm9vbCBtX3dp
ZHRoQkJveE1vZGUgOiAxOwotICAgICAgICBib29sIG1faGVpZ2h0QkJveE1vZGUgOiAxOworICAg
IGJvb2wgbV9hbHBoYUltYWdlOwogCi0gICAgICAgIGJvb2wgbV9oYXNYIDogMTsKLSAgICAgICAg
Ym9vbCBtX2hhc1kgOiAxOwotICAgICAgICBib29sIG1faGFzV2lkdGggOiAxOwotICAgICAgICBi
b29sIG1faGFzSGVpZ2h0IDogMTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHRoZSBwYWludCBy
ZWdpb24gb2YgdGhlIGZpbHRlciBwcmltaXRpdmUsIGluc3RlYWQgb2YgdGhlIHNjYWxlZCBzdWJy
ZWdpb24gb24gdXNlIG9mIGZpbHRlclJlcy4KKyAgICBGbG9hdFJlY3QgbV9yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlczsKIAotICAgICAgICBib29sIG1fYWxwaGFJbWFnZTsKK3ByaXZhdGU6
CisgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFyaWFibGVzIGFyZSBTVkcgc3BlY2lmaWMg
YW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KKyAgICAv
LyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4K
IAotICAgICAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwotICAgICAgICBGbG9hdFJl
Y3QgbV9zdWJSZWdpb247Ci0gICAgICAgIEZsb2F0UmVjdCBtX3NjYWxlZFN1YlJlZ2lvbjsKLSAg
ICAgICAgRmxvYXRSZWN0IG1fdW5pb25PZkNoaWxkRWZmZWN0U3VicmVnaW9uczsKKyAgICAvLyBU
aGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBG
aWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KKyAgICAvLyBUaGlzIGlz
IFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS4KKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOwotICAg
IH07CisgICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVs
ZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKKyAgICAv
LyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KKyAgICBGbG9hdFJlY3QgbV9lZmZl
Y3RCb3VuZGFyaWVzOworICAgIGJvb2wgbV9oYXNYOworICAgIGJvb2wgbV9oYXNZOworICAgIGJv
b2wgbV9oYXNXaWR0aDsKKyAgICBib29sIG1faGFzSGVpZ2h0OworfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTYgKzQyLDE2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE4KICAg
ICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi1GbG9hdFJlY3QgU291cmNlQWxwaGE6OmNhbGN1
bGF0ZUVmZmVjdFJlY3QoRmlsdGVyKiBmaWx0ZXIpCitGbG9hdFJlY3QgU291cmNlQWxwaGE6OmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBG
bG9hdFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwog
ICAgIGlmIChmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpLngoKSA8IGZpbHRlci0+ZmlsdGVyUmVn
aW9uKCkueCgpKQogICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5zZXRYKGZpbHRlci0+ZmlsdGVy
UmVnaW9uKCkueCgpKTsKICAgICBpZiAoZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKS55KCkgPCBm
aWx0ZXItPmZpbHRlclJlZ2lvbigpLnkoKSkKICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0
WShmaWx0ZXItPmZpbHRlclJlZ2lvbigpLnkoKSk7Ci0gICAgc2V0U3ViUmVnaW9uKGNsaXBwZWRT
b3VyY2VSZWN0KTsKKyAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY2xpcHBlZFNvdXJj
ZVJlY3QpOwogICAgIGNsaXBwZWRTb3VyY2VSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAg
ICBzZXRTY2FsZWRTdWJSZWdpb24oY2xpcHBlZFNvdXJjZVJlY3QpOworICAgIHNldFJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKGNsaXBwZWRTb3VyY2VSZWN0KTsKICAgICByZXR1cm4gZmls
dGVyLT5maWx0ZXJSZWdpb24oKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDExICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NvdXJjZUlucHV0KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciopOwogICAgICAgICB2b2lkIGFwcGx5KEZp
bHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihGaWx0ZXIqKTsKICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBTb3VyY2VBbHBoYSgpIHsg
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2ICs0
MSwxNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjCiAgICAgcmV0
dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0
ZUVmZmVjdFJlY3QoRmlsdGVyKiBmaWx0ZXIpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciogZmlsdGVyKQogewogICAgIEZs
b2F0UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAg
ICAgaWYgKGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCkueCgpIDwgZmlsdGVyLT5maWx0ZXJSZWdp
b24oKS54KCkpCiAgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LnNldFgoZmlsdGVyLT5maWx0ZXJS
ZWdpb24oKS54KCkpOwogICAgIGlmIChmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpLnkoKSA8IGZp
bHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKQogICAgICAgICBjbGlwcGVkU291cmNlUmVjdC5zZXRZ
KGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkueSgpKTsKLSAgICBzZXRTdWJSZWdpb24oY2xpcHBlZFNv
dXJjZVJlY3QpOworICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjbGlwcGVkU291cmNl
UmVjdCk7CiAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAg
IHNldFNjYWxlZFN1YlJlZ2lvbihjbGlwcGVkU291cmNlUmVjdCk7CisgICAgc2V0UmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoY2xpcHBlZFNvdXJjZVJlY3QpOwogICAgIHJldHVybiBmaWx0
ZXItPmZpbHRlclJlZ2lvbigpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTIgKzM1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIGlzU291cmNlSW5wdXQoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGNhbGN1bGF0ZUVmZmVjdFJlY3QoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgYXBw
bHkoRmlsdGVyKik7CiAgICAgICAgIHZvaWQgZHVtcCgpOwogICAgICAgICBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLSAg
ICAKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3VyY2VJbnB1dCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKEZpbHRlciopOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgU291cmNlR3Jh
cGhpYygpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDgg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogICAgICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOSw3ICsxOSw2IEBACiAg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0xOTMsMTIgKzE5MiwxMiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgaWYgKCFsYXN0
RWZmZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbGFzdEVmZmVjdC0+Y2Fs
Y3VsYXRlRWZmZWN0UmVjdChmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOworICAgIGxhc3RFZmZl
Y3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXJEYXRhLT5maWx0ZXIu
Z2V0KCkpOwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBp
bWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcg
c2NhbGUgZmFjdG9ycy4KICAgICBpZiAoIWZpdHNJbk1heGltdW1JbWFnZVNpemUoZmlsdGVyRGF0
YS0+ZmlsdGVyLT5tYXhJbWFnZVNpemUoKSwgc2NhbGUpKSB7CiAgICAgICAgIGZpbHRlckRhdGEt
PmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3Qt
PmNhbGN1bGF0ZUVmZmVjdFJlY3QoZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKKyAgICAgICAg
bGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlckRhdGEt
PmZpbHRlci5nZXQoKSk7CiAgICAgfQogCiAgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2NhbGUoc2Nh
bGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwpAQCAtMjU1LDcgKzI1NCw3IEBAIHZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKIAogICAgIEZpbHRlckVmZmVjdCogbGFz
dEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKICAgICAKLSAgICBp
ZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxh
c3RFZmZlY3QtPnN1YlJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgIGlmIChsYXN0RWZmZWN0ICYm
ICFmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVk
IG9uIHRoZQogICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRh
a2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKICAgICAgICAgLy8gc2Vjb25kIGRyYXdp
bmcuCkBAIC0yNzIsNyArMjcxLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9z
dEFwcGx5UgogCiAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3Qt
PnJlc3VsdEltYWdlKCk7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkKLSAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xv
clNwYWNlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNl
KCksIGxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9CiAKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLmNsZWFyKCk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgUGFzc1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZQogICAgIGlmICghaW5wdXQxIHx8ICFp
bnB1dDIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEZFQmxlbmQ6OmNyZWF0ZShp
bnB1dDEsIGlucHV0Miwgc3RhdGljX2Nhc3Q8QmxlbmRNb2RlVHlwZT4obW9kZSgpKSk7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKHN0YXRpY19jYXN0
PEJsZW5kTW9kZVR5cGU+KG1vZGUoKSkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVmZmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KDIpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw5IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbG9yTWF0cmkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoaW5wdXQxLCBmaWx0ZXJUeXBlLCBmaWx0ZXJW
YWx1ZXMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShmaWx0ZXJUeXBlLCBmaWx0ZXJWYWx1ZXMpOworICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CiAK
IH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcg
KzgzLDkgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VAogICAgICAg
ICAgICAgYWxwaGEgPSBzdGF0aWNfY2FzdDxTVkdGRUZ1bmNBRWxlbWVudCo+KG4pLT50cmFuc2Zl
ckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoaW5wdXQxLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpLmFwcGVuZChpbnB1
dDEpOworICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEw
OSwxNCBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFCiAgICAgCiAg
ICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
cmV0dXJuIEZFQ29tcG9zaXRlOjpjcmVhdGUoaW5wdXQxLCBpbnB1dDIsIHN0YXRpY19jYXN0PENv
bXBvc2l0ZU9wZXJhdGlvblR5cGU+KF9vcGVyYXRvcigpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKKworICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4oX29wZXJhdG9yKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxKCksIGsyKCksIGszKCks
IGs0KCkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOworICAg
IGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlu
cHV0Mik7ICAgIAorICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Nzgx
NSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDEwICsxNTEsMTIgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29udm9sdmVNYQogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAg
ICByZXR1cm4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKAotICAgICAgICBpbnB1dDEsIEludFNp
emUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLAotICAgICAgICBiaWFz
KCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgc3RhdGljX2Nhc3Q8RWRn
ZU1vZGVUeXBlPihlZGdlTW9kZSgpKSwKLSAgICAgICAgRmxvYXRQb2ludChrZXJuZWxVbml0TGVu
Z3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRy
aXhWYWx1ZXMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29udm9sdmVN
YXRyaXg6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwg
b3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGJpYXMoKSwg
SW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBzdGF0aWNfY2FzdDxFZGdlTW9k
ZVR5cGU+KGVkZ2VNb2RlKCkpLAorICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5l
bFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhYKCkpLCBwcmVzZXJ2ZUFscGhhKCksIGtl
cm5lbE1hdHJpeFZhbHVlcyk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5w
dXQxKTsKKyAgICByZXR1cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsMTAgQEAgUGFzc1JlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
ZmlsdGVyU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7CiAgICAgQ29sb3IgY29sb3IgPSBmaWx0
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+bGlnaHRpbmdDb2xvcigpOwogICAgIAotICAgIHJldHVybiBG
RURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGlucHV0MSwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBk
aWZmdXNlQ29uc3RhbnQoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIGZpbmRMaWdo
dHMoKSk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRp
bmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRz
KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0
dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6ZmluZExpZ2h0cygpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3ODE1KQor
KysgV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDEwICsxMDEsMTQgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
RGlzcGxhY2VtZQogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAKLSAgICAKLSAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXA6OmNy
ZWF0ZShpbnB1dDEsIGlucHV0Miwgc3RhdGljX2Nhc3Q8Q2hhbm5lbFNlbGVjdG9yVHlwZT4oeENo
YW5uZWxTZWxlY3RvcigpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q2hhbm5lbFNlbGVjdG9yVHlwZT4oeUNoYW5uZWxTZWxlY3RvcigpKSwgc2Nh
bGUoKSk7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRURpc3BsYWNlbWVu
dE1hcDo6Y3JlYXRlKHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHhDaGFubmVsU2Vs
ZWN0b3IoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYW5uZWxTZWxlY3RvclR5cGU+KHlDaGFu
bmVsU2VsZWN0b3IoKSksIHNjYWxlKCkpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAgICBpbnB1dEVmZmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KDIpOworICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKKyAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIHJldHVybiBlZmZlY3QucmVsZWFzZSgp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsOSBAQCBQYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVHYXVzc2lhbkJsCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoaW5wdXQxLCBzdGREZXZpYXRp
b25YKCksIHN0ZERldmlhdGlvblkoKSk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblko
KSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5wdXQxKTsKKyAgICByZXR1
cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgUGFzc1JlZlB0cjxTVkdGRU1lcmdl
RWxlbWVudD4gU1ZHRkVNZXJnZQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbWVyZ2VJbnB1dHM7CisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKCk7CisgICAgRmlsdGVyRWZmZWN0
VmVjdG9yJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CiAgICAgZm9yIChO
b2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9kZVRhZykpIHsKICAg
ICAgICAgICAgIEZpbHRlckVmZmVjdCogbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRF
ZmZlY3RCeUlkKHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCo+KG4pLT5pbjEoKSk7
CkBAIC01Miw3ICs1Myw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxl
bWUKICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMpOworICAgIHJldHVybiBlZmZl
Y3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw5IEBAIFBhc3NSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3kKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJh
ZGl1cyA8IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEZFTW9ycGhvbG9neTo6
Y3JlYXRlKGlucHV0MSwgc3RhdGljX2Nhc3Q8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oX29wZXJh
dG9yKCkpLCB4UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShzdGF0aWNfY2FzdDxNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlPihfb3BlcmF0b3IoKSksIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9
CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDkgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFT2Zmc2V0RWxlbQogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKGlucHV0MSwgZHgoKSwgZHkoKSk7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShkeCgpLCBkeSgp
KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpLmFwcGVuZChpbnB1dDEpOworICAgIHJldHVy
biBlZmZlY3QucmVsZWFzZSgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDkgKzExOCwxMSBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpCiAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBmaWx0ZXJTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIoKTsg
ICAgCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+bGln
aHRpbmdDb2xvcigpOwotICAgIAotICAgIHJldHVybiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShpbnB1dDEsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLCBr
ZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOwor
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpj
cmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLCBr
ZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOwor
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVm
ZmVjdC5yZWxlYXNlKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw5IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RVRpbGVFbGVtZW4KICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gRkVUaWxlOjpjcmVhdGUoaW5wdXQxKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBl
ZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBw
ZW5kKGlucHV0MSk7CisgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CiAKIH0KSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0
cml4LmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTAg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCitGRUNv
bnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
CiAgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9m
ZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5l
bFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2Vy
bmVsTWF0cml4KQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBt
X2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihkaXZpc29yKQogICAgICwg
bV9iaWFzKGJpYXMpCkBAIC00OSwxMSArNDgsMTEgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252
b2x2ZU1hdHJpeChGaWx0ZQogewogfQogCi1QYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBJbnRTaXplJiBr
ZXJuZWxTaXplLAorUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4
OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUsCiAgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGluLCBrZXJuZWxTaXplLCBkaXZpc29y
LCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAorICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBkaXZpc29yLCBi
aWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAogICAgICAgICBw
cmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKIH0KIApAQCAtMzc0LDIxICszNzMsMjIgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldAogCiB2b2lkIEZFQ29udm9s
dmVNYXRyaXg6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewotICAgIG1faW4tPmFwcGx5KGZpbHRl
cik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpKQorICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpZiAoIWluLT5y
ZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWdldEVmZmVjdENvbnRl
eHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c3ViUmVnaW9uKCkpOworICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+ZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkpOwogCiAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNy
Y1BpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IG1faW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZl
Y3REcmF3aW5nUmVjdCktPmRhdGEoKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1
bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpLT5k
YXRhKCk7CiAgICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gbV9pbi0+cmVzdWx0SW1h
Z2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEo
KTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KS0+ZGF0YSgpOwogCiAgICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRo
KCksIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCBUZXh0U3RyZWFt
JiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlCiAgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8
PCBtX2VkZ2VNb2RlIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8
IG1fa2VybmVsVW5pdExlbmd0aCA8PCAiXCIgIgogICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwi
IiA8PCBtX3ByZXNlcnZlQWxwaGEgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRyaXguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29udm9sdmVNYXRy
aXguaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFz
cyBDYW52YXNQaXhlbEFycmF5OwogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb252b2x2ZU1h
dHJpeD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IEludFNpemUmLAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwKICAgICAg
ICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmLAogICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwog
CkBAIC03MiwxMyArNzIsMTIgQEAgcHVibGljOgogICAgIGJvb2wgcHJlc2VydmVBbHBoYSgpIGNv
bnN0OwogICAgIHZvaWQgc2V0UHJlc2VydmVBbHBoYShib29sKTsKIAotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVy
biBjYWxjdWxhdGVVbmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlciwgbV9pbi5nZXQo
KSk7IH0KICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgIHZvaWQgZHVtcCgpOwogICAgIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0
IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCiAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewpAQCAtMTAxLDcgKzEwMCw2IEBAIHByaXZh
dGU6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSk7CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9pbjsKICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlz
b3I7CiAgICAgZmxvYXQgbV9iaWFzOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3ODE1KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDE3ICsyOSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorRkVEaWZm
dXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9y
LCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGln
aHRTb3VyY2U+IGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGlnaHRpbmcs
IGluLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMC4wZiwg
MC4wZiwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVu
aXRMZW5ndGhZLCBsaWdodFNvdXJjZSkKIHsKIH0KIAotUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdo
dGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGluICwgY29uc3Qg
Q29sb3ImIGxpZ2h0aW5nQ29sb3IsCitQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURp
ZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLAogICAgIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1c2VM
aWdodGluZyhpbiwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1
cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIGxpZ2h0U291cmNlKSk7CiB9CiAKIEZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZm
dXNlTGlnaHRpbmcoKQpAQCAtMTE4LDcgKzExOCw3IEBAIFRleHRTdHJlYW0mIEZFRGlmZnVzZUxp
Z2h0aW5nOjpleHRlcm5hbFIKICAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJm
YWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2Rp
ZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8
PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAi
XCJdXG4iOwotICAgIG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEp
OworICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQg
KyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3ODE1KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIExpZ2h0U291cmNlOwogCiBjbGFz
cyBGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlckVmZmVjdCos
IGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlm
ZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCiAgICAgICAg
IGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogICAgIHZpcnR1YWwgfkZF
RGlmZnVzZUxpZ2h0aW5nKCk7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlckVmZmVjdCosIGNv
bnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LAorICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENv
bG9yJiwgZmxvYXQsIGZsb2F0LAogICAgICAgICBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGln
aHRTb3VyY2U+KTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywyMSArMzMsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyRWZmZWN0KiBpbiwgRmls
dGVyRWZmZWN0KiBpbjIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAg
ICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGNvbnN0IGZsb2F0JiBzY2Fs
ZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JU
eXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
ciwgZmxvYXQgc2NhbGUpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQotICAgICwgbV9pbihpbikKLSAg
ICAsIG1faW4yKGluMikKICAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9y
KQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3Nj
YWxlKHNjYWxlKQogewogfQogCi1QYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3Bs
YWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yLAot
ICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBjb25zdCBmbG9hdCYgc2NhbGUpCitQYXNzUmVmUHRyPEZF
RGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwKKyAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaXNw
bGFjZW1lbnRNYXAoaW4sIGluMiwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwg
c2NhbGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFu
bmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIENoYW5uZWxTZWxl
Y3RvclR5cGUgRkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0b3IoKSBjb25zdApAQCAt
ODIsOSArNzksMTEgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgcwog
CiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBt
X2luLT5hcHBseShmaWx0ZXIpOwotICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOwotICAgIGlmICgh
bV9pbi0+cmVzdWx0SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5w
dXRFZmZlY3QoMSk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaW4yLT5hcHBseShmaWx0
ZXIpOworICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVM
X1VOS05PV04gfHwgbV95Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTikKQEAgLTkz
LDExICs5MiwxMSBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXIqIGZpCiAg
ICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbi0+c2Nh
bGVkU3ViUmVnaW9uKCkpOwotICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFy
cmF5QShtX2luLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVj
dEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGluLT5y
ZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVj
dCktPmRhdGEoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0
ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENh
bnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluMi0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgUmVmUHRyPENhbnZhc1BpeGVs
QXJyYXk+IHNyY1BpeGVsQXJyYXlCKGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAKICAgICBJbnRSZWN0IGlt
YWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwogICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgp
LCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwpAQCAtMTYzLDggKzE2Miw4IEBAIFRleHRTdHJlYW0mIEZF
RGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFIKICAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3Nj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5u
ZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBt
X3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKLSAgICBtX2luMi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIGluZGVudCArIDEpOworICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKICAgICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFw
LmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RURpc3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBD
aGFubmVsU2VsZWN0b3JUeXBlLAotICAgICAgICAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUs
IGNvbnN0IGZsb2F0Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50
TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSwgQ2hhbm5lbFNlbGVjdG9yVHlwZSwgZmxv
YXQpOwogCiAgICAgICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC01MSwxNyArNTAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBmbG9hdCBzY2FsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxl
KTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9u
cyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3Vi
cmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCksIG1faW4yLmdldCgpKTsgfQogICAgICAgICB2b2lk
IGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXJFZmZlY3Qq
LCBGaWx0ZXJFZmZlY3QqLCBDaGFubmVsU2VsZWN0b3JUeXBlLAotICAgICAgICAgICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSwgY29uc3QgZmxvYXQmKTsKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAo
Q2hhbm5lbFNlbGVjdG9yVHlwZSwgQ2hhbm5lbFNlbGVjdG9yVHlwZSwgZmxvYXQpOwogCi0gICAg
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IG1faW4yOwogICAgICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3Rv
cjsKICAgICAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CiAgICAg
ICAgIGZsb2F0IG1fc2NhbGU7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVGbG9vZC5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIEZFRmxvb2Q6OmFwcGx5KEZpbHRlciopCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbG9y
IGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENvbG9yKCkucmdiKCksIGZsb29k
T3BhY2l0eSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBzY2FsZWRTdWJSZWdpb24oKS5zaXplKCkpLCBjb2xvciwgRGV2aWNlQ29sb3JTcGFj
ZSk7CisgICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpLCBjb2xvciwgRGV2aWNlQ29s
b3JTcGFjZSk7CiB9CiAKIHZvaWQgRkVGbG9vZDo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCB2b2lkIEZFSW1hZ2U6OmFwcGx5KEZpbHRlciopCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6
ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzdWJSZWdpb24oKS5z
aXplKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CiAKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJh
bnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc4MTUpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMiArMzUsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIEZpbHRlckVmZmVjdCog
aW4sIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCitGRUxp
Z2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LAog
ICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUGFz
c1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQog
ICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9pbihpbikKICAgICAs
IG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2UpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRp
bmdDb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKQEAgLTI0Myw4ICsy
NDIsOSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhDYW52YXNQaXhlCiAKIHZvaWQg
RkVMaWdodGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+YXBwbHkoZmls
dGVyKTsKLSAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkpCisgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOworICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghaW4t
PnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZ2V0RWZmZWN0Q29u
dGV4dCgpKQpAQCAtMjUyLDggKzI1Miw4IEBAIHZvaWQgRkVMaWdodGluZzo6YXBwbHkoRmlsdGVy
KiBmaWx0ZXIpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnNjYWxlZFN1
YlJlZ2lvbigpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEobV9pbi0+cmVz
dWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KSk7
CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0
KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3REcmF3aW5nUmVjdCkpOwogICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVs
QXJyYXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2Vy
bmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0
aGUgVzMKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGlu
Zy5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIENhbnZh
c1BpeGVsQXJyYXk7CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9u
cyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gY2FsY3VsYXRlVW5pb25PZkNoaWxkRWZmZWN0U3Vi
cmVnaW9ucyhmaWx0ZXIsIG1faW4uZ2V0KCkpOyB9CiAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsK
IAogcHJvdGVjdGVkOgpAQCAtNzIsMTUgKzcxLDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQUxX
QVlTX0lOTElORSBpbnQgZG93blJpZ2h0UGl4ZWxWYWx1ZSgpOwogICAgIH07CiAKLSAgICBGRUxp
Z2h0aW5nKExpZ2h0aW5nVHlwZSwgRmlsdGVyRWZmZWN0KiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LAotICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExp
Z2h0U291cmNlPik7CisgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdo
dFNvdXJjZT4pOwogCiAgICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSosIGlu
dCwgaW50KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiwg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCiAgICAgICAgIGludCBsaWdodFgsIGludCBsaWdo
dFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFs
WSk7CiAKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gbV9pbjsKICAgICBSZWZQdHI8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiAK
ICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNDYg
KzMwLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNZXJnZTo6RkVNZXJnZShjb25z
dCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpIAorRkVNZXJnZTo6
RkVNZXJnZSgpIAogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAsIG1fbWVyZ2VJbnB1dHMobWVy
Z2VJbnB1dHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKGNv
bnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+JiBtZXJnZUlucHV0cykKK1Bhc3NSZWZQ
dHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZFTWVyZ2UobWVyZ2VJbnB1dHMpKTsKLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+ID4mIEZFTWVyZ2U6Om1lcmdlSW5wdXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9t
ZXJnZUlucHV0czsKLX0KLQotdm9pZCBGRU1lcmdlOjpzZXRNZXJnZUlucHV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMpCi17Ci0gICAgbV9tZXJnZUlu
cHV0cyA9IG1lcmdlSW5wdXRzOwotfQotCi1GbG9hdFJlY3QgRkVNZXJnZTo6dW5pdGVDaGlsZEVm
ZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgQVNTRVJUKCFtX21lcmdlSW5w
dXRzLmlzRW1wdHkoKSk7Ci0KLSAgICBGbG9hdFJlY3QgdW5pdGVFZmZlY3RSZWN0ID0gbV9tZXJn
ZUlucHV0c1swXS0+Y2FsY3VsYXRlRWZmZWN0UmVjdChmaWx0ZXIpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHVuaXRl
RWZmZWN0UmVjdC51bml0ZShtX21lcmdlSW5wdXRzW2ldLT5jYWxjdWxhdGVFZmZlY3RSZWN0KGZp
bHRlcikpOwotCi0gICAgcmV0dXJuIHVuaXRlRWZmZWN0UmVjdDsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFTWVyZ2UpOwogfQogCiB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogewotICAgIEFTU0VSVCghbV9tZXJnZUlucHV0cy5pc0VtcHR5KCkpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
bV9tZXJnZUlucHV0c1tpXS0+YXBwbHkoZmlsdGVyKTsKLSAgICAgICAgaWYgKCFtX21lcmdlSW5w
dXRzW2ldLT5yZXN1bHRJbWFnZSgpKQorICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOworICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoaSk7CisgICAgICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgICAgICBpZiAoIWluLT5yZXN1
bHRJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzcsOSArNTUsOSBA
QCB2b2lkIEZFTWVyZ2U6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICghZmlsdGVyQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bWVyZ2VJbnB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9tZXJnZUlucHV0c1tpXS0+c2NhbGVkU3ViUmVnaW9uKCkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9tZXJnZUlucHV0c1tp
XS0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZGVzdFJlY3QpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KGkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgfQogfQogCkBA
IC05MiwxMiArNzAsMTEgQEAgVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8ICJbZmVNZXJnZSI7CiAg
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKLSAgICB0cyA8PCAi
IG1lcmdlTm9kZXM9XCIiIDw8IG1fbWVyZ2VJbnB1dHMuc2l6ZSgpIDw8ICJcIl1cbiI7Ci0gICAg
aWYgKCFtX21lcmdlSW5wdXRzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPEZpbHRlckVmZmVjdD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9tZXJnZUlucHV0cy5l
bmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX21lcmdlSW5wdXRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICgqaXQpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsK
LSAgICB9CisgICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAg
QVNTRVJUKHNpemUgPiAwKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwg
IlwiXVxuIjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFTWVyZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFTWVyZ2UuaAkocmV2aXNpb24gNjc4MTUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYpOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGRU1lcmdlPiBjcmVhdGUoKTsKIAotICAgICAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVyZ2VJbnB1dHMoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRNZXJnZUlucHV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbWVy
Z2VJbnB1dHMpOwotCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZlY3RT
dWJyZWdpb25zKEZpbHRlciopOwogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAg
ICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBGRU1lcmdlKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+Jik7Ci0KLSAgICAg
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9tZXJnZUlucHV0czsKKyAgICAgICAg
RkVNZXJnZSgpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAJKHJldmlz
aW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xv
Z3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMTcgQEAgdXNpbmcgc3RkOjptYXg7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmls
dGVyRWZmZWN0KiBpbiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogICAgIDogRmls
dGVyRWZmZWN0KCkKLSAgICAsIG1faW4oaW4pCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1f
cmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9CiAKLVBhc3NS
ZWZQdHI8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXJFZmZlY3QqIGlu
LCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCitQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5KGluLCB0eXBlLCByYWRpdXNYLCBy
YWRpdXNZKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1vcnBob2xvZ3kodHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOwogfQogCiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIEZFTW9ycGhvbG9n
eTo6bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QKQEAgLTgzLDE0ICs4MiwxNSBAQCB2b2lkIEZF
TW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpCiAKIHZvaWQgRkVNb3JwaG9sb2d5Ojph
cHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShmaWx0ZXIpOwotICAgIGlm
ICghbV9pbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYgKCFnZXRFZmZlY3RDb250ZXh0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHNldElzQWxwaGFJbWFnZShtX2luLT5pc0FscGhhSW1h
Z2UoKSk7CisgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBp
bnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4obV9yYWRpdXNYICogZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmFkaXVzWSAqIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKQEAgLTk4
LDggKzk4LDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZSgpLT5zaXplKCkpOwotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxh
dGVEcmF3aW5nSW50UmVjdChtX2luLT5zY2FsZWRTdWJSZWdpb24oKSk7Ci0gICAgUmVmUHRyPENh
bnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXkobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CisgICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJh
eT4gc3JjUGl4ZWxBcnJheShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShlZmZlY3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVj
dC5oZWlnaHQoKSk7CiAKICAgICBpbnQgZWZmZWN0V2lkdGggPSBlZmZlY3REcmF3aW5nUmVjdC53
aWR0aCgpICogNDsKQEAgLTE3OSw4ICsxNzksOCBAQCBUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6
OmV4dGVybmFsUmVwcmVzCiAgICAgdHMgPDwgIltmZU1vcnBob2xvZ3kiOwogICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgdHMgPDwgIiBvcGVyYXRvcj1c
IiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwi
IiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsgICAgIAotICAg
IG1faW4tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOworICAgICAgIDw8
ICJyYWRpdXM9XCIiIDw8IHJhZGl1c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4i
OyAgICAKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5k
ZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGRU1v
cnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlckVmZmVjdCosIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOyAgCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOyAgCiAgICAgICAgIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogCkBAIC00
NiwxNSArNDYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBmbG9hdCByYWRpdXNZ
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UmFkaXVzWShmbG9hdCk7CiAKLSAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIp
IHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBt
X2luLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwogICAgICAgICB2b2lk
IGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGRU1v
cnBob2xvZ3koRmlsdGVyRWZmZWN0KiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgICAgIEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKICAgICAgICAgCi0gICAg
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgbV90eXBlOwogICAgICAgICBmbG9hdCBtX3JhZGl1c1g7CiAgICAgICAgIGZsb2F0IG1f
cmFkaXVzWTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZz
ZXQuY3BwCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyRWZmZWN0KiBpbiwg
Y29uc3QgZmxvYXQmIGR4LCBjb25zdCBmbG9hdCYgZHkpCitGRU9mZnNldDo6RkVPZmZzZXQoY29u
c3QgZmxvYXQmIGR4LCBjb25zdCBmbG9hdCYgZHkpCiAgICAgOiBGaWx0ZXJFZmZlY3QoKQotICAg
ICwgbV9pbihpbikKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1QYXNz
UmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0
IGZsb2F0JiBkeCwgY29uc3QgZmxvYXQmIGR5KQorUGFzc1JlZlB0cjxGRU9mZnNldD4gRkVPZmZz
ZXQ6OmNyZWF0ZShjb25zdCBmbG9hdCYgZHgsIGNvbnN0IGZsb2F0JiBkeSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZFT2Zmc2V0KGluLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiBmbG9hdCBGRU9mZnNldDo6ZHgoKSBjb25z
dApAQCAtNjYsMTUgKzY1LDE2IEBAIHZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQogCiB2
b2lkIEZFT2Zmc2V0OjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICBtX2luLT5hcHBseShm
aWx0ZXIpOwotICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSkKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgaW4tPmFwcGx5KGZpbHRlcik7CisgICAgaWYgKCFp
bi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKG1faW4tPmlzQWxw
aGFJbWFnZSgpKTsKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAog
ICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXItPnNvdXJjZUltYWdlUmVjdCgp
OwogICAgIHNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53
aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CkBAIC04NiwxMiAr
ODYsMTIgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgbV9keCAq
PSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpOwogICAgIG1fZHkgKj0gZmlsdGVy
LT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9
IEZsb2F0UmVjdChtX2R4ICsgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueCgpIC0gc2NhbGVkU3Vi
UmVnaW9uKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZHkgKyBt
X2luLT5zY2FsZWRTdWJSZWdpb24oKS55KCkgLSBzY2FsZWRTdWJSZWdpb24oKS55KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkud2lk
dGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luLT5zY2FsZWRTdWJS
ZWdpb24oKS5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBGbG9hdFJlY3QobV9k
eCArIGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngoKSAtIHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZHkgKyBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkgLSByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpLmhlaWdodCgpKTsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkc3RSZWN0KTsKKyAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGRzdFJlY3QpOwogfQogCiB2b2lkIEZFT2Zmc2V0OjpkdW1wKCkKQEAgLTEw
NCw3ICsxMDQsNyBAQCBUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhCiAg
ICAgdHMgPDwgIltmZU9mZnNldCI7IAogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cyk7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8
IGR5KCkgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBp
bmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGRU9mZnNldCA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVPZmZzZXQ+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNvbnN0
IGZsb2F0Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFT2Zmc2V0PiBjcmVhdGUoY29u
c3QgZmxvYXQmLCBjb25zdCBmbG9hdCYpOwogCiAgICAgICAgIGZsb2F0IGR4KCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgc2V0RHgoZmxvYXQpOwpAQCAtMzgsMTUgKzM4LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgZmxvYXQgZHkoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXREeShm
bG9hdCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJl
Z2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVj
dFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpKTsgfQogICAgICAgICB2b2lkIGFwcGx5KEZp
bHRlciopOwogICAgICAgICB2b2lkIGR1bXAoKTsKICAgICAgICAgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBGRU9mZnNldChGaWx0ZXJFZmZlY3QqLCBjb25zdCBmbG9hdCYsIGNv
bnN0IGZsb2F0Jik7CisgICAgICAgIEZFT2Zmc2V0KGNvbnN0IGZsb2F0JiwgY29uc3QgZmxvYXQm
KTsKIAotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2luOwogICAgICAgICBmbG9hdCBt
X2R4OwogICAgICAgICBmbG9hdCBtX2R5OwogICAgIH07CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZp
c2lvbiA2NzgxNSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTggKzI5LDE4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmco
RmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsCiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+
IGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBpbiwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLjBmLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291
cmNlKQorICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBz
dXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCiB7CiB9CiAKLVBh
c3NSZWZQdHI8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwKK1Bhc3NSZWZQdHI8
RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsCiAgICAgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBs
aWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGlu
ZyhpbiwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVj
dWxhckV4cG9uZW50LAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5n
KGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJF
eHBvbmVudCwKICAgICAgICAga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBs
aWdodFNvdXJjZSkpOwogfQogCkBAIC0xMzAsNyArMTMwLDcgQEAgVGV4dFN0cmVhbSYgRkVTcGVj
dWxhckxpZ2h0aW5nOjpleHRlcm5hbAogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBt
X3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8
IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50
PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLSAgICBtX2luLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7CiAgICAgcmV0dXJuIHRzOwogfQog
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6
IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNw
ZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0
ZShjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKICAgICAgICAgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdo
dGluZygpOwogCkBAIC01OCw4ICs1OCw3IEBAIHB1YmxpYzoKICAgICBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyRWZmZWN0KiwgY29uc3QgQ29sb3Im
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LAotICAgICAgICBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8
TGlnaHRTb3VyY2U+KTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MCAr
MzEsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXJF
ZmZlY3QqIGluKQorRkVUaWxlOjpGRVRpbGUoKQogICAgIDogRmlsdGVyRWZmZWN0KCkKLSAgICAs
IG1faW4oaW4pCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0
ZXJFZmZlY3QqIGluKQorUGFzc1JlZlB0cjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVGlsZShpbikpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRkVUaWxlKTsKIH0KIAotRmxvYXRSZWN0IEZFVGlsZTo6dW5pdGVDaGlsZEVmZmVjdFN1YnJl
Z2lvbnMoRmlsdGVyKiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVUaWxlOjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKiBmaWx0ZXIpCiB7Ci0gICAgbV9pbi0+Y2FsY3VsYXRl
RWZmZWN0UmVjdChmaWx0ZXIpOwotICAgIHJldHVybiBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwor
ICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmls
dGVyKTsKKworICAgIGZpbHRlci0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHRo
aXMsIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKIH0KIAogdm9pZCBGRVRpbGU6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogewot
ICAgIG1faW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpKQor
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBpbi0+YXBwbHkoZmls
dGVyKTsKKyAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBnZXRFZmZlY3RDb250ZXh0KCk7CiAg
ICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJc0FscGhh
SW1hZ2UobV9pbi0+aXNBbHBoYUltYWdlKCkpOworICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCB0aWxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkpOworICAgIEludFJlY3QgdGlsZVJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKIAogICAgIC8v
IFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRo
ZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBz
b3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9w
dGltaXphdGlvbi4KLSAgICBpZiAobV9pbi0+aXNTb3VyY2VJbnB1dCgpKSB7CisgICAgaWYgKGlu
LT5pc1NvdXJjZUlucHV0KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGZp
bHRlci0+ZmlsdGVyUmVnaW9uKCk7CiAgICAgICAgIGZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKSk7CiAgICAgICAgIHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZWdp
b24pOwpAQCAtNzIsMTUgKzc0LDE2IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRl
cikKIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29u
dGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtX2luLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBJbnRQb2lu
dCgpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdElt
YWdlKCksIERldmljZUNvbG9yU3BhY2UsIEludFBvaW50KCkpOwogICAgIFJlZlB0cjxQYXR0ZXJu
PiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUs
IHRydWUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBtYXRyaXgudHJhbnNs
YXRlKG1faW4tPnNjYWxlZFN1YlJlZ2lvbigpLngoKSAtIHNjYWxlZFN1YlJlZ2lvbigpLngoKSwg
bV9pbi0+c2NhbGVkU3ViUmVnaW9uKCkueSgpIC0gc2NhbGVkU3ViUmVnaW9uKCkueSgpKTsKKyAg
ICBtYXRyaXgudHJhbnNsYXRlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLngo
KSAtIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueCgpLAorICAgICAgICAgICAgICAg
ICAgICAgaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkueSgpIC0gcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS55KCkpOwogICAgIHBhdHRlcm4uZ2V0KCktPnNldFBhdHRl
cm5TcGFjZVRyYW5zZm9ybShtYXRyaXgpOwogCiAgICAgZmlsdGVyQ29udGV4dC0+c2V0RmlsbFBh
dHRlcm4ocGF0dGVybik7Ci0gICAgZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgc2NhbGVkU3ViUmVnaW9uKCkuc2l6ZSgpKSk7CisgICAgZmlsdGVyQ29udGV4
dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKS5zaXplKCkpKTsKIH0KIAogdm9pZCBGRVRpbGU6OmR1bXAoKQpAQCAtOTMsNyAr
OTYsNyBAQCBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpCiAgICAgdHMg
PDwgIltmZVRpbGUiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAgbV9pbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgaW5kZW50ICsgMSk7CisgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIGluZGVudCArIDEpOwogCiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oCShyZXZpc2lvbiA2NzgxNSkKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDE3ICszMCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgRkVUaWxl
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RkVUaWxlPiBjcmVhdGUoKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1
bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqKTsKICAgICAgICAgdm9pZCBhcHBseShG
aWx0ZXIqKTsKICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAg
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihG
aWx0ZXIqKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRkVUaWxlKEZpbHRlckVm
ZmVjdCopOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9pbjsKKyAg
ICAgICAgRkVUaWxlKCk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAkocmV2aXNpb24gNjc4
MTUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYwICsyNCw2NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNW
R0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgaXRlbUJveCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKQorU1ZHRmlsdGVyOjpTVkdGaWx0
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hNb2RlKQogICAgIDogRmlsdGVyKCkKLSAgICAsIG1f
aXRlbUJveChpdGVtQm94KQorICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGlu
Z0JveCkKICAgICAsIG1fZmlsdGVyUmVjdChmaWx0ZXJSZWN0KQogICAgICwgbV9lZmZlY3RCQm94
TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKIH0KIAotdm9pZCBTVkdGaWx0ZXI6OmNhbGN1bGF0ZUVm
ZmVjdFN1YlJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucykKIHsKICAgICBG
bG9hdFJlY3Qgc3ViUmVnaW9uQkJveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwotICAg
IEZsb2F0UmVjdCB1c2VCQm94ID0gZWZmZWN0LT51bmlvbk9mQ2hpbGRFZmZlY3RTdWJyZWdpb25z
KCk7CiAgICAgRmxvYXRSZWN0IG5ld1N1YlJlZ2lvbiA9IHN1YlJlZ2lvbkJCb3g7CiAKICAgICBp
ZiAobV9lZmZlY3RCQm94TW9kZSkgewotICAgICAgICBuZXdTdWJSZWdpb24gPSB1c2VCQm94Owor
ICAgICAgICBuZXdTdWJSZWdpb24gPSB1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25z
OwogCiAgICAgICAgIGlmIChlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lv
bi5zZXRYKG1faXRlbUJveC54KCkgKyBzdWJSZWdpb25CQm94LngoKSAqIG1faXRlbUJveC53aWR0
aCgpKTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKG1fdGFyZ2V0Qm91bmRpbmdCb3gu
eCgpICsgc3ViUmVnaW9uQkJveC54KCkgKiBtX3RhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwog
Ci0gICAgICAgIGlmIChlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5z
ZXRZKG1faXRlbUJveC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1faXRlbUJveC5oZWlnaHQo
KSk7CisgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQorICAgICAgICAgICAgbmV3U3ViUmVnaW9u
LnNldFkobV90YXJnZXRCb3VuZGluZ0JveC55KCkgKyBzdWJSZWdpb25CQm94LnkoKSAqIG1fdGFy
Z2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogCiAgICAgICAgIGlmIChlZmZlY3QtPmhhc1dpZHRo
KCkpCi0gICAgICAgICAgICBuZXdTdWJSZWdpb24uc2V0V2lkdGgoc3ViUmVnaW9uQkJveC53aWR0
aCgpICogbV9pdGVtQm94LndpZHRoKCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFdp
ZHRoKHN1YlJlZ2lvbkJCb3gud2lkdGgoKSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7
CiAKICAgICAgICAgaWYgKGVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdTdWJS
ZWdpb24uc2V0SGVpZ2h0KHN1YlJlZ2lvbkJCb3guaGVpZ2h0KCkgKiBtX2l0ZW1Cb3guaGVpZ2h0
KCkpOworICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldEhlaWdodChzdWJSZWdpb25CQm94Lmhl
aWdodCgpICogbV90YXJnZXRCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRY
KHVzZUJCb3gueCgpKTsKKyAgICAgICAgICAgIG5ld1N1YlJlZ2lvbi5zZXRYKHVuaW9uT2ZQcmV2
aW91c1ByaW1pdGl2ZVN1YnJlZ2lvbnMueCgpKTsKIAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFz
WSgpKQotICAgICAgICAgICAgbmV3U3ViUmVnaW9uLnNldFkodXNlQkJveC55KCkpOworICAgICAg
ICAgICAgbmV3U3ViUmVnaW9uLnNldFkodW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9u
cy55KCkpOwogCiAgICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQotICAgICAgICAgICAg
bmV3U3ViUmVnaW9uLnNldFdpZHRoKHVzZUJCb3gud2lkdGgoKSk7CisgICAgICAgICAgICBuZXdT
dWJSZWdpb24uc2V0V2lkdGgodW5pb25PZlByZXZpb3VzUHJpbWl0aXZlU3VicmVnaW9ucy53aWR0
aCgpKTsKIAogICAgICAgICBpZiAoIWVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBu
ZXdTdWJSZWdpb24uc2V0SGVpZ2h0KHVzZUJCb3guaGVpZ2h0KCkpOworICAgICAgICAgICAgbmV3
U3ViUmVnaW9uLnNldEhlaWdodCh1bmlvbk9mUHJldmlvdXNQcmltaXRpdmVTdWJyZWdpb25zLmhl
aWdodCgpKTsKICAgICB9CiAKICAgICAvLyBjbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhl
IGZpbHRlciByZWdpb24KICAgICBuZXdTdWJSZWdpb24uaW50ZXJzZWN0KG1fZmlsdGVyUmVjdCk7
CiAKLSAgICBlZmZlY3QtPnNldFN1YlJlZ2lvbihuZXdTdWJSZWdpb24pOworICAgIGVmZmVjdC0+
c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKG5ld1N1YlJlZ2lvbik7CisgICAgCisgICAgLy8g
VE9ETzogRXZlcnl0aGluZyBhYm92ZSBzaG91bGQgYmUgbW92ZWQgdG8gYSBmaXJzdCBwaGFzZSBv
ZiBsYXlvdXQgaW4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCisgICAgLy8gVGhl
IHNjYWxpbmcgb2YgdGhlIHN1YnJlZ2lvbiB0byB0aGUgcmVwYWludCByZWN0IHNob3VsZCBiZSBt
ZXJnZWQgd2l0aCBhIG1vcmUgaW50ZWxsaWdlbnQgcmVwYWludCBsb2dpYworICAgIC8vIGFuZCBt
b3ZlZCB0byB0aGUgc2Vjb25kIHBoYXNlIG9mIGxheW91dCBpbiBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS4KKyAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTYxNC4KICAgICBuZXdTdWJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1
dGlvbigpLndpZHRoKCksIGZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
LT5zZXRTY2FsZWRTdWJSZWdpb24obmV3U3ViUmVnaW9uKTsKKyAgICBlZmZlY3QtPnNldFJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKG5ld1N1YlJlZ2lvbik7CiAgICAgbV9tYXhJbWFnZVNp
emUgPSBtX21heEltYWdlU2l6ZS5leHBhbmRlZFRvKG5ld1N1YlJlZ2lvbi5zaXplKCkpOyAKIH0K
IAotUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgaXRlbUJveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0LCBib29sIGVmZmVjdEJCb3hN
b2RlKQorUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9v
bCBlZmZlY3RCQm94TW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihp
dGVtQm94LCBmaWx0ZXJSZWN0LCBlZmZlY3RCQm94TW9kZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHRmlsdGVyKHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJSZWN0LCBlZmZlY3RCQm94
TW9kZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgJKHJldmlzaW9uIDY3ODE1KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYg
KzM5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVj
dEJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0QkJveE1vZGU7IH0KIAog
ICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlclJlY3Q7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtQm94OyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5k
aW5nQm94OyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFNpemUgbWF4SW1hZ2VTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhJbWFnZVNpemU7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNhbGN1
bGF0ZUVmZmVjdFN1YlJlZ2lvbihGaWx0ZXJFZmZlY3QqKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBjb25zdCBG
bG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9h
dFJlY3QmIGl0ZW1Cb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCwgYm9vbCBlZmZlY3RC
Qm94TW9kZSk7CisgICAgICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QsIGJvb2wgZWZmZWN0QkJveE1vZGUp
OwogCiAgICAgICAgIEZsb2F0U2l6ZSBtX21heEltYWdlU2l6ZTsKLSAgICAgICAgRmxvYXRSZWN0
IG1faXRlbUJveDsKKyAgICAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAg
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlY3Q7CiAgICAgICAgIGJvb2wgbV9lZmZlY3RCQm94TW9k
ZTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68145</attachid>
            <date>2010-09-20 15:25:51 -0700</date>
            <delta_ts>2010-10-04 01:33:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45612-20100921002548.patch</filename>
            <type>text/plain</type>
            <size>93541</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzg4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTMgQEAKKzIwMTAtMDktMjAgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1NjEyCisKKyAgICAgICAgU2Vjb25kIGNsZWFudXAgcGF0Y2guIE1vZGlmaWVkIGZp
bGVzIHRvIGZvbGxvdyB3ZWJraXQgc3R5bGUuIFJlbW92ZWQgZGVwZW5kZW5jaWVzCisgICAgICAg
IHRvIFNWRyBvZiBtb3N0IG9mIHRoZSBmaWx0ZXIgZWZmZWN0cyBhbmQgcHJlcGFyZWQgdGhlbSB0
byBtb3ZlIGZyb20gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycworICAgICAgICB0byBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvLgorICAgICAgICBSZW5hbWVkIGNhbGN1bGF0
ZURyYXdpbmdJbnRSZWN0IGFuZCBjYWxjdWxhdGVEcmF3aW5nUmVjdCB0byByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhIGFuZAorICAgICAgICBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
IHRvIGNsYXJpZnkgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIG1ha2UgYm90aCBmdW5jdGlvbnMgZGlz
dGluZ3Vpc2hhYmxlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uOjpDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9z
aXRlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZWZmZWN0Q29udGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjppc1NvdXJj
ZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmlzU291cmNlSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzRnJhY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0
cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4Lmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9v
ZDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5KToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmg6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjph
cHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6YXBwbHkpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0Lmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjphcHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxl
Lmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oOgorCiAyMDEwLTA5LTIwICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0
ZWluLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQgKzEsMjQgQEAKIC8qCi0gICAg
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICAgICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKQEAgLTk4LDEz
ICs5OCwxMyBAQCB2b2lkIEZFQmxlbmQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICht
X21vZGUgPT0gRkVCTEVORF9NT0RFX1VOS05PV04pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghZ2V0RWZmZWN0Q29udGV4dCgpKQorICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURy
YXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxDYW52
YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1JlY3QpLT5kYXRhKCkpOwogCi0gICAgSW50
UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChpbjItPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQ
aXhlbEFycmF5QihpbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
ZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgJKHJldmlzaW9uIDY3ODQ3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMyArMSwyMyBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAg
ICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLworICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2lm
bmRlZiBGRUJsZW5kX2gKICNkZWZpbmUgRkVCbGVuZF9oCkBAIC0yOSwzMSArMjksMzIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgZW51bSBCbGVuZE1vZGVUeXBlIHsKLSAgICAgICAg
RkVCTEVORF9NT0RFX1VOS05PV04gID0gMCwKLSAgICAgICAgRkVCTEVORF9NT0RFX05PUk1BTCAg
ID0gMSwKLSAgICAgICAgRkVCTEVORF9NT0RFX01VTFRJUExZID0gMiwKLSAgICAgICAgRkVCTEVO
RF9NT0RFX1NDUkVFTiAgID0gMywKLSAgICAgICAgRkVCTEVORF9NT0RFX0RBUktFTiAgID0gNCwK
LSAgICAgICAgRkVCTEVORF9NT0RFX0xJR0hURU4gID0gNQotICAgIH07Ci0KLSAgICBjbGFzcyBG
RUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlVHlwZSk7Ci0KLSAgICAgICAg
QmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRCbGVuZE1v
ZGUoQmxlbmRNb2RlVHlwZSk7Ci0KLSAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICAg
ICAgdm9pZCBkdW1wKCk7Ci0gICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworZW51bSBCbGVuZE1vZGVUeXBlIHsK
KyAgICBGRUJMRU5EX01PREVfVU5LTk9XTiAgPSAwLAorICAgIEZFQkxFTkRfTU9ERV9OT1JNQUwg
ICA9IDEsCisgICAgRkVCTEVORF9NT0RFX01VTFRJUExZID0gMiwKKyAgICBGRUJMRU5EX01PREVf
U0NSRUVOICAgPSAzLAorICAgIEZFQkxFTkRfTU9ERV9EQVJLRU4gICA9IDQsCisgICAgRkVCTEVO
RF9NT0RFX0xJR0hURU4gID0gNQorfTsKKworY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQmxlbmQ+IGNyZWF0ZShC
bGVuZE1vZGVUeXBlKTsKKworICAgIEJsZW5kTW9kZVR5cGUgYmxlbmRNb2RlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlVHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIEZFQmxlbmQoQmxlbmRNb2RlVHlwZSk7CisgICAgdmlydHVhbCBUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25z
dDsKIAotICAgICAgICBCbGVuZE1vZGVUeXBlIG1fbW9kZTsKLSAgICB9OworcHJpdmF0ZToKKyAg
ICBGRUJsZW5kKEJsZW5kTW9kZVR5cGUpOworCisgICAgQmxlbmRNb2RlVHlwZSBtX21vZGU7Cit9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDY3ODQ3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0ICsxLDI0IEBACiAvKgotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCkBAIC0xNjAsMTEgKzE2MCwxMSBAQCB2
b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlciogZmlsdGVyCiAgICAgaWYgKCFpbi0+cmVz
dWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0
ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmls
dGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
KTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNp
emUoKSk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShyZXN1bHRJbWFnZSgp
LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0KSk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgJKHJldmlzaW9u
IDY3ODQ3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMyArMSwyMyBAQAogLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLworICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KIAogI2lmbmRlZiBGRUNvbG9yTWF0cml4X2gKICNkZWZpbmUgRkVD
b2xvck1hdHJpeF9oCkBAIC0zMCwzNCArMzAsMzUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgZW51bSBDb2xvck1hdHJpeFR5cGUgewotICAgICAgICBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTiAgICAgICAgICA9IDAsCi0gICAgICAgIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgg
ICAgICAgICAgID0gMSwKLSAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICAgICAg
ICAgPSAyLAotICAgICAgICBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFICAgICAgICA9IDMs
Ci0gICAgICAgIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBID0gNAotICAgIH07
Ci0KLSAgICBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbG9yTWF0cml4PiBjcmVhdGUo
Q29sb3JNYXRyaXhUeXBlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICAgICAgQ29sb3JN
YXRyaXhUeXBlIHR5cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRUeXBlKENvbG9yTWF0cml4
VHlwZSk7Ci0KLSAgICAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAgICAgICB2
b2lkIGFwcGx5KEZpbHRlciopOwotICAgICAgICB2b2lkIGR1bXAoKTsKLSAgICAgICAgVGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29u
c3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlw
ZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgICAgIENvbG9yTWF0cml4VHlwZSBtX3R5
cGU7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7Ci0gICAgfTsKK2VudW0gQ29sb3JN
YXRyaXhUeXBlIHsKKyAgICBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTiAgICAgICAgICA9IDAs
CisgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAgICAgICAgICAgPSAxLAorICAgIEZFQ09M
T1JNQVRSSVhfVFlQRV9TQVRVUkFURSAgICAgICAgID0gMiwKKyAgICBGRUNPTE9STUFUUklYX1RZ
UEVfSFVFUk9UQVRFICAgICAgICA9IDMsCisgICAgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5D
RVRPQUxQSEEgPSA0Cit9OworCitjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKENvbG9yTWF0cml4VHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgQ29sb3JN
YXRyaXhUeXBlIHR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBl
KTsKKworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0OworICAgIHZvaWQg
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9u
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYpOworCisgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKKyAg
ICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyNSArMSwyNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAgICAgICAg
ICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICAgIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKQEAg
LTE1NCw3ICsxNTQsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlciog
CiAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFnZXRFZmZlY3RDb250ZXh0KCkpCisgICAgaWYgKCFlZmZlY3RDb250ZXh0KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHVuc2lnbmVkIGNoYXIgclZhbHVlc1syNTZdLCBnVmFsdWVzWzI1Nl0s
IGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoRmlsdGVyKiAKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5u
ZWwgPSAwOyBjaGFubmVsIDwgNDsgY2hhbm5lbCsrKQogICAgICAgICAoKmNhbGxFZmZlY3RbdHJh
bnNmZXJGdW5jdGlvbltjaGFubmVsXS50eXBlXSkodGFibGVzW2NoYW5uZWxdLCB0cmFuc2ZlckZ1
bmN0aW9uW2NoYW5uZWxdKTsKIAotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVE
cmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAg
SW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4t
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGRy
YXdpbmdSZWN0KSk7CiAgICAgQ2FudmFzUGl4ZWxBcnJheSogc3JjUGl4ZWxBcnJheShpbWFnZURh
dGEtPmRhdGEoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAkocmV2aXNpb24gNjc4NDcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIzICsxLDIzIEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLwogCiAjaWZuZGVmIEZFQ29tcG9uZW50VHJhbnNmZXJfaAogI2RlZmluZSBGRUNv
bXBvbmVudFRyYW5zZmVyX2gKQEAgLTMwLDY3ICszMCw2OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBlbnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7Ci0gICAgICAgIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOICA9IDAsCi0gICAgICAgIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9JREVOVElUWSA9IDEsCi0gICAgICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9U
QUJMRSAgICA9IDIsCi0gICAgICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSA9
IDMsCi0gICAgICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIgICA9IDQsCi0gICAg
ICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQSAgICA9IDUKLSAgICB9OwotCi0gICAg
c3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewotICAgICAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uKCkKLSAgICAgICAgICAgIDogdHlwZShGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfVU5LTk9XTikKLSAgICAgICAgICAgICwgc2xvcGUoMC4wZikKLSAgICAgICAgICAgICwgaW50
ZXJjZXB0KDAuMGYpCi0gICAgICAgICAgICAsIGFtcGxpdHVkZSgwLjBmKQotICAgICAgICAgICAg
LCBleHBvbmVudCgwLjBmKQotICAgICAgICAgICAgLCBvZmZzZXQoMC4wZikKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGU7Ci0KLSAgICAg
ICAgZmxvYXQgc2xvcGU7Ci0gICAgICAgIGZsb2F0IGludGVyY2VwdDsKLSAgICAgICAgZmxvYXQg
YW1wbGl0dWRlOwotICAgICAgICBmbG9hdCBleHBvbmVudDsKLSAgICAgICAgZmxvYXQgb2Zmc2V0
OwotCi0gICAgICAgIFZlY3RvcjxmbG9hdD4gdGFibGVWYWx1ZXM7Ci0gICAgfTsKLQotICAgIGNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0
ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgCi0gICAgICAgICAgICAgICAgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldFJlZEZ1bmN0aW9uKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLQotICAg
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRHcmVlbkZ1bmN0aW9uKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLQotICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGJsdWVGdW5jdGlvbigp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldEJsdWVGdW5jdGlvbihjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJik7Ci0KLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBo
YUZ1bmN0aW9uKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0QWxwaGFGdW5jdGlvbihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIq
KTsKLSAgICAgICAgdm9pZCBkdW1wKCk7Ci0gICAgICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLQotICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG1fcmVkRnVuYzsKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dy
ZWVuRnVuYzsKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2JsdWVGdW5jOwot
ICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fYWxwaGFGdW5jOwotICAgIH07Citl
bnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7CisgICAgRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X1VOS05PV04gID0gMCwKKyAgICBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkgPSAx
LAorICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRSAgICA9IDIsCisgICAgRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFID0gMywKKyAgICBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSICAgPSA0LAorICAgIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQSAg
ICA9IDUKK307CisKK3N0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKKyAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uKCkKKyAgICAgICAgOiB0eXBlKEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9VTktOT1dOKQorICAgICAgICAsIHNsb3BlKDAuMGYpCisgICAgICAgICwgaW50ZXJj
ZXB0KDAuMGYpCisgICAgICAgICwgYW1wbGl0dWRlKDAuMGYpCisgICAgICAgICwgZXhwb25lbnQo
MC4wZikKKyAgICAgICAgLCBvZmZzZXQoMC4wZikKKyAgICB7CisgICAgfQorCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJUeXBlIHR5cGU7CisKKyAgICBmbG9hdCBzbG9wZTsKKyAgICBmbG9hdCBpbnRl
cmNlcHQ7CisgICAgZmxvYXQgYW1wbGl0dWRlOworICAgIGZsb2F0IGV4cG9uZW50OworICAgIGZs
b2F0IG9mZnNldDsKKworICAgIFZlY3RvcjxmbG9hdD4gdGFibGVWYWx1ZXM7Cit9OworCitjbGFz
cyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCAKKyAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiByZWRGdW5jdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0UmVkRnVuY3Rpb24oY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRHcmVlbkZ1bmN0aW9uKGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gYmx1ZUZ1bmN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCbHVlRnVuY3Rpb24o
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbHBoYUZ1bmN0
aW9uKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVh
bCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuYzsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG1fZ3JlZW5GdW5jOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ibHVlRnVu
YzsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fYWxwaGFGdW5jOworfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDY3ODQ3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyNCArMSwyNCBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAg
ICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAgICAgICAgICAg
ICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKIApAQCAtMTIyLDM5ICsxMjIsMzkgQEAgdm9pZCBGRUNvbXBvc2l0
ZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSB8fCAh
aW4yLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQqIGZpbHRlckNvbnRleHQgPSBnZXRFZmZlY3RDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJl
Y3QoMC5mLCAwLmYsIC0xLmYsIC0xLmYpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxh
dGVEcmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBE
ZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIERldmlj
ZUNvbG9yU3BhY2UsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9JTjoKICAgICAgICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KGluMi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCks
IERldmljZUNvbG9yU3BhY2UsIGNhbGN1bGF0ZURyYXdpbmdSZWN0KGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdl
QnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjIt
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4tPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4yLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25P
dXQpOworICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdElt
YWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpLCBzcmNSZWN0LCBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1h
Z2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4tPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLCBzcmNSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSwg
c3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1h
Z2VCdWZmZXIoaW4yLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBjYWxjdWxhdGVE
cmF3aW5nUmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZp
Y2VDb2xvclNwYWNlLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0ZVhPUik7CisgICAgICAgIGZpbHRlckNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPnJlc3VsdEltYWdlKCksIERldmljZUNvbG9yU3Bh
Y2UsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+
cmVzdWx0SW1hZ2UoKSwgRGV2aWNlQ29sb3JTcGFjZSwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSksIHNyY1JlY3QsIENvbXBvc2l0
ZVhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQzogewotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0
ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAg
ICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAg
UmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGluLT5yZXN1bHRJbWFnZSgp
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCktPmRhdGEoKSk7
CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5n
SW50UmVjdChpbjItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgICAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4yLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAgUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhKGluMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpKTsKICAgICAgICAgQ2FudmFzUGl4ZWxBcnJh
eSogc3JjUGl4ZWxBcnJheUIoaW1hZ2VEYXRhLT5kYXRhKCkpOwogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAkocmV2aXNpb24gNjc4
NDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMyArMSwyMyBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KIAogI2lmbmRlZiBGRUNvbXBvc2l0ZV9oCiAjZGVmaW5lIEZFQ29tcG9zaXRl
X2gKQEAgLTU5LDkgKzU5LDEwIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0SzQoZmxvYXQpOwogCi0gICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICB2b2lk
IGR1bXAoKTsKLSAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7
CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgRkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNjc4
NDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1ICsxLDI1IEBACiAvKgotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDEwIElnYWxpYSwgUy5MLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKIApAQCAt
MTMyLDEyICsxMzIsMTIgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyKiBmaWx0
ZQogICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghZ2V0RWZmZWN0Q29udGV4dCgpKQorICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChp
bi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdl
RGF0YShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RE
cmF3aW5nUmVjdCkpOwogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlKCktPnNpemUoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIzICsxLDIzIEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAg
ICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwog
CiAjaWZuZGVmIEZFR2F1c3NpYW5CbHVyX2gKICNkZWZpbmUgRkVHYXVzc2lhbkJsdXJfaApAQCAt
MzgsMTIgKzM4LDEzIEBAIHB1YmxpYzoKICAgICBmbG9hdCBzdGREZXZpYXRpb25ZKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0KTsKIAotICAgIHZvaWQgYXBwbHkoRmls
dGVyKik7Ci0gICAgdm9pZCBkdW1wKCk7Ci0gICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgZmxv
YXQgY2FsY3VsYXRlU3RkRGV2aWF0aW9uKGZsb2F0KTsKIAorICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9u
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCwgZmxvYXQpOwog
ICAgIHN0YXRpYyB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBib3hCbHVyLCB1bnNpZ25lZCYgc3Rk
LCBpbnQmIGRMZWZ0LCBpbnQmIGRSaWdodCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlci5oCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMCArMSwy
MCBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CiAgKgotICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCiAjaWZu
ZGVmIEZpbHRlcl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQCiAg
ICAgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwogfQogCi1JbnRSZWN0IEZpbHRl
ckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RS
ZWN0KSBjb25zdAorSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewogICAgIEFTU0VS
VChtX2VmZmVjdEJ1ZmZlcik7CiAgICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IG1fcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMubG9jYXRpb24oKTsKQEAgLTY0LDcgKzY0LDcgQEAgSW50UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdJbgogICAgIHJldHVybiBJbnRSZWN0KHJv
dW5kZWRJbnRQb2ludChsb2NhdGlvbiksIG1fZWZmZWN0QnVmZmVyLT5zaXplKCkpOwogfQogCi1G
bG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICByZXR1
cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQoc3JjUmVjdC54KCkgLSBtX3JlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzLngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVj
dC55KCkgLSBtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzLnkoKSksIHNyY1JlY3Quc2l6
ZSgpKTsKQEAgLTc2LDcgKzc2LDcgQEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0
RWZmZWN0KAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCgpCitHcmFw
aGljc0NvbnRleHQqIEZpbHRlckVmZmVjdDo6ZWZmZWN0Q29udGV4dCgpCiB7CiAgICAgSW50UmVj
dCBidWZmZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3JlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKTsKICAgICBtX2VmZmVjdEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
UmVjdC5zaXplKCksIExpbmVhclJHQik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZXMgdGhlIEltYWdl
QnVmZmVyIGZvciB0aGUgY3VycmVudCBmaWx0ZXIgcHJpbWl0aXZlIHJlc3VsdCBpbiB0aGUgc2l6
ZSBvZiB0aGUKICAgICAvLyByZXBhaW50UmVjdC4gR2l2ZXMgYmFjayB0aGUgR3JhcGhpY3NDb250
ZXh0IG9mIHRoZSBvd24gSW1hZ2VCdWZmZXIuCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnZXRFZmZl
Y3RDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBlZmZlY3RDb250ZXh0KCk7CiAKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZl
Y3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0
RWZmZWN0cy5zaXplKCk7IH0KIAotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVEcmF3aW5nUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IGNhbGN1bGF0ZURyYXdpbmdJbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEludFJlY3QgcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogICAg
IC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KICAgICBi
b29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ltYWdlQnVmZmVyRmlsdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZm
ZXJGaWx0ZXIuY3BwCShyZXZpc2lvbiA2Nzg0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9JbWFnZUJ1ZmZlckZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEg
KzEsMjEgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hh
bUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFt
QHdlYmtpdC5vcmc+CiAgKgotICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIuaAkocmV2aXNpb24gNjc4NDYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvSW1hZ2VCdWZmZXJGaWx0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyMSArMSwyMSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAy
MDA5IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KICAqCi0gKiAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KICAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgogICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKICNpZm5kZWYgSW1hZ2VCdWZmZXJGaWx0ZXJf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAgKzEsMjAgQEAK
IC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCkBAIC01Nyw3ICs1Nyw3IEBAIEZsb2F0UmVjdCBTb3VyY2VBbHBoYTo6ZGV0ZXJt
aW5lRmlsdGVyUHIKIAogdm9pZCBTb3VyY2VBbHBoYTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiB7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgp
OworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsK
ICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgJKHJldmlzaW9u
IDY3ODQ3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEgKzEsMjEgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KIAogI2lmbmRlZiBTb3VyY2VBbHBoYV9o
CiAjZGVmaW5lIFNvdXJjZUFscGhhX2gKQEAgLTI4LDIyICsyOCwyNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewotICAgIHB1YmxpYzogICAgICAgIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb3VyY2VB
bHBoYT4gY3JlYXRlKCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZm
ZWN0TmFtZSgpOwotCi0gICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgICAgIHZvaWQg
ZHVtcCgpOwotICAgICAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTb3Vy
Y2VJbnB1dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciopOwotICAgIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIFNvdXJjZUFscGhhKCkgeyB9Ci0gICAgfTsKK2NsYXNzIFNvdXJj
ZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJsaWM6ICAgICAgICAKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTb3VyY2VBbHBoYSgpIHsgfQorfTsK
KwogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAJKHJldmlzaW9uIDY3ODQ3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwICsxLDIwIEBA
CiAvKgotICogIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpAQCAtNTYsNyArNTYsNyBAQCBGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZGV0
ZXJtaW5lRmlsdGVyCiAKIHZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIp
CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4
dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQo
KTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCShy
ZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIgKzEsMjIgQEAKIC8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5j
b20+Ci0gICAgICAgICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5i
b2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLwogCiAjaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAogI2RlZmluZSBTb3VyY2VHcmFocGlj
X2gKQEAgLTI5LDIyICsyOSwyNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci0gICAgcHVibGljOiAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZSgpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKLQotICAg
ICAgICB2b2lkIGFwcGx5KEZpbHRlciopOwotICAgICAgICB2b2lkIGR1bXAoKTsKLSAgICAgICAg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVu
dCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzU291cmNlSW5wdXQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXIqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNv
dXJjZUdyYXBoaWMoKSB7IH0KLSAgICB9OworY2xhc3MgU291cmNlR3JhcGhpYyA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgeworcHVibGljOiAgICAgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U291
cmNlR3JhcGhpYz4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBl
ZmZlY3ROYW1lKCk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oRmlsdGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVy
Kik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJj
ZUlucHV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBTb3VyY2VHcmFwaGljKCkgeyB9Cit9OworCiB9IC8vbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDY3ODQ2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTc1LDEyICs3NCw1MyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0
aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgUmVuZGVyTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGlu
ZGVudCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVo
YXZpb3JOb3JtYWwpOwogCi0jaWYgIUVOQUJMRShTVkcpCi1zdGF0aWMgVGV4dFN0cmVhbSAmb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UmVjdCYgcikKK3N0YXRpYyBib29sIGhh
c0ZyYWN0aW9ucyhkb3VibGUgdmFsKQoreworICAgIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOwor
ICAgIGludCBpdmFsID0gc3RhdGljX2Nhc3Q8aW50Pih2YWwpOworICAgIGRvdWJsZSBkdmFsID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihpdmFsKTsKKyAgICByZXR1cm4gZmFicyh2YWwgLSBkdmFsKSA+
IGVwc2lsb247Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEludFJlY3QmIHIpCiB7CiAgICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngoKSA8PCAi
LCIgPDwgci55KCkgPDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5oZWlnaHQo
KTsKIH0KLSNlbmRpZgorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBJbnRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIs
IiA8PCBwLnkoKSA8PCAiKSI7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgdHMgPDwgIigiOyAgICAKKyAgICBp
ZiAoaGFzRnJhY3Rpb25zKHAueCgpKSkKKyAgICAgICAgdHMgPDwgcC54KCk7CisgICAgZWxzZSAK
KyAgICAgICAgdHMgPDwgaW50KHAueCgpKTsgICAgCisgICAgdHMgPDwgIiwiOworICAgIGlmICho
YXNGcmFjdGlvbnMocC55KCkpKSAKKyAgICAgICAgdHMgPDwgcC55KCk7CisgICAgZWxzZSAKKyAg
ICAgICAgdHMgPDwgaW50KHAueSgpKTsgICAgCisgICAgcmV0dXJuIHRzIDw8ICIpIjsKK30KKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRTaXplJiBz
KQoreworICAgIHRzIDw8ICJ3aWR0aD0iOworICAgIGlmIChoYXNGcmFjdGlvbnMocy53aWR0aCgp
KSkKKyAgICAgICAgdHMgPDwgcy53aWR0aCgpOworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgaW50
KHMud2lkdGgoKSk7CisgICAgdHMgPDwgIiBoZWlnaHQ9IjsKKyAgICBpZiAoaGFzRnJhY3Rpb25z
KHMuaGVpZ2h0KCkpKSAKKyAgICAgICAgdHMgPDwgcy5oZWlnaHQoKTsKKyAgICBlbHNlCisgICAg
ICAgIHRzIDw8IGludChzLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CiAKIHZvaWQgd3Jp
dGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCiB7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiA2Nzg0NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDE5IEBA
CiAKICNpZm5kZWYgUmVuZGVyVHJlZUFzVGV4dF9oCiAjZGVmaW5lIFJlbmRlclRyZWVBc1RleHRf
aAorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBFbGVtZW50OworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEZy
YW1lOworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgUmVuZGVyT2JqZWN0
OwogY2xhc3MgVGV4dFN0cmVhbTsKIApAQCAtNTksNiArNjUsMjYgQEAgcHVibGljOgogc3RhdGlj
IHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgbywgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpOwogfTsKIAorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFJlY3QmKTsKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVtPgorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmVj
dG9yPEl0ZW0+JiB2KQoreworICAgIHRzIDw8ICJbIjsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgIHRzIDw8IHZbaV07CisgICAgICAgIGlm
IChpIDwgdi5zaXplKCkgLSAxKQorICAgICAgICAgICAgdHMgPDwgIiwgIjsKKyAgICB9CisKKyAg
ICB0cyA8PCAiXSI7CisgICAgcmV0dXJuIHRzOworfQorCiAvLyBIZWxwZXIgZnVuY3Rpb24gc2hh
cmVkIHdpdGggU1ZHUmVuZGVyVHJlZUFzVGV4dAogU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJp
bnRhYmxlcyhjb25zdCBTdHJpbmcmKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDY3ODQ2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxNiArMTI0LDYg
QEAgc3RhdGljIHZvaWQgd3JpdGVJZk5vdERlZmF1bHQoVGV4dFN0cmVhbQogICAgICAgICB3cml0
ZU5hbWVWYWx1ZVBhaXIodHMsIG5hbWUsIHZhbHVlKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIHRz
IDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwotfQotCi1UZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJl
dHVybiB0cyA8PCAiYXQgKCIgPDwgci54KCkgPDwgIiwiIDw8IHIueSgpIDw8ICIpIHNpemUgIiA8
PCByLndpZHRoKCkgPDwgIngiIDw8IHIuaGVpZ2h0KCk7Ci19Ci0KIHN0YXRpYyBib29sIGhhc0Zy
YWN0aW9ucyhkb3VibGUgdmFsKQogewogICAgIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAxOwpAQCAt
MTY3LDM2ICsxNTcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
CiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHRzIDw8ICIoIjsgICAgCi0gICAgaWYg
KGhhc0ZyYWN0aW9ucyhwLngoKSkpCi0gICAgICAgIHRzIDw8IHAueCgpOwotICAgIGVsc2UgCi0g
ICAgICAgIHRzIDw8IGludChwLngoKSk7ICAgIAotICAgIHRzIDw8ICIsIjsKLSAgICBpZiAoaGFz
RnJhY3Rpb25zKHAueSgpKSkgCi0gICAgICAgIHRzIDw8IHAueSgpOwotICAgIGVsc2UgCi0gICAg
ICAgIHRzIDw8IGludChwLnkoKSk7ICAgIAotICAgIHJldHVybiB0cyA8PCAiKSI7Ci19Ci0KLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0U2l6ZSYgcykK
LXsKLSAgICB0cyA8PCAid2lkdGg9IjsKLSAgICBpZiAoaGFzRnJhY3Rpb25zKHMud2lkdGgoKSkp
Ci0gICAgICAgIHRzIDw8IHMud2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHRzIDw8IGludChz
LndpZHRoKCkpOwotICAgIHRzIDw8ICIgaGVpZ2h0PSI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhz
LmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHMuaGVpZ2h0KCk7Ci0gICAgZWxzZQotICAgICAg
ICB0cyA8PCBpbnQocy5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKIHsKICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDY3ODQ2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
MSArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ29sb3I7Ci0gICAg
Y2xhc3MgRmxvYXRQb2ludDsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgRmxvYXRT
aXplOwotICAgIGNsYXNzIEludFBvaW50OwotICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3Mg
Tm9kZTsKICAgICBjbGFzcyBSZW5kZXJCbG9jazsKICAgICBjbGFzcyBSZW5kZXJJbWFnZTsKQEAg
LTYzLDEyICs2MCw4IEBAIHZvaWQgd3JpdGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYsIGNvbnN0IFIK
IAogLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRv
IGR1bXAgdGhlIHJlbmRlciB0cmVlLgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBJbnRSZWN0Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwg
Y29uc3QgSW50UG9pbnQmKTsKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNv
bnN0IEZsb2F0U2l6ZSYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgRmxvYXRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBGbG9hdFBvaW50Jik7CiAKIC8vIGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGlu
ZyB0aGUgcmVuZGVyIHRyZWUuIHRoZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBk
dW1wIHRoZSByZW5kZXIgdHJlZQogLy8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0
ZSBuYW1lc3BhY2UgdG8gYXZvaWQgbWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVu
aW50ZW50aW9uYWxseS4KQEAgLTg4LDIxICs4MSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHM7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZW0+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBWZWN0
b3I8SXRlbT4mIHYpCi17Ci0gICAgdHMgPDwgIlsiOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdHMgPDwgdltpXTsKLSAgICAgICAgaWYg
KGkgPCB2LnNpemUoKSAtIDEpCi0gICAgICAgICAgICB0cyA8PCAiLCAiOwotICAgIH0KLQotICAg
IHRzIDw8ICJdIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50
ZXI+CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBQb2ludGVyKiB0KQog
ewpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUNvbnZvbHZlTWF0cml4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFQ29u
dm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3OCwxMSArMzc3LDExIEBAIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyKiBmaWwKICAgICBpZiAoIWluLT5yZXN1bHRJ
bWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkK
KyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVj
dCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoaW4tPmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+ZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkpOwogCiAgICAgUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXk7CiAg
ICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCShyZXZpc2lvbiA2Nzg0NykKKysrIFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVDb252b2x2ZU1hdHJpeC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw5ICs3MiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhh
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCi0gICAgdm9pZCBh
cHBseShGaWx0ZXIqKTsKLSAgICB2b2lkIGR1bXAoKTsKLSAgICBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAg
IHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwg
aW50IGluZGVudGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRkVDb252b2x2ZU1hdHJpeChj
b25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5jcHAJKHJldmlzaW9uIDY3
ODQ3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJTVkdGRURp
ZmZ1c2VMaWdodGluZy5oIgogCiAjaW5jbHVkZSAiU1ZHTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpZmZ1c2VMaWdodGluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaWZmdXNlTGlnaHRp
bmcuaAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEyICs1MywxMiBAQCBw
dWJsaWM6CiAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRMaWdodFNvdXJjZShQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CiAKLSAgICB2b2lk
IGR1bXAoKTsKLSAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgZmxvYXQsIGZsb2F0LCBQYXNzUmVm
UHRyPExpZ2h0U291cmNlPik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDY3ODQ3
KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNp
bmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODksMTMgKzg4LDEzIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KEZpbHRlciog
ZmkKICAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTiB8fCBtX3lD
aGFubmVsU2VsZWN0b3IgPT0gQ0hBTk5FTF9VTktOT1dOKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxh
dGVEcmF3aW5nSW50UmVjdChpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Cisg
ICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1h
Z2VEYXRhKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBSZWZQdHI8
Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEoaW4tPnJlc3VsdEltYWdlKCktPmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAotICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoaW4y
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4yLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4g
c3JjUGl4ZWxBcnJheUIoaW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoZWZmZWN0QkRyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0
KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRURpc3BsYWNlbWVudE1hcC5oCShyZXZpc2lv
biA2Nzg0NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVEaXNwbGFjZW1l
bnRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMzggKzI5LDM5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7Ci0gICAgICAgIENIQU5O
RUxfVU5LTk9XTiA9IDAsCi0gICAgICAgIENIQU5ORUxfUiAgICAgICA9IDEsCi0gICAgICAgIENI
QU5ORUxfRyAgICAgICA9IDIsCi0gICAgICAgIENIQU5ORUxfQiAgICAgICA9IDMsCi0gICAgICAg
IENIQU5ORUxfQSAgICAgICA9IDQKLSAgICB9OwotICAgIAotICAgIGNsYXNzIEZFRGlzcGxhY2Vt
ZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxlY3RvclR5
cGUsIENoYW5uZWxTZWxlY3RvclR5cGUsIGZsb2F0KTsKLQotICAgICAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRYQ2hhbm5l
bFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOwotCi0gICAgICAgIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFlD
aGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7Ci0KLSAgICAgICAgZmxv
YXQgc2NhbGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSk7Ci0K
LSAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICAgICAgdm9pZCBkdW1wKCk7Ci0gICAg
ICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAo
Q2hhbm5lbFNlbGVjdG9yVHlwZSwgQ2hhbm5lbFNlbGVjdG9yVHlwZSwgZmxvYXQpOwotCi0gICAg
ICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwotICAgICAgICBDaGFu
bmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKLSAgICAgICAgZmxvYXQgbV9zY2Fs
ZTsKLSAgICB9OworZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKKyAgICBDSEFOTkVMX1VOS05P
V04gPSAwLAorICAgIENIQU5ORUxfUiAgICAgICA9IDEsCisgICAgQ0hBTk5FTF9HICAgICAgID0g
MiwKKyAgICBDSEFOTkVMX0IgICAgICAgPSAzLAorICAgIENIQU5ORUxfQSAgICAgICA9IDQKK307
CisKK2NsYXNzIEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFu
bmVsU2VsZWN0b3JUeXBlLCBDaGFubmVsU2VsZWN0b3JUeXBlLCBmbG9hdCk7CisKKyAgICBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldFhD
aGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CisKKyAgICBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldFlDaGFu
bmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CisKKyAgICBmbG9hdCBzY2Fs
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpOworCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIEZFRGlzcGxhY2VtZW50TWFwKENo
YW5uZWxTZWxlY3RvclR5cGUsIENoYW5uZWxTZWxlY3RvclR5cGUsIGZsb2F0KTsKKworICAgIENo
YW5uZWxTZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOworICAgIENoYW5uZWxTZWxlY3Rv
clR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUZsb29kLmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBA
CiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNjUsNyArNjQsNyBAQCB2b2lkIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9v
CiAKIHZvaWQgRkVGbG9vZDo6YXBwbHkoRmlsdGVyKikKIHsKLSAgICBHcmFwaGljc0NvbnRleHQq
IGZpbHRlckNvbnRleHQgPSBnZXRFZmZlY3RDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC04Miw3ICs4MSw3IEBAIFRleHRTdHJlYW0mIEZFRmxv
b2Q6OmV4dGVybmFsUmVwcmVzZW50YXQKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAg
ICB0cyA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cyk7Ci0gICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwgZmxvb2RDb2xvcigpIDw8
ICJcIiAiCisgICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwgZmxvb2RDb2xvcigpLm5hbWUo
KSA8PCAiXCIgIgogICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9wYWNpdHko
KSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCShyZXZpc2lvbiA2Nzg0NikKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVGbG9vZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyNiAr
MjksMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRkVGbG9vZCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgY29uc3QgZmxvYXQmKTsKLQotICAgICAg
ICBDb2xvciBmbG9vZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihj
b25zdCBDb2xvciAmKTsKLQotICAgICAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwotCi0gICAgICAgIHZvaWQgYXBwbHko
RmlsdGVyKik7Ci0gICAgICAgIHZvaWQgZHVtcCgpOwotICAgICAgICBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBjb25zdCBmbG9hdCYpOwot
Ci0gICAgICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKLSAgICAgICAgZmxvYXQgbV9mbG9vZE9wYWNp
dHk7Ci0gICAgfTsKK2NsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBj
b25zdCBmbG9hdCYpOworCisgICAgQ29sb3IgZmxvb2RDb2xvcigpIGNvbnN0OworICAgIHZvaWQg
c2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsKKworICAgIGZsb2F0IGZsb29kT3BhY2l0eSgp
IGNvbnN0OworICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmly
dHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNvbnN0IENvbG9yJiwg
Y29uc3QgZmxvYXQmKTsKKworICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKKyAgICBmbG9hdCBtX2Zs
b29kT3BhY2l0eTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZpc2lvbiA2Nzg0NykK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0j
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUwLDcgKzQ5LDcgQEAgdm9pZCBGRUltYWdlOjphcHBseShGaWx0ZXIqKQogICAgIGlmICgh
bV9pbWFnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCog
ZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgJKHJldmlzaW9uIDY3ODQ2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIwICsyOSwyMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGRUltYWdlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUltYWdlPiBj
cmVhdGUoUmVmUHRyPEltYWdlPiwgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyk7Ci0KLSAgICAgICAg
dm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICAgICAgdm9pZCBkdW1wKCk7Ci0gICAgICAgIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBGRUltYWdlKFJlZlB0cjxJbWFn
ZT4sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8pOwotCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gbV9p
bWFnZTsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0
aW87Ci0gICAgfTsKK2NsYXNzIEZFSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUltYWdlPiBjcmVhdGUoUmVmUHRyPEltYWdlPiwg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVy
Kik7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7
CisgICAgCitwcml2YXRlOgorICAgIEZFSW1hZ2UoUmVmUHRyPEltYWdlPiwgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbyk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Cit9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdo
dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMTIgKzI0Nywx
MiBAQCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmICghaW4t
PnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZ2V0RWZmZWN0Q29u
dGV4dCgpKQorICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKICAgICBDYW52YXNQaXhl
bEFycmF5KiBzcmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKIApJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgJKHJldmlzaW9uIDY3
ODQ3KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKIAog
Y2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZv
aWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZW51bSBMaWdodGluZ1R5cGUgewpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRU1lcmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuY3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MSwxMyArNTAsMTMgQEAgdm9pZCBGRU1lcmdlOjphcHBseShGaWx0
ZXIqIGZpbHRlcikKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQqIGZpbHRlckNvbnRleHQgPSBnZXRFZmZlY3RDb250ZXh0KCk7CisgICAgR3JhcGhpY3ND
b250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVy
Q29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+cmVzdWx0SW1hZ2Uo
KSwgRGV2aWNlQ29sb3JTcGFjZSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QoaW4tPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKGluLT5yZXN1bHRJbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAg
fQogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVyZ2UuaAko
cmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTWVy
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTcgKzI5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgpOwotCi0g
ICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgICAgIHZvaWQgZHVtcCgpOwotICAgICAg
ICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZFTWVyZ2UoKTsKLSAgICB9Owor
Y2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24p
IGNvbnN0OworCitwcml2YXRlOgorICAgIEZFTWVyZ2UoKTsKK307CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBo
b2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04Nyw3ICs4Niw3IEBAIHZvaWQgRkVN
b3JwaG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkKKyAg
ICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CkBAIC05OCw3ICs5Nyw3IEBAIHZvaWQgRkVNb3Jw
aG9sb2d5OjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50
UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKLSAgICBJ
bnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoaW4tPnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKICAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4
ZWxBcnJheShpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZl
Y3REcmF3aW5nUmVjdCktPmRhdGEoKSk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQo
KSk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVNb3JwaG9sb2d5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRU1vcnBo
b2xvZ3kuaAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNSArMjgsMzYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsK
LSAgICAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAotICAgICAgICBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgICA9IDEsCi0gICAgICAgIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9ESUxBVEUgID0gMgotICAgIH07Ci0KLSAgICBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOyAgCi0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9y
cGhvbG9neU9wZXJhdG9yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0TW9ycGhvbG9neU9wZXJh
dG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwotCi0gICAgICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRSYWRpdXNYKGZsb2F0KTsKLQotICAgICAgICBmbG9hdCBy
YWRpdXNZKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0UmFkaXVzWShmbG9hdCk7Ci0KLSAgICAg
ICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKLSAgICAgICAgdm9pZCBkdW1wKCk7Ci0gICAgICAgIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwotICAgICAgICAKLSAg
ICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7Ci0gICAgICAgIGZsb2F0IG1fcmFk
aXVzWDsKLSAgICAgICAgZmxvYXQgbV9yYWRpdXNZOwotICAgIH07CitlbnVtIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgeworICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKKyAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgICA9IDEsCisgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0RJTEFURSAgPSAyCit9OworCitjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+
IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsgIAorICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSk7CisKKyAgICBmbG9hdCByYWRpdXNYKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSYWRpdXNY
KGZsb2F0KTsKKworICAgIGZsb2F0IHJhZGl1c1koKSBjb25zdDsKKyAgICB2b2lkIHNldFJhZGl1
c1koZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCitwcml2YXRlOgor
ICAgIEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBm
bG9hdCByYWRpdXNZKTsKKyAgICAKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsK
KyAgICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxvYXQgbV9yYWRpdXNZOworfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTcwLDcgKzY5LDcgQEAgdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAg
ICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOworICAgIEdyYXBo
aWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZp
bHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVPZmZzZXQuaAkocmV2aXNpb24gNjc4NDcpCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFT2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDI2
ICsyOCwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGRU9mZnNldCA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCwgZmxvYXQpOwotCi0gICAgICAgIGZsb2F0IGR4
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RHgoZmxvYXQpOwotCi0gICAgICAgIGZsb2F0IGR5
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RHkoZmxvYXQpOwotCi0gICAgICAgIHZvaWQgYXBw
bHkoRmlsdGVyKik7Ci0gICAgICAgIHZvaWQgZHVtcCgpOwotICAgICAgICBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIEZFT2Zmc2V0KGZsb2F0LCBmbG9hdCk7Ci0KLSAgICAgICAg
ZmxvYXQgbV9keDsKLSAgICAgICAgZmxvYXQgbV9keTsKLSAgICB9OworY2xhc3MgRkVPZmZzZXQg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
RU9mZnNldD4gY3JlYXRlKGZsb2F0LCBmbG9hdCk7CisKKyAgICBmbG9hdCBkeCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RHgoZmxvYXQpOworCisgICAgZmxvYXQgZHkoKSBjb25zdDsKKyAgICB2b2lk
IHNldER5KGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpOworCisgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBGRU9mZnNldChmbG9hdCwgZmxvYXQpOworCisgICAgZmxvYXQgbV9keDsKKyAgICBm
bG9hdCBtX2R5OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAog
I2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZy5oIgogCiAjaW5jbHVkZSAiU1ZHTGlnaHRT
b3VyY2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFU3BlY3VsYXJMaWdodGluZy5oCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDggKzU0LDkgQEAgcHVibGljOgogICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNv
dXJjZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGlnaHRTb3VyY2UoUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4pOwogCi0gICAgdm9pZCBkdW1wKCk7Ci0gICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGR1bXAoKTsKKworICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCShyZXZpc2lvbiA2Nzg0NykKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNU
ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsNyArNTUsNyBAQCB2b2lkIEZF
VGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0g
Z2V0RWZmZWN0Q29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9
IGVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5oCShyZXZp
c2lvbiA2Nzg0NykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDE5ICsyOCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCi0gICAgY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOwotCi0gICAg
ICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7Ci0gICAgICAgIHZvaWQgZHVtcCgpOwotICAgICAgICBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oRmlsdGVyKik7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IEZFVGlsZSgpOwotICAgIH07CitjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisK
KyAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYsIGludCBpbmRlbnRpb24pIGNvbnN0OworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlciopOworICAgIAorcHJpdmF0ZToKKyAg
ICBGRVRpbGUoKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmNwcAkocmV2aXNp
b24gNjc4NDYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDYW52YXNQ
aXhlbEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIApAQCAtMzIyLDcgKzMyMSw3IEBAIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNl
OjpjYWxjdWxhdGVUdXIKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlciogZmlsdGVy
KQogewotICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQorICAgIGlmICghZWZmZWN0Q29udGV4
dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgp
LCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRVR1cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiA2Nzg0NikKKysrIFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUdXJidWxlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDkgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN0aXRjaFRpbGVzKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAotICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7
Ci0gICAgdm9pZCBkdW1wKCk7Ci0gICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CisKKyAgICB2aXJ0dWFsIFRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24p
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAy
NTY7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>