<?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>203252</bug_id>
          
          <creation_ts>2019-10-22 09:20:57 -0700</creation_ts>
          <short_desc>Move MatchResult and related types out of StyleResolver</short_desc>
          <delta_ts>2019-10-24 01:19:13 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1582393</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-22 09:20:57 -0700</bug_when>
    <thetext>Reverse the dependency between StyleResolver and ElementRuleCollector. The former should depend on the latter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582394</commentid>
    <comment_count>1</comment_count>
      <attachid>381552</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-22 09:21:21 -0700</bug_when>
    <thetext>Created attachment 381552
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582480</commentid>
    <comment_count>2</comment_count>
      <attachid>381579</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-22 12:05:31 -0700</bug_when>
    <thetext>Created attachment 381579
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582486</commentid>
    <comment_count>3</comment_count>
      <attachid>381581</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-22 12:29:34 -0700</bug_when>
    <thetext>Created attachment 381581
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582774</commentid>
    <comment_count>4</comment_count>
      <attachid>381667</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-23 02:23:47 -0700</bug_when>
    <thetext>Created attachment 381667
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582775</commentid>
    <comment_count>5</comment_count>
      <attachid>381668</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-23 02:49:16 -0700</bug_when>
    <thetext>Created attachment 381668
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582791</commentid>
    <comment_count>6</comment_count>
      <attachid>381675</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-23 04:31:36 -0700</bug_when>
    <thetext>Created attachment 381675
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582930</commentid>
    <comment_count>7</comment_count>
      <attachid>381675</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-10-23 11:54:27 -0700</bug_when>
    <thetext>Comment on attachment 381675
patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        The desired cascade level is indicated with en enum instead of a range.

Typo: en enum.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:130
&gt;      if (!isCacheable)
&gt;          m_result.isCacheable = false;

I think these two lines should be moved before addMatchedProperties() above because if isCacheable is false, addMatchedProperties() should try to fix m_result.isCacheable.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:622
&gt; +    if (matchedProperties.styleScopeOrdinal != Style::ScopeOrdinal::Element)
&gt; +        m_result.isCacheable = false;
&gt; +
&gt; +    if (m_result.isCacheable) {

Maybe the part of fixing the m_result.isCacheable deserves its own function. 

    m_result.isCacheable = fixIsCacheable(matchedProperties);
    switch (declarationOrigin) {
        ...
    }

I think it can be even be a static. It will also save lines by early returns instead of setting m_result.isCacheable = false; break; below.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:632
&gt; +            if (!current.isInherited()) {

Can we flip the condition and continue:

if (current.isInherited())
    continue;

&gt; Source/WebCore/css/StyleResolver.cpp:2255
&gt; +static auto&amp; declarationsForCascadeLevel(const MatchResult&amp; matchResult, CascadeLevel cascadeLevel)

This function can be added to MatchResult. It can be even a bracket operator. So instead of:

    declarationsForCascadeLevel(matchResult, cascadeLevel)

It can be

    matchResult[cascadeLevel]

&gt; Source/WebCore/css/StyleResolver.h:421
&gt; +        Vector&lt;MatchedProperties&gt; userAgentDeclarations;
&gt; +        Vector&lt;MatchedProperties&gt; userDeclarations;
&gt; +        Vector&lt;MatchedProperties&gt; authorDeclarations;

Can&apos;t we replace these member by just one MatchResult?  I think all what we do with these members is assigning their values from a MatchResult and comparing them with a MatchResult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583234</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-23 22:32:28 -0700</bug_when>
    <thetext>&gt; This function can be added to MatchResult. ]

I actually had that but it requires some further refactoring (moving CascadeLevel enum). I decided I need to stop at some point.

&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.h:421
&gt; &gt; +        Vector&lt;MatchedProperties&gt; userAgentDeclarations;
&gt; &gt; +        Vector&lt;MatchedProperties&gt; userDeclarations;
&gt; &gt; +        Vector&lt;MatchedProperties&gt; authorDeclarations;
&gt; 
&gt; Can&apos;t we replace these member by just one MatchResult?  I think all what we
&gt; do with these members is assigning their values from a MatchResult and
&gt; comparing them with a MatchResult.

Almost, the issue is that MatchResult has large inline capacity for these (it is a temporary type used during collection) while cache entries have none (they are long-lived and immutable).

Making that work requires either templating MatchResult or proving that inline capacity is unnecessary (it probably is) which is best left for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583253</commentid>
    <comment_count>9</comment_count>
      <attachid>381781</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-24 00:08:02 -0700</bug_when>
    <thetext>Created attachment 381781
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583265</commentid>
    <comment_count>10</comment_count>
      <attachid>381781</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-24 01:18:43 -0700</bug_when>
    <thetext>Comment on attachment 381781
patch

Clearing flags on attachment: 381781

Committed r251532: &lt;https://trac.webkit.org/changeset/251532&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583266</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-24 01:18:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583267</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-24 01:19:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/56571489&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381552</attachid>
            <date>2019-10-22 09:21:21 -0700</date>
            <delta_ts>2019-10-22 12:05:31 -0700</delta_ts>
            <desc>wip</desc>
            <filename>matchresult-out-of-resolver.patch</filename>
            <type>text/plain</type>
            <size>42006</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyYTU5
ZDIxMTEwLi5iNmZiYWRiMGExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0CiAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCitN
YXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoZWRSZXN1bHQoKQogewogICAg
IEFTU0VSVChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CiAgICAgcmV0dXJuIG1fcmVzdWx0OwpAQCAtMTI0LDE0ICsxMjQsOCBAQCBpbmxpbmUgdm9pZCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnRpZQogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgIT0gLTEpCi0gICAgICAgICsrbV9y
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGVsc2UgewotICAgICAgICBtX3Jlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNp
emUoKTsKLSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IG1fcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICB9CisgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
eyBwcm9wZXJ0eVNldCB9LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9yKTsKIAotICAgIG1fcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKCpwcm9wZXJ0eVNldCk7CiAgICAgaWYgKCFpc0NhY2hl
YWJsZSkKICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKIH0KQEAgLTE3OCwy
MiArMTcyLDYgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVs
ZXMoRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpIDw9IG1fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4gPSBbJl0oKSB7Ci0gICAgICAg
IHN3aXRjaCAoZGVjbGFyYXRpb25PcmlnaW4pIHsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9y
aWdpbjo6VXNlckFnZW50OiByZXR1cm4gbV9yZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjogcmV0dXJuIG1fcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9yaWdpbjo6
VXNlcjogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5y
YW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgfSgpOwotCi0gICAgLy8gRklYTUU6IFJhbmdl
IHVwZGF0aW5nIHNob3VsZCBiZSBkb25lIGJ5IE1hdGNoUmVzdWx0cyB0eXBlCi0gICAgLy8gRklY
TUU6IE1hdGNoUmVzdWx0cyBzaG91bGRuJ3QgYmUgaW4gU3R5bGVSZXNvbHZlciBuYW1lc3BhY2Uu
Ci0gICAgYm9vbCB1cGRhdGVSYW5nZXMgPSBtX21vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpDb2xsZWN0aW5nUnVsZXM7Ci0gICAgaWYgKHVwZGF0ZVJhbmdlcyAmJiByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAgICByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID0gbV9yZXN1bHQubWF0Y2hlZFJ1bGVzLnNpemUo
KTsKLQogICAgIGZvciAoOyBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgKyttX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkgewogICAgICAgICBhdXRv
JiBtYXRjaGVkUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4
XTsKICAgICAgICAgaWYgKGZyb21TY29wZSAmJiBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5h
bCA8ICpmcm9tU2NvcGUpCkBAIC0yMDQsMTEgKzE4MiwxMyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29s
bGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiBkZWNsYXJhdGlv
bk9yaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3Vs
dC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCksIG1hdGNoZWRSdWxlLnJ1bGVE
YXRhLT5saW5rTWF0Y2hUeXBlKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRl
bGlzdFR5cGUoKSwgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICBhZGRN
YXRjaGVkUHJvcGVydGllcyh7CisgICAgICAgICAgICAmbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnJ1
bGUoKS0+cHJvcGVydGllcygpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1h
dGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCkpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSksCisgICAgICAgICAgICBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5hbAorICAgICAg
ICB9LCBkZWNsYXJhdGlvbk9yaWdpbik7CiAgICAgfQotCi0gICAgaWYgKHVwZGF0ZVJhbmdlcykK
LSAgICAgICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5sYXN0UnVsZUluZGV4ID0gbV9yZXN1
bHQubWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7CiB9CiAKIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0
b3I6Om1hdGNoQXV0aG9yUnVsZXMoKQpAQCAtNTg2LDkgKzU2NiwxMCBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBib29sIGluYwogCiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLmRpcmVj
dGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBhdXRv
IHRleHREaXJlY3Rpb24gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIGF1
dG8mIHByb3BlcnRpZXMgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxl
ZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKTsKICAgICAg
ICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFBy
b3BlcnRpZXModGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25Pcmln
aW46OkF1dGhvcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MzMsNCArNjE0LDU3IEBA
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc0FueU1hdGNoaW5nUnVsZXMoY29uc3QgUnVs
ZVNldCogcnVsZVNldCkKICAgICByZXR1cm4gIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKTsKIH0K
IAordm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hl
ZFByb3BlcnRpZXMmJiBtYXRjaGVkUHJvcGVydGllcywgRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFy
YXRpb25PcmlnaW4pCit7CisgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRp
bmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpCisgICAgICAgIG1fcmVzdWx0Lmlz
Q2FjaGVhYmxlID0gZmFsc2U7CisKKyAgICBpZiAobV9yZXN1bHQuaXNDYWNoZWFibGUpIHsKKyAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBw
cm9wZXJ0eSBjYWNoZSBvbmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNv
bHZlCisgICAgICAgICAgICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCisgICAgICAgICAgICAvLyBI
ZXJlIHdlIGRlZmluZSBzb21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21l
IHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGluaGVyaXRlZAorICAgICAgICAgICAgLy8gYnkgZGVm
YXVsdC4gSWYgdGhvc2UgZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBp
dCBzaG91bGQgYmUgcG9zc2libGUKKyAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBl
eGNlcHRpb24gdG8gcmVzb2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBj
YWNoZS4KKworICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBj
dXJyZW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkg
dmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBu
b24taW5oZXJpdGVkIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0
IG92ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRv
bid0IGFsbG93IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlID0gKmN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNJbmhlcml0ZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVz
dWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29s
b3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBzYW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBjb2xvciwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0
ZWQgdmFsdWUsIG1ha2luZyB0aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGlu
aGVyaXRlZC4KKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC5pc0NhY2hl
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChkZWNsYXJhdGlvbk9yaWdpbikgewor
ICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDoKKyAgICAgICAgbV9yZXN1bHQu
dXNlckFnZW50RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjoKKyAg
ICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQ
cm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46
OlVzZXI6CisgICAgICAgIG1fcmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bWF0Y2hlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
CmluZGV4IDFkZGJmZWE5YzNhLi5iODc1OGQwOTI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk1lZGlh
UXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1l
bW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMzYsMTIgKzM2LDQwIEBAIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNz
IFNlbGVjdG9yRmlsdGVyOwogCitjbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgeworcHVibGljOgor
ICAgIFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVT
Y3JvbGxiYXJTdGF0ZT4gc2Nyb2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCisgICAgICAgIDog
cHNldWRvSWQocHNldWRvSWQpCisgICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3Rh
dGUpCisgICAgeworICAgIH0KKworICAgIFBzZXVkb0lkIHBzZXVkb0lkOworICAgIE9wdGlvbmFs
PFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlOworfTsKKwogc3RydWN0IE1hdGNo
ZWRSdWxlIHsKICAgICBjb25zdCBSdWxlRGF0YSogcnVsZURhdGE7Ci0gICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHk7ICAgCisgICAgdW5zaWduZWQgc3BlY2lmaWNpdHk7CiAgICAgU3R5bGU6OlNjb3Bl
T3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKIH07CiAKK3N0cnVjdCBNYXRjaGVkUHJvcGVydGll
cyB7CisgICAgUmVmUHRyPGNvbnN0IFN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllczsKKyAgICB1
aW50MTZfdCBsaW5rTWF0Y2hUeXBlIHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCB9OworICAg
IHVpbnQxNl90IHdoaXRlbGlzdFR5cGUgeyBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUgfTsKKyAgICBT
dHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsIHsgU3R5bGU6OlNjb3BlT3JkaW5h
bDo6RWxlbWVudCB9OworfTsKKworc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAgICBib29sIGlzQ2Fj
aGVhYmxlIHsgdHJ1ZSB9OworICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IHVzZXJB
Z2VudERlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiBhdXRo
b3JEZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gdXNlckRl
Y2xhcmF0aW9uczsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJBZ2Vu
dERlY2xhcmF0aW9ucy5pc0VtcHR5KCkgJiYgYXV0aG9yRGVjbGFyYXRpb25zLmlzRW1wdHkoKSAm
JiB1c2VyRGVjbGFyYXRpb25zLmlzRW1wdHkoKTsgfQorfTsKKwogY2xhc3MgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgewogcHVibGljOgogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yKGNvbnN0IEVsZW1l
bnQmLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqKTsKQEAg
LTYyLDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1bGVzKGNv
bnN0IFJ1bGVTZXQqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVk
UmVzdWx0KCk7CisgICAgTWF0Y2hSZXN1bHQmIG1hdGNoZWRSZXN1bHQoKTsKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZUxpc3QoKSBjb25zdDsKIAogICAg
IHZvaWQgY2xlYXJNYXRjaGVkUnVsZXMoKTsKQEAgLTk5LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiwgT3B0aW9uYWw8
U3R5bGU6OlNjb3BlT3JkaW5hbD4gZm9yU2NvcGUgPSB7IH0pOwogCiAgICAgdm9pZCBhZGRNYXRj
aGVkUnVsZShjb25zdCBSdWxlRGF0YSYsIHVuc2lnbmVkIHNwZWNpZmljaXR5LCBTdHlsZTo6U2Nv
cGVPcmRpbmFsKTsKKyAgICB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoZWRQcm9wZXJ0
aWVzJiYsIERlY2xhcmF0aW9uT3JpZ2luKTsKIAogICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIApAQCAtMTIzLDkgKzE1MiwxOSBA
QCBwcml2YXRlOgogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+
IG1fbWF0Y2hlZFJ1bGVMaXN0OwogICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IgeyBmYWxzZSB9OwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0IG1fcmVz
dWx0OworICAgIE1hdGNoUmVzdWx0IG1fcmVzdWx0OwogICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9z
dHlsZVJlbGF0aW9uczsKICAgICBQc2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRz
OwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYg
YSwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuIGEucHJvcGVydGll
cyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgYSwg
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHAKaW5kZXggYTI4NDUwYThmYWMuLjA3NDgzZGY2Y2YyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBQYWdlUnVs
ZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0YKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4o
KSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJv
cGVydGllcygpKTsKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7
ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29s
IGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKaW5kZXggNzgzOTg3MTYyYjAu
LjExNDUxMDdhNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ydWxlU2V0cyhydWxlU2V0cykgeyB9
CiAKICAgICB2b2lkIG1hdGNoQWxsUGFnZVJ1bGVzKGludCBwYWdlSW5kZXgpOwotICAgIFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVkUmVzdWx0KCkgeyByZXR1cm4gbV9yZXN1bHQ7
IH0KKyAgICBNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwpA
QCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBtX3N0YXRlOwogICAgIERvY3VtZW50UnVsZVNldHMmIG1fcnVsZVNldHM7CiAKLSAgICBTdHls
ZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBNYXRjaFJlc3VsdCBtX3Jlc3Vs
dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAppbmRleCBjNWYxYmMzZTA0Ni4uY2UyOGZhOTgyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVy
dHkgKyAxKTsKIAotc3RhdGljIHZvaWQgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmLCBUZXh0
RGlyZWN0aW9uJiwgV3JpdGluZ01vZGUmKTsKK3N0YXRpYyB2b2lkIGV4dHJhY3REaXJlY3Rpb25B
bmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4
dERpcmVjdGlvbiYsIFdyaXRpbmdNb2RlJik7CiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQogewpAQCAtMTM5LDU0ICsxMzksNiBA
QCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQogICAgIG1fY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUsIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCi17Ci0gICAgbV9tYXRj
aGVkUHJvcGVydGllcy5ncm93KG1fbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIG5ld1Byb3BlcnRpZXMgPSBtX21hdGNo
ZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBjb25z
dF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KCZwcm9wZXJ0aWVzKTsKLSAgICBuZXdQcm9wZXJ0aWVz
LmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAgIG5ld1Byb3BlcnRpZXMud2hpdGVs
aXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLnN0eWxl
U2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7Ci0gICAgbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsKLQotICAgIGlmIChzdHlsZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRp
bmFsOjpFbGVtZW50KQotICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotCi0gICAgaWYgKGlz
Q2FjaGVhYmxlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gcHJvcGVy
dGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBD
dXJyZW50bHkgdGhlIHByb3BlcnR5IGNhY2hlIG9ubHkgY29weSB0aGUgbm9uLWluaGVyaXRlZCB2
YWx1ZXMgYW5kIHJlc29sdmUKLSAgICAgICAgICAgIC8vIHRoZSBpbmhlcml0ZWQgb25lcy4KLSAg
ICAgICAgICAgIC8vIEhlcmUgd2UgZGVmaW5lIHNvbWUgZXhjZXB0aW9uIHdlcmUgd2UgaGF2ZSB0
byByZXNvbHZlIHNvbWUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgaW5oZXJpdGVkCi0gICAgICAg
ICAgICAvLyBieSBkZWZhdWx0LiBJZiB0aG9zZSBleGNlcHRpb25zIGJlY29tZSB0b28gY29tbW9u
IG9uIHRoZSB3ZWIsIGl0IHNob3VsZCBiZSBwb3NzaWJsZQotICAgICAgICAgICAgLy8gdG8gYnVp
bGQgYSBsaXN0IG9mIGV4Y2VwdGlvbiB0byByZXNvbHZlIGluc3RlYWQgb2YgY29tcGxldGVseSBk
aXNhYmxpbmcgdGhlIGNhY2hlLgotCi0gICAgICAgICAgICBTdHlsZVByb3BlcnRpZXM6OlByb3Bl
cnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLnByb3BlcnR5QXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQuaXNJbmhlcml0ZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBh
cHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8v
IGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhp
cyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgICAg
ICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAg
ICAgICAgICAgICBjb25zdCBDU1NWYWx1ZSYgdmFsdWUgPSAqY3VycmVudC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0luaGVyaXRlZFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGN1cnJl
bnRDb2xvciBoYXMgaW1wbGljaXRlbHkgdGhlIHNhbWUgc2lkZSBlZmZlY3QuIEl0IGRlcGVuZHMg
b24gdGhlIHZhbHVlIG9mIGNvbG9yLAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIGFuIGlu
aGVyaXRlZCB2YWx1ZSwgbWFraW5nIHRoZSBub24taW5oZXJpdGVkIHByb3BlcnR5IGltcGxpY2l0
bHkgaW5oZXJpdGVkLgotICAgICAgICAgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09
IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIDogbV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZVN3ZWVwVGltZXIoKnRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUpCkBAIC0yNzYsMTkgKzIyOCwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVw
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4g
ZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlu
bGluZVN0eWxlKCkKICAgICAvLyBvciBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3Rl
bnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBv
bmUuCiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4o
KTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52
YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQ
cm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAg
dG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZv
ciAoYXV0byBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5iZWdpbigpLCBlbmQgPSBtX21h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBh
dXRvIGZpbmRFbnRyaWVzV2l0aE9uZVJlZiA9IFsmXShWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+
JiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbWF0Y2hlZFByb3BlcnRp
ZXMgOiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAg
YXV0byYgZW50cnkgPSBpdC0+dmFsdWU7CisgICAgICAgIGZpbmRFbnRyaWVzV2l0aE9uZVJlZihl
bnRyeS51c2VyQWdlbnREZWNsYXJhdGlvbnMpOworICAgICAgICBmaW5kRW50cmllc1dpdGhPbmVS
ZWYoZW50cnkuYXV0aG9yRGVjbGFyYXRpb25zKTsKKyAgICAgICAgZmluZEVudHJpZXNXaXRoT25l
UmVmKGVudHJ5LnVzZXJEZWNsYXJhdGlvbnMpOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICBmb3IgKGF1dG8gaW5kZXggOiB0b1JlbW92
ZSkKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZShpbmRleCk7CiAKICAg
ICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9
CkBAIC00MDcsNyArMzYyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworICAgIHJl
c3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJmtleWZyYW1lLT5wcm9wZXJ0aWVzKCkg
fSk7CiAKICAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUoKSk7CiAKQEAgLTQyNCw3ICszNzksNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIg
d2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVj
bCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJv
cGVydGllcy4KICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1h
dGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9
OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdo
UHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7CkBAIC01OTAsNyArNTQ1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYKIAogICAgIEFTU0VSVCghY29sbGVjdG9yLm1hdGNoZWRQc2V1ZG9F
bGVtZW50SWRzKCkpOwogCi0gICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCkubWF0Y2hl
ZFByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRlLnN0eWxl
KCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwpAQCAtNjIzLDE0
ICs1NzgsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBQYWdlUnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IobV9zdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVjdG9yLm1hdGNoQWxsUGFnZVJ1bGVz
KHBhZ2VJbmRleCk7CiAKLSAgICBNYXRjaFJlc3VsdCYgcmVzdWx0ID0gY29sbGVjdG9yLm1hdGNo
ZWRSZXN1bHQoKTsKKyAgICBhdXRvJiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgp
OwogCiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGU7CiAgICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxl
KCksIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKICAgICBDYXNjYWRlZFByb3Bl
cnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5v
cm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkg
LSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3Rh
dGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0
ZSk7CkBAIC0xMzE5LDM0ICsxMjc0LDExIEBAIHN0YXRpYyBib29sIGVsZW1lbnRUeXBlSGFzQXBw
ZWFyYW5jZUZyb21VQVN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIHx8IGxv
Y2FsTmFtZSA9PSBIVE1MTmFtZXM6Om1ldGVyVGFnOwogfQogCi11bnNpZ25lZCBTdHlsZVJlc29s
dmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUp
OwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMm
IGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQordW5zaWduZWQgU3R5bGVS
ZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGEuZmlyc3RVQVJ1bGUgPT0gYi5maXJzdFVBUnVs
ZQotICAgICAgICAmJiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0VUFSdWxlCi0gICAgICAgICYmIGEu
Zmlyc3RBdXRob3JSdWxlID09IGIuZmlyc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEubGFzdEF1
dGhvclJ1bGUgPT0gYi5sYXN0QXV0aG9yUnVsZQotICAgICAgICAmJiBhLmZpcnN0VXNlclJ1bGUg
PT0gYi5maXJzdFVzZXJSdWxlCi0gICAgICAgICYmIGEubGFzdFVzZXJSdWxlID09IGIubGFzdFVz
ZXJSdWxlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hS
YW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJl
dHVybiAhKGEgPT0gYik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYg
YS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsKLX0KLQotYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwor
ICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQudXNlckFnZW50
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5zaXplKCkpCisgICAgICAgIF4gU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5kYXRhKCksIHNpemVv
ZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuc2l6
ZSgpKQorICAgICAgICBeIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3VsdC51c2Vy
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnMuc2l6ZSgpKTsKIH0KIAogY29uc3QgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQpCkBAIC0xMzU2LDE3ICsxMjg4LDExIEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAg
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCi0gICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSAhPSBj
YWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKVtpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFBy
b3BlcnRpZXNbaV0pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYg
KGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgIGF1dG8mIGNhY2hl
SXRlbSA9IGl0LT52YWx1ZTsKKyAgICBpZiAobWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRp
b25zICE9IGNhY2hlSXRlbS51c2VyQWdlbnREZWNsYXJhdGlvbnMgfHwgbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zICE9IGNhY2hlSXRlbS5hdXRob3JEZWNsYXJhdGlvbnMgfHwgbWF0Y2hS
ZXN1bHQudXNlckRlY2xhcmF0aW9ucyAhPSBjYWNoZUl0ZW0udXNlckRlY2xhcmF0aW9ucykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gJmNhY2hlSXRlbTsKIH0KIApAQCAt
MTQyMyw3ICsxMzQ5LDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIFRleHREaXJlY3Rpb24mIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQor
dm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFRleHREaXJlY3Rpb24mIGRpcmVj
dGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQogewogICAgIGRpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIHdyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKQEAg
LTE0MzEsMjYgKzEzNTcsMjggQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKICAgICBib29sIGhh
ZEltcG9ydGFudFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgYm9vbCBoYWRJbXBvcnRhbnREaXJl
Y3Rpb24gPSBmYWxzZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMg
OiBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGNvdW50ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IG1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5QXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkuaWQoKSkgewotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgotICAgICAgICAgICAgICAgIGlmICgh
aGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqcHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdy
aXRpbmdNb2RlID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0
aW9uOgotICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3Bl
cnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsK
KyAgICBmb3IgKGF1dG8qIG1hdGNoZWREZWNsYXJhdGlvbnMgOiB7ICZtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnMsICZtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMsICZtYXRj
aFJlc3VsdC51c2VyRGVjbGFyYXRpb25zIH0pIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBt
YXRjaGVkUHJvcGVydGllcyA6ICptYXRjaGVkRGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMt
PnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHByb3BlcnR5ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChwcm9wZXJ0eS5pZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRp
bmdNb2RlOgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdyaXRpbmdNb2Rl
IHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdyaXRpbmdNb2RlID0gcHJv
cGVydHkuaXNJbXBvcnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9u
OgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9w
ZXJ0eS5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24g
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBv
cnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTQ1OSw3ICsxMzg3LDcgQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3Jp
dGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFNob3VsZFVzZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUgc2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKIHsKICAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVz
ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYgbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21w
dXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCku
ZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKSkgOiAwOworICAg
IHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYg
bWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1h
dGNoUmVzdWx0KSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAg
ICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gbnVsbHB0cjsK
ICAgICBpZiAoY2FjaGVIYXNoICYmIChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCkpCkBAIC0xNDkzLDggKzE0MjEsOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoKQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYg
dGhpcyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgogICAgICAgICBDYXNjYWRlZFBy
b3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgY2FzY2Fk
ZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyht
YXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAgICAg
ICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2Fk
ZSwgJm1hdGNoUmVzdWx0IH07CiAKQEAgLTE1MjAsMTAgKzE0NDgsMTIgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QKICAgICB9CiAKICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJl
Y3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFk
ZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFs
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2Nh
ZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2
ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVz
KG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTcxOSwxMCArMTY0OSwxMCBAQCBT
dHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVk
UHJvcGVydGllc0ZvclJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld0F1dGhvclJvbGxiYWNrKG1h
a2VVbmlxdWU8Q2FzY2FkZWRQcm9wZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAK
ICAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVs
ZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KLSAgICAgICAgbmV3QXV0aG9y
Um9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAg
ICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRN
YXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwor
ICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwg
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2Vy
TGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1h
dGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBmYWxzZSk7CisgICAg
ICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3RhdGUoKS5z
ZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBzdGF0
ZSgpLmF1dGhvclJvbGxiYWNrKCk7CkBAIC0xNzM2LDggKzE2NjYsOCBAQCBTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVkUHJvcGVydGllc0Zv
clJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld1VzZXJSb2xsYmFjayhtYWtlVW5pcXVlPENhc2Nh
ZGVkUHJvcGVydGllcz4oZGlyZWN0aW9uLCB3cml0aW5nTW9kZSkpOwogCiAgICAgICAgIC8vIFRo
aXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVsZXMuCi0gICAg
ICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
ZmFsc2UpOwotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0
Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3Jt
YWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxz
ZSk7CisgICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJl
c3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOwogCiAgICAgICAgIHN0
YXRlKCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBz
dGF0ZSgpLnVzZXJSb2xsYmFjaygpOwpAQCAtMjIxMCwxMCArMjE0MCw2IEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwg
RmlsdGVyT3BlcmF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllczo6TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7Ci0KLVN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRl
ZmF1bHQ7Ci0KIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkK
ICAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpCkBAIC0yMjk5LDIyICsyMjI1LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYKICAg
ICBtX2RlZmVycmVkUHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwogfQogCi1zdGF0aWMgQ2Fz
Y2FkZUxldmVsIGNhc2NhZGVMZXZlbEZvckluZGV4KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUgJiYgaW5kZXggPD0gbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUpCi0gICAgICAgIHJldHVybiBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVs
OwotICAgIGlmIChpbmRleCA+PSBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSAmJiBp
bmRleCA8PSBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlKQotICAgICAgICByZXR1cm4g
Q2FzY2FkZUxldmVsOjpVc2VyTGV2ZWw7Ci0gICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6QXV0aG9y
TGV2ZWw7Ci19CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIHVuc2lnbmVkIGluZGV4LCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNo
ZWRQcm9wZXJ0aWVzLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpW2luZGV4XTsKICAgICBhdXRvJiBzdHlsZVBy
b3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllczsKLQogICAgIGF1dG8gcHJv
cGVydHlXaGl0ZWxpc3RUeXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKTsKLSAgICBhdXRvIGNhc2NhZGVMZXZlbCA9
IGNhc2NhZGVMZXZlbEZvckluZGV4KG1hdGNoUmVzdWx0LCBpbmRleCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJvcGVydGllcy5w
cm9wZXJ0eUF0KGkpOwpAQCAtMjM0MiwxMyArMjI1NywyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LAogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6
OmFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCisKK3N0YXRpYyBhdXRv
JiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKQogewotICAgIGlmIChzdGFydEluZGV4ID09
IC0xKQotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAgICBj
YXNlIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnM7CisgICAgY2FzZSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOiBy
ZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworICAgIGNhc2UgQ2FzY2FkZUxl
dmVsOjpVc2VyTGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworfQogCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0g
ZW5kSW5kZXg7ICsraSkKLSAgICAgICAgYWRkTWF0Y2gobWF0Y2hSZXN1bHQsIGksIGZhbHNlLCBp
bmhlcml0ZWRPbmx5KTsKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
ZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAgIGZvciAoYXV0byYg
bWF0Y2hlZERlY2xhcmF0aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRjaFJl
c3VsdCwgY2FzY2FkZUxldmVsKSkKKyAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9u
cywgY2FzY2FkZUxldmVsLCBmYWxzZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKIHN0YXRpYyBib29s
IGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVz
KQpAQCAtMjM2MCwyMCArMjI4NCwxOSBAQCBzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJbXBvcnRh
bnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9u
bHkpCiB7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQogICAg
IHN0cnVjdCBJbmRleEFuZE9yZGluYWwgewotICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4OwogICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIG9yZGluYWw7CiAgICAg
fTsKICAgICBWZWN0b3I8SW5kZXhBbmRPcmRpbmFsPiBpbXBvcnRhbnRNYXRjaGVzOwogICAgIGJv
b2wgaGFzTWF0Y2hlc0Zyb21PdGhlclNjb3BlcyA9IGZhbHNlOwogCi0gICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcygpW2ldOworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNG
b3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZERlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaGVk
RGVjbGFyYXRpb25zW2ldOwogCiAgICAgICAgIGlmICghaGFzSW1wb3J0YW50UHJvcGVydGllcygq
bWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTIzOTYsNyArMjMxOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVz
OjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtCiAgICAgfQogCiAgICAg
Zm9yIChhdXRvJiBtYXRjaCA6IGltcG9ydGFudE1hdGNoZXMpCi0gICAgICAgIGFkZE1hdGNoKG1h
dGNoUmVzdWx0LCBtYXRjaC5pbmRleCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFk
ZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRlTGV2ZWwsIHRy
dWUsIGluaGVyaXRlZE9ubHkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllczo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIs
IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKaW5kZXggNTI5NDFiYTZiZDMuLmVkYzVmNTIxODhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50UnVsZVNldHMuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTk5LDE4ICsxMDAsNiBA
QCBlbnVtIGNsYXNzIENhc2NhZGVMZXZlbDogdWludDhfdCB7CiAgICAgVXNlckxldmVsCiB9Owog
Ci1jbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgewotcHVibGljOgotICAgIFBzZXVkb1N0eWxlUmVx
dWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0ZT4gc2Ny
b2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCi0gICAgICAgIDogcHNldWRvSWQocHNldWRvSWQp
Ci0gICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3RhdGUpCi0gICAgewotICAgIH0K
LQotICAgIFBzZXVkb0lkIHBzZXVkb0lkOwotICAgIE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3Rh
dGU+IHNjcm9sbGJhclN0YXRlOwotfTsKLQogc3RydWN0IEVsZW1lbnRTdHlsZSB7CiAgICAgRWxl
bWVudFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxTdHlsZTo6UmVsYXRpb25zPiByZWxhdGlvbnMgPSB7IH0pCiAgICAgICAgIDog
cmVuZGVyU3R5bGUoV1RGTW92ZShyZW5kZXJTdHlsZSkpCkBAIC0xNzUsOCArMTY0LDYgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogCiBwdWJsaWM6Ci0gICAgc3RydWN0IE1hdGNoUmVzdWx0
OwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKQEAgLTIyMSw0OCAr
MjA4LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDYWNoZWRQcm9wZXJ0aWVzQWZmZWN0ZWRC
eVZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25z
dCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0K
LSAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKLSAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4
KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KLSAgICAgICAgaW50JiBmaXJzdFJ1
bGVJbmRleDsKLSAgICAgICAgaW50JiBsYXN0UnVsZUluZGV4OwotICAgIH07Ci0KLSAgICBzdHJ1
Y3QgTWF0Y2hSYW5nZXMgewotICAgICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEp
LCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEp
LCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSB7IH0KLSAgICAgICAgaW50IGZp
cnN0VUFSdWxlOwotICAgICAgICBpbnQgbGFzdFVBUnVsZTsKLSAgICAgICAgaW50IGZpcnN0QXV0
aG9yUnVsZTsKLSAgICAgICAgaW50IGxhc3RBdXRob3JSdWxlOwotICAgICAgICBpbnQgZmlyc3RV
c2VyUnVsZTsKLSAgICAgICAgaW50IGxhc3RVc2VyUnVsZTsKLSAgICAgICAgUnVsZVJhbmdlIFVB
UnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsg
fQotICAgICAgICBSdWxlUmFuZ2UgYXV0aG9yUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdl
KGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOyB9Ci0gICAgICAgIFJ1bGVSYW5nZSB1
c2VyUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VXNlclJ1bGUsIGxhc3RVc2Vy
UnVsZSk7IH0KLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKLSAgICAg
ICAgTWF0Y2hlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgfk1hdGNoZWRQcm9wZXJ0aWVzKCk7Ci0g
ICAgICAgIAotICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzOwotICAg
ICAgICB1aW50MTZfdCBsaW5rTWF0Y2hUeXBlOwotICAgICAgICB1aW50MTZfdCB3aGl0ZWxpc3RU
eXBlOwotICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewotICAgICAgICBNYXRjaFJlc3VsdCgpIDog
aXNDYWNoZWFibGUodHJ1ZSkgeyB9Ci0gICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0
Y2hlZFJ1bGVzOwotICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIGJvb2wgaXND
YWNoZWFibGU7Ci0KLSAgICAgICAgY29uc3QgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4m
IG1hdGNoZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRjaGVkUHJvcGVydGllczsg
fQotCi0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiwgU3R5bGVSdWxlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUsIFN0eWxlOjpTY29wZU9yZGluYWwgPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpF
bGVtZW50KTsKLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMs
IDY0PiBtX21hdGNoZWRQcm9wZXJ0aWVzOwotICAgIH07CiAgICAgCiAgICAgY2xhc3MgQ2FzY2Fk
ZWRQcm9wZXJ0aWVzIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yODEs
OCArMjI2LDggQEAgcHVibGljOgogICAgICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQpIGNvbnN0OwogICAgICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgaW50IHN0
YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZl
bCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworICAgICAgICB2b2lkIGFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVk
T25seSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0
eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwogCkBAIC0yOTEsNyAr
MjM2LDcgQEAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9wZXJ0eShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgQ2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHkpOwogICAgICAgICB2b2lkIHNldChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVu
c2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7
CiAgICAgICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWws
IFN0eWxlOjpTY29wZU9yZGluYWwpOwpAQCAtMzM1LDE0ICsyODAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBjYXNjYWRlTWF0Y2hlcyhDYXNjYWRlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOwogCi0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYs
IFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpOwotICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHls
ZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYs
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSk7Ci0KLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShw
YWdlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
LSAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KICAgICBEb2N1bWVu
dFJ1bGVTZXRzIG1fcnVsZVNldHM7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKQEAgLTQ3
NywyMCArNDE0LDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0
Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6
ZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29u
c3QgTWF0Y2hSZXN1bHQmKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0g
ewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwot
ICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVy
dGllcz4gdXNlckFnZW50RGVjbGFyYXRpb25zOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3Bl
cnRpZXM+IGF1dGhvckRlY2xhcmF0aW9uczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0
aWVzPiB1c2VyRGVjbGFyYXRpb25zOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHJlbmRlclN0eWxlOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBh
cmVudFJlbmRlclN0eWxlOwogICAgICAgICAKICAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0oY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIDogcmFu
Z2VzKG1hdGNoUmVzdWx0LnJhbmdlcykKLSAgICAgICAgICAgICwgcmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGU6OmNsb25lUHRyKCpzdHlsZSkpCisgICAgICAgICAgICA6IHJlbmRlclN0eWxlKFJlbmRl
clN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKQogICAgICAgICAgICAgLCBwYXJlbnRSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnBhcmVudFN0eWxlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgLy8gQXNzaWduIHJhdGhlciB0aGFuIGNvcHktY29uc3RydWN0IHNvIHdlIG9ubHkgYWxs
b2NhdGUgYXMgbXVjaCB2ZWN0b3IgY2FwYWNpdHkgYXMgbmVlZGVkLgotICAgICAgICAgICAgbWF0
Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpOworICAgICAg
ICAgICAgdXNlckFnZW50RGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFy
YXRpb25zOworICAgICAgICAgICAgYXV0aG9yRGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworICAgICAgICAgICAgdXNlckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIH0KICAgICAgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0oKSA9IGRlZmF1bHQ7CiAgICAgfTsKQEAgLTUzMSwxMSArNDcwLDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzIHsgdHJ1ZSB9OwogICAg
IC8vIFNlZSBpZiB3ZSBzdGlsbCBoYXZlIGNyYXNoZXMgd2hlcmUgU3R5bGVSZXNvbHZlciBnZXRz
IGRlbGV0ZWQgZWFybHkuCiAgICAgYm9vbCBtX2lzRGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hS
YW5nZXMmKTsKIH07CiAKIC8vIFN0YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMs
IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CkBAIC01NDMs
NyArNDc3LDcgQEAgcHJpdmF0ZToKIHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7
CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcjsKICAgICBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXMqIGNhc2NhZGU7Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OworICAgIGNvbnN0IE1hdGNoUmVzdWx0KiBtYXRjaFJlc3Vs
dDsKICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07
CiAgICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OwogICAg
IEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJvcGVydGllcyA9IHsgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381579</attachid>
            <date>2019-10-22 12:05:31 -0700</date>
            <delta_ts>2019-10-22 12:11:26 -0700</delta_ts>
            <desc>wip</desc>
            <filename>matchresult-out-of-resolver-2.patch</filename>
            <type>text/plain</type>
            <size>42675</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyYTU5
ZDIxMTEwLi5iNmZiYWRiMGExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0CiAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCitN
YXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoZWRSZXN1bHQoKQogewogICAg
IEFTU0VSVChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CiAgICAgcmV0dXJuIG1fcmVzdWx0OwpAQCAtMTI0LDE0ICsxMjQsOCBAQCBpbmxpbmUgdm9pZCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnRpZQogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgIT0gLTEpCi0gICAgICAgICsrbV9y
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGVsc2UgewotICAgICAgICBtX3Jlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNp
emUoKTsKLSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IG1fcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICB9CisgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
eyBwcm9wZXJ0eVNldCB9LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9yKTsKIAotICAgIG1fcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKCpwcm9wZXJ0eVNldCk7CiAgICAgaWYgKCFpc0NhY2hl
YWJsZSkKICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKIH0KQEAgLTE3OCwy
MiArMTcyLDYgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVs
ZXMoRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpIDw9IG1fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4gPSBbJl0oKSB7Ci0gICAgICAg
IHN3aXRjaCAoZGVjbGFyYXRpb25PcmlnaW4pIHsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9y
aWdpbjo6VXNlckFnZW50OiByZXR1cm4gbV9yZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjogcmV0dXJuIG1fcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9yaWdpbjo6
VXNlcjogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5y
YW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgfSgpOwotCi0gICAgLy8gRklYTUU6IFJhbmdl
IHVwZGF0aW5nIHNob3VsZCBiZSBkb25lIGJ5IE1hdGNoUmVzdWx0cyB0eXBlCi0gICAgLy8gRklY
TUU6IE1hdGNoUmVzdWx0cyBzaG91bGRuJ3QgYmUgaW4gU3R5bGVSZXNvbHZlciBuYW1lc3BhY2Uu
Ci0gICAgYm9vbCB1cGRhdGVSYW5nZXMgPSBtX21vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpDb2xsZWN0aW5nUnVsZXM7Ci0gICAgaWYgKHVwZGF0ZVJhbmdlcyAmJiByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAgICByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID0gbV9yZXN1bHQubWF0Y2hlZFJ1bGVzLnNpemUo
KTsKLQogICAgIGZvciAoOyBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgKyttX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkgewogICAgICAgICBhdXRv
JiBtYXRjaGVkUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4
XTsKICAgICAgICAgaWYgKGZyb21TY29wZSAmJiBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5h
bCA8ICpmcm9tU2NvcGUpCkBAIC0yMDQsMTEgKzE4MiwxMyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29s
bGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiBkZWNsYXJhdGlv
bk9yaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3Vs
dC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCksIG1hdGNoZWRSdWxlLnJ1bGVE
YXRhLT5saW5rTWF0Y2hUeXBlKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRl
bGlzdFR5cGUoKSwgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICBhZGRN
YXRjaGVkUHJvcGVydGllcyh7CisgICAgICAgICAgICAmbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnJ1
bGUoKS0+cHJvcGVydGllcygpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1h
dGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCkpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSksCisgICAgICAgICAgICBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5hbAorICAgICAg
ICB9LCBkZWNsYXJhdGlvbk9yaWdpbik7CiAgICAgfQotCi0gICAgaWYgKHVwZGF0ZVJhbmdlcykK
LSAgICAgICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5sYXN0UnVsZUluZGV4ID0gbV9yZXN1
bHQubWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7CiB9CiAKIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0
b3I6Om1hdGNoQXV0aG9yUnVsZXMoKQpAQCAtNTg2LDkgKzU2NiwxMCBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBib29sIGluYwogCiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLmRpcmVj
dGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBhdXRv
IHRleHREaXJlY3Rpb24gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIGF1
dG8mIHByb3BlcnRpZXMgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxl
ZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKTsKICAgICAg
ICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFBy
b3BlcnRpZXModGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25Pcmln
aW46OkF1dGhvcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MzMsNCArNjE0LDU3IEBA
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc0FueU1hdGNoaW5nUnVsZXMoY29uc3QgUnVs
ZVNldCogcnVsZVNldCkKICAgICByZXR1cm4gIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKTsKIH0K
IAordm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hl
ZFByb3BlcnRpZXMmJiBtYXRjaGVkUHJvcGVydGllcywgRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFy
YXRpb25PcmlnaW4pCit7CisgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRp
bmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpCisgICAgICAgIG1fcmVzdWx0Lmlz
Q2FjaGVhYmxlID0gZmFsc2U7CisKKyAgICBpZiAobV9yZXN1bHQuaXNDYWNoZWFibGUpIHsKKyAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBw
cm9wZXJ0eSBjYWNoZSBvbmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNv
bHZlCisgICAgICAgICAgICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCisgICAgICAgICAgICAvLyBI
ZXJlIHdlIGRlZmluZSBzb21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21l
IHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGluaGVyaXRlZAorICAgICAgICAgICAgLy8gYnkgZGVm
YXVsdC4gSWYgdGhvc2UgZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBp
dCBzaG91bGQgYmUgcG9zc2libGUKKyAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBl
eGNlcHRpb24gdG8gcmVzb2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBj
YWNoZS4KKworICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBj
dXJyZW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkg
dmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBu
b24taW5oZXJpdGVkIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0
IG92ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRv
bid0IGFsbG93IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlID0gKmN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNJbmhlcml0ZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVz
dWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29s
b3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBzYW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBjb2xvciwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0
ZWQgdmFsdWUsIG1ha2luZyB0aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGlu
aGVyaXRlZC4KKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC5pc0NhY2hl
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChkZWNsYXJhdGlvbk9yaWdpbikgewor
ICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDoKKyAgICAgICAgbV9yZXN1bHQu
dXNlckFnZW50RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjoKKyAg
ICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQ
cm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46
OlVzZXI6CisgICAgICAgIG1fcmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bWF0Y2hlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
CmluZGV4IDFkZGJmZWE5YzNhLi4xYTk4YTE5MmM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk1lZGlh
UXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1l
bW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMzYsMTIgKzM2LDMzIEBAIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNz
IFNlbGVjdG9yRmlsdGVyOwogCitzdHJ1Y3QgUHNldWRvU3R5bGVSZXF1ZXN0IHsKKyAgICBQc2V1
ZG9JZCBwc2V1ZG9JZDsKKyAgICBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3JvbGxi
YXJTdGF0ZSA9IHsgfTsKK307CisKIHN0cnVjdCBNYXRjaGVkUnVsZSB7CiAgICAgY29uc3QgUnVs
ZURhdGEqIHJ1bGVEYXRhOwotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5OyAgIAorICAgIHVuc2ln
bmVkIHNwZWNpZmljaXR5OwogICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGlu
YWw7CiB9OwogCitzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXMgeworICAgIFJlZlB0cjxjb25zdCBT
dHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXM7CisgICAgdWludDE2X3QgbGlua01hdGNoVHlwZSB7
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwgfTsKKyAgICB1aW50MTZfdCB3aGl0ZWxpc3RUeXBl
IHsgUHJvcGVydHlXaGl0ZWxpc3ROb25lIH07CisgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHls
ZVNjb3BlT3JkaW5hbCB7IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQgfTsKK307CisKK3N0
cnVjdCBNYXRjaFJlc3VsdCB7CisgICAgYm9vbCBpc0NhY2hlYWJsZSB7IHRydWUgfTsKKyAgICBW
ZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiB1c2VyQWdlbnREZWNsYXJhdGlvbnM7CisgICAg
VmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gYXV0aG9yRGVjbGFyYXRpb25zOworICAgIFZl
Y3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IHVzZXJEZWNsYXJhdGlvbnM7CisKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1c2VyQWdlbnREZWNsYXJhdGlvbnMuaXNFbXB0eSgp
ICYmIGF1dGhvckRlY2xhcmF0aW9ucy5pc0VtcHR5KCkgJiYgdXNlckRlY2xhcmF0aW9ucy5pc0Vt
cHR5KCk7IH0KK307CisKIGNsYXNzIEVsZW1lbnRSdWxlQ29sbGVjdG9yIHsKIHB1YmxpYzoKICAg
ICBFbGVtZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRSdWxl
U2V0cyYsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKik7CkBAIC02Miw3ICs4Myw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaGFzQW55TWF0Y2hpbmdSdWxlcyhjb25zdCBSdWxlU2V0Kik7CiAKLSAgICBT
dHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpOworICAgIE1hdGNoUmVz
dWx0JiBtYXRjaGVkUmVzdWx0KCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+
PiYgbWF0Y2hlZFJ1bGVMaXN0KCkgY29uc3Q7CiAKICAgICB2b2lkIGNsZWFyTWF0Y2hlZFJ1bGVz
KCk7CkBAIC05OSw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhbnNmZXJNYXRjaGVk
UnVsZXMoRGVjbGFyYXRpb25PcmlnaW4sIE9wdGlvbmFsPFN0eWxlOjpTY29wZU9yZGluYWw+IGZv
clNjb3BlID0geyB9KTsKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEm
LCB1bnNpZ25lZCBzcGVjaWZpY2l0eSwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7CisgICAgdm9pZCBh
ZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaGVkUHJvcGVydGllcyYmLCBEZWNsYXJhdGlvbk9yaWdp
bik7CiAKICAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50LmdldCgpOyB9CiAKQEAgLTEyMyw5ICsxNDUsMTkgQEAgcHJpdmF0ZToKICAgICAvLyBPdXRw
dXQuCiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBtX21hdGNoZWRSdWxlTGlzdDsKICAg
ICBib29sIG1fZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIHsgZmFsc2UgfTsKLSAg
ICBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBNYXRjaFJlc3VsdCBt
X3Jlc3VsdDsKICAgICBTdHlsZTo6UmVsYXRpb25zIG1fc3R5bGVSZWxhdGlvbnM7CiAgICAgUHNl
dWRvSWRTZXQgbV9tYXRjaGVkUHNldWRvRWxlbWVudElkczsKIH07CiAKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0
aWVzJiBiKQoreworICAgIHJldHVybiBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEu
bGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyODQ1MGE4
ZmFjLi4wNzQ4M2RmNmNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxl
Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3Iu
Y3BwCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1
bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGCiAgICAgc3RkOjpz
dGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5k
KCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
dGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKG1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSk7CisgICAgICAgIG1f
cmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+
cHJvcGVydGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNvbXBv
bmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdl
UnVsZUNvbGxlY3Rvci5oCmluZGV4IDc4Mzk4NzE2MmIwLi4xMTQ1MTA3YTUyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fcnVsZVNldHMocnVsZVNldHMpIHsgfQogCiAgICAgdm9pZCBtYXRjaEFsbFBh
Z2VSdWxlcyhpbnQgcGFnZUluZGV4KTsKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYg
bWF0Y2hlZFJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9CisgICAgTWF0Y2hSZXN1bHQmIG1h
dGNoZWRSZXN1bHQoKSB7IHJldHVybiBtX3Jlc3VsdDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wg
aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKICAgICBEb2N1bWVu
dFJ1bGVTZXRzJiBtX3J1bGVTZXRzOwogCi0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQg
bV9yZXN1bHQ7CisgICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYzVmMWJjM2Uw
NDYuLmNlMjhmYTk4MjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0x
MTksNyArMTE5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGNvbnN0
IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8Q1NT
UHJvcGVydHlJRD4obGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CiAKLXN0YXRpYyB2b2lk
IGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiwgVGV4dERpcmVjdGlvbiYsIFdyaXRpbmdNb2Rl
Jik7CitzdGF0aWMgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIFRleHREaXJlY3Rpb24mLCBXcml0aW5nTW9k
ZSYpOwogCiBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3JkZXJBbmRC
YWNrZ3JvdW5kKCkKIHsKQEAgLTEzOSw1NCArMTM5LDYgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6U3RhdGU6OmNsZWFyKCkKICAgICBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgPSBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hSZXN1bHQ6OmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJv
cGVydGllcywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBQcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlLCBTdHlsZTo6U2NvcGVPcmRpbmFs
IHN0eWxlU2NvcGVPcmRpbmFsKQotewotICAgIG1fbWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtX21h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSArIDEpOwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzJiBuZXdQcm9wZXJ0aWVzID0gbV9tYXRjaGVkUHJvcGVydGllcy5sYXN0KCk7Ci0g
ICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gY29uc3RfY2FzdDxTdHlsZVByb3BlcnRpZXMq
PigmcHJvcGVydGllcyk7Ci0gICAgbmV3UHJvcGVydGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01h
dGNoVHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUgPSBwcm9wZXJ0eVdoaXRl
bGlzdFR5cGU7Ci0gICAgbmV3UHJvcGVydGllcy5zdHlsZVNjb3BlT3JkaW5hbCA9IHN0eWxlU2Nv
cGVPcmRpbmFsOwotICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7Ci0KLSAgICBpZiAoc3R5
bGVTY29wZU9yZGluYWwgIT0gU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCkKLSAgICAgICAg
aXNDYWNoZWFibGUgPSBmYWxzZTsKLQotICAgIGlmIChpc0NhY2hlYWJsZSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBwcm9wZXJ0eSBj
YWNoZSBvbmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNvbHZlCi0gICAg
ICAgICAgICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCi0gICAgICAgICAgICAvLyBIZXJlIHdlIGRl
ZmluZSBzb21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21lIHByb3BlcnRp
ZXMgdGhhdCBhcmUgbm90IGluaGVyaXRlZAotICAgICAgICAgICAgLy8gYnkgZGVmYXVsdC4gSWYg
dGhvc2UgZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBpdCBzaG91bGQg
YmUgcG9zc2libGUKLSAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBleGNlcHRpb24g
dG8gcmVzb2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBjYWNoZS4KLQot
ICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBjdXJyZW50ID0g
cHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmlzSW5o
ZXJpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMg
ZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBub24taW5oZXJp
dGVkIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92ZXJyaWRl
IHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0IGFsbG93
IGRlY2xhcmF0aW9ucyB3aXRoCi0gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0
ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCi0gICAgICAgICAgICAgICAgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlID0gKmN1cnJlbnQudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUu
aXNJbmhlcml0ZWRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxlID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29sb3IgaGFzIGltcGxpY2l0ZWx5
IHRoZSBzYW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBjb2xvciwK
LSAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0ZWQgdmFsdWUsIG1ha2luZyB0
aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGluaGVyaXRlZC4KLSAgICAgICAg
ICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikg
ewotICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaXND
YWNoZWFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBTdHlsZVJlc29s
dmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fcnVsZVNldHMo
KnRoaXMpCiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKCp0aGlzLCAm
U3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKQpAQCAtMjc2LDE5ICsy
MjgsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
KQogICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRlIG11dGF0
aW9uIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBhIG5ldyBpbmxpbmVTdHlsZSgpCiAgICAgLy8gb3Ig
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSwgcG90ZW50aWFsbHkgbGVhdmluZyB0aGlzIGNh
Y2hlIHdpdGggdGhlIGxhc3QgcmVmIG9uIHRoZSBvbGQgb25lLgogICAgIFZlY3Rvcjx1bnNpZ25l
ZCwgMTY+IHRvUmVtb3ZlOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0
ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7Ci0gICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOwot
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9w
ZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+dmFsdWUubWF0Y2hlZFByb3BlcnRpZXM7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVkUHJvcGVydGllc1tpXS5wcm9wZXJ0aWVz
LT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKSwgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byBmaW5kRW50cmllc1dpdGhPbmVS
ZWYgPSBbJl0oVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgZGVjbGFyYXRpb25zKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIG1hdGNoZWRQcm9wZXJ0aWVzIDogZGVjbGFyYXRpb25zKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPmhhc09uZVJl
ZigpKSB7CisgICAgICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGF1dG8mIGVudHJ5ID0gaXQtPnZhbHVl
OworICAgICAgICBmaW5kRW50cmllc1dpdGhPbmVSZWYoZW50cnkudXNlckFnZW50RGVjbGFyYXRp
b25zKTsKKyAgICAgICAgZmluZEVudHJpZXNXaXRoT25lUmVmKGVudHJ5LmF1dGhvckRlY2xhcmF0
aW9ucyk7CisgICAgICAgIGZpbmRFbnRyaWVzV2l0aE9uZVJlZihlbnRyeS51c2VyRGVjbGFyYXRp
b25zKTsKICAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7
ICsraSkKLSAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZSh0b1JlbW92ZVtp
XSk7CisgICAgZm9yIChhdXRvIGluZGV4IDogdG9SZW1vdmUpCisgICAgICAgIG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZS5yZW1vdmUoaW5kZXgpOwogCiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOwogfQpAQCAtNDA3LDcgKzM2Miw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFt
ZShjb25zdCBSZW5kZXJTdHlsZSoKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0RlbGV0ZWQpOwog
CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAgIHJlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGll
cyhrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKKyAgICByZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25z
LmFwcGVuZCh7ICZrZXlmcmFtZS0+cHJvcGVydGllcygpIH0pOwogCiAgICAgQVNTRVJUKCFtX3N0
YXRlLnN0eWxlKCkpOwogCkBAIC00MjQsNyArMzc5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2Ug
dGhlcmUgaXMgb25seSBldmVyIG9uZQogICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBv
dmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCiAgICAgQ2FzY2FkZWRQ
cm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5h
ZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6
ZSgpIC0gMSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgQ2FzY2FkZUxl
dmVsOjpBdXRob3JMZXZlbCk7CiAKICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBs
eVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsKICAgICBhcHBseUNhc2NhZGVkUHJv
cGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5
U3RhdGUpOwpAQCAtNTkwLDcgKzU0NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmCiAKICAg
ICBBU1NFUlQoIWNvbGxlY3Rvci5tYXRjaGVkUHNldWRvRWxlbWVudElkcygpKTsKIAotICAgIGlm
IChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQcm9wZXJ0aWVzKCkuaXNFbXB0eSgp
KQorICAgIGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTdHlsZVR5cGUocHNldWRv
U3R5bGVSZXF1ZXN0LnBzZXVkb0lkKTsKQEAgLTYyMywxNCArNTc4LDE0IEBAIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5k
ZXgpCiAgICAgUGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKG1fc3RhdGUsIG1fcnVsZVNldHMp
OwogICAgIGNvbGxlY3Rvci5tYXRjaEFsbFBhZ2VSdWxlcyhwYWdlSW5kZXgpOwogCi0gICAgTWF0
Y2hSZXN1bHQmIHJlc3VsdCA9IGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCk7CisgICAgYXV0byYg
cmVzdWx0ID0gY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKTsKIAogICAgIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uOwogICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOwogICAgIGV4dHJhY3REaXJl
Y3Rpb25BbmRXcml0aW5nTW9kZSgqbV9zdGF0ZS5zdHlsZSgpLCByZXN1bHQsIGRpcmVjdGlvbiwg
d3JpdGluZ01vZGUpOwogCiAgICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSk7CisgICAgY2FzY2FkZS5hZGRO
b3JtYWxNYXRjaGVzKHJlc3VsdCwgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbCk7CiAKICAgICBB
cHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZy
ZXN1bHQgfTsKICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBs
YXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOwpAQCAtMTMxOSwzNCArMTI3NCwx
MSBAQCBzdGF0aWMgYm9vbCBlbGVtZW50VHlwZUhhc0FwcGVhcmFuY2VGcm9tVUFTdHlsZShjb25z
dCBFbGVtZW50JiBlbGVtZW50KQogICAgICAgICB8fCBsb2NhbE5hbWUgPT0gSFRNTE5hbWVzOjpt
ZXRlclRhZzsKIH0KIAotdW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9w
ZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyogcHJvcGVydGllcywgdW5zaWduZWQg
c2l6ZSkKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KHByb3BlcnRpZXMs
IHNpemVvZihNYXRjaGVkUHJvcGVydGllcykgKiBzaXplKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaFJhbmdlcyYgYikKK3Vuc2lnbmVkIFN0eWxlUmVzb2x2ZXI6OmNvbXB1dGVNYXRjaGVk
UHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQogewotICAgIHJl
dHVybiBhLmZpcnN0VUFSdWxlID09IGIuZmlyc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VUFS
dWxlID09IGIubGFzdFVBUnVsZQotICAgICAgICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZp
cnN0QXV0aG9yUnVsZQotICAgICAgICAmJiBhLmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhv
clJ1bGUKLSAgICAgICAgJiYgYS5maXJzdFVzZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQotICAg
ICAgICAmJiBhLmxhc3RVc2VyUnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsKLX0KLQotYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaFJhbmdlcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi1i
b29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEs
IGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVy
biBhLnByb3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxp
bmtNYXRjaFR5cGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpN
YXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXMmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKKyAgICByZXR1cm4gU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5kYXRhKCksIHNp
emVvZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlv
bnMuc2l6ZSgpKQorICAgICAgICBeIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3Vs
dC5hdXRob3JEZWNsYXJhdGlvbnMuZGF0YSgpLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICog
bWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnNpemUoKSkKKyAgICAgICAgXiBTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9ucy5kYXRhKCksIHNp
emVvZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zLnNp
emUoKSk7CiB9CiAKIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJ
dGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUodW5zaWdu
ZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQpAQCAtMTM1NiwxNyArMTI4
OCwxMSBAQCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSog
U3R5bGVSZXNvbHZlcjo6ZmluZEZyb21NYXRjaGVkUAogICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmZpbmQoaGFzaCk7CiAg
ICAgaWYgKGl0ID09IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0mIGNhY2hlSXRlbSA9
IGl0LT52YWx1ZTsKIAotICAgIHNpemVfdCBzaXplID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMoKS5zaXplKCk7Ci0gICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzKClbaV0gIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzW2ldKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChjYWNoZUl0ZW0ucmFuZ2VzICE9IG1h
dGNoUmVzdWx0LnJhbmdlcykKKyAgICBhdXRvJiBjYWNoZUl0ZW0gPSBpdC0+dmFsdWU7CisgICAg
aWYgKG1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucyAhPSBjYWNoZUl0ZW0udXNlckFn
ZW50RGVjbGFyYXRpb25zIHx8IG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucyAhPSBjYWNo
ZUl0ZW0uYXV0aG9yRGVjbGFyYXRpb25zIHx8IG1hdGNoUmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMg
IT0gY2FjaGVJdGVtLnVzZXJEZWNsYXJhdGlvbnMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwor
CiAgICAgcmV0dXJuICZjYWNoZUl0ZW07CiB9CiAKQEAgLTE0MjMsNyArMTM0OSw3IEBAIHN0YXRp
YyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFJlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZXh0cmFjdERp
cmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU3R5
bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBUZXh0RGlyZWN0aW9uJiBkaXJl
Y3Rpb24sIFdyaXRpbmdNb2RlJiB3cml0aW5nTW9kZSkKK3ZvaWQgZXh0cmFjdERpcmVjdGlvbkFu
ZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBUZXh0RGlyZWN0aW9uJiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlJiB3cml0
aW5nTW9kZSkKIHsKICAgICBkaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKICAgICB3cml0
aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2RlKCk7CkBAIC0xNDMxLDI2ICsxMzU3LDI4IEBAIHZv
aWQgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgU3R5bGVSZXNvbHZlCiAgICAgYm9vbCBoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSA9
IGZhbHNlOwogICAgIGJvb2wgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gZmFsc2U7CiAKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIG1hdGNoZWRQcm9wZXJ0aWVzIDogbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IG1hdGNo
ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgIGF1dG8gcHJvcGVydHkgPSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0
aWVzLT5wcm9wZXJ0eUF0KGkpOwotICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS52YWx1ZSgpLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHByb3BlcnR5LmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
cml0aW5nTW9kZToKLSAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdyaXRpbmdNb2Rl
IHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGlu
Z01vZGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgICAgICBoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSA9IHByb3BlcnR5Lmlz
SW1wb3J0YW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoKLSAgICAgICAgICAgICAgICBp
ZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqcHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudERp
cmVjdGlvbiA9IHByb3BlcnR5LmlzSW1wb3J0YW50KCk7CisgICAgZm9yIChhdXRvKiBtYXRjaGVk
RGVjbGFyYXRpb25zIDogeyAmbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zLCAmbWF0
Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLCAmbWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9u
cyB9KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgOiAqbWF0
Y2hlZERlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291
bnQgPSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IG1hdGNoZWRQcm9w
ZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKCFw
cm9wZXJ0eS52YWx1ZSgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkuaWQoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXcml0aW5nTW9kZToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSA9IHByb3BlcnR5LmlzSW1wb3J0YW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZElt
cG9ydGFudERpcmVjdGlvbiA9IHByb3BlcnR5LmlzSW1wb3J0YW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE0NTksNyArMTM4
Nyw3IEBAIHZvaWQgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgU3R5bGVSZXNvbHZlCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBTaG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlIHNob3VsZFVz
ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
LSAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBzaG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hl
ICYmIG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFz
aChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkpIDogMDsKKyAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBz
aG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlICYmIG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxl
ID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdCkgOiAwOwogICAgIGJv
b2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IG51bGxwdHI7CiAgICAgaWYgKGNhY2hlSGFzaCAmJiAo
Y2FjaGVJdGVtID0gZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNhY2hlSGFzaCwgbWF0
Y2hSZXN1bHQpKQpAQCAtMTQ5Myw4ICsxNDIxLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QK
ICAgICAgICAgLy8gSWYgc28sIHdlIGNhY2hlIHRoZSBib3JkZXIgYW5kIGJhY2tncm91bmQgc3R5
bGVzIHNvIHRoYXQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKCkKICAgICAgICAgLy8gY2FuIGxv
b2sgYXQgdGhlbSBsYXRlciB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBzdHlsZWQgZm9ybSBj
b250cm9sIG9yIG5vdC4KICAgICAgICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRj
aFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICAgICAgY2FzY2FkZS5hZGRJ
bXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwor
ICAgICAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZl
bDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgICAgIGNhc2NhZGUu
YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRM
ZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAogICAgICAgICBBcHBseUNhc2NhZGVkUHJvcGVy
dHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OwogCkBA
IC0xNTIwLDEwICsxNDQ4LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJv
cGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgfQogCiAg
ICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0g
ICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCAwLCBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcygpLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAg
Y2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNo
UmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZElt
cG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Cisg
ICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVz
ZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFs
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbCwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6VXNlckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUu
YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZl
bCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMo
bWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkp
OworICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAogICAgIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJm1hdGNoUmVz
dWx0IH07CiAKQEAgLTE3MTksMTAgKzE2NDksMTAgQEAgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQ
cm9wZXJ0aWVzKiBTdHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjaygK
ICAgICAgICAgYXV0byBuZXdBdXRob3JSb2xsYmFjayhtYWtlVW5pcXVlPENhc2NhZGVkUHJvcGVy
dGllcz4oZGlyZWN0aW9uLCB3cml0aW5nTW9kZSkpOwogCiAgICAgICAgIC8vIFRoaXMgc3BlY2lh
bCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIFVBIHJ1bGVzIGFuZCB1c2VyIHJ1bGVzIGJ1dCBu
byBhdXRob3IgcnVsZXMuCi0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGROb3JtYWxNYXRj
aGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNr
LT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAg
ICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNl
clJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1h
dGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJh
Y2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50
TGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNo
ZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBmYWxzZSk7CisgICAgICAg
IG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNj
YWRlTGV2ZWw6OlVzZXJMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+
YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRM
ZXZlbCwgZmFsc2UpOwogCiAgICAgICAgIHN0YXRlKCkuc2V0QXV0aG9yUm9sbGJhY2sobmV3QXV0
aG9yUm9sbGJhY2spOwogICAgICAgICByZXR1cm4gc3RhdGUoKS5hdXRob3JSb2xsYmFjaygpOwpA
QCAtMTczNiw4ICsxNjY2LDggQEAgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzKiBT
dHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjaygKICAgICAgICAgYXV0
byBuZXdVc2VyUm9sbGJhY2sobWFrZVVuaXF1ZTxDYXNjYWRlZFByb3BlcnRpZXM+KGRpcmVjdGlv
biwgd3JpdGluZ01vZGUpKTsKIAogICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2Fz
Y2FkZSBjb250YWlucyBvbmx5IFVBIHJ1bGVzLgotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFk
ZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbmV3VXNl
clJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5y
YW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7
CisgICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwg
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdVc2VyUm9s
bGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNl
ckFnZW50TGV2ZWwsIGZhbHNlKTsKIAogICAgICAgICBzdGF0ZSgpLnNldFVzZXJSb2xsYmFjayhu
ZXdVc2VyUm9sbGJhY2spOwogICAgICAgICByZXR1cm4gc3RhdGUoKS51c2VyUm9sbGJhY2soKTsK
QEAgLTIyMTAsMTAgKzIxNDAsNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdAogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbmxpbmUgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1h
dGNoZWRQcm9wZXJ0aWVzKCkgPSBkZWZhdWx0OwotCi1TdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJv
cGVydGllczo6fk1hdGNoZWRQcm9wZXJ0aWVzKCkgPSBkZWZhdWx0OwotCiBTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXM6OkNhc2NhZGVkUHJvcGVydGllcyhUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiAgICAgOiBtX2RpcmVjdGlvbihkaXJl
Y3Rpb24pCiAgICAgLCBtX3dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKQpAQCAtMjI5OSwyMiArMjIy
NSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6c2V0RGVmZXJy
ZWQoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmCiAgICAgbV9kZWZlcnJlZFByb3BlcnRpZXMu
YXBwZW5kKHByb3BlcnR5KTsKIH0KIAotc3RhdGljIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWxG
b3JJbmRleChjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGlu
dCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlICYmIGluZGV4IDw9IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlKQotICAgICAgICBy
ZXR1cm4gQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbDsKLSAgICBpZiAoaW5kZXggPj0gbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUgJiYgaW5kZXggPD0gbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSkKLSAgICAgICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6VXNlckxldmVs
OwotICAgIHJldHVybiBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOwotfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhl
cml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1h
dGNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcywgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KQog
ewotICAgIGF1dG8mIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMoKVtpbmRleF07CiAgICAgYXV0byYgc3R5bGVQcm9wZXJ0aWVzID0gKm1hdGNoZWRQcm9w
ZXJ0aWVzLnByb3BlcnRpZXM7Ci0KICAgICBhdXRvIHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IHN0
YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVs
aXN0VHlwZSk7Ci0gICAgYXV0byBjYXNjYWRlTGV2ZWwgPSBjYXNjYWRlTGV2ZWxGb3JJbmRleCht
YXRjaFJlc3VsdCwgaW5kZXgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSBz
dHlsZVByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsraSkgewogICAgICAg
ICBhdXRvIGN1cnJlbnQgPSBzdHlsZVByb3BlcnRpZXMucHJvcGVydHlBdChpKTsKQEAgLTIzNDIs
MTMgKzIyNTcsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFk
ZE1hdGNoKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwKICAgICB9CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGROb3JtYWxNYXRjaGVzKGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwg
Ym9vbCBpbmhlcml0ZWRPbmx5KQorCitzdGF0aWMgYXV0byYgZGVjbGFyYXRpb25zRm9yQ2FzY2Fk
ZUxldmVsKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2Nh
ZGVMZXZlbCkKIHsKLSAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIHN3aXRjaCAoY2FzY2FkZUxldmVsKSB7CisgICAgY2FzZSBDYXNjYWRlTGV2ZWw6OlVzZXJB
Z2VudExldmVsOiByZXR1cm4gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zOworICAg
IGNhc2UgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LmF1dGhv
ckRlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6VXNlckxldmVsOiByZXR1cm4g
bWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9uczsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9uczsKK30KIAot
ICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpCi0gICAgICAg
IGFkZE1hdGNoKG1hdGNoUmVzdWx0LCBpLCBmYWxzZSwgaW5oZXJpdGVkT25seSk7Cit2b2lkIFN0
eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wg
aW5oZXJpdGVkT25seSkKK3sKKyAgICBmb3IgKGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgOiBk
ZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbCkpCisg
ICAgICAgIGFkZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnMsIGNhc2NhZGVMZXZlbCwgZmFsc2Us
IGluaGVyaXRlZE9ubHkpOwogfQogCiBzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKQEAgLTIzNjAsMjAgKzIyODQsMTkg
QEAgc3RhdGljIGJvb2wgaGFzSW1wb3J0YW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRp
ZXMmIHByb3BlcnRpZXMpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5o
ZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJ
bXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewotICAgIGlmIChzdGFydElu
ZGV4ID09IC0xKQotICAgICAgICByZXR1cm47Ci0KICAgICBzdHJ1Y3QgSW5kZXhBbmRPcmRpbmFs
IHsKLSAgICAgICAgaW50IGluZGV4OworICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICAgICAg
U3R5bGU6OlNjb3BlT3JkaW5hbCBvcmRpbmFsOwogICAgIH07CiAgICAgVmVjdG9yPEluZGV4QW5k
T3JkaW5hbD4gaW1wb3J0YW50TWF0Y2hlczsKICAgICBib29sIGhhc01hdGNoZXNGcm9tT3RoZXJT
Y29wZXMgPSBmYWxzZTsKIAotICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZElu
ZGV4OyArK2kpIHsKLSAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9w
ZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKVtpXTsKKyAgICBhdXRvJiBt
YXRjaGVkRGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVz
dWx0LCBjYXNjYWRlTGV2ZWwpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNo
ZWREZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgTWF0Y2hlZFByb3Bl
cnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hlZERlY2xhcmF0aW9uc1tpXTsKIAogICAg
ICAgICBpZiAoIWhhc0ltcG9ydGFudFByb3BlcnRpZXMoKm1hdGNoZWRQcm9wZXJ0aWVzLnByb3Bl
cnRpZXMpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yMzk2LDcgKzIzMTksNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkSW1wb3J0YW50TWF0Y2hlcyhj
b25zdCBNYXRjaFJlc3VsdCYgbQogICAgIH0KIAogICAgIGZvciAoYXV0byYgbWF0Y2ggOiBpbXBv
cnRhbnRNYXRjaGVzKQotICAgICAgICBhZGRNYXRjaChtYXRjaFJlc3VsdCwgbWF0Y2guaW5kZXgs
IHRydWUsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRp
b25zW21hdGNoLmluZGV4XSwgY2FzY2FkZUxldmVsLCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKIH0K
IAogdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFwcGx5RGVmZXJyZWRQ
cm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcGVydHlT
dGF0ZSYgYXBwbHlTdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDUyOTQx
YmE2YmQzLi5lZGM1ZjUyMTg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0y
NSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2lu
Y2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCisj
aW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NP
TVdyYXBwZXJzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCkBAIC05OSwxOCArMTAwLDYgQEAgZW51bSBjbGFzcyBDYXNjYWRlTGV2
ZWw6IHVpbnQ4X3QgewogICAgIFVzZXJMZXZlbAogfTsKIAotY2xhc3MgUHNldWRvU3R5bGVSZXF1
ZXN0IHsKLXB1YmxpYzoKLSAgICBQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvSWQgcHNldWRvSWQs
IE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlID0gV1RGOjpudWxs
b3B0KQotICAgICAgICA6IHBzZXVkb0lkKHBzZXVkb0lkKQotICAgICAgICAsIHNjcm9sbGJhclN0
YXRlKHNjcm9sbGJhclN0YXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICBQc2V1ZG9JZCBwc2V1ZG9J
ZDsKLSAgICBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3JvbGxiYXJTdGF0ZTsKLX07
Ci0KIHN0cnVjdCBFbGVtZW50U3R5bGUgewogICAgIEVsZW1lbnRTdHlsZShzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlJlbGF0
aW9ucz4gcmVsYXRpb25zID0geyB9KQogICAgICAgICA6IHJlbmRlclN0eWxlKFdURk1vdmUocmVu
ZGVyU3R5bGUpKQpAQCAtMTc1LDggKzE2NCw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZT4+IHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCBQ
c2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsK
IAogcHVibGljOgotICAgIHN0cnVjdCBNYXRjaFJlc3VsdDsKLQogICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+KTsKICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9w
ZXJ0eUlELCBDU1NWYWx1ZSopOwogCkBAIC0yMjEsNDggKzIwOCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsZWFyQ2FjaGVkUHJvcGVydGllc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKICAg
ICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwotCi0gICAgc3RydWN0IFJ1bGVSYW5nZSB7
Ci0gICAgICAgIFJ1bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgpOiBmaXJzdFJ1bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1
bGVJbmRleCkgeyB9Ci0gICAgICAgIGludCYgZmlyc3RSdWxlSW5kZXg7Ci0gICAgICAgIGludCYg
bGFzdFJ1bGVJbmRleDsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoUmFuZ2VzIHsKLSAgICAg
ICAgTWF0Y2hSYW5nZXMoKSA6IGZpcnN0VUFSdWxlKC0xKSwgbGFzdFVBUnVsZSgtMSksIGZpcnN0
QXV0aG9yUnVsZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwgZmlyc3RVc2VyUnVsZSgtMSksIGxh
c3RVc2VyUnVsZSgtMSkgeyB9Ci0gICAgICAgIGludCBmaXJzdFVBUnVsZTsKLSAgICAgICAgaW50
IGxhc3RVQVJ1bGU7Ci0gICAgICAgIGludCBmaXJzdEF1dGhvclJ1bGU7Ci0gICAgICAgIGludCBs
YXN0QXV0aG9yUnVsZTsKLSAgICAgICAgaW50IGZpcnN0VXNlclJ1bGU7Ci0gICAgICAgIGludCBs
YXN0VXNlclJ1bGU7Ci0gICAgICAgIFJ1bGVSYW5nZSBVQVJ1bGVSYW5nZSgpIHsgcmV0dXJuIFJ1
bGVSYW5nZShmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7IH0KLSAgICAgICAgUnVsZVJhbmdlIGF1
dGhvclJ1bGVSYW5nZSgpIHsgcmV0dXJuIFJ1bGVSYW5nZShmaXJzdEF1dGhvclJ1bGUsIGxhc3RB
dXRob3JSdWxlKTsgfQotICAgICAgICBSdWxlUmFuZ2UgdXNlclJ1bGVSYW5nZSgpIHsgcmV0dXJu
IFJ1bGVSYW5nZShmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOyB9Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBNYXRjaGVkUHJvcGVydGllcyB7Ci0gICAgICAgIE1hdGNoZWRQcm9wZXJ0aWVzKCk7
Ci0gICAgICAgIH5NYXRjaGVkUHJvcGVydGllcygpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRy
PFN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllczsKLSAgICAgICAgdWludDE2X3QgbGlua01hdGNo
VHlwZTsKLSAgICAgICAgdWludDE2X3Qgd2hpdGVsaXN0VHlwZTsKLSAgICAgICAgU3R5bGU6OlNj
b3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNo
UmVzdWx0IHsKLSAgICAgICAgTWF0Y2hSZXN1bHQoKSA6IGlzQ2FjaGVhYmxlKHRydWUpIHsgfQot
ICAgICAgICBWZWN0b3I8U3R5bGVSdWxlKiwgNjQ+IG1hdGNoZWRSdWxlczsKLSAgICAgICAgTWF0
Y2hSYW5nZXMgcmFuZ2VzOwotICAgICAgICBib29sIGlzQ2FjaGVhYmxlOwotCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+JiBtYXRjaGVkUHJvcGVydGllcygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF0Y2hlZFByb3BlcnRpZXM7IH0KLQotICAgICAgICB2b2lkIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYsIFN0eWxlUnVsZSogPSBudWxs
cHRyLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwg
UHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lLCBTdHlsZTo6U2Nv
cGVPcmRpbmFsID0gU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCk7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gbV9tYXRjaGVkUHJvcGVydGll
czsKLSAgICB9OwogICAgIAogICAgIGNsYXNzIENhc2NhZGVkUHJvcGVydGllcyB7CiAgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMjgxLDggKzIyNiw4IEBAIHB1YmxpYzoKICAg
ICAgICAgYm9vbCBoYXNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdDsKICAgICAgICAgUHJv
cGVydHkmIHByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogCi0gICAgICAgIHZvaWQgYWRkTm9ybWFs
TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgs
IGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBhZGRJbXBvcnRhbnRN
YXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwg
Ym9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworICAgICAgICB2b2lkIGFkZE5vcm1hbE1hdGNo
ZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9
IGZhbHNlKTsKKyAgICAgICAgdm9pZCBhZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVz
dWx0JiwgQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CiAKICAgICAg
ICAgdm9pZCBhcHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiwgQXBwbHlDYXNj
YWRlZFByb3BlcnR5U3RhdGUmKTsKIApAQCAtMjkxLDcgKzIzNiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUHJvcGVydHkgY3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAg
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQm
LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsK
KyAgICAgICAgdm9pZCBhZGRNYXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIENhc2NhZGVM
ZXZlbCwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKICAgICAgICAgdm9p
ZCBzZXQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBD
YXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwogICAgICAgICB2b2lkIHNldERlZmVy
cmVkKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2Fz
Y2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0
UHJvcGVydHlJbnRlcm5hbChQcm9wZXJ0eSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsK
QEAgLTMzNSwxNCArMjgwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2FzY2FkZU1hdGNoZXMo
Q2FzY2FkZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGltcG9ydGFudCwg
aW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKIAotICAg
IHZvaWQgbWF0Y2hQYWdlUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0KiwgYm9vbCBpc0xlZnRQ
YWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLSAgICB2b2lk
IG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVs
ZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotCi0gICAgYm9vbCBpc0xlZnRQ
YWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQotICAgIGJvb2wg
aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgU3RyaW5nIHBhZ2VOYW1lKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwotCiAgICAgRG9jdW1lbnRSdWxlU2V0cyBtX3J1bGVTZXRzOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtl
eWZyYW1lcz4+IEtleWZyYW1lc1J1bGVNYXA7CkBAIC00NzcsMjAgKzQxNCwyMiBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7
CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25z
dCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2lnbmVkIHNpemUpOworICAgIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoUmVzdWx0Jik7CiAgICAg
c3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKLSAgICAgICAgVmVjdG9yPE1hdGNo
ZWRQcm9wZXJ0aWVzPiBtYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgTWF0Y2hSYW5nZXMgcmFu
Z2VzOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IHVzZXJBZ2VudERlY2xhcmF0
aW9uczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiBhdXRob3JEZWNsYXJhdGlv
bnM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gdXNlckRlY2xhcmF0aW9uczsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZTsKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwYXJlbnRSZW5kZXJTdHlsZTsKICAgICAg
ICAgCiAgICAgICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCi0gICAgICAgICAgICA6IHJhbmdlcyhtYXRjaFJlc3VsdC5yYW5nZXMp
Ci0gICAgICAgICAgICAsIHJlbmRlclN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUp
KQorICAgICAgICAgICAgOiByZW5kZXJTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnN0eWxl
KSkKICAgICAgICAgICAgICwgcGFyZW50UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpwYXJlbnRTdHlsZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEFzc2lnbiByYXRoZXIg
dGhhbiBjb3B5LWNvbnN0cnVjdCBzbyB3ZSBvbmx5IGFsbG9jYXRlIGFzIG11Y2ggdmVjdG9yIGNh
cGFjaXR5IGFzIG5lZWRlZC4KLSAgICAgICAgICAgIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIHVzZXJBZ2VudERlY2xhcmF0
aW9ucyA9IG1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0aW9uczsKKyAgICAgICAgICAgIGF1
dGhvckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9uczsKKyAgICAg
ICAgICAgIHVzZXJEZWNsYXJhdGlvbnMgPSBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zOwog
ICAgICAgICB9CiAgICAgICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKCkgPSBkZWZhdWx0
OwogICAgIH07CkBAIC01MzEsMTEgKzQ3MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyB7IHRydWUgfTsKICAgICAvLyBTZWUgaWYgd2Ugc3RpbGwgaGF2
ZSBjcmFzaGVzIHdoZXJlIFN0eWxlUmVzb2x2ZXIgZ2V0cyBkZWxldGVkIGVhcmx5LgogICAgIGJv
b2wgbV9pc0RlbGV0ZWQgeyBmYWxzZSB9OwotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7Ci0gICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1h
dGNoZWRQcm9wZXJ0aWVzJik7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRj
aFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBNYXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7CiB9OwogCiAvLyBTdGF0
ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBwcm9wZXJ0aWVzLCB0byBrZWVwIHRyYWNrIG9mIHdoaWNo
IGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0eQpAQCAtNTQzLDcgKzQ3Nyw3IEBAIHByaXZhdGU6CiBz
dHJ1Y3QgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgewogICAgIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXI7CiAgICAgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzKiBjYXNj
YWRlOwotICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0KiBtYXRjaFJlc3VsdDsK
KyAgICBjb25zdCBNYXRjaFJlc3VsdCogbWF0Y2hSZXN1bHQ7CiAgICAgQml0bWFwPG51bUNTU1By
b3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0aWVzID0geyB9OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBh
cHBsaWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGll
cz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXMgPSB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaAppbmRleCAwZTY0ZGMwMjNmYS4uOGVmZTM4ZTA4OTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBD
b250cm9sU3RhdGVzOwogY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUmVuZGVyQmxvY2s7CiBj
bGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKK3N0cnVjdCBQc2V1ZG9TdHlsZVJlcXVlc3Q7CiAKIGNs
YXNzIFJlbmRlckVsZW1lbnQgOiBwdWJsaWMgUmVuZGVyT2JqZWN0IHsKICAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKFJlbmRlckVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCmluZGV4IDc2ZTI4ZDdkZjM0Li4zNTA3MjEyYmVkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNTMsNyArNTMsNiBAQCBjbGFzcyBIaXRUZXN0
UmVzdWx0OwogY2xhc3MgSW5saW5lQm94OwogY2xhc3MgUGF0aDsKIGNsYXNzIFBvc2l0aW9uOwot
Y2xhc3MgUHNldWRvU3R5bGVSZXF1ZXN0OwogY2xhc3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7CiBj
bGFzcyBSZW5kZXJJbmxpbmU7CiBjbGFzcyBSZW5kZXJCbG9jazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381581</attachid>
            <date>2019-10-22 12:29:34 -0700</date>
            <delta_ts>2019-10-23 02:23:47 -0700</delta_ts>
            <desc>wip</desc>
            <filename>matchresult-out-of-resolver-3.patch</filename>
            <type>text/plain</type>
            <size>42006</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyYTU5
ZDIxMTEwLi5iNmZiYWRiMGExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0CiAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCitN
YXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoZWRSZXN1bHQoKQogewogICAg
IEFTU0VSVChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CiAgICAgcmV0dXJuIG1fcmVzdWx0OwpAQCAtMTI0LDE0ICsxMjQsOCBAQCBpbmxpbmUgdm9pZCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnRpZQogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgIT0gLTEpCi0gICAgICAgICsrbV9y
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGVsc2UgewotICAgICAgICBtX3Jlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNp
emUoKTsKLSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IG1fcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICB9CisgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
eyBwcm9wZXJ0eVNldCB9LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9yKTsKIAotICAgIG1fcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKCpwcm9wZXJ0eVNldCk7CiAgICAgaWYgKCFpc0NhY2hl
YWJsZSkKICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKIH0KQEAgLTE3OCwy
MiArMTcyLDYgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVs
ZXMoRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpIDw9IG1fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4gPSBbJl0oKSB7Ci0gICAgICAg
IHN3aXRjaCAoZGVjbGFyYXRpb25PcmlnaW4pIHsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9y
aWdpbjo6VXNlckFnZW50OiByZXR1cm4gbV9yZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjogcmV0dXJuIG1fcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9yaWdpbjo6
VXNlcjogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5y
YW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgfSgpOwotCi0gICAgLy8gRklYTUU6IFJhbmdl
IHVwZGF0aW5nIHNob3VsZCBiZSBkb25lIGJ5IE1hdGNoUmVzdWx0cyB0eXBlCi0gICAgLy8gRklY
TUU6IE1hdGNoUmVzdWx0cyBzaG91bGRuJ3QgYmUgaW4gU3R5bGVSZXNvbHZlciBuYW1lc3BhY2Uu
Ci0gICAgYm9vbCB1cGRhdGVSYW5nZXMgPSBtX21vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpDb2xsZWN0aW5nUnVsZXM7Ci0gICAgaWYgKHVwZGF0ZVJhbmdlcyAmJiByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAgICByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID0gbV9yZXN1bHQubWF0Y2hlZFJ1bGVzLnNpemUo
KTsKLQogICAgIGZvciAoOyBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgKyttX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkgewogICAgICAgICBhdXRv
JiBtYXRjaGVkUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4
XTsKICAgICAgICAgaWYgKGZyb21TY29wZSAmJiBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5h
bCA8ICpmcm9tU2NvcGUpCkBAIC0yMDQsMTEgKzE4MiwxMyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29s
bGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiBkZWNsYXJhdGlv
bk9yaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3Vs
dC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCksIG1hdGNoZWRSdWxlLnJ1bGVE
YXRhLT5saW5rTWF0Y2hUeXBlKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRl
bGlzdFR5cGUoKSwgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICBhZGRN
YXRjaGVkUHJvcGVydGllcyh7CisgICAgICAgICAgICAmbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnJ1
bGUoKS0+cHJvcGVydGllcygpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1h
dGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCkpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSksCisgICAgICAgICAgICBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5hbAorICAgICAg
ICB9LCBkZWNsYXJhdGlvbk9yaWdpbik7CiAgICAgfQotCi0gICAgaWYgKHVwZGF0ZVJhbmdlcykK
LSAgICAgICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5sYXN0UnVsZUluZGV4ID0gbV9yZXN1
bHQubWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7CiB9CiAKIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0
b3I6Om1hdGNoQXV0aG9yUnVsZXMoKQpAQCAtNTg2LDkgKzU2NiwxMCBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBib29sIGluYwogCiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLmRpcmVj
dGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBhdXRv
IHRleHREaXJlY3Rpb24gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIGF1
dG8mIHByb3BlcnRpZXMgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxl
ZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKTsKICAgICAg
ICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFBy
b3BlcnRpZXModGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25Pcmln
aW46OkF1dGhvcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MzMsNCArNjE0LDU3IEBA
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc0FueU1hdGNoaW5nUnVsZXMoY29uc3QgUnVs
ZVNldCogcnVsZVNldCkKICAgICByZXR1cm4gIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKTsKIH0K
IAordm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hl
ZFByb3BlcnRpZXMmJiBtYXRjaGVkUHJvcGVydGllcywgRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFy
YXRpb25PcmlnaW4pCit7CisgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRp
bmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpCisgICAgICAgIG1fcmVzdWx0Lmlz
Q2FjaGVhYmxlID0gZmFsc2U7CisKKyAgICBpZiAobV9yZXN1bHQuaXNDYWNoZWFibGUpIHsKKyAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBw
cm9wZXJ0eSBjYWNoZSBvbmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNv
bHZlCisgICAgICAgICAgICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCisgICAgICAgICAgICAvLyBI
ZXJlIHdlIGRlZmluZSBzb21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21l
IHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGluaGVyaXRlZAorICAgICAgICAgICAgLy8gYnkgZGVm
YXVsdC4gSWYgdGhvc2UgZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBp
dCBzaG91bGQgYmUgcG9zc2libGUKKyAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBl
eGNlcHRpb24gdG8gcmVzb2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBj
YWNoZS4KKworICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBj
dXJyZW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkg
dmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBu
b24taW5oZXJpdGVkIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0
IG92ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRv
bid0IGFsbG93IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlID0gKmN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNJbmhlcml0ZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVz
dWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29s
b3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBzYW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBjb2xvciwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0
ZWQgdmFsdWUsIG1ha2luZyB0aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGlu
aGVyaXRlZC4KKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC5pc0NhY2hl
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChkZWNsYXJhdGlvbk9yaWdpbikgewor
ICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDoKKyAgICAgICAgbV9yZXN1bHQu
dXNlckFnZW50RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjoKKyAg
ICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQ
cm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46
OlVzZXI6CisgICAgICAgIG1fcmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bWF0Y2hlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
CmluZGV4IDFkZGJmZWE5YzNhLi5iODc1OGQwOTI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk1lZGlh
UXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1l
bW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMzYsMTIgKzM2LDQwIEBAIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNz
IFNlbGVjdG9yRmlsdGVyOwogCitjbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgeworcHVibGljOgor
ICAgIFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVT
Y3JvbGxiYXJTdGF0ZT4gc2Nyb2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCisgICAgICAgIDog
cHNldWRvSWQocHNldWRvSWQpCisgICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3Rh
dGUpCisgICAgeworICAgIH0KKworICAgIFBzZXVkb0lkIHBzZXVkb0lkOworICAgIE9wdGlvbmFs
PFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlOworfTsKKwogc3RydWN0IE1hdGNo
ZWRSdWxlIHsKICAgICBjb25zdCBSdWxlRGF0YSogcnVsZURhdGE7Ci0gICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHk7ICAgCisgICAgdW5zaWduZWQgc3BlY2lmaWNpdHk7CiAgICAgU3R5bGU6OlNjb3Bl
T3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKIH07CiAKK3N0cnVjdCBNYXRjaGVkUHJvcGVydGll
cyB7CisgICAgUmVmUHRyPGNvbnN0IFN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllczsKKyAgICB1
aW50MTZfdCBsaW5rTWF0Y2hUeXBlIHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCB9OworICAg
IHVpbnQxNl90IHdoaXRlbGlzdFR5cGUgeyBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUgfTsKKyAgICBT
dHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsIHsgU3R5bGU6OlNjb3BlT3JkaW5h
bDo6RWxlbWVudCB9OworfTsKKworc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAgICBib29sIGlzQ2Fj
aGVhYmxlIHsgdHJ1ZSB9OworICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IHVzZXJB
Z2VudERlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiBhdXRo
b3JEZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gdXNlckRl
Y2xhcmF0aW9uczsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJBZ2Vu
dERlY2xhcmF0aW9ucy5pc0VtcHR5KCkgJiYgYXV0aG9yRGVjbGFyYXRpb25zLmlzRW1wdHkoKSAm
JiB1c2VyRGVjbGFyYXRpb25zLmlzRW1wdHkoKTsgfQorfTsKKwogY2xhc3MgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgewogcHVibGljOgogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yKGNvbnN0IEVsZW1l
bnQmLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqKTsKQEAg
LTYyLDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1bGVzKGNv
bnN0IFJ1bGVTZXQqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVk
UmVzdWx0KCk7CisgICAgTWF0Y2hSZXN1bHQmIG1hdGNoZWRSZXN1bHQoKTsKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZUxpc3QoKSBjb25zdDsKIAogICAg
IHZvaWQgY2xlYXJNYXRjaGVkUnVsZXMoKTsKQEAgLTk5LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiwgT3B0aW9uYWw8
U3R5bGU6OlNjb3BlT3JkaW5hbD4gZm9yU2NvcGUgPSB7IH0pOwogCiAgICAgdm9pZCBhZGRNYXRj
aGVkUnVsZShjb25zdCBSdWxlRGF0YSYsIHVuc2lnbmVkIHNwZWNpZmljaXR5LCBTdHlsZTo6U2Nv
cGVPcmRpbmFsKTsKKyAgICB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoZWRQcm9wZXJ0
aWVzJiYsIERlY2xhcmF0aW9uT3JpZ2luKTsKIAogICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIApAQCAtMTIzLDkgKzE1MiwxOSBA
QCBwcml2YXRlOgogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+
IG1fbWF0Y2hlZFJ1bGVMaXN0OwogICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IgeyBmYWxzZSB9OwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0IG1fcmVz
dWx0OworICAgIE1hdGNoUmVzdWx0IG1fcmVzdWx0OwogICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9z
dHlsZVJlbGF0aW9uczsKICAgICBQc2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRz
OwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYg
YSwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuIGEucHJvcGVydGll
cyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgYSwg
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHAKaW5kZXggYTI4NDUwYThmYWMuLjA3NDgzZGY2Y2YyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBQYWdlUnVs
ZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0YKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4o
KSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJv
cGVydGllcygpKTsKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7
ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29s
IGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKaW5kZXggNzgzOTg3MTYyYjAu
LjExNDUxMDdhNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ydWxlU2V0cyhydWxlU2V0cykgeyB9
CiAKICAgICB2b2lkIG1hdGNoQWxsUGFnZVJ1bGVzKGludCBwYWdlSW5kZXgpOwotICAgIFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVkUmVzdWx0KCkgeyByZXR1cm4gbV9yZXN1bHQ7
IH0KKyAgICBNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwpA
QCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBtX3N0YXRlOwogICAgIERvY3VtZW50UnVsZVNldHMmIG1fcnVsZVNldHM7CiAKLSAgICBTdHls
ZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBNYXRjaFJlc3VsdCBtX3Jlc3Vs
dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAppbmRleCBjNWYxYmMzZTA0Ni4uY2UyOGZhOTgyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVy
dHkgKyAxKTsKIAotc3RhdGljIHZvaWQgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmLCBUZXh0
RGlyZWN0aW9uJiwgV3JpdGluZ01vZGUmKTsKK3N0YXRpYyB2b2lkIGV4dHJhY3REaXJlY3Rpb25B
bmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4
dERpcmVjdGlvbiYsIFdyaXRpbmdNb2RlJik7CiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQogewpAQCAtMTM5LDU0ICsxMzksNiBA
QCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQogICAgIG1fY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUsIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCi17Ci0gICAgbV9tYXRj
aGVkUHJvcGVydGllcy5ncm93KG1fbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIG5ld1Byb3BlcnRpZXMgPSBtX21hdGNo
ZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBjb25z
dF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KCZwcm9wZXJ0aWVzKTsKLSAgICBuZXdQcm9wZXJ0aWVz
LmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAgIG5ld1Byb3BlcnRpZXMud2hpdGVs
aXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLnN0eWxl
U2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7Ci0gICAgbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsKLQotICAgIGlmIChzdHlsZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRp
bmFsOjpFbGVtZW50KQotICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotCi0gICAgaWYgKGlz
Q2FjaGVhYmxlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gcHJvcGVy
dGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBD
dXJyZW50bHkgdGhlIHByb3BlcnR5IGNhY2hlIG9ubHkgY29weSB0aGUgbm9uLWluaGVyaXRlZCB2
YWx1ZXMgYW5kIHJlc29sdmUKLSAgICAgICAgICAgIC8vIHRoZSBpbmhlcml0ZWQgb25lcy4KLSAg
ICAgICAgICAgIC8vIEhlcmUgd2UgZGVmaW5lIHNvbWUgZXhjZXB0aW9uIHdlcmUgd2UgaGF2ZSB0
byByZXNvbHZlIHNvbWUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgaW5oZXJpdGVkCi0gICAgICAg
ICAgICAvLyBieSBkZWZhdWx0LiBJZiB0aG9zZSBleGNlcHRpb25zIGJlY29tZSB0b28gY29tbW9u
IG9uIHRoZSB3ZWIsIGl0IHNob3VsZCBiZSBwb3NzaWJsZQotICAgICAgICAgICAgLy8gdG8gYnVp
bGQgYSBsaXN0IG9mIGV4Y2VwdGlvbiB0byByZXNvbHZlIGluc3RlYWQgb2YgY29tcGxldGVseSBk
aXNhYmxpbmcgdGhlIGNhY2hlLgotCi0gICAgICAgICAgICBTdHlsZVByb3BlcnRpZXM6OlByb3Bl
cnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLnByb3BlcnR5QXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQuaXNJbmhlcml0ZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBh
cHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8v
IGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhp
cyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgICAg
ICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAg
ICAgICAgICAgICBjb25zdCBDU1NWYWx1ZSYgdmFsdWUgPSAqY3VycmVudC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0luaGVyaXRlZFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGN1cnJl
bnRDb2xvciBoYXMgaW1wbGljaXRlbHkgdGhlIHNhbWUgc2lkZSBlZmZlY3QuIEl0IGRlcGVuZHMg
b24gdGhlIHZhbHVlIG9mIGNvbG9yLAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIGFuIGlu
aGVyaXRlZCB2YWx1ZSwgbWFraW5nIHRoZSBub24taW5oZXJpdGVkIHByb3BlcnR5IGltcGxpY2l0
bHkgaW5oZXJpdGVkLgotICAgICAgICAgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09
IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIDogbV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZVN3ZWVwVGltZXIoKnRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUpCkBAIC0yNzYsMTkgKzIyOCwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVw
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4g
ZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlu
bGluZVN0eWxlKCkKICAgICAvLyBvciBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3Rl
bnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBv
bmUuCiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4o
KTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52
YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQ
cm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAg
dG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZv
ciAoYXV0byBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5iZWdpbigpLCBlbmQgPSBtX21h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBh
dXRvIGZpbmRFbnRyaWVzV2l0aE9uZVJlZiA9IFsmXShWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+
JiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbWF0Y2hlZFByb3BlcnRp
ZXMgOiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAg
YXV0byYgZW50cnkgPSBpdC0+dmFsdWU7CisgICAgICAgIGZpbmRFbnRyaWVzV2l0aE9uZVJlZihl
bnRyeS51c2VyQWdlbnREZWNsYXJhdGlvbnMpOworICAgICAgICBmaW5kRW50cmllc1dpdGhPbmVS
ZWYoZW50cnkuYXV0aG9yRGVjbGFyYXRpb25zKTsKKyAgICAgICAgZmluZEVudHJpZXNXaXRoT25l
UmVmKGVudHJ5LnVzZXJEZWNsYXJhdGlvbnMpOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICBmb3IgKGF1dG8gaW5kZXggOiB0b1JlbW92
ZSkKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZShpbmRleCk7CiAKICAg
ICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9
CkBAIC00MDcsNyArMzYyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworICAgIHJl
c3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJmtleWZyYW1lLT5wcm9wZXJ0aWVzKCkg
fSk7CiAKICAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUoKSk7CiAKQEAgLTQyNCw3ICszNzksNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIg
d2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVj
bCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJv
cGVydGllcy4KICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1h
dGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9
OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdo
UHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7CkBAIC01OTAsNyArNTQ1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYKIAogICAgIEFTU0VSVCghY29sbGVjdG9yLm1hdGNoZWRQc2V1ZG9F
bGVtZW50SWRzKCkpOwogCi0gICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCkubWF0Y2hl
ZFByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRlLnN0eWxl
KCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwpAQCAtNjIzLDE0
ICs1NzgsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBQYWdlUnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IobV9zdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVjdG9yLm1hdGNoQWxsUGFnZVJ1bGVz
KHBhZ2VJbmRleCk7CiAKLSAgICBNYXRjaFJlc3VsdCYgcmVzdWx0ID0gY29sbGVjdG9yLm1hdGNo
ZWRSZXN1bHQoKTsKKyAgICBhdXRvJiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgp
OwogCiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGU7CiAgICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxl
KCksIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKICAgICBDYXNjYWRlZFByb3Bl
cnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5v
cm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkg
LSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3Rh
dGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0
ZSk7CkBAIC0xMzE5LDM0ICsxMjc0LDExIEBAIHN0YXRpYyBib29sIGVsZW1lbnRUeXBlSGFzQXBw
ZWFyYW5jZUZyb21VQVN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIHx8IGxv
Y2FsTmFtZSA9PSBIVE1MTmFtZXM6Om1ldGVyVGFnOwogfQogCi11bnNpZ25lZCBTdHlsZVJlc29s
dmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUp
OwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMm
IGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQordW5zaWduZWQgU3R5bGVS
ZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGEuZmlyc3RVQVJ1bGUgPT0gYi5maXJzdFVBUnVs
ZQotICAgICAgICAmJiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0VUFSdWxlCi0gICAgICAgICYmIGEu
Zmlyc3RBdXRob3JSdWxlID09IGIuZmlyc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEubGFzdEF1
dGhvclJ1bGUgPT0gYi5sYXN0QXV0aG9yUnVsZQotICAgICAgICAmJiBhLmZpcnN0VXNlclJ1bGUg
PT0gYi5maXJzdFVzZXJSdWxlCi0gICAgICAgICYmIGEubGFzdFVzZXJSdWxlID09IGIubGFzdFVz
ZXJSdWxlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hS
YW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJl
dHVybiAhKGEgPT0gYik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYg
YS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsKLX0KLQotYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwor
ICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQudXNlckFnZW50
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5zaXplKCkpCisgICAgICAgIF4gU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5kYXRhKCksIHNpemVv
ZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuc2l6
ZSgpKQorICAgICAgICBeIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3VsdC51c2Vy
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnMuc2l6ZSgpKTsKIH0KIAogY29uc3QgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQpCkBAIC0xMzU2LDE3ICsxMjg4LDExIEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAg
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCi0gICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSAhPSBj
YWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKVtpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFBy
b3BlcnRpZXNbaV0pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYg
KGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgIGF1dG8mIGNhY2hl
SXRlbSA9IGl0LT52YWx1ZTsKKyAgICBpZiAobWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRp
b25zICE9IGNhY2hlSXRlbS51c2VyQWdlbnREZWNsYXJhdGlvbnMgfHwgbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zICE9IGNhY2hlSXRlbS5hdXRob3JEZWNsYXJhdGlvbnMgfHwgbWF0Y2hS
ZXN1bHQudXNlckRlY2xhcmF0aW9ucyAhPSBjYWNoZUl0ZW0udXNlckRlY2xhcmF0aW9ucykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gJmNhY2hlSXRlbTsKIH0KIApAQCAt
MTQyMyw3ICsxMzQ5LDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIFRleHREaXJlY3Rpb24mIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQor
dm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFRleHREaXJlY3Rpb24mIGRpcmVj
dGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQogewogICAgIGRpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIHdyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKQEAg
LTE0MzEsMjYgKzEzNTcsMjggQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKICAgICBib29sIGhh
ZEltcG9ydGFudFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgYm9vbCBoYWRJbXBvcnRhbnREaXJl
Y3Rpb24gPSBmYWxzZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMg
OiBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGNvdW50ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IG1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5QXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkuaWQoKSkgewotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgotICAgICAgICAgICAgICAgIGlmICgh
aGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqcHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdy
aXRpbmdNb2RlID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0
aW9uOgotICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3Bl
cnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsK
KyAgICBmb3IgKGF1dG8qIG1hdGNoZWREZWNsYXJhdGlvbnMgOiB7ICZtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnMsICZtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMsICZtYXRj
aFJlc3VsdC51c2VyRGVjbGFyYXRpb25zIH0pIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBt
YXRjaGVkUHJvcGVydGllcyA6ICptYXRjaGVkRGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMt
PnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHByb3BlcnR5ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChwcm9wZXJ0eS5pZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRp
bmdNb2RlOgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdyaXRpbmdNb2Rl
IHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdyaXRpbmdNb2RlID0gcHJv
cGVydHkuaXNJbXBvcnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9u
OgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9w
ZXJ0eS5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24g
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBv
cnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTQ1OSw3ICsxMzg3LDcgQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3Jp
dGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFNob3VsZFVzZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUgc2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKIHsKICAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVz
ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYgbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21w
dXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCku
ZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKSkgOiAwOworICAg
IHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYg
bWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1h
dGNoUmVzdWx0KSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAg
ICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gbnVsbHB0cjsK
ICAgICBpZiAoY2FjaGVIYXNoICYmIChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCkpCkBAIC0xNDkzLDggKzE0MjEsOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoKQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYg
dGhpcyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgogICAgICAgICBDYXNjYWRlZFBy
b3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgY2FzY2Fk
ZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyht
YXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAgICAg
ICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2Fk
ZSwgJm1hdGNoUmVzdWx0IH07CiAKQEAgLTE1MjAsMTAgKzE0NDgsMTIgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QKICAgICB9CiAKICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJl
Y3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFk
ZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFs
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2Nh
ZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2
ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVz
KG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTcxOSwxMCArMTY0OSwxMCBAQCBT
dHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVk
UHJvcGVydGllc0ZvclJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld0F1dGhvclJvbGxiYWNrKG1h
a2VVbmlxdWU8Q2FzY2FkZWRQcm9wZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAK
ICAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVs
ZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KLSAgICAgICAgbmV3QXV0aG9y
Um9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAg
ICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRN
YXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwor
ICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwg
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2Vy
TGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1h
dGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBmYWxzZSk7CisgICAg
ICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3RhdGUoKS5z
ZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBzdGF0
ZSgpLmF1dGhvclJvbGxiYWNrKCk7CkBAIC0xNzM2LDggKzE2NjYsOCBAQCBTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVkUHJvcGVydGllc0Zv
clJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld1VzZXJSb2xsYmFjayhtYWtlVW5pcXVlPENhc2Nh
ZGVkUHJvcGVydGllcz4oZGlyZWN0aW9uLCB3cml0aW5nTW9kZSkpOwogCiAgICAgICAgIC8vIFRo
aXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVsZXMuCi0gICAg
ICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
ZmFsc2UpOwotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0
Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3Jt
YWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxz
ZSk7CisgICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJl
c3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOwogCiAgICAgICAgIHN0
YXRlKCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBz
dGF0ZSgpLnVzZXJSb2xsYmFjaygpOwpAQCAtMjIxMCwxMCArMjE0MCw2IEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwg
RmlsdGVyT3BlcmF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllczo6TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7Ci0KLVN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRl
ZmF1bHQ7Ci0KIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkK
ICAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpCkBAIC0yMjk5LDIyICsyMjI1LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYKICAg
ICBtX2RlZmVycmVkUHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwogfQogCi1zdGF0aWMgQ2Fz
Y2FkZUxldmVsIGNhc2NhZGVMZXZlbEZvckluZGV4KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUgJiYgaW5kZXggPD0gbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUpCi0gICAgICAgIHJldHVybiBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVs
OwotICAgIGlmIChpbmRleCA+PSBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSAmJiBp
bmRleCA8PSBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlKQotICAgICAgICByZXR1cm4g
Q2FzY2FkZUxldmVsOjpVc2VyTGV2ZWw7Ci0gICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6QXV0aG9y
TGV2ZWw7Ci19CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIHVuc2lnbmVkIGluZGV4LCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNo
ZWRQcm9wZXJ0aWVzLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpW2luZGV4XTsKICAgICBhdXRvJiBzdHlsZVBy
b3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllczsKLQogICAgIGF1dG8gcHJv
cGVydHlXaGl0ZWxpc3RUeXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKTsKLSAgICBhdXRvIGNhc2NhZGVMZXZlbCA9
IGNhc2NhZGVMZXZlbEZvckluZGV4KG1hdGNoUmVzdWx0LCBpbmRleCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJvcGVydGllcy5w
cm9wZXJ0eUF0KGkpOwpAQCAtMjM0MiwxMyArMjI1NywyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LAogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6
OmFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCisKK3N0YXRpYyBhdXRv
JiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKQogewotICAgIGlmIChzdGFydEluZGV4ID09
IC0xKQotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAgICBj
YXNlIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnM7CisgICAgY2FzZSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOiBy
ZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworICAgIGNhc2UgQ2FzY2FkZUxl
dmVsOjpVc2VyTGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworfQogCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0g
ZW5kSW5kZXg7ICsraSkKLSAgICAgICAgYWRkTWF0Y2gobWF0Y2hSZXN1bHQsIGksIGZhbHNlLCBp
bmhlcml0ZWRPbmx5KTsKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
ZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAgIGZvciAoYXV0byYg
bWF0Y2hlZERlY2xhcmF0aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRjaFJl
c3VsdCwgY2FzY2FkZUxldmVsKSkKKyAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9u
cywgY2FzY2FkZUxldmVsLCBmYWxzZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKIHN0YXRpYyBib29s
IGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVz
KQpAQCAtMjM2MCwyMCArMjI4NCwxOSBAQCBzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJbXBvcnRh
bnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9u
bHkpCiB7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQogICAg
IHN0cnVjdCBJbmRleEFuZE9yZGluYWwgewotICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4OwogICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIG9yZGluYWw7CiAgICAg
fTsKICAgICBWZWN0b3I8SW5kZXhBbmRPcmRpbmFsPiBpbXBvcnRhbnRNYXRjaGVzOwogICAgIGJv
b2wgaGFzTWF0Y2hlc0Zyb21PdGhlclNjb3BlcyA9IGZhbHNlOwogCi0gICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcygpW2ldOworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNG
b3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZERlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaGVk
RGVjbGFyYXRpb25zW2ldOwogCiAgICAgICAgIGlmICghaGFzSW1wb3J0YW50UHJvcGVydGllcygq
bWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTIzOTYsNyArMjMxOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVz
OjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtCiAgICAgfQogCiAgICAg
Zm9yIChhdXRvJiBtYXRjaCA6IGltcG9ydGFudE1hdGNoZXMpCi0gICAgICAgIGFkZE1hdGNoKG1h
dGNoUmVzdWx0LCBtYXRjaC5pbmRleCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFk
ZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRlTGV2ZWwsIHRy
dWUsIGluaGVyaXRlZE9ubHkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllczo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIs
IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKaW5kZXggNTI5NDFiYTZiZDMuLmVkYzVmNTIxODhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50UnVsZVNldHMuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTk5LDE4ICsxMDAsNiBA
QCBlbnVtIGNsYXNzIENhc2NhZGVMZXZlbDogdWludDhfdCB7CiAgICAgVXNlckxldmVsCiB9Owog
Ci1jbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgewotcHVibGljOgotICAgIFBzZXVkb1N0eWxlUmVx
dWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0ZT4gc2Ny
b2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCi0gICAgICAgIDogcHNldWRvSWQocHNldWRvSWQp
Ci0gICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3RhdGUpCi0gICAgewotICAgIH0K
LQotICAgIFBzZXVkb0lkIHBzZXVkb0lkOwotICAgIE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3Rh
dGU+IHNjcm9sbGJhclN0YXRlOwotfTsKLQogc3RydWN0IEVsZW1lbnRTdHlsZSB7CiAgICAgRWxl
bWVudFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxTdHlsZTo6UmVsYXRpb25zPiByZWxhdGlvbnMgPSB7IH0pCiAgICAgICAgIDog
cmVuZGVyU3R5bGUoV1RGTW92ZShyZW5kZXJTdHlsZSkpCkBAIC0xNzUsOCArMTY0LDYgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogCiBwdWJsaWM6Ci0gICAgc3RydWN0IE1hdGNoUmVzdWx0
OwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKQEAgLTIyMSw0OCAr
MjA4LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDYWNoZWRQcm9wZXJ0aWVzQWZmZWN0ZWRC
eVZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25z
dCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0K
LSAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKLSAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4
KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KLSAgICAgICAgaW50JiBmaXJzdFJ1
bGVJbmRleDsKLSAgICAgICAgaW50JiBsYXN0UnVsZUluZGV4OwotICAgIH07Ci0KLSAgICBzdHJ1
Y3QgTWF0Y2hSYW5nZXMgewotICAgICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEp
LCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEp
LCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSB7IH0KLSAgICAgICAgaW50IGZp
cnN0VUFSdWxlOwotICAgICAgICBpbnQgbGFzdFVBUnVsZTsKLSAgICAgICAgaW50IGZpcnN0QXV0
aG9yUnVsZTsKLSAgICAgICAgaW50IGxhc3RBdXRob3JSdWxlOwotICAgICAgICBpbnQgZmlyc3RV
c2VyUnVsZTsKLSAgICAgICAgaW50IGxhc3RVc2VyUnVsZTsKLSAgICAgICAgUnVsZVJhbmdlIFVB
UnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsg
fQotICAgICAgICBSdWxlUmFuZ2UgYXV0aG9yUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdl
KGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOyB9Ci0gICAgICAgIFJ1bGVSYW5nZSB1
c2VyUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VXNlclJ1bGUsIGxhc3RVc2Vy
UnVsZSk7IH0KLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKLSAgICAg
ICAgTWF0Y2hlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgfk1hdGNoZWRQcm9wZXJ0aWVzKCk7Ci0g
ICAgICAgIAotICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzOwotICAg
ICAgICB1aW50MTZfdCBsaW5rTWF0Y2hUeXBlOwotICAgICAgICB1aW50MTZfdCB3aGl0ZWxpc3RU
eXBlOwotICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewotICAgICAgICBNYXRjaFJlc3VsdCgpIDog
aXNDYWNoZWFibGUodHJ1ZSkgeyB9Ci0gICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0
Y2hlZFJ1bGVzOwotICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIGJvb2wgaXND
YWNoZWFibGU7Ci0KLSAgICAgICAgY29uc3QgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4m
IG1hdGNoZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRjaGVkUHJvcGVydGllczsg
fQotCi0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiwgU3R5bGVSdWxlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUsIFN0eWxlOjpTY29wZU9yZGluYWwgPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpF
bGVtZW50KTsKLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMs
IDY0PiBtX21hdGNoZWRQcm9wZXJ0aWVzOwotICAgIH07CiAgICAgCiAgICAgY2xhc3MgQ2FzY2Fk
ZWRQcm9wZXJ0aWVzIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yODEs
OCArMjI2LDggQEAgcHVibGljOgogICAgICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQpIGNvbnN0OwogICAgICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgaW50IHN0
YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZl
bCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworICAgICAgICB2b2lkIGFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVk
T25seSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0
eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwogCkBAIC0yOTEsNyAr
MjM2LDcgQEAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9wZXJ0eShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgQ2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHkpOwogICAgICAgICB2b2lkIHNldChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVu
c2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7
CiAgICAgICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWws
IFN0eWxlOjpTY29wZU9yZGluYWwpOwpAQCAtMzM1LDE0ICsyODAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBjYXNjYWRlTWF0Y2hlcyhDYXNjYWRlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOwogCi0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYs
IFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpOwotICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHls
ZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYs
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSk7Ci0KLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShw
YWdlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
LSAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KICAgICBEb2N1bWVu
dFJ1bGVTZXRzIG1fcnVsZVNldHM7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKQEAgLTQ3
NywyMCArNDE0LDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0
Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6
ZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29u
c3QgTWF0Y2hSZXN1bHQmKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0g
ewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwot
ICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVy
dGllcz4gdXNlckFnZW50RGVjbGFyYXRpb25zOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3Bl
cnRpZXM+IGF1dGhvckRlY2xhcmF0aW9uczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0
aWVzPiB1c2VyRGVjbGFyYXRpb25zOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHJlbmRlclN0eWxlOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBh
cmVudFJlbmRlclN0eWxlOwogICAgICAgICAKICAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0oY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIDogcmFu
Z2VzKG1hdGNoUmVzdWx0LnJhbmdlcykKLSAgICAgICAgICAgICwgcmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGU6OmNsb25lUHRyKCpzdHlsZSkpCisgICAgICAgICAgICA6IHJlbmRlclN0eWxlKFJlbmRl
clN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKQogICAgICAgICAgICAgLCBwYXJlbnRSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnBhcmVudFN0eWxlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgLy8gQXNzaWduIHJhdGhlciB0aGFuIGNvcHktY29uc3RydWN0IHNvIHdlIG9ubHkgYWxs
b2NhdGUgYXMgbXVjaCB2ZWN0b3IgY2FwYWNpdHkgYXMgbmVlZGVkLgotICAgICAgICAgICAgbWF0
Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpOworICAgICAg
ICAgICAgdXNlckFnZW50RGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFy
YXRpb25zOworICAgICAgICAgICAgYXV0aG9yRGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworICAgICAgICAgICAgdXNlckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIH0KICAgICAgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0oKSA9IGRlZmF1bHQ7CiAgICAgfTsKQEAgLTUzMSwxMSArNDcwLDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzIHsgdHJ1ZSB9OwogICAg
IC8vIFNlZSBpZiB3ZSBzdGlsbCBoYXZlIGNyYXNoZXMgd2hlcmUgU3R5bGVSZXNvbHZlciBnZXRz
IGRlbGV0ZWQgZWFybHkuCiAgICAgYm9vbCBtX2lzRGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hS
YW5nZXMmKTsKIH07CiAKIC8vIFN0YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMs
IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CkBAIC01NDMs
NyArNDc3LDcgQEAgcHJpdmF0ZToKIHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7
CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcjsKICAgICBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXMqIGNhc2NhZGU7Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OworICAgIGNvbnN0IE1hdGNoUmVzdWx0KiBtYXRjaFJlc3Vs
dDsKICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07
CiAgICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OwogICAg
IEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJvcGVydGllcyA9IHsgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381667</attachid>
            <date>2019-10-23 02:23:47 -0700</date>
            <delta_ts>2019-10-23 02:49:16 -0700</delta_ts>
            <desc>wip</desc>
            <filename>matchresult-out-of-resolver-3.patch</filename>
            <type>text/plain</type>
            <size>42006</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyYTU5
ZDIxMTEwLi5iNmZiYWRiMGExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0CiAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCitN
YXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoZWRSZXN1bHQoKQogewogICAg
IEFTU0VSVChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSk7
CiAgICAgcmV0dXJuIG1fcmVzdWx0OwpAQCAtMTI0LDE0ICsxMjQsOCBAQCBpbmxpbmUgdm9pZCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnRpZQogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgIT0gLTEpCi0gICAgICAgICsrbV9y
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGVsc2UgewotICAgICAgICBtX3Jlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNp
emUoKTsKLSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSA9IG1fcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICB9CisgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMo
eyBwcm9wZXJ0eVNldCB9LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9yKTsKIAotICAgIG1fcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKCpwcm9wZXJ0eVNldCk7CiAgICAgaWYgKCFpc0NhY2hl
YWJsZSkKICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKIH0KQEAgLTE3OCwy
MiArMTcyLDYgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVs
ZXMoRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpIDw9IG1fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4gPSBbJl0oKSB7Ci0gICAgICAg
IHN3aXRjaCAoZGVjbGFyYXRpb25PcmlnaW4pIHsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9y
aWdpbjo6VXNlckFnZW50OiByZXR1cm4gbV9yZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjogcmV0dXJuIG1fcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY2FzZSBEZWNsYXJhdGlvbk9yaWdpbjo6
VXNlcjogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5y
YW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgfSgpOwotCi0gICAgLy8gRklYTUU6IFJhbmdl
IHVwZGF0aW5nIHNob3VsZCBiZSBkb25lIGJ5IE1hdGNoUmVzdWx0cyB0eXBlCi0gICAgLy8gRklY
TUU6IE1hdGNoUmVzdWx0cyBzaG91bGRuJ3QgYmUgaW4gU3R5bGVSZXNvbHZlciBuYW1lc3BhY2Uu
Ci0gICAgYm9vbCB1cGRhdGVSYW5nZXMgPSBtX21vZGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpDb2xsZWN0aW5nUnVsZXM7Ci0gICAgaWYgKHVwZGF0ZVJhbmdlcyAmJiByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAgICByYW5nZUZvckRlY2xh
cmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID0gbV9yZXN1bHQubWF0Y2hlZFJ1bGVzLnNpemUo
KTsKLQogICAgIGZvciAoOyBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgKyttX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkgewogICAgICAgICBhdXRv
JiBtYXRjaGVkUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4
XTsKICAgICAgICAgaWYgKGZyb21TY29wZSAmJiBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5h
bCA8ICpmcm9tU2NvcGUpCkBAIC0yMDQsMTEgKzE4MiwxMyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29s
bGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiBkZWNsYXJhdGlv
bk9yaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3Vs
dC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCksIG1hdGNoZWRSdWxlLnJ1bGVE
YXRhLT5saW5rTWF0Y2hUeXBlKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRl
bGlzdFR5cGUoKSwgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICBhZGRN
YXRjaGVkUHJvcGVydGllcyh7CisgICAgICAgICAgICAmbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnJ1
bGUoKS0+cHJvcGVydGllcygpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1h
dGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCkpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSksCisgICAgICAgICAgICBtYXRjaGVkUnVsZS5zdHlsZVNjb3BlT3JkaW5hbAorICAgICAg
ICB9LCBkZWNsYXJhdGlvbk9yaWdpbik7CiAgICAgfQotCi0gICAgaWYgKHVwZGF0ZVJhbmdlcykK
LSAgICAgICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5sYXN0UnVsZUluZGV4ID0gbV9yZXN1
bHQubWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7CiB9CiAKIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0
b3I6Om1hdGNoQXV0aG9yUnVsZXMoKQpAQCAtNTg2LDkgKzU2NiwxMCBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBib29sIGluYwogCiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLmRpcmVj
dGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBhdXRv
IHRleHREaXJlY3Rpb24gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkuZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIGF1
dG8mIHByb3BlcnRpZXMgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxl
ZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKTsKICAgICAg
ICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFBy
b3BlcnRpZXModGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOworICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25Pcmln
aW46OkF1dGhvcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MzMsNCArNjE0LDU3IEBA
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc0FueU1hdGNoaW5nUnVsZXMoY29uc3QgUnVs
ZVNldCogcnVsZVNldCkKICAgICByZXR1cm4gIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKTsKIH0K
IAordm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hl
ZFByb3BlcnRpZXMmJiBtYXRjaGVkUHJvcGVydGllcywgRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFy
YXRpb25PcmlnaW4pCit7CisgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRp
bmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpCisgICAgICAgIG1fcmVzdWx0Lmlz
Q2FjaGVhYmxlID0gZmFsc2U7CisKKyAgICBpZiAobV9yZXN1bHQuaXNDYWNoZWFibGUpIHsKKyAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBw
cm9wZXJ0eSBjYWNoZSBvbmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNv
bHZlCisgICAgICAgICAgICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCisgICAgICAgICAgICAvLyBI
ZXJlIHdlIGRlZmluZSBzb21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21l
IHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGluaGVyaXRlZAorICAgICAgICAgICAgLy8gYnkgZGVm
YXVsdC4gSWYgdGhvc2UgZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBp
dCBzaG91bGQgYmUgcG9zc2libGUKKyAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBl
eGNlcHRpb24gdG8gcmVzb2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBj
YWNoZS4KKworICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBj
dXJyZW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkg
dmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBu
b24taW5oZXJpdGVkIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0
IG92ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRv
bid0IGFsbG93IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlID0gKmN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNJbmhlcml0ZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVz
dWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29s
b3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBzYW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBjb2xvciwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0
ZWQgdmFsdWUsIG1ha2luZyB0aGUgbm9uLWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGlu
aGVyaXRlZC4KKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC5pc0NhY2hl
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChkZWNsYXJhdGlvbk9yaWdpbikgewor
ICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDoKKyAgICAgICAgbV9yZXN1bHQu
dXNlckFnZW50RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjoKKyAg
ICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQ
cm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46
OlVzZXI6CisgICAgICAgIG1fcmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bWF0Y2hlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5o
CmluZGV4IDFkZGJmZWE5YzNhLi5iODc1OGQwOTI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk1lZGlh
UXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1l
bW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMzYsMTIgKzM2LDQwIEBAIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNz
IFNlbGVjdG9yRmlsdGVyOwogCitjbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgeworcHVibGljOgor
ICAgIFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVT
Y3JvbGxiYXJTdGF0ZT4gc2Nyb2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCisgICAgICAgIDog
cHNldWRvSWQocHNldWRvSWQpCisgICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3Rh
dGUpCisgICAgeworICAgIH0KKworICAgIFBzZXVkb0lkIHBzZXVkb0lkOworICAgIE9wdGlvbmFs
PFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlOworfTsKKwogc3RydWN0IE1hdGNo
ZWRSdWxlIHsKICAgICBjb25zdCBSdWxlRGF0YSogcnVsZURhdGE7Ci0gICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHk7ICAgCisgICAgdW5zaWduZWQgc3BlY2lmaWNpdHk7CiAgICAgU3R5bGU6OlNjb3Bl
T3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKIH07CiAKK3N0cnVjdCBNYXRjaGVkUHJvcGVydGll
cyB7CisgICAgUmVmUHRyPGNvbnN0IFN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllczsKKyAgICB1
aW50MTZfdCBsaW5rTWF0Y2hUeXBlIHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCB9OworICAg
IHVpbnQxNl90IHdoaXRlbGlzdFR5cGUgeyBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUgfTsKKyAgICBT
dHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsIHsgU3R5bGU6OlNjb3BlT3JkaW5h
bDo6RWxlbWVudCB9OworfTsKKworc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAgICBib29sIGlzQ2Fj
aGVhYmxlIHsgdHJ1ZSB9OworICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IHVzZXJB
Z2VudERlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiBhdXRo
b3JEZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4gdXNlckRl
Y2xhcmF0aW9uczsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJBZ2Vu
dERlY2xhcmF0aW9ucy5pc0VtcHR5KCkgJiYgYXV0aG9yRGVjbGFyYXRpb25zLmlzRW1wdHkoKSAm
JiB1c2VyRGVjbGFyYXRpb25zLmlzRW1wdHkoKTsgfQorfTsKKwogY2xhc3MgRWxlbWVudFJ1bGVD
b2xsZWN0b3IgewogcHVibGljOgogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yKGNvbnN0IEVsZW1l
bnQmLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqKTsKQEAg
LTYyLDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBbnlNYXRjaGluZ1J1bGVzKGNv
bnN0IFJ1bGVTZXQqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVk
UmVzdWx0KCk7CisgICAgTWF0Y2hSZXN1bHQmIG1hdGNoZWRSZXN1bHQoKTsKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZUxpc3QoKSBjb25zdDsKIAogICAg
IHZvaWQgY2xlYXJNYXRjaGVkUnVsZXMoKTsKQEAgLTk5LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9yaWdpbiwgT3B0aW9uYWw8
U3R5bGU6OlNjb3BlT3JkaW5hbD4gZm9yU2NvcGUgPSB7IH0pOwogCiAgICAgdm9pZCBhZGRNYXRj
aGVkUnVsZShjb25zdCBSdWxlRGF0YSYsIHVuc2lnbmVkIHNwZWNpZmljaXR5LCBTdHlsZTo6U2Nv
cGVPcmRpbmFsKTsKKyAgICB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoZWRQcm9wZXJ0
aWVzJiYsIERlY2xhcmF0aW9uT3JpZ2luKTsKIAogICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIApAQCAtMTIzLDkgKzE1MiwxOSBA
QCBwcml2YXRlOgogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+
IG1fbWF0Y2hlZFJ1bGVMaXN0OwogICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRl
U2VsZWN0b3IgeyBmYWxzZSB9OwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0IG1fcmVz
dWx0OworICAgIE1hdGNoUmVzdWx0IG1fcmVzdWx0OwogICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9z
dHlsZVJlbGF0aW9uczsKICAgICBQc2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRz
OwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYg
YSwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuIGEucHJvcGVydGll
cyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgYSwg
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHAKaW5kZXggYTI4NDUwYThmYWMuLjA3NDgzZGY2Y2YyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBQYWdlUnVs
ZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0YKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4o
KSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJv
cGVydGllcygpKTsKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7
ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29s
IGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKaW5kZXggNzgzOTg3MTYyYjAu
LjExNDUxMDdhNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ydWxlU2V0cyhydWxlU2V0cykgeyB9
CiAKICAgICB2b2lkIG1hdGNoQWxsUGFnZVJ1bGVzKGludCBwYWdlSW5kZXgpOwotICAgIFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVkUmVzdWx0KCkgeyByZXR1cm4gbV9yZXN1bHQ7
IH0KKyAgICBNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwpA
QCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBtX3N0YXRlOwogICAgIERvY3VtZW50UnVsZVNldHMmIG1fcnVsZVNldHM7CiAKLSAgICBTdHls
ZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKKyAgICBNYXRjaFJlc3VsdCBtX3Jlc3Vs
dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAppbmRleCBjNWYxYmMzZTA0Ni4uY2UyOGZhOTgyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVy
dHkgKyAxKTsKIAotc3RhdGljIHZvaWQgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmLCBUZXh0
RGlyZWN0aW9uJiwgV3JpdGluZ01vZGUmKTsKK3N0YXRpYyB2b2lkIGV4dHJhY3REaXJlY3Rpb25B
bmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4
dERpcmVjdGlvbiYsIFdyaXRpbmdNb2RlJik7CiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQogewpAQCAtMTM5LDU0ICsxMzksNiBA
QCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQogICAgIG1fY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUsIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCi17Ci0gICAgbV9tYXRj
aGVkUHJvcGVydGllcy5ncm93KG1fbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIG5ld1Byb3BlcnRpZXMgPSBtX21hdGNo
ZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBjb25z
dF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KCZwcm9wZXJ0aWVzKTsKLSAgICBuZXdQcm9wZXJ0aWVz
LmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAgIG5ld1Byb3BlcnRpZXMud2hpdGVs
aXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLnN0eWxl
U2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7Ci0gICAgbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsKLQotICAgIGlmIChzdHlsZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRp
bmFsOjpFbGVtZW50KQotICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotCi0gICAgaWYgKGlz
Q2FjaGVhYmxlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gcHJvcGVy
dGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBD
dXJyZW50bHkgdGhlIHByb3BlcnR5IGNhY2hlIG9ubHkgY29weSB0aGUgbm9uLWluaGVyaXRlZCB2
YWx1ZXMgYW5kIHJlc29sdmUKLSAgICAgICAgICAgIC8vIHRoZSBpbmhlcml0ZWQgb25lcy4KLSAg
ICAgICAgICAgIC8vIEhlcmUgd2UgZGVmaW5lIHNvbWUgZXhjZXB0aW9uIHdlcmUgd2UgaGF2ZSB0
byByZXNvbHZlIHNvbWUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgaW5oZXJpdGVkCi0gICAgICAg
ICAgICAvLyBieSBkZWZhdWx0LiBJZiB0aG9zZSBleGNlcHRpb25zIGJlY29tZSB0b28gY29tbW9u
IG9uIHRoZSB3ZWIsIGl0IHNob3VsZCBiZSBwb3NzaWJsZQotICAgICAgICAgICAgLy8gdG8gYnVp
bGQgYSBsaXN0IG9mIGV4Y2VwdGlvbiB0byByZXNvbHZlIGluc3RlYWQgb2YgY29tcGxldGVseSBk
aXNhYmxpbmcgdGhlIGNhY2hlLgotCi0gICAgICAgICAgICBTdHlsZVByb3BlcnRpZXM6OlByb3Bl
cnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLnByb3BlcnR5QXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQuaXNJbmhlcml0ZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBh
cHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8v
IGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhp
cyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgICAg
ICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAg
ICAgICAgICAgICBjb25zdCBDU1NWYWx1ZSYgdmFsdWUgPSAqY3VycmVudC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0luaGVyaXRlZFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGN1cnJl
bnRDb2xvciBoYXMgaW1wbGljaXRlbHkgdGhlIHNhbWUgc2lkZSBlZmZlY3QuIEl0IGRlcGVuZHMg
b24gdGhlIHZhbHVlIG9mIGNvbG9yLAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIGFuIGlu
aGVyaXRlZCB2YWx1ZSwgbWFraW5nIHRoZSBub24taW5oZXJpdGVkIHByb3BlcnR5IGltcGxpY2l0
bHkgaW5oZXJpdGVkLgotICAgICAgICAgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09
IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIDogbV9ydWxlU2V0cygqdGhpcykKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZVN3ZWVwVGltZXIoKnRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUpCkBAIC0yNzYsMTkgKzIyOCwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVw
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4g
ZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlu
bGluZVN0eWxlKCkKICAgICAvLyBvciBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3Rl
bnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBv
bmUuCiAgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4o
KTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52
YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQ
cm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAg
dG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZv
ciAoYXV0byBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5iZWdpbigpLCBlbmQgPSBtX21h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBh
dXRvIGZpbmRFbnRyaWVzV2l0aE9uZVJlZiA9IFsmXShWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+
JiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbWF0Y2hlZFByb3BlcnRp
ZXMgOiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAg
YXV0byYgZW50cnkgPSBpdC0+dmFsdWU7CisgICAgICAgIGZpbmRFbnRyaWVzV2l0aE9uZVJlZihl
bnRyeS51c2VyQWdlbnREZWNsYXJhdGlvbnMpOworICAgICAgICBmaW5kRW50cmllc1dpdGhPbmVS
ZWYoZW50cnkuYXV0aG9yRGVjbGFyYXRpb25zKTsKKyAgICAgICAgZmluZEVudHJpZXNXaXRoT25l
UmVmKGVudHJ5LnVzZXJEZWNsYXJhdGlvbnMpOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICBmb3IgKGF1dG8gaW5kZXggOiB0b1JlbW92
ZSkKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZShpbmRleCk7CiAKICAg
ICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9
CkBAIC00MDcsNyArMzYyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworICAgIHJl
c3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJmtleWZyYW1lLT5wcm9wZXJ0aWVzKCkg
fSk7CiAKICAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUoKSk7CiAKQEAgLTQyNCw3ICszNzksNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIg
d2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVj
bCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJv
cGVydGllcy4KICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1h
dGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9
OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdo
UHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7CkBAIC01OTAsNyArNTQ1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYKIAogICAgIEFTU0VSVCghY29sbGVjdG9yLm1hdGNoZWRQc2V1ZG9F
bGVtZW50SWRzKCkpOwogCi0gICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCkubWF0Y2hl
ZFByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRlLnN0eWxl
KCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwpAQCAtNjIzLDE0
ICs1NzgsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBQYWdlUnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IobV9zdGF0ZSwgbV9ydWxlU2V0cyk7CiAgICAgY29sbGVjdG9yLm1hdGNoQWxsUGFnZVJ1bGVz
KHBhZ2VJbmRleCk7CiAKLSAgICBNYXRjaFJlc3VsdCYgcmVzdWx0ID0gY29sbGVjdG9yLm1hdGNo
ZWRSZXN1bHQoKTsKKyAgICBhdXRvJiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgp
OwogCiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGU7CiAgICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxl
KCksIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKICAgICBDYXNjYWRlZFByb3Bl
cnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5v
cm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkg
LSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3Rh
dGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0
ZSk7CkBAIC0xMzE5LDM0ICsxMjc0LDExIEBAIHN0YXRpYyBib29sIGVsZW1lbnRUeXBlSGFzQXBw
ZWFyYW5jZUZyb21VQVN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIHx8IGxv
Y2FsTmFtZSA9PSBIVE1MTmFtZXM6Om1ldGVyVGFnOwogfQogCi11bnNpZ25lZCBTdHlsZVJlc29s
dmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUp
OwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMm
IGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQordW5zaWduZWQgU3R5bGVS
ZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGEuZmlyc3RVQVJ1bGUgPT0gYi5maXJzdFVBUnVs
ZQotICAgICAgICAmJiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0VUFSdWxlCi0gICAgICAgICYmIGEu
Zmlyc3RBdXRob3JSdWxlID09IGIuZmlyc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEubGFzdEF1
dGhvclJ1bGUgPT0gYi5sYXN0QXV0aG9yUnVsZQotICAgICAgICAmJiBhLmZpcnN0VXNlclJ1bGUg
PT0gYi5maXJzdFVzZXJSdWxlCi0gICAgICAgICYmIGEubGFzdFVzZXJSdWxlID09IGIubGFzdFVz
ZXJSdWxlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hS
YW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJl
dHVybiAhKGEgPT0gYik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYg
YS5saW5rTWF0Y2hUeXBlID09IGIubGlua01hdGNoVHlwZTsKLX0KLQotYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJl
c29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwor
ICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQudXNlckFnZW50
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5zaXplKCkpCisgICAgICAgIF4gU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5kYXRhKCksIHNpemVv
ZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuc2l6
ZSgpKQorICAgICAgICBeIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3VsdC51c2Vy
RGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnMuc2l6ZSgpKTsKIH0KIAogY29uc3QgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQpCkBAIC0xMzU2LDE3ICsxMjg4LDExIEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAg
ICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuZmluZChoYXNoKTsKICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwogCi0gICAgc2l6ZV90IHNpemUgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSAhPSBj
YWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKVtpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFBy
b3BlcnRpZXNbaV0pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYg
KGNhY2hlSXRlbS5yYW5nZXMgIT0gbWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgIGF1dG8mIGNhY2hl
SXRlbSA9IGl0LT52YWx1ZTsKKyAgICBpZiAobWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRp
b25zICE9IGNhY2hlSXRlbS51c2VyQWdlbnREZWNsYXJhdGlvbnMgfHwgbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zICE9IGNhY2hlSXRlbS5hdXRob3JEZWNsYXJhdGlvbnMgfHwgbWF0Y2hS
ZXN1bHQudXNlckRlY2xhcmF0aW9ucyAhPSBjYWNoZUl0ZW0udXNlckRlY2xhcmF0aW9ucykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gJmNhY2hlSXRlbTsKIH0KIApAQCAt
MTQyMyw3ICsxMzQ5LDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIFRleHREaXJlY3Rpb24mIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQor
dm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFRleHREaXJlY3Rpb24mIGRpcmVj
dGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQogewogICAgIGRpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIHdyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKQEAg
LTE0MzEsMjYgKzEzNTcsMjggQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKICAgICBib29sIGhh
ZEltcG9ydGFudFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgYm9vbCBoYWRJbXBvcnRhbnREaXJl
Y3Rpb24gPSBmYWxzZTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMg
OiBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGNvdW50ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IG1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5QXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkuaWQoKSkgewotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgotICAgICAgICAgICAgICAgIGlmICgh
aGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqcHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdy
aXRpbmdNb2RlID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0
aW9uOgotICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3Bl
cnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsK
KyAgICBmb3IgKGF1dG8qIG1hdGNoZWREZWNsYXJhdGlvbnMgOiB7ICZtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnMsICZtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMsICZtYXRj
aFJlc3VsdC51c2VyRGVjbGFyYXRpb25zIH0pIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBt
YXRjaGVkUHJvcGVydGllcyA6ICptYXRjaGVkRGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMt
PnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHByb3BlcnR5ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChwcm9wZXJ0eS5pZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRp
bmdNb2RlOgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdyaXRpbmdNb2Rl
IHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdyaXRpbmdNb2RlID0gcHJv
cGVydHkuaXNJbXBvcnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9u
OgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9w
ZXJ0eS5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24g
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBv
cnRhbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTQ1OSw3ICsxMzg3LDcgQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3Jp
dGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFNob3VsZFVzZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUgc2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKIHsKICAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVz
ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYgbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21w
dXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCku
ZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKSkgOiAwOworICAg
IHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYg
bWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1h
dGNoUmVzdWx0KSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAg
ICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gbnVsbHB0cjsK
ICAgICBpZiAoY2FjaGVIYXNoICYmIChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCkpCkBAIC0xNDkzLDggKzE0MjEsOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJv
cmRlciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoKQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYg
dGhpcyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgogICAgICAgICBDYXNjYWRlZFBy
b3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgY2FzY2Fk
ZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyht
YXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAgICAg
ICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2Fk
ZSwgJm1hdGNoUmVzdWx0IH07CiAKQEAgLTE1MjAsMTAgKzE0NDgsMTIgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QKICAgICB9CiAKICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJl
Y3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFk
ZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hS
ZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6
OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFs
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2Nh
ZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2
ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVz
KG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTcxOSwxMCArMTY0OSwxMCBAQCBT
dHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVk
UHJvcGVydGllc0ZvclJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld0F1dGhvclJvbGxiYWNrKG1h
a2VVbmlxdWU8Q2FzY2FkZWRQcm9wZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAK
ICAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVs
ZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KLSAgICAgICAgbmV3QXV0aG9y
Um9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAg
ICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRN
YXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwor
ICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwg
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2Vy
TGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1h
dGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBmYWxzZSk7CisgICAg
ICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3RhdGUoKS5z
ZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBzdGF0
ZSgpLmF1dGhvclJvbGxiYWNrKCk7CkBAIC0xNzM2LDggKzE2NjYsOCBAQCBTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVkUHJvcGVydGllc0Zv
clJvbGxiYWNrKAogICAgICAgICBhdXRvIG5ld1VzZXJSb2xsYmFjayhtYWtlVW5pcXVlPENhc2Nh
ZGVkUHJvcGVydGllcz4oZGlyZWN0aW9uLCB3cml0aW5nTW9kZSkpOwogCiAgICAgICAgIC8vIFRo
aXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVsZXMuCi0gICAg
ICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
ZmFsc2UpOwotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0
Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3Jt
YWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxz
ZSk7CisgICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJl
c3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOwogCiAgICAgICAgIHN0
YXRlKCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBz
dGF0ZSgpLnVzZXJSb2xsYmFjaygpOwpAQCAtMjIxMCwxMCArMjE0MCw2IEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwg
RmlsdGVyT3BlcmF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZVJlc29sdmVy
OjpNYXRjaGVkUHJvcGVydGllczo6TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7Ci0KLVN0
eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRl
ZmF1bHQ7Ci0KIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkK
ICAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpCkBAIC0yMjk5LDIyICsyMjI1LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYKICAg
ICBtX2RlZmVycmVkUHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwogfQogCi1zdGF0aWMgQ2Fz
Y2FkZUxldmVsIGNhc2NhZGVMZXZlbEZvckluZGV4KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUgJiYgaW5kZXggPD0gbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUpCi0gICAgICAgIHJldHVybiBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVs
OwotICAgIGlmIChpbmRleCA+PSBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSAmJiBp
bmRleCA8PSBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlKQotICAgICAgICByZXR1cm4g
Q2FzY2FkZUxldmVsOjpVc2VyTGV2ZWw7Ci0gICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6QXV0aG9y
TGV2ZWw7Ci19CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIHVuc2lnbmVkIGluZGV4LCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNo
ZWRQcm9wZXJ0aWVzLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgPSBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpW2luZGV4XTsKICAgICBhdXRvJiBzdHlsZVBy
b3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllczsKLQogICAgIGF1dG8gcHJv
cGVydHlXaGl0ZWxpc3RUeXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKTsKLSAgICBhdXRvIGNhc2NhZGVMZXZlbCA9
IGNhc2NhZGVMZXZlbEZvckluZGV4KG1hdGNoUmVzdWx0LCBpbmRleCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkg
PCBjb3VudDsgKytpKSB7CiAgICAgICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJvcGVydGllcy5w
cm9wZXJ0eUF0KGkpOwpAQCAtMjM0MiwxMyArMjI1NywyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LAogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6
OmFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCisKK3N0YXRpYyBhdXRv
JiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKQogewotICAgIGlmIChzdGFydEluZGV4ID09
IC0xKQotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAgICBj
YXNlIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2Vy
QWdlbnREZWNsYXJhdGlvbnM7CisgICAgY2FzZSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOiBy
ZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworICAgIGNhc2UgQ2FzY2FkZUxl
dmVsOjpVc2VyTGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworfQogCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0g
ZW5kSW5kZXg7ICsraSkKLSAgICAgICAgYWRkTWF0Y2gobWF0Y2hSZXN1bHQsIGksIGZhbHNlLCBp
bmhlcml0ZWRPbmx5KTsKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
ZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAgIGZvciAoYXV0byYg
bWF0Y2hlZERlY2xhcmF0aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRjaFJl
c3VsdCwgY2FzY2FkZUxldmVsKSkKKyAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9u
cywgY2FzY2FkZUxldmVsLCBmYWxzZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKIHN0YXRpYyBib29s
IGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVz
KQpAQCAtMjM2MCwyMCArMjI4NCwxOSBAQCBzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJbXBvcnRh
bnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9u
bHkpCiB7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQogICAg
IHN0cnVjdCBJbmRleEFuZE9yZGluYWwgewotICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4OwogICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIG9yZGluYWw7CiAgICAg
fTsKICAgICBWZWN0b3I8SW5kZXhBbmRPcmRpbmFsPiBpbXBvcnRhbnRNYXRjaGVzOwogICAgIGJv
b2wgaGFzTWF0Y2hlc0Zyb21PdGhlclNjb3BlcyA9IGZhbHNlOwogCi0gICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcygpW2ldOworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNG
b3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZERlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaGVk
RGVjbGFyYXRpb25zW2ldOwogCiAgICAgICAgIGlmICghaGFzSW1wb3J0YW50UHJvcGVydGllcygq
bWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTIzOTYsNyArMjMxOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVz
OjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtCiAgICAgfQogCiAgICAg
Zm9yIChhdXRvJiBtYXRjaCA6IGltcG9ydGFudE1hdGNoZXMpCi0gICAgICAgIGFkZE1hdGNoKG1h
dGNoUmVzdWx0LCBtYXRjaC5pbmRleCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFk
ZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRlTGV2ZWwsIHRy
dWUsIGluaGVyaXRlZE9ubHkpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllczo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIs
IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKaW5kZXggNTI5NDFiYTZiZDMuLmVkYzVmNTIxODhiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50UnVsZVNldHMuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTk5LDE4ICsxMDAsNiBA
QCBlbnVtIGNsYXNzIENhc2NhZGVMZXZlbDogdWludDhfdCB7CiAgICAgVXNlckxldmVsCiB9Owog
Ci1jbGFzcyBQc2V1ZG9TdHlsZVJlcXVlc3QgewotcHVibGljOgotICAgIFBzZXVkb1N0eWxlUmVx
dWVzdChQc2V1ZG9JZCBwc2V1ZG9JZCwgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0ZT4gc2Ny
b2xsYmFyU3RhdGUgPSBXVEY6Om51bGxvcHQpCi0gICAgICAgIDogcHNldWRvSWQocHNldWRvSWQp
Ci0gICAgICAgICwgc2Nyb2xsYmFyU3RhdGUoc2Nyb2xsYmFyU3RhdGUpCi0gICAgewotICAgIH0K
LQotICAgIFBzZXVkb0lkIHBzZXVkb0lkOwotICAgIE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3Rh
dGU+IHNjcm9sbGJhclN0YXRlOwotfTsKLQogc3RydWN0IEVsZW1lbnRTdHlsZSB7CiAgICAgRWxl
bWVudFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxTdHlsZTo6UmVsYXRpb25zPiByZWxhdGlvbnMgPSB7IH0pCiAgICAgICAgIDog
cmVuZGVyU3R5bGUoV1RGTW92ZShyZW5kZXJTdHlsZSkpCkBAIC0xNzUsOCArMTY0LDYgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogCiBwdWJsaWM6Ci0gICAgc3RydWN0IE1hdGNoUmVzdWx0
OwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKQEAgLTIyMSw0OCAr
MjA4LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDYWNoZWRQcm9wZXJ0aWVzQWZmZWN0ZWRC
eVZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25z
dCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0K
LSAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKLSAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4
KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KLSAgICAgICAgaW50JiBmaXJzdFJ1
bGVJbmRleDsKLSAgICAgICAgaW50JiBsYXN0UnVsZUluZGV4OwotICAgIH07Ci0KLSAgICBzdHJ1
Y3QgTWF0Y2hSYW5nZXMgewotICAgICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEp
LCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEp
LCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSB7IH0KLSAgICAgICAgaW50IGZp
cnN0VUFSdWxlOwotICAgICAgICBpbnQgbGFzdFVBUnVsZTsKLSAgICAgICAgaW50IGZpcnN0QXV0
aG9yUnVsZTsKLSAgICAgICAgaW50IGxhc3RBdXRob3JSdWxlOwotICAgICAgICBpbnQgZmlyc3RV
c2VyUnVsZTsKLSAgICAgICAgaW50IGxhc3RVc2VyUnVsZTsKLSAgICAgICAgUnVsZVJhbmdlIFVB
UnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsg
fQotICAgICAgICBSdWxlUmFuZ2UgYXV0aG9yUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdl
KGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOyB9Ci0gICAgICAgIFJ1bGVSYW5nZSB1
c2VyUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0VXNlclJ1bGUsIGxhc3RVc2Vy
UnVsZSk7IH0KLSAgICB9OwotCi0gICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKLSAgICAg
ICAgTWF0Y2hlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgfk1hdGNoZWRQcm9wZXJ0aWVzKCk7Ci0g
ICAgICAgIAotICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzOwotICAg
ICAgICB1aW50MTZfdCBsaW5rTWF0Y2hUeXBlOwotICAgICAgICB1aW50MTZfdCB3aGl0ZWxpc3RU
eXBlOwotICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewotICAgICAgICBNYXRjaFJlc3VsdCgpIDog
aXNDYWNoZWFibGUodHJ1ZSkgeyB9Ci0gICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0
Y2hlZFJ1bGVzOwotICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIGJvb2wgaXND
YWNoZWFibGU7Ci0KLSAgICAgICAgY29uc3QgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4m
IG1hdGNoZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRjaGVkUHJvcGVydGllczsg
fQotCi0gICAgICAgIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiwgU3R5bGVSdWxlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUsIFN0eWxlOjpTY29wZU9yZGluYWwgPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpF
bGVtZW50KTsKLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMs
IDY0PiBtX21hdGNoZWRQcm9wZXJ0aWVzOwotICAgIH07CiAgICAgCiAgICAgY2xhc3MgQ2FzY2Fk
ZWRQcm9wZXJ0aWVzIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yODEs
OCArMjI2LDggQEAgcHVibGljOgogICAgICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQpIGNvbnN0OwogICAgICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgaW50IHN0
YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAg
ICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZl
bCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworICAgICAgICB2b2lkIGFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVk
T25seSA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0
eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwogCkBAIC0yOTEsNyAr
MjM2LDcgQEAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9wZXJ0eShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRN
YXRjaChjb25zdCBNYXRjaFJlc3VsdCYsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzSW1wb3J0YW50
LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgQ2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHkpOwogICAgICAgICB2b2lkIHNldChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVu
c2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7
CiAgICAgICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWws
IFN0eWxlOjpTY29wZU9yZGluYWwpOwpAQCAtMzM1LDE0ICsyODAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBjYXNjYWRlTWF0Y2hlcyhDYXNjYWRlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOwogCi0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYs
IFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpOwotICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHls
ZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYs
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSk7Ci0KLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShw
YWdlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsK
LSAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KICAgICBEb2N1bWVu
dFJ1bGVTZXRzIG1fcnVsZVNldHM7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKQEAgLTQ3
NywyMCArNDE0LDIyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0
Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6
ZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29u
c3QgTWF0Y2hSZXN1bHQmKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0g
ewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwot
ICAgICAgICBNYXRjaFJhbmdlcyByYW5nZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVy
dGllcz4gdXNlckFnZW50RGVjbGFyYXRpb25zOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3Bl
cnRpZXM+IGF1dGhvckRlY2xhcmF0aW9uczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0
aWVzPiB1c2VyRGVjbGFyYXRpb25zOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHJlbmRlclN0eWxlOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBh
cmVudFJlbmRlclN0eWxlOwogICAgICAgICAKICAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0oY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIDogcmFu
Z2VzKG1hdGNoUmVzdWx0LnJhbmdlcykKLSAgICAgICAgICAgICwgcmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGU6OmNsb25lUHRyKCpzdHlsZSkpCisgICAgICAgICAgICA6IHJlbmRlclN0eWxlKFJlbmRl
clN0eWxlOjpjbG9uZVB0cigqc3R5bGUpKQogICAgICAgICAgICAgLCBwYXJlbnRSZW5kZXJTdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnBhcmVudFN0eWxlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgLy8gQXNzaWduIHJhdGhlciB0aGFuIGNvcHktY29uc3RydWN0IHNvIHdlIG9ubHkgYWxs
b2NhdGUgYXMgbXVjaCB2ZWN0b3IgY2FwYWNpdHkgYXMgbmVlZGVkLgotICAgICAgICAgICAgbWF0
Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpOworICAgICAg
ICAgICAgdXNlckFnZW50RGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFy
YXRpb25zOworICAgICAgICAgICAgYXV0aG9yRGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zOworICAgICAgICAgICAgdXNlckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIH0KICAgICAgICAgTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0oKSA9IGRlZmF1bHQ7CiAgICAgfTsKQEAgLTUzMSwxMSArNDcwLDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzIHsgdHJ1ZSB9OwogICAg
IC8vIFNlZSBpZiB3ZSBzdGlsbCBoYXZlIGNyYXNoZXMgd2hlcmUgU3R5bGVSZXNvbHZlciBnZXRz
IGRlbGV0ZWQgZWFybHkuCiAgICAgYm9vbCBtX2lzRGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hS
YW5nZXMmKTsKIH07CiAKIC8vIFN0YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMs
IHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CkBAIC01NDMs
NyArNDc3LDcgQEAgcHJpdmF0ZToKIHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7
CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcjsKICAgICBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXMqIGNhc2NhZGU7Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OworICAgIGNvbnN0IE1hdGNoUmVzdWx0KiBtYXRjaFJlc3Vs
dDsKICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07
CiAgICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OwogICAg
IEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJvcGVydGllcyA9IHsgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381668</attachid>
            <date>2019-10-23 02:49:16 -0700</date>
            <delta_ts>2019-10-23 04:31:36 -0700</delta_ts>
            <desc>wip</desc>
            <filename>matchresult-out-of-resolver-4.patch</filename>
            <type>text/plain</type>
            <size>42860</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGEyYTU5
ZDIxMTEwLi5hNTQyYTExMmMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0CiAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBhcmVudFN0
YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCitj
b25zdCBNYXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoUmVzdWx0KCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9tb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2
aW5nU3R5bGUpOwogICAgIHJldHVybiBtX3Jlc3VsdDsKQEAgLTEyNCwxNCArMTI0LDggQEAgaW5s
aW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0aWUKICAgICBpZiAoIXByb3BlcnR5U2V0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9yZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlICE9IC0xKQotICAg
ICAgICArK21fcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgbV9yZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gbV9yZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMoKS5zaXplKCk7Ci0gICAgICAgIG1fcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUg
PSBtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgfQorICAgIGFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKHsgcHJvcGVydHlTZXQgfSwgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcik7CiAK
LSAgICBtX3Jlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcygqcHJvcGVydHlTZXQpOwogICAgIGlm
ICghaXNDYWNoZWFibGUpCiAgICAgICAgIG1fcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiB9
CkBAIC0xNzgsMjIgKzE3Miw2IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKERlY2xhcmF0aW9uT3JpZ2luIGRlY2xhcmF0aW9uT3JpCiAgICAgaWYgKG1f
bWF0Y2hlZFJ1bGVzLnNpemUoKSA8PSBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZUZvckRlY2xhcmF0aW9uT3JpZ2luID0gWyZdKCkg
ewotICAgICAgICBzd2l0Y2ggKGRlY2xhcmF0aW9uT3JpZ2luKSB7Ci0gICAgICAgIGNhc2UgRGVj
bGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy5VQVJ1bGVS
YW5nZSgpOwotICAgICAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpBdXRob3I6IHJldHVybiBt
X3Jlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNhc2UgRGVjbGFyYXRp
b25PcmlnaW46OlVzZXI6IHJldHVybiBtX3Jlc3VsdC5yYW5nZXMudXNlclJ1bGVSYW5nZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
bV9yZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgIH0oKTsKLQotICAgIC8vIEZJ
WE1FOiBSYW5nZSB1cGRhdGluZyBzaG91bGQgYmUgZG9uZSBieSBNYXRjaFJlc3VsdHMgdHlwZQot
ICAgIC8vIEZJWE1FOiBNYXRjaFJlc3VsdHMgc2hvdWxkbid0IGJlIGluIFN0eWxlUmVzb2x2ZXIg
bmFtZXNwYWNlLgotICAgIGJvb2wgdXBkYXRlUmFuZ2VzID0gbV9tb2RlICE9IFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzOwotICAgIGlmICh1cGRhdGVSYW5nZXMgJiYgcmFu
Z2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5maXJzdFJ1bGVJbmRleCA9PSAtMSkKLSAgICAgICAgcmFu
Z2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5maXJzdFJ1bGVJbmRleCA9IG1fcmVzdWx0Lm1hdGNoZWRS
dWxlcy5zaXplKCk7Ci0KICAgICBmb3IgKDsgbV9tYXRjaGVkUnVsZVRyYW5zZmVySW5kZXggPCBt
X21hdGNoZWRSdWxlcy5zaXplKCk7ICsrbV9tYXRjaGVkUnVsZVRyYW5zZmVySW5kZXgpIHsKICAg
ICAgICAgYXV0byYgbWF0Y2hlZFJ1bGUgPSBtX21hdGNoZWRSdWxlc1ttX21hdGNoZWRSdWxlVHJh
bnNmZXJJbmRleF07CiAgICAgICAgIGlmIChmcm9tU2NvcGUgJiYgbWF0Y2hlZFJ1bGUuc3R5bGVT
Y29wZU9yZGluYWwgPCAqZnJvbVNjb3BlKQpAQCAtMjA0LDExICsxODIsMTMgQEAgdm9pZCBFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVsZXMoRGVjbGFyYXRpb25PcmlnaW4g
ZGVjbGFyYXRpb25PcmkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hlZFJ1bGUucnVsZURhdGEtPnJ1
bGUoKS0+cHJvcGVydGllcygpLCBtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLCBtYXRjaGVk
UnVsZS5ydWxlRGF0YS0+bGlua01hdGNoVHlwZSgpLCBtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cHJv
cGVydHlXaGl0ZWxpc3RUeXBlKCksIG1hdGNoZWRSdWxlLnN0eWxlU2NvcGVPcmRpbmFsKTsKKyAg
ICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMoeworICAgICAgICAgICAgJm1hdGNoZWRSdWxlLnJ1
bGVEYXRhLT5ydWxlKCktPnByb3BlcnRpZXMoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQxNl90PihtYXRjaGVkUnVsZS5ydWxlRGF0YS0+bGlua01hdGNoVHlwZSgpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cHJvcGVydHlX
aGl0ZWxpc3RUeXBlKCkpLAorICAgICAgICAgICAgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGlu
YWwKKyAgICAgICAgfSwgZGVjbGFyYXRpb25PcmlnaW4pOwogICAgIH0KLQotICAgIGlmICh1cGRh
dGVSYW5nZXMpCi0gICAgICAgIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4ubGFzdFJ1bGVJbmRl
eCA9IG1fcmVzdWx0Lm1hdGNoZWRSdWxlcy5zaXplKCkgLSAxOwogfQogCiB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKCkKQEAgLTU4Niw5ICs1NjYsMTAgQEAgdm9p
ZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhib29sIG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcywgYm9vbCBpbmMKIAogICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KHN0eWxl
ZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAgIFRleHRE
aXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHlsZWRFbGVt
ZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAg
ICAgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxlZEVs
ZW1lbnQpLmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAg
ICAgICAgICBhdXRvJiBwcm9wZXJ0aWVzID0gdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQotICAgICAgICAgICAgICAgIG1fcmVzdWx0LmFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
bGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyh7ICZwcm9wZXJ0aWVzIH0sIERlY2xh
cmF0aW9uT3JpZ2luOjpBdXRob3IpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNjMzLDQg
KzYxNCw1NyBAQCBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGluZ1J1bGVz
KGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpCiAgICAgcmV0dXJuICFtX21hdGNoZWRSdWxlcy5pc0Vt
cHR5KCk7CiB9CiAKK3ZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZE1hdGNoZWRQcm9wZXJ0
aWVzKE1hdGNoZWRQcm9wZXJ0aWVzJiYgbWF0Y2hlZFByb3BlcnRpZXMsIERlY2xhcmF0aW9uT3Jp
Z2luIGRlY2xhcmF0aW9uT3JpZ2luKQoreworICAgIGlmIChtYXRjaGVkUHJvcGVydGllcy5zdHls
ZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpFbGVtZW50KQorICAgICAgICBt
X3Jlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworCisgICAgaWYgKG1fcmVzdWx0LmlzQ2FjaGVh
YmxlKSB7CisgICAgICAgIGF1dG8mIHByb3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRpZXMucHJv
cGVydGllczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSBwcm9wZXJ0aWVz
LnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEN1cnJl
bnRseSB0aGUgcHJvcGVydHkgY2FjaGUgb25seSBjb3B5IHRoZSBub24taW5oZXJpdGVkIHZhbHVl
cyBhbmQgcmVzb2x2ZQorICAgICAgICAgICAgLy8gdGhlIGluaGVyaXRlZCBvbmVzLgorICAgICAg
ICAgICAgLy8gSGVyZSB3ZSBkZWZpbmUgc29tZSBleGNlcHRpb24gd2VyZSB3ZSBoYXZlIHRvIHJl
c29sdmUgc29tZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBpbmhlcml0ZWQKKyAgICAgICAgICAg
IC8vIGJ5IGRlZmF1bHQuIElmIHRob3NlIGV4Y2VwdGlvbnMgYmVjb21lIHRvbyBjb21tb24gb24g
dGhlIHdlYiwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlCisgICAgICAgICAgICAvLyB0byBidWlsZCBh
IGxpc3Qgb2YgZXhjZXB0aW9uIHRvIHJlc29sdmUgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGRpc2Fi
bGluZyB0aGUgY2FjaGUuCisKKyAgICAgICAgICAgIFN0eWxlUHJvcGVydGllczo6UHJvcGVydHlS
ZWZlcmVuY2UgY3VycmVudCA9IHByb3BlcnRpZXMucHJvcGVydHlBdChpKTsKKyAgICAgICAgICAg
IGlmICghY3VycmVudC5pc0luaGVyaXRlZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3BlcnR5IHZhbHVlIGlzIGV4cGxpY2l0bHkgaW5oZXJpdGVkLCB3ZSBuZWVkIHRvIGFwcGx5
IGZ1cnRoZXIgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgLy8gYXMg
dGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJl
YXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICAgICAgIC8v
IGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgorICAgICAgICAg
ICAgICAgIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSA9ICpjdXJyZW50LnZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzSW5oZXJpdGVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3Jlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUg
Y3VycmVudENvbG9yIGhhcyBpbXBsaWNpdGVseSB0aGUgc2FtZSBzaWRlIGVmZmVjdC4gSXQgZGVw
ZW5kcyBvbiB0aGUgdmFsdWUgb2YgY29sb3IsCisgICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMg
YW4gaW5oZXJpdGVkIHZhbHVlLCBtYWtpbmcgdGhlIG5vbi1pbmhlcml0ZWQgcHJvcGVydHkgaW1w
bGljaXRseSBpbmhlcml0ZWQuCisgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1
bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc1ZhcmlhYmxlUmVm
ZXJlbmNlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LmlzQ2FjaGVhYmxlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoZGVjbGFyYXRpb25P
cmlnaW4pIHsKKyAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpVc2VyQWdlbnQ6CisgICAgICAg
IG1fcmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShtYXRjaGVkUHJv
cGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpB
dXRob3I6CisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92
ZShtYXRjaGVkUHJvcGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlY2xhcmF0
aW9uT3JpZ2luOjpVc2VyOgorICAgICAgICBtX3Jlc3VsdC51c2VyRGVjbGFyYXRpb25zLmFwcGVu
ZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuaAppbmRleCAxZGRiZmVhOWMzYS4uOTUyM2ZjMjNjZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpbmNs
dWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgi
Ci0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNp
bmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTM2LDEyICszNiw0MCBAQCBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVT
ZXQ7CiBjbGFzcyBTZWxlY3RvckZpbHRlcjsKIAorY2xhc3MgUHNldWRvU3R5bGVSZXF1ZXN0IHsK
K3B1YmxpYzoKKyAgICBQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvSWQgcHNldWRvSWQsIE9wdGlv
bmFsPFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlID0gV1RGOjpudWxsb3B0KQor
ICAgICAgICA6IHBzZXVkb0lkKHBzZXVkb0lkKQorICAgICAgICAsIHNjcm9sbGJhclN0YXRlKHNj
cm9sbGJhclN0YXRlKQorICAgIHsKKyAgICB9CisKKyAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKKyAg
ICBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3JvbGxiYXJTdGF0ZTsKK307CisKIHN0
cnVjdCBNYXRjaGVkUnVsZSB7CiAgICAgY29uc3QgUnVsZURhdGEqIHJ1bGVEYXRhOwotICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5OyAgIAorICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5OwogICAgIFN0
eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7CiB9OwogCitzdHJ1Y3QgTWF0Y2hl
ZFByb3BlcnRpZXMgeworICAgIFJlZlB0cjxjb25zdCBTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRp
ZXM7CisgICAgdWludDE2X3QgbGlua01hdGNoVHlwZSB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hB
bGwgfTsKKyAgICB1aW50MTZfdCB3aGl0ZWxpc3RUeXBlIHsgUHJvcGVydHlXaGl0ZWxpc3ROb25l
IH07CisgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCB7IFN0eWxlOjpT
Y29wZU9yZGluYWw6OkVsZW1lbnQgfTsKK307CisKK3N0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAg
Ym9vbCBpc0NhY2hlYWJsZSB7IHRydWUgfTsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMs
IDY0PiB1c2VyQWdlbnREZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVz
LCA2ND4gYXV0aG9yRGVjbGFyYXRpb25zOworICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywg
NjQ+IHVzZXJEZWNsYXJhdGlvbnM7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biB1c2VyQWdlbnREZWNsYXJhdGlvbnMuaXNFbXB0eSgpICYmIGF1dGhvckRlY2xhcmF0aW9ucy5p
c0VtcHR5KCkgJiYgdXNlckRlY2xhcmF0aW9ucy5pc0VtcHR5KCk7IH0KK307CisKIGNsYXNzIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yIHsKIHB1YmxpYzoKICAgICBFbGVtZW50UnVsZUNvbGxlY3Rvcihj
b25zdCBFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYsIGNvbnN0IFNlbGVjdG9yRmls
dGVyKik7CkBAIC02Miw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQW55TWF0Y2hp
bmdSdWxlcyhjb25zdCBSdWxlU2V0Kik7CiAKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3Vs
dCYgbWF0Y2hlZFJlc3VsdCgpOworICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCgp
IGNvbnN0OwogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxl
TGlzdCgpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhck1hdGNoZWRSdWxlcygpOwpAQCAtOTksNiAr
MTI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKERlY2xhcmF0
aW9uT3JpZ2luLCBPcHRpb25hbDxTdHlsZTo6U2NvcGVPcmRpbmFsPiBmb3JTY29wZSA9IHsgfSk7
CiAKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhJiwgdW5zaWduZWQgc3Bl
Y2lmaWNpdHksIFN0eWxlOjpTY29wZU9yZGluYWwpOworICAgIHZvaWQgYWRkTWF0Y2hlZFByb3Bl
cnRpZXMoTWF0Y2hlZFByb3BlcnRpZXMmJiwgRGVjbGFyYXRpb25PcmlnaW4pOwogCiAgICAgY29u
c3QgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQog
CkBAIC0xMjMsOSArMTUyLDE5IEBAIHByaXZhdGU6CiAgICAgLy8gT3V0cHV0LgogICAgIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlPj4gbV9tYXRjaGVkUnVsZUxpc3Q7CiAgICAgYm9vbCBtX2RpZE1h
dGNoVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciB7IGZhbHNlIH07Ci0gICAgU3R5bGVSZXNvbHZl
cjo6TWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CisgICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiAgICAg
U3R5bGU6OlJlbGF0aW9ucyBtX3N0eWxlUmVsYXRpb25zOwogICAgIFBzZXVkb0lkU2V0IG1fbWF0
Y2hlZFBzZXVkb0VsZW1lbnRJZHM7CiB9OwogCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgYikKK3sKKyAg
ICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIucHJvcGVydGllcyAmJiBhLmxpbmtNYXRjaFR5cGUg
PT0gYi5saW5rTWF0Y2hUeXBlOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1h
dGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAppbmRleCBhMjg0NTBhOGZhYy4uMDc0ODNkZjZj
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcApAQCAtODcsNyAr
ODcsNyBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiBy
dWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRgogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0
Y2hlZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFn
ZVJ1bGVzKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVz
LnNpemUoKTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRj
aGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkpOworICAgICAgICBtX3Jlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9
KTsKIH0KIAogc3RhdGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBj
b25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Bh
Z2VSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3Iu
aAppbmRleCA3ODM5ODcxNjJiMC4uY2U0NmQxYzEwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdl
UnVsZUNvbGxlY3Rvci5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3J1
bGVTZXRzKHJ1bGVTZXRzKSB7IH0KIAogICAgIHZvaWQgbWF0Y2hBbGxQYWdlUnVsZXMoaW50IHBh
Z2VJbmRleCk7Ci0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmIG1hdGNoZWRSZXN1bHQo
KSB7IHJldHVybiBtX3Jlc3VsdDsgfQorICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0xl
ZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwpAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBtX3N0YXRlOwogICAgIERvY3VtZW50UnVs
ZVNldHMmIG1fcnVsZVNldHM7CiAKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jl
c3VsdDsKKyAgICBNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBjNWYxYmMzZTA0Ni4u
ZTI3NzNhYzAzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTExOSw3
ICsxMTksNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgY29uc3QgQ1NT
UHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxDU1NQcm9w
ZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkgKyAxKTsKIAotc3RhdGljIHZvaWQgZXh0
cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgU3R5
bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmLCBUZXh0RGlyZWN0aW9uJiwgV3JpdGluZ01vZGUmKTsK
K3N0YXRpYyB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4dERpcmVjdGlvbiYsIFdyaXRpbmdNb2RlJik7
CiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoKQogewpAQCAtMTM5LDU0ICsxMzksNiBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6Y2xlYXIoKQogICAgIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJl
c3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIFByb3BlcnR5V2hp
dGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUsIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5
bGVTY29wZU9yZGluYWwpCi17Ci0gICAgbV9tYXRjaGVkUHJvcGVydGllcy5ncm93KG1fbWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXMmIG5ld1Byb3BlcnRpZXMgPSBtX21hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBu
ZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KCZw
cm9wZXJ0aWVzKTsKLSAgICBuZXdQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hU
eXBlOwotICAgIG5ld1Byb3BlcnRpZXMud2hpdGVsaXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0
VHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9y
ZGluYWw7Ci0gICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsKLQotICAgIGlmIChzdHlsZVNj
b3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpFbGVtZW50KQotICAgICAgICBpc0Nh
Y2hlYWJsZSA9IGZhbHNlOwotCi0gICAgaWYgKGlzQ2FjaGVhYmxlKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGNvdW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50bHkgdGhlIHByb3BlcnR5IGNhY2hl
IG9ubHkgY29weSB0aGUgbm9uLWluaGVyaXRlZCB2YWx1ZXMgYW5kIHJlc29sdmUKLSAgICAgICAg
ICAgIC8vIHRoZSBpbmhlcml0ZWQgb25lcy4KLSAgICAgICAgICAgIC8vIEhlcmUgd2UgZGVmaW5l
IHNvbWUgZXhjZXB0aW9uIHdlcmUgd2UgaGF2ZSB0byByZXNvbHZlIHNvbWUgcHJvcGVydGllcyB0
aGF0IGFyZSBub3QgaW5oZXJpdGVkCi0gICAgICAgICAgICAvLyBieSBkZWZhdWx0LiBJZiB0aG9z
ZSBleGNlcHRpb25zIGJlY29tZSB0b28gY29tbW9uIG9uIHRoZSB3ZWIsIGl0IHNob3VsZCBiZSBw
b3NzaWJsZQotICAgICAgICAgICAgLy8gdG8gYnVpbGQgYSBsaXN0IG9mIGV4Y2VwdGlvbiB0byBy
ZXNvbHZlIGluc3RlYWQgb2YgY29tcGxldGVseSBkaXNhYmxpbmcgdGhlIGNhY2hlLgotCi0gICAg
ICAgICAgICBTdHlsZVByb3BlcnRpZXM6OlByb3BlcnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9w
ZXJ0aWVzLnByb3BlcnR5QXQoaSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuaXNJbmhlcml0
ZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBs
aWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQg
cHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8vIGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhl
IHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhpcyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVj
bGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBw
cm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAgICAgICAgICAgICBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUgPSAqY3VycmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0lu
aGVyaXRlZFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGN1cnJlbnRDb2xvciBoYXMgaW1wbGljaXRlbHkgdGhl
IHNhbWUgc2lkZSBlZmZlY3QuIEl0IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIGNvbG9yLAotICAg
ICAgICAgICAgICAgIC8vIHdoaWNoIGlzIGFuIGluaGVyaXRlZCB2YWx1ZSwgbWFraW5nIHRoZSBu
b24taW5oZXJpdGVkIHByb3BlcnR5IGltcGxpY2l0bHkgaW5oZXJpdGVkLgotICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh2YWx1
ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpc0NhY2hl
YWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIFN0eWxlUmVzb2x2ZXI6
OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9ydWxlU2V0cygqdGhp
cykKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIoKnRoaXMsICZTdHls
ZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCkBAIC0yNzYsMTkgKzIyOCwy
MiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCiAg
ICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4gZWxlbWVudCBhdHRyaWJ1dGUgbXV0YXRpb24g
Y2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlubGluZVN0eWxlKCkKICAgICAvLyBvciBwcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3RlbnRpYWxseSBsZWF2aW5nIHRoaXMgY2FjaGUg
d2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBvbmUuCiAgICAgVmVjdG9yPHVuc2lnbmVkLCAx
Nj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQgPSBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKLSAgICBNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7Ci0gICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRp
ZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVkUHJvcGVydGllczsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVydGllcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ldLnByb3BlcnRpZXMtPmhh
c09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZvciAoYXV0byBpdCA9IG1fbWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZS5iZWdpbigpLCBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIGZpbmRFbnRyaWVzV2l0aE9uZVJlZiA9
IFsmXShWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgOiBkZWNsYXJhdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+aGFzT25lUmVmKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0LT5rZXkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgYXV0byYgZW50cnkgPSBpdC0+dmFsdWU7Cisg
ICAgICAgIGZpbmRFbnRyaWVzV2l0aE9uZVJlZihlbnRyeS51c2VyQWdlbnREZWNsYXJhdGlvbnMp
OworICAgICAgICBmaW5kRW50cmllc1dpdGhPbmVSZWYoZW50cnkuYXV0aG9yRGVjbGFyYXRpb25z
KTsKKyAgICAgICAgZmluZEVudHJpZXNXaXRoT25lUmVmKGVudHJ5LnVzZXJEZWNsYXJhdGlvbnMp
OwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytp
KQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsK
KyAgICBmb3IgKGF1dG8gaW5kZXggOiB0b1JlbW92ZSkKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLnJlbW92ZShpbmRleCk7CiAKICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVB
ZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CkBAIC0zODksNyArMzQ0LDcgQEAgRWxlbWVu
dFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXIKIAogICAgIGF1dG8gZWxlbWVudFN0eWxlUmVsYXRpb25zID0gU3R5
bGU6OmNvbW1pdFJlbGF0aW9uc1RvUmVuZGVyU3R5bGUoc3R5bGUsIGVsZW1lbnQsIGNvbGxlY3Rv
ci5zdHlsZVJlbGF0aW9ucygpKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVj
dG9yLm1hdGNoZWRSZXN1bHQoKSwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb2xsZWN0b3IubWF0Y2hSZXN1bHQoKSwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBv
dXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3Ro
ZXIgZml4dXBzKS4KICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3RhdGUuc3R5bGUoKSwgKnN0YXRl
LnBhcmVudFN0eWxlKCksIHBhcmVudEJveFN0eWxlLCAmZWxlbWVudCk7CkBAIC00MDcsNyArMzYy
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
cktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzRGVs
ZXRlZCk7CiAKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgcmVzdWx0LmFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworICAgIHJlc3VsdC5hdXRob3JEZWNs
YXJhdGlvbnMuYXBwZW5kKHsgJmtleWZyYW1lLT5wcm9wZXJ0aWVzKCkgfSk7CiAKICAgICBBU1NF
UlQoIW1fc3RhdGUuc3R5bGUoKSk7CiAKQEAgLTQyNCw3ICszNzksNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVu
ZGVyU3R5bGUqCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50
LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3Ro
aW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KICAgICBD
YXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBj
YXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMoKS5zaXplKCkgLSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0
YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAgIGFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0
eSwgYXBwbHlTdGF0ZSk7CkBAIC01OTAsMTIgKzU0NSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVt
ZW50JgogCiAgICAgQVNTRVJUKCFjb2xsZWN0b3IubWF0Y2hlZFBzZXVkb0VsZW1lbnRJZHMoKSk7
CiAKLSAgICBpZiAoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKS5tYXRjaGVkUHJvcGVydGllcygp
LmlzRW1wdHkoKSkKKyAgICBpZiAoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlw
ZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsKIAogICAgIC8v
IENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25z
IChhbW9uZyBvdGhlciBmaXh1cHMpLgogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHls
ZSgpLCAqbV9zdGF0ZS5wYXJlbnRTdHlsZSgpLCBudWxscHRyLCBudWxscHRyKTsKQEAgLTYyMywx
NCArNTc4LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgUGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVj
dG9yKG1fc3RhdGUsIG1fcnVsZVNldHMpOwogICAgIGNvbGxlY3Rvci5tYXRjaEFsbFBhZ2VSdWxl
cyhwYWdlSW5kZXgpOwogCi0gICAgTWF0Y2hSZXN1bHQmIHJlc3VsdCA9IGNvbGxlY3Rvci5tYXRj
aGVkUmVzdWx0KCk7CisgICAgYXV0byYgcmVzdWx0ID0gY29sbGVjdG9yLm1hdGNoUmVzdWx0KCk7
CiAKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgICBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZTsKICAgICBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKm1fc3RhdGUuc3R5bGUo
KSwgcmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKIAogICAgIENhc2NhZGVkUHJvcGVy
dGllcyBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotICAgIGNhc2NhZGUuYWRkTm9y
bWFsTWF0Y2hlcyhyZXN1bHQsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKSAt
IDEpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhyZXN1bHQsIENhc2NhZGVMZXZlbDo6
QXV0aG9yTGV2ZWwpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0
ZSB7IHRoaXMsICZjYXNjYWRlLCAmcmVzdWx0IH07CiAgICAgYXBwbHlDYXNjYWRlZFByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRl
KTsKQEAgLTEzMTksMzQgKzEyNzQsMTEgQEAgc3RhdGljIGJvb2wgZWxlbWVudFR5cGVIYXNBcHBl
YXJhbmNlRnJvbVVBU3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgfHwgbG9j
YWxOYW1lID09IEhUTUxOYW1lczo6bWV0ZXJUYWc7CiB9CiAKLXVuc2lnbmVkIFN0eWxlUmVzb2x2
ZXI6OmNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMq
IHByb3BlcnRpZXMsIHVuc2lnbmVkIHNpemUpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6
aGFzaE1lbW9yeShwcm9wZXJ0aWVzLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogc2l6ZSk7
Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYg
YSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCit1bnNpZ25lZCBTdHlsZVJl
c29sdmVyOjpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoUmVzdWx0JiBt
YXRjaFJlc3VsdCkKIHsKLSAgICByZXR1cm4gYS5maXJzdFVBUnVsZSA9PSBiLmZpcnN0VUFSdWxl
Ci0gICAgICAgICYmIGEubGFzdFVBUnVsZSA9PSBiLmxhc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5m
aXJzdEF1dGhvclJ1bGUgPT0gYi5maXJzdEF1dGhvclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0QXV0
aG9yUnVsZSA9PSBiLmxhc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEuZmlyc3RVc2VyUnVsZSA9
PSBiLmZpcnN0VXNlclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VXNlclJ1bGUgPT0gYi5sYXN0VXNl
clJ1bGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJh
bmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCi17Ci0gICAgcmV0
dXJuICEoYSA9PSBiKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVy
dGllcyYgYikKLXsKLSAgICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIucHJvcGVydGllcyAmJiBh
LmxpbmtNYXRjaFR5cGUgPT0gYi5saW5rTWF0Y2hUeXBlOwotfQotCi1ib29sIG9wZXJhdG9yIT0o
Y29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVz
b2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Cisg
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3VsdC51c2VyQWdlbnRE
ZWNsYXJhdGlvbnMuZGF0YSgpLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogbWF0Y2hSZXN1
bHQudXNlckFnZW50RGVjbGFyYXRpb25zLnNpemUoKSkKKyAgICAgICAgXiBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmRhdGEoKSwgc2l6ZW9m
KE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5zaXpl
KCkpCisgICAgICAgIF4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LnVzZXJE
ZWNsYXJhdGlvbnMuZGF0YSgpLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogbWF0Y2hSZXN1
bHQudXNlckRlY2xhcmF0aW9ucy5zaXplKCkpOwogfQogCiBjb25zdCBTdHlsZVJlc29sdmVyOjpN
YXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogU3R5bGVSZXNvbHZlcjo6ZmluZEZyb21NYXRjaGVk
UHJvcGVydGllc0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCkKQEAgLTEzNTYsMTcgKzEyODgsMTEgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAKICAg
ICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZS5maW5kKGhhc2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVJdGVtJiBjYWNoZUl0ZW0gPSBpdC0+dmFsdWU7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpOwotICAgIGlmIChzaXplICE9IGNh
Y2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICht
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpW2ldICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJv
cGVydGllc1tpXSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAo
Y2FjaGVJdGVtLnJhbmdlcyAhPSBtYXRjaFJlc3VsdC5yYW5nZXMpCisgICAgYXV0byYgY2FjaGVJ
dGVtID0gaXQtPnZhbHVlOworICAgIGlmIChtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlv
bnMgIT0gY2FjaGVJdGVtLnVzZXJBZ2VudERlY2xhcmF0aW9ucyB8fCBtYXRjaFJlc3VsdC5hdXRo
b3JEZWNsYXJhdGlvbnMgIT0gY2FjaGVJdGVtLmF1dGhvckRlY2xhcmF0aW9ucyB8fCBtYXRjaFJl
c3VsdC51c2VyRGVjbGFyYXRpb25zICE9IGNhY2hlSXRlbS51c2VyRGVjbGFyYXRpb25zKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiAmY2FjaGVJdGVtOwogfQogCkBAIC0x
NDIzLDcgKzEzNDksNyBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgVGV4dERpcmVjdGlvbiYgZGlyZWN0aW9uLCBXcml0aW5nTW9kZSYgd3JpdGluZ01vZGUpCit2
b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgVGV4dERpcmVjdGlvbiYgZGlyZWN0
aW9uLCBXcml0aW5nTW9kZSYgd3JpdGluZ01vZGUpCiB7CiAgICAgZGlyZWN0aW9uID0gc3R5bGUu
ZGlyZWN0aW9uKCk7CiAgICAgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwpAQCAt
MTQzMSwyNiArMTM1NywyOCBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogICAgIGJvb2wgaGFk
SW1wb3J0YW50V3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICBib29sIGhhZEltcG9ydGFudERpcmVj
dGlvbiA9IGZhbHNlOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBtYXRjaGVkUHJvcGVydGllcyA6
IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgY291bnQgPSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIHByb3BlcnR5ID0gbWF0
Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsKLSAgICAgICAgICAgIGlm
ICghcHJvcGVydHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFo
YWRJbXBvcnRhbnRXcml0aW5nTW9kZSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCpwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V3Jp
dGluZ01vZGUgPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rp
b246Ci0gICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOwotICAgICAgICAgICAg
ICAgICAgICBoYWRJbXBvcnRhbnREaXJlY3Rpb24gPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwor
ICAgIGZvciAoYXV0byogbWF0Y2hlZERlY2xhcmF0aW9ucyA6IHsgJm1hdGNoUmVzdWx0LnVzZXJB
Z2VudERlY2xhcmF0aW9ucywgJm1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucywgJm1hdGNo
UmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMgfSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1h
dGNoZWRQcm9wZXJ0aWVzIDogKm1hdGNoZWREZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+
cHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8g
cHJvcGVydHkgPSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOwor
ICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHByb3BlcnR5LmlkKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGlu
Z01vZGU6CisgICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50V3JpdGluZ01vZGUg
fHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGluZ01vZGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V3JpdGluZ01vZGUgPSBwcm9w
ZXJ0eS5pc0ltcG9ydGFudCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246
CisgICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3Bl
cnR5LmlzSW1wb3J0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBoYWRJbXBvcnRhbnREaXJlY3Rpb24gPSBwcm9wZXJ0eS5pc0ltcG9y
dGFudCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDU5LDcgKzEzODcsNyBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0
aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU2hvdWxkVXNlTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSBzaG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlKQogewogICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgdW5zaWduZWQgY2FjaGVIYXNoID0gc2hvdWxkVXNl
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSAmJiBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1
dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5k
YXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpKSA6IDA7CisgICAg
dW5zaWduZWQgY2FjaGVIYXNoID0gc2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSAmJiBt
YXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0
Y2hSZXN1bHQpIDogMDsKICAgICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAg
IGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSBudWxscHRyOwog
ICAgIGlmIChjYWNoZUhhc2ggJiYgKGNhY2hlSXRlbSA9IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkKQEAgLTE0OTMsOCArMTQyMSw4IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIElmIHNvLCB3ZSBjYWNoZSB0aGUgYm9y
ZGVyIGFuZCBiYWNrZ3JvdW5kIHN0eWxlcyBzbyB0aGF0IFJlbmRlclRoZW1lOjphZGp1c3RTdHls
ZSgpCiAgICAgICAgIC8vIGNhbiBsb29rIGF0IHRoZW0gbGF0ZXIgdG8gZmlndXJlIG91dCBpZiB0
aGlzIGlzIGEgc3R5bGVkIGZvcm0gY29udHJvbCBvciBub3QuCiAgICAgICAgIENhc2NhZGVkUHJv
cGVydGllcyBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotICAgICAgICBjYXNjYWRl
LmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVB
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
Ci0gICAgICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAKICAgICAg
ICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsICZjYXNjYWRl
LCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTUyMCwxMCArMTQ0OCwxMiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBjb25zdAogICAgIH0KIAogICAgIENhc2NhZGVkUHJvcGVydGllcyBjYXNjYWRlKGRpcmVj
dGlvbiwgd3JpdGluZ01vZGUpOwotICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJl
c3VsdCwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxLCBhcHBs
eUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJl
c3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRk
SW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNl
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJl
c3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6
QXV0aG9yTGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxN
YXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbCwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2Fk
ZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZl
bCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMo
bWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAKICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhp
cywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OwogCkBAIC0xNzE5LDEwICsxNjQ5LDEwIEBAIFN0
eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllcyogU3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQ
cm9wZXJ0aWVzRm9yUm9sbGJhY2soCiAgICAgICAgIGF1dG8gbmV3QXV0aG9yUm9sbGJhY2sobWFr
ZVVuaXF1ZTxDYXNjYWRlZFByb3BlcnRpZXM+KGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpKTsKIAog
ICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlucyBVQSBydWxl
cyBhbmQgdXNlciBydWxlcyBidXQgbm8gYXV0aG9yIHJ1bGVzLgotICAgICAgICBuZXdBdXRob3JS
b2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwotICAg
ICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNl
clJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1h
dGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJv
bGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7Cisg
ICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CisgICAgICAgIG5ld0F1dGhvclJv
bGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJM
ZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0
Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGZhbHNlKTsKKyAgICAg
ICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGZhbHNlKTsKIAogICAgICAgICBzdGF0ZSgpLnNl
dEF1dGhvclJvbGxiYWNrKG5ld0F1dGhvclJvbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIHN0YXRl
KCkuYXV0aG9yUm9sbGJhY2soKTsKQEAgLTE3MzYsOCArMTY2Niw4IEBAIFN0eWxlUmVzb2x2ZXI6
OkNhc2NhZGVkUHJvcGVydGllcyogU3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9y
Um9sbGJhY2soCiAgICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNrKG1ha2VVbmlxdWU8Q2FzY2Fk
ZWRQcm9wZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAKICAgICAgICAgLy8gVGhp
cyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgb25seSBVQSBydWxlcy4KLSAgICAg
ICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBm
YWxzZSk7Ci0gICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSwgZmFsc2UpOworICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1h
bE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGZhbHNl
KTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVz
dWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3Rh
dGUoKS5zZXRVc2VyUm9sbGJhY2sobmV3VXNlclJvbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIHN0
YXRlKCkudXNlclJvbGxiYWNrKCk7CkBAIC0yMjEwLDEwICsyMTQwLDYgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBG
aWx0ZXJPcGVyYXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpID0gZGVmYXVsdDsKLQotU3R5
bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6On5NYXRjaGVkUHJvcGVydGllcygpID0gZGVm
YXVsdDsKLQogU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpDYXNjYWRlZFByb3Bl
cnRpZXMoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQog
ICAgIDogbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICwgbV93cml0aW5nTW9kZSh3cml0aW5n
TW9kZSkKQEAgLTIyOTksMjIgKzIyMjUsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRl
ZFByb3BlcnRpZXM6OnNldERlZmVycmVkKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJgogICAg
IG1fZGVmZXJyZWRQcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7CiB9CiAKLXN0YXRpYyBDYXNj
YWRlTGV2ZWwgY2FzY2FkZUxldmVsRm9ySW5kZXgoY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSAmJiBpbmRleCA8PSBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSkKLSAgICAgICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWw7
Ci0gICAgaWYgKGluZGV4ID49IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlICYmIGlu
ZGV4IDw9IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUpCi0gICAgICAgIHJldHVybiBD
YXNjYWRlTGV2ZWw6OlVzZXJMZXZlbDsKLSAgICByZXR1cm4gQ2FzY2FkZUxldmVsOjpBdXRob3JM
ZXZlbDsKLX0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1h
dGNoKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2Fz
Y2FkZWRQcm9wZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hl
ZFByb3BlcnRpZXMsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSkKIHsKLSAgICBhdXRvJiBtYXRjaGVkUHJvcGVydGllcyA9IG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKClbaW5kZXhdOwogICAgIGF1dG8mIHN0eWxlUHJv
cGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwotCiAgICAgYXV0byBwcm9w
ZXJ0eVdoaXRlbGlzdFR5cGUgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1h
dGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpOwotICAgIGF1dG8gY2FzY2FkZUxldmVsID0g
Y2FzY2FkZUxldmVsRm9ySW5kZXgobWF0Y2hSZXN1bHQsIGluZGV4KTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIGNvdW50ID0gc3R5bGVQcm9wZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsgaSA8
IGNvdW50OyArK2kpIHsKICAgICAgICAgYXV0byBjdXJyZW50ID0gc3R5bGVQcm9wZXJ0aWVzLnBy
b3BlcnR5QXQoaSk7CkBAIC0yMzQyLDEzICsyMjU3LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsCiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6
YWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKKworc3RhdGljIGF1dG8m
IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCiB7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0g
LTEpCi0gICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGNhc2NhZGVMZXZlbCkgeworICAgIGNh
c2UgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVzZXJB
Z2VudERlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWw6IHJl
dHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7CisgICAgY2FzZSBDYXNjYWRlTGV2
ZWw6OlVzZXJMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVzZXJEZWNsYXJhdGlvbnM7CisgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYXRjaFJlc3VsdC5hdXRo
b3JEZWNsYXJhdGlvbnM7Cit9CiAKLSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBl
bmRJbmRleDsgKytpKQotICAgICAgICBhZGRNYXRjaChtYXRjaFJlc3VsdCwgaSwgZmFsc2UsIGlu
aGVyaXRlZE9ubHkpOwordm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFk
ZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2
ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCit7CisgICAgZm9yIChhdXRvJiBt
YXRjaGVkRGVjbGFyYXRpb25zIDogZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVz
dWx0LCBjYXNjYWRlTGV2ZWwpKQorICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25z
LCBjYXNjYWRlTGV2ZWwsIGZhbHNlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIAogc3RhdGljIGJvb2wg
aGFzSW1wb3J0YW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMp
CkBAIC0yMzYwLDIwICsyMjg0LDE5IEBAIHN0YXRpYyBib29sIGhhc0ltcG9ydGFudFByb3BlcnRp
ZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllczo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25s
eSkKIHsKLSAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
c3RydWN0IEluZGV4QW5kT3JkaW5hbCB7Ci0gICAgICAgIGludCBpbmRleDsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXg7CiAgICAgICAgIFN0eWxlOjpTY29wZU9yZGluYWwgb3JkaW5hbDsKICAgICB9
OwogICAgIFZlY3RvcjxJbmRleEFuZE9yZGluYWw+IGltcG9ydGFudE1hdGNoZXM7CiAgICAgYm9v
bCBoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzID0gZmFsc2U7CiAKLSAgICBmb3IgKGludCBpID0g
c3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzKClbaV07CisgICAgYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uc0Zv
ckNhc2NhZGVMZXZlbChtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoZWRE
ZWNsYXJhdGlvbnNbaV07CiAKICAgICAgICAgaWYgKCFoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKCpt
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjM5Niw3ICsyMzE5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6
OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG0KICAgICB9CiAKICAgICBm
b3IgKGF1dG8mIG1hdGNoIDogaW1wb3J0YW50TWF0Y2hlcykKLSAgICAgICAgYWRkTWF0Y2gobWF0
Y2hSZXN1bHQsIG1hdGNoLmluZGV4LCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYWRk
TWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5pbmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1
ZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzOjphcHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiByZXNvbHZlciwg
QXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAppbmRleCA1Mjk0MWJhNmJkMy4uZWRjNWY1MjE4OGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRSdWxlU2V0cy5oIgorI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlF
dmFsdWF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtOTksMTggKzEwMCw2IEBA
IGVudW0gY2xhc3MgQ2FzY2FkZUxldmVsOiB1aW50OF90IHsKICAgICBVc2VyTGV2ZWwKIH07CiAK
LWNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgUHNldWRvU3R5bGVSZXF1
ZXN0KFBzZXVkb0lkIHBzZXVkb0lkLCBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3Jv
bGxiYXJTdGF0ZSA9IFdURjo6bnVsbG9wdCkKLSAgICAgICAgOiBwc2V1ZG9JZChwc2V1ZG9JZCkK
LSAgICAgICAgLCBzY3JvbGxiYXJTdGF0ZShzY3JvbGxiYXJTdGF0ZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgUHNldWRvSWQgcHNldWRvSWQ7Ci0gICAgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0
ZT4gc2Nyb2xsYmFyU3RhdGU7Ci19OwotCiBzdHJ1Y3QgRWxlbWVudFN0eWxlIHsKICAgICBFbGVt
ZW50U3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZSwgc3RkOjp1
bmlxdWVfcHRyPFN0eWxlOjpSZWxhdGlvbnM+IHJlbGF0aW9ucyA9IHsgfSkKICAgICAgICAgOiBy
ZW5kZXJTdHlsZShXVEZNb3ZlKHJlbmRlclN0eWxlKSkKQEAgLTE3NSw4ICsxNjQsNiBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxl
bWVudChjb25zdCBFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0g
QWxsQnV0RW1wdHlDU1NSdWxlcyk7CiAKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQ7
Ci0KICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVl
Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7CiAgICAgdm9pZCBhcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIApAQCAtMjIxLDQ4ICsy
MDgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNhY2hlZFByb3BlcnRpZXNBZmZlY3RlZEJ5
Vmlld3BvcnRVbml0cygpOwogCiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0
IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKLQot
ICAgIHN0cnVjdCBSdWxlUmFuZ2UgewotICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgp
LCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQotICAgICAgICBpbnQmIGZpcnN0UnVs
ZUluZGV4OwotICAgICAgICBpbnQmIGxhc3RSdWxlSW5kZXg7Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBNYXRjaFJhbmdlcyB7Ci0gICAgICAgIE1hdGNoUmFuZ2VzKCkgOiBmaXJzdFVBUnVsZSgtMSks
IGxhc3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0QXV0aG9yUnVsZSgtMSks
IGZpcnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpIHsgfQotICAgICAgICBpbnQgZmly
c3RVQVJ1bGU7Ci0gICAgICAgIGludCBsYXN0VUFSdWxlOwotICAgICAgICBpbnQgZmlyc3RBdXRo
b3JSdWxlOwotICAgICAgICBpbnQgbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgIGludCBmaXJzdFVz
ZXJSdWxlOwotICAgICAgICBpbnQgbGFzdFVzZXJSdWxlOwotICAgICAgICBSdWxlUmFuZ2UgVUFS
dWxlUmFuZ2UoKSB7IHJldHVybiBSdWxlUmFuZ2UoZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOyB9
Ci0gICAgICAgIFJ1bGVSYW5nZSBhdXRob3JSdWxlUmFuZ2UoKSB7IHJldHVybiBSdWxlUmFuZ2Uo
Zmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7IH0KLSAgICAgICAgUnVsZVJhbmdlIHVz
ZXJSdWxlUmFuZ2UoKSB7IHJldHVybiBSdWxlUmFuZ2UoZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJS
dWxlKTsgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXMgewotICAgICAg
ICBNYXRjaGVkUHJvcGVydGllcygpOwotICAgICAgICB+TWF0Y2hlZFByb3BlcnRpZXMoKTsKLSAg
ICAgICAgCi0gICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXM7Ci0gICAg
ICAgIHVpbnQxNl90IGxpbmtNYXRjaFR5cGU7Ci0gICAgICAgIHVpbnQxNl90IHdoaXRlbGlzdFR5
cGU7Ci0gICAgICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7Ci0gICAg
fTsKLQotICAgIHN0cnVjdCBNYXRjaFJlc3VsdCB7Ci0gICAgICAgIE1hdGNoUmVzdWx0KCkgOiBp
c0NhY2hlYWJsZSh0cnVlKSB7IH0KLSAgICAgICAgVmVjdG9yPFN0eWxlUnVsZSosIDY0PiBtYXRj
aGVkUnVsZXM7Ci0gICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdlczsKLSAgICAgICAgYm9vbCBpc0Nh
Y2hlYWJsZTsKLQotICAgICAgICBjb25zdCBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiYg
bWF0Y2hlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX21hdGNoZWRQcm9wZXJ0aWVzOyB9
Ci0KLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRp
ZXMmLCBTdHlsZVJ1bGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hp
dGVsaXN0Tm9uZSwgU3R5bGU6OlNjb3BlT3JkaW5hbCA9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVs
ZW1lbnQpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywg
NjQ+IG1fbWF0Y2hlZFByb3BlcnRpZXM7Ci0gICAgfTsKICAgICAKICAgICBjbGFzcyBDYXNjYWRl
ZFByb3BlcnRpZXMgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTI4MSw4
ICsyMjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCkgY29uc3Q7CiAgICAgICAgIFByb3BlcnR5JiBwcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKIAot
ICAgICAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7Ci0gICAg
ICAgIHZvaWQgYWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKKyAgICAg
ICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVs
LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgYWRkSW1wb3J0YW50
TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRP
bmx5ID0gZmFsc2UpOwogCiAgICAgICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5
bGVSZXNvbHZlciYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CiAKQEAgLTI5MSw3ICsy
MzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFByb3BlcnR5IGN1c3RvbVByb3BlcnR5KGNvbnN0IFN0
cmluZyYpIGNvbnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGFkZE1h
dGNoKGNvbnN0IE1hdGNoUmVzdWx0JiwgdW5zaWduZWQgaW5kZXgsIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSk7CisgICAgICAgIHZvaWQgYWRkTWF0Y2goY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJp
dGVkT25seSk7CiAgICAgICAgIHZvaWQgc2V0KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsK
ICAgICAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2ln
bmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkmLCBDU1NQcm9w
ZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwg
U3R5bGU6OlNjb3BlT3JkaW5hbCk7CkBAIC0zMzUsMTQgKzI4MCw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGNhc2NhZGVNYXRjaGVzKENhc2NhZGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoUmVz
dWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wg
aW5oZXJpdGVkT25seSk7CiAKLSAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKE1hdGNoUmVzdWx0Jiwg
UnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5n
JiBwYWdlTmFtZSk7Ci0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxl
UnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+Jiwg
Ym9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1l
KTsKLQotICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBib29s
IGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBh
Z2VJbmRleCk7IH0KLSAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Owot
ICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLQogICAgIERvY3VtZW50
UnVsZVNldHMgbV9ydWxlU2V0czsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1w
bCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+PiBLZXlmcmFtZXNSdWxlTWFwOwpAQCAtNDc3
LDIwICs0MTQsMjIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogCi0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRj
aGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25lZCBzaXpl
KTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25z
dCBNYXRjaFJlc3VsdCYpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7
Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRpZXM7Ci0g
ICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdlczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0
aWVzPiB1c2VyQWdlbnREZWNsYXJhdGlvbnM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVy
dGllcz4gYXV0aG9yRGVjbGFyYXRpb25zOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRp
ZXM+IHVzZXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gcmVuZGVyU3R5bGU7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcGFy
ZW50UmVuZGVyU3R5bGU7CiAgICAgICAgIAogICAgICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hl
SXRlbShjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotICAgICAgICAgICAgOiByYW5n
ZXMobWF0Y2hSZXN1bHQucmFuZ2VzKQotICAgICAgICAgICAgLCByZW5kZXJTdHlsZShSZW5kZXJT
dHlsZTo6Y2xvbmVQdHIoKnN0eWxlKSkKKyAgICAgICAgICAgIDogcmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGU6OmNsb25lUHRyKCpzdHlsZSkpCiAgICAgICAgICAgICAsIHBhcmVudFJlbmRlclN0eWxl
KFJlbmRlclN0eWxlOjpjbG9uZVB0cigqcGFyZW50U3R5bGUpKQogICAgICAgICB7CiAgICAgICAg
ICAgICAvLyBBc3NpZ24gcmF0aGVyIHRoYW4gY29weS1jb25zdHJ1Y3Qgc28gd2Ugb25seSBhbGxv
Y2F0ZSBhcyBtdWNoIHZlY3RvciBjYXBhY2l0eSBhcyBuZWVkZWQuCi0gICAgICAgICAgICBtYXRj
aGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCk7CisgICAgICAg
ICAgICB1c2VyQWdlbnREZWNsYXJhdGlvbnMgPSBtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJh
dGlvbnM7CisgICAgICAgICAgICBhdXRob3JEZWNsYXJhdGlvbnMgPSBtYXRjaFJlc3VsdC5hdXRo
b3JEZWNsYXJhdGlvbnM7CisgICAgICAgICAgICB1c2VyRGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1
bHQudXNlckRlY2xhcmF0aW9uczsKICAgICAgICAgfQogICAgICAgICBNYXRjaGVkUHJvcGVydGll
c0NhY2hlSXRlbSgpID0gZGVmYXVsdDsKICAgICB9OwpAQCAtNTMxLDExICs0NzAsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgeyB0cnVlIH07CiAgICAg
Ly8gU2VlIGlmIHdlIHN0aWxsIGhhdmUgY3Jhc2hlcyB3aGVyZSBTdHlsZVJlc29sdmVyIGdldHMg
ZGVsZXRlZCBlYXJseS4KICAgICBib29sIG1faXNEZWxldGVkIHsgZmFsc2UgfTsKLQotICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYpOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwotICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOwotICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJh
bmdlcyYpOwogfTsKIAogLy8gU3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVydGllcywg
dG8ga2VlcCB0cmFjayBvZiB3aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKQEAgLTU0Myw3
ICs0NzcsNyBAQCBwcml2YXRlOgogc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIHsK
ICAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOwogICAgIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllcyogY2FzY2FkZTsKLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRj
aFJlc3VsdCogbWF0Y2hSZXN1bHQ7CisgICAgY29uc3QgTWF0Y2hSZXN1bHQqIG1hdGNoUmVzdWx0
OwogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9IHsgfTsK
ICAgICBIYXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMgPSB7IH07CiAgICAg
Qml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381675</attachid>
            <date>2019-10-23 04:31:36 -0700</date>
            <delta_ts>2019-10-24 00:08:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>matchresult-out-of-resolver-5.patch</filename>
            <type>text/plain</type>
            <size>46716</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWQxODU5NThlMy4uOTQ1MzQ4YjhkNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxOS0xMC0yMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBNYXRjaFJlc3VsdCBhbmQgcmVsYXRlZCB0eXBlcyBvdXQgb2YgU3R5
bGVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzMjUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmV2ZXJzZSB0aGUgZGVwZW5kZW5jeSBiZXR3ZWVuIFN0eWxlUmVzb2x2ZXIgYW5kIEVsZW1l
bnRSdWxlQ29sbGVjdG9yIHNvIHRoYXQgdGhlIGZvcm1lciBkZXBlbmRzIG9uIHRoZSBsYXR0ZXIu
CisgICAgICAgIFRoaXMgbWFrZXMgdGhlIGNvZGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGVu
YWJsZXMgZnVydGhlciBjbGVhbnVwcy4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBnZXRzIHJp
ZCBvZiB0aGUgY29uZnVzaW5nIFJ1bGVSYW5nZSBvYmplY3RzIGluIGZvdm9yIG9mIHNwbGl0dGlu
ZyBkZWNsYXJhdGlvbiBmcm9tIGRpZmZlcmVudCBjYXNjYWRlIGxldmVscyB0byBzZXBhcmF0ZSB2
ZWN0b3JzLgorICAgICAgICBUaGUgZGVzaXJlZCBjYXNjYWRlIGxldmVsIGlzIGluZGljYXRlZCB3
aXRoIGVuIGVudW0gaW5zdGVhZCBvZiBhIHJhbmdlLgorCisgICAgICAgIFRoZXJlIGlzIGFsc28g
c29tZSBnZW5lcmFsIG1vZGVybml6YXRpb24uCisKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1h
dGNoUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9y
OjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRS
dWxlQ29sbGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoZWRSZXN1bHQpOiBEZWxldGVkLgorICAg
ICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6UHNl
dWRvU3R5bGVSZXF1ZXN0OjpQc2V1ZG9TdHlsZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWF0Y2hSZXN1bHQ6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjc3MvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBjc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFJlc3VsdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRNYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGROb3JtYWxN
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVy
dGllczo6YWRkSW1wb3J0YW50TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNhc2NhZGVMZXZlbEZvckluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW06Ok1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb1N0eWxlUmVxdWVz
dDo6UHNldWRvU3R5bGVSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlJ1bGVSYW5nZTo6UnVsZVJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzOjpNYXRjaFJhbmdlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlczo6VUFSdWxlUmFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXM6
OmF1dGhvclJ1bGVSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpNYXRjaFJhbmdlczo6dXNlclJ1bGVSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6TWF0Y2hSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQ6Om1hdGNoZWRQcm9w
ZXJ0aWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmlzUmlnaHRQYWdlIGNvbnN0KTogRGVsZXRlZC4KKwogMjAxOS0xMC0yMiAgTWlndWVsIEdvbWV6
ICA8bWFnb21lekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI0NDM3Mik6IFtH
VEtdW1dQRV0gZmFzdC9pbWFnZXMvaWNvbi1kZWNvZGluZy5odG1sIGFuZCBvdGhlcnMgYXJlIGZh
aWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4
IGEyYTU5ZDIxMTEwLi4zMzk3MDg1OTJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVsZW1lbnRSdWxlQ29sbGVjdG9y
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxl
U2V0CiAgICAgQVNTRVJUKCFtX3NlbGVjdG9yRmlsdGVyIHx8IG1fc2VsZWN0b3JGaWx0ZXItPnBh
cmVudFN0YWNrSXNDb25zaXN0ZW50KGVsZW1lbnQucGFyZW50Tm9kZSgpKSk7CiB9CiAKLVN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3Vs
dCgpCitjb25zdCBNYXRjaFJlc3VsdCYgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoUmVzdWx0
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9tb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6
UmVzb2x2aW5nU3R5bGUpOwogICAgIHJldHVybiBtX3Jlc3VsdDsKQEAgLTEyNCwxNCArMTI0LDgg
QEAgaW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWUKICAgICBpZiAoIXByb3BlcnR5U2V0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9yZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlICE9IC0x
KQotICAgICAgICArK21fcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICBlbHNlIHsK
LSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gbV9yZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMoKS5zaXplKCk7Ci0gICAgICAgIG1fcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUgPSBtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgfQorICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHsgcHJvcGVydHlTZXQgfSwgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhv
cik7CiAKLSAgICBtX3Jlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcygqcHJvcGVydHlTZXQpOwog
ICAgIGlmICghaXNDYWNoZWFibGUpCiAgICAgICAgIG1fcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFs
c2U7CiB9CkBAIC0xNzgsMjIgKzE3Miw2IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKERlY2xhcmF0aW9uT3JpZ2luIGRlY2xhcmF0aW9uT3JpCiAgICAg
aWYgKG1fbWF0Y2hlZFJ1bGVzLnNpemUoKSA8PSBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByYW5nZUZvckRlY2xhcmF0aW9uT3JpZ2luID0g
WyZdKCkgewotICAgICAgICBzd2l0Y2ggKGRlY2xhcmF0aW9uT3JpZ2luKSB7Ci0gICAgICAgIGNh
c2UgRGVjbGFyYXRpb25PcmlnaW46OlVzZXJBZ2VudDogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy5V
QVJ1bGVSYW5nZSgpOwotICAgICAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpBdXRob3I6IHJl
dHVybiBtX3Jlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNhc2UgRGVj
bGFyYXRpb25PcmlnaW46OlVzZXI6IHJldHVybiBtX3Jlc3VsdC5yYW5nZXMudXNlclJ1bGVSYW5n
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gbV9yZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgIH0oKTsKLQotICAg
IC8vIEZJWE1FOiBSYW5nZSB1cGRhdGluZyBzaG91bGQgYmUgZG9uZSBieSBNYXRjaFJlc3VsdHMg
dHlwZQotICAgIC8vIEZJWE1FOiBNYXRjaFJlc3VsdHMgc2hvdWxkbid0IGJlIGluIFN0eWxlUmVz
b2x2ZXIgbmFtZXNwYWNlLgotICAgIGJvb2wgdXBkYXRlUmFuZ2VzID0gbV9tb2RlICE9IFNlbGVj
dG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzOwotICAgIGlmICh1cGRhdGVSYW5nZXMg
JiYgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5maXJzdFJ1bGVJbmRleCA9PSAtMSkKLSAgICAg
ICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5maXJzdFJ1bGVJbmRleCA9IG1fcmVzdWx0Lm1h
dGNoZWRSdWxlcy5zaXplKCk7Ci0KICAgICBmb3IgKDsgbV9tYXRjaGVkUnVsZVRyYW5zZmVySW5k
ZXggPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsrbV9tYXRjaGVkUnVsZVRyYW5zZmVySW5kZXgp
IHsKICAgICAgICAgYXV0byYgbWF0Y2hlZFJ1bGUgPSBtX21hdGNoZWRSdWxlc1ttX21hdGNoZWRS
dWxlVHJhbnNmZXJJbmRleF07CiAgICAgICAgIGlmIChmcm9tU2NvcGUgJiYgbWF0Y2hlZFJ1bGUu
c3R5bGVTY29wZU9yZGluYWwgPCAqZnJvbVNjb3BlKQpAQCAtMjA0LDExICsxODIsMTMgQEAgdm9p
ZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJhbnNmZXJNYXRjaGVkUnVsZXMoRGVjbGFyYXRpb25P
cmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hlZFJ1bGUucnVsZURh
dGEtPnJ1bGUoKS0+cHJvcGVydGllcygpLCBtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cnVsZSgpLCBt
YXRjaGVkUnVsZS5ydWxlRGF0YS0+bGlua01hdGNoVHlwZSgpLCBtYXRjaGVkUnVsZS5ydWxlRGF0
YS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCksIG1hdGNoZWRSdWxlLnN0eWxlU2NvcGVPcmRpbmFs
KTsKKyAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMoeworICAgICAgICAgICAgJm1hdGNoZWRS
dWxlLnJ1bGVEYXRhLT5ydWxlKCktPnByb3BlcnRpZXMoKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHVpbnQxNl90PihtYXRjaGVkUnVsZS5ydWxlRGF0YS0+bGlua01hdGNoVHlwZSgpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihtYXRjaGVkUnVsZS5ydWxlRGF0YS0+cHJv
cGVydHlXaGl0ZWxpc3RUeXBlKCkpLAorICAgICAgICAgICAgbWF0Y2hlZFJ1bGUuc3R5bGVTY29w
ZU9yZGluYWwKKyAgICAgICAgfSwgZGVjbGFyYXRpb25PcmlnaW4pOwogICAgIH0KLQotICAgIGlm
ICh1cGRhdGVSYW5nZXMpCi0gICAgICAgIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4ubGFzdFJ1
bGVJbmRleCA9IG1fcmVzdWx0Lm1hdGNoZWRSdWxlcy5zaXplKCkgLSAxOwogfQogCiB2b2lkIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKCkKQEAgLTU4Niw5ICs1NjYsMTAg
QEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhib29sIG1hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcywgYm9vbCBpbmMKIAogICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+
KHN0eWxlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHls
ZWRFbGVtZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwor
ICAgICAgICAgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0
eWxlZEVsZW1lbnQpLmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7
CisgICAgICAgICAgICBhdXRvJiBwcm9wZXJ0aWVzID0gdGV4dERpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQotICAgICAgICAgICAgICAgIG1fcmVz
dWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
KTsKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyh7ICZwcm9wZXJ0aWVzIH0s
IERlY2xhcmF0aW9uT3JpZ2luOjpBdXRob3IpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
NjMzLDQgKzYxNCw1NyBAQCBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpoYXNBbnlNYXRjaGlu
Z1J1bGVzKGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQpCiAgICAgcmV0dXJuICFtX21hdGNoZWRSdWxl
cy5pc0VtcHR5KCk7CiB9CiAKK3ZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKE1hdGNoZWRQcm9wZXJ0aWVzJiYgbWF0Y2hlZFByb3BlcnRpZXMsIERlY2xhcmF0
aW9uT3JpZ2luIGRlY2xhcmF0aW9uT3JpZ2luKQoreworICAgIGlmIChtYXRjaGVkUHJvcGVydGll
cy5zdHlsZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpFbGVtZW50KQorICAg
ICAgICBtX3Jlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworCisgICAgaWYgKG1fcmVzdWx0Lmlz
Q2FjaGVhYmxlKSB7CisgICAgICAgIGF1dG8mIHByb3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSBwcm9w
ZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB0aGUgcHJvcGVydHkgY2FjaGUgb25seSBjb3B5IHRoZSBub24taW5oZXJpdGVk
IHZhbHVlcyBhbmQgcmVzb2x2ZQorICAgICAgICAgICAgLy8gdGhlIGluaGVyaXRlZCBvbmVzLgor
ICAgICAgICAgICAgLy8gSGVyZSB3ZSBkZWZpbmUgc29tZSBleGNlcHRpb24gd2VyZSB3ZSBoYXZl
IHRvIHJlc29sdmUgc29tZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBpbmhlcml0ZWQKKyAgICAg
ICAgICAgIC8vIGJ5IGRlZmF1bHQuIElmIHRob3NlIGV4Y2VwdGlvbnMgYmVjb21lIHRvbyBjb21t
b24gb24gdGhlIHdlYiwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlCisgICAgICAgICAgICAvLyB0byBi
dWlsZCBhIGxpc3Qgb2YgZXhjZXB0aW9uIHRvIHJlc29sdmUgaW5zdGVhZCBvZiBjb21wbGV0ZWx5
IGRpc2FibGluZyB0aGUgY2FjaGUuCisKKyAgICAgICAgICAgIFN0eWxlUHJvcGVydGllczo6UHJv
cGVydHlSZWZlcmVuY2UgY3VycmVudCA9IHByb3BlcnRpZXMucHJvcGVydHlBdChpKTsKKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5pc0luaGVyaXRlZCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGV4cGxpY2l0bHkgaW5oZXJpdGVkLCB3ZSBuZWVkIHRv
IGFwcGx5IGZ1cnRoZXIgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAg
Ly8gYXMgdGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0
aGlzIHJlYXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICAg
ICAgIC8vIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgorICAg
ICAgICAgICAgICAgIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSA9ICpjdXJyZW50LnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW5oZXJpdGVkVmFsdWUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3Jlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUaGUg
dmFsdWUgY3VycmVudENvbG9yIGhhcyBpbXBsaWNpdGVseSB0aGUgc2FtZSBzaWRlIGVmZmVjdC4g
SXQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgY29sb3IsCisgICAgICAgICAgICAgICAgLy8gd2hp
Y2ggaXMgYW4gaW5oZXJpdGVkIHZhbHVlLCBtYWtpbmcgdGhlIG5vbi1pbmhlcml0ZWQgcHJvcGVy
dHkgaW1wbGljaXRseSBpbmhlcml0ZWQuCisgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc1Zhcmlh
YmxlUmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LmlzQ2FjaGVh
YmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoZGVjbGFy
YXRpb25PcmlnaW4pIHsKKyAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpVc2VyQWdlbnQ6Cisg
ICAgICAgIG1fcmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShtYXRj
aGVkUHJvcGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlY2xhcmF0aW9uT3Jp
Z2luOjpVc2VyOgorICAgICAgICBtX3Jlc3VsdC51c2VyRGVjbGFyYXRpb25zLmFwcGVuZChXVEZN
b3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVjbGFy
YXRpb25PcmlnaW46OkF1dGhvcjoKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25z
LmFwcGVuZChXVEZNb3ZlKG1hdGNoZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuaAppbmRleCAxZGRiZmVhOWMzYS4uNWU1MzUzMThiYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMyw3ICsyMyw3IEBACiAK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVj
a2VyLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTM2LDEyICszNiw0MCBAQCBjbGFzcyBSdWxlRGF0YTsKIGNsYXNz
IFJ1bGVTZXQ7CiBjbGFzcyBTZWxlY3RvckZpbHRlcjsKIAorY2xhc3MgUHNldWRvU3R5bGVSZXF1
ZXN0IHsKK3B1YmxpYzoKKyAgICBQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvSWQgcHNldWRvSWQs
IE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlID0gV1RGOjpudWxs
b3B0KQorICAgICAgICA6IHBzZXVkb0lkKHBzZXVkb0lkKQorICAgICAgICAsIHNjcm9sbGJhclN0
YXRlKHNjcm9sbGJhclN0YXRlKQorICAgIHsKKyAgICB9CisKKyAgICBQc2V1ZG9JZCBwc2V1ZG9J
ZDsKKyAgICBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3JvbGxiYXJTdGF0ZTsKK307
CisKIHN0cnVjdCBNYXRjaGVkUnVsZSB7CiAgICAgY29uc3QgUnVsZURhdGEqIHJ1bGVEYXRhOwot
ICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5OyAgIAorICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5Owog
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7CiB9OwogCitzdHJ1Y3Qg
TWF0Y2hlZFByb3BlcnRpZXMgeworICAgIFJlZlB0cjxjb25zdCBTdHlsZVByb3BlcnRpZXM+IHBy
b3BlcnRpZXM7CisgICAgdWludDE2X3QgbGlua01hdGNoVHlwZSB7IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hBbGwgfTsKKyAgICB1aW50MTZfdCB3aGl0ZWxpc3RUeXBlIHsgUHJvcGVydHlXaGl0ZWxp
c3ROb25lIH07CisgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCB7IFN0
eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQgfTsKK307CisKK3N0cnVjdCBNYXRjaFJlc3VsdCB7
CisgICAgYm9vbCBpc0NhY2hlYWJsZSB7IHRydWUgfTsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3Bl
cnRpZXMsIDMyPiB1c2VyQWdlbnREZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9w
ZXJ0aWVzLCAzMj4gdXNlckRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRp
ZXMsIDMyPiBhdXRob3JEZWNsYXJhdGlvbnM7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiB1c2VyQWdlbnREZWNsYXJhdGlvbnMuaXNFbXB0eSgpICYmIHVzZXJEZWNsYXJhdGlv
bnMuaXNFbXB0eSgpICYmIGF1dGhvckRlY2xhcmF0aW9ucy5pc0VtcHR5KCk7IH0KK307CisKIGNs
YXNzIEVsZW1lbnRSdWxlQ29sbGVjdG9yIHsKIHB1YmxpYzoKICAgICBFbGVtZW50UnVsZUNvbGxl
Y3Rvcihjb25zdCBFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYsIGNvbnN0IFNlbGVj
dG9yRmlsdGVyKik7CkBAIC02Miw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQW55
TWF0Y2hpbmdSdWxlcyhjb25zdCBSdWxlU2V0Kik7CiAKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRj
aFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpOworICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCgpIGNvbnN0OwogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4mIG1hdGNo
ZWRSdWxlTGlzdCgpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhck1hdGNoZWRSdWxlcygpOwpAQCAt
OTQsMTEgKzEyMiwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7
CiAKLSAgICBlbnVtIGNsYXNzIERlY2xhcmF0aW9uT3JpZ2luIHsgVXNlckFnZW50LCBBdXRob3Is
IFVzZXIgfTsKKyAgICBlbnVtIGNsYXNzIERlY2xhcmF0aW9uT3JpZ2luIHsgVXNlckFnZW50LCBV
c2VyLCBBdXRob3IgfTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNs
YXJhdGlvbk9yaWdpbik7CiAgICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlv
bk9yaWdpbiwgT3B0aW9uYWw8U3R5bGU6OlNjb3BlT3JkaW5hbD4gZm9yU2NvcGUgPSB7IH0pOwog
CiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSYsIHVuc2lnbmVkIHNwZWNp
ZmljaXR5LCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsKKyAgICB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0
aWVzKE1hdGNoZWRQcm9wZXJ0aWVzJiYsIERlY2xhcmF0aW9uT3JpZ2luKTsKIAogICAgIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIApA
QCAtMTIzLDkgKzE1MiwxOSBAQCBwcml2YXRlOgogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZT4+IG1fbWF0Y2hlZFJ1bGVMaXN0OwogICAgIGJvb2wgbV9kaWRNYXRj
aFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IgeyBmYWxzZSB9OwotICAgIFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoUmVzdWx0IG1fcmVzdWx0OworICAgIE1hdGNoUmVzdWx0IG1fcmVzdWx0OwogICAgIFN0
eWxlOjpSZWxhdGlvbnMgbV9zdHlsZVJlbGF0aW9uczsKICAgICBQc2V1ZG9JZFNldCBtX21hdGNo
ZWRQc2V1ZG9FbGVtZW50SWRzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
YXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAg
cmV0dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09
IGIubGlua01hdGNoVHlwZTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYgYSwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7CisgICAgcmV0
dXJuICEoYSA9PSBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggYTI4NDUwYThmYWMuLjA3NDgzZGY2Y2Yy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg3LDcgKzg3
LDcgQEAgdm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVs
ZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNo
ZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VS
dWxlcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5z
aXplKCk7IGkrKykKLSAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hl
ZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpKTsKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVj
bGFyYXRpb25zLmFwcGVuZCh7ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7
CiB9CiAKIHN0YXRpYyBib29sIGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29u
c3QgU3RyaW5nJiBwYWdlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdl
UnVsZUNvbGxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgK
aW5kZXggNzgzOTg3MTYyYjAuLmNlNDZkMWMxMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1
bGVDb2xsZWN0b3IuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ydWxl
U2V0cyhydWxlU2V0cykgeyB9CiAKICAgICB2b2lkIG1hdGNoQWxsUGFnZVJ1bGVzKGludCBwYWdl
SW5kZXgpOwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaGVkUmVzdWx0KCkg
eyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQo
KSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaXNMZWZ0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKICAg
ICBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKICAgICBEb2N1bWVudFJ1bGVT
ZXRzJiBtX3J1bGVTZXRzOwogCi0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQgbV9yZXN1
bHQ7CisgICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYzVmMWJjM2UwNDYuLmI2
NDY4ZjJhNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xMTksNyAr
MTE5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGNvbnN0IENTU1By
b3BlcnR5SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4obGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CiAKLXN0YXRpYyB2b2lkIGV4dHJh
Y3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiwgVGV4dERpcmVjdGlvbiYsIFdyaXRpbmdNb2RlJik7Citz
dGF0aWMgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIFRleHREaXJlY3Rpb24mLCBXcml0aW5nTW9kZSYpOwog
CiBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3Jv
dW5kKCkKIHsKQEAgLTEzOSw1NCArMTM5LDYgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6
U3RhdGU6OmNsZWFyKCkKICAgICBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgPSBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1
bHQ6OmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGll
cywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBQcm9wZXJ0eVdoaXRl
bGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlLCBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxl
U2NvcGVPcmRpbmFsKQotewotICAgIG1fbWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtX21hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSArIDEpOwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0
aWVzJiBuZXdQcm9wZXJ0aWVzID0gbV9tYXRjaGVkUHJvcGVydGllcy5sYXN0KCk7Ci0gICAgbmV3
UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gY29uc3RfY2FzdDxTdHlsZVByb3BlcnRpZXMqPigmcHJv
cGVydGllcyk7Ci0gICAgbmV3UHJvcGVydGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01hdGNoVHlw
ZTsKLSAgICBuZXdQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUgPSBwcm9wZXJ0eVdoaXRlbGlzdFR5
cGU7Ci0gICAgbmV3UHJvcGVydGllcy5zdHlsZVNjb3BlT3JkaW5hbCA9IHN0eWxlU2NvcGVPcmRp
bmFsOwotICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7Ci0KLSAgICBpZiAoc3R5bGVTY29w
ZU9yZGluYWwgIT0gU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCkKLSAgICAgICAgaXNDYWNo
ZWFibGUgPSBmYWxzZTsKLQotICAgIGlmIChpc0NhY2hlYWJsZSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBwcm9wZXJ0eSBjYWNoZSBv
bmx5IGNvcHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNvbHZlCi0gICAgICAgICAg
ICAvLyB0aGUgaW5oZXJpdGVkIG9uZXMuCi0gICAgICAgICAgICAvLyBIZXJlIHdlIGRlZmluZSBz
b21lIGV4Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21lIHByb3BlcnRpZXMgdGhh
dCBhcmUgbm90IGluaGVyaXRlZAotICAgICAgICAgICAgLy8gYnkgZGVmYXVsdC4gSWYgdGhvc2Ug
ZXhjZXB0aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBpdCBzaG91bGQgYmUgcG9z
c2libGUKLSAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBleGNlcHRpb24gdG8gcmVz
b2x2ZSBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBjYWNoZS4KLQotICAgICAg
ICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBjdXJyZW50ID0gcHJvcGVy
dGllcy5wcm9wZXJ0eUF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmlzSW5oZXJpdGVk
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgZXhwbGlj
aXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBwbHkgZnVydGhlciBub24taW5oZXJpdGVkIHBy
b3BlcnRpZXMKLSAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92ZXJyaWRlIHRoZSB2
YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0IGFsbG93IGRlY2xh
cmF0aW9ucyB3aXRoCi0gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0ZWQgcHJv
cGVydGllcyB0byBiZSBjYWNoZWQuCi0gICAgICAgICAgICAgICAgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlID0gKmN1cnJlbnQudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNJbmhl
cml0ZWRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29sb3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBz
YW1lIHNpZGUgZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBjb2xvciwKLSAgICAg
ICAgICAgICAgICAvLyB3aGljaCBpcyBhbiBpbmhlcml0ZWQgdmFsdWUsIG1ha2luZyB0aGUgbm9u
LWluaGVyaXRlZCBwcm9wZXJ0eSBpbXBsaWNpdGx5IGluaGVyaXRlZC4KLSAgICAgICAgICAgICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikgewotICAg
ICAgICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUu
aGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDYWNoZWFi
bGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBTdHlsZVJlc29sdmVyOjpT
dHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fcnVsZVNldHMoKnRoaXMp
CiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKCp0aGlzLCAmU3R5bGVS
ZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKQpAQCAtMjc1LDIwICsyMjcsMTcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQogICAg
IC8vIExvb2sgZm9yIGNhY2hlIGVudHJpZXMgY29udGFpbmluZyBhIHN0eWxlIGRlY2xhcmF0aW9u
IHdpdGggYSBzaW5nbGUgcmVmIGFuZCByZW1vdmUgdGhlbS4KICAgICAvLyBUaGlzIG1heSBoYXBw
ZW4gd2hlbiBhbiBlbGVtZW50IGF0dHJpYnV0ZSBtdXRhdGlvbiBjYXVzZXMgaXQgdG8gZ2VuZXJh
dGUgYSBuZXcgaW5saW5lU3R5bGUoKQogICAgIC8vIG9yIHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCksIHBvdGVudGlhbGx5IGxlYXZpbmcgdGhpcyBjYWNoZSB3aXRoIHRoZSBsYXN0IHJlZiBv
biB0aGUgb2xkIG9uZS4KLSAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiB0b1JlbW92ZTsKLSAgICBN
YXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZS5iZWdpbigpOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGVuZCA9
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0
aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLnJlbW92ZUlmKFsmXShhdXRvJiBrZXlW
YWx1ZSkgeworICAgICAgICBhdXRvIGhhc09uZVJlZiA9IFsmXShhdXRvJiBkZWNsYXJhdGlvbnMp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgOiBkZWNsYXJhdGlv
bnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+
aGFzT25lUmVmKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9SZW1v
dmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5yZW1vdmUo
dG9SZW1vdmVbaV0pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9OworICAg
ICAgICBhdXRvJiBlbnRyeSA9IGtleVZhbHVlLnZhbHVlOworICAgICAgICByZXR1cm4gaGFzT25l
UmVmKGVudHJ5LnVzZXJBZ2VudERlY2xhcmF0aW9ucykgfHwgaGFzT25lUmVmKGVudHJ5LnVzZXJE
ZWNsYXJhdGlvbnMpIHx8IGhhc09uZVJlZihlbnRyeS5hdXRob3JEZWNsYXJhdGlvbnMpOworICAg
IH0pOwogCiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dl
ZXAgPSAwOwogfQpAQCAtMzg5LDcgKzMzOCw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAK
ICAgICBhdXRvIGVsZW1lbnRTdHlsZVJlbGF0aW9ucyA9IFN0eWxlOjpjb21taXRSZWxhdGlvbnNU
b1JlbmRlclN0eWxlKHN0eWxlLCBlbGVtZW50LCBjb2xsZWN0b3Iuc3R5bGVSZWxhdGlvbnMoKSk7
CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCks
IGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoUmVz
dWx0KCksIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRp
c3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCiAgICAgYWRq
dXN0UmVuZGVyU3R5bGUoKnN0YXRlLnN0eWxlKCksICpzdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJl
bnRCb3hTdHlsZSwgJmVsZW1lbnQpOwpAQCAtNDA3LDcgKzM1Niw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSoKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0RlbGV0ZWQpOwogCiAgICAgTWF0Y2hS
ZXN1bHQgcmVzdWx0OwotICAgIHJlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcyhrZXlmcmFtZS0+
cHJvcGVydGllcygpKTsKKyAgICByZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7ICZr
ZXlmcmFtZS0+cHJvcGVydGllcygpIH0pOwogCiAgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkp
OwogCkBAIC00MjQsNyArMzczLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25s
eSBldmVyIG9uZQogICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28g
anVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCiAgICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNh
c2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRj
aGVzKHJlc3VsdCwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSk7Cisg
ICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgQ2FzY2FkZUxldmVsOjpBdXRob3JM
ZXZlbCk7CiAKICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhp
cywgJmNhc2NhZGUsICZyZXN1bHQgfTsKICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOwpAQCAt
NTkwLDEyICs1MzksMTIgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKIAogICAgIEFTU0VSVCgh
Y29sbGVjdG9yLm1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKCkpOwogCi0gICAgaWYgKGNvbGxlY3Rv
ci5tYXRjaGVkUmVzdWx0KCkubWF0Y2hlZFByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgaWYg
KGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTdHlsZVR5cGUocHNldWRvU3R5bGVSZXF1ZXN0
LnBzZXVkb0lkKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNo
ZWRSZXN1bHQoKSwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0
b3IubWF0Y2hSZXN1bHQoKSwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUg
b2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBz
KS4KICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3RhdGUuc3R5bGUoKSwgKm1fc3RhdGUucGFyZW50
U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC02MjMsMTQgKzU3MiwxNCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFn
ZUluZGV4KQogICAgIFBhZ2VSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihtX3N0YXRlLCBtX3J1bGVT
ZXRzKTsKICAgICBjb2xsZWN0b3IubWF0Y2hBbGxQYWdlUnVsZXMocGFnZUluZGV4KTsKIAotICAg
IE1hdGNoUmVzdWx0JiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpOworICAgIGF1
dG8mIHJlc3VsdCA9IGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpOwogCiAgICAgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0cmFjdERp
cmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7CiAKICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rp
b24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAw
LCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxKTsKKyAgICBjYXNjYWRlLmFk
ZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAg
IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwg
JnJlc3VsdCB9OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHks
IGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7CkBAIC0xMzE5LDM0ICsxMjY4
LDExIEBAIHN0YXRpYyBib29sIGVsZW1lbnRUeXBlSGFzQXBwZWFyYW5jZUZyb21VQVN0eWxlKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIHx8IGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6
Om1ldGVyVGFnOwogfQogCi11bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRlTWF0Y2hlZFBy
b3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCB1bnNpZ25l
ZCBzaXplKQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkocHJvcGVydGll
cywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUpOwotfQotCi1ib29sIG9wZXJhdG9y
PT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmFuZ2VzJiBiKQordW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6Y29tcHV0ZU1hdGNo
ZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCiB7Ci0gICAg
cmV0dXJuIGEuZmlyc3RVQVJ1bGUgPT0gYi5maXJzdFVBUnVsZQotICAgICAgICAmJiBhLmxhc3RV
QVJ1bGUgPT0gYi5sYXN0VUFSdWxlCi0gICAgICAgICYmIGEuZmlyc3RBdXRob3JSdWxlID09IGIu
Zmlyc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEubGFzdEF1dGhvclJ1bGUgPT0gYi5sYXN0QXV0
aG9yUnVsZQotICAgICAgICAmJiBhLmZpcnN0VXNlclJ1bGUgPT0gYi5maXJzdFVzZXJSdWxlCi0g
ICAgICAgICYmIGEubGFzdFVzZXJSdWxlID09IGIubGFzdFVzZXJSdWxlOwotfQotCi1ib29sIG9w
ZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYg
YSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCi17Ci0gICAgcmV0
dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hUeXBlID09IGIu
bGlua01hdGNoVHlwZTsKLX0KLQotYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVy
dGllcyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOworICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zLmRhdGEoKSwg
c2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xhcmF0
aW9ucy5zaXplKCkpCisgICAgICAgIF4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1hdGNoUmVz
dWx0LnVzZXJEZWNsYXJhdGlvbnMuZGF0YSgpLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICog
bWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9ucy5zaXplKCkpCisgICAgICAgIF4gU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5KG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5kYXRhKCksIHNp
emVvZihNYXRjaGVkUHJvcGVydGllcykgKiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMu
c2l6ZSgpKTsKIH0KIAogY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSh1bnNp
Z25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCkBAIC0xMzU2LDE3ICsx
MjgyLDExIEBAIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVt
KiBTdHlsZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQCiAgICAgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsK
ICAgICBpZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVt
ID0gaXQtPnZhbHVlOwogCi0gICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcygpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMoKVtpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXNbaV0pCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKGNhY2hlSXRlbS5yYW5nZXMgIT0g
bWF0Y2hSZXN1bHQucmFuZ2VzKQorICAgIGF1dG8mIGNhY2hlSXRlbSA9IGl0LT52YWx1ZTsKKyAg
ICBpZiAobWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zICE9IGNhY2hlSXRlbS51c2Vy
QWdlbnREZWNsYXJhdGlvbnMgfHwgbWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9ucyAhPSBjYWNo
ZUl0ZW0udXNlckRlY2xhcmF0aW9ucyB8fCBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMg
IT0gY2FjaGVJdGVtLmF1dGhvckRlY2xhcmF0aW9ucykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKICAgICByZXR1cm4gJmNhY2hlSXRlbTsKIH0KIApAQCAtMTQyMyw3ICsxMzQzLDcgQEAgc3Rh
dGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgUmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBleHRyYWN0
RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBT
dHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIFRleHREaXJlY3Rpb24mIGRp
cmVjdGlvbiwgV3JpdGluZ01vZGUmIHdyaXRpbmdNb2RlKQordm9pZCBleHRyYWN0RGlyZWN0aW9u
QW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIFRleHREaXJlY3Rpb24mIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUmIHdy
aXRpbmdNb2RlKQogewogICAgIGRpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwogICAgIHdy
aXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKQEAgLTE0MzEsMjYgKzEzNTEsMjggQEAg
dm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKICAgICBib29sIGhhZEltcG9ydGFudFdyaXRpbmdNb2Rl
ID0gZmFsc2U7CiAgICAgYm9vbCBoYWRJbXBvcnRhbnREaXJlY3Rpb24gPSBmYWxzZTsKIAotICAg
IGZvciAoY29uc3QgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgOiBtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gbWF0
Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IG1hdGNoZWRQcm9wZXJ0aWVzLnByb3Bl
cnRpZXMtPnByb3BlcnR5QXQoaSk7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnZhbHVlKCkt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAocHJvcGVydHkuaWQoKSkgewotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdyaXRpbmdNb2RlOgotICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50V3JpdGluZ01v
ZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICB3cml0
aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudFdyaXRpbmdNb2RlID0gcHJvcGVydHku
aXNJbXBvcnRhbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAgICAgICAgICAgICAg
IGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50
RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKKyAgICBmb3IgKGF1dG8qIG1hdGNo
ZWREZWNsYXJhdGlvbnMgOiB7ICZtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlvbnMsICZt
YXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zLCAmbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRp
b25zIH0pIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtYXRjaGVkUHJvcGVydGllcyA6ICpt
YXRjaGVkRGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBj
b3VudCA9IG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnR5ID0gbWF0Y2hlZFBy
b3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdyaXRpbmdNb2RlIHx8IHByb3BlcnR5LmlzSW1wb3J0
YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhZEltcG9ydGFudFdyaXRpbmdNb2RlID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFk
SW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ1OSw3ICsx
MzgxLDcgQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIFNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgc2hvdWxk
VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKIHsKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IHNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUgJiYgbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNI
YXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuZGF0YSgpLCBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcygpLnNpemUoKSkgOiAwOworICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9
IHNob3VsZFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgJiYgbWF0Y2hSZXN1bHQuaXNDYWNoZWFi
bGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0KSA6IDA7CiAgICAg
Ym9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gbnVsbHB0cjsKICAgICBpZiAoY2FjaGVIYXNoICYm
IChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY2FjaGVIYXNoLCBt
YXRjaFJlc3VsdCkpCkBAIC0xNDkzLDggKzE0MTUsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25z
dAogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
dHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoKQogICAgICAgICAvLyBjYW4g
bG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIHN0eWxlZCBmb3Jt
IGNvbnRyb2wgb3Igbm90LgogICAgICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJl
Y3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgICAgICBjYXNjYWRlLmFk
ZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVB
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2FzY2Fk
ZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2Vu
dExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAgICAgICAgIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJm1hdGNoUmVzdWx0IH07CiAK
QEAgLTE1MjAsMTAgKzE0NDIsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICB9CiAK
ICAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsK
LSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIDAsIG1hdGNoUmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAg
ICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0
Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRk
SW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6
VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGROb3Jt
YWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbCwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2Fk
ZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxl
dmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hl
cyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRl
TGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCiAgICAgQXBwbHlD
YXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsICZjYXNjYWRlLCAmbWF0Y2hS
ZXN1bHQgfTsKIApAQCAtMTcxOSwxMCArMTY0MywxMCBAQCBTdHlsZVJlc29sdmVyOjpDYXNjYWRl
ZFByb3BlcnRpZXMqIFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVkUHJvcGVydGllc0ZvclJvbGxiYWNr
KAogICAgICAgICBhdXRvIG5ld0F1dGhvclJvbGxiYWNrKG1ha2VVbmlxdWU8Q2FzY2FkZWRQcm9w
ZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAKICAgICAgICAgLy8gVGhpcyBzcGVj
aWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVzZXIgcnVsZXMgYnV0
IG5vIGF1dGhvciBydWxlcy4KLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1h
dGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbmV3QXV0aG9yUm9sbGJh
Y2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJz
dFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAg
ICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
c2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xs
YmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdl
bnRMZXZlbCwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0
Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGZhbHNlKTsKKyAgICAg
ICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENh
c2NhZGVMZXZlbDo6VXNlckxldmVsLCBmYWxzZSk7CisgICAgICAgIG5ld0F1dGhvclJvbGxiYWNr
LT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2Vu
dExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdB
dXRob3JSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7
CkBAIC0xNzM2LDggKzE2NjAsOCBAQCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMq
IFN0eWxlUmVzb2x2ZXI6OmNhc2NhZGVkUHJvcGVydGllc0ZvclJvbGxiYWNrKAogICAgICAgICBh
dXRvIG5ld1VzZXJSb2xsYmFjayhtYWtlVW5pcXVlPENhc2NhZGVkUHJvcGVydGllcz4oZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSkpOwogCiAgICAgICAgIC8vIFRoaXMgc3BlY2lhbCByb2xsYmFjayBj
YXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVsZXMuCi0gICAgICAgIG5ld1VzZXJSb2xsYmFjay0+
YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdV
c2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGZhbHNl
KTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0
LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CisgICAgICAgIG5ld1VzZXJS
b2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpV
c2VyQWdlbnRMZXZlbCwgZmFsc2UpOwogCiAgICAgICAgIHN0YXRlKCkuc2V0VXNlclJvbGxiYWNr
KG5ld1VzZXJSb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBzdGF0ZSgpLnVzZXJSb2xsYmFjaygp
OwpAQCAtMjIxMCwxMCArMjEzNCw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllczo6
TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7Ci0KLVN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7Ci0KIFN0eWxlUmVzb2x2
ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Q2FzY2FkZWRQcm9wZXJ0aWVzKFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKICAgICA6IG1fZGlyZWN0aW9uKGRp
cmVjdGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUod3JpdGluZ01vZGUpCkBAIC0yMjk5LDIyICsy
MjE5LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpzZXREZWZl
cnJlZChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYKICAgICBtX2RlZmVycmVkUHJvcGVydGll
cy5hcHBlbmQocHJvcGVydHkpOwogfQogCi1zdGF0aWMgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZl
bEZvckluZGV4KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwg
aW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUgJiYgaW5kZXggPD0gbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUpCi0gICAgICAg
IHJldHVybiBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsOwotICAgIGlmIChpbmRleCA+PSBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSAmJiBpbmRleCA8PSBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlKQotICAgICAgICByZXR1cm4gQ2FzY2FkZUxldmVsOjpVc2VyTGV2
ZWw7Ci0gICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWw7Ci19CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzSW1wb3J0YW50LCBib29sIGlu
aGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRk
TWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzLCBDYXNjYWRl
TGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkp
CiB7Ci0gICAgYXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcygpW2luZGV4XTsKICAgICBhdXRvJiBzdHlsZVByb3BlcnRpZXMgPSAqbWF0Y2hlZFBy
b3BlcnRpZXMucHJvcGVydGllczsKLQogICAgIGF1dG8gcHJvcGVydHlXaGl0ZWxpc3RUeXBlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0
ZWxpc3RUeXBlKTsKLSAgICBhdXRvIGNhc2NhZGVMZXZlbCA9IGNhc2NhZGVMZXZlbEZvckluZGV4
KG1hdGNoUmVzdWx0LCBpbmRleCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9
IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOwpAQCAtMjM0
MiwxMyArMjI1MSwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6
YWRkTWF0Y2goY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LAogICAgIH0KIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE5vcm1hbE1hdGNoZXMoY29u
c3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4
LCBib29sIGluaGVyaXRlZE9ubHkpCisKK3N0YXRpYyBhdXRvJiBkZWNsYXJhdGlvbnNGb3JDYXNj
YWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2Fz
Y2FkZUxldmVsKQogewotICAgIGlmIChzdGFydEluZGV4ID09IC0xKQotICAgICAgICByZXR1cm47
CisgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6VXNl
ckFnZW50TGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlvbnM7Cisg
ICAgY2FzZSBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVzZXJE
ZWNsYXJhdGlvbnM7CisgICAgY2FzZSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOiByZXR1cm4g
bWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworfQog
Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkKLSAgICAg
ICAgYWRkTWF0Y2gobWF0Y2hSZXN1bHQsIGksIGZhbHNlLCBpbmhlcml0ZWRPbmx5KTsKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGROb3JtYWxNYXRjaGVzKGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9v
bCBpbmhlcml0ZWRPbmx5KQoreworICAgIGZvciAoYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA6
IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKSkK
KyAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9ucywgY2FzY2FkZUxldmVsLCBmYWxz
ZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKIHN0YXRpYyBib29sIGhhc0ltcG9ydGFudFByb3BlcnRp
ZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQpAQCAtMjM2MCwyMCArMjI3OCwx
OSBAQCBzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVy
dGllcyYgcHJvcGVydGllcykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBp
bmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFk
ZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRl
TGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgaWYgKHN0YXJ0
SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQogICAgIHN0cnVjdCBJbmRleEFuZE9yZGlu
YWwgewotICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OwogICAgICAg
ICBTdHlsZTo6U2NvcGVPcmRpbmFsIG9yZGluYWw7CiAgICAgfTsKICAgICBWZWN0b3I8SW5kZXhB
bmRPcmRpbmFsPiBpbXBvcnRhbnRNYXRjaGVzOwogICAgIGJvb2wgaGFzTWF0Y2hlc0Zyb21PdGhl
clNjb3BlcyA9IGZhbHNlOwogCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5k
SW5kZXg7ICsraSkgewotICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFBy
b3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpW2ldOworICAgIGF1dG8m
IG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hS
ZXN1bHQsIGNhc2NhZGVMZXZlbCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0
Y2hlZERlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBNYXRjaGVkUHJv
cGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaGVkRGVjbGFyYXRpb25zW2ldOwogCiAg
ICAgICAgIGlmICghaGFzSW1wb3J0YW50UHJvcGVydGllcygqbWF0Y2hlZFByb3BlcnRpZXMucHJv
cGVydGllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIzOTYsNyArMjMxMyw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRJbXBvcnRhbnRNYXRjaGVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBtYXRjaCA6IGlt
cG9ydGFudE1hdGNoZXMpCi0gICAgICAgIGFkZE1hdGNoKG1hdGNoUmVzdWx0LCBtYXRjaC5pbmRl
eCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFkZE1hdGNoKG1hdGNoZWREZWNsYXJh
dGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRlTGV2ZWwsIHRydWUsIGluaGVyaXRlZE9ubHkpOwog
fQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YXBwbHlEZWZlcnJl
ZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0
eVN0YXRlJiBhcHBseVN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNTI5
NDFiYTZiZDMuLjkwNWQyYTM4ZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgiCiAj
aW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIK
KyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNT
U09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTk5LDE4ICsxMDAsNiBAQCBlbnVtIGNsYXNzIENhc2NhZGVM
ZXZlbDogdWludDhfdCB7CiAgICAgVXNlckxldmVsCiB9OwogCi1jbGFzcyBQc2V1ZG9TdHlsZVJl
cXVlc3QgewotcHVibGljOgotICAgIFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9JZCBwc2V1ZG9J
ZCwgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0ZT4gc2Nyb2xsYmFyU3RhdGUgPSBXVEY6Om51
bGxvcHQpCi0gICAgICAgIDogcHNldWRvSWQocHNldWRvSWQpCi0gICAgICAgICwgc2Nyb2xsYmFy
U3RhdGUoc2Nyb2xsYmFyU3RhdGUpCi0gICAgewotICAgIH0KLQotICAgIFBzZXVkb0lkIHBzZXVk
b0lkOwotICAgIE9wdGlvbmFsPFN0eWxlU2Nyb2xsYmFyU3RhdGU+IHNjcm9sbGJhclN0YXRlOwot
fTsKLQogc3RydWN0IEVsZW1lbnRTdHlsZSB7CiAgICAgRWxlbWVudFN0eWxlKHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZTo6UmVs
YXRpb25zPiByZWxhdGlvbnMgPSB7IH0pCiAgICAgICAgIDogcmVuZGVyU3R5bGUoV1RGTW92ZShy
ZW5kZXJTdHlsZSkpCkBAIC0xNzUsOCArMTY0LDYgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCos
IFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMp
OwogCiBwdWJsaWM6Ci0gICAgc3RydWN0IE1hdGNoUmVzdWx0OwotCiAgICAgdm9pZCBhcHBseVBy
b3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1By
b3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKQEAgLTIyMSw0OCArMjA4LDYgQEAgcHVibGljOgogICAg
IHZvaWQgY2xlYXJDYWNoZWRQcm9wZXJ0aWVzQWZmZWN0ZWRCeVZpZXdwb3J0VW5pdHMoKTsKIAog
ICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwg
RmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7Ci0KLSAgICBzdHJ1Y3QgUnVsZVJhbmdl
IHsKLSAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFzdFJ1bGVJbmRleChsYXN0
UnVsZUluZGV4KSB7IH0KLSAgICAgICAgaW50JiBmaXJzdFJ1bGVJbmRleDsKLSAgICAgICAgaW50
JiBsYXN0UnVsZUluZGV4OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hSYW5nZXMgewotICAg
ICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmly
c3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwg
bGFzdFVzZXJSdWxlKC0xKSB7IH0KLSAgICAgICAgaW50IGZpcnN0VUFSdWxlOwotICAgICAgICBp
bnQgbGFzdFVBUnVsZTsKLSAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZTsKLSAgICAgICAgaW50
IGxhc3RBdXRob3JSdWxlOwotICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZTsKLSAgICAgICAgaW50
IGxhc3RVc2VyUnVsZTsKLSAgICAgICAgUnVsZVJhbmdlIFVBUnVsZVJhbmdlKCkgeyByZXR1cm4g
UnVsZVJhbmdlKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsgfQotICAgICAgICBSdWxlUmFuZ2Ug
YXV0aG9yUnVsZVJhbmdlKCkgeyByZXR1cm4gUnVsZVJhbmdlKGZpcnN0QXV0aG9yUnVsZSwgbGFz
dEF1dGhvclJ1bGUpOyB9Ci0gICAgICAgIFJ1bGVSYW5nZSB1c2VyUnVsZVJhbmdlKCkgeyByZXR1
cm4gUnVsZVJhbmdlKGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7IH0KLSAgICB9OwotCi0g
ICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKLSAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXMo
KTsKLSAgICAgICAgfk1hdGNoZWRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIAotICAgICAgICBSZWZQ
dHI8U3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzOwotICAgICAgICB1aW50MTZfdCBsaW5rTWF0
Y2hUeXBlOwotICAgICAgICB1aW50MTZfdCB3aGl0ZWxpc3RUeXBlOwotICAgICAgICBTdHlsZTo6
U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTWF0
Y2hSZXN1bHQgewotICAgICAgICBNYXRjaFJlc3VsdCgpIDogaXNDYWNoZWFibGUodHJ1ZSkgeyB9
Ci0gICAgICAgIFZlY3RvcjxTdHlsZVJ1bGUqLCA2ND4gbWF0Y2hlZFJ1bGVzOwotICAgICAgICBN
YXRjaFJhbmdlcyByYW5nZXM7Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGU7Ci0KLSAgICAgICAg
Y29uc3QgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCA2ND4mIG1hdGNoZWRQcm9wZXJ0aWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRjaGVkUHJvcGVydGllczsgfQotCi0gICAgICAgIHZvaWQgYWRk
TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiwgU3R5bGVSdWxlKiA9IG51
bGxwdHIsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxs
LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUsIFN0eWxlOjpT
Y29wZU9yZGluYWwgPSBTdHlsZTo6U2NvcGVPcmRpbmFsOjpFbGVtZW50KTsKLSAgICBwcml2YXRl
OgotICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiBtX21hdGNoZWRQcm9wZXJ0
aWVzOwotICAgIH07CiAgICAgCiAgICAgY2xhc3MgQ2FzY2FkZWRQcm9wZXJ0aWVzIHsKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0yODEsOCArMjI2LDggQEAgcHVibGljOgog
ICAgICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0OwogICAgICAgICBQ
cm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAKLSAgICAgICAgdm9pZCBhZGROb3Jt
YWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRl
eCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOwotICAgICAgICB2b2lkIGFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4
LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgYWRkTm9ybWFsTWF0
Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5
ID0gZmFsc2UpOworICAgICAgICB2b2lkIGFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKIAogICAg
ICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImLCBBcHBseUNh
c2NhZGVkUHJvcGVydHlTdGF0ZSYpOwogCkBAIC0yOTEsNyArMjM2LDcgQEAgcHVibGljOgogICAg
ICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRNYXRjaChjb25zdCBNYXRjaFJlc3Vs
dCYsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkp
OworICAgICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgQ2FzY2Fk
ZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgICAgICB2
b2lkIHNldChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUs
IENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7CiAgICAgICAgIHZvaWQgc2V0RGVm
ZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBD
YXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwogICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwp
OwpAQCAtMzM1LDE0ICsyODAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjYXNjYWRlTWF0Y2hl
cyhDYXNjYWRlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50
LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogCi0g
ICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBib29sIGlzTGVm
dFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwotICAgIHZv
aWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRS
dWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9v
bCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7Ci0KLSAgICBib29sIGlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFn
ZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9Ci0gICAgYm9v
bCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBTdHJpbmcgcGFnZU5hbWUo
aW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KICAgICBEb2N1bWVudFJ1bGVTZXRzIG1fcnVsZVNldHM7
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPj4gS2V5ZnJhbWVzUnVsZU1hcDsKQEAgLTQ3NywyMCArNDE0LDIyIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hSZXN1bHQmKTsKICAg
ICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewotICAgICAgICBWZWN0b3I8TWF0
Y2hlZFByb3BlcnRpZXM+IG1hdGNoZWRQcm9wZXJ0aWVzOwotICAgICAgICBNYXRjaFJhbmdlcyBy
YW5nZXM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gdXNlckFnZW50RGVjbGFy
YXRpb25zOworICAgICAgICBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+IHVzZXJEZWNsYXJhdGlv
bnM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gYXV0aG9yRGVjbGFyYXRpb25z
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlOwogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBhcmVudFJlbmRlclN0eWxlOwogICAg
ICAgICAKICAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0oY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIDogcmFuZ2VzKG1hdGNoUmVzdWx0LnJhbmdl
cykKLSAgICAgICAgICAgICwgcmVuZGVyU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpzdHls
ZSkpCisgICAgICAgICAgICA6IHJlbmRlclN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5
bGUpKQogICAgICAgICAgICAgLCBwYXJlbnRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKnBhcmVudFN0eWxlKSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gQXNzaWduIHJhdGhl
ciB0aGFuIGNvcHktY29uc3RydWN0IHNvIHdlIG9ubHkgYWxsb2NhdGUgYXMgbXVjaCB2ZWN0b3Ig
Y2FwYWNpdHkgYXMgbmVlZGVkLgotICAgICAgICAgICAgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRj
aFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpOworICAgICAgICAgICAgdXNlckFnZW50RGVjbGFy
YXRpb25zID0gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zOworICAgICAgICAgICAg
dXNlckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVzdWx0LnVzZXJEZWNsYXJhdGlvbnM7CisgICAgICAg
ICAgICBhdXRob3JEZWNsYXJhdGlvbnMgPSBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7
CiAgICAgICAgIH0KICAgICAgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0oKSA9IGRlZmF1
bHQ7CiAgICAgfTsKQEAgLTUzMSwxMSArNDcwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzIHsgdHJ1ZSB9OwogICAgIC8vIFNlZSBpZiB3ZSBzdGlsbCBo
YXZlIGNyYXNoZXMgd2hlcmUgU3R5bGVSZXNvbHZlciBnZXRzIGRlbGV0ZWQgZWFybHkuCiAgICAg
Ym9vbCBtX2lzRGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3Qg
TWF0Y2hlZFByb3BlcnRpZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1h
dGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IE1hdGNoUmFuZ2VzJiwgY29uc3QgTWF0Y2hSYW5nZXMmKTsKIH07CiAKIC8vIFN0
YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMsIHRvIGtlZXAgdHJhY2sgb2Ygd2hp
Y2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CkBAIC01NDMsNyArNDc3LDcgQEAgcHJpdmF0ZToK
IHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7CiAgICAgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcjsKICAgICBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMqIGNh
c2NhZGU7Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQqIG1hdGNoUmVzdWx0
OworICAgIGNvbnN0IE1hdGNoUmVzdWx0KiBtYXRjaFJlc3VsdDsKICAgICBCaXRtYXA8bnVtQ1NT
UHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07CiAgICAgSGFzaFNldDxTdHJpbmc+
IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OwogICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0
aWVzPiBpblByb2dyZXNzUHJvcGVydGllcyA9IHsgfTsK
</data>
<flag name="review"
          id="397410"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381781</attachid>
            <date>2019-10-24 00:08:02 -0700</date>
            <delta_ts>2019-10-24 01:18:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>matchresult-out-of-resolver-6.patch</filename>
            <type>text/plain</type>
            <size>46670</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZWQxODU5NThlMy4uNzhhOWMzNWFhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxOS0xMC0yMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBNYXRjaFJlc3VsdCBhbmQgcmVsYXRlZCB0eXBlcyBvdXQgb2YgU3R5
bGVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzMjUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4gQnVqdGFzLgorCisgICAgICAg
IFJldmVyc2UgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiBTdHlsZVJlc29sdmVyIGFuZCBFbGVtZW50
UnVsZUNvbGxlY3RvciBzbyB0aGF0IHRoZSBmb3JtZXIgZGVwZW5kcyBvbiB0aGUgbGF0dGVyLgor
ICAgICAgICBUaGlzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byB1bmRlcnN0YW5kIGFuZCBlbmFi
bGVzIGZ1cnRoZXIgY2xlYW51cHMuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gZ2V0cyByaWQg
b2YgdGhlIGNvbmZ1c2luZyBSdWxlUmFuZ2Ugb2JqZWN0cyBpbiBmb3ZvciBvZiBzcGxpdHRpbmcg
ZGVjbGFyYXRpb25zIGZyb20gZGlmZmVyZW50IGNhc2NhZGUgbGV2ZWxzIHRvIHNlcGFyYXRlIHZl
Y3RvcnMuCisgICAgICAgIFRoZSBkZXNpcmVkIGNhc2NhZGUgbGV2ZWwgaXMgaW5kaWNhdGVkIHdp
dGggYW4gZW51bSBpbnN0ZWFkIG9mIGEgcmFuZ2UuCisKKyAgICAgICAgVGhlcmUgaXMgYWxzbyBz
b21lIGdlbmVyYWwgbW9kZXJuaXphdGlvbi4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0
Y2hSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6
OmFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1
bGVDb2xsZWN0b3I6OnRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjphZGRNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpQc2V1
ZG9TdHlsZVJlcXVlc3Q6OlBzZXVkb1N0eWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpN
YXRjaFJlc3VsdDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNzcy9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0
Y2hQYWdlUnVsZXMpOgorICAgICAgICAqIGNzcy9QYWdlUnVsZUNvbGxlY3Rvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUmVzdWx0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaGVkUmVzdWx0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1hdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE5vcm1hbE1h
dGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0
aWVzOjphZGRJbXBvcnRhbnRNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjaGVkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJh
dG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZUxldmVsRm9ySW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbTo6TWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvU3R5bGVSZXF1ZXN0
OjpQc2V1ZG9TdHlsZVJlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6UnVsZVJhbmdlOjpSdWxlUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXM6Ok1hdGNoUmFuZ2VzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzOjpVQVJ1bGVSYW5nZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlczo6
YXV0aG9yUnVsZVJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Ok1hdGNoUmFuZ2VzOjp1c2VyUnVsZVJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjpNYXRjaFJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6bWF0Y2hlZFByb3Bl
cnRpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
aXNSaWdodFBhZ2UgY29uc3QpOiBEZWxldGVkLgorCiAyMDE5LTEwLTIyICBNaWd1ZWwgR29tZXog
IDxtYWdvbWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjQ0MzcyKTogW0dU
S11bV1BFXSBmYXN0L2ltYWdlcy9pY29uLWRlY29kaW5nLmh0bWwgYW5kIG90aGVycyBhcmUgZmFp
bGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5kZXgg
YTJhNTlkMjExMTAuLmNmYjVmN2NiZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50
UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRWxlbWVudFJ1bGVDb2xsZWN0b3I6
OkVsZW1lbnRSdWxlQ29sbGVjdG9yKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJ1bGVT
ZXQKICAgICBBU1NFUlQoIW1fc2VsZWN0b3JGaWx0ZXIgfHwgbV9zZWxlY3RvckZpbHRlci0+cGFy
ZW50U3RhY2tJc0NvbnNpc3RlbnQoZWxlbWVudC5wYXJlbnROb2RlKCkpKTsKIH0KIAotU3R5bGVS
ZXNvbHZlcjo6TWF0Y2hSZXN1bHQmIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaGVkUmVzdWx0
KCkKK2NvbnN0IE1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hSZXN1bHQo
KSBjb25zdAogewogICAgIEFTU0VSVChtX21vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpS
ZXNvbHZpbmdTdHlsZSk7CiAgICAgcmV0dXJuIG1fcmVzdWx0OwpAQCAtMTI0LDE0ICsxMjQsOCBA
QCBpbmxpbmUgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhjb25zdCBTdHlsZVByb3BlcnRpZQogICAgIGlmICghcHJvcGVydHlTZXQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgIT0gLTEp
Ci0gICAgICAgICsrbV9yZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlOwotICAgIGVsc2Ugewot
ICAgICAgICBtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVk
UHJvcGVydGllcygpLnNpemUoKTsKLSAgICAgICAgbV9yZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSA9IG1fcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZTsKLSAgICB9CisgICAgYWRkTWF0
Y2hlZFByb3BlcnRpZXMoeyBwcm9wZXJ0eVNldCB9LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9y
KTsKIAotICAgIG1fcmVzdWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKCpwcm9wZXJ0eVNldCk7CiAg
ICAgaWYgKCFpc0NhY2hlYWJsZSkKICAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxz
ZTsKIH0KQEAgLTE3OCwyMiArMTcyLDYgQEAgdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6dHJh
bnNmZXJNYXRjaGVkUnVsZXMoRGVjbGFyYXRpb25PcmlnaW4gZGVjbGFyYXRpb25PcmkKICAgICBp
ZiAobV9tYXRjaGVkUnVsZXMuc2l6ZSgpIDw9IG1fbWF0Y2hlZFJ1bGVUcmFuc2ZlckluZGV4KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJhbmdlRm9yRGVjbGFyYXRpb25PcmlnaW4gPSBb
Jl0oKSB7Ci0gICAgICAgIHN3aXRjaCAoZGVjbGFyYXRpb25PcmlnaW4pIHsKLSAgICAgICAgY2Fz
ZSBEZWNsYXJhdGlvbk9yaWdpbjo6VXNlckFnZW50OiByZXR1cm4gbV9yZXN1bHQucmFuZ2VzLlVB
UnVsZVJhbmdlKCk7Ci0gICAgICAgIGNhc2UgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcjogcmV0
dXJuIG1fcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY2FzZSBEZWNs
YXJhdGlvbk9yaWdpbjo6VXNlcjogcmV0dXJuIG1fcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBtX3Jlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgfSgpOwotCi0gICAg
Ly8gRklYTUU6IFJhbmdlIHVwZGF0aW5nIHNob3VsZCBiZSBkb25lIGJ5IE1hdGNoUmVzdWx0cyB0
eXBlCi0gICAgLy8gRklYTUU6IE1hdGNoUmVzdWx0cyBzaG91bGRuJ3QgYmUgaW4gU3R5bGVSZXNv
bHZlciBuYW1lc3BhY2UuCi0gICAgYm9vbCB1cGRhdGVSYW5nZXMgPSBtX21vZGUgIT0gU2VsZWN0
b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXM7Ci0gICAgaWYgKHVwZGF0ZVJhbmdlcyAm
JiByYW5nZUZvckRlY2xhcmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID09IC0xKQotICAgICAg
ICByYW5nZUZvckRlY2xhcmF0aW9uT3JpZ2luLmZpcnN0UnVsZUluZGV4ID0gbV9yZXN1bHQubWF0
Y2hlZFJ1bGVzLnNpemUoKTsKLQogICAgIGZvciAoOyBtX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRl
eCA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKyttX21hdGNoZWRSdWxlVHJhbnNmZXJJbmRleCkg
ewogICAgICAgICBhdXRvJiBtYXRjaGVkUnVsZSA9IG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1
bGVUcmFuc2ZlckluZGV4XTsKICAgICAgICAgaWYgKGZyb21TY29wZSAmJiBtYXRjaGVkUnVsZS5z
dHlsZVNjb3BlT3JkaW5hbCA8ICpmcm9tU2NvcGUpCkBAIC0yMDQsMTEgKzE4MiwxMyBAQCB2b2lk
IEVsZW1lbnRSdWxlQ29sbGVjdG9yOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhEZWNsYXJhdGlvbk9y
aWdpbiBkZWNsYXJhdGlvbk9yaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAot
ICAgICAgICBtX3Jlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcyhtYXRjaGVkUnVsZS5ydWxlRGF0
YS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCksIG1h
dGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCksIG1hdGNoZWRSdWxlLnJ1bGVEYXRh
LT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSwgbWF0Y2hlZFJ1bGUuc3R5bGVTY29wZU9yZGluYWwp
OworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyh7CisgICAgICAgICAgICAmbWF0Y2hlZFJ1
bGUucnVsZURhdGEtPnJ1bGUoKS0+cHJvcGVydGllcygpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5saW5rTWF0Y2hUeXBlKCkpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5wcm9w
ZXJ0eVdoaXRlbGlzdFR5cGUoKSksCisgICAgICAgICAgICBtYXRjaGVkUnVsZS5zdHlsZVNjb3Bl
T3JkaW5hbAorICAgICAgICB9LCBkZWNsYXJhdGlvbk9yaWdpbik7CiAgICAgfQotCi0gICAgaWYg
KHVwZGF0ZVJhbmdlcykKLSAgICAgICAgcmFuZ2VGb3JEZWNsYXJhdGlvbk9yaWdpbi5sYXN0UnVs
ZUluZGV4ID0gbV9yZXN1bHQubWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7CiB9CiAKIHZvaWQgRWxl
bWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMoKQpAQCAtNTg2LDkgKzU2NiwxMCBA
QCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzLCBib29sIGluYwogCiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
c3R5bGVkRWxlbWVudCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KHN0eWxl
ZEVsZW1lbnQpLmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7Cisg
ICAgICAgICAgICBhdXRvIHRleHREaXJlY3Rpb24gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc3R5
bGVkRWxlbWVudCkuZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsK
KyAgICAgICAgICAgIGF1dG8mIHByb3BlcnRpZXMgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24oKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgbV9yZXN1
bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXModGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkp
OworICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwg
RGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02
MzMsNCArNjE0LDU5IEBAIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Omhhc0FueU1hdGNoaW5n
UnVsZXMoY29uc3QgUnVsZVNldCogcnVsZVNldCkKICAgICByZXR1cm4gIW1fbWF0Y2hlZFJ1bGVz
LmlzRW1wdHkoKTsKIH0KIAordm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6YWRkTWF0Y2hlZFBy
b3BlcnRpZXMoTWF0Y2hlZFByb3BlcnRpZXMmJiBtYXRjaGVkUHJvcGVydGllcywgRGVjbGFyYXRp
b25PcmlnaW4gZGVjbGFyYXRpb25PcmlnaW4pCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUgY29kZS4KKyAgICBhdXRv
IGNvbXB1dGVJc0NhY2hlYWJsZSA9IFsmXSB7CisgICAgICAgIGlmICghbV9yZXN1bHQuaXNDYWNo
ZWFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1hdGNoZWRQ
cm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byYgcHJvcGVydGll
cyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoZSBwcm9wZXJ0eSBjYWNoZSBvbmx5IGNv
cHkgdGhlIG5vbi1pbmhlcml0ZWQgdmFsdWVzIGFuZCByZXNvbHZlCisgICAgICAgICAgICAvLyB0
aGUgaW5oZXJpdGVkIG9uZXMuCisgICAgICAgICAgICAvLyBIZXJlIHdlIGRlZmluZSBzb21lIGV4
Y2VwdGlvbiB3ZXJlIHdlIGhhdmUgdG8gcmVzb2x2ZSBzb21lIHByb3BlcnRpZXMgdGhhdCBhcmUg
bm90IGluaGVyaXRlZAorICAgICAgICAgICAgLy8gYnkgZGVmYXVsdC4gSWYgdGhvc2UgZXhjZXB0
aW9ucyBiZWNvbWUgdG9vIGNvbW1vbiBvbiB0aGUgd2ViLCBpdCBzaG91bGQgYmUgcG9zc2libGUK
KyAgICAgICAgICAgIC8vIHRvIGJ1aWxkIGEgbGlzdCBvZiBleGNlcHRpb24gdG8gcmVzb2x2ZSBp
bnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIFN0
eWxlUHJvcGVydGllczo6UHJvcGVydHlSZWZlcmVuY2UgY3VycmVudCA9IHByb3BlcnRpZXMucHJv
cGVydHlBdChpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LmlzSW5oZXJpdGVkKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSB2
YWx1ZSBpcyBleHBsaWNpdGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVyIG5v
bi1pbmhlcml0ZWQgcHJvcGVydGllcworICAgICAgICAgICAgLy8gYXMgdGhleSBtaWdodCBvdmVy
cmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBh
bGxvdyBkZWNsYXJhdGlvbnMgd2l0aAorICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0
ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQuCisgICAgICAgICAgICBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUgPSAqY3VycmVudC52YWx1ZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW5oZXJp
dGVkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBjdXJyZW50Q29sb3IgaGFzIGltcGxpY2l0ZWx5IHRoZSBzYW1lIHNpZGUg
ZWZmZWN0LiBJdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBjb2xvciwKKyAgICAgICAgICAgIC8v
IHdoaWNoIGlzIGFuIGluaGVyaXRlZCB2YWx1ZSwgbWFraW5nIHRoZSBub24taW5oZXJpdGVkIHBy
b3BlcnR5IGltcGxpY2l0bHkgaW5oZXJpdGVkLgorICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAodmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKworICAgIG1fcmVzdWx0LmlzQ2FjaGVhYmxlID0gY29tcHV0ZUlz
Q2FjaGVhYmxlKCk7CisKKyAgICBzd2l0Y2ggKGRlY2xhcmF0aW9uT3JpZ2luKSB7CisgICAgY2Fz
ZSBEZWNsYXJhdGlvbk9yaWdpbjo6VXNlckFnZW50OgorICAgICAgICBtX3Jlc3VsdC51c2VyQWdl
bnREZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobWF0Y2hlZFByb3BlcnRpZXMpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEZWNsYXJhdGlvbk9yaWdpbjo6VXNlcjoKKyAgICAgICAgbV9y
ZXN1bHQudXNlckRlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShtYXRjaGVkUHJvcGVydGllcykp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlY2xhcmF0aW9uT3JpZ2luOjpBdXRob3I6Cisg
ICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShtYXRjaGVk
UHJvcGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKaW5kZXgg
MWRkYmZlYTljM2EuLjVlNTM1MzE4YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2
YWx1YXRvci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNiwx
MiArMzYsNDAgQEAgY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0
b3JGaWx0ZXI7CiAKK2NsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7CitwdWJsaWM6CisgICAgUHNl
dWRvU3R5bGVSZXF1ZXN0KFBzZXVkb0lkIHBzZXVkb0lkLCBPcHRpb25hbDxTdHlsZVNjcm9sbGJh
clN0YXRlPiBzY3JvbGxiYXJTdGF0ZSA9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgOiBwc2V1ZG9J
ZChwc2V1ZG9JZCkKKyAgICAgICAgLCBzY3JvbGxiYXJTdGF0ZShzY3JvbGxiYXJTdGF0ZSkKKyAg
ICB7CisgICAgfQorCisgICAgUHNldWRvSWQgcHNldWRvSWQ7CisgICAgT3B0aW9uYWw8U3R5bGVT
Y3JvbGxiYXJTdGF0ZT4gc2Nyb2xsYmFyU3RhdGU7Cit9OworCiBzdHJ1Y3QgTWF0Y2hlZFJ1bGUg
ewogICAgIGNvbnN0IFJ1bGVEYXRhKiBydWxlRGF0YTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0
eTsgICAKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTsKICAgICBTdHlsZTo6U2NvcGVPcmRpbmFs
IHN0eWxlU2NvcGVPcmRpbmFsOwogfTsKIAorc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzIHsKKyAg
ICBSZWZQdHI8Y29uc3QgU3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzOworICAgIHVpbnQxNl90
IGxpbmtNYXRjaFR5cGUgeyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsIH07CisgICAgdWludDE2
X3Qgd2hpdGVsaXN0VHlwZSB7IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSB9OworICAgIFN0eWxlOjpT
Y29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwgeyBTdHlsZTo6U2NvcGVPcmRpbmFsOjpFbGVt
ZW50IH07Cit9OworCitzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgIGJvb2wgaXNDYWNoZWFibGUg
eyB0cnVlIH07CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCAzMj4gdXNlckFnZW50RGVj
bGFyYXRpb25zOworICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgMzI+IHVzZXJEZWNsYXJh
dGlvbnM7CisgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzLCAzMj4gYXV0aG9yRGVjbGFyYXRp
b25zOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gdXNlckFnZW50RGVjbGFy
YXRpb25zLmlzRW1wdHkoKSAmJiB1c2VyRGVjbGFyYXRpb25zLmlzRW1wdHkoKSAmJiBhdXRob3JE
ZWNsYXJhdGlvbnMuaXNFbXB0eSgpOyB9Cit9OworCiBjbGFzcyBFbGVtZW50UnVsZUNvbGxlY3Rv
ciB7CiBwdWJsaWM6CiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IoY29uc3QgRWxlbWVudCYsIGNv
bnN0IERvY3VtZW50UnVsZVNldHMmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOwpAQCAtNjIsNyAr
OTAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0FueU1hdGNoaW5nUnVsZXMoY29uc3QgUnVs
ZVNldCopOwogCi0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmIG1hdGNoZWRSZXN1bHQo
KTsKKyAgICBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQoKSBjb25zdDsKICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZUxpc3QoKSBjb25zdDsKIAog
ICAgIHZvaWQgY2xlYXJNYXRjaGVkUnVsZXMoKTsKQEAgLTk0LDExICsxMjIsMTIgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwogCi0gICAgZW51bSBjbGFzcyBEZWNs
YXJhdGlvbk9yaWdpbiB7IFVzZXJBZ2VudCwgQXV0aG9yLCBVc2VyIH07CisgICAgZW51bSBjbGFz
cyBEZWNsYXJhdGlvbk9yaWdpbiB7IFVzZXJBZ2VudCwgVXNlciwgQXV0aG9yIH07CiAgICAgdm9p
ZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoRGVjbGFyYXRpb25PcmlnaW4pOwogICAgIHZv
aWQgdHJhbnNmZXJNYXRjaGVkUnVsZXMoRGVjbGFyYXRpb25PcmlnaW4sIE9wdGlvbmFsPFN0eWxl
OjpTY29wZU9yZGluYWw+IGZvclNjb3BlID0geyB9KTsKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1
bGUoY29uc3QgUnVsZURhdGEmLCB1bnNpZ25lZCBzcGVjaWZpY2l0eSwgU3R5bGU6OlNjb3BlT3Jk
aW5hbCk7CisgICAgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaGVkUHJvcGVydGllcyYm
LCBEZWNsYXJhdGlvbk9yaWdpbik7CiAKICAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAKQEAgLTEyMyw5ICsxNTIsMTkgQEAgcHJp
dmF0ZToKICAgICAvLyBPdXRwdXQuCiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBtX21h
dGNoZWRSdWxlTGlzdDsKICAgICBib29sIG1fZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yIHsgZmFsc2UgfTsKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCBtX3Jlc3VsdDsK
KyAgICBNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKICAgICBTdHlsZTo6UmVsYXRpb25zIG1fc3R5bGVS
ZWxhdGlvbnM7CiAgICAgUHNldWRvSWRTZXQgbV9tYXRjaGVkUHNldWRvRWxlbWVudElkczsKIH07
CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiBhLnByb3BlcnRpZXMgPT0g
Yi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdl
UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3Iu
Y3BwCmluZGV4IGEyODQ1MGE4ZmFjLi4wNzQ4M2RmNmNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgUGFnZVJ1bGVDb2xs
ZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGCiAgICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1h
dGNoZWRQYWdlUnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1f
cmVzdWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRp
ZXMoKSk7CisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAmbWF0
Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVj
a1BhZ2VTZWxlY3RvckNvbXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oCmluZGV4IDc4Mzk4NzE2MmIwLi5jZTQ2
ZDFjMTBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmgKQEAgLTM2LDcg
KzM2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fcnVsZVNldHMocnVsZVNldHMpIHsgfQogCiAg
ICAgdm9pZCBtYXRjaEFsbFBhZ2VSdWxlcyhpbnQgcGFnZUluZGV4KTsKLSAgICBTdHlsZVJlc29s
dmVyOjpNYXRjaFJlc3VsdCYgbWF0Y2hlZFJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9Cisg
ICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1
bHQ7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3Q7CkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIG1fc3RhdGU7CiAgICAgRG9jdW1lbnRSdWxlU2V0cyYgbV9ydWxlU2V0czsKIAotICAg
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0IG1fcmVzdWx0OworICAgIE1hdGNoUmVzdWx0IG1f
cmVzdWx0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IGM1ZjFiYzNlMDQ2Li4xNTQzNGEwY2U3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTE5LDcgKzExOSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGZpcnN0TG93UHJpb3Jp
dHlQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSArIDEpOwogCi1zdGF0aWMgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01v
ZGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCYs
IFRleHREaXJlY3Rpb24mLCBXcml0aW5nTW9kZSYpOworc3RhdGljIHZvaWQgZXh0cmFjdERpcmVj
dGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgTWF0Y2hSZXN1bHQm
LCBUZXh0RGlyZWN0aW9uJiwgV3JpdGluZ01vZGUmKTsKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCiB7CkBAIC0xMzksNTQgKzEz
OSw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcigpCiAgICAgbV9j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVs
aXN0VHlwZSwgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkKLXsKLSAgICBt
X21hdGNoZWRQcm9wZXJ0aWVzLmdyb3cobV9tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsK
LSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9IG1f
bWF0Y2hlZFByb3BlcnRpZXMubGFzdCgpOwotICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9
IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzKj4oJnByb3BlcnRpZXMpOwotICAgIG5ld1Byb3Bl
cnRpZXMubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Ci0gICAgbmV3UHJvcGVydGllcy53
aGl0ZWxpc3RUeXBlID0gcHJvcGVydHlXaGl0ZWxpc3RUeXBlOwotICAgIG5ld1Byb3BlcnRpZXMu
c3R5bGVTY29wZU9yZGluYWwgPSBzdHlsZVNjb3BlT3JkaW5hbDsKLSAgICBtYXRjaGVkUnVsZXMu
YXBwZW5kKHJ1bGUpOwotCi0gICAgaWYgKHN0eWxlU2NvcGVPcmRpbmFsICE9IFN0eWxlOjpTY29w
ZU9yZGluYWw6OkVsZW1lbnQpCi0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0KLSAgICBp
ZiAoaXNDYWNoZWFibGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSBw
cm9wZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IC8vIEN1cnJlbnRseSB0aGUgcHJvcGVydHkgY2FjaGUgb25seSBjb3B5IHRoZSBub24taW5oZXJp
dGVkIHZhbHVlcyBhbmQgcmVzb2x2ZQotICAgICAgICAgICAgLy8gdGhlIGluaGVyaXRlZCBvbmVz
LgotICAgICAgICAgICAgLy8gSGVyZSB3ZSBkZWZpbmUgc29tZSBleGNlcHRpb24gd2VyZSB3ZSBo
YXZlIHRvIHJlc29sdmUgc29tZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBpbmhlcml0ZWQKLSAg
ICAgICAgICAgIC8vIGJ5IGRlZmF1bHQuIElmIHRob3NlIGV4Y2VwdGlvbnMgYmVjb21lIHRvbyBj
b21tb24gb24gdGhlIHdlYiwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlCi0gICAgICAgICAgICAvLyB0
byBidWlsZCBhIGxpc3Qgb2YgZXhjZXB0aW9uIHRvIHJlc29sdmUgaW5zdGVhZCBvZiBjb21wbGV0
ZWx5IGRpc2FibGluZyB0aGUgY2FjaGUuCi0KLSAgICAgICAgICAgIFN0eWxlUHJvcGVydGllczo6
UHJvcGVydHlSZWZlcmVuY2UgY3VycmVudCA9IHByb3BlcnRpZXMucHJvcGVydHlBdChpKTsKLSAg
ICAgICAgICAgIGlmICghY3VycmVudC5pc0luaGVyaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGV4cGxpY2l0bHkgaW5oZXJpdGVkLCB3ZSBuZWVk
IHRvIGFwcGx5IGZ1cnRoZXIgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAg
ICAgLy8gYXMgdGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUgaW5oZXJpdGVkIGhlcmUuIEZv
ciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlvbnMgd2l0aAotICAgICAgICAg
ICAgICAgIC8vIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgot
ICAgICAgICAgICAgICAgIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSA9ICpjdXJyZW50LnZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW5oZXJpdGVkVmFsdWUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUg
Y3VycmVudENvbG9yIGhhcyBpbXBsaWNpdGVseSB0aGUgc2FtZSBzaWRlIGVmZmVjdC4gSXQgZGVw
ZW5kcyBvbiB0aGUgdmFsdWUgb2YgY29sb3IsCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMg
YW4gaW5oZXJpdGVkIHZhbHVlLCBtYWtpbmcgdGhlIG5vbi1pbmhlcml0ZWQgcHJvcGVydHkgaW1w
bGljaXRseSBpbmhlcml0ZWQuCi0gICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDYWNo
ZWFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQogU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgOiBtX3J1bGVTZXRzKCp0aGlzKQogICAgICwgbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlU3dlZXBUaW1lcigqdGhpcywgJlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSkKQEAgLTI3NSwyMCArMjI3LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKCkKICAgICAvLyBMb29rIGZvciBjYWNoZSBlbnRy
aWVzIGNvbnRhaW5pbmcgYSBzdHlsZSBkZWNsYXJhdGlvbiB3aXRoIGEgc2luZ2xlIHJlZiBhbmQg
cmVtb3ZlIHRoZW0uCiAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4gZWxlbWVudCBhdHRy
aWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlubGluZVN0eWxlKCkK
ICAgICAvLyBvciBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3RlbnRpYWxseSBsZWF2
aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBvbmUuCi0gICAgVmVj
dG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6
aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKLSAgICBNYXRj
aGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBWZWN0b3I8
TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5tYXRjaGVk
UHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVkUHJvcGVy
dGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzW2ld
LnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBw
ZW5kKGl0LT5rZXkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAg
IGF1dG8gaGFzT25lUmVmID0gW10oYXV0byYgZGVjbGFyYXRpb25zKSB7CisgICAgICAgIGZvciAo
YXV0byYgbWF0Y2hlZFByb3BlcnRpZXMgOiBkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisKKyAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlSWYoWyZdKGF1dG8mIGtleVZh
bHVlKSB7CisgICAgICAgIGF1dG8mIGVudHJ5ID0ga2V5VmFsdWUudmFsdWU7CisgICAgICAgIHJl
dHVybiBoYXNPbmVSZWYoZW50cnkudXNlckFnZW50RGVjbGFyYXRpb25zKSB8fCBoYXNPbmVSZWYo
ZW50cnkudXNlckRlY2xhcmF0aW9ucykgfHwgaGFzT25lUmVmKGVudHJ5LmF1dGhvckRlY2xhcmF0
aW9ucyk7CisgICAgfSk7CiAKICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNT
aW5jZUxhc3RTd2VlcCA9IDA7CiB9CkBAIC0zODksNyArMzM5LDcgQEAgRWxlbWVudFN0eWxlIFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBSZW5kZXIKIAogICAgIGF1dG8gZWxlbWVudFN0eWxlUmVsYXRpb25zID0gU3R5bGU6OmNvbW1p
dFJlbGF0aW9uc1RvUmVuZGVyU3R5bGUoc3R5bGUsIGVsZW1lbnQsIGNvbGxlY3Rvci5zdHlsZVJl
bGF0aW9ucygpKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNo
ZWRSZXN1bHQoKSwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0
b3IubWF0Y2hSZXN1bHQoKSwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUg
b2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBz
KS4KICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3RhdGUuc3R5bGUoKSwgKnN0YXRlLnBhcmVudFN0
eWxlKCksIHBhcmVudEJveFN0eWxlLCAmZWxlbWVudCk7CkBAIC00MDcsNyArMzU3LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1l
KGNvbnN0IFJlbmRlclN0eWxlKgogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAK
ICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Ci0gICAgcmVzdWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVz
KGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOworICAgIHJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMu
YXBwZW5kKHsgJmtleWZyYW1lLT5wcm9wZXJ0aWVzKCkgfSk7CiAKICAgICBBU1NFUlQoIW1fc3Rh
dGUuc3R5bGUoKSk7CiAKQEAgLTQyNCw3ICszNzQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUq
CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0
aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92
ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KICAgICBDYXNjYWRlZFBy
b3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFk
ZE5vcm1hbE1hdGNoZXMocmVzdWx0LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXpl
KCkgLSAxKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2
ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5
U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAgIGFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSwgYXBwbHlT
dGF0ZSk7CkBAIC01OTAsMTIgKzU0MCwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JgogCiAg
ICAgQVNTRVJUKCFjb2xsZWN0b3IubWF0Y2hlZFBzZXVkb0VsZW1lbnRJZHMoKSk7CiAKLSAgICBp
ZiAoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKS5tYXRjaGVkUHJvcGVydGllcygpLmlzRW1wdHko
KSkKKyAgICBpZiAoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG9T
dHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xs
ZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVw
IG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBv
dGhlciBmaXh1cHMpLgogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpLCBudWxscHRyLCBudWxscHRyKTsKQEAgLTYyMywxNCArNTczLDE0
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgUGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKG1fc3Rh
dGUsIG1fcnVsZVNldHMpOwogICAgIGNvbGxlY3Rvci5tYXRjaEFsbFBhZ2VSdWxlcyhwYWdlSW5k
ZXgpOwogCi0gICAgTWF0Y2hSZXN1bHQmIHJlc3VsdCA9IGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0
KCk7CisgICAgYXV0byYgcmVzdWx0ID0gY29sbGVjdG9yLm1hdGNoUmVzdWx0KCk7CiAKICAgICBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgICBXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsKICAg
ICBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKm1fc3RhdGUuc3R5bGUoKSwgcmVzdWx0
LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKIAogICAgIENhc2NhZGVkUHJvcGVydGllcyBjYXNj
YWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hl
cyhyZXN1bHQsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcygpLnNpemUoKSAtIDEpOworICAg
IGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhyZXN1bHQsIENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2
ZWwpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMs
ICZjYXNjYWRlLCAmcmVzdWx0IH07CiAgICAgYXBwbHlDYXNjYWRlZFByb3BlcnRpZXMoZmlyc3RD
U1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRlKTsKQEAgLTEz
MTksMzQgKzEyNjksMTEgQEAgc3RhdGljIGJvb2wgZWxlbWVudFR5cGVIYXNBcHBlYXJhbmNlRnJv
bVVBU3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgfHwgbG9jYWxOYW1lID09
IEhUTUxOYW1lczo6bWV0ZXJUYWc7CiB9CiAKLXVuc2lnbmVkIFN0eWxlUmVzb2x2ZXI6OmNvbXB1
dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqIHByb3BlcnRp
ZXMsIHVuc2lnbmVkIHNpemUpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShwcm9wZXJ0aWVzLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogc2l6ZSk7Ci19Ci0KLWJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdlcyYgYSwgY29uc3Qg
U3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCi17Ci0gICAgcmV0dXJuIGEuZmlyc3RVQVJ1
bGUgPT0gYi5maXJzdFVBUnVsZQotICAgICAgICAmJiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0VUFS
dWxlCi0gICAgICAgICYmIGEuZmlyc3RBdXRob3JSdWxlID09IGIuZmlyc3RBdXRob3JSdWxlCi0g
ICAgICAgICYmIGEubGFzdEF1dGhvclJ1bGUgPT0gYi5sYXN0QXV0aG9yUnVsZQotICAgICAgICAm
JiBhLmZpcnN0VXNlclJ1bGUgPT0gYi5maXJzdFVzZXJSdWxlCi0gICAgICAgICYmIGEubGFzdFVz
ZXJSdWxlID09IGIubGFzdFVzZXJSdWxlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5
bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFu
Z2VzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShj
b25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNv
bHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCit1bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21w
dXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkK
IHsKLSAgICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIucHJvcGVydGllcyAmJiBhLmxpbmtNYXRj
aFR5cGUgPT0gYi5saW5rTWF0Y2hUeXBlOwotfQotCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5
bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1h
dGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7CisgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlv
bnMuZGF0YSgpLCBzaXplb2YoTWF0Y2hlZFByb3BlcnRpZXMpICogbWF0Y2hSZXN1bHQudXNlckFn
ZW50RGVjbGFyYXRpb25zLnNpemUoKSkKKyAgICAgICAgXiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkobWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9ucy5kYXRhKCksIHNpemVvZihNYXRjaGVkUHJv
cGVydGllcykgKiBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRpb25zLnNpemUoKSkKKyAgICAgICAg
XiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25z
LmRhdGEoKSwgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIG1hdGNoUmVzdWx0LmF1dGhvckRl
Y2xhcmF0aW9ucy5zaXplKCkpOwogfQogCiBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJv
cGVydGllc0NhY2hlSXRlbSogU3R5bGVSZXNvbHZlcjo6ZmluZEZyb21NYXRjaGVkUHJvcGVydGll
c0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKQEAg
LTEzNTYsMTcgKzEyODMsMTEgQEAgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFAKICAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5m
aW5kKGhhc2gpOwogICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVt
JiBjYWNoZUl0ZW0gPSBpdC0+dmFsdWU7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpOwotICAgIGlmIChzaXplICE9IGNhY2hlSXRlbS5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcygpW2ldICE9IGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllc1tp
XSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoY2FjaGVJdGVt
LnJhbmdlcyAhPSBtYXRjaFJlc3VsdC5yYW5nZXMpCisgICAgYXV0byYgY2FjaGVJdGVtID0gaXQt
PnZhbHVlOworICAgIGlmIChtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlvbnMgIT0gY2Fj
aGVJdGVtLnVzZXJBZ2VudERlY2xhcmF0aW9ucyB8fCBtYXRjaFJlc3VsdC51c2VyRGVjbGFyYXRp
b25zICE9IGNhY2hlSXRlbS51c2VyRGVjbGFyYXRpb25zIHx8IG1hdGNoUmVzdWx0LmF1dGhvckRl
Y2xhcmF0aW9ucyAhPSBjYWNoZUl0ZW0uYXV0aG9yRGVjbGFyYXRpb25zKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiAmY2FjaGVJdGVtOwogfQogCkBAIC0xNDIzLDcgKzEz
NDQsNyBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShj
b25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgVGV4dERp
cmVjdGlvbiYgZGlyZWN0aW9uLCBXcml0aW5nTW9kZSYgd3JpdGluZ01vZGUpCit2b2lkIGV4dHJh
Y3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgVGV4dERpcmVjdGlvbiYgZGlyZWN0aW9uLCBXcml0
aW5nTW9kZSYgd3JpdGluZ01vZGUpCiB7CiAgICAgZGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9u
KCk7CiAgICAgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwpAQCAtMTQzMSwyNiAr
MTM1MiwyOCBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogICAgIGJvb2wgaGFkSW1wb3J0YW50
V3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICBib29sIGhhZEltcG9ydGFudERpcmVjdGlvbiA9IGZh
bHNlOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBtYXRjaGVkUHJvcGVydGllcyA6IG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
Y291bnQgPSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIHByb3BlcnR5ID0gbWF0Y2hlZFByb3Bl
cnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsKLSAgICAgICAgICAgIGlmICghcHJvcGVy
dHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V3JpdGluZ01vZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRh
bnRXcml0aW5nTW9kZSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHdyaXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0
eS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V3JpdGluZ01vZGUg
PSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAg
ICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHkuaXNJbXBv
cnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBo
YWRJbXBvcnRhbnREaXJlY3Rpb24gPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOworICAgIGZvciAo
YXV0byogbWF0Y2hlZERlY2xhcmF0aW9ucyA6IHsgJm1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xh
cmF0aW9ucywgJm1hdGNoUmVzdWx0LnVzZXJEZWNsYXJhdGlvbnMsICZtYXRjaFJlc3VsdC5hdXRo
b3JEZWNsYXJhdGlvbnMgfSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hdGNoZWRQcm9w
ZXJ0aWVzIDogKm1hdGNoZWREZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGNvdW50ID0gbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHkg
PSBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOworICAgICAgICAg
ICAgICAgIGlmICghcHJvcGVydHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5
LmlkKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V3JpdGluZ01vZGUgPSBwcm9wZXJ0eS5pc0lt
cG9ydGFudCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3BlcnR5LmlzSW1w
b3J0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoYWRJbXBvcnRhbnREaXJlY3Rpb24gPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNDU5LDcgKzEzODIsNyBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXND
YWNoZSBzaG91bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlKQogewogICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7Ci0gICAgdW5zaWduZWQgY2FjaGVIYXNoID0gc2hvdWxkVXNlTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSAmJiBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVk
UHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5kYXRhKCksIG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCkuc2l6ZSgpKSA6IDA7CisgICAgdW5zaWduZWQg
Y2FjaGVIYXNoID0gc2hvdWxkVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSAmJiBtYXRjaFJlc3Vs
dC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQp
IDogMDsKICAgICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIGNvbnN0IE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSBudWxscHRyOwogICAgIGlmIChj
YWNoZUhhc2ggJiYgKGNhY2hlSXRlbSA9IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShj
YWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkKQEAgLTE0OTMsOCArMTQxNiw4IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIElmIHNvLCB3ZSBjYWNoZSB0aGUgYm9yZGVyIGFuZCBi
YWNrZ3JvdW5kIHN0eWxlcyBzbyB0aGF0IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZSgpCiAgICAg
ICAgIC8vIGNhbiBsb29rIGF0IHRoZW0gbGF0ZXIgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEg
c3R5bGVkIGZvcm0gY29udHJvbCBvciBub3QuCiAgICAgICAgIENhc2NhZGVkUHJvcGVydGllcyBj
YXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotICAgICAgICBjYXNjYWRlLmFkZE5vcm1h
bE1hdGNoZXMobWF0Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgICAg
IGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0
LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAg
ICAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZl
bDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAKICAgICAgICAgQXBwbHlD
YXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsICZjYXNjYWRlLCAmbWF0Y2hS
ZXN1bHQgfTsKIApAQCAtMTUyMCwxMCArMTQ0MywxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25z
dAogICAgIH0KIAogICAgIENhc2NhZGVkUHJvcGVydGllcyBjYXNjYWRlKGRpcmVjdGlvbiwgd3Jp
dGluZ01vZGUpOwotICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgMCwg
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMoKS5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RB
dXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50
TWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAg
Y2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2Fz
Y2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNj
YWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVs
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRj
aFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZl
bDo6QXV0aG9yTGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBv
cnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbCwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1
bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAK
ICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2Nh
ZGUsICZtYXRjaFJlc3VsdCB9OwogCkBAIC0xNzE5LDEwICsxNjQ0LDEwIEBAIFN0eWxlUmVzb2x2
ZXI6OkNhc2NhZGVkUHJvcGVydGllcyogU3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVz
Rm9yUm9sbGJhY2soCiAgICAgICAgIGF1dG8gbmV3QXV0aG9yUm9sbGJhY2sobWFrZVVuaXF1ZTxD
YXNjYWRlZFByb3BlcnRpZXM+KGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpKTsKIAogICAgICAgICAv
LyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlucyBVQSBydWxlcyBhbmQgdXNl
ciBydWxlcyBidXQgbm8gYXV0aG9yIHJ1bGVzLgotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+
YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGZh
bHNlKTsKLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0
Y2hSZXN1bHQsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5h
ZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7CisgICAgICAgIG5l
d0F1dGhvclJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2
ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CisgICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5h
ZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbCwgZmFs
c2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3QXV0
aG9yUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZl
bDo6VXNlckFnZW50TGV2ZWwsIGZhbHNlKTsKIAogICAgICAgICBzdGF0ZSgpLnNldEF1dGhvclJv
bGxiYWNrKG5ld0F1dGhvclJvbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIHN0YXRlKCkuYXV0aG9y
Um9sbGJhY2soKTsKQEAgLTE3MzYsOCArMTY2MSw4IEBAIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVk
UHJvcGVydGllcyogU3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2so
CiAgICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNrKG1ha2VVbmlxdWU8Q2FzY2FkZWRQcm9wZXJ0
aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CiAKICAgICAgICAgLy8gVGhpcyBzcGVjaWFs
IHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgb25seSBVQSBydWxlcy4KLSAgICAgICAgbmV3VXNl
clJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBmYWxzZSk7Ci0g
ICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSwgZmFsc2UpOworICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMo
bWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGZhbHNlKTsKKyAgICAg
ICAgbmV3VXNlclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNj
YWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBmYWxzZSk7CiAKICAgICAgICAgc3RhdGUoKS5zZXRV
c2VyUm9sbGJhY2sobmV3VXNlclJvbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIHN0YXRlKCkudXNl
clJvbGxiYWNrKCk7CkBAIC0yMjEwLDEwICsyMTM1LDYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVy
YXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpID0gZGVmYXVsdDsKLQotU3R5bGVSZXNvbHZl
cjo6TWF0Y2hlZFByb3BlcnRpZXM6On5NYXRjaGVkUHJvcGVydGllcygpID0gZGVmYXVsdDsKLQog
U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpDYXNjYWRlZFByb3BlcnRpZXMoVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogICAgIDogbV9k
aXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICwgbV93cml0aW5nTW9kZSh3cml0aW5nTW9kZSkKQEAg
LTIyOTksMjIgKzIyMjAsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRp
ZXM6OnNldERlZmVycmVkKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJgogICAgIG1fZGVmZXJy
ZWRQcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7CiB9CiAKLXN0YXRpYyBDYXNjYWRlTGV2ZWwg
Y2FzY2FkZUxldmVsRm9ySW5kZXgoY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSAmJiBpbmRleCA8PSBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSkKLSAgICAgICAgcmV0dXJuIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWw7Ci0gICAgaWYg
KGluZGV4ID49IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlICYmIGluZGV4IDw9IG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUpCi0gICAgICAgIHJldHVybiBDYXNjYWRlTGV2
ZWw6OlVzZXJMZXZlbDsKLSAgICByZXR1cm4gQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbDsKLX0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1hdGNoKGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgaXNJbXBvcnRh
bnQsIGJvb2wgaW5oZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRp
ZXMsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5o
ZXJpdGVkT25seSkKIHsKLSAgICBhdXRvJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzKClbaW5kZXhdOwogICAgIGF1dG8mIHN0eWxlUHJvcGVydGllcyA9
ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwotCiAgICAgYXV0byBwcm9wZXJ0eVdoaXRl
bGlzdFR5cGUgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9w
ZXJ0aWVzLndoaXRlbGlzdFR5cGUpOwotICAgIGF1dG8gY2FzY2FkZUxldmVsID0gY2FzY2FkZUxl
dmVsRm9ySW5kZXgobWF0Y2hSZXN1bHQsIGluZGV4KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDAsIGNvdW50ID0gc3R5bGVQcm9wZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgYXV0byBjdXJyZW50ID0gc3R5bGVQcm9wZXJ0aWVzLnByb3BlcnR5QXQo
aSk7CkBAIC0yMzQyLDEzICsyMjUyLDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQ
cm9wZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsCiAgICAg
fQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTm9ybWFs
TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGludCBzdGFydEluZGV4LCBp
bnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKKworc3RhdGljIGF1dG8mIGRlY2xhcmF0
aW9uc0ZvckNhc2NhZGVMZXZlbChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2Nh
ZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCiB7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCi0gICAg
ICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGNhc2NhZGVMZXZlbCkgeworICAgIGNhc2UgQ2FzY2Fk
ZUxldmVsOjpVc2VyQWdlbnRMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVzZXJBZ2VudERlY2xh
cmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6VXNlckxldmVsOiByZXR1cm4gbWF0Y2hS
ZXN1bHQudXNlckRlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2
ZWw6IHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7CisgICAgfQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJh
dGlvbnM7Cit9CiAKLSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsg
KytpKQotICAgICAgICBhZGRNYXRjaChtYXRjaFJlc3VsdCwgaSwgZmFsc2UsIGluaGVyaXRlZE9u
bHkpOwordm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE5vcm1hbE1h
dGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2Fk
ZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCit7CisgICAgZm9yIChhdXRvJiBtYXRjaGVkRGVj
bGFyYXRpb25zIDogZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVzdWx0LCBjYXNj
YWRlTGV2ZWwpKQorICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zLCBjYXNjYWRl
TGV2ZWwsIGZhbHNlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIAogc3RhdGljIGJvb2wgaGFzSW1wb3J0
YW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMpCkBAIC0yMzYw
LDIwICsyMjc5LDE5IEBAIHN0YXRpYyBib29sIGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMo
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZElu
ZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllczo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKLSAg
ICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc3RydWN0IElu
ZGV4QW5kT3JkaW5hbCB7Ci0gICAgICAgIGludCBpbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXg7CiAgICAgICAgIFN0eWxlOjpTY29wZU9yZGluYWwgb3JkaW5hbDsKICAgICB9OwogICAgIFZl
Y3RvcjxJbmRleEFuZE9yZGluYWw+IGltcG9ydGFudE1hdGNoZXM7CiAgICAgYm9vbCBoYXNNYXRj
aGVzRnJvbU90aGVyU2NvcGVzID0gZmFsc2U7CiAKLSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRl
eDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
JiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKClbaV07
CisgICAgYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVM
ZXZlbChtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXRjaGVkRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoZWREZWNsYXJhdGlv
bnNbaV07CiAKICAgICAgICAgaWYgKCFoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKCptYXRjaGVkUHJv
cGVydGllcy5wcm9wZXJ0aWVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjM5Niw3ICsy
MzE0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9y
dGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG0KICAgICB9CiAKICAgICBmb3IgKGF1dG8m
IG1hdGNoIDogaW1wb3J0YW50TWF0Y2hlcykKLSAgICAgICAgYWRkTWF0Y2gobWF0Y2hSZXN1bHQs
IG1hdGNoLmluZGV4LCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYWRkTWF0Y2gobWF0
Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5pbmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSwgaW5oZXJp
dGVkT25seSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
cHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiByZXNvbHZlciwgQXBwbHlDYXNj
YWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aAppbmRleCA1Mjk0MWJhNmJkMy4uOTA1ZDJhMzhkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEuaCIKICNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRS
dWxlU2V0cy5oIgorI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtOTksMTggKzEwMCw2IEBAIGVudW0gY2xh
c3MgQ2FzY2FkZUxldmVsOiB1aW50OF90IHsKICAgICBVc2VyTGV2ZWwKIH07CiAKLWNsYXNzIFBz
ZXVkb1N0eWxlUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgUHNldWRvU3R5bGVSZXF1ZXN0KFBzZXVk
b0lkIHBzZXVkb0lkLCBPcHRpb25hbDxTdHlsZVNjcm9sbGJhclN0YXRlPiBzY3JvbGxiYXJTdGF0
ZSA9IFdURjo6bnVsbG9wdCkKLSAgICAgICAgOiBwc2V1ZG9JZChwc2V1ZG9JZCkKLSAgICAgICAg
LCBzY3JvbGxiYXJTdGF0ZShzY3JvbGxiYXJTdGF0ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUHNl
dWRvSWQgcHNldWRvSWQ7Ci0gICAgT3B0aW9uYWw8U3R5bGVTY3JvbGxiYXJTdGF0ZT4gc2Nyb2xs
YmFyU3RhdGU7Ci19OwotCiBzdHJ1Y3QgRWxlbWVudFN0eWxlIHsKICAgICBFbGVtZW50U3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFN0eWxlOjpSZWxhdGlvbnM+IHJlbGF0aW9ucyA9IHsgfSkKICAgICAgICAgOiByZW5kZXJTdHls
ZShXVEZNb3ZlKHJlbmRlclN0eWxlKSkKQEAgLTE3NSw4ICsxNjQsNiBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChjb25z
dCBFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1w
dHlDU1NSdWxlcyk7CiAKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQ7Ci0KICAgICB2
b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIApAQCAtMjIxLDQ4ICsyMDgsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhckNhY2hlZFByb3BlcnRpZXNBZmZlY3RlZEJ5Vmlld3BvcnRV
bml0cygpOwogCiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVl
JiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKLQotICAgIHN0cnVj
dCBSdWxlUmFuZ2UgewotICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50
JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVs
ZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQotICAgICAgICBpbnQmIGZpcnN0UnVsZUluZGV4Owot
ICAgICAgICBpbnQmIGxhc3RSdWxlSW5kZXg7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBNYXRjaFJh
bmdlcyB7Ci0gICAgICAgIE1hdGNoUmFuZ2VzKCkgOiBmaXJzdFVBUnVsZSgtMSksIGxhc3RVQVJ1
bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0QXV0aG9yUnVsZSgtMSksIGZpcnN0VXNl
clJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpIHsgfQotICAgICAgICBpbnQgZmlyc3RVQVJ1bGU7
Ci0gICAgICAgIGludCBsYXN0VUFSdWxlOwotICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlOwot
ICAgICAgICBpbnQgbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgIGludCBmaXJzdFVzZXJSdWxlOwot
ICAgICAgICBpbnQgbGFzdFVzZXJSdWxlOwotICAgICAgICBSdWxlUmFuZ2UgVUFSdWxlUmFuZ2Uo
KSB7IHJldHVybiBSdWxlUmFuZ2UoZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOyB9Ci0gICAgICAg
IFJ1bGVSYW5nZSBhdXRob3JSdWxlUmFuZ2UoKSB7IHJldHVybiBSdWxlUmFuZ2UoZmlyc3RBdXRo
b3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7IH0KLSAgICAgICAgUnVsZVJhbmdlIHVzZXJSdWxlUmFu
Z2UoKSB7IHJldHVybiBSdWxlUmFuZ2UoZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsgfQot
ICAgIH07Ci0KLSAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXMgewotICAgICAgICBNYXRjaGVk
UHJvcGVydGllcygpOwotICAgICAgICB+TWF0Y2hlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgCi0g
ICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXM7Ci0gICAgICAgIHVpbnQx
Nl90IGxpbmtNYXRjaFR5cGU7Ci0gICAgICAgIHVpbnQxNl90IHdoaXRlbGlzdFR5cGU7Ci0gICAg
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBNYXRjaFJlc3VsdCB7Ci0gICAgICAgIE1hdGNoUmVzdWx0KCkgOiBpc0NhY2hlYWJs
ZSh0cnVlKSB7IH0KLSAgICAgICAgVmVjdG9yPFN0eWxlUnVsZSosIDY0PiBtYXRjaGVkUnVsZXM7
Ci0gICAgICAgIE1hdGNoUmFuZ2VzIHJhbmdlczsKLSAgICAgICAgYm9vbCBpc0NhY2hlYWJsZTsK
LQotICAgICAgICBjb25zdCBWZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXMsIDY0PiYgbWF0Y2hlZFBy
b3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX21hdGNoZWRQcm9wZXJ0aWVzOyB9Ci0KLSAgICAg
ICAgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMmLCBTdHls
ZVJ1bGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9u
ZSwgU3R5bGU6OlNjb3BlT3JkaW5hbCA9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpOwot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcywgNjQ+IG1fbWF0
Y2hlZFByb3BlcnRpZXM7Ci0gICAgfTsKICAgICAKICAgICBjbGFzcyBDYXNjYWRlZFByb3BlcnRp
ZXMgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTI4MSw4ICsyMjYsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7
CiAgICAgICAgIFByb3BlcnR5JiBwcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKIAotICAgICAgICB2
b2lkIGFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQg
YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIGludCBzdGFydEluZGV4LCBp
bnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBh
ZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBib29sIGlu
aGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgYWRkSW1wb3J0YW50TWF0Y2hlcyhj
b25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFs
c2UpOwogCiAgICAgICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZl
ciYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CiAKQEAgLTI5MSw3ICsyMzYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFByb3BlcnR5IGN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0
IE1hdGNoUmVzdWx0JiwgdW5zaWduZWQgaW5kZXgsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5o
ZXJpdGVkT25seSk7CisgICAgICAgIHZvaWQgYWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSk7
CiAgICAgICAgIHZvaWQgc2V0KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlu
a01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsKICAgICAgICAg
dm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtN
YXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7CiAgICAgICAgIHN0
YXRpYyB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkmLCBDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNj
b3BlT3JkaW5hbCk7CkBAIC0zMzUsMTQgKzI4MCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNh
c2NhZGVNYXRjaGVzKENhc2NhZGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9v
bCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSk7CiAKLSAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKE1hdGNoUmVzdWx0JiwgUnVsZVNldCos
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSk7Ci0gICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2Uq
PiYgbWF0Y2hlZFJ1bGVzLCBjb25zdCBWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiwgYm9vbCBpc0xl
ZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKLQotICAg
IGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBib29sIGlzUmlnaHRQ
YWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7
IH0KLSAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgIFN0cmlu
ZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLQogICAgIERvY3VtZW50UnVsZVNldHMg
bV9ydWxlU2V0czsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIFJlZlB0
cjxTdHlsZVJ1bGVLZXlmcmFtZXM+PiBLZXlmcmFtZXNSdWxlTWFwOwpAQCAtNDc3LDIwICs0MTQs
MjIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOwogCi0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVy
dGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25lZCBzaXplKTsKKyAgICBz
dGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJl
c3VsdCYpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7Ci0gICAgICAg
IFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gbWF0Y2hlZFByb3BlcnRpZXM7Ci0gICAgICAgIE1h
dGNoUmFuZ2VzIHJhbmdlczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiB1c2Vy
QWdlbnREZWNsYXJhdGlvbnM7CisgICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4gdXNl
ckRlY2xhcmF0aW9uczsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiBhdXRob3JE
ZWNsYXJhdGlvbnM7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVuZGVy
U3R5bGU7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcGFyZW50UmVuZGVy
U3R5bGU7CiAgICAgICAgIAogICAgICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbShjb25z
dCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotICAgICAgICAgICAgOiByYW5nZXMobWF0Y2hS
ZXN1bHQucmFuZ2VzKQotICAgICAgICAgICAgLCByZW5kZXJTdHlsZShSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIoKnN0eWxlKSkKKyAgICAgICAgICAgIDogcmVuZGVyU3R5bGUoUmVuZGVyU3R5bGU6OmNs
b25lUHRyKCpzdHlsZSkpCiAgICAgICAgICAgICAsIHBhcmVudFJlbmRlclN0eWxlKFJlbmRlclN0
eWxlOjpjbG9uZVB0cigqcGFyZW50U3R5bGUpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBB
c3NpZ24gcmF0aGVyIHRoYW4gY29weS1jb25zdHJ1Y3Qgc28gd2Ugb25seSBhbGxvY2F0ZSBhcyBt
dWNoIHZlY3RvciBjYXBhY2l0eSBhcyBuZWVkZWQuCi0gICAgICAgICAgICBtYXRjaGVkUHJvcGVy
dGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICB1c2Vy
QWdlbnREZWNsYXJhdGlvbnMgPSBtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlvbnM7Cisg
ICAgICAgICAgICB1c2VyRGVjbGFyYXRpb25zID0gbWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9u
czsKKyAgICAgICAgICAgIGF1dGhvckRlY2xhcmF0aW9ucyA9IG1hdGNoUmVzdWx0LmF1dGhvckRl
Y2xhcmF0aW9uczsKICAgICAgICAgfQogICAgICAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRl
bSgpID0gZGVmYXVsdDsKICAgICB9OwpAQCAtNTMxLDExICs0NzAsNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgeyB0cnVlIH07CiAgICAgLy8gU2VlIGlm
IHdlIHN0aWxsIGhhdmUgY3Jhc2hlcyB3aGVyZSBTdHlsZVJlc29sdmVyIGdldHMgZGVsZXRlZCBl
YXJseS4KICAgICBib29sIG1faXNEZWxldGVkIHsgZmFsc2UgfTsKLQotICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYpOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOwotICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hSYW5nZXMmLCBjb25zdCBNYXRjaFJhbmdlcyYpOwog
fTsKIAogLy8gU3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVydGllcywgdG8ga2VlcCB0
cmFjayBvZiB3aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKQEAgLTU0Myw3ICs0NzcsNyBA
QCBwcml2YXRlOgogc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIHsKICAgICBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOwogICAgIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllcyogY2FzY2FkZTsKLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdCog
bWF0Y2hSZXN1bHQ7CisgICAgY29uc3QgTWF0Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OwogICAgIEJp
dG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9IHsgfTsKICAgICBIYXNo
U2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMgPSB7IH07CiAgICAgQml0bWFwPG51
bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>