<?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>233618</bug_id>
          
          <creation_ts>2021-11-29 21:17:36 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters 16/23] Move the FilterEffect boundaries to a new class FilterEffectGeometry</short_desc>
          <delta_ts>2021-12-02 16:37:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1818595</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-29 21:17:36 -0800</bug_when>
    <thetext>The FilterEffect boundaries will be moved from FilterEffect to Filter which will keep it in a HashMap. The FilterEffect boundaries are used in calculating the primitive subregion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818885</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-30 12:43:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/85881969&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818889</commentid>
    <comment_count>2</comment_count>
      <attachid>445454</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-30 12:52:15 -0800</bug_when>
    <thetext>Created attachment 445454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819058</commentid>
    <comment_count>3</comment_count>
      <attachid>445454</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-30 19:38:39 -0800</bug_when>
    <thetext>Comment on attachment 445454
Patch

Cancelling review while Said looks into making the FilterEffectGeometry members not optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819073</commentid>
    <comment_count>4</comment_count>
      <attachid>445511</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-30 21:00:24 -0800</bug_when>
    <thetext>Created attachment 445511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819537</commentid>
    <comment_count>5</comment_count>
      <attachid>445511</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-01 19:34:52 -0800</bug_when>
    <thetext>Comment on attachment 445511
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        with the effectBoundaries. According to the sepcs[1], primitive sub region

&quot;According to the spec&quot;
&quot;subregion&quot;

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:60
&gt; +    // If there is no input effects, take the effect boundaries as unite rect.
&gt; +    if (!m_inputEffects.isEmpty()) {
&gt; +        for (auto&amp; effect : m_inputEffects) {
&gt; +            auto inputPrimitiveSubregion = effect-&gt;determineFilterPrimitiveSubregion(filter);
&gt; +            primitiveSubregion.unite(inputPrimitiveSubregion);
&gt;          }
&gt;      } else
&gt; -        subregion = filter.filterRegion();
&gt; +        primitiveSubregion = effectBoundaries;
&gt;  
&gt; -    // After calling determineFilterPrimitiveSubregion on the target effect, reset the subregion again for &lt;feTile&gt;.
&gt; +    // Don&apos;t use the input&apos;s subregion for FETile.
&gt;      if (filterType() == FilterEffect::Type::FETile)
&gt; -        subregion = filter.filterRegion();
&gt; +        primitiveSubregion = effectBoundaries;

Any reason not to adjust the condition above (`!m_inputEffects.isEmpty()`) so that we can re-use the other `primitiveSubregion = effectBoundaries` assignment above?

&gt; Source/WebCore/svg/graphics/filters/SVGFilter.h:59
&gt; +    FloatRect effectBoundaries(FilterEffect&amp;) const override;

`const FilterEffect&amp;`?

&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:59
&gt; +    auto boundaries = SVGLengthContext::resolveRectangle(&amp;element, primitiveUnits, targetBoundingBox);
&gt; +    auto effectBoundaries = filterRegion;
&gt; +
&gt; +    if (element.hasAttribute(SVGNames::xAttr))
&gt; +        effectBoundaries.setX(boundaries.x());
&gt; +
&gt; +    if (element.hasAttribute(SVGNames::yAttr))
&gt; +        effectBoundaries.setY(boundaries.y());
&gt; +
&gt; +    if (element.hasAttribute(SVGNames::widthAttr))
&gt; +        effectBoundaries.setWidth(boundaries.width());
&gt; +
&gt; +    if (element.hasAttribute(SVGNames::heightAttr))
&gt; +        effectBoundaries.setHeight(boundaries.height());

The SVGFilterPrimitiveStandardAttributes m_x/m_y/m_width/m_height member variables, which is what SVGLengthContext::resolveContext look up above, already have default values of 0%/0%/100%/100%. I don&apos;t think there is a need to check for the attributes&apos; presence on the element and do this, since the x/y/width/height values on boundaries should already have the correct values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819548</commentid>
    <comment_count>6</comment_count>
      <attachid>445511</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-01 20:18:36 -0800</bug_when>
    <thetext>Comment on attachment 445511
Patch

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

&gt;&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:59
&gt;&gt; +        effectBoundaries.setHeight(boundaries.height());
&gt; 
&gt; The SVGFilterPrimitiveStandardAttributes m_x/m_y/m_width/m_height member variables, which is what SVGLengthContext::resolveContext look up above, already have default values of 0%/0%/100%/100%. I don&apos;t think there is a need to check for the attributes&apos; presence on the element and do this, since the x/y/width/height values on boundaries should already have the correct values.

I think I was wrong here. I was mislead by https://www.w3.org/TR/filter-effects-1/#CommonAttributes stating that x/y/width/height have initial values of 0%/0%/100%/100%. But actually they have implicit values determined by the union of the input primitives&apos; regions. So I think the code you have here is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819549</commentid>
    <comment_count>7</comment_count>
      <attachid>445511</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-01 20:37:14 -0800</bug_when>
    <thetext>Comment on attachment 445511
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:60
&gt;&gt; +        primitiveSubregion = effectBoundaries;
&gt; 
&gt; Any reason not to adjust the condition above (`!m_inputEffects.isEmpty()`) so that we can re-use the other `primitiveSubregion = effectBoundaries` assignment above?

We need to call determineFilterPrimitiveSubregion() for the input of &lt;feTile&gt; if it is not going to be used. By the way in the pervious patch https://bugs.webkit.org/attachment.cgi?id=445454&amp;action=review I was doing what you are suggesting and the &lt;feTile&gt; tests failed https://ews-build.s3-us-west-2.amazonaws.com/macOS-Catalina-Release-WK2-Tests-EWS/r445454-23896/results.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819862</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-02 14:08:08 -0800</bug_when>
    <thetext>I think I was missing something important about the filterRegion(). 

1. filterRegion can be known and calculated at the time we build the SVGFilter through RenderSVGResourceFilter::applyResource(). We use the targetBoundingBox to calculate it. The defaults for its x/y/width/height are -10%, -10%, 120%, 120% from targetBoundingBox.
2. But it has to be calculated for the referenced SVGFilter after we build the CSSFilter though RenderLayerFilters::beginFilterEffect(). The filterRegion of the CSSFilter is the union of the targetBoundingBox and its outsets. The outsets of the CSSFilter is the union of the outsets of all its functions including the referenced SVGFilter. Notice that if the outsets of a FilterFunction are relative they are calculated based on the targetBoundingBox.

So we can&apos;t assume the filterRegion() is known at the time we build the SVGFilter. But we can use them when we apply the effects because at that time it has to be set for all kinds of filters: CSSFilter, SVGFilter and referenced SVGFilter.

So I am changing the patch back to the original approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819863</commentid>
    <comment_count>9</comment_count>
      <attachid>445772</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-02 14:16:41 -0800</bug_when>
    <thetext>Created attachment 445772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819936</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-02 16:37:08 -0800</bug_when>
    <thetext>Committed r286466 (244806@main): &lt;https://commits.webkit.org/244806@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445772.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445454</attachid>
            <date>2021-11-30 12:52:15 -0800</date>
            <delta_ts>2021-11-30 21:00:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233618-20211130125214.patch</filename>
            <type>text/plain</type>
            <size>28330</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWM3ZGEyZDg2MTA3NWE4
NDJkMTA3YjE1NzM0NDJlODdlNDZjNTAxZi4uOTM0Yjk5YjFhYjhlMmU2MWJkMDRiYmRkZDI2MTg4
MzgyZjRiYWE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTExLTMwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TW92ZSB0aGUgRmlsdGVyRWZmZWN0IGJvdW5kYXJpZXMgdG8gYSBuZXcgY2xhc3MgRmlsdGVyRWZm
ZWN0R2VvbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMzYxOAorICAgICAgICByZGFyOi8vODU4ODE5NjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBoYXZlIEZpbHRlciBv
d24gaXRzIGdlb21ldHJ5IGFuZCB0aGUgZ2VvbWV0cnkgb2YgdGhlCisgICAgICAgIEZpbHRlckVm
ZmVjdHMuIFNvIG1vdmUgdGhlIGJvdW5kYXJpZXMgYW5kIHRoZWlyIGZsYWdzIGZyb20gRmlsdGVy
RWZmZWN0IAorICAgICAgICB0byBhIG5ldyBjbGFzcyBjYWxsZWQgRmlsdGVyRWZmZWN0R2VvbWV0
cnkuIFNWR0ZpbHRlckJ1aWxkZXIgd2lsbCBjcmVhdGUKKyAgICAgICAgYSBnZW9tZXRyeSBmb3Ig
ZWFjaCBGaWx0ZXJFZmZlY3QgYW5kIHN0b3JlIGl0IGluIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFw
LgorICAgICAgICBFdmVudHVhbGx5IHRoaXMgbWFwIHdpbGwgYmUgbW92ZWQgdG8gU1ZHRmlsdGVy
IHdoaWNoIHdpbGwgYmUgdXNlZCBpbiB0aGUKKyAgICAgICAgdmlydHVhbCBmdW5jdGlvbiBlZmZl
Y3RHZW9tZXRyeSgpLiBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorICAgICAg
ICB3aWxsIGNhbGwgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcHJpbWl0
aXZlIHN1YnJlZ2lvbi4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmVmZmVjdEdl
b21ldHJ5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdEdlb21ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0R2Vv
bWV0cnk6OkZpbHRlckVmZmVjdEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdEdlb21ldHJ5Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdEdl
b21ldHJ5Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdEdlb21ldHJ5
Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RHZW9tZXRyeTo6
aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZWZm
ZWN0R2VvbWV0cnkgY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlTZXRGbGFnc0ZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YWtlRWZmZWN0R2VvbWV0cnlNYXApOgorCiAy
MDIxLTExLTMwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtHUFUgUHJvY2Vzc10gQ2FsY3VsYXRlIHRoZSByZXN1bHQgaW1hZ2UgcmVjdGFuZ2xlIG9mIHRo
ZSBGaWx0ZXJFZmZlY3QgaW4gZmlsdGVyIGNvb3JkaW5hdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCBiY2Y3MzNmNDcxNGU1YWQyODlmYjA4MDhmYjE4MmZhYTYzZjNhZGMwLi5mMjIzYjlkYTliNjRm
ZDNiZGNhZjI5MDc5NTJjOWExMjRhMzNiYWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MjQs
NiArMTQyNCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdEdlb21ldHJ5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODQ0ZjUyODI1ZjRmMGUwNzA1MmI2NWVmMDMyZmUyZDUyMDFkNzI2ZS4uNmQ3NDQ0ODFiZGRl
YWI5NThmYTFjZjgyMTI4MDcwYTZkN2RkNmZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMwMiw2ICsyMzAyLDcgQEAKIAkJ
NzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFE
ODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzI5NjYxOTYyNzU2MjczNjAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21l
dHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk2
NjE5NDI3NTYyNzM1MDBFN0RGOUIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMy
MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIwOTgg
LyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMTY1LDYgKzExMTY2LDcgQEAKIAkJNzI3QUZFRDExQTJFQTZB
MDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQy
MUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVY
VHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Mjk2NjE5NDI3NTYyNzM1
MDBFN0RGOUIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0R2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5n
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjU4Myw2ICsyNjU4NSw3IEBACiAJ
CQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJ
MDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTcyQTEz
QTlGMjc0QzVDQzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8sCisJCQkJNzI5
NjYxOTQyNzU2MjczNTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi8sCiAJCQkJ
NzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAogCQkJ
CTcyNjJENzU3MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCiAJCQkJ
NzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCkBAIC0zNDEy
Myw2ICszNDEyNiw3IEBACiAJCQkJNzEyQkU0ODMxRkU4NjVERDAwMjAzMUNDIC8qIEZpbGxNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVy
RWZmZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mjk2NjE5NjI3NTYyNzM2MDBFN0RGOUIgLyog
RmlsdGVyRWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyQjhCMDM1Mjc1MzQz
ODYwMEY3NTJBQSAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCOEIw
MzYyNzUzNDQxNDAwRjc1MkFBIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCmluZGV4IDFjZGUzOTM0YjU3MzQ1YzMwMGM1NGU1YjhlMjdjODdlN2RkYmQxNDcuLjQxMGY3
NDkyMmI5MWY2YjY5OWIzNjI1MWE2NGYxMDA5YWY1YTFhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMjEsNiArMjEsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCkBAIC02MCw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICBGbG9h
dFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKICAgICBG
bG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAor
ICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2Vv
bWV0cnkoRmlsdGVyRWZmZWN0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CisKICAg
ICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Q7CiAgICAgRmxvYXRSZWN0IGNsaXBUb01heEVmZmVjdFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGUzZDk0Zjk4OWRkMzQxODY2ZTMwZmZjMjFm
OGZiMjUxMzA1ZjA3YzkuLjUxZTFjNmQ0M2U4MDQzNmQ5MDZiOGYzYTQ1YjVkZjY3NGIxMTRjZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI0LDEwICsyNCw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNs
dWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTQ0
LDQzICs0MiwzNyBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYQogCiBGbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7Ci0gICAgLy8gRkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2
ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0g
ICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVm
ZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5w
dXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsr
aSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZm
ZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKLSAgICAg
ICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgLy8g
VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZm
ZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVTdWJSZWdpb24uCisgICAgRmxvYXRSZWN0IHByaW1pdGl2
ZVN1YnJlZ2lvbjsKKworICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24gZm9y
IDxmZVRpbGU+LgorICAgIGlmICghbV9pbnB1dEVmZmVjdHMuaXNFbXB0eSgpICYmIGZpbHRlclR5
cGUoKSAhPSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgeworICAgICAgICBmb3IgKGF1dG8m
IGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKSB7CisgICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0
aXZlU3VicmVnaW9uID0gZWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
ZmlsdGVyKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1p
dGl2ZVN1YnJlZ2lvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9u
ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotCi0gICAgLy8gQWZ0ZXIgY2FsbGluZyBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3QsIHJlc2V0IHRo
ZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAgIGlmIChmaWx0ZXJUeXBlKCkgPT0g
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5m
aWx0ZXJSZWdpb24oKTsKLQotICAgIGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMo
KTsKLSAgICBpZiAoaGFzWCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngo
KSk7Ci0gICAgaWYgKGhhc1koKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55
KCkpOwotICAgIGlmIChoYXNXaWR0aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91
bmRhcmllcy53aWR0aCgpKTsKLSAgICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lv
bi5zZXRIZWlnaHQoYm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBz
dWJyZWdpb247Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxl
KCkpOworICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7
CisKKyAgICBpZiAoYXV0byBnZW9tZXRyeSA9IGZpbHRlci5lZmZlY3RHZW9tZXRyeSgqdGhpcykp
IHsKKyAgICAgICAgaWYgKGF1dG8geCA9IGdlb21ldHJ5LT54KCkpCisgICAgICAgICAgICBwcmlt
aXRpdmVTdWJyZWdpb24uc2V0WCgqeCk7CisgICAgICAgIGlmIChhdXRvIHkgPSBnZW9tZXRyeS0+
eSgpKQorICAgICAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFkoKnkpOworICAgICAgICBp
ZiAoYXV0byB3aWR0aCA9IGdlb21ldHJ5LT53aWR0aCgpKQorICAgICAgICAgICAgcHJpbWl0aXZl
U3VicmVnaW9uLnNldFdpZHRoKCp3aWR0aCk7CisgICAgICAgIGlmIChhdXRvIGhlaWdodCA9IGdl
b21ldHJ5LT5oZWlnaHQoKSkKKyAgICAgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWln
aHQoKmhlaWdodCk7CisgICAgfQogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRv
IHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24g
PSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24u
c2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVy
c2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0ZU1heEVm
ZmVjdFJlY3QgPSBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmltaXRpdmVTdWJyZWdpb24pOworICAg
IGFic29sdXRlTWF4RWZmZWN0UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisKKyAg
ICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICBz
ZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlTWF4RWZmZWN0UmVjdCk7CiAKLSAgICBzZXRNYXhFZmZl
Y3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0
OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CkBAIC0xMjksNyArMTIxLDYgQEAg
Ym9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KICAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgogICAgICAgICA8PCAi
XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uCi0gICAgICAgIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRh
cmllcwogICAgICAgICA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgYWJzb2x1dGVJbWFn
ZVJlY3QKICAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0
CiAgICAgICAgIDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggZTgzYTQ0OWU1YjUxZjE0MjJmZjFhZmRhZGMxMTBlZjZmOTkw
NmQ4Zi4uNjJlNmEzN2M4ZmVkZmQ3ZDI0ZGI0NWYxYzhmZjc3MjI3YTViODJkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC0zOCw3ICszNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmls
dGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0QXBwbGllcjsKLWNsYXNzIEltYWdlQnVmZmVyOwogCiBj
bGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgpAQCAt
NzEsMjYgKzY5LDkgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBl
IHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKIAotICAgIC8vIFRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBj
b25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBt
X2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZ
OyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQot
ICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9p
ZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAg
Ym9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQg
c2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQotCiAgICAg
RmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CiAgICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KIAotICAg
IEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3Vu
ZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYg
ZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVz
OyB9Ci0gICAgCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0
IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIAogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5n
Q29sb3JTcGFjZTsgfQpAQCAtMTAyLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50
KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7
IH0KICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJik7Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICB1c2luZyBGaWx0ZXJGdW5jdGlv
bjo6RmlsdGVyRnVuY3Rpb247CiAKQEAgLTEyMywxNSArMTA0LDYgQEAgcHJpdmF0ZToKICAgICAv
LyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS4KICAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb247CiAKLSAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1YWwgU1ZH
RkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9mIHRoZQot
ICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0UmVjdCBt
X2VmZmVjdEJvdW5kYXJpZXM7Ci0gICAgCi0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwotCiAgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
IH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdEdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3ZDZh
YTdiZmIwODJhODEzZjU2ZWI3ZmQ0ZWUyMDM3MTI5ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0R2VvbWV0
cnkuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisKK2NsYXNzIEZpbHRlckVmZmVjdEdl
b21ldHJ5IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAg
ICAgID0gMSA8PCAwLAorICAgICAgICBIYXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dp
ZHRoICA9IDEgPDwgMiwKKyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAg
IEZpbHRlckVmZmVjdEdlb21ldHJ5KCkgPSBkZWZhdWx0OworCisgICAgRmlsdGVyRWZmZWN0R2Vv
bWV0cnkoY29uc3QgRmxvYXRSZWN0JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQorICAgICAgICA6IG1fYm91bmRhcmllcyhib3VuZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3Mo
ZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAg
ICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy54KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWSkpCisgICAgICAgICAg
ICByZXR1cm4gbV9ib3VuZGFyaWVzLnkoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzV2lkdGgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fYm91bmRhcmllcy53aWR0aCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAg
ICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kYXJp
ZXM7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKwordXNpbmcgRmlsdGVyRWZm
ZWN0R2VvbWV0cnlNYXAgPSBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RH
ZW9tZXRyeT47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAK
aW5kZXggOWFkMmM5ZTk1ZTA3ZDJhN2MyOTdmNTZlZmQxYmJmZmU3YzI2OTdhMC4uMDBlNGU2OTg2
NjQ1MzI5MjJkNjM3NWU3N2FkNDNiMjg1Yzc0NDk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAK
QEAgLTk0LDIyICs5NCw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0
ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0
U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewot
ICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAg
ICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAg
ICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJF
ZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsK
LX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNv
bnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oCmluZGV4IDM4ZDQ5ODYwOTMzODIxODdiYWQyMjRkMjk3ZDQyNWM5MWRl
NTM5ZDcuLjg3OGQxMTJjMDI5ODdkMWZiZjE2MTQxYWNlMmI4YjgxZjVlYjI5MmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmgKQEAgLTM2LDggKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNs
YXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVt
ZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMo
RmlsdGVyRWZmZWN0KikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVl
LCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZp
cnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggMDJlYzAyNmY0NWM2OTFmMTFiNjBjNTc5ZWFhYmQxYzUx
NGZkYWJiYS4uZjYxN2Q4YjQ2MTFmOWQ1MzdjZDQ1NTYzNTVjNGI1MGZlZjAyNTZiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBA
IC01MSw4ICs1MSw3IEBAIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0Zp
bHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1CiAgICAgYnVpbGRlci5zZXRU
YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgYnVpbGRlci5zZXRQcmlt
aXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOwogCi0gICAgYXV0byBs
YXN0RWZmZWN0ID0gYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7Ci0g
ICAgaWYgKCFsYXN0RWZmZWN0KQorICAgIGlmICghYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMo
ZmlsdGVyRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGV4cHJlc3Npb247CkBAIC02MSwxMSArNjAsMTIgQEAgUmVmUHRyPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZH
RmlsdGVyQnUKIAogICAgIEFTU0VSVCghZXhwcmVzc2lvbi5pc0VtcHR5KCkpOwogICAgIGZpbHRl
ci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKTsKLSAgICAKKwogI2lmIFVTRShD
T1JFX0lNQUdFKQogICAgIGlmICghZmlsdGVyLT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygp
KQogICAgICAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCk7CiAjZW5kaWYKKyAgICBmaWx0ZXItPnNldEVmZmVjdEdlb21ldHJ5TWFwKGJ1aWxk
ZXIudGFrZUVmZmVjdEdlb21ldHJ5TWFwKCkpOwogCiAgICAgcmV0dXJuIGZpbHRlcjsKIH0KQEAg
LTk4LDYgKzk4LDE0IEBAIGJvb2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZygpIGNvbnN0CiB9CiAjZW5kaWYKIAorc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRy
eT4gU1ZHRmlsdGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgY29uc3QK
K3sKKyAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5maW5kKGVmZmVjdCk7CisgICAg
aWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwogYm9vbCBTVkdGaWx0ZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVy
LnNvdXJjZUltYWdlKCkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDMzMjYwZDA1MTllZTBjZjFmMzEyYzkzNTA4YWVmZDk4N2I0
NTI2OGYuLjBiNDdjMzQwZjFmMzcwMDMwN2Q0NWE3NmY3MWM2YzE0Mzc2OTQ5MDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMiw2
ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCkBAIC00
MiwxOSArNDMsMjEgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCi0gICAgdm9pZCBzZXRF
eHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9u
ID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RF
ZmZlY3QoKSBjb25zdCB7IHJldHVybiAhbV9leHByZXNzaW9uLmlzRW1wdHkoKSA/IG1fZXhwcmVz
c2lvbi5sYXN0KCkgOiBudWxscHRyOyB9CiAKLSAgICBGbG9hdFNpemUgcmVzb2x2ZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOwotCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBh
cHBseSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2Rl
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgcHJpbWl0aXZlVW5pdHMpOwogCisgICAgdm9pZCBzZXRFeHByZXNzaW9uKEZpbHRlckVmZmVj
dFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92ZShleHByZXNzaW9u
KTsgfQorICAgIHZvaWQgc2V0RWZmZWN0R2VvbWV0cnlNYXAoRmlsdGVyRWZmZWN0R2VvbWV0cnlN
YXAmJiBlZmZlY3RHZW9tZXRyeU1hcCkgeyBtX2VmZmVjdEdlb21ldHJ5TWFwID0gV1RGTW92ZShl
ZmZlY3RHZW9tZXRyeU1hcCk7IH0KKwogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgorICAgIHN0
ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IGVmZmVjdEdlb21ldHJ5KEZpbHRlckVm
ZmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0U2l6ZSByZXNvbHZlZFNpemUoY29uc3Qg
RmxvYXRTaXplJikgY29uc3QgZmluYWw7CiAKICAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
NjIsNiArNjUsNyBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdC
b3g7CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzOworICAg
IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0R2VvbWV0cnlNYXA7CiAKICAgICBGaWx0
ZXJFZmZlY3RWZWN0b3IgbV9leHByZXNzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggODJk
ZTY1NjQ2ODFhMjM5YTU3OWNjNWFjMDg0ZWExMTU1NGIyZmI5Zi4uYzYyNmVhYWM2ZWZjZGM0NjE0
NjA0MzNjNTc3MTI1MzAxMDYzZjRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTU2LDYgKzU2LDI1
IEBAIHN0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVu
dChTVkdFbGVtZW50JiBlbGVtZW50KQogfQogI2VuZGlmCiAKK3N0YXRpYyBPcHRpb25TZXQ8Rmls
dGVyRWZmZWN0R2VvbWV0cnk6OkZsYWdzPiBib3VuZGFyeVNldEZsYWdzRm9yRWxlbWVudChTVkdF
bGVtZW50JiBlbGVtZW50KQoreworICAgIE9wdGlvblNldDxGaWx0ZXJFZmZlY3RHZW9tZXRyeTo6
RmxhZ3M+IGZsYWdzOworCisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4
QXR0cikpCisgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJFZmZlY3RHZW9tZXRyeTo6RmxhZ3M6Okhh
c1gpOworCisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCisg
ICAgICAgIGZsYWdzLmFkZChGaWx0ZXJFZmZlY3RHZW9tZXRyeTo6RmxhZ3M6Okhhc1kpOworCisg
ICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAg
ICBmbGFncy5hZGQoRmlsdGVyRWZmZWN0R2VvbWV0cnk6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAg
ICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQorICAgICAg
ICBmbGFncy5hZGQoRmlsdGVyRWZmZWN0R2VvbWV0cnk6OkZsYWdzOjpIYXNIZWlnaHQpOworCisg
ICAgcmV0dXJuIGZsYWdzOworfQorCiBzdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29u
c3QgRmlsdGVyRWZmZWN0KiBlZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFs
bEVmZmVjdHMpCiB7CiAgICAgYWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKQEAgLTg1LDI2ICsxMDQs
MjkgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJF
ZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHQKIAogICAgIGZvciAoYXV0byYgZWZmZWN0RWxl
bWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oZmlsdGVyRWxlbWVudCkpIHsKICAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWls
ZCgqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBjbGVhckVmZmVj
dHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVS
ZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxl
bWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCkpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIGJyZWFrOwogCiAjaWYgRU5BQkxFKERFU1RJTkFUSU9O
X0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9u
Rm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJH
QikKICAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CiAjZW5kaWYKKwogICAgICAgICBpZiAoYXV0byBy
ZW5kZXJlciA9IGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkKICAgICAgICAgICAgIGFwcGVuZEVm
ZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigpLCByZW5kZXJlcik7CiAKKyAg
ICAgICAgaWYgKGF1dG8gZmxhZ3MgPSBib3VuZGFyeVNldEZsYWdzRm9yRWxlbWVudChlZmZlY3RF
bGVtZW50KSkgeworICAgICAgICAgICAgYXV0byBlZmZlY3RCb3VuZGFyaWVzID0gU1ZHTGVuZ3Ro
Q29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBtX3ByaW1pdGl2ZVVuaXRzLCBtX3RhcmdldEJvdW5kaW5n
Qm94KTsKKyAgICAgICAgICAgIG1fZWZmZWN0R2VvbWV0cnlNYXAuYWRkKCplZmZlY3QsIEZpbHRl
ckVmZmVjdEdlb21ldHJ5KGVmZmVjdEJvdW5kYXJpZXMsIGZsYWdzKSk7CisgICAgICAgIH0KKwog
ICAgICAgICBhZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKICAgICB9CiAKLSAg
ICBpZiAoIWVmZmVjdCB8fCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMoKmVmZmVjdCkgPiBtYXhU
b3RhbE51bWJlckZpbHRlckVmZmVjdHMpCisgICAgaWYgKCFlZmZlY3QgfHwgdG90YWxOdW1iZXJG
aWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKSB7Cisg
ICAgICAgIGNsZWFyRWZmZWN0cygpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAK
ICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGNmNjY1NGQ0ODMxODIyMThh
ZGIwMDRlMDY5ZWZlZjQyOTkxZjI2YmIuLjllZGUxYzZiYzhlMDE2YTMxYzI4Y2U1MDM4ZGI3YjRm
NDRlZWI5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0R2VvbWV0
cnkuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC02OSw2ICs3MCw4IEBAIHB1YmxpYzoKICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVu
dCYpOwogICAgIGJvb2wgYnVpbGRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVz
c2lvbikgY29uc3Q7CiAKKyAgICBGaWx0ZXJFZmZlY3RHZW9tZXRyeU1hcCB0YWtlRWZmZWN0R2Vv
bWV0cnlNYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fZWZmZWN0R2VvbWV0cnlNYXApOyB9CisKIHBy
aXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQogICAgIHsKQEAgLTg0
LDggKzg3LDEwIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJF
ZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOwogCiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9s
YXN0RWZmZWN0OworCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07CisgICAgRmlsdGVyRWZmZWN0R2VvbWV0cnlN
YXAgbV9lZmZlY3RHZW9tZXRyeU1hcDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445511</attachid>
            <date>2021-11-30 21:00:24 -0800</date>
            <delta_ts>2021-12-02 14:16:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233618-20211130210023.patch</filename>
            <type>text/plain</type>
            <size>21950</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWM3ZGEyZDg2MTA3NWE4
NDJkMTA3YjE1NzM0NDJlODdlNDZjNTAxZi4uNjJmOWVhMDE1YjIzN2NhMzhkN2RmZTI4MTc5MjQz
OTIzMmZjMWJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTExLTMwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TW92ZSB0aGUgZWZmZWN0Qm91bmRhcmllcyBmcm9tIEZpbHRlckVmZmVjdCB0byBGaWx0ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzYxOAorICAg
ICAgICByZGFyOi8vODU4ODE5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBoYXZlIEZpbHRlciBvd24gaXRzIGdlb21ldHJ5
IGFuZCB0aGUgZ2VvbWV0cnkgb2YgdGhlCisgICAgICAgIEZpbHRlckVmZmVjdHMuIFNvIG1vdmUg
dGhlIGVmZmVjdCBib3VuZGFyaWVzIGZyb20gRmlsdGVyRWZmZWN0IHRvIEZpbHRlci4KKyAgICAg
ICAgU1ZHRmlsdGVyQnVpbGRlciB3aWxsIGNhbGN1bGF0ZSB0aGUgZWZmZWN0Qm91bmRhcmllcyBm
b3IgZWFjaCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgYW5kIHN0b3JlIGl0IGluIG1hcCB7IGtleTog
RmlsdGVyRWZmZWN0LCB2YWx1ZTogZWZmZWN0Qm91bmRhcmllcyB9LgorICAgICAgICBFdmVudHVh
bGx5IHRoaXMgbWFwIGlzIG1vdmVkIHRvIFNWR0ZpbHRlciB3aGljaCB3aWxsIGJlIHVzZWQgaW4g
dGhlCisgICAgICAgIHZpcnR1YWwgZnVuY3Rpb24gZWZmZWN0Qm91bmRhcmllcygpLiBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorICAgICAgICB3aWxsIGNhbGwgdGhpcyB2aXJ0
dWFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KKworICAg
ICAgICBXZSBkbyBub3QgaGF2ZSB0byBzdG9yZSB0aGUgZmxhZ3MgaGFzWCwgaGFzWSwgaGFzV2lk
dGggYW5kIGhhc0hlaWdodCBhbG9uZworICAgICAgICB3aXRoIHRoZSBlZmZlY3RCb3VuZGFyaWVz
LiBBY2NvcmRpbmcgdG8gdGhlIHNlcGNzWzFdLCBwcmltaXRpdmUgc3ViIHJlZ2lvbgorICAgICAg
ICBoYXMgdG8gYmUgY2xpcHBlZCB0byBib3RoIHRoZSBmaWx0ZXIgcmVnaW9uIGFuZCB0aGUgZmls
dGVyIHByaW1pdGl2ZQorICAgICAgICBzdWJyZWdpb24uIFNvIGVmZmVjdEJvdW5kYXJpZXMgY2Fu
IGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGZpbHRlciByZWdpb24KKyAgICAgICAgdGhlbiBjbGlw
cGVkIHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KKworICAgICAgICBJbiBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSwgZWZmZWN0Qm91bmRhcmllcyB3aWxsIGFj
dCBhcyBhIGhhcmQKKyAgICAgICAgY2xpcCBjbGlwcGluZyByZWN0YW5nbGUgb24gdGhlIGZpbHRl
ciBwcmltaXRpdmUgc3VicmVnaW9uLgorCisgICAgICAgIFdlIGNhbid0IGFwcGx5IEZsb2F0UmVj
dDo6aW50ZXJzZWN0IHdoZW4gY2xpcHBpbmcgdGhlIGVmZmVjdEJvdW5kYXJpZXMuCisgICAgICAg
IEluc3RlYWQgd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgb2YgdGhlIHgsIHksIHdpZHRo
IGFuZCBoZWlnaHQgb25seQorICAgICAgICBpZiB0aGUgYXR0cmlidXRlIGV4aXN0LgorCisgICAg
ICAgIFsxXSBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJp
bWl0aXZlU3ViUmVnaW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmFyaWF0aW9uQXhlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6ZWZmZWN0Qm91bmRhcmllcyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpo
YXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0
SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFz
V2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWln
aHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZl
Y3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRl
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXI6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0Qm91
bmRhcmllc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRG
aWx0ZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6dGFrZUVm
ZmVjdEJvdW5kYXJpZXNNYXApOgorCiAyMDIxLTExLTMwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQ2FsY3VsYXRlIHRoZSByZXN1
bHQgaW1hZ2UgcmVjdGFuZ2xlIG9mIHRoZSBGaWx0ZXJFZmZlY3QgaW4gZmlsdGVyIGNvb3JkaW5h
dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAppbmRleCAxY2RlMzkzNGI1NzM0NWMzMDBjNTRlNWI4ZTI3Yzg3ZTdkZGJkMTQ3Li40Nzg5
YjA2ZDczNTQ5MGU3NGZlMTc5ZDcwYTlmMGQ2ZmI0YmMzOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBG
aWx0ZXJJbWFnZTsKIAogY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKQEAg
LTYwLDYgKzYxLDggQEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBzY2FsZWRCeUZpbHRlclNj
YWxlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCisgICAgdmlydHVhbCBGbG9hdFJlY3QgZWZm
ZWN0Qm91bmRhcmllcyhGaWx0ZXJFZmZlY3QmKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQorCiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0OwogICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhFZmZlY3RSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBlM2Q5NGY5ODlkZDM0MTg2
NmUzMGZmYzIxZjhmYjI1MTMwNWYwN2M5Li45ZWUzOTI3ZmNhMDlkNTE2Yzg0OTE2YzlhZGVkYzk1
Y2MxOTZkNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCwxMCArMjQsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVy
LmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CkBAIC00NCw0MyArNDIsMzQgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWEKIAogRmxvYXRS
ZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewotICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29k
IGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0
ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJl
ck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJl
Z2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
ZmlsdGVyKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRF
ZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24g
PSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRl
cik7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24p
OworICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIv
ZmlsdGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVj
dCBlZmZlY3RCb3VuZGFyaWVzID0gZmlsdGVyLmVmZmVjdEJvdW5kYXJpZXMoKnRoaXMpOworICAg
IEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBp
bnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBlZmZlY3QgYm91bmRhcmllcyBhcyB1bml0ZSByZWN0Lgor
ICAgIGlmICghbV9pbnB1dEVmZmVjdHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYg
ZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpIHsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRp
dmVTdWJyZWdpb24gPSBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihm
aWx0ZXIpOworICAgICAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0
aXZlU3VicmVnaW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBzdWJyZWdpb24g
PSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CisgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGVm
ZmVjdEJvdW5kYXJpZXM7CiAKLSAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lv
biBhZ2FpbiBmb3IgPGZlVGlsZT4uCisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIHN1YnJl
Z2lvbiBmb3IgRkVUaWxlLgogICAgIGlmIChmaWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsK
KyAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uID0gZWZmZWN0Qm91bmRhcmllczsKIAotICAgIGF1
dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQotICAg
ICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkKLSAg
ICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0aCgp
KQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAgICBp
ZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmllcy5o
ZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsK
LQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBzdWJyZWdpb247Ci0gICAgYWJzb2x1dGVT
dWJyZWdpb24uc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIC8vIENsaXAgdGhlIHBy
aW1pdGl2ZSBzdWJyZWdpb24gdG8gdGhlIGVmZmVjdCBib3VuZGFyaWVzLgorICAgIHByaW1pdGl2
ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoZWZmZWN0Qm91bmRhcmllcyk7CiAKICAgICAvLyBDbGlwIGV2
ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0
ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0
ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYWJz
b2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKKyAg
ICBhdXRvIGFic29sdXRlTWF4RWZmZWN0UmVjdCA9IGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1p
dGl2ZVN1YnJlZ2lvbik7CisgICAgYWJzb2x1dGVNYXhFZmZlY3RSZWN0LnNjYWxlKGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKKworICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRp
dmVTdWJyZWdpb24pOworICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVNYXhFZmZlY3RSZWN0
KTsKIAotICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwotICAgIHJldHVy
biBzdWJyZWdpb247CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAogRmlsdGVy
RWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QK
QEAgLTEyOSw3ICsxMTgsNiBAQCBib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQogICAgICAgICA8
PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBw
bHkoKToiCiAgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9m
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24KLSAgICAgICAgPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVz
ICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzCiAgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJl
Y3QgIiA8PCBhYnNvbHV0ZUltYWdlUmVjdAogICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3Qg
IiA8PCBtX21heEVmZmVjdFJlY3QKICAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBlODNhNDQ5ZTViNTFmMTQy
MmZmMWFmZGFkYzExMGVmNmY5OTA2ZDhmLi42MmU2YTM3YzhmZWRmZDdkMjRkYjQ1ZjFjOGZmNzcy
MjdhNWI4MmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJG
aWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSAiRmls
dGVySW1hZ2VWZWN0b3IuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3RBcHBsaWVyOwotY2xh
c3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6CkBAIC03MSwyNiArNjksOSBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKICAgICB2aXJ0
dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQp
IGNvbnN0OwogCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVjaWZp
YyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAg
IC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0
LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQgc2V0
SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1koKSBj
b25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBt
X2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNXaWR0
aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
SGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdo
dCA9IHZhbHVlOyB9Ci0KICAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KICAgICB2b2lkIHNl
dEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbjsgfQogCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7
IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJp
ZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmll
cyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCiAgICAg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CkBAIC0xMDIsNyArODMsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJF
ZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9v
cGVyYXRpbmdDb2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKLSAgICAKKwogcHJvdGVjdGVkOgogICAg
IHVzaW5nIEZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbjsKIApAQCAtMTIzLDE1ICsxMDQs
NiBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBt
b3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgogICAgIEZsb2F0UmVjdCBt
X2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWln
aHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRo
ZSBzdWJyZWdpb24gb2YgdGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0
ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAgICAKLSAgICBib29sIG1f
aGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KICAg
ICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXgg
OWFkMmM5ZTk1ZTA3ZDJhN2MyOTdmNTZlZmQxYmJmZmU3YzI2OTdhMC4uMDBlNGU2OTg2NjQ1MzI5
MjJkNjM3NWU3N2FkNDNiMjg1Yzc0NDk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTk0
LDIyICs5NCw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpj
aGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFT
U0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQog
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCmluZGV4IDM4ZDQ5ODYwOTMzODIxODdiYWQyMjRkMjk3ZDQyNWM5MWRlNTM5ZDcu
Ljg3OGQxMTJjMDI5ODdkMWZiZjE2MTQxYWNlMmI4YjgxZjVlYjI5MmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKQEAgLTM2LDggKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVy
RWZmZWN0KikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0
aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHAKaW5kZXggMDJlYzAyNmY0NWM2OTFmMTFiNjBjNTc5ZWFhYmQxYzUxNGZkYWJi
YS4uM2Y2MTM1YTgxNTVhNzAyYzFlM2M4ODMwYTAxNDQxNTdlMzRkZTQ0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC00OCwx
MSArNDgsMTEgQEAgUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVy
RWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnUKICAgICBlbHNlCiAgICAgICAgIGJ1
aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKIAorICAgIGJ1
aWxkZXIuc2V0RmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbik7CiAgICAgYnVpbGRlci5zZXRUYXJn
ZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgYnVpbGRlci5zZXRQcmltaXRp
dmVVbml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOwogCi0gICAgYXV0byBsYXN0
RWZmZWN0ID0gYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7Ci0gICAg
aWYgKCFsYXN0RWZmZWN0KQorICAgIGlmICghYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmls
dGVyRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRmlsdGVyRWZmZWN0
VmVjdG9yIGV4cHJlc3Npb247CkBAIC02MSw2ICs2MSw4IEBAIFJlZlB0cjxTVkdGaWx0ZXI+IFNW
R0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRl
ckJ1CiAKICAgICBBU1NFUlQoIWV4cHJlc3Npb24uaXNFbXB0eSgpKTsKICAgICBmaWx0ZXItPnNl
dEV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSk7CisKKyAgICBmaWx0ZXItPnNldEVmZmVj
dEJvdW5kYXJpZXNNYXAoYnVpbGRlci50YWtlRWZmZWN0Qm91bmRhcmllc01hcCgpKTsKICAgICAK
ICNpZiBVU0UoQ09SRV9JTUFHRSkKICAgICBpZiAoIWZpbHRlci0+c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoKSkKQEAgLTk4LDYgKzEwMCwxNCBAQCBib29sIFNWR0ZpbHRlcjo6c3VwcG9ydHND
b3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAogfQogI2VuZGlmCiAKK0Zsb2F0UmVjdCBTVkdGaWx0
ZXI6OmVmZmVjdEJvdW5kYXJpZXMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpIGNvbnN0Cit7CisgICAg
YXV0byBpdCA9IG1fZWZmZWN0Qm91bmRhcmllc01hcC5maW5kKGVmZmVjdCk7CisgICAgaWYgKGl0
ICE9IG1fZWZmZWN0Qm91bmRhcmllc01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKKyAgICByZXR1cm4gZmlsdGVyUmVnaW9uKCk7Cit9CisKIGJvb2wgU1ZHRmlsdGVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBzZXRTb3VyY2VJbWFnZSh7IGZpbHRlci5z
b3VyY2VJbWFnZSgpIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaAppbmRleCAzMzI2MGQwNTE5ZWUwY2YxZjMxMmM5MzUwOGFlZmQ5ODdiNDUy
NjhmLi4wOTgxNmNjNDZmMmY3MjEyNGVhOTBhNzM3ZmZjNDU5MWNkY2MzNGRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtNDIsMTkg
KzQyLDIyIEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAotICAgIHZvaWQgc2V0RXhwcmVz
c2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdU
Rk1vdmUoZXhwcmVzc2lvbik7IH0KICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Npb24u
bGFzdCgpIDogbnVsbHB0cjsgfQogCi0gICAgRmxvYXRTaXplIHJlc29sdmVkU2l6ZShjb25zdCBG
bG9hdFNpemUmKSBjb25zdCBmaW5hbDsKLQogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHko
KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHBy
aW1pdGl2ZVVuaXRzKTsKIAorICAgIC8vIEZJWE1FOiBNZXJnZSB0aGUgZWZmZWN0Qm91bmRhcmll
cyBpbiB0aGUgZXhwcmVzc2lvbiBub2RlLgorICAgIHZvaWQgc2V0RXhwcmVzc2lvbihGaWx0ZXJF
ZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdURk1vdmUoZXhwcmVz
c2lvbik7IH0KKyAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXNNYXAoSGFzaE1hcDxSZWY8Rmls
dGVyRWZmZWN0PiwgRmxvYXRSZWN0PiYmIGVmZmVjdEJvdW5kYXJpZXNNYXApIHsgbV9lZmZlY3RC
b3VuZGFyaWVzTWFwID0gV1RGTW92ZShlZmZlY3RCb3VuZGFyaWVzTWFwKTsgfQorCiAjaWYgVVNF
KENPUkVfSU1BR0UpCiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0
IG92ZXJyaWRlOwogI2VuZGlmCisgICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoRmlsdGVy
RWZmZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRTaXplIHJlc29sdmVkU2l6ZShjb25z
dCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CkBA
IC02Myw3ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdC
b3g7CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzOwogCisg
ICAgLy8gRklYTUU6IE1ha2UgbV9leHByZXNzaW9uIGEgVmVjdG9yIG9mIHRoZSBGaWx0ZXJFZmZl
Y3QgYW5kIHRoZSBlZmZlY3RCb3VuZGFyaWVzLgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2V4
cHJlc3Npb247CisgICAgSGFzaE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgRmxvYXRSZWN0PiBtX2Vm
ZmVjdEJvdW5kYXJpZXNNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwCmluZGV4IDgyZGU2NTY0NjgxYTIzOWE1NzljYzVhYzA4NGVhMTE1NTRiMmZiOWYuLmMx
MmUwNGFjYWFjNDIzMjdjZmIwMWZjMWI1MTk2YWY2MDI5ODk2MjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MSwyNiBAQCB2
b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVj
dD4gc291cmNlR3JhcGhpYykKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCitzdGF0aWMg
RmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXNGb3JFbGVtZW50KFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcyYgZWxlbWVudCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJpbWl0aXZlVW5pdHMpCit7CisgICAgYXV0byBib3VuZGFyaWVzID0gU1ZHTGVuZ3Ro
Q29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZSgmZWxlbWVudCwgcHJpbWl0aXZlVW5pdHMsIHRhcmdl
dEJvdW5kaW5nQm94KTsKKyAgICBhdXRvIGVmZmVjdEJvdW5kYXJpZXMgPSBmaWx0ZXJSZWdpb247
CisKKyAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAg
ICAgZWZmZWN0Qm91bmRhcmllcy5zZXRYKGJvdW5kYXJpZXMueCgpKTsKKworICAgIGlmIChlbGVt
ZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICBlZmZlY3RCb3VuZGFy
aWVzLnNldFkoYm91bmRhcmllcy55KCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICBlZmZlY3RCb3VuZGFyaWVzLnNldFdpZHRo
KGJvdW5kYXJpZXMud2lkdGgoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmhlaWdodEF0dHIpKQorICAgICAgICBlZmZlY3RCb3VuZGFyaWVzLnNldEhlaWdodChi
b3VuZGFyaWVzLmhlaWdodCgpKTsKKworICAgIHJldHVybiBlZmZlY3RCb3VuZGFyaWVzOworfQor
CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogc3RhdGlj
IENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1l
bnQmIGVsZW1lbnQpCiB7CkBAIC04NSwyNiArMTA2LDI3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBm
aWx0CiAKICAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CiAgICAg
ICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOwotICAgICAgICBpZiAoIWVm
ZmVjdCkgewotICAgICAgICAgICAgY2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhD
b250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdC
b3gpKTsKKyAgICAgICAgYXV0byBlZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllc0Zv
ckVsZW1lbnQoZWZmZWN0RWxlbWVudCwgbV9maWx0ZXJSZWdpb24sIG1fdGFyZ2V0Qm91bmRpbmdC
b3gsIG1fcHJpbWl0aXZlVW5pdHMpOworICAgICAgICBtX2VmZmVjdEJvdW5kYXJpZXNNYXAuYWRk
KCplZmZlY3QsIGVmZmVjdEJvdW5kYXJpZXMpOwogCiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NP
TE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9y
RWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikK
ICAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CiAjZW5kaWYKKwogICAgICAgICBpZiAoYXV0byByZW5k
ZXJlciA9IGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkKICAgICAgICAgICAgIGFwcGVuZEVmZmVj
dFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigpLCByZW5kZXJlcik7CiAKICAgICAg
ICAgYWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7CiAgICAgfQogCi0gICAgaWYg
KCFlZmZlY3QgfHwgdG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxO
dW1iZXJGaWx0ZXJFZmZlY3RzKQorICAgIGlmICghZWZmZWN0IHx8IHRvdGFsTnVtYmVyRmlsdGVy
RWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykgeworICAgICAg
ICBjbGVhckVmZmVjdHMoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAgICAg
cmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjZjY2NTRkNDgzMTgyMjE4YWRiMDA0
ZTA2OWVmZWY0Mjk5MWYyNmJiLi5mNzYwZTM5MDZjMjY2ODA1NzhjYzU4N2EyYzJmZjcwODhmMjQz
NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM5LDYgKzQwLDggQEAgcHVibGljOgogCiAgICAgU1ZHRmlsdGVyQnVpbGRl
cigpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVj
dCYgcikgeyBtX2ZpbHRlclJlZ2lvbiA9IHI7IH0KKyAgICAKICAgICB2b2lkIHNldFRhcmdldEJv
dW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsg
fQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0Qm91bmRpbmdCb3g7IH0KICAgICAKQEAgLTY5LDYgKzcyLDggQEAgcHVibGljOgogICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7
CiAgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9u
KSBjb25zdDsKIAorICAgIEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIEZsb2F0UmVjdD4gdGFr
ZUVmZmVjdEJvdW5kYXJpZXNNYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fZWZmZWN0Qm91bmRhcmll
c01hcCk7IH0KKwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygp
CiAgICAgewpAQCAtODQsOCArODksMTEgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFJlbmRlck9i
amVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7CiAKICAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CisKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247
CiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X1VTRVJTUEFDRU9OVVNFIH07CisgICAgSGFzaE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgRmxvYXRS
ZWN0PiBtX2VmZmVjdEJvdW5kYXJpZXNNYXA7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445772</attachid>
            <date>2021-12-02 14:16:41 -0800</date>
            <delta_ts>2021-12-02 16:37:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233618-20211202141640.patch</filename>
            <type>text/plain</type>
            <size>29000</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmE0ZmFjZWFiYTZhODcy
NjE2NTU2YWE5ZjJkNjJkOTMzYWVmY2QwZS4uZDZlMjY1MTNjZTlmZGUyNzA0NTc0MjExNWU3ZDJh
ZWI5ZDdmNTU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTEyLTAyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TW92ZSB0aGUgRmlsdGVyRWZmZWN0IGJvdW5kYXJpZXMgdG8gYSBuZXcgY2xhc3MgRmlsdGVyRWZm
ZWN0R2VvbWV0cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMzYxOAorICAgICAgICByZGFyOi8vODU4ODE5NjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBoYXZlIEZpbHRlciBv
d24gaXRzIGdlb21ldHJ5IGFuZCB0aGUgZ2VvbWV0cnkgb2YgdGhlCisgICAgICAgIEZpbHRlckVm
ZmVjdHMuIFNvIG1vdmUgdGhlIGJvdW5kYXJpZXMgYW5kIHRoZWlyIGZsYWdzIGZyb20gRmlsdGVy
RWZmZWN0IAorICAgICAgICB0byBhIG5ldyBjbGFzcyBjYWxsZWQgRmlsdGVyRWZmZWN0R2VvbWV0
cnkuIAorCisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIgd2lsbCBjYWxjdWxhdGUgdGhlIEZpbHRl
ckVmZmVjdEdlb21ldHJ5IGZvciBlYWNoIEZpbHRlckVmZmVjdAorICAgICAgICBhbmQgc3RvcmUg
aXQgaW4gbWFwIHsga2V5OiBGaWx0ZXJFZmZlY3QsIHZhbHVlOiBGaWx0ZXJFZmZlY3RHZW9tZXRy
eSB9LgorICAgICAgICBFdmVudHVhbGx5IHRoaXMgbWFwIGlzIG1vdmVkIHRvIFNWR0ZpbHRlciB3
aGljaCB3aWxsIGJlIHVzZWQgaW4gdGhlCisgICAgICAgIHZpcnR1YWwgZnVuY3Rpb24gZWZmZWN0
R2VvbWV0cnkoKS4gZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKKyAgICAgICAg
d2lsbCBjYWxsIHRoaXMgdmlydHVhbCBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHByaW1pdGl2
ZSBzdWJyZWdpb24uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjplZmZlY3RHZW9t
ZXRyeSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3RHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdEdlb21l
dHJ5OjpGaWx0ZXJFZmZlY3RHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3RHZW9tZXRyeTo6eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RHZW9t
ZXRyeTo6eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RHZW9tZXRyeTo6
d2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0R2VvbWV0cnk6Omhl
aWdodCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmVmZmVj
dEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5U2V0RmxhZ3NGb3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6dGFrZUVmZmVjdEdlb21ldHJ5TWFwKToKKwogMjAy
MS0xMi0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIGh0bWwv
c2VtYW50aWNzL2Zvcm1zL2NvbnN0cmFpbnRzL2lucHV0LW51bWJlci12YWxpZGl0eS1keW5hbWlj
LXZhbHVlLW5vLWNoYW5nZS5odG1sIFdQVCB0ZXN0IGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDk1MTk5Y2NkODM2ODZmMWI5ZDliZmVhYzZiNjA5NTNiNDBjMWI3OWUuLmUxZWM2NGFi
YzNiYWZjMjgwMGJlYTNjMzNiMDQ1MjRiMmI5MGM0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAt
MTU1Niw2ICsxNTU2LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaAogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0R2VvbWV0cnkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRnVuY3Rpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjOGMxZTM3ZmQ0NDViYWRiNTRlNGNlYzM4NjQ3YWE2OTI4OGU0ZWFlLi5kZGYwODc0
YTFmYTQwNzc5ZjI3N2RmNTAyNGMzODVhM2VjMGUxMGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzAxLDYgKzIzMDEsNyBA
QAogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIy
MzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3
RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYx
REM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNkNERTIwMjc1OTcz
NTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBBNTAwRTdERjlCIC8qIEZp
bHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMTc1LDYgKzExMTc2LDcgQEAKIAkJNzI3QUZF
RDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Mjk2NjFB
MjI3NTk2MEE1MDBFN0RGOUIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyRWZmZWN0R2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjYwMyw2ICsyNjYwNSw3IEBACiAJCQkJMDhDOTI1
MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgw
RkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTcyQTEzQTlGMjc0QzVD
QzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8sCisJCQkJNzI5NjYxQTIyNzU5
NjBBNTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi8sCiAJCQkJNzIxNEI5Qjcy
NzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAogCQkJCTcyNjJENzU3
MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCiAJCQkJNzI2MkQ3NTYy
NzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCkBAIC0zNDE0Nyw2ICszNDE1
MCw3IEBACiAJCQkJNzEyQkU0ODMxRkU4NjVERDAwMjAzMUNDIC8qIEZpbGxNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVyRWZm
ZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyQjhCMDM1Mjc1MzQzODYwMEY3NTJB
QSAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCOEIwMzYyNzUzNDQx
NDAwRjc1MkFBIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4
IDFjZGUzOTM0YjU3MzQ1YzMwMGM1NGU1YjhlMjdjODdlN2RkYmQxNDcuLmMzOTE5OTYzNzg0MzA3
YWEyMWM0YzQwMDE1NzViODdkYTNiYTFlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAi
RmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCkBAIC0yOSw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRmlsdGVyRWZmZWN0OwogY2xhc3MgRmlsdGVySW1hZ2U7CiAKIGNsYXNzIEZpbHRlciA6
IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CkBAIC02MCw2ICs2Miw4IEBAIHB1YmxpYzoKICAgICBG
bG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKICAg
ICBGbG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0
R2VvbWV0cnkoRmlsdGVyRWZmZWN0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CisK
ICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Q7CiAgICAgRmxvYXRSZWN0IGNsaXBUb01heEVmZmVjdFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGUzZDk0Zjk4OWRkMzQxODY2ZTMwZmZj
MjFmOGZiMjUxMzA1ZjA3YzkuLjZlMTA5MjQ5NmVmODQ1YjZiODcyY2IxMDZjMGRkMTYwODlmNTdh
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI0LDEwICsyNCw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNp
bmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAg
LTQ0LDQzICs0Miw0MiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYQogCiBGbG9hdFJlY3QgRmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiB7Ci0gICAgLy8gRkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3Qg
aGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3Qu
Ci0gICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1
dEVmZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0g
aW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7
ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0
RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKLSAg
ICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXIt
ZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVTdWJSZWdpb24uCisgICAgRmxvYXRSZWN0IHByaW1p
dGl2ZVN1YnJlZ2lvbjsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIGlucHV0IGVmZmVjdHMsIHRh
a2UgdGhlIGVmZmVjdCBib3VuZGFyaWVzIGFzIHVuaXRlIHJlY3QuCisgICAgaWYgKCFtX2lucHV0
RWZmZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0
RWZmZWN0cykgeworICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGVm
ZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisgICAgICAg
ICAgICBwcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwog
ICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJS
ZWdpb24oKTsKKyAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lv
bigpOwogCi0gICAgLy8gQWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9y
IDxmZVRpbGU+LgorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24gZm9yIEZF
VGlsZS4KICAgICBpZiAoZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxl
KQotICAgICAgICBzdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0KLSAgICBhdXRv
IGJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAgICAg
ICAgc3VicmVnaW9uLnNldFgoYm91bmRhcmllcy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0gICAg
ICAgIHN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJpZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgoKSkK
LSAgICAgICAgc3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAgaWYg
KGhhc0hlaWdodCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMuaGVp
Z2h0KCkpOwotCi0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7Ci0K
LSAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gc3VicmVnaW9uOwotICAgIGFic29sdXRlU3Vi
cmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICAgICAgcHJpbWl0aXZlU3Vi
cmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOworICAgIAorICAgIC8vIENsaXAgdGhlIHBy
aW1pdGl2ZSBzdWJyZWdpb24gdG8gdGhlIGVmZmVjdCBnZW9tZXRyeS4KKyAgICBpZiAoYXV0byBn
ZW9tZXRyeSA9IGZpbHRlci5lZmZlY3RHZW9tZXRyeSgqdGhpcykpIHsKKyAgICAgICAgaWYgKGF1
dG8geCA9IGdlb21ldHJ5LT54KCkpCisgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0
WCgqeCk7CisgICAgICAgIGlmIChhdXRvIHkgPSBnZW9tZXRyeS0+eSgpKQorICAgICAgICAgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnNldFkoKnkpOworICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGdl
b21ldHJ5LT53aWR0aCgpKQorICAgICAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRo
KCp3aWR0aCk7CisgICAgICAgIGlmIChhdXRvIGhlaWdodCA9IGdlb21ldHJ5LT5oZWlnaHQoKSkK
KyAgICAgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQoKmhlaWdodCk7CisgICAg
fQogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9u
LgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVn
aW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxl
ZEZpbHRlclJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0ZU1heEVmZmVjdFJlY3QgPSBmaWx0ZXIu
bWF4RWZmZWN0UmVjdChwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGFic29sdXRlTWF4RWZmZWN0
UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisKKyAgICBzZXRGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICBzZXRNYXhFZmZlY3RSZWN0KGFi
c29sdXRlTWF4RWZmZWN0UmVjdCk7CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3Vi
cmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHJldHVybiBwcmltaXRpdmVTdWJy
ZWdpb247CiB9CiAKIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNp
Z25lZCBudW1iZXIpIGNvbnN0CkBAIC0xMjksNyArMTI2LDYgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6
OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0KICAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgogICAgICAgICA8PCAiXG4gIGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uCi0gICAgICAgIDw8ICJc
biAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcwogICAgICAgICA8PCAi
XG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgYWJzb2x1dGVJbWFnZVJlY3QKICAgICAgICAgPDwg
IlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0CiAgICAgICAgIDw8ICJcbiAg
ZmlsdGVyIHNjYWxlICIgPDwgZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggZTgzYTQ0OWU1YjUxZjE0MjJmZjFhZmRhZGMxMTBlZjZmOTkwNmQ4Zi4uNjJlNmEzN2M4ZmVk
ZmQ3ZDI0ZGI0NWYxYzhmZjc3MjI3YTViODJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yNyw3ICsy
Nyw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zOCw3ICsz
Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVy
RWZmZWN0QXBwbGllcjsKLWNsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBGaWx0ZXJFZmZlY3Qg
OiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgpAQCAtNzEsMjYgKzY5LDkgQEAgcHVi
bGljOgogICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVi
dWdnaW5nIH07CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRp
b25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKIAotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hh
c1g7IH0KLSAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQot
Ci0gICAgYm9vbCBoYXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRI
YXNZKGJvb2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29s
IHZhbHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wg
dmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQotCiAgICAgRmxvYXRSZWN0IGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOyB9CiAgICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KIAotICAgIEZsb2F0UmVjdCBlZmZlY3RC
b3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9p
ZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykg
eyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCiAgICAgdmly
dHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKIAogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQpAQCAt
MTAyLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KICAgICB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0gICAg
CisKIHByb3RlY3RlZDoKICAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247
CiAKQEAgLTEyMywxNSArMTA0LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIFNWRyBzcGVj
aWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS4KICAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICAvLyB4
LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVl
ZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9mIHRoZQotICAgIC8vIGZpbHRlciBwcmlt
aXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7
Ci0gICAgCi0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFs
c2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWln
aHQgeyBmYWxzZSB9OwotCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dEdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3ZDZhYTdiZmIwODJhODEzZjU2ZWI3
ZmQ0ZWUyMDM3MTI5ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0R2VvbWV0cnkuaApAQCAtMCwwICsxLDg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXJFZmZlY3Q7CisKK2NsYXNzIEZpbHRlckVmZmVjdEdlb21ldHJ5IHsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAorICAg
ICAgICBIYXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwKKyAg
ICAgICAgSGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAgIEZpbHRlckVmZmVjdEdlb21l
dHJ5KCkgPSBkZWZhdWx0OworCisgICAgRmlsdGVyRWZmZWN0R2VvbWV0cnkoY29uc3QgRmxvYXRS
ZWN0JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91
bmRhcmllcyhib3VuZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAg
IH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1f
Ym91bmRhcmllcy54KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9m
bGFncy5jb250YWlucyhGbGFnczo6SGFzWSkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFy
aWVzLnkoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFn
cy5jb250YWlucyhGbGFnczo6SGFzV2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRh
cmllcy53aWR0aCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kYXJpZXM7CisgICAgT3B0aW9uU2V0
PEZsYWdzPiBtX2ZsYWdzOworfTsKKwordXNpbmcgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgPSBI
YXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RHZW9tZXRyeT47CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXggOWFkMmM5ZTk1ZTA3
ZDJhN2MyOTdmNTZlZmQxYmJmZmU3YzI2OTdhMC4uMDBlNGU2OTg2NjQ1MzI5MjJkNjM3NWU3N2Fk
NDNiMjg1Yzc0NDk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTk0LDIyICs5NCw2IEBA
IHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5n
ZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJF
ZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+
c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0g
ICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRo
KHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAg
ICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmlu
ZGV4IDM4ZDQ5ODYwOTMzODIxODdiYWQyMjRkMjk3ZDQyNWM5MWRlNTM5ZDcuLjg3OGQxMTJjMDI5
ODdkMWZiZjE2MTQxYWNlMmI4YjgxZjVlYjI5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTM2
LDggKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk7CiBw
dWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KikgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVl
IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
aW5kZXggMDJlYzAyNmY0NWM2OTFmMTFiNjBjNTc5ZWFhYmQxYzUxNGZkYWJiYS4uZjM5ZmMyNmRk
OTA2MmRhYzFhODc4YjkxMzNmMjU4YTIxYjU5MmViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC01MSw4ICs1MSw3IEBAIFJl
ZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRl
ckVsZW1lbnQsIFNWR0ZpbHRlckJ1CiAgICAgYnVpbGRlci5zZXRUYXJnZXRCb3VuZGluZ0JveCh0
YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgYnVpbGRlci5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJF
bGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOwogCi0gICAgYXV0byBsYXN0RWZmZWN0ID0gYnVpbGRl
ci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0
KQorICAgIGlmICghYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGV4cHJlc3Np
b247CkBAIC02MSw3ICs2MCw5IEBAIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRl
KFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1CiAKICAgICBBU1NF
UlQoIWV4cHJlc3Npb24uaXNFbXB0eSgpKTsKICAgICBmaWx0ZXItPnNldEV4cHJlc3Npb24oV1RG
TW92ZShleHByZXNzaW9uKSk7Ci0gICAgCisKKyAgICBmaWx0ZXItPnNldEVmZmVjdEdlb21ldHJ5
TWFwKGJ1aWxkZXIudGFrZUVmZmVjdEdlb21ldHJ5TWFwKCkpOworCiAjaWYgVVNFKENPUkVfSU1B
R0UpCiAgICAgaWYgKCFmaWx0ZXItPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCiAgICAg
ICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKQEAgLTk4LDYgKzk5LDE0IEBAIGJvb2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAorc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RH
ZW9tZXRyeT4gU1ZHRmlsdGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkg
Y29uc3QKK3sKKyAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5maW5kKGVmZmVjdCk7
CisgICAgaWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdC0+dmFsdWU7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwogYm9vbCBTVkdGaWx0
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHNldFNvdXJjZUltYWdlKHsg
ZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDMzMjYwZDA1MTllZTBjZjFmMzEyYzkzNTA4YWVm
ZDk4N2I0NTI2OGYuLjY1YjEwYzljNjg5YTA3YzFiYWNmOWQ4NzkxOTZjNjc0NDg3OTE0MTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBA
IC00MiwxOSArNDIsMjIgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCi0gICAgdm9pZCBz
ZXRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNz
aW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxh
c3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiAhbV9leHByZXNzaW9uLmlzRW1wdHkoKSA/IG1fZXhw
cmVzc2lvbi5sYXN0KCkgOiBudWxscHRyOyB9CiAKLSAgICBGbG9hdFNpemUgcmVzb2x2ZWRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOwotCiAgICAgUmVmUHRyPEZpbHRlckltYWdl
PiBhcHBseSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdN
b2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogCisgICAgLy8gRklYTUU6IE1lcmdlIHRoZSBlZmZlY3RC
b3VuZGFyaWVzIGluIHRoZSBleHByZXNzaW9uIG5vZGUuCisgICAgdm9pZCBzZXRFeHByZXNzaW9u
KEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92
ZShleHByZXNzaW9uKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0R2VvbWV0cnlNYXAoRmlsdGVyRWZm
ZWN0R2VvbWV0cnlNYXAmJiBlZmZlY3RHZW9tZXRyeU1hcCkgeyBtX2VmZmVjdEdlb21ldHJ5TWFw
ID0gV1RGTW92ZShlZmZlY3RHZW9tZXRyeU1hcCk7IH0KKwogI2lmIFVTRShDT1JFX0lNQUdFKQog
ICAgIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKICNl
bmRpZgorICAgIHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IGVmZmVjdEdlb21l
dHJ5KEZpbHRlckVmZmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0U2l6ZSByZXNvbHZl
ZFNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3QgZmluYWw7CiAKICAgICBib29sIGFwcGx5KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtNjMsNyArNjYsOSBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3Rhcmdl
dEJvdW5kaW5nQm94OwogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVV
bml0czsKIAorICAgIC8vIEZJWE1FOiBNYWtlIG1fZXhwcmVzc2lvbiBhIFZlY3RvciBvZiB0aGUg
RmlsdGVyRWZmZWN0IGFuZCB0aGUgZWZmZWN0Qm91bmRhcmllcy4KICAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9leHByZXNzaW9uOworICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0
R2VvbWV0cnlNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
CmluZGV4IDgyZGU2NTY0NjgxYTIzOWE1NzljYzVhYzA4NGVhMTE1NTRiMmZiOWYuLjUwZWUxYTA2
YzEzZDNlNWM0N2I3OGFmZTRlYmEwNmY2NWE4YWVjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MSwyNSBAQCB2b2lkIFNW
R0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291
cmNlR3JhcGhpYykKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCitzdGF0aWMgT3B0aW9u
U2V0PEZpbHRlckVmZmVjdEdlb21ldHJ5OjpGbGFncz4gYm91bmRhcnlTZXRGbGFnc0ZvckVsZW1l
bnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBPcHRpb25TZXQ8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk6OkZsYWdzPiBmbGFnczsKKworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6eEF0dHIpKQorICAgICAgICBmbGFncy5hZGQoRmlsdGVyRWZmZWN0R2VvbWV0cnk6OkZs
YWdzOjpIYXNYKTsKKworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0
dHIpKQorICAgICAgICBmbGFncy5hZGQoRmlsdGVyRWZmZWN0R2VvbWV0cnk6OkZsYWdzOjpIYXNZ
KTsKKworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkK
KyAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckVmZmVjdEdlb21ldHJ5OjpGbGFnczo6SGFzV2lkdGgp
OworCisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkK
KyAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckVmZmVjdEdlb21ldHJ5OjpGbGFnczo6SGFzSGVpZ2h0
KTsKKworICAgIHJldHVybiBmbGFnczsKK30KKwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKIHN0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRl
cnBvbGF0aW9uRm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQogewpAQCAtODUsMjYgKzEw
NSwyOSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdAogCiAgICAgZm9yIChhdXRvJiBlZmZlY3RF
bGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzPihmaWx0ZXJFbGVtZW50KSkgewogICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1
aWxkKCp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGNsZWFyRWZm
ZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFlZmZlY3QpCisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBlZmZlY3RFbGVtZW50
LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNl
dEVmZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBtX3ByaW1p
dGl2ZVVuaXRzLCBtX3RhcmdldEJvdW5kaW5nQm94KSk7CisgICAgICAgIGlmIChhdXRvIGZsYWdz
ID0gYm91bmRhcnlTZXRGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0
YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVu
dCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBt
X2VmZmVjdEdlb21ldHJ5TWFwLmFkZCgqZWZmZWN0LCBGaWx0ZXJFZmZlY3RHZW9tZXRyeShlZmZl
Y3RCb3VuZGFyaWVzLCBmbGFncykpOworICAgICAgICB9CiAKICNpZiBFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGlmIChjb2xvckludGVycG9sYXRp
b25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFy
UkdCKQogICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpKTsKICNlbmRpZgorCiAgICAgICAgIGlmIChhdXRv
IHJlbmRlcmVyID0gZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgYXBwZW5k
RWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKIAog
ICAgICAgICBhZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKICAgICB9CiAKLSAg
ICBpZiAoIWVmZmVjdCB8fCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMoKmVmZmVjdCkgPiBtYXhU
b3RhbE51bWJlckZpbHRlckVmZmVjdHMpCisgICAgaWYgKCFlZmZlY3QgfHwgdG90YWxOdW1iZXJG
aWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKSB7Cisg
ICAgICAgIGNsZWFyRWZmZWN0cygpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAK
ICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGNmNjY1NGQ0ODMxODIyMThh
ZGIwMDRlMDY5ZWZlZjQyOTkxZjI2YmIuLmZiOWRjZDc4ZjlkOTNlZmJkMTgzMmE1ZWY0YTVjNDMw
NjJjNjU3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNjksNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmKTsKICAgICBib29s
IGJ1aWxkRXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pIGNvbnN0Owog
CisgICAgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgdGFrZUVmZmVjdEdlb21ldHJ5TWFwKCkgeyBy
ZXR1cm4gV1RGTW92ZShtX2VmZmVjdEdlb21ldHJ5TWFwKTsgfQorCiBwcml2YXRlOgogICAgIGlu
bGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAgICB7CkBAIC04NCw4ICs4NywxMCBAQCBw
cml2YXRlOgogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0Kj4gbV9lZmZl
Y3RSZW5kZXJlcjsKIAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKKwog
ICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgIFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9V
U0VSU1BBQ0VPTlVTRSB9OworICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0R2Vv
bWV0cnlNYXA7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>