<?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>196025</bug_id>
          
          <creation_ts>2019-03-20 13:13:57 -0700</creation_ts>
          <short_desc>Remove the SVG tear off objects for SVGColorAnimator</short_desc>
          <delta_ts>2019-03-20 16:52:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>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>
          <dependson>195960</dependson>
          <blocked>191237</blocked>
    
    <blocked>196037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1519114</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-20 13:13:57 -0700</bug_when>
    <thetext>SVG attributes like &quot;fill&quot; and &quot;stroke&quot; do not have reflecting properties in SVGElement but they are animatable by SMIL. Since there is no animated properties for these attributes, a temporary variable must be created and initialized with the attribute value. This The value of this variable is progressed during the animation interval. The new progressed value has to be pushed to SVGElementRareData during the animation. When animation stops, the attribute and its animated value is removed from SVGElementRareData.

Because the attribute can be animated by multiple animators, all the multiple animators must reference the same temporary variable. A new animator named SVGColorAnimator will be created. The creator SVGPropertyAnimatorCreator will keep a RefCounted object for the temporary variable in a HashMap which is indexed by the attribute name. A new entry is created and appended to this HashMap when the first animator is created. An existing entry will be removed when the last animator is removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519154</commentid>
    <comment_count>1</comment_count>
      <attachid>365394</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-20 13:47:22 -0700</bug_when>
    <thetext>Created attachment 365394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519280</commentid>
    <comment_count>2</comment_count>
      <attachid>365394</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-20 16:15:12 -0700</bug_when>
    <thetext>Comment on attachment 365394
Patch

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

&gt; Source/WebCore/ChangeLog:44
&gt; +        -- SVGPropertyAnimatorCreator checks its HashMap it has an entry for the

checks whether its HashMap has an entry

&gt; Source/WebCore/ChangeLog:53
&gt; +           SVGElement about that which will notify its SVGPropertyAnimatorCreator.

Remove &quot;about that&quot;

&gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp:38
&gt; +    static NeverDestroyed&lt;const AtomicString&gt; currentColor(&quot;currentColor&quot;, AtomicString::ConstructFromLiteral);
&gt; +
&gt; +    if (string != currentColor.get())

Not sure why this uses AtomicString; this code does an explicit string compare, so doesn&apos;t atomic-ness.

&gt; Source/WebCore/svg/properties/SVGPropertyAnimatorCreator.h:33
&gt; +class SVGPropertyAnimatorCreator {

Classes that make things are usually called &quot;factories&quot;. So SVGPropertyAnimatorFactory

&gt; Source/WebCore/svg/properties/SVGPropertyAnimatorCreator.h:63
&gt; +        // If refCount = 1 (in the animator) + 1 (in m_attributeProperty) = 2, the entry can be deleted.
&gt; +        if (iterator-&gt;value-&gt;refCount() == 2)
&gt; +            m_attributeProperty.remove(iterator);

Removing based on looking at refCounts feels a bit icky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519302</commentid>
    <comment_count>3</comment_count>
      <attachid>365394</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-20 16:35:56 -0700</bug_when>
    <thetext>Comment on attachment 365394
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:44
&gt;&gt; +        -- SVGPropertyAnimatorCreator checks its HashMap it has an entry for the
&gt; 
&gt; checks whether its HashMap has an entry

Fixed.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp:38
&gt;&gt; +    if (string != currentColor.get())
&gt; 
&gt; Not sure why this uses AtomicString; this code does an explicit string compare, so doesn&apos;t atomic-ness.

static variable is converted to NeverDestroyed&lt;const String&gt;.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyAnimatorCreator.h:33
&gt;&gt; +class SVGPropertyAnimatorCreator {
&gt; 
&gt; Classes that make things are usually called &quot;factories&quot;. So SVGPropertyAnimatorFactory

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyAnimatorCreator.h:63
&gt;&gt; +            m_attributeProperty.remove(iterator);
&gt; 
&gt; Removing based on looking at refCounts feels a bit icky.

I will think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519307</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-20 16:38:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/49085121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519324</commentid>
    <comment_count>5</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-20 16:52:06 -0700</bug_when>
    <thetext>Committed r243259: &lt;https://trac.webkit.org/changeset/243259&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365394</attachid>
            <date>2019-03-20 13:47:22 -0700</date>
            <delta_ts>2019-03-20 16:52:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196025-20190320134721.patch</filename>
            <type>text/plain</type>
            <size>58903</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzIyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxOS0wMy0yMCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgU1ZHIHRlYXIgb2ZmIG9iamVjdHMgZm9yIFNWR0NvbG9yQW5pbWF0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjAyNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBhdHRyaWJ1dGVzIGxpa2Ug
ImZpbGwiIGFuZCAic3Ryb2tlIiBkbyBub3QgaGF2ZSByZWZsZWN0aW5nIHByb3BlcnRpZXMKKyAg
ICAgICAgaW4gU1ZHRWxlbWVudCBidXQgdGhleSBhcmUgYW5pbWF0YWJsZSBieSBTTUlMLiBBbmlt
YXRpbmcgc3VjaCBhdHRyaWJ1dGVzCisgICAgICAgIGlzIGRpZmZlcmVudCBmcm9tIGFuaW1hdGlu
ZyB0aGUgU1ZHIGFuaW1hdGVkIHByb3BlcnRpZXMuIFRoZXNlIG5ldyBjbGFzc2VzCisgICAgICAg
IHdpbGwgYmUgYWRkZWQgdG8gaGFuZGxlIHRoZSBmaXJzdCB0eXBlIG9mIHRoaXMga2luZCBvZiBh
dHRyaWJ1dGU6IHRoZSBDb2xvcjoKKworICAgICAgICAtLSBTVkdQcm9wZXJ0eUFuaW1hdG9yQ3Jl
YXRvciBpcyBhZGRlZCB0byBTVkdFbGVtZW50LiBJdCBpcyByZXNwb25zaWJsZSAKKyAgICAgICAg
ICAgZm9yIGNyZWF0aW5nIFNWR1Byb3BlcnR5QW5pbWF0b3JzIGZvciB0aGUgYXR0cmlidXRlIHdo
aWNoIGRvIG5vdCBoYXZlCisgICAgICAgICAgIHJlZmxlY3RpbmcgYW5pbWF0ZWQgcHJvcGVydGll
cyBzdG9yZWQgYnkgU1ZHRWxlbWVudC4gSXQgd2lsbCBtYWludGFpbgorICAgICAgICAgICBhIEhh
c2hNYXAgZm9yIHRoZSBhbmltYXRlZCB2YWx1ZXMgZm9yIHRoZXNlIGF0dHJpYnV0ZXMgd2hpY2gg
aXMgaW5kZXhlZAorICAgICAgICAgICBieSB0aGUgYXR0cmlidXRlIG5hbWUuIFRoZSBhbmltYXRl
ZCB2YWx1ZXMgaGFzIHRvIGJlIFJlZkNvdW50ZWQgYmVjYXVzZQorICAgICAgICAgICB0aGUgc2Ft
ZSBhdHRyaWJ1dGUgY2FuIGJlIGFuaW1hdGVkIGJ5IG11bHRpcGxlIGFuaW1hdG9ycy4gU28gdGhl
IHZhbHVlcworICAgICAgICAgICBvZiB0aGlzIEhhc2hNYXAgd2lsbCBiZSBvZiB0eXBlIFJlZjxT
VkdQcm9wZXJ0eT4sIGUuZy4KKyAgICAgICAgICAgIDxjaXJjbGUgY3g9IjgwIiBjeT0iMTIwIiBy
PSIzNSI+CisgICAgICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFs
dWVzPSIjMDgwIiBiZWdpbj0iMnMiIC8+CisgICAgICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmli
dXRlTmFtZT0iZmlsbCIgdmFsdWVzPSIjNjAyOyMwMDQiIGJlZ2luPSI0cyIgZHVyPSI1cyIvPgor
ICAgICAgICAgICAgPC9jaXJjbGU+CisKKyAgICAgICAgLS0gU1ZHUHJvcGVydHlBbmltYXRvciBp
cyB0aGUgYSBuZXcgdHlwZSB3aGljaCBhbmltYXRlcyBhbiBhdHRyaWJ1dGUgd2l0aAorICAgICAg
ICAgICBubyByZWZsZWN0aW5nIGFuaW1hdGVkIHByb3BlcnR5LgorCisgICAgICAgIC0tIFNWR1By
aW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaCBpcyByZXNw
b25zaWJsZQorICAgICAgICAgICBmb3IgYW5pbWF0aW5nIGF0dHJpYnV0ZXMgd2l0aCBwcmltaXRp
dmUgdHlwZXMsIGUuZy4gQ29sb3IsIHN0cmluZyBhbmQgCisgICAgICAgICAgIGZsb2F0LiBJdCBp
cyBkZXJpdmVkIGZvcm0gU1ZHUHJvcGVydHlBbmltYXRvciBhbmQgaXQgaXMgaW5pdGlhbGl6ZWQg
CisgICAgICAgICAgIHdpdGggYSBSZWY8U1ZHVmFsdWVQcm9wZXJ0eTxQcm9wZXJ0eVR5cGU+PiB3
aGljaCBpcyBjcmVhdGVkIGFuZCBtYWludGFpbmVkCisgICAgICAgICAgIGJ5IFNWR1Byb3BlcnR5
QW5pbWF0b3JDcmVhdG9yLgorCisgICAgICAgIC0tIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24g
aXMgdGhlIGFuaW1hdGlvbiBmdW5jdGlvbiB0aGF0IGFuaW1hdGVzIHRoZQorICAgICAgICAgICBh
dHRyaWJ1dGVzIHdob3NlIHR5cGUgYXJlIENvbG9yLiBOb3RlIHRoZSBjb252ZXJzaW9uIGZvcm0g
U3RyaW5nIHRvIAorICAgICAgICAgICBDb2xvciBpbiB0aGlzIGNsYXNzIGhhcyB0byBoYW5kbGUg
dGhlIGNhc2Ugd2hlbiBpdHMgdmFsdWUgaXMgImF0dHJpYnV0ZU5hbWU9IgorICAgICAgICAgICBl
LmcuIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGZyb209ImF0dHJpYnV0ZU5hbWU9InIi
Lz4KKworICAgICAgICAtLSBTVkdDb2xvckFuaW1hdG9yIHdpbGwgYmUgZGVmaW5lZCB0byBiZQor
ICAgICAgICAgICBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yPENvbG9yLCBTVkdBbmltYXRp
b25Db2xvckZ1bmN0aW9uPi4KKworICAgICAgICBUaGUgbGlmZSBjeWNsZSBvZiB0aGUgUmVmQ291
bnRlZCBwcm9wZXJ0aWVzIGNhbiBiZSBleHBsYWluZWQgYXMgZm9sbG93czoKKworICAgICAgICAt
LSBTVkdQcm9wZXJ0eUFuaW1hdG9yQ3JlYXRvciBjaGVja3MgaXRzIEhhc2hNYXAgaXQgaGFzIGFu
IGVudHJ5IGZvciB0aGUKKyAgICAgICAgICAgZ2l2ZW4gYXR0cmlidXRlIG5hbWUuIElmIGl0IGRv
ZXMgbm90IGhhdmUsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZhbHVlCisgICAgICAgICAgIHRocm91
Z2ggdGhlIHZhbHVlIGNyZWF0aW9uIG1ldGhvZCBmb3IgdGhpcyBhdHRyaWJ1dGUuCisKKyAgICAg
ICAgLS0gU1ZHUHJvcGVydHlBbmltYXRvckNyZWF0b3IgcGFzc2VzIHRoZSBzaGFyZWQgYW5pbWF0
ZWQgdmFsdWUgdG8gdGhlCisgICAgICAgICAgIGFuaW1hdG9yIGNyZWF0aW9uIG1ldGhvZC4gU28g
bXVsdGlwbGUgYW5pbWF0b3JzIHdpbGwgYmUgYWNjZXNzaW5nIHRoZQorICAgICAgICAgICBzYW1l
IHZhbHVlIHRocm91Z2ggdGhlaXIgUmVmQ291bnRlZCBwb2ludGVycy4KKworICAgICAgICAtLSBX
aGVuIHRoZSBhbmltYXRvciBpcyBhYm91dCB0byBiZSBkZWxldGVkLCBpdCB3aWxsIG5vdGlmeSB0
aGUgdGFyZ2V0CisgICAgICAgICAgIFNWR0VsZW1lbnQgYWJvdXQgdGhhdCB3aGljaCB3aWxsIG5v
dGlmeSBpdHMgU1ZHUHJvcGVydHlBbmltYXRvckNyZWF0b3IuCisgICAgICAgICAgIFNWR1Byb3Bl
cnR5QW5pbWF0b3JDcmVhdG9yIHdpbGwgY2hlY2sgaXRzIEhhc2hNYXAgYW5kIHJldHJpZXZlcyB0
aGUKKyAgICAgICAgICAgZW50cnkgZm9yIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZS4gSWYgdGhl
IHJlZkNvdW50IGlzIDIsIGl0IGlzIGdvaW5nCisgICAgICAgICAgIHRvIHJlbW92ZSB0aGUgZW50
cnkgZm9ybSB0aGUgSGFzaE1hcC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVWYWx1ZUlz
Q3VycmVudENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQ6OmRldGVybWluZVByb3BlcnR5VmFsdWVUeXBlcyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFz
ZTo6YXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVkQ29sb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZENvbG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdG9yRmFjdG9yeS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0b3JGYWN0b3J5OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9TVkdB
dHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6On5TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9s
bGVyKToKKyAgICAgICAgKiBzdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnQ6OlNWR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6aXNBbmltYXRl
ZEF0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpjcmVhdGVB
bmltYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphbmltYXRvcldpbGxCZURl
bGV0ZWQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojpwcm9wZXJ0eUFuaW1hdG9yQ3JlYXRvcik6CisgICAgICAgICogc3ZnL1NWR0Zp
dFRvVmlld0JveC5oOgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvcHJv
cGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uOjpjb2xvckZyb21T
dHJpbmcpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFs
dWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbG9yRnVu
Y3Rpb246OnByb2dyZXNzKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25G
dW5jdGlvbi5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yOjphcHBseUFuaW1h
dGVkU3R5bGVQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVB
bmltYXRvcjo6cmVtb3ZlQW5pbWF0ZWRTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvcHJv
cGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvcjo6U1ZHUHJpbWl0aXZlUHJvcGVydHlBbmlt
YXRvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmlt
YXRvckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlB
bmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5QW5pbWF0b3I6
OlNWR1Byb3BlcnR5QW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlBbmlt
YXRvcjo6YWRqdXN0Rm9ySW5oZXJpdGFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJvcGVydHlBbmltYXRvcjo6Y29tcHV0ZUNTU1Byb3BlcnR5VmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlBbmltYXRvcjo6Y29tcHV0ZUluaGVyaXRlZENTU1Byb3Bl
cnR5VmFsdWUgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5QW5p
bWF0b3JDcmVhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlBbmlt
YXRvckNyZWF0b3I6OmlzS25vd25BdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlBbmltYXRvckNyZWF0b3I6OmNyZWF0ZUFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOjphbmltYXRvcldpbGxCZURlbGV0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlBbmltYXRvckNyZWF0b3I6OmNyZWF0ZUNvbG9yQW5p
bWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlBbmltYXRvckNyZWF0b3I6OmF0
dHJpYnV0ZUFuaW1hdG9yQ3JlYXRvcik6CisKIDIwMTktMDMtMjAgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IERhdGFiYXNlOiBsYXpp
bHkgY3JlYXRlIHRoZSBhZ2VudApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI0MzIxMikK
KysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcwLDcg
KzIyNzAsNiBAQCBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAogc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmNwcAogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAogc3Zn
L1NWR0FuaW1hdGVkQW5nbGUuY3BwCi1zdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAKIHN2Zy9TVkdB
bmltYXRlZEVudW1lcmF0aW9uLmNwcAogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAogc3ZnL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKQEAgLTI0MjIsNiArMjQyMSw3IEBAIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3AKIAogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuY3BwCitzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3Bw
CiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcAogc3ZnL3Byb3BlcnRp
ZXMvU1ZHTGVnYWN5QW5pbWF0ZWRQcm9wZXJ0eS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MzIxMikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTIyMyw3ICsxMjIzLDYgQEAKIAkJNDM5RDMzNDMxM0E2OTExQzAwQzIw
RjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlw
ZS5oICovOyB9OwogCQk0MzlEMzM0NDEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzOUQzMzQxMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oICov
OyB9OwogCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzlEMzM0MjEz
QTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5LmggKi87IH07Ci0JCTQzQTYyNUY4
MTNCMzMwNDAwMEFDOTRCOCAvKiBTVkdBbmltYXRlZENvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0E2MjVGNjEzQjMzMDQwMDBBQzk0QjggLyog
U1ZHQW5pbWF0ZWRDb2xvci5oICovOyB9OwogCQk0M0I4NUVENDE4Q0JFQzUyMDBFMzFBRjQgLyog
U2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzQjg1RUQyMThDQkVDNTIw
MEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
Y3BwICovOyB9OwogCQk0M0I5MzM2OTEzQjI2MUIxMDA0NTg0QkYgLyogU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
QjkzMzY3MTNCMjYxQjEwMDQ1ODRCRiAvKiBTVkdBbmltYXRlZFBvaW50TGlzdC5oICovOyB9Owog
CQk0M0MwOTJCQzEyRDlFNEVFMDBBOTg5QzMgLyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNDMDkyQkExMkQ5
RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCAqLzsgfTsKQEAgLTc2NzEs
OCArNzY3MCw2IEBACiAJCTQzOUQzMzQxMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5
cGVBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFR5cGVBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzlEMzM0MjEz
QTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdG9yRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0M0EwRjBCMDEzQUM3RDZEMDBBNUYwQTcgLyogU1ZHQW5pbWF0ZWROdW1iZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1i
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0M0E2MjVGNjEzQjMzMDQwMDBB
Qzk0QjggLyogU1ZHQW5pbWF0ZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdBbmltYXRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQz
QTYyNUY3MTNCMzMwNDAwMEFDOTRCOCAvKiBTVkdBbmltYXRlZENvbG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1hdGVkQ29sb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0M0E2MjY2NjEzQjNEMTEwMDBBQzk0QjggLyogU1ZHQW5p
bWF0ZWRTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
QW5pbWF0ZWRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0I4NUVE
MDE4Q0JFQUNFMDBFMzFBRjQgLyogbWFrZVNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmls
aXR5RWxlbWVudE1hcC5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IG1h
a2VTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzQjg1RUQyMThDQkVDNTIwMEUzMUFGNCAvKiBTZWxl
Y3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGli
aWxpdHlFbGVtZW50TWFwLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU2VsZWN0
b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTk1MjcsNiArOTUyNCwxMSBAQAogCQk3MjRFRDMz
MDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0VYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQ
cm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjY2
RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyNjZGMDE2MjI0MUMwRkUwMDgzMzk3NSAvKiBTVkdQcm9wZXJ0
eUFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2NkYwMTgyMjQyOUNGRDAwODMzOTc1IC8qIFNWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JH
Qi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdC
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2MjM1LDYgKzE2MjM3LDcgQEAKIAkJCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8sCiAJCQkJNTVCRTAyNUYy
MjNCMjlDNTAwMzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaCAqLywKIAkJ
CQk1NUVFNTM1RTIyM0IyQTBFMDBGQkE5NDQgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1
bmN0aW9uLmggKi8sCisJCQkJNzI2NkYwMTgyMjQyOUNGRDAwODMzOTc1IC8qIFNWR0FuaW1hdGlv
bkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuY3BwICovLAogCQkJCTU1QkUwMjU5MjIzQjI5QzEw
MDMyRjA4QSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8sCiAJ
CQkJNTVEQ0M1MUQyMjQwNjE1NTAwQzI2RTMyIC8qIFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rp
b24uaCAqLywKIAkJCQk1NURDQzUxQzIyNDA2MDVFMDBDMjZFMzIgLyogU1ZHQW5pbWF0aW9uRGlz
Y3JldGVGdW5jdGlvbkltcGwuaCAqLywKQEAgLTE2MjU3LDkgKzE2MjYwLDEzIEBACiAJCQkJNTVF
RTUzNTQyMjNCMjlFOTAwRkJBOTQ0IC8qIFNWR01lbWJlckFjY2Vzc29yLmggKi8sCiAJCQkJNTVC
RTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR1BvaW50ZXJNZW1iZXJBY2Nlc3Nvci5oICovLAog
CQkJCTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi8sCisJ
CQkJNzI2NkYwMTUyMjQxQzA5ODAwODMzOTc1IC8qIFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0
b3IuaCAqLywKKwkJCQk3MjY2RjAxNDIyNDFCRkIyMDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZlUHJv
cGVydHlBbmltYXRvckltcGwuaCAqLywKIAkJCQk1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyog
U1ZHUHJvcGVydHkuaCAqLywKIAkJCQk1NURDQzUyNjIyNDA3NEZBMDBDMjZFMzIgLyogU1ZHUHJv
cGVydHlBY2Nlc3Nvci5oICovLAogCQkJCTU1RENDNTI3MjI0MDc1MEIwMEMyNkUzMiAvKiBTVkdQ
cm9wZXJ0eUFjY2Vzc29ySW1wbC5oICovLAorCQkJCTcyNjZGMDE2MjI0MUMwRkUwMDgzMzk3NSAv
KiBTVkdQcm9wZXJ0eUFuaW1hdG9yLmggKi8sCisJCQkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1
IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yLmggKi8sCiAJCQkJNTVFRTUzNjAyMjNCMkEy
MTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLywKIAkJCQk1NUJFMDI1QzIyM0IyOUMz
MDAzMkYwOEEgLyogU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5LmggKi8sCiAJCQkJNTVCRTAyNTcy
MjNCMjlDMDAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5UmVnaXN0cnkuaCAqLywKQEAgLTI0MTI5LDgg
KzI0MTM2LDYgQEAKIAkJCQkwODdCODQ5NTEyNzJDRUM3MDBBMTQ0MTcgLyogU1ZHQW5pbWF0ZWRB
bmdsZS5oICovLAogCQkJCUIyMjI3N0U2MEQwMEJGMUYwMDcxQjc4MiAvKiBTVkdBbmltYXRlZEFu
Z2xlLmlkbCAqLywKIAkJCQlCMjIyNzdFNzBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZWRC
b29sZWFuLmlkbCAqLywKLQkJCQk0M0E2MjVGNzEzQjMzMDQwMDBBQzk0QjggLyogU1ZHQW5pbWF0
ZWRDb2xvci5jcHAgKi8sCi0JCQkJNDNBNjI1RjYxM0IzMzA0MDAwQUM5NEI4IC8qIFNWR0FuaW1h
dGVkQ29sb3IuaCAqLywKIAkJCQk3MUNDN0ExRjE1MkEwQkZFMDA5RUVBRjkgLyogU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5jcHAgKi8sCiAJCQkJMDhENDZDRTIxMjdBRDVGQzAwODk2OTRCIC8qIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24uaCAqLywKIAkJCQlCMjIyNzdFODBEMDBCRjFGMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5pZGwgKi8sCkBAIC0zMTkyMSw3ICszMTkyNiw2IEBA
CiAJCQkJQjIyMjc5NzcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuZ2xlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyNzk3QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg3Qjg0OTYxMjcyQ0VDODAwQTE0NDE3IC8qIFNWR0Fu
aW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTQzQTYyNUY4MTNCMzMwNDAwMEFDOTRC
OCAvKiBTVkdBbmltYXRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEQ0NkNFMzEyN0FE
NUZDMDA4OTY5NEIgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzFGQjk2N0IxMzgzRDY0NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9w
ZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OTAyMUE5MTI2RUY1REUwMDkyRDVF
QSAvKiBTVkdBbmltYXRlZExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNDMyMTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE5ICs0MCw0IEBAIFJlZjxTVkdBbmltYXRlQ29sb3JFbGVtZW50PiBT
VkdBbmltYXRlQ28KICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLXN0YXRpYyBib29sIGF0dHJpYnV0ZVZhbHVl
SXNDdXJyZW50Q29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBjdXJyZW50Q29sb3IoImN1cnJlbnRDb2xvciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiB2YWx1ZSA9
PSBjdXJyZW50Q29sb3I7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6ZGV0ZXJt
aW5lUHJvcGVydHlWYWx1ZVR5cGVzKGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0
bykKLXsKLSAgICBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmRldGVybWluZVByb3BlcnR5VmFsdWVU
eXBlcyhmcm9tLCB0byk7Ci0gICAgaWYgKGF0dHJpYnV0ZVZhbHVlSXNDdXJyZW50Q29sb3IoZnJv
bSkpCi0gICAgICAgIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlID0gQ3VycmVudENvbG9yVmFsdWU7
Ci0gICAgaWYgKGF0dHJpYnV0ZVZhbHVlSXNDdXJyZW50Q29sb3IodG8pKQotICAgICAgICBtX3Rv
UHJvcGVydHlWYWx1ZVR5cGUgPSBDdXJyZW50Q29sb3JWYWx1ZTsKLX0KLQogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZpc2lvbiAyNDMy
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTVkdB
bmltYXRlQ29sb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwotICAg
IHZvaWQgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGNvbnN0IFN0cmluZyYgZnJvbSwgY29u
c3QgU3RyaW5nJiB0bykgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAkocmV2
aXNpb24gMjQzMjEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgU1ZHQXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlckJhc2UmIFNWRwogICAgIEFTU0VSVCghaGFzSW52YWxpZENTU0F0dHJpYnV0
ZVR5cGUoKSk7CiAKICAgICBpZiAoIW1fYXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcikgewot
ICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSgpKSkKKyAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQoKS0+aXNBbmltYXRl
ZEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKCkpKQogICAgICAgICAgICAgbV9hdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdBdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyPigqdGhpcywgKnRhcmdldEVsZW1lbnQoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1fYXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8
U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMsICp0YXJnZXRFbGVt
ZW50KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcAkocmV2
aXNpb24gMjQzMjEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvci5oIgotCi0jaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVFbGVtZW50QmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR0FuaW1hdGVk
Q29sb3JBbmltYXRvcjo6U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1l
bnQmIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIGNvbnRleHRFbGVtZW50KQotICAgIDog
U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IoQW5pbWF0ZWRDb2xvciwgJmFuaW1hdGlvbkVsZW1lbnQs
ICZjb250ZXh0RWxlbWVudCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZT4gU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZShTVkdQ
cm9wZXJ0eVRyYWl0czxDb2xvcj46OmZyb21TdHJpbmcoc3RyaW5nKSk7Ci19Ci0KLXZvaWQgU1ZH
QW5pbWF0ZWRDb2xvckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlwZSog
ZnJvbSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bykKLXsKLSAgICBBU1NFUlQoZnJvbSk7Ci0gICAgQVNT
RVJUKHRvKTsKLSAgICBBU1NFUlQoZnJvbS0+dHlwZSgpID09IEFuaW1hdGVkQ29sb3IpOwotICAg
IEFTU0VSVCh0by0+dHlwZSgpID09IEFuaW1hdGVkQ29sb3IpOwotCi0gICAgLy8gSWdub3JlcyBh
bnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgotICAgIGNv
bnN0IGF1dG8mIGZyb21Db2xvciA9IGZyb20tPmFzPENvbG9yPigpOwotICAgIGF1dG8mIHRvQ29s
b3IgPSB0by0+YXM8Q29sb3I+KCk7Ci0gICAgdG9Db2xvciA9IHsgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbCh0b0NvbG9yLnJlZCgpICsgZnJvbUNvbG9yLnJlZCgpKSwKLSAgICAgICAgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbCh0b0NvbG9yLmdyZWVuKCkgKyBmcm9tQ29sb3IuZ3JlZW4oKSks
Ci0gICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwodG9Db2xvci5ibHVlKCkgKyBmcm9t
Q29sb3IuYmx1ZSgpKSB9OwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGN1cnJlbnRDb2xvcihT
VkdFbGVtZW50JiB0YXJnZXRFbGVtZW50KQotewotICAgIFJlbmRlckVsZW1lbnQqIHRhcmdldFJl
bmRlcmVyID0gdGFyZ2V0RWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghdGFyZ2V0UmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHRhcmdldFJlbmRlcmVyLT5zdHls
ZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKLX0KLQotc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGcm9tU3RyaW5nKFNWR0FuaW1hdGlvbkVsZW1lbnQqLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKLXsKLSAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0cmlu
Zy5zdHJpcFdoaXRlU3BhY2UoKSk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9y
OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVh
dENvdW50LCBTVkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8sIFNWR0Fu
aW1hdGVkVHlwZSogdG9BdEVuZE9mRHVyYXRpb24sIFNWR0FuaW1hdGVkVHlwZSogYW5pbWF0ZWQp
Ci17Ci0gICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fY29udGV4
dEVsZW1lbnQpOwotCi0gICAgYXV0byBmcm9tQ29sb3IgPSAobV9hbmltYXRpb25FbGVtZW50LT5h
bmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IGZyb20pLT5h
czxDb2xvcj4oKTsKLSAgICBhdXRvIHRvQ29sb3IgPSB0by0+YXM8Q29sb3I+KCk7Ci0KLSAgICAv
LyBBcHBseSBDU1MgaW5oZXJpdGFuY2UgcnVsZXMuCi0gICAgbV9hbmltYXRpb25FbGVtZW50LT5h
ZGp1c3RGb3JJbmhlcml0YW5jZTxDb2xvcj4ocGFyc2VDb2xvckZyb21TdHJpbmcsIG1fYW5pbWF0
aW9uRWxlbWVudC0+ZnJvbVByb3BlcnR5VmFsdWVUeXBlKCksIGZyb21Db2xvciwgbV9jb250ZXh0
RWxlbWVudCk7Ci0gICAgbV9hbmltYXRpb25FbGVtZW50LT5hZGp1c3RGb3JJbmhlcml0YW5jZTxD
b2xvcj4ocGFyc2VDb2xvckZyb21TdHJpbmcsIG1fYW5pbWF0aW9uRWxlbWVudC0+dG9Qcm9wZXJ0
eVZhbHVlVHlwZSgpLCB0b0NvbG9yLCBtX2NvbnRleHRFbGVtZW50KTsKLQotICAgIC8vIEFwcGx5
IDxhbmltYXRlQ29sb3I+IHJ1bGVzLgotICAgIGlmIChtX2FuaW1hdGlvbkVsZW1lbnQtPmZyb21Q
cm9wZXJ0eVZhbHVlVHlwZSgpID09IEN1cnJlbnRDb2xvclZhbHVlKQotICAgICAgICBmcm9tQ29s
b3IgPSBjdXJyZW50Q29sb3IoKm1fY29udGV4dEVsZW1lbnQpOwotICAgIGlmIChtX2FuaW1hdGlv
bkVsZW1lbnQtPnRvUHJvcGVydHlWYWx1ZVR5cGUoKSA9PSBDdXJyZW50Q29sb3JWYWx1ZSkKLSAg
ICAgICAgdG9Db2xvciA9IGN1cnJlbnRDb2xvcigqbV9jb250ZXh0RWxlbWVudCk7Ci0KLSAgICBj
b25zdCBhdXRvJiB0b0F0RW5kT2ZEdXJhdGlvbkNvbG9yID0gdG9BdEVuZE9mRHVyYXRpb24tPmFz
PENvbG9yPigpOwotICAgIGF1dG8mIGFuaW1hdGVkQ29sb3IgPSBhbmltYXRlZC0+YXM8Q29sb3I+
KCk7Ci0KLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIHRoaXMgd2lsbCBuZWVkIHRvIGhh
bmRsZSBibGVuZGluZyBiZXR3ZWVuIGNvbG9ycyBpbiBkaWZmZXJlbnQgY29sb3Igc3BhY2VzLAot
ICAgIC8vIGFzIHdlbGwgYXMgd29yayB3aXRoIG5vbiBbMC0yNTVdIENvbG9ycy4KLSAgICBmbG9h
dCByZWQgPSBhbmltYXRlZENvbG9yLnJlZCgpOwotICAgIG1fYW5pbWF0aW9uRWxlbWVudC0+YW5p
bWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tQ29sb3IucmVk
KCksIHRvQ29sb3IucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uQ29sb3IucmVkKCksIHJlZCk7Ci0K
LSAgICBmbG9hdCBncmVlbiA9IGFuaW1hdGVkQ29sb3IuZ3JlZW4oKTsKLSAgICBtX2FuaW1hdGlv
bkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwg
ZnJvbUNvbG9yLmdyZWVuKCksIHRvQ29sb3IuZ3JlZW4oKSwgdG9BdEVuZE9mRHVyYXRpb25Db2xv
ci5ncmVlbigpLCBncmVlbik7Ci0KLSAgICBmbG9hdCBibHVlID0gYW5pbWF0ZWRDb2xvci5ibHVl
KCk7Ci0gICAgbV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRlQWRkaXRpdmVOdW1iZXIocGVyY2Vu
dGFnZSwgcmVwZWF0Q291bnQsIGZyb21Db2xvci5ibHVlKCksIHRvQ29sb3IuYmx1ZSgpLCB0b0F0
RW5kT2ZEdXJhdGlvbkNvbG9yLmJsdWUoKSwgYmx1ZSk7Ci0KLSAgICBmbG9hdCBhbHBoYSA9IGFu
aW1hdGVkQ29sb3IuYWxwaGEoKTsKLSAgICBtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRp
dGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbUNvbG9yLmFscGhhKCksIHRv
Q29sb3IuYWxwaGEoKSwgdG9BdEVuZE9mRHVyYXRpb25Db2xvci5hbHBoYSgpLCBhbHBoYSk7Ci0K
LSAgICBhbmltYXRlZENvbG9yID0geyByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHJlZCksIHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKSB9OwotfQotCi1mbG9hdCBT
VkdBbmltYXRlZENvbG9yQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYg
ZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKLXsKLSAgICBDb2xvciBmcm9tID0g
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGZyb21TdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkpOwotICAg
IGlmICghZnJvbS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBDb2xvciB0byA9
IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0b1N0cmluZy5zdHJpcFdoaXRlU3BhY2UoKSk7Ci0gICAg
aWYgKCF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBmbG9hdCByZWQgPSBm
cm9tLnJlZCgpIC0gdG8ucmVkKCk7Ci0gICAgZmxvYXQgZ3JlZW4gPSBmcm9tLmdyZWVuKCkgLSB0
by5ncmVlbigpOwotICAgIGZsb2F0IGJsdWUgPSBmcm9tLmJsdWUoKSAtIHRvLmJsdWUoKTsKLSAg
ICByZXR1cm4gc3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBibHVlKTsK
LX0KLQotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkQ29sb3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5oCShyZXZpc2lvbiAyNDMyMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5oCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTVkdBbmlt
YXRlZFR5cGVBbmltYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0Fu
aW1hdGVkQ29sb3JBbmltYXRvciBmaW5hbCA6IHB1YmxpYyBTVkdBbmltYXRlZFR5cGVBbmltYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgU1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVs
ZW1lbnQmLCBTVkdFbGVtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKSBmaW5hbDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBzdGFydEFuaW1WYWxBbmltYXRp
b24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JikgZmluYWwgeyByZXR1cm4g
bnVsbHB0cjsgfQotICAgIHZvaWQgc3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVu
dEFuaW1hdGVkUHJvcGVydHlMaXN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCByZXNldEFuaW1WYWxU
b0Jhc2VWYWwoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiwgU1ZHQW5pbWF0
ZWRUeXBlJikgZmluYWwgeyB9Ci0gICAgdm9pZCBhbmltVmFsV2lsbENoYW5nZShjb25zdCBTVkdF
bGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGFuaW1WYWxE
aWRDaGFuZ2UoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JikgZmluYWwgeyB9
Ci0gICAgdm9pZCBhZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVk
VHlwZSopIGZpbmFsOwotICAgIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0
ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKikgZmluYWw7Ci0gICAg
ZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRvU3RyaW5nKSBmaW5hbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0b3JGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdG9yRmFjdG9yeS5oCShyZXZpc2lvbiAyNDMyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRBbmdsZS5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkQ29sb3IuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgi
CiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZExl
bmd0aExpc3QuaCIKQEAgLTQ0LDE4ICs0MywxOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChj
b250ZXh0RWxlbWVudCk7CiAKICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgQW5pbWF0ZWRBbmdsZToKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4dEVs
ZW1lbnQpOwogICAgICAgICBjYXNlIEFuaW1hdGVkQm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBjYXNlIEFuaW1hdGVkQ29sb3I6Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZENvbG9yQW5pbWF0b3I+KCphbmltYXRpb25F
bGVtZW50LCAqY29udGV4dEVsZW1lbnQpOwotICAgICAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRp
b246Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZEVudW1l
cmF0aW9uQW5pbWF0b3I+KGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKICAgICAg
ICAgY2FzZSBBbmltYXRlZEludGVnZXI6Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgY2FzZSBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI6CisgICAgICAgIGNhc2Ug
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgorICAgICAgICBjYXNlIEFuaW1hdGVkUmVjdDoK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGNhc2UgQW5pbWF0ZWRBbmds
ZToKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkQW5nbGVB
bmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpOworICAgICAgICBjYXNl
IEFuaW1hdGVkRW51bWVyYXRpb246CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I+KGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRl
eHRFbGVtZW50KTsKICAgICAgICAgY2FzZSBBbmltYXRlZExlbmd0aDoKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkTGVuZ3RoQW5pbWF0b3I+KGFuaW1hdGlv
bkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKICAgICAgICAgY2FzZSBBbmltYXRlZExlbmd0aExp
c3Q6CkBAIC03MCwxMCArNjksNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdBbmltYXRlZFBhdGhBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29u
dGV4dEVsZW1lbnQpOwogICAgICAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRQb2ludExpc3RBbmltYXRvcj4oYW5p
bWF0aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpOwotICAgICAgICBjYXNlIEFuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpbzoKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBj
YXNlIEFuaW1hdGVkUmVjdDoKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBj
YXNlIEFuaW1hdGVkU3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
U1ZHQW5pbWF0ZWRTdHJpbmdBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4dEVsZW1l
bnQpOwogICAgICAgICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlzdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDI0MzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTIgQEAg
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6U1ZHQXR0cgogICAgIDogU1ZHQXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UoYW5pbWF0aW9uRWxlbWVudCwgdGFyZ2V0RWxlbWVu
dCkKIHsKIH0KKyAgICAKK1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6On5TVkdBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAobV9hbmltYXRvcikKKyAgICAg
ICAgbV90YXJnZXRFbGVtZW50LmFuaW1hdG9yV2lsbEJlRGVsZXRlZChtX2FuaW1hdGlvbkVsZW1l
bnQuYXR0cmlidXRlTmFtZSgpKTsKK30KIAogU1ZHQXR0cmlidXRlQW5pbWF0b3IqIFNWR0F0dHJp
YnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdG9yKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjQzMjEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFz
cyBTVkdTTUlMRWxlbWVudDsKIGNsYXNzIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIg
OiBwdWJsaWMgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UgewogcHVibGljOgog
ICAgIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCYs
IFNWR0VsZW1lbnQmKTsKKyAgICB+U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcigpOwog
ICAgIAogcHJpdmF0ZToKICAgICBTVkdBdHRyaWJ1dGVBbmltYXRvciogYW5pbWF0b3IoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0MzIxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NiArNDQsNyBAQAogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUHJv
cGVydHlBbmltYXRvckNyZWF0b3IuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBA
IC0yNzUsNiArMjc2LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBIYXNoTWFwPFF1YWxpZmllZE5h
bQogU1ZHRWxlbWVudDo6U1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
LCBDcmVhdGVTVkdFbGVtZW50KQogICAgICwgU1ZHTGFuZ1NwYWNlKHRoaXMpCisgICAgLCBtX3By
b3BlcnR5QW5pbWF0b3JDcmVhdG9yKHN0ZDo6bWFrZV91bmlxdWU8U1ZHUHJvcGVydHlBbmltYXRv
ckNyZWF0b3I+KCkpCiB7CiAgICAgcmVnaXN0ZXJBdHRyaWJ1dGVzKCk7CiB9CkBAIC03NTYsMTEg
Kzc1OCwxNiBAQCBib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpCiAKIGJv
b2wgU1ZHRWxlbWVudDo6aXNBbmltYXRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKSBjb25zdAogewotICAgIHJldHVybiBpc0FuaW1hdGVkUHJvcGVydHlBdHRy
aWJ1dGUoYXR0cmlidXRlTmFtZSk7CisgICAgcmV0dXJuIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVh
dG9yOjppc0tub3duQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIHx8IGlzQW5pbWF0ZWRQcm9wZXJ0
eUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNWR0F0dHJp
YnV0ZUFuaW1hdG9yPiBTVkdFbGVtZW50OjpjcmVhdGVBbmltYXRvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNNb2Rl
IGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkKIHsKKyAgICAv
LyBQcm9wZXJ0eSBhbmltYXRvciwgZS5nLgorICAgIGlmIChhdXRvIGFuaW1hdG9yID0gcHJvcGVy
dHlBbmltYXRvckNyZWF0b3IoKS5jcmVhdGVBbmltYXRvcihhdHRyaWJ1dGVOYW1lLCBhbmltYXRp
b25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSkpCisgICAgICAgIHJl
dHVybiBhbmltYXRvcjsKKyAgICAKKyAgICAvLyBBbmltYXRlZCBwcm9wZXJ0eSBhbmltYXRvci4K
ICAgICBhdXRvIGFuaW1hdG9yID0gcHJvcGVydHlSZWdpc3RyeSgpLmNyZWF0ZUFuaW1hdG9yKGF0
dHJpYnV0ZU5hbWUsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2RlLCBpc0FjY3VtdWxhdGVkLCBpc0Fk
ZGl0aXZlKTsKICAgICBpZiAoIWFuaW1hdG9yKQogICAgICAgICByZXR1cm4gYW5pbWF0b3I7CkBA
IC03NjgsNiArNzc1LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRvcj4g
U1YKICAgICAgICAgaW5zdGFuY2UtPnByb3BlcnR5UmVnaXN0cnkoKS5hcHBlbmRBbmltYXRlZElu
c3RhbmNlKGF0dHJpYnV0ZU5hbWUsICphbmltYXRvcik7CiAgICAgcmV0dXJuIGFuaW1hdG9yOwog
fQorICAgIAordm9pZCBTVkdFbGVtZW50OjphbmltYXRvcldpbGxCZURlbGV0ZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBwcm9wZXJ0eUFuaW1hdG9yQ3JlYXRv
cigpLmFuaW1hdG9yV2lsbEJlRGVsZXRlZChhdHRyaWJ1dGVOYW1lKTsKK30KIAogT3B0aW9uYWw8
RWxlbWVudFN0eWxlPiBTVkdFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDI0MzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgRGVwcmVj
YXRlZENTU09NVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczsKIGNsYXNzIFNWR0VsZW1lbnRSYXJlRGF0YTsKK2NsYXNzIFNWR1Byb3BlcnR5QW5pbWF0
b3JDcmVhdG9yOwogY2xhc3MgU1ZHU1ZHRWxlbWVudDsKIGNsYXNzIFNWR1VzZUVsZW1lbnQ7CiAK
QEAgLTE2MSw3ICsxNjIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21taXRQcm9wZXJ0eUNoYW5n
ZShTVkdBbmltYXRlZFByb3BlcnR5Jik7CiAKICAgICBjb25zdCBTVkdFbGVtZW50KiBhdHRyaWJ1
dGVDb250ZXh0RWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBT
VkdQcm9wZXJ0eUFuaW1hdG9yQ3JlYXRvciYgcHJvcGVydHlBbmltYXRvckNyZWF0b3IoKSB7IHJl
dHVybiAqbV9wcm9wZXJ0eUFuaW1hdG9yQ3JlYXRvcjsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBdHRyaWJ1dGVBbmltYXRvcj4gY3JlYXRlQW5pbWF0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IEFuaW1hdGlvbk1vZGUsIENhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRp
dGl2ZSk7CisgICAgdm9pZCBhbmltYXRvcldpbGxCZURlbGV0ZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwogCiAgICAgLy8gVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIFJlbmRlclRyZWUsIGFuaW1h
dGlvbiBhbmQgRE9NLgogICAgIGNvbnN0IGF1dG8mIGNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xhc3NOYW1lLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CkBAIC0y
MTUsNiArMjE4LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+IG1fZWxl
bWVudHNXaXRoUmVsYXRpdmVMZW5ndGhzOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1Byb3Bl
cnR5QW5pbWF0b3JDcmVhdG9yPiBtX3Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOworCiAgICAgQXR0
cmlidXRlT3duZXJQcm94eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9OwogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBTVkdBbmlt
YXRlZFN0cmluZ0F0dHJpYnV0ZSBtX2NsYXNzTmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDI0MzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MTAgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkg
KzIzLDEyIEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJRdWFsaWZpZWRO
YW1lLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaCIKKyNpbmNsdWRlICJT
VkdBdHRyaWJ1dGVPd25lclByb3h5SW1wbC5oIgogI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0MzIxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAkocmV2aXNpb24g
MjQzMjEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBSZW5kZXJFbGVtZW50OworY2xh
c3MgVHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25J
bXBsLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRpb25BZGRpdGl2
ZVZhbHVlRnVuY3Rpb25JbXBsLmgiCisKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbG9yIFNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiB0YXJnZXRF
bGVtZW50LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBjdXJyZW50Q29sb3IoImN1cnJlbnRDb2xvciIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgaWYgKHN0cmluZyAhPSBjdXJy
ZW50Q29sb3IuZ2V0KCkpCisgICAgICAgIHJldHVybiBTVkdQcm9wZXJ0eVRyYWl0czxDb2xvcj46
OmZyb21TdHJpbmcoc3RyaW5nKTsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRhcmdldEVs
ZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisKKyAgICByZXR1cm4geyB9Owor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25B
ZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShy
ZXZpc2lvbiAyNDMyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDYyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHQW5pbWF0aW9uQ29s
b3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb248Q29s
b3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1
ZUZ1bmN0aW9uPENvbG9yPjsKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgdm9pZCBzZXRG
cm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBm
cm9tLCBjb25zdCBTdHJpbmcmIHRvKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9mcm9tID0g
Y29sb3JGcm9tU3RyaW5nKHRhcmdldEVsZW1lbnQsIGZyb20pOworICAgICAgICBtX3RvID0gY29s
b3JGcm9tU3RyaW5nKHRhcmdldEVsZW1lbnQsIHRvKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRv
QXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fdG9BdEVuZE9mRHVyYXRpb24gPSBTVkdQcm9wZXJ0eVRy
YWl0czxDb2xvcj46OmZyb21TdHJpbmcodG9BdEVuZE9mRHVyYXRpb24pOworICAgIH0KKworICAg
IHZvaWQgcHJvZ3Jlc3MoU1ZHRWxlbWVudCosIGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJl
cGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCisgICAgeworICAgICAgICBDb2xvciBmcm9tID0g
bV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBtX2Zyb207
CisgICAgICAgIAorICAgICAgICBmbG9hdCByZWQgPSBCYXNlOjpwcm9ncmVzcyhwZXJjZW50YWdl
LCByZXBlYXRDb3VudCwgZnJvbS5yZWQoKSwgbV90by5yZWQoKSwgdG9BdEVuZE9mRHVyYXRpb24o
KS5yZWQoKSwgYW5pbWF0ZWQucmVkKCkpOworICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OnBy
b2dyZXNzKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tLmdyZWVuKCksIG1fdG8uZ3JlZW4o
KSwgdG9BdEVuZE9mRHVyYXRpb24oKS5ncmVlbigpLCBhbmltYXRlZC5ncmVlbigpKTsKKyAgICAg
ICAgZmxvYXQgYmx1ZSA9IEJhc2U6OnByb2dyZXNzKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBm
cm9tLmJsdWUoKSwgbV90by5ibHVlKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYmx1ZSgpLCBhbmlt
YXRlZC5ibHVlKCkpOworICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OnByb2dyZXNzKHBlcmNl
bnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tLmFscGhhKCksIG1fdG8uYWxwaGEoKSwgdG9BdEVuZE9m
RHVyYXRpb24oKS5hbHBoYSgpLCBhbmltYXRlZC5hbHBoYSgpKTsKKyAgICAgICAgCisgICAgICAg
IGFuaW1hdGVkID0geyByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKSB9OworICAgIH0KKworICAgIGZsb2F0IGNh
bGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0
cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBDb2xvciBmcm9tQ29sb3Ig
PSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoZnJvbS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAg
IGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0by5zdHJpcFdoaXRlU3Bh
Y2UoKSk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIGZsb2F0IHJlZCA9IGZyb21Db2xvci5yZWQoKSAtIHRvQ29sb3IucmVk
KCk7CisgICAgICAgIGZsb2F0IGdyZWVuID0gZnJvbUNvbG9yLmdyZWVuKCkgLSB0b0NvbG9yLmdy
ZWVuKCk7CisgICAgICAgIGZsb2F0IGJsdWUgPSBmcm9tQ29sb3IuYmx1ZSgpIC0gdG9Db2xvci5i
bHVlKCk7CisgICAgICAgIHJldHVybiBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsg
Ymx1ZSAqIGJsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEZyb21BbmRUb1Zh
bHVlcyhTVkdFbGVtZW50Kikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIElnbm9yZXMgYW55
IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KKyAgICAgICAg
bV90byA9IHsKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5yZWQo
KSArIG1fZnJvbS5yZWQoKSksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KG1fdG8uZ3JlZW4oKSArIG1fZnJvbS5ncmVlbigpKSwKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwobV90by5ibHVlKCkgKyBtX2Zyb20uYmx1ZSgpKQorICAgICAgICB9Owor
ICAgIH0KKworICAgIHN0YXRpYyBDb2xvciBjb2xvckZyb21TdHJpbmcoU1ZHRWxlbWVudCosIGNv
bnN0IFN0cmluZyYpOworfTsKKwogY2xhc3MgU1ZHQW5pbWF0aW9uSW50ZWdlckZ1bmN0aW9uIDog
cHVibGljIFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbjxpbnQ+IHsKICAgICBmcmll
bmQgY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1hdG9yOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25GdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkZ1bmN0aW9uLmgJ
KHJldmlzaW9uIDI0MzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEyIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCIKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBTVkdFbGVtZW50OworCiBjbGFzcyBTVkdBbmltYXRpb25G
dW5jdGlvbiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHQW5pbWF0aW9uRnVuY3Rpb24oKSA9
IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1
dGVBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAyNDMyMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDYzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBT
VkdBdHRyaWJ1dGVBbmltYXRvcjo6YXBwbHlBbmltYXRlZFN0eWxlUHJvcGVydHlDaGFuZ2UoU1ZH
RWxlbWVudCogZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKCFlbGVtZW50LT5tX2RlbGV0aW9u
SGFzQmVndW4pOworICAgIAorICAgIGlmICghZWxlbWVudC0+ZW5zdXJlQW5pbWF0ZWRTTUlMU3R5
bGVQcm9wZXJ0aWVzKCkuc2V0UHJvcGVydHkoaWQsIHZhbHVlLCBmYWxzZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsKK30KKwordm9pZCBTVkdBdHRy
aWJ1dGVBbmltYXRvcjo6YXBwbHlBbmltYXRlZFN0eWxlUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodGFy
Z2V0RWxlbWVudCk7CisgICAgQVNTRVJUKG1fYXR0cmlidXRlTmFtZSAhPSBhbnlRTmFtZSgpKTsK
KyAgICAKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nv
bm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/CisgICAgaWYgKCF0YXJnZXRFbGVtZW50LT5pc0Nvbm5l
Y3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY3NzUHJvcGVydHlJRChtX2F0dHJpYnV0ZU5h
bWUubG9jYWxOYW1lKCkpOworICAgIAorICAgIFNWR0VsZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxv
Y2tlciBibG9ja2VyKCp0YXJnZXRFbGVtZW50KTsKKyAgICBhcHBseUFuaW1hdGVkU3R5bGVQcm9w
ZXJ0eUNoYW5nZSh0YXJnZXRFbGVtZW50LCBpZCwgdmFsdWUpOworICAgIAorICAgIC8vIElmIHRo
ZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxsLCB3L28g
cmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCisgICAgZm9yIChhdXRvKiBp
bnN0YW5jZSA6IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlcygpKQorICAgICAgICBhcHBseUFuaW1h
dGVkU3R5bGVQcm9wZXJ0eUNoYW5nZShpbnN0YW5jZSwgaWQsIHZhbHVlKTsKK30KKyAgICAKK3Zv
aWQgU1ZHQXR0cmlidXRlQW5pbWF0b3I6OnJlbW92ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eShTVkdF
bGVtZW50KiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIGlkKQoreworICAgIEFTU0VSVChlbGVtZW50
KTsKKyAgICBBU1NFUlQoIWVsZW1lbnQtPm1fZGVsZXRpb25IYXNCZWd1bik7CisKKyAgICBlbGVt
ZW50LT5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5yZW1vdmVQcm9wZXJ0eShp
ZCk7CisgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlKCk7Cit9CisKK3ZvaWQgU1ZHQXR0cmli
dXRlQW5pbWF0b3I6OnJlbW92ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eShTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KQoreworICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKyAgICBBU1NFUlQobV9h
dHRyaWJ1dGVOYW1lICE9IGFueVFOYW1lKCkpOworCisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxs
eSBuZWVkIHRvIGNoZWNrIGJvdGggaXNDb25uZWN0ZWQgYW5kICFwYXJlbnROb2RlPworICAgIGlm
ICghdGFyZ2V0RWxlbWVudC0+aXNDb25uZWN0ZWQoKSB8fCAhdGFyZ2V0RWxlbWVudC0+cGFyZW50
Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY3NzUHJv
cGVydHlJRChtX2F0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOworCisgICAgU1ZHRWxlbWVudDo6
SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIoKnRhcmdldEVsZW1lbnQpOworICAgIHJlbW92
ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBpZCk7CisKKyAgICAvLyBJZiB0
aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwgdy9v
IHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgorICAgIGZvciAoYXV0byog
aW5zdGFuY2UgOiB0YXJnZXRFbGVtZW50LT5pbnN0YW5jZXMoKSkKKyAgICAgICAgcmVtb3ZlQW5p
bWF0ZWRTdHlsZVByb3BlcnR5KGluc3RhbmNlLCBpZCk7Cit9CisgICAgCiB2b2lkIFNWR0F0dHJp
YnV0ZUFuaW1hdG9yOjphcHBseUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVudCogZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBBU1NFUlQo
IWVsZW1lbnQtPm1fZGVsZXRpb25IYXNCZWd1bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmgJKHJldmlzaW9uIDI0
MzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDggKzc0LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKSBjb25zdCB7IHJldHVybiAtMTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlBbmltYXRlZFN0eWxlUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVudCosIENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIHJlbW92
ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eShTVkdFbGVtZW50KiwgQ1NTUHJvcGVydHlJRCk7CiAgICAg
c3RhdGljIHZvaWQgYXBwbHlBbmltYXRlZFByb3BlcnR5Q2hhbmdlKFNWR0VsZW1lbnQqLCBjb25z
dCBRdWFsaWZpZWROYW1lJik7Ci0KKyAgICAKKyAgICB2b2lkIGFwcGx5QW5pbWF0ZWRTdHlsZVBy
b3BlcnR5Q2hhbmdlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lk
IHJlbW92ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eShTVkdFbGVtZW50Kik7CiAgICAgdm9pZCBhcHBs
eUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVudCopOwogCiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbV9hdHRyaWJ1dGVOYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcmltaXRp
dmVQcm9wZXJ0eUFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlNWR1Byb3BlcnR5QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTVkdQcm9wZXJ0
eVRyYWl0cy5oIgorI2luY2x1ZGUgIlNWR1ZhbHVlUHJvcGVydHkuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm9wZXJ0eVR5cGUsIHR5cGVuYW1lIEFuaW1h
dGlvbkZ1bmN0aW9uPgorY2xhc3MgU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvciA6IHB1Ymxp
YyBTVkdQcm9wZXJ0eUFuaW1hdG9yPEFuaW1hdGlvbkZ1bmN0aW9uPiB7CisgICAgdXNpbmcgQmFz
ZSA9IFNWR1Byb3BlcnR5QW5pbWF0b3I8QW5pbWF0aW9uRnVuY3Rpb24+OworICAgIHVzaW5nIFZh
bHVlUHJvcGVydHlUeXBlID0gU1ZHVmFsdWVQcm9wZXJ0eTxQcm9wZXJ0eVR5cGU+OworICAgIHVz
aW5nIEJhc2U6OkJhc2U7CisgICAgdXNpbmcgQmFzZTo6YXBwbHlBbmltYXRlZFN0eWxlUHJvcGVy
dHlDaGFuZ2U7CisgICAgdXNpbmcgQmFzZTo6Y29tcHV0ZUNTU1Byb3BlcnR5VmFsdWU7CisgICAg
dXNpbmcgQmFzZTo6bV9hdHRyaWJ1dGVOYW1lOworICAgIHVzaW5nIEJhc2U6Om1fZnVuY3Rpb247
CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUsIFJlZjxTVkdQcm9wZXJ0eT4mJiBwcm9wZXJ0eSwgQW5pbWF0aW9u
TW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVk
LCBib29sIGlzQWRkaXRpdmUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yPihhdHRyaWJ1dGVOYW1lLCBXVEZNb3ZlKHBy
b3BlcnR5KSwgYW5pbWF0aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRp
dmUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lLCBSZWY8U1ZHUHJvcGVydHk+JiYgcHJvcGVydHksIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBCYXNlKGF0dHJpYnV0ZU5hbWUsIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pCisgICAgICAgICwgbV9wcm9wZXJ0eShzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8VmFsdWVQcm9wZXJ0eVR5cGU+KFdURk1vdmUocHJvcGVydHkpKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBzdGFydChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgU3RyaW5nIGJhc2VWYWx1ZSA9IGNvbXB1dGVDU1NQcm9wZXJ0eVZh
bHVlKHRhcmdldEVsZW1lbnQsIGNzc1Byb3BlcnR5SUQobV9hdHRyaWJ1dGVOYW1lLmxvY2FsTmFt
ZSgpKSk7CisgICAgICAgIG1fcHJvcGVydHktPnNldFZhbHVlKFNWR1Byb3BlcnR5VHJhaXRzPFBy
b3BlcnR5VHlwZT46OmZyb21TdHJpbmcoYmFzZVZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBw
cm9ncmVzcyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBmbG9hdCBwZXJjZW50YWdlLCB1bnNp
Z25lZCByZXBlYXRDb3VudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFByb3BlcnR5VHlwZSYg
YW5pbWF0ZWQgPSBtX3Byb3BlcnR5LT52YWx1ZSgpOworICAgICAgICBtX2Z1bmN0aW9uLnByb2dy
ZXNzKHRhcmdldEVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBhbmltYXRlZCk7Cisg
ICAgfQorCisgICAgdm9pZCBhcHBseShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYXBwbHlBbmltYXRlZFN0eWxlUHJvcGVydHlDaGFuZ2UodGFyZ2V0
RWxlbWVudCwgU1ZHUHJvcGVydHlUcmFpdHM8UHJvcGVydHlUeXBlPjo6dG9TdHJpbmcobV9wcm9w
ZXJ0eS0+dmFsdWUoKSkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlZjxWYWx1ZVByb3Bl
cnR5VHlwZT4gbV9wcm9wZXJ0eTsKK307CisgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1ByaW1pdGl2ZVByb3BlcnR5
QW5pbWF0b3JJbXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvckltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgU1ZHQ29sb3JBbmltYXRvciA9IFNWR1ByaW1pdGl2ZVByb3BlcnR5
QW5pbWF0b3I8Q29sb3IsIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24+OworCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eUFuaW1hdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlBbmltYXRv
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1By
b3BlcnR5QW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1By
b3BlcnR5UGFyc2VyLmgiCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3RlbXBsYXRl
PHR5cGVuYW1lIEFuaW1hdGlvbkZ1bmN0aW9uPgorY2xhc3MgU1ZHUHJvcGVydHlBbmltYXRvciA6
IHB1YmxpYyBTVkdBdHRyaWJ1dGVBbmltYXRvciB7CitwdWJsaWM6CisgICAgYm9vbCBpc0Rpc2Ny
ZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mdW5jdGlvbi5pc0Rpc2NyZXRlKCk7IH0K
KworICAgIHZvaWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fZnVuY3Rpb24uc2V0RnJvbUFuZFRvVmFsdWVzKHRhcmdldEVsZW1lbnQsIGFkanVz
dEZvckluaGVyaXRhbmNlKHRhcmdldEVsZW1lbnQsIGZyb20pLCBhZGp1c3RGb3JJbmhlcml0YW5j
ZSh0YXJnZXRFbGVtZW50LCB0bykpOworICAgIH0KKworICAgIHZvaWQgc2V0RnJvbUFuZEJ5VmFs
dWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3Qg
U3RyaW5nJiBieSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24uc2V0RnJvbUFu
ZEJ5VmFsdWVzKHRhcmdldEVsZW1lbnQsIGZyb20sIGJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24uc2V0VG9BdEVuZE9mRHVyYXRpb25W
YWx1ZSh0b0F0RW5kT2ZEdXJhdGlvbik7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFNWR1Byb3BlcnR5QW5pbWF0b3IoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgICAgICA6IFNWR0F0dHJpYnV0ZUFuaW1hdG9yKGF0dHJpYnV0ZU5hbWUpCisgICAgICAgICwg
bV9mdW5jdGlvbihzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHJlbW92ZUFuaW1hdGVkU3R5bGVQcm9wZXJ0eSh0YXJnZXRFbGVt
ZW50KTsKKyAgICB9CisKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9mdW5jdGlvbi5jYWxjdWxhdGVEaXN0
YW5jZSh0YXJnZXRFbGVtZW50LCBmcm9tLCB0byk7CisgICAgfQorCisgICAgU3RyaW5nIGFkanVz
dEZvckluaGVyaXRhbmNlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
dmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbWljU3RyaW5nPiBpbmhlcml0KCJpbmhlcml0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIHJldHVybiB2YWx1ZSA9PSBpbmhlcml0ID8gY29tcHV0ZUlu
aGVyaXRlZENTU1Byb3BlcnR5VmFsdWUodGFyZ2V0RWxlbWVudCkgOiB2YWx1ZTsKKyAgICB9CisK
KyAgICBTdHJpbmcgY29tcHV0ZUNTU1Byb3BlcnR5VmFsdWUoU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCwgQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJn
ZXRFbGVtZW50KTsKKworICAgICAgICAvLyBEb24ndCBpbmNsdWRlIGFueSBwcm9wZXJ0aWVzIHJl
c3VsdGluZyBmcm9tIENTUyBUcmFuc2l0aW9ucy9BbmltYXRpb25zIG9yIFNNSUwgYW5pbWF0aW9u
cywgYXMgd2Ugd2FudCB0byByZXRyaWV2ZSB0aGUgImJhc2UgdmFsdWUiLgorICAgICAgICB0YXJn
ZXRFbGVtZW50LT5zZXRVc2VPdmVycmlkZUNvbXB1dGVkU3R5bGUodHJ1ZSk7CisgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKHRhcmdldEVsZW1l
bnQpLnByb3BlcnR5VmFsdWUoaWQpOworICAgICAgICB0YXJnZXRFbGVtZW50LT5zZXRVc2VPdmVy
cmlkZUNvbXB1dGVkU3R5bGUoZmFsc2UpOworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+
Y3NzVGV4dCgpIDogU3RyaW5nKCk7CisgICAgfQorCisgICAgU3RyaW5nIGNvbXB1dGVJbmhlcml0
ZWRDU1NQcm9wZXJ0eVZhbHVlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CisgICAgICAgIGF1dG8gcGFyZW50ID0g
bWFrZVJlZlB0cih0YXJnZXRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgICAgICAKKyAgICAgICAgU1ZHRWxlbWVudCYgc3ZnUGFyZW50ID0g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnBhcmVudCk7CisgICAgICAgIHJldHVybiBjb21wdXRlQ1NT
UHJvcGVydHlWYWx1ZSgmc3ZnUGFyZW50LCBjc3NQcm9wZXJ0eUlEKG1fYXR0cmlidXRlTmFtZS5s
b2NhbE5hbWUoKSkpOworICAgIH0KKworICAgIEFuaW1hdGlvbkZ1bmN0aW9uIG1fZnVuY3Rpb247
Cit9OworICAgIAorfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJv
cGVydHlBbmltYXRvckNyZWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eUFuaW1hdG9yQ3JlYXRvci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdO
YW1lcy5oIgorI2luY2x1ZGUgIlNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUHJvcGVydHlBbmltYXRvckNyZWF0b3Ig
eworcHVibGljOgorICAgIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yKCkgPSBkZWZhdWx0Owor
CisgICAgc3RhdGljIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUFuaW1hdG9yQ3Jl
YXRvcigpLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUuaW1wbCgpKTsKKyAgICB9CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwg
Q2FsY01vZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKQor
ICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGF0dHJpYnV0ZUFuaW1hdG9yQ3JlYXRvcigp
LmZpbmQoYXR0cmlidXRlTmFtZS5pbXBsKCkpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gYXR0
cmlidXRlQW5pbWF0b3JDcmVhdG9yKCkuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYXR0cmlidXRlUHJvcGVydHkuZW5zdXJl
KGF0dHJpYnV0ZU5hbWUsIFsmaXRlcmF0b3JdKCkgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZS5maXJzdCgpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWUuc2Vjb25kKGF0dHJpYnV0ZU5hbWUsIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuY29weVJlZigpLCBhbmltYXRpb25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRl
ZCwgaXNBZGRpdGl2ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmltYXRvcldpbGxCZURlbGV0ZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2F0dHJpYnV0ZVByb3BlcnR5LmZpbmQoYXR0cmlidXRlTmFtZSk7CisgICAg
ICAgIGlmIChpdGVyYXRvciA9PSBtX2F0dHJpYnV0ZVByb3BlcnR5LmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHJlZkNvdW50ID0gMSAoaW4gdGhlIGFuaW1hdG9y
KSArIDEgKGluIG1fYXR0cmlidXRlUHJvcGVydHkpID0gMiwgdGhlIGVudHJ5IGNhbiBiZSBkZWxl
dGVkLgorICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLT5yZWZDb3VudCgpID09IDIpCisgICAg
ICAgICAgICBtX2F0dHJpYnV0ZVByb3BlcnR5LnJlbW92ZShpdGVyYXRvcik7CisgICAgfQorCitw
cml2YXRlOgorICAgIC8vIFRoaXMgSGFzaE1hcCBtYXBzIGFuIGF0dHJpYnV0ZSBuYW1lIHRvIGEg
cGFpciBvZiBzdGF0aWMgbWV0aG9kcy4gVGhlIGZpcnN0IG9uZSBjcmVhdGVzIGEgc2hhcmVkCisg
ICAgLy8gUmVmPFNWR1Byb3BlcnR5PiBmb3IgdGhlIHZhbHVlIHR5cGUgb2YgdGhpcyBhdHRyaWJ1
dGUuIFRoZSBzZWNvbmQgY3JlYXRlcyB0aGUgYW5pbWF0b3IgZ2l2ZW4gdGhlCisgICAgLy8gYXR0
cmlidXRlIG5hbWUgYW5kIHRoZSBzaGFyZWQgUmVmPFNWR1Byb3BlcnR5Pi4KKyAgICB1c2luZyBB
dHRyaWJ1dGVBbmltYXRvckNyZWF0b3IgPSBIYXNoTWFwPAorICAgICAgICBRdWFsaWZpZWROYW1l
OjpRdWFsaWZpZWROYW1lSW1wbCosCisgICAgICAgIHN0ZDo6cGFpcjwKKyAgICAgICAgICAgIHN0
ZDo6ZnVuY3Rpb248UmVmPFNWR1Byb3BlcnR5PigpPiwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rp
b248c3RkOjp1bmlxdWVfcHRyPFNWR0F0dHJpYnV0ZUFuaW1hdG9yPihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgUmVmPFNWR1Byb3BlcnR5PiYmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9kZSwgYm9vbCwg
Ym9vbCk+CisgICAgICAgID4KKyAgICA+OworCisgICAgc3RhdGljIGF1dG8gY3JlYXRlQ29sb3JB
bmltYXRvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBSZWY8U1ZHUHJvcGVy
dHk+JiYgcHJvcGVydHksIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUgY2Fs
Y01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFNWR0NvbG9yQW5pbWF0b3I6OmNyZWF0ZShhdHRyaWJ1dGVOYW1lLCBXVEZNb3Zl
KHByb3BlcnR5KSwgYW5pbWF0aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRk
aXRpdmUpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBBdHRyaWJ1dGVBbmltYXRvckNyZWF0
b3ImIGF0dHJpYnV0ZUFuaW1hdG9yQ3JlYXRvcigpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXR0cmlidXRlQW5pbWF0b3JDcmVhdG9yPiBtYXAgPSBBdHRyaWJ1dGVBbmlt
YXRvckNyZWF0b3IoeworICAgICAgICAgICAgeyBTVkdOYW1lczo6Y29sb3JBdHRyLT5pbXBsKCks
ICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKFNWR1ZhbHVlUHJvcGVydHk8Q29sb3I+OjpjcmVhdGUs
IFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOjpjcmVhdGVDb2xvckFuaW1hdG9yKSB9LAorICAg
ICAgICAgICAgeyBTVkdOYW1lczo6ZmlsbEF0dHItPmltcGwoKSwgICAgICAgICAgIHN0ZDo6bWFr
ZV9wYWlyKFNWR1ZhbHVlUHJvcGVydHk8Q29sb3I+OjpjcmVhdGUsIFNWR1Byb3BlcnR5QW5pbWF0
b3JDcmVhdG9yOjpjcmVhdGVDb2xvckFuaW1hdG9yKSB9LAorICAgICAgICAgICAgeyBTVkdOYW1l
czo6Zmxvb2RfY29sb3JBdHRyLT5pbXBsKCksICAgIHN0ZDo6bWFrZV9wYWlyKFNWR1ZhbHVlUHJv
cGVydHk8Q29sb3I+OjpjcmVhdGUsIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOjpjcmVhdGVD
b2xvckFuaW1hdG9yKSB9LAorICAgICAgICAgICAgeyBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JB
dHRyLT5pbXBsKCksIHN0ZDo6bWFrZV9wYWlyKFNWR1ZhbHVlUHJvcGVydHk8Q29sb3I+OjpjcmVh
dGUsIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOjpjcmVhdGVDb2xvckFuaW1hdG9yKSB9LAor
ICAgICAgICAgICAgeyBTVkdOYW1lczo6c3RvcF9jb2xvckF0dHItPmltcGwoKSwgICAgIHN0ZDo6
bWFrZV9wYWlyKFNWR1ZhbHVlUHJvcGVydHk8Q29sb3I+OjpjcmVhdGUsIFNWR1Byb3BlcnR5QW5p
bWF0b3JDcmVhdG9yOjpjcmVhdGVDb2xvckFuaW1hdG9yKSB9LAorICAgICAgICAgICAgeyBTVkdO
YW1lczo6c3Ryb2tlQXR0ci0+aW1wbCgpLCAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKFNWR1ZhbHVl
UHJvcGVydHk8Q29sb3I+OjpjcmVhdGUsIFNWR1Byb3BlcnR5QW5pbWF0b3JDcmVhdG9yOjpjcmVh
dGVDb2xvckFuaW1hdG9yKSB9LAorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAg
ICB9CisKKyAgICB1c2luZyBBdHRyaWJ1dGVQcm9wZXJ0eSA9IEhhc2hNYXA8UXVhbGlmaWVkTmFt
ZSwgUmVmPFNWR1Byb3BlcnR5Pj47CisgICAgQXR0cmlidXRlUHJvcGVydHkgbV9hdHRyaWJ1dGVQ
cm9wZXJ0eTsKK307CisgICAgCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>