<?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>212337</bug_id>
          
          <creation_ts>2020-05-24 13:41:58 -0700</creation_ts>
          <short_desc>Extended Color Cleanup: Use the name SimpleColor consistently</short_desc>
          <delta_ts>2020-05-25 11:31:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1655771</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 13:41:58 -0700</bug_when>
    <thetext>Extended Color Cleanup: Use the name SimpleColor consistently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655772</commentid>
    <comment_count>1</comment_count>
      <attachid>400177</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 13:49:31 -0700</bug_when>
    <thetext>Created attachment 400177
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655774</commentid>
    <comment_count>2</comment_count>
      <attachid>400179</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 14:17:21 -0700</bug_when>
    <thetext>Created attachment 400179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655775</commentid>
    <comment_count>3</comment_count>
      <attachid>400180</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 14:29:38 -0700</bug_when>
    <thetext>Created attachment 400180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655777</commentid>
    <comment_count>4</comment_count>
      <attachid>400182</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 16:46:09 -0700</bug_when>
    <thetext>Created attachment 400182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655781</commentid>
    <comment_count>5</comment_count>
      <attachid>400184</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 18:14:44 -0700</bug_when>
    <thetext>Created attachment 400184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655868</commentid>
    <comment_count>6</comment_count>
      <attachid>400184</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-05-25 08:49:00 -0700</bug_when>
    <thetext>Comment on attachment 400184
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +          the type it returns. Also took the opertunity to make it return

&quot;opertunity&quot;

&gt; Source/WebCore/ChangeLog:15
&gt; +          It made not real sense to keep it in Color.h

&quot;It made not&quot;

&gt; Source/WebCore/css/parser/CSSParserFastPaths.cpp:423
&gt; +        auto color = SimpleColor::parseHexColor(characters, length);

Can write this as

if (auto color = ...)
    return color;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655896</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-25 11:30:18 -0700</bug_when>
    <thetext>Committed r262128: &lt;https://trac.webkit.org/changeset/262128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655897</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-25 11:31:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/63602543&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400177</attachid>
            <date>2020-05-24 13:49:31 -0700</date>
            <delta_ts>2020-05-24 14:17:18 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-212337-20200524134930.patch</filename>
            <type>text/plain</type>
            <size>71488</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBjc3MvcGFy
c2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYXN0UGFyc2VD
b2xvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFy
c2VDb2xvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJH
QlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpwYXJzZUhTTFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUhleENvbG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0aW9u
SGlnaGxpZ2h0Lmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgor
ICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTaW1wbGVDb2xvclZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlmZmVyZW5jZVNxdWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OnNlcmlhbGl6ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNzc1RleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21w
b25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhleENvbG9y
SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnBhcnNlSGV4Q29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzRXh0ZW5kZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc09wYXF1ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFB
c0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1NlbWFudGljIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpzZXRJc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFzRXh0ZW5kZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzU2lt
cGxlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFNpbXBsZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0JsYWNrQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OnNldFJHQik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6cmdiIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZENvbG9yQ29tcG9uZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmJsZW5kUGl4ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnBpeGVsVmFsdWUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcDogUmVwbGFjZWQgd2l0aCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjptYWtl
UHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVbnByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21IU0xBKToK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21DTVlLQSk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUhleENvbG9ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Q29sb3I6OnBhcnNlSGV4Q29sb3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjptYWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpj
b2xvckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdC
QTMyRnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21I
U0xBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJvbUNNWUtBKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmZpbmROYW1lZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JS
ZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFyayBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JX
aXRoQWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlbWFu
dGljQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpleHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmJsZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91
dFByZW11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1Zh
bGlkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6IFJlcGxhY2VkIHdpdGggU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaC4KKyAgICAgICAgKFdlYkNvcmU6
OnJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9h
dFRvU2ltcGxlQ29sb3JCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmlzVmFsaWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzT3BhcXVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpp
c1Zpc2libGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wYXF1ZUNvbG9yIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1NlbWFudGljIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRSR0IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6cmdiIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojppc0JsYWNrQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hp
dGVDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlUkdCQSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBs
ZUNvbG9yRnJvbUNHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJH
QkFGcm9tQ0dDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJH
QkFGcm9tTlNDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9ySU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tVUlDb2xvcik6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVy
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhdHRlcm5Gb3JUb3VjaEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwYXR0
ZXJuRm9yRXZlbnRMaXN0ZW5lclJlZ2lvblR5cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVCYWNrZ3JvdW5kQ29sb3IpOgor
CiAyMDIwLTA1LTI0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMgZHVlIHRvIHVuaWZpZWQgc291cmNlcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhz
LmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXJGYXN0UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksMjAgKzQwOSwyMCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBDaGFyCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIENvbG9yIGZhc3RQYXJzZUNvbG9ySW50ZXJu
YWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29s
IHF1aXJrc01vZGUpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGZhc3RQYXJzZUNvbG9y
SW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBib29sIHF1aXJrc01vZGUpCiB7CiAgICAgQ1NTVW5pdFR5cGUgZXhwZWN0ID0gQ1NTVW5pdFR5
cGU6OkNTU19VTktOT1dOOwogCiAgICAgaWYgKGxlbmd0aCA+PSA0ICYmIGNoYXJhY3RlcnNbMF0g
PT0gJyMnKSB7Ci0gICAgICAgIFJHQkEzMiByZ2I7Ci0gICAgICAgIGlmIChDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSwgcmdiKSkKLSAgICAgICAgICAgIHJl
dHVybiBDb2xvcihyZ2IpOworICAgICAgICBhdXRvIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNl
SGV4Q29sb3IoY2hhcmFjdGVycyArIDEsIGxlbmd0aCAtIDEpOworICAgICAgICBpZiAoY29sb3Ip
CisgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgfQogCiAgICAgaWYgKHF1aXJrc01vZGUg
JiYgKGxlbmd0aCA9PSAzIHx8IGxlbmd0aCA9PSA2KSkgewotICAgICAgICBSR0JBMzIgcmdiOwot
ICAgICAgICBpZiAoQ29sb3I6OnBhcnNlSGV4Q29sb3IoY2hhcmFjdGVycywgbGVuZ3RoLCByZ2Ip
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKHJnYik7CisgICAgICAgIGF1dG8gY29sb3IgPSBT
aW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBp
ZiAoY29sb3IpCisgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgfQogCiAgICAgLy8gVHJ5
IHJnYmEoKSBzeW50YXguCkBAIC00MzUsMTYgKzQzNSwxNiBAQCBzdGF0aWMgQ29sb3IgZmFzdFBh
cnNlQ29sb3JJbnRlcm5hbChjb25zCiAgICAgICAgIGludCBhbHBoYTsKIAogICAgICAgICBpZiAo
IXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgcmVk
KSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQs
IGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9y
SW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGJsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICBpZiAoIXBhcnNlQWxwaGFWYWx1ZShjdXJyZW50LCBlbmQsICcpJywgYWxwaGEpKQot
ICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gQ29s
b3IoKTsKLSAgICAgICAgcmV0dXJuIENvbG9yKG1ha2VSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICB9CiAKICAgICAv
LyBUcnkgcmdiKCkgc3ludGF4LgpAQCAtNDU1LDE3ICs0NTUsMTcgQEAgc3RhdGljIENvbG9yIGZh
c3RQYXJzZUNvbG9ySW50ZXJuYWwoY29ucwogICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAgIGlu
dCBibHVlOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwg
ZW5kLCAnLCcsIGV4cGVjdCwgcmVkKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50
T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKLSAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBl
eHBlY3QsIGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgcmV0dXJuIENvbG9yKG1ha2VSR0IocmVkLCBn
cmVlbiwgYmx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gQ29sb3IoKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0cmlu
ZywgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHZhbHVlUG9vbCkKQEAg
LTQ4MSwxNCArNDgxLDE0IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpw
YXIKICAgICBib29sIHF1aXJrc01vZGUgPSBpc1F1aXJrc01vZGVCZWhhdmlvcihwYXJzZXJNb2Rl
KTsKIAogICAgIC8vIEZhc3QgcGF0aCBmb3IgaGV4IGNvbG9ycyBhbmQgcmdiKCkvcmdiYSgpIGNv
bG9ycwotICAgIENvbG9yIGNvbG9yOworICAgIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBjb2xvcjsK
ICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQogICAgICAgICBjb2xvciA9IGZhc3RQYXJzZUNvbG9y
SW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgcXVpcmtzTW9k
ZSk7CiAgICAgZWxzZQogICAgICAgICBjb2xvciA9IGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIHF1aXJrc01vZGUpOwotICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQorICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiB2YWx1ZVBvb2wuY3JlYXRlQ29sb3JWYWx1ZShjb2xvcik7CisgICAg
cmV0dXJuIHZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKCpjb2xvcik7CiB9CiAKIGJvb2wgQ1NT
UGFyc2VyRmFzdFBhdGhzOjppc1ZhbGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZUlEIHZhbHVlSUQsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyOSw3ICs1MjksNiBAQCBzdGF0aWMgaW50IGNsYW1wUkdCQ29tcG9uZW50
KGNvbnN0IENTU1ByCiBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgp
ID09IENTU1ZhbHVlUmdiIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVS
Z2JhKTsKLSAgICBDb2xvciByZXN1bHQ7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0g
Y29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bG9yUGFyYW1ldGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICBp
ZiAoIWNvbG9yUGFyYW1ldGVyKQpAQCAtNTg4LDEyICs1ODcsMTAgQEAgc3RhdGljIENvbG9yIHBh
cnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICBhbHBoYUNvbXBvbmVudCA9IHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZihjbGFtcFRvPGRvdWJsZT4oYWxwaGEsIDAuMCwgMS4wKSAqIDI1
NS4wZikpOwogICAgIH07CiAKLSAgICByZXN1bHQgPSBDb2xvcihtYWtlUkdCQShjb2xvckFycmF5
WzBdLCBjb2xvckFycmF5WzFdLCBjb2xvckFycmF5WzJdLCBhbHBoYUNvbXBvbmVudCkpOwotCiAg
ICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGNvbG9yQXJyYXlbMF0sIGNv
bG9yQXJyYXlbMV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KTsKIH0KIAogc3RhdGlj
IENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtNjQ1LDcgKzY0Miw3IEBAIHN0YXRpYyBDb2xv
ciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gQ29sb3IobWFrZVJHQkFGcm9tSFNM
QShzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYWxwaGEpKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9u
UGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTY5NSwxMSArNjkyLDEz
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKIAogc3RhdGljIENv
bG9yIHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0
UXVpcmt5Q29sb3JzKQogewotICAgIFJHQkEzMiByZXN1bHQ7CisgICAgU2ltcGxlQ29sb3IgcmVz
dWx0OwogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAg
ICBpZiAodG9rZW4udHlwZSgpID09IEhhc2hUb2tlbikgewotICAgICAgICBpZiAoIUNvbG9yOjpw
YXJzZUhleENvbG9yKHRva2VuLnZhbHVlKCksIHJlc3VsdCkpCisgICAgICAgIGF1dG8gc2ltcGxl
Q29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcih0b2tlbi52YWx1ZSgpKTsKKyAgICAg
ICAgaWYgKCFzaW1wbGVDb2xvcikKICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAg
ICByZXN1bHQgPSAqc2ltcGxlQ29sb3I7CiAgICAgfSBlbHNlIGlmIChhY2NlcHRRdWlya3lDb2xv
cnMpIHsKICAgICAgICAgU3RyaW5nIGNvbG9yOwogICAgICAgICBpZiAodG9rZW4udHlwZSgpID09
IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewpAQCAtNzE4
LDEzICs3MTcsMTUgQEAgc3RhdGljIENvbG9yIHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZQog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjb2xvci5sZW5ndGgoKTsKICAgICAgICAgaWYgKGxl
bmd0aCAhPSAzICYmIGxlbmd0aCAhPSA2KQogICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0g
ICAgICAgIGlmICghQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29sb3IsIHJlc3VsdCkpCisgICAgICAg
IGF1dG8gc2ltcGxlQ29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcih0b2tlbi52YWx1
ZSgpKTsKKyAgICAgICAgaWYgKCFzaW1wbGVDb2xvcikKICAgICAgICAgICAgIHJldHVybiBDb2xv
cigpOworICAgICAgICByZXN1bHQgPSAqc2ltcGxlQ29sb3I7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CiAgICAgfQogICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCk7Ci0gICAgcmV0dXJuIENvbG9yKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRpb25IaWdobGlnaHQuaAkocmV2aXNpb24gMjYyMTExKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw5ICszOSwxNSBAQCBzdHJ1Y3QgQ29tcG9zaXRpb25IaWdobGlnaHQgewog
ICAgIHsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIHsgMHgzQ0FGQzBF
MyB9OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRlZmF1bHRDb21w
b3NpdGlvbkZpbGxDb2xvciB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQgeyAwIH07CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0IHsgMCB9OwotICAgIENv
bG9yIGNvbG9yIHsgQ29sb3I6OmNvbXBvc2l0aW9uRmlsbCB9OworICAgIENvbG9yIGNvbG9yIHsg
ZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIH07CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiBkZWNvZGUoRGVjb2Rl
ciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjUsNyArNjI1LDcgQEAgTlNBcnJh
eSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91
bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgogICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIG92ZXJyaWRlTGlnaHRuZXNzID0gMC41OwogICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVyID0gMC4zODsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBDb2xvcihtYWtlUkdCQUZy
b21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVMaWdodG5lc3MsIG92ZXJyaWRlQWxwaGFN
dWx0aXBsaWVyICogYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHVuZGVy
bGluZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBvdmVy
cmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uQ29sb3IsIHVuZGVybGluZUNvbG9yLmNzc1RleHQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDExICs2OCwxMSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2ltcGxlQ29sb3IoU3RyaW5nVmll
CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NvbW1vbi1t
aWNyb3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctc2ltcGxlLWNvbG91ci12YWx1ZXMK
LXN0YXRpYyBPcHRpb25hbDxSR0JBMzI+IHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShTdHJpbmdWaWV3
IHN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VTaW1wbGVDb2xvclZh
bHVlKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIGlmICghaXNWYWxpZFNpbXBsZUNvbG9yKHN0
cmluZykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIG1ha2VSR0Io
dG9BU0NJSUhleFZhbHVlKHN0cmluZ1sxXSwgc3RyaW5nWzJdKSwgdG9BU0NJSUhleFZhbHVlKHN0
cmluZ1szXSwgc3RyaW5nWzRdKSwgdG9BU0NJSUhleFZhbHVlKHN0cmluZ1s1XSwgc3RyaW5nWzZd
KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzFd
LCBzdHJpbmdbMl0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzNdLCBzdHJpbmdbNF0pLCB0b0FT
Q0lJSGV4VmFsdWUoc3RyaW5nWzVdLCBzdHJpbmdbNl0pKTsKIH0KIAogQ29sb3JJbnB1dFR5cGU6
On5Db2xvcklucHV0VHlwZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGRI
VE1MTGVuZ3RoVG9TdHlsZShNCiAgICAgYWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKHN0eWxlLCBwcm9wZXJ0eUlELCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBSR0JBMzIgcGFy
c2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmluZyYgY29sb3JTdHJp
bmcpCitzdGF0aWMgU2ltcGxlQ29sb3IgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1
bGVzKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgLy8gUGVyIHNwZWMsIG9ubHkg
bG9vayBhdCB0aGUgZmlyc3QgMTI4IGRpZ2l0cyBvZiB0aGUgc3RyaW5nLgogICAgIGNvbnN0IHNp
emVfdCBtYXhDb2xvckxlbmd0aCA9IDEyODsKQEAgLTEwMDIsNyArMTAwMiw3IEBAIHN0YXRpYyBS
R0JBMzIgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUwKICAgICBkaWdpdEJ1ZmZlci5hcHBlbmQo
JzAnKTsKIAogICAgIGlmIChkaWdpdEJ1ZmZlci5zaXplKCkgPCA2KQotICAgICAgICByZXR1cm4g
bWFrZVJHQih0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMF0pLCB0b0FTQ0lJSGV4VmFsdWUo
ZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMl0pKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMF0p
LCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRC
dWZmZXJbMl0pKTsKIAogICAgIC8vIFNwbGl0IHRoZSBkaWdpdHMgaW50byB0aHJlZSBjb21wb25l
bnRzLCB0aGVuIHNlYXJjaCB0aGUgbGFzdCA4IGRpZ2l0cyBvZiBlYWNoIGNvbXBvbmVudC4KICAg
ICBBU1NFUlQoZGlnaXRCdWZmZXIuc2l6ZSgpID49IDYpOwpAQCAtMTAyNiw3ICsxMDI2LDcgQEAg
c3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TAogICAgIGludCByZWRWYWx1
ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltyZWRJbmRleF0sIGRpZ2l0QnVmZmVyW3Jl
ZEluZGV4ICsgMV0pOwogICAgIGludCBncmVlblZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0
QnVmZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsgMV0pOwogICAgIGlu
dCBibHVlVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbYmx1ZUluZGV4XSwgZGln
aXRCdWZmZXJbYmx1ZUluZGV4ICsgMV0pOwotICAgIHJldHVybiBtYWtlUkdCKHJlZFZhbHVlLCBn
cmVlblZhbHVlLCBibHVlVmFsdWUpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocmVkVmFs
dWUsIGdyZWVuVmFsdWUsIGJsdWVWYWx1ZSk7CiB9CiAKIC8vIENvbG9yIHBhcnNpbmcgdGhhdCBt
YXRjaGVzIEhUTUwncyAicnVsZXMgZm9yIHBhcnNpbmcgYSBsZWdhY3kgY29sb3IgdmFsdWUiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDb2xvclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkhhc2hUb29scy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KQEAgLTQwLDg3ICszOSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGxpZ2h0ZW5lZEJsYWNrIHsgMHhGRjU0NTQ1NCB9
Owogc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBkYXJrZW5lZFdoaXRlIHsgMHhGRkFCQUJB
QiB9OwogCi0vLyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VI
ZXhDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0
aCwgUkdCQTMyJiByZ2IpCi17Ci0gICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYm
IGxlbmd0aCAhPSA2ICYmIGxlbmd0aCAhPSA4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
dW5zaWduZWQgdmFsdWUgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPDw9IDQ7Ci0gICAgICAgIHZhbHVlIHw9
IHRvQVNDSUlIZXhWYWx1ZShuYW1lW2ldKTsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA2KSB7
Ci0gICAgICAgIHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDgpIHsKLSAgICAgICAgLy8gV2UgcGFyc2Vk
IHRoZSB2YWx1ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCi0gICAgICAg
IC8vIGV4cGVjdHMgdGhlbSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUg
ZWlnaHQgYml0cy4KLSAgICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNCkgewotICAg
ICAgICAvLyAjYWJjZCBjb252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCi0gICAgICAgIHJn
YiA9IHsgKHZhbHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKLSAgICAgICAg
ICAgIHwgKHZhbHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0Ci0gICAg
ICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCi0gICAgICAg
ICAgICB8ICh2YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCi0gICAg
cmdiID0geyAweEZGMDAwMDAwCi0gICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZh
bHVlICYgMHhGMDApIDw8IDgKLSAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVl
ICYgMHhGMCkgPDwgNAotICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4
RikgfTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihj
b25zdCBMQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICBy
ZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKLX0KLQotYm9v
bCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3Ro
LCBSR0JBMzImIHJnYikKLXsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUs
IGxlbmd0aCwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJp
bmcmIG5hbWUsIFJHQkEzMiYgcmdiKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVu
Z3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bmFtZS5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0
ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5h
bWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6
OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7
Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5n
dGgoKSwgcmdiKTsKLX0KLQogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwg
Y29uc3QgQ29sb3ImIGMyKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQg
dGhlIGNvbG9ycyBhcmUgaW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFu
eSBvZiB0aGUgY2FsbAogICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVz
IGJhc2VkIG9uIGZlZWwuIFdlJ2QgbmVlZCB0byBicmVhayBvdXQKICAgICAvLyBvdXIgbG9nYXJp
dGhtIHRhYmxlcyB0byBjaGFuZ2UgdGhlbSA6KQotICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5k
ZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVu
dCgpOwotICAgIGludCBjMUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgp
LmdyZWVuKCkgKiAyNTUgOiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMUJs
dWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEu
cmdiKCkuYmx1ZUNvbXBvbmVudCgpOwotICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/
IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOwot
ICAgIGludCBjMkdyZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVu
KCkgKiAyNTUgOiBjMi5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMkJsdWUgPSBj
Mi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCku
Ymx1ZUNvbXBvbmVudCgpOworICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFz
RXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLmFzU2ltcGxlQ29sb3IoKS5yZWRDb21wb25lbnQo
KTsKKyAgICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5n
cmVlbigpICogMjU1IDogYzEuYXNTaW1wbGVDb2xvcigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAg
aW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAy
NTUgOiBjMS5hc1NpbXBsZUNvbG9yKCkuYmx1ZUNvbXBvbmVudCgpOworICAgIGludCBjMlJlZCA9
IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLmFzU2lt
cGxlQ29sb3IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQgYzJHcmVlbiA9IGMyLmlzRXh0ZW5k
ZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuYXNTaW1wbGVDb2xvcigp
LmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMy
LmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5hc1NpbXBsZUNvbG9yKCkuYmx1ZUNvbXBv
bmVudCgpOwogICAgIGludCBkUiA9IGMxUmVkIC0gYzJSZWQ7CiAgICAgaW50IGRHID0gYzFHcmVl
biAtIGMyR3JlZW47CiAgICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOwpAQCAtMTQ2LDMwICs3
NiwyOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lCiBDb2xvcjo6
Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykgewot
ICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAgICAgIGJvb2wgdmFsaWQ7Ci0KKyAgICAgICAgT3B0
aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOwogICAgICAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAg
ICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBu
YW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xv
cjo6cGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0g
MSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1l
LmNoYXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKyAgICAgICAg
ICAgIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYo
KSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxKTsKIAotICAgICAgICBpZiAodmFsaWQpCi0gICAgICAg
ICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICBzZXRT
aW1wbGVDb2xvcigqY29sb3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhdXRvKiBmb3Vu
ZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAgICBzZXRSR0IoeyBmb3Vu
ZENvbG9yLT5BUkdCVmFsdWUgfSk7CisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5k
Q29sb3ItPkFSR0JWYWx1ZSB9KTsKICAgICB9CiB9CiAKIENvbG9yOjpDb2xvcihjb25zdCBjaGFy
KiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBTaW1wbGVDb2xv
ciBjb2xvcjsKLSAgICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVbMV0pLCBjb2xvcikpCi0gICAg
ICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBhdXRvIGNvbG9yID0gU2ltcGxlQ29sb3I6
OnBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwg
c3RkOjpzdHJsZW4oJm5hbWVbMV0pKTsKKyAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAg
c2V0U2ltcGxlQ29sb3IoKmNvbG9yKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIGZvdW5kQ29sb3Ig
PSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAgc2V0UkdCKHsgZm91bmRD
b2xvci0+QVJHQlZhbHVlIH0pOworICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3It
PkFSR0JWYWx1ZSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKQEAg
LTE5Miw4ICsxMjAsOCBAQCBDb2xvcjo6Q29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
CiBDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCi0gICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENv
bG9yIHBvaW50ZXIgYmVsb3cuCi0gICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKKyAg
ICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBi
ZWxvdy4KKyAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gMDsKICAgICBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwogICAgIEFT
U0VSVChpc0V4dGVuZGVkKCkpOwogfQpAQCAtMjIyLDcgKzE1MCw3IEBAIENvbG9yJiBDb2xvcjo6
b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29s
b3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOwotICAg
IG90aGVyLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisgICAg
b3RoZXIubV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xv
cjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTIzMSwyNiArMTU5LDI3IEBAIFN0cmluZyBD
b2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAg
ICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlh
bGl6YXRpb25Gb3JIVE1MKCk7CisgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0
aW9uRm9ySFRNTCgpOwogfQogCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAogewogICAg
IGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4dCgp
OwotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7CisgICAgcmV0dXJuIGFz
U2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7CiB9CiAKIFN0cmluZyBDb2xvcjo6
bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBIYW5kbGUg
ZXh0ZW5kZWQgY29sb3JzLgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dCgpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4
dGVuZGVkKCkuY3NzVGV4dCgpOworICAgIHJldHVybiBhc1NpbXBsZUNvbG9yKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgYXNTaW1wbGVDb2xv
cigpID09IGJsYWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAgICAgCiAgICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC0y
NzUsNyArMjA0LDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIENvbG9yIENvbG9yOjpk
YXJrKCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVl
ZC4KLSAgICBpZiAocmdiKCkgPT0gd2hpdGUpCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgYXNT
aW1wbGVDb2xvcigpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAg
ICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBm
KTsKQEAgLTMyNCw3ICsyNTMsNyBAQCBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNv
dXJjZSkgCiAgICAgaW50IGcgPSAoc2VsZkcgKiBzZWxmQSAqICgweEZGIC0gc291cmNlQSkgKyAw
eEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZB
ICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlQikgLyBkOwogCi0g
ICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CkBAIC0zNTQsNyArMjgzLDcgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QK
ICAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKICAgICAg
ICAgaW50IGIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKICAgICAgICAgCi0g
ICAgICAgIHJlc3VsdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0
ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGFscGhhKTsKIAogICAgICAgICBpZiAociA+PSAw
ICYmIGcgPj0gMCAmJiBiID49IDApCiAgICAgICAgICAgICBicmVhazsKQEAgLTM4OCw3ICszMTcs
NyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAgICAgLy8gRklY
TUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxw
aGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcuCiAgICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhh
ICogMHhGRjsKIAotICAgIENvbG9yIHJlc3VsdCA9IHJnYigpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKKyAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZUNvbG9yKCkuY29sb3JXaXRoQWxwaGEo
bmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJlc3VsdC5zZXRJc1Nl
bWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQwMiw5ICszMzEsOSBAQCBDb2xvciBD
b2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0CiAgICAgfQogCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFV
c2luZy4KLSAgICB1aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEp
OworICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoYWxw
aGEpOwogCi0gICAgQ29sb3IgcmVzdWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEp
OworICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlQ29sb3IoKS5jb2xvcldpdGhBbHBoYShuZXdB
bHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElzU2VtYW50
aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDE1LDggKzM0NCw4IEBAIENvbG9yIENvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2EKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAg
ICAgICByZXR1cm4gQ29sb3IgeyBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShh
bHBoYSkgfTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGV4aXN0aW5nQWxwaGFdID0gcmdiKCk7Ci0g
ICAgcmV0dXJuIHsgMHhGRiAtIHIsIDB4RkYgLSBnLCAweEZGIC0gYiwgY29sb3JGbG9hdFRvUkdC
QUJ5dGUoYWxwaGEpIH07CisgICAgYXV0byBbciwgZywgYiwgZXhpc3RpbmdBbHBoYV0gPSBhc1Np
bXBsZUNvbG9yKCk7CisgICAgcmV0dXJuIHsgMHhGRiAtIHIsIDB4RkYgLSBnLCAweEZGIC0gYiwg
Y29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGFscGhhKSB9OwogfQogCiBDb2xvciBDb2xvcjo6
c2VtYW50aWNDb2xvcigpIGNvbnN0CkBAIC00MzQsMTcgKzM2MywxOCBAQCBzdGQ6OnBhaXI8Q29s
b3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBDCiAgICAgICAgIHJldHVybiB7IGV4dGVuZGVkQ29s
b3IuY29sb3JTcGFjZSgpLCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkgfTsKICAgICB9CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYXNT
aW1wbGVDb2xvcigpOwogICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9u
ZW50cyB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsICBhIC8gMjU1LjBmIH0g
fTsKIH0KIAogU2ltcGxlQ29sb3IgQ29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29u
c3QKIHsKLSAgICBpZiAoIWlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHJnYigpOworICAg
IGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKHIsIGcsIGIsIGEpOworICAgIH0KIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOwotICAgIHJldHVybiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBn
LCBiLCBhKTsKKyAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigpOwogfQogCiBGbG9hdENvbXBvbmVu
dHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdApAQCAtNDc2LDIwICs0MDYs
MjAgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KICAgICAv
LyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBhdCB0aGUg
ZW5kIG9mIHRoZSBhbmltYXRpb24KICAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IC8vIFNpbmNlIG1ha2VQcmVtdWx0aXBsaWVkUkdCQSgpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNw
ZWNpYWwtY2FzZSB0aGF0LgotICAgIGF1dG8gcHJlbXVsdEZyb20gPSBmcm9tLmFscGhhKCkgPyBt
YWtlUHJlbXVsdGlwbGllZFJHQkEoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENv
bG9yOjp0cmFuc3BhcmVudDsKLSAgICBhdXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBtYWtl
UHJlbXVsdGlwbGllZFJHQkEodG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7CisgICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcigp
IGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0LgorICAgIGF1dG8gcHJlbXVs
dEZyb20gPSBmcm9tLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGZyb20u
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgYXV0
byBwcmVtdWx0VG8gPSB0by5hbHBoYSgpID8gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcih0
by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAotICAg
IFJHQkEzMiBwcmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgIFNpbXBsZUNvbG9yIHByZW11
bHRCbGVuZGVkID0gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVz
cyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCks
IHByZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBo
YUNvbXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCiAgICAg
KTsKIAotICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7
CisgICAgcmV0dXJuIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwcmVtdWx0QmxlbmRl
ZCk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9t
LCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKQEAgLTUxMiwxMyArNDQyLDcgQEAg
Q29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiB2b2lkIENvbG9yOjp0
YWdBc1ZhbGlkKCkKIHsKLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JB
Q29sb3I7Ci19Ci0KLWNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gKm1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3I7CisgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2
YWxpZFNpbXBsZUNvbG9yOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCw5IEBACiAj
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNs
dWRlICJTaW1wbGVDb2xvci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbWF0
aD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0
cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOwpAQCAtNjQsMzggKzYwLDM4IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZXNlIGNvbnN0cnVjdG9ycyBhbmQgY3JlYXRpb24g
ZnVuY3Rpb25zIGFuZCByZXBsYWNlIHRoZSBvbmVzIHRoYXQgYXJlIHN0aWxsIG5lZWRlZCB3aXRo
IGZyZWUgZnVuY3Rpb25zLgogCi0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0g
dHJ1ZSkKKyAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCiAg
ICAgewogICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAg
ICAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwogICAgIH0KIAogICAgIGVudW0gU2VtYW50
aWNUYWcgeyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFJHQkEzMiBjb2xvciwgU2VtYW50aWNUYWcp
CisgICAgQ29sb3IoU2ltcGxlQ29sb3IgY29sb3IsIFNlbWFudGljVGFnKQogICAgIHsKLSAgICAg
ICAgc2V0UkdCKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwogICAgICAg
ICBzZXRJc1NlbWFudGljKCk7CiAgICAgfQogCiAgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YikKICAgICB7Ci0gICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICAgICAgc2V0U2ltcGxlQ29s
b3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIpKTsKICAgICB9CiAKICAgICBDb2xvcihpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSkKICAgICB7Ci0gICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBn
LCBiLCBhKSk7CisgICAgICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvcihyLCBnLCBi
LCBhKSk7CiAgICAgfQogCiAgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxv
YXQgYSkKICAgICB7Ci0gICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKSk7CisgICAgICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
ciwgZywgYiwgYSkpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0
aGUgc3BlY2lmaWMgQ01ZSyBhbmQgYWxwaGEgdmFsdWVzLgogICAgIENvbG9yKGZsb2F0IGMsIGZs
b2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiAgICAgewotICAgICAgICBzZXRSR0Io
bWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAgICBzZXRTaW1wbGVDb2xv
cihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogICAgIH0KIAogICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwpAQCAtMTAzLDIz
ICs5OSwyMyBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNo
VmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVz
dCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dCghKGRlbGV0ZWRIYXNoVmFsdWUgJiB2YWxpZFJHQkFDb2xvckJpdCksICJDb2xvcidzIGRlbGV0
ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBSR0JBMzIgQ29sb3IiKTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xv
cidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJH
QkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyA9IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhh
c2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVl
IG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoIShkZWxldGVkSGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCksICJDb2xvcidz
IGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBTaW1wbGVDb2xv
ciIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwg
IkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQg
YW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5zaW1w
bGVDb2xvckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKICAgICAgICAgQVNTRVJUKCFpc0V4
dGVuZGVkKCkpOwogICAgIH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBk
ZWxldGVkSGFzaFZhbHVlOworICAgICAgICByZXR1cm4gbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JB
bmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOwogICAgIH0KIAogICAgIGV4cGxpY2l0IENvbG9y
KFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCiAgICAgewotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZFJHQkFDb2xvciwgIkNvbG9yJ3MgZW1wdHkgaGFz
aCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQg
aGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJHQkEzMiBDb2xvciB3
b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGVtcHR5
SGFzaFZhbHVlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxp
ZFNpbXBsZUNvbG9yLCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlr
ZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFs
dWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21l
IGJpdHMgc2V0IHRoYXQgYW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgICAgICBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CiAgICAgICAg
IEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKICAgICB9CiAKQEAgLTE0NywxMyArMTQzLDEzIEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFzIGVpdGhlciAjUlJH
R0JCIG9yICNSUkdHQkJBQQogICAgIFN0cmluZyBuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNv
bnN0OwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8
IChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB2YWxpZFJHQkFDb2xvckJpdCk7IH0KKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZFNpbXBsZUNvbG9yQml0KTsgfQogCi0gICAgYm9v
bCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID09IDEuMCA6IHJnYigpLmlzT3BhcXVlKCk7IH0KLSAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4w
IDogcmdiKCkuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGVD
b2xvcigpLmlzT3BhcXVlKCk7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGVDb2xv
cigpLmlzVmlzaWJsZSgpOyB9CiAKLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9u
ZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9h
dCgpOyB9CisgICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUgOiBhc1NpbXBsZUNvbG9yKCkuYWxwaGFDb21wb25lbnQo
KTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogYXNTaW1wbGVDb2xvcigpLmFscGhhQ29tcG9uZW50
QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTE5MSw3ICsx
ODcsNyBAQCBwdWJsaWM6CiAgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNvbnN0OwogCiAgICAg
Ly8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9y
IG5hbWUuCi0gICAgYm9vbCBpc1NlbWFudGljKCkgY29uc3QgeyByZXR1cm4gIWlzRXh0ZW5kZWQo
KSAmJiAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgaXNTZW1hbnRpY1JCR0FDb2xvckJpdCk7
IH0KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYm
IChtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY1NpbXBsZUNvbG9y
Qml0KTsgfQogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsK
QEAgLTIxMCwxMSArMjA2LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9y
IEQyRDFfVkVDVE9SXzRGKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIHBhcnNl
SGV4Q29sb3IoY29uc3QgU3RyaW5nJiwgUkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VI
ZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3JiwgUkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFy
c2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVuc2lnbmVkLCBSR0JBMzImKTsKLSAgICBzdGF0aWMg
Ym9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBibGFjayB7IDB4RkYwMDAwMDAgfTsKICAg
ICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHdoaXRlIHsgMHhGRkZGRkZGRiB9OwogICAg
IHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGFya0dyYXkgeyAweEZGODA4MDgwIH07CkBA
IC0yMjQsMTcgKzIxNSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBjeWFuIHsgMHhGRjAwRkZGRiB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgeWVsbG93IHsgMHhGRkZGRkYwMCB9OwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4M0NBRkMw
RTMgfTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21wb3NpdGlv
bkZpbGwgeyAweEZGRTFERDU1IH07Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNFeHRlbmRlZCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBp
bnZhbGlkUkdCQUNvbG9yKTsKKyAgICAgICAgcmV0dXJuICEobV9jb2xvckRhdGEuc2ltcGxlQ29s
b3JBbmRGbGFncyAmIGludmFsaWRTaW1wbGVDb2xvcik7CiAgICAgfQotICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKKyAgICBjb25zdCBF
eHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBD
b2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3Im
IG9wZXJhdG9yPShDb2xvciYmKTsKQEAgLTI1MiwxOSArMjM3LDE5IEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotICAgIHZvaWQgc2V0
UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywgYikpOyB9Ci0g
ICAgdm9pZCBzZXRSR0IoUkdCQTMyKTsKLSAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29s
b3JEYXRhLnJnYmFBbmRGbGFncyB8PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9CisgICAgY29u
c3QgU2ltcGxlQ29sb3IgYXNTaW1wbGVDb2xvcigpIGNvbnN0OworCisgICAgdm9pZCBzZXRTaW1w
bGVDb2xvcihTaW1wbGVDb2xvcik7CisgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQog
CiAgICAgLy8gMHhfX19fX19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xvciBwb2ludGVyLgotICAgIC8v
IDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgUkdCQTMyLgotICAgIC8vIDB4X19fX19fXzExIGlz
IGEgdmFsaWQgUkdCQTMyLgorICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgU2ltcGxl
Q29sb3IuCisgICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBTaW1wbGVDb2xvci4KICAgICBz
dGF0aWMgY29uc3QgdWludDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgaW52YWxpZFJHQkFDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgdmFsaWRSR0JBQ29sb3JCaXQgPSAweDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IHZhbGlkUkdCQUNvbG9yID0gMHgzOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFu
dGljUkJHQUNvbG9yQml0ID0gMHg0OworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlk
U2ltcGxlQ29sb3IgPSAweDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkU2ltcGxl
Q29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkU2ltcGxlQ29s
b3IgPSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNTaW1wbGVDb2xv
ckJpdCA9IDB4NDsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFzaFZhbHVl
ID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBlbXB0eUhh
c2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKQEAgLTI3Miw3ICsyNTcsNyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdGFnQXNWYWxpZCgpOwogCiAgICAgdW5pb24gewot
ICAgICAgICB1aW50NjRfdCByZ2JhQW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07CisgICAg
ICAgIHVpbnQ2NF90IHNpbXBsZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkU2ltcGxlQ29sb3IgfTsK
ICAgICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRh
OwogfTsKQEAgLTMwMCw3ICsyODUsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bG9yJiBhLCBjCiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAg
ICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFnczsKKyAg
ICByZXR1cm4gYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGIubV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC0zMTIsNyArMjk3LDcgQEAgaW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoYwogewogICAgIGlmIChhLmlzRXh0ZW5kZWQo
KSB8fCBiLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwo
YSwgYik7Ci0gICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6
aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYg
fkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKKyAgICByZXR1cm4gKGEubV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0
KSA9PSAoYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFu
dGljU2ltcGxlQ29sb3JCaXQpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBj
b25zdApAQCAtMzIwLDcgKzMwNSw3IEBAIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNv
bnN0CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5o
YXNoKCk7CiAKLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFn
cyk7CisgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzKTsKIH0KIAogaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBA
IC0zMzMsMTcgKzMxOCwyMSBAQCBpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNp
bmdBCiAgICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5lIFJHQkEzMiBDb2xvcjo6
cmdiKCkgY29uc3QKK2lubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRl
ZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQo
KSkgaGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBF
eHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0
IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCi0gICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikg
fTsKKyAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKKyAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3I7CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikK
K2lubGluZSBjb25zdCBTaW1wbGVDb2xvciBDb2xvcjo6YXNTaW1wbGVDb2xvcigpIGNvbnN0CiB7
Ci0gICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJn
Yi52YWx1ZSgpKSA8PCAzMjsKKyAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
Pj4gMzIpIH07Cit9CisKK2lubGluZSB2b2lkIENvbG9yOjpzZXRTaW1wbGVDb2xvcihTaW1wbGVD
b2xvciBzaW1wbGVDb2xvcikKK3sKKyAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpbXBsZUNvbG9yLnZhbHVlKCkpIDw8IDMyOwogICAg
IHRhZ0FzVmFsaWQoKTsKIH0KIApAQCAtMzU0LDcgKzM0Myw3IEBAIGlubGluZSBib29sIENvbG9y
Ojppc0JsYWNrQ29sb3IoY29uc3QgQ28KICAgICAgICAgcmV0dXJuICFleHRlbmRlZENvbG9yLnJl
ZCgpICYmICFleHRlbmRlZENvbG9yLmdyZWVuKCkgJiYgIWV4dGVuZGVkQ29sb3IuYmx1ZSgpICYm
IGV4dGVuZGVkQ29sb3IuYWxwaGEoKSA9PSAxOwogICAgIH0KIAotICAgIHJldHVybiBjb2xvci5y
Z2IoKSA9PSBDb2xvcjo6YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlQ29sb3IoKSA9
PSBDb2xvcjo6YmxhY2s7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQpAQCAtMzY0LDcgKzM1Myw3IEBAIGlubGluZSBib29sIENvbG9yOjpp
c1doaXRlQ29sb3IoY29uc3QgQ28KICAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3IucmVkKCkg
PT0gMSAmJiBleHRlbmRlZENvbG9yLmdyZWVuKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmJsdWUo
KSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYWxwaGEoKSA9PSAxOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6OndoaXRlOworICAgIHJldHVybiBjb2xvci5hc1Np
bXBsZUNvbG9yKCkgPT0gQ29sb3I6OndoaXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMzg5LDEwICszNzgsOCBAQCB2b2lkIENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uCiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNv
bG9yIGlzIHNlbWFudGljLgogCi0gICAgdWludDMyX3QgdmFsdWUgPSByZ2IoKS52YWx1ZSgpOwot
CiAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVuY29kZXIgPDwgdmFsdWU7CisgICAgZW5jb2Rl
ciA8PCBhc1NpbXBsZUNvbG9yKCkudmFsdWUoKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KQEAgLTQxOCw3ICs0MDUsNyBAQCBPcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNv
ZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICAgICAgcmV0dXJuIENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb2xvclNw
YWNlKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNv
bG9yU3BhY2UgfTsKICAgICB9CiAKICAgICBib29sIGlzVmFsaWQ7CkBAIC00MjYsNyArNDEzLDcg
QEAgT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZAogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgfTsKIAogICAgIHVpbnQzMl90IHZhbHVlOwog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjIxMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBDb2xvckNvbXBvbgogaW5saW5lIHVpbnQ4X3QgY2xhbXBlZENvbG9yQ29tcG9uZW50KGZs
b2F0IGYpCiB7CiAgICAgLy8gU2VlIGFsc28gY29sb3JGbG9hdFRvUkdCQUJ5dGUoKS4KLSAgICBy
ZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4w
ZiAqIGYpKSwgMjU1KSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIGJ5dGVP
ZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJh
Y2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyAr
MTYwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEpCi0gICAgICAgICAgICBwaXhlbCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbC5y
ZWRDb21wb25lbnQoKSwgcGl4ZWwuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWwuYmx1ZUNvbXBvbmVu
dCgpLCBwaXhlbC5hbHBoYUNvbXBvbmVudCgpLCBmYWxzZSk7CisgICAgICAgICAgICBwaXhlbCA9
IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWwucmVkQ29tcG9uZW50KCksIHBpeGVs
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsLmJsdWVDb21wb25lbnQoKSwgcGl4ZWwuYWxwaGFDb21w
b25lbnQoKSwgZmFsc2UpOwogCiAgICAgICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOwogCkBAIC0x
NzAsOSArMTcwLDkgQEAgcHVibGljOgogICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICog
cGl4ZWwuYWxwaGFDb21wb25lbnQoKSk7CiAKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBo
YSkKLSAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSkudmFsdWUoKTsKKyAg
ICAgICAgICAgICpkZXN0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpLnZhbHVlKCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
ciwgZywgYiwgYSkudmFsdWUoKTsKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVucHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpLnZhbHVlKCk7CiAgICAgfQogCiAgICAgc3RhdGlj
IGJvb2wgaXNPdmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMjI1LDkgKzIyNSw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBpZiAobV9wcmVtdWx0
aXBseUFscGhhICYmIGEgPCAyNTUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVByZW11bHRpcGxp
ZWRSR0JBKHIsIGcsIGIsIGEsIGZhbHNlKS52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IociwgZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7CiAK
LSAgICAgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpLnZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSkudmFsdWUoKTsKICAgICB9CiAKICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudD4gbV9waXhlbHM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDUzICs0Myw1MyBAQCBzdGF0aWMgaW5saW5lIHVu
c2lnbmVkIHVucHJlbXVsdGlwbGllZENoCiAgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShj
KSArIGEgLSAxKSAvIGE7CiB9CiAKLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZykKK1NpbXBsZUNvbG9yIG1ha2VQcmVt
dWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2Vp
bGluZykKIHsKLSAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSwg
Y2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEsIGNlaWxpbmcpLCBwcmVtdWx0aXBs
aWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5u
ZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBh
KTsKIH0KIAotUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikK
K1NpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IgcGl4
ZWxDb2xvcikKIHsKICAgICBpZiAocGl4ZWxDb2xvci5pc09wYXF1ZSgpKQogICAgICAgICByZXR1
cm4gcGl4ZWxDb2xvcjsKLSAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29s
b3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xv
ci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7CisgICAgcmV0
dXJuIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWxDb2xvci5yZWRDb21wb25lbnQo
KSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQo
KSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKIH0KIAotUkdCQTMyIG1ha2VVblByZW11
bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorU2ltcGxlQ29sb3IgbWFr
ZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQog
ewotICAgIHJldHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBh
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwg
YSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
YiwgYSksIGEpOwogfQogCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBp
eGVsQ29sb3IpCitTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2lt
cGxlQ29sb3IgcGl4ZWxDb2xvcikKIHsKICAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUoKSAm
JiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQotICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBv
bmVudCgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK1NpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsK
LSAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRvUkdCQUJ5dGUociksIGNvbG9yRmxvYXRU
b1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5
dGUoYSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29sb3JGbG9hdFRvU2ltcGxlQ29s
b3JCeXRlKHIpLCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoZyksIGNvbG9yRmxvYXRUb1Np
bXBsZUNvbG9yQnl0ZShiKSwgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGEpKTsKIH0KIAot
UkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9h
dCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQorU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJv
bUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0
IGFscGhhKQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1LjA7CiAgICAgRmxv
YXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pOwotICAgIHJldHVybiBtYWtlUkdCQSgKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKAogICAgICAgICByb3VuZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzBdICog
c2NhbGVGYWN0b3IpLAogICAgICAgICByb3VuZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzFdICog
c2NhbGVGYWN0b3IpLAogICAgICAgICByb3VuZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzJdICog
c2NhbGVGYWN0b3IpLAogICAgICAgICByb3VuZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzNdICog
c2NhbGVGYWN0b3IpKTsKIH0KIAotUkdCQTMyIG1ha2VSR0JBRnJvbUNNWUtBKGZsb2F0IGMsIGZs
b2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCitTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQg
YSkKIHsKICAgICBkb3VibGUgY29sb3JzID0gMSAtIGs7CiAgICAgaW50IHIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0gYykpKTsKICAgICBpbnQg
ZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBt
KSkpOwogICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChj
b2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIHN0YXRpY19j
YXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEp
KTsKIH0KIAogU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0
CkBAIC0xMzUsNCArMTM1LDczIEBAIFN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZv
clJlbmQKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiks
IGhleChncmVlbkNvbXBvbmVudCgpLCAyKSwgaGV4KGJsdWVDb21wb25lbnQoKSwgMikpOwogfQog
CisvLyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFNpbXBsZUNv
bG9yPiBwYXJzZUhleENvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogbmFtZSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBs
ZW5ndGggIT0gNiAmJiBsZW5ndGggIT0gOCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KG5hbWVbaV0pKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAg
ICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxl
bmd0aCA9PSA2KQorICAgICAgICByZXR1cm4gU2ltcGxlQ29sb3IgeyAweEZGMDAwMDAwIHwgdmFs
dWUgfTsKKyAgICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2
YWx1ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFNpbXBsZUNvbG9yIHR5cGUKKyAgICAgICAg
Ly8gZXhwZWN0cyB0aGVtIHRvIGJlIGluIEFSR0Igb3JkZXIsIHNvIHdlIHJpZ2h0IHJvdGF0ZSBl
aWdodCBiaXRzLgorICAgICAgICByZXR1cm4gU2ltcGxlQ29sb3IgeyB2YWx1ZSA8PCAyNCB8IHZh
bHVlID4+IDggfTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA0KSB7CisgICAgICAgIC8vICNh
YmNkIGNvbnZlcnRzIHRvIGRkYWFiYmNjIGluIFNpbXBsZUNvbG9yLgorICAgICAgICByZXR1cm4g
U2ltcGxlQ29sb3IgeworICAgICAgICAgICAgICAodmFsdWUgJiAweEYpIDw8IDI4IHwgKHZhbHVl
ICYgMHhGKSA8PCAyNAorICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMDApIDw8IDggfCAodmFs
dWUgJiAweEYwMDApIDw8IDQKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDQgfCAo
dmFsdWUgJiAweEYwMCkKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAodmFsdWUgJiAw
eEYwKSA+PiA0CisgICAgICAgIH07CisgICAgfQorICAgIC8vICNhYmMgY29udmVydHMgdG8gI2Fh
YmJjYworICAgIHJldHVybiBTaW1wbGVDb2xvciB7CisgICAgICAgICAgKDB4RkYwMDAwMDApCisg
ICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgKKyAg
ICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAorICAgICAg
ICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikKKyAgICB9OworfQorCitPcHRp
b25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIq
IG5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVy
bmFsKG5hbWUsIGxlbmd0aCk7Cit9CisKK09wdGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xv
cjo6cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoKTsKK30KKworT3B0
aW9uYWw8U2ltcGxlQ29sb3I+IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmIChuYW1lLmlz
OEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCks
IG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVy
czE2KCksIG5hbWUubGVuZ3RoKCkpOworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxl
Q29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSkKK3sKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCkpOworICAg
IHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCkp
OworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMTExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTIgKzI4LDE2IEBACiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8dW5pY29kZS91
Y2hhci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBDb2xvciB2YWx1ZSB3aXRoIDgtYml0IGNvbXBvbmVudHMgZm9yIHJlZCwgZ3JlZW4sIGJs
dWUsIGFuZCBhbHBoYS4KIC8vIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHN0b3JlZCBhcyBhIDMy
LWJpdCBpbnRlZ2VyLCB3aXRoIGFscGhhIGluIHRoZSBoaWdoIGJpdHM6IEFSR0IuCisvLyBGSVhN
RTogVGhpcyBjbGFzcyBzaG91bGQgYmUgY29uc29saWRhdGVkIHdpdGggQ29sb3JDb21wb25lbnRz
LgogY2xhc3MgU2ltcGxlQ29sb3IgewogcHVibGljOgogICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
cih1aW50MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9CkBAIC03MCw2ICs3
NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29u
c3QgU3RyaW5nJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENv
bG9yKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+
IHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqLCB1bnNpZ25lZCk7CisgICAgc3RhdGljIE9wdGlv
bmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwor
CiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fdmFsdWUgeyAwIH07CiB9OwpAQCAtNzcsMjAgKzg2
LDE3IEBAIHByaXZhdGU6CiBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9y
KTsKIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOwogCi0vLyBGSVhN
RTogUmVtb3ZlIHRoaXMgYWZ0ZXIgbWlncmF0aW5nIHRvIHRoZSBuZXcgbmFtZS4KLXVzaW5nIFJH
QkEzMiA9IFNpbXBsZUNvbG9yOwotCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0IoaW50IHIsIGlu
dCBnLCBpbnQgYik7Ci1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIs
IGludCBnLCBpbnQgYik7Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAotUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdC
QShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSk7Ci1SR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKFJHQkEzMik7Ci1SR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOwotUkdCQTMyIG1ha2VVblByZW11
bHRpcGxpZWRSR0JBKFJHQkEzMik7Ci0KLVdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKLVdFQkNPUkVf
RVhQT1JUIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IGws
IGZsb2F0IGEpOwotUkdCQTMyIG1ha2VSR0JBRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZs
b2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1
ZSk7CitTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9y
KTsKK1NpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50
IGcsIGludCBiLCBpbnQgYSk7CitTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxl
Q29sb3IoU2ltcGxlQ29sb3IpOworCitXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwor
V0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQg
aCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7
CiAKIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQpOwogdWludDhfdCByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KTsKQEAgLTk4LDcgKzEwNCw3IEBAIHVpbnQ4X3Qg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCkKIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5
MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7
CiAKLXVpbnQ4X3QgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQpOwordWludDhfdCBjb2xvckZs
b2F0VG9TaW1wbGVDb2xvckJ5dGUoZmxvYXQpOwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNp
bXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCiB7CkBAIC0xMTIsMTIgKzExOCwxMiBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpCiAKIGlubGluZSB1aW50OF90IHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQogewotICAgIHJldHVybiBzdGQ6Om1h
eCgwLCBzdGQ6Om1pbigyNTUsIHZhbHVlKSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUs
IDAsIDI1NSk7CiB9CiAKIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
ZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYs
IHN0ZDo6cm91bmQodmFsdWUpKSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2
YWx1ZSksIDAuZiwgMjU1LmYpOwogfQogCiBpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5Qnky
NTUodWludDE2X3QgdmFsdWUpCkBAIC0xMzQsMjEgKzE0MCwyMSBAQCBpbmxpbmUgdWludDE2X3Qg
ZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90CiAgICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVt
YWluZGVyID4+IDgpOwogfQogCi1pbmxpbmUgdWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0ZShm
bG9hdCBmKQoraW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gRklYTUU6IENvbnNvbGlkYXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9u
ZW50KCkuCiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6bWF4KDAs
IHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOwor
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBm
KSksIDAsIDI1NSk7CiB9CiAKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcs
IGludCBiKQorY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50
IGcsIGludCBiKQogewotICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCAweEZGKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIDB4RkYpOwogfQogCi1jb25zdGV4cHIgUkdC
QTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorY29uc3RleHByIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKIHsKLSAg
ICByZXR1cm4geyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjptYXgoMCwgc3RkOjptaW4oYSwg
MHhGRikpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMHhGRikpIDw8IDE2IHwgc3Rk
OjptYXgoMCwgc3RkOjptaW4oZywgMHhGRikpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihi
LCAweEZGKSkpIH07CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6Y2xh
bXAoYSwgMCwgMHhGRikgPDwgMjQgfCBzdGQ6OmNsYW1wKHIsIDAsIDB4RkYpIDw8IDE2IHwgc3Rk
OjpjbGFtcChnLCAwLCAweEZGKSA8PCA4IHwgc3RkOjpjbGFtcChiLCAwLCAweEZGKSkgfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6On5JbmJhbmRUZXh0VHIKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShDRkFy
cmF5UmVmIGNvbG9yQXJyYXkpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VTaW1w
bGVDb2xvckZyb21BUkdCQ0ZBcnJheShDRkFycmF5UmVmIGNvbG9yQXJyYXkpCiB7CiAgICAgaWYg
KENGQXJyYXlHZXRDb3VudChjb2xvckFycmF5KSA8IDQpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gbWFr
ZVJHQkEzMkYKICAgICAgICAgY29tcG9uZW50QXJyYXlbaV0gPSBjb21wb25lbnQ7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGNvbXBvbmVudEFycmF5WzFdLCBjb21w
b25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdKTsKKyAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhjb21wb25lbnRBcnJheVsxXSwgY29t
cG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSk7CiB9
CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9j
ZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykK
QEAgLTI2Nyw3ICsyNjcsNyBAQCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNr
UHJpCiAgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUpICE9IENGQXJy
YXlHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNG
QXJyYXkoYXJyYXlWYWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VTaW1w
bGVDb2xvckZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAo
IWNvbG9yKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBj
dWVEYXRhLT5zZXRGb3JlZ3JvdW5kQ29sb3IoKmNvbG9yKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBS
ZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAgICAg
aWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgYXV0byBjb2xvciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJh
eShhcnJheVZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRCYWNrZ3JvdW5k
Q29sb3IoKmNvbG9yKTsKQEAgLTI5MSw3ICsyOTEsNyBAQCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4g
SW5iYW5kVGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKGFycmF5
VmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VS
R0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWNvbG9yKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRIaWdobGlnaHRDb2xvcigqY29sb3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJl
dmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxMCBAQCBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gVGlueUxSVUNhY2hlUG9saWN5CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIFJHQkEzMiBtYWtlUkdCQUZyb21DR0NvbG9yKENHQ29sb3JSZWYgY29sb3IpCitzdGF0aWMg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
IHsKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBz
cGFjZXMuCisKICAgICBzaXplX3QgbnVtQ29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1iZXJPZkNv
bXBvbmVudHMoY29sb3IpOwogICAgIGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBDR0NvbG9y
R2V0Q29tcG9uZW50cyhjb2xvcik7CiAKQEAgLTc3LDI3ICs3OSwzMSBAQCBzdGF0aWMgUkdCQTMy
IG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xvCiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBzY2FsZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFr
ZVJHQkEociAqIHNjYWxlRmFjdG9yLCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3Rvciwg
YSAqIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIgKiBzY2FsZUZh
Y3RvciwgZyAqIHNjYWxlRmFjdG9yLCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2FsZUZhY3Rvcik7
CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJWE1FOiBF
eHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICgh
Y29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFD
b2xvcjsKKyAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRT
aW1wbGVDb2xvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFJHQihtYWtlUkdC
QUZyb21DR0NvbG9yKGNvbG9yKSk7CisgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9y
RnJvbUNHQ29sb3IoY29sb3IpKTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Is
IFNlbWFudGljVGFnKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8g
aGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKyAgICAgICAgbV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHNldFJHQihtYWtlUkdCQUZyb21DR0NvbG9yKGNvbG9yKSk7Cisg
ICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsKICAg
ICBzZXRJc1NlbWFudGljKCk7CiB9CiAKQEAgLTEyNCw3ICsxMzAsNyBAQCBzdGF0aWMgQ0dDb2xv
clJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgeworICAgICAgICBzd2l0Y2ggKGNvbG9y
LmFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgQ29sb3I6OnRyYW5zcGFy
ZW50LnZhbHVlKCk6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50
Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cmFuc3Bh
cmVudENHQ29sb3I7CkBAIC0xNDAsNyArMTQ2LDcgQEAgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9y
KGNvbnN0IENvbG9yJiBjbwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKGNvbG9yLmlz
RXh0ZW5kZWQoKSB8fCBjb2xvci5yZ2IoKS52YWx1ZSgpKTsKKyAgICBBU1NFUlQoY29sb3IuaXNF
eHRlbmRlZCgpIHx8IGNvbG9yLmFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpKTsKIAogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxUaW55TFJVQ2FjaGU8Q29sb3IsIFJldGFpblB0cjxDR0NvbG9yUmVm
PiwgMzI+PiBjYWNoZTsKICAgICByZXR1cm4gY2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5nZXQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JN
YWMubW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsMTAgQEAgYm9v
bCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpCiAgICAgcmV0dXJuIHVzZU9sZEFxdWFGb2N1
c1JpbmdDb2xvcjsKIH0KIAotc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21OU0NvbG9yKE5TQ29s
b3IgKmNvbG9yKQorc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9y
KE5TQ29sb3IgKmNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIEFTU0VSVF9BUkcoY29sb3IsIGNvbG9yKTsK
IAogICAgIENHRmxvYXQgcmVkQ29tcG9uZW50OwpAQCAtODAsMjQgKzgyLDI4IEBAIHN0YXRpYyBS
R0JBMzIgbWFrZVJHQkFGcm9tTlNDb2xvcihOU0NvbG8KICAgICAgICAgTlNVSW50ZWdlciBwaXhl
bFs0XTsKICAgICAgICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOwog
Ci0gICAgICAgIHJldHVybiBtYWtlUkdCQShwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBw
aXhlbFszXSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6
JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBh
bHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAwLjApOwotICAg
IHJldHVybiBtYWtlUkdCQShzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3Ig
KiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3Rv
ciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNjYWxlRmFjdG9yICogcmVk
Q29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJs
dWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwogfQogCiBDb2xvciBjb2xvckZyb21O
U0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewotICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21O
U0NvbG9yKGNvbG9yKSk7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBo
YW5kbGUgY29sb3Igc3BhY2VzLgorCisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xvckZy
b21OU0NvbG9yKGNvbG9yKSk7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihO
U0NvbG9yICpjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3IobWFrZVJHQkFGcm9tTlNDb2xvcihj
b2xvciksIENvbG9yOjpTZW1hbnRpYyk7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBu
ZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1w
bGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKSwgQ29sb3I6OlNlbWFudGljKTsKIH0KIAogTlNDb2xv
ciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvQ29sb3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0NvbG9ySU9TLm1tCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvciBjb2xvckZyb21VSUNvbG9yKFVJQ29sb3IgKmNv
bG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNv
bG9yIHNwYWNlcy4KKwogICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayBmb3IgYSBVSUNvbG9y
IHRoYXQgd2FzIGNyZWF0ZWQgZnJvbSBhIHBhdHRlcm4gb3IgYSBEaXNwYXlQMyBjb2xvci4KICAg
ICBDR0Zsb2F0IHJlZENvbXBvbmVudDsKICAgICBDR0Zsb2F0IGdyZWVuQ29tcG9uZW50OwpAQCAt
NDMsNyArNDUsNyBAQCBDb2xvciBjb2xvckZyb21VSUNvbG9yKFVJQ29sb3IgKmNvbG9yKQogICAg
IFtjb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTom
Ymx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBz
Y2FsZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVJHQkEo
c2NhbGVGYWN0b3IgKiByZWRDb21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQs
IHNjYWxlRmFjdG9yICogYmx1ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVG
YWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2Fs
ZUZhY3RvciAqIGFscGhhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMjYyMTEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQ4LDcgKzEyNDgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFy
a2VkVGV4dERlY29yCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pCiB7
CiAgICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25Vc2VzQ3Vz
dG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFp
bnRJbmZvLCBib3hPcmlnaW4sIENvbG9yOjpjb21wb3NpdGlvbkZpbGwsIGNsYW1wZWRPZmZzZXQo
cmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uU3RhcnQoKSksIGNsYW1wZWRP
ZmZzZXQocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpKTsKKyAg
ICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29t
cG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvciwgY2xhbXBlZE9m
ZnNldChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xh
bXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNzksNyArNDA3OSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0MKICAgICAgICAgY29u
dGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKICAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3Ju
ZXIgPSByZXNpemVyQWJzUmVjdDsKICAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0
U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSAr
IDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcihtYWtlUkdCKDIx
NywgMjE3LCAyMTcpKSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDIxNywgMjE3LCAyMTcpKTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25l
c3MoMS4wZik7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCk7CiAgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVy
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODUsNyArMzA4NSw3IEBA
IE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc+IFIKIHN0cnVjdCBQYXR0ZXJu
RGVzY3JpcHRpb24gewogICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgIEZsb2F0U2l6ZSBwaGFz
ZTsKLSAgICBSR0JBMzIgZmlsbENvbG9yOworICAgIFNpbXBsZUNvbG9yIGZpbGxDb2xvcjsKIH07
CiAKIHN0YXRpYyBSZWZQdHI8UGF0dGVybj4gcGF0dGVybkZvckRlc2NyaXB0aW9uKFBhdHRlcm5E
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiwgRmxvYXRTaXplIGNvbnRlbnRPZmZzZXQsIEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQpCkBAIC0zMTQ1LDcgKzMxNDUsNyBAQCBzdGF0aWMgUmVmUHRy
PFBhdHRlcm4+IHBhdHRlcm5Gb3JUb3VjaEFjCiAgICAgICAgIHJldHVybiAwOwogICAgIH07CiAK
LSAgICBjb25zdGV4cHIgYXV0byBmaWxsQ29sb3IgPSBtYWtlUkdCQSgwLCAwLCAwLCAxMjgpOwor
ICAgIGNvbnN0ZXhwciBhdXRvIGZpbGxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAx
MjgpOwogCiAgICAgc3RhdGljIGNvbnN0IFBhdHRlcm5EZXNjcmlwdGlvbiBwYXR0ZXJuRGVzY3Jp
cHRpb25zW10gPSB7CiAgICAgICAgIHsgImF1dG8iX3MsIHsgfSwgZmlsbENvbG9yIH0sCkBAIC0z
MTY1LDcgKzMxNjUsNyBAQCBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm5Gb3JUb3VjaEFj
CiAKIHN0YXRpYyBSZWZQdHI8UGF0dGVybj4gcGF0dGVybkZvckV2ZW50TGlzdGVuZXJSZWdpb25U
eXBlKEV2ZW50TGlzdGVuZXJSZWdpb25UeXBlIHR5cGUsIEZsb2F0U2l6ZSBjb250ZW50T2Zmc2V0
LCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewotICAgIGNvbnN0ZXhwciBhdXRvIGZp
bGxDb2xvciA9IG1ha2VSR0JBKDAsIDEyOCwgMCwgMTI4KTsKKyAgICBjb25zdGV4cHIgYXV0byBm
aWxsQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMTI4LCAwLCAxMjgpOwogCiAgICAgYXV0byBw
YXR0ZXJuQW5kUGhhc2UgPSBbJl0oKSAtPiBQYXR0ZXJuRGVzY3JpcHRpb24gewogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5c3RlbUYKICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9u
dE1hc2spOwogfQogCi1zdGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQorc3RhdGlj
IFNpbXBsZUNvbG9yIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIFJldGFpblB0cjxOU0Jp
dG1hcEltYWdlUmVwPiBvZmZzY3JlZW5SZXAgPSBhZG9wdE5TKFtbTlNCaXRtYXBJbWFnZVJlcCBh
bGxvY10gaW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbCBwaXhlbHNXaWRlOjEgcGl4ZWxzSGln
aDoxCiAgICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZ
RVMgaXNQbGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVz
UGVyUm93OjQgYml0c1BlclBpeGVsOjMyXSk7CkBAIC01NjgsNyArNTY4LDcgQEAgc3RhdGljIFJH
QkEzMiBtZW51QmFja2dyb3VuZENvbG9yKCkKICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAg
IFtvZmZzY3JlZW5SZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgIHJldHVybiBt
YWtlUkdCQShwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFsz
XSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNz
c1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDUtMjQgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFVz
ZSB0aGUgbmFtZSBTaW1wbGVDb2xvciBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMzNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChjb21wb3NpdGlvbkhpZ2hs
aWdodHMpOgorCiAyMDIwLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nl
c3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5j
b3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2MjQsNyArNDYyNCw3
IEBAIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25IaWdobGkKICAgICAgICAgaWYg
KCFhdHRyaWJ1dGVzW05TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWVdKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIFdlYkNvcmU6OkNvbG9yIGhpZ2hsaWdodENvbG9yIHsg
V2ViQ29yZTo6Q29sb3I6OmNvbXBvc2l0aW9uRmlsbCB9OworICAgICAgICBXZWJDb3JlOjpDb2xv
ciBoaWdobGlnaHRDb2xvciB7IFdlYkNvcmU6OkNvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IgfTsKICAgICAgICAgaWYgKFVJQ29sb3IgKnVpQ29sb3IgPSBh
dHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0pCiAgICAgICAgICAgICBo
aWdobGlnaHRDb2xvciA9IFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IodWlDb2xvcik7CiAgICAg
ICAgIGhpZ2hsaWdodHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLmxvY2F0
aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5TTWF4UmFuZ2UocmFuZ2UpKSwgaGlnaGxpZ2h0
Q29sb3IgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400179</attachid>
            <date>2020-05-24 14:17:21 -0700</date>
            <delta_ts>2020-05-24 14:29:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212337-20200524141719.patch</filename>
            <type>text/plain</type>
            <size>72728</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZh
c3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYXN0UGFyc2VDb2xvckludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcik6CisgICAg
ICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhleENvbG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg6Cisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIGh0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1wbGVDb2xvclZh
bHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZmVyZW5jZVNxdWFy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlcmlhbGl6ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNzc1RleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFn
QXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhleENvbG9ySW50ZXJuYWwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnBhcnNlSGV4Q29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzRXh0ZW5kZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc09wYXF1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFBc0Zsb2F0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1NlbWFudGljIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpzZXRJc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzRXh0ZW5k
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzU2ltcGxlQ29sb3IgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjppc0JsYWNrQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldFJHQik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmdiIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZENvbG9yQ29tcG9uZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCYWNraW5nU3RvcmU6OmJsZW5kUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNr
aW5nU3RvcmU6OnBpeGVsVmFsdWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUNvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkU2lt
cGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGV4
Q29sb3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cGFyc2VIZXhD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVuUHJlbXVsdGlwbGllZFJHQkEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkEzMkZyb21GbG9hdHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tSFNMQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjptYWtlUkdCQUZyb21DTVlLQSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kQW5kQ2xhbXBDb2xvckNo
YW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
b2xvckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdC
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQVJHQkNGQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vz
c0N1ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkEzMkZyb21BUkdCQ0ZB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkQ0dD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21DR0NvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
b2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbWFudGljQ29sb3JGcm9tTlND
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21OU0NvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpj
b2xvckZyb21VSUNvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0dGVybkZvclRvdWNo
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVnaW9u
VHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6CisKIDIwMjAtMDUtMjQgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBp
bmNsdWRlcyBkdWUgdG8gdW5pZmllZCBzb3VyY2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwOSwyMCArNDA5LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJl
UkdCKGNvbnN0IENoYXIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgQ29sb3IgZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgcXVpcmtzTW9kZSkKK3N0YXRpYyBPcHRp
b25hbDxTaW1wbGVDb2xvcj4gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgcXVpcmtzTW9kZSkKIHsKICAg
ICBDU1NVbml0VHlwZSBleHBlY3QgPSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047CiAKICAgICBp
ZiAobGVuZ3RoID49IDQgJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpIHsKLSAgICAgICAgUkdCQTMy
IHJnYjsKLSAgICAgICAgaWYgKENvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMgKyAxLCBs
ZW5ndGggLSAxLCByZ2IpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKHJnYik7CisgICAgICAg
IGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwg
bGVuZ3RoIC0gMSk7CisgICAgICAgIGlmIChjb2xvcikKKyAgICAgICAgICAgIHJldHVybiBjb2xv
cjsKICAgICB9CiAKICAgICBpZiAocXVpcmtzTW9kZSAmJiAobGVuZ3RoID09IDMgfHwgbGVuZ3Ro
ID09IDYpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2I7Ci0gICAgICAgIGlmIChDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikpCi0gICAgICAgICAgICByZXR1cm4gQ29s
b3IocmdiKTsKKyAgICAgICAgYXV0byBjb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9y
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIGlmIChjb2xvcikKKyAgICAgICAgICAgIHJl
dHVybiBjb2xvcjsKICAgICB9CiAKICAgICAvLyBUcnkgcmdiYSgpIHN5bnRheC4KQEAgLTQzNSwx
NiArNDM1LDE2IEBAIHN0YXRpYyBDb2xvciBmYXN0UGFyc2VDb2xvckludGVybmFsKGNvbnMKICAg
ICAgICAgaW50IGFscGhhOwogCiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFn
ZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBh
cnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4p
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwg
ZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghcGFyc2VBbHBoYVZh
bHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50
ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXR1cm4gQ29s
b3IobWFrZVJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50YXguCkBAIC00
NTUsMTcgKzQ1NSwxNyBAQCBzdGF0aWMgQ29sb3IgZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChjb25z
CiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50IGJsdWU7CiAgICAgICAgIGlmICghcGFy
c2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQot
ICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5k
LCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAg
ICAgICByZXR1cm4gQ29sb3IobWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJl
ZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KIAotICAgIHJldHVybiBDb2xvcigpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhz
OjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIENTU1ZhbHVlUG9vbCYgdmFsdWVQb29sKQpAQCAtNDgxLDE0ICs0ODEsMTQgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcgogICAgIGJvb2wgcXVpcmtzTW9kZSA9
IGlzUXVpcmtzTW9kZUJlaGF2aW9yKHBhcnNlck1vZGUpOwogCiAgICAgLy8gRmFzdCBwYXRoIGZv
ciBoZXggY29sb3JzIGFuZCByZ2IoKS9yZ2JhKCkgY29sb3JzCi0gICAgQ29sb3IgY29sb3I7Cisg
ICAgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOwogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
CiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVy
czgoKSwgc3RyaW5nLmxlbmd0aCgpLCBxdWlya3NNb2RlKTsKICAgICBlbHNlCiAgICAgICAgIGNv
bG9yID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmlu
Zy5sZW5ndGgoKSwgcXVpcmtzTW9kZSk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAg
aWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHZhbHVlUG9v
bC5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKKyAgICByZXR1cm4gdmFsdWVQb29sLmNyZWF0ZUNv
bG9yVmFsdWUoKmNvbG9yKTsKIH0KIAogYm9vbCBDU1NQYXJzZXJGYXN0UGF0aHM6OmlzVmFsaWRL
ZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVl
SUQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw2
IEBAIHN0YXRpYyBpbnQgY2xhbXBSR0JDb21wb25lbnQoY29uc3QgQ1NTUHIKIHN0YXRpYyBDb2xv
ciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAg
QVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2Uu
cGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVJnYmEpOwotICAgIENvbG9yIHJlc3VsdDsK
ICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3JQYXJhbWV0ZXIgPSBjb25zdW1lTnVt
YmVyKGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlmICghY29sb3JQYXJhbWV0ZXIpCkBAIC01
ODgsMTIgKzU4NywxMCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNl
CiAgICAgICAgIGFscGhhQ29tcG9uZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGNsYW1w
VG88ZG91YmxlPihhbHBoYSwgMC4wLCAxLjApICogMjU1LjBmKSk7CiAgICAgfTsKIAotICAgIHJl
c3VsdCA9IENvbG9yKG1ha2VSR0JBKGNvbG9yQXJyYXlbMF0sIGNvbG9yQXJyYXlbMV0sIGNvbG9y
QXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KSk7Ci0KICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoY29sb3JBcnJheVswXSwgY29sb3JBcnJheVsxXSwgY29sb3JBcnJheVsy
XSwgYWxwaGFDb21wb25lbnQpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
CkBAIC02NDUsNyArNjQyLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQ
YXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAot
ICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21IU0xBKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkpKTsKKyAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
QXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7CiB9CiAK
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQpAQCAtNjk1LDExICs2OTIsMTMgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29s
b3JGdW5jdGlvblBhcmFtZXRlcgogCiBzdGF0aWMgQ29sb3IgcGFyc2VIZXhDb2xvcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCiB7Ci0gICAgUkdC
QTMyIHJlc3VsdDsKKyAgICBTaW1wbGVDb2xvciByZXN1bHQ7CiAgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSGFz
aFRva2VuKSB7Ci0gICAgICAgIGlmICghQ29sb3I6OnBhcnNlSGV4Q29sb3IodG9rZW4udmFsdWUo
KSwgcmVzdWx0KSkKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJz
ZUhleENvbG9yKHRva2VuLnZhbHVlKCkpOworICAgICAgICBpZiAoIXNpbXBsZUNvbG9yKQogICAg
ICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9ICpzaW1wbGVDb2xvcjsK
ICAgICB9IGVsc2UgaWYgKGFjY2VwdFF1aXJreUNvbG9ycykgewogICAgICAgICBTdHJpbmcgY29s
b3I7CiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlw
ZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBAIC03MTgsMTMgKzcxNywxNSBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGNvbG9yLmxlbmd0aCgpOwogICAgICAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVuZ3RoICE9IDYp
CiAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgaWYgKCFDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb2xvciwgcmVzdWx0KSkKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IFNpbXBs
ZUNvbG9yOjpwYXJzZUhleENvbG9yKHRva2VuLnZhbHVlKCkpOworICAgICAgICBpZiAoIXNpbXBs
ZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9ICpz
aW1wbGVDb2xvcjsKICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICB9
CiAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICByZXR1cm4gQ29s
b3IocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VD
b2xvckZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0aW9uSGln
aGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGlv
bkhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0aW9uSGlnaGxpZ2h0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDE1IEBA
IHN0cnVjdCBDb21wb3NpdGlvbkhpZ2hsaWdodCB7CiAgICAgewogICAgIH0KIAorI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IgeyAweDNDQUZDMEUzIH07CisjZWxzZQorICAgIHN0YXRpYyBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIHsgMHhGRkUx
REQ1NSB9OworI2VuZGlmCisKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCB7IDAgfTsKICAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgeyAwIH07Ci0gICAgQ29sb3IgY29sb3IgeyBDb2xvcjo6Y29tcG9z
aXRpb25GaWxsIH07CisgICAgQ29sb3IgY29sb3IgeyBkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29s
b3IgfTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29t
cG9zaXRpb25IaWdobGlnaHQ+IGRlY29kZShEZWNvZGVyJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNjIxMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYyNSw3ICs2MjUsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RD
b250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2lsbCBh
cHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9y
IGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgb3ZlcnJp
ZGVMaWdodG5lc3MgPSAwLjU7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgb3ZlcnJp
ZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1
bmRlcmxpbmVDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBv
dmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQ29sb3IgdW5kZXJsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIG92ZXJyaWRlTGlnaHRuZXNzLCBvdmVycmlkZUFs
cGhhTXVsdGlwbGllciAqIGFscGhhKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9y
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1
ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5k
ZXJsaW5lQ29sb3IuY3NzVGV4dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJ
bnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1
dFR5cGUuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9y
SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBAIHN0YXRpYyBi
b29sIGlzVmFsaWRTaW1wbGVDb2xvcihTdHJpbmdWaWUKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNydWxlcy1m
b3ItcGFyc2luZy1zaW1wbGUtY29sb3VyLXZhbHVlcwotc3RhdGljIE9wdGlvbmFsPFJHQkEzMj4g
cGFyc2VTaW1wbGVDb2xvclZhbHVlKFN0cmluZ1ZpZXcgc3RyaW5nKQorc3RhdGljIE9wdGlvbmFs
PFNpbXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9yVmFsdWUoU3RyaW5nVmlldyBzdHJpbmcpCiB7
CiAgICAgaWYgKCFpc1ZhbGlkU2ltcGxlQ29sb3Ioc3RyaW5nKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICByZXR1cm4gbWFrZVJHQih0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzFd
LCBzdHJpbmdbMl0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzNdLCBzdHJpbmdbNF0pLCB0b0FT
Q0lJSGV4VmFsdWUoc3RyaW5nWzVdLCBzdHJpbmdbNl0pKTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKHRvQVNDSUlIZXhWYWx1ZShzdHJpbmdbMV0sIHN0cmluZ1syXSksIHRvQVNDSUlIZXhW
YWx1ZShzdHJpbmdbM10sIHN0cmluZ1s0XSksIHRvQVNDSUlIZXhWYWx1ZShzdHJpbmdbNV0sIHN0
cmluZ1s2XSkpOwogfQogCiBDb2xvcklucHV0VHlwZTo6fkNvbG9ySW5wdXRUeXBlKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTczLDcg
Kzk3Myw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxMZW5ndGhUb1N0eWxlKE0KICAgICBh
ZGRQcm9wZXJ0eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoc3R5bGUsIHByb3BlcnR5SUQs
IHZhbHVlKTsKIH0KIAotc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVn
YWN5UnVsZXMoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKK3N0YXRpYyBTaW1wbGVDb2xvciBw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29uc3QgU3RyaW5nJiBjb2xvclN0
cmluZykKIHsKICAgICAvLyBQZXIgc3BlYywgb25seSBsb29rIGF0IHRoZSBmaXJzdCAxMjggZGln
aXRzIG9mIHRoZSBzdHJpbmcuCiAgICAgY29uc3Qgc2l6ZV90IG1heENvbG9yTGVuZ3RoID0gMTI4
OwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAgc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0
aENyYXp5TAogICAgIGRpZ2l0QnVmZmVyLmFwcGVuZCgnMCcpOwogCiAgICAgaWYgKGRpZ2l0QnVm
ZmVyLnNpemUoKSA8IDYpCi0gICAgICAgIHJldHVybiBtYWtlUkdCKHRvQVNDSUlIZXhWYWx1ZShk
aWdpdEJ1ZmZlclswXSksIHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclsxXSksIHRvQVNDSUlI
ZXhWYWx1ZShkaWdpdEJ1ZmZlclsyXSkpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclswXSksIHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1
ZmZlclsxXSksIHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclsyXSkpOwogCiAgICAgLy8gU3Bs
aXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVudHMsIHRoZW4gc2VhcmNoIHRoZSBsYXN0
IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgogICAgIEFTU0VSVChkaWdpdEJ1ZmZlci5zaXpl
KCkgPj0gNik7CkBAIC0xMDI2LDcgKzEwMjYsNyBAQCBzdGF0aWMgUkdCQTMyIHBhcnNlQ29sb3JT
dHJpbmdXaXRoQ3JhenlMCiAgICAgaW50IHJlZFZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0
QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXggKyAxXSk7CiAgICAgaW50IGdy
ZWVuVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0sIGRpZ2l0
QnVmZmVyW2dyZWVuSW5kZXggKyAxXSk7CiAgICAgaW50IGJsdWVWYWx1ZSA9IHRvQVNDSUlIZXhW
YWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdpdEJ1ZmZlcltibHVlSW5kZXggKyAxXSk7
Ci0gICAgcmV0dXJuIG1ha2VSR0IocmVkVmFsdWUsIGdyZWVuVmFsdWUsIGJsdWVWYWx1ZSk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWRWYWx1ZSwgZ3JlZW5WYWx1ZSwgYmx1ZVZhbHVl
KTsKIH0KIAogLy8gQ29sb3IgcGFyc2luZyB0aGF0IG1hdGNoZXMgSFRNTCdzICJydWxlcyBmb3Ig
cGFyc2luZyBhIGxlZ2FjeSBjb2xvciB2YWx1ZSIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSGFzaFRvb2xz
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNDAsODcg
KzM5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgbGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0aWMgY29uc3RleHByIFNpbXBs
ZUNvbG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAKLS8vIG9yaWdpbmFsbHkgbW92
ZWQgaGVyZSBmcm9tIHRoZSBDU1MgcGFyc2VyCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUhleENvbG9ySW50ZXJuYWwoY29uc3QgQ2hh
cmFjdGVyVHlwZSogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICBp
ZiAobGVuZ3RoICE9IDMgJiYgbGVuZ3RoICE9IDQgJiYgbGVuZ3RoICE9IDYgJiYgbGVuZ3RoICE9
IDgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCB2YWx1ZSA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNB
U0NJSUhleERpZ2l0KG5hbWVbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB2YWx1ZSA8PD0gNDsKLSAgICAgICAgdmFsdWUgfD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0p
OwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDYpIHsKLSAgICAgICAgcmdiID0geyAweEZGMDAw
MDAwIHwgdmFsdWUgfTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5n
dGggPT0gOCkgewotICAgICAgICAvLyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRvIFJHQkEgb3Jk
ZXIsIGJ1dCB0aGUgUkdCQTMyIHR5cGUKLSAgICAgICAgLy8gZXhwZWN0cyB0aGVtIHRvIGJlIGlu
IEFSR0Igb3JkZXIsIHNvIHdlIHJpZ2h0IHJvdGF0ZSBlaWdodCBiaXRzLgotICAgICAgICByZ2Ig
PSB7IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA0KSB7Ci0gICAgICAgIC8vICNhYmNkIGNvbnZlcnRzIHRv
IGRkYWFiYmNjIGluIFJHQkEzMi4KLSAgICAgICAgcmdiID0geyAodmFsdWUgJiAweEYpIDw8IDI4
IHwgKHZhbHVlICYgMHhGKSA8PCAyNAotICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMDApIDw8
IDggfCAodmFsdWUgJiAweEYwMDApIDw8IDQKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDAp
IDw8IDQgfCAodmFsdWUgJiAweEYwMCkKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAo
dmFsdWUgJiAweEYwKSA+PiA0IH07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAv
LyAjYWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKLSAgICByZ2IgPSB7IDB4RkYwMDAwMDAKLSAgICAg
ICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUgJiAweEYwMCkgPDwgOAotICAgICAg
ICB8ICh2YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUgJiAweEYwKSA8PCA0Ci0gICAgICAgIHwg
KHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKSB9OwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IExDaGFyKiBuYW1lLCB1bnNpZ25l
ZCBsZW5ndGgsIFJHQkEzMiYgcmdiKQotewotICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJu
YWwobmFtZSwgbGVuZ3RoLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJzZUhleENvbG9yKGNv
bnN0IFVDaGFyKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJHQkEzMiYgcmdiKQotewotICAgIHJl
dHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoLCByZ2IpOwotfQotCi1ib29s
IENvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJn
Yik7Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5s
ZW5ndGgoKSwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJp
bmdWaWV3JiBuYW1lLCBSR0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1l
Lmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczgoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCiBpbnQgZGlm
ZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImIGMxLCBjb25zdCBDb2xvciYgYzIpCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYXNzdW1pbmcgdGhhdCB0aGUgY29sb3JzIGFyZSBpbiB0aGUgc2Ft
ZSBjb2xvcnNwYWNlLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSByZXR1cm4g
YSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAgICAgLy8gc2l0
ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4gV2UnZCBuZWVk
IHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNoYW5nZSB0aGVt
IDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJl
ZCgpICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7Ci0gICAgaW50IGMxR3JlZW4gPSBj
MS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLnJnYigp
LmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMx
LmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7Ci0g
ICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLnJlZCgpICog
MjU1IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7Ci0gICAgaW50IGMyR3JlZW4gPSBjMi5pc0V4
dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLnJnYigpLmdyZWVu
Q29tcG9uZW50KCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0
ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50
IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDog
YzEuYXNTaW1wbGVDb2xvcigpLnJlZENvbXBvbmVudCgpOworICAgIGludCBjMUdyZWVuID0gYzEu
aXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5hc1NpbXBs
ZUNvbG9yKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzFCbHVlID0gYzEuaXNFeHRlbmRl
ZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMxLmFzU2ltcGxlQ29sb3IoKS5i
bHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNF
eHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIuYXNTaW1wbGVDb2xvcigpLnJlZENvbXBvbmVudCgp
OworICAgIGludCBjMkdyZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdy
ZWVuKCkgKiAyNTUgOiBjMi5hc1NpbXBsZUNvbG9yKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBp
bnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1
NSA6IGMyLmFzU2ltcGxlQ29sb3IoKS5ibHVlQ29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFS
ZWQgLSBjMlJlZDsKICAgICBpbnQgZEcgPSBjMUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIg
PSBjMUJsdWUgLSBjMkJsdWU7CkBAIC0xNDYsMzAgKzc2LDI4IEBAIHN0YXRpYyBpbmxpbmUgY29u
c3QgTmFtZWRDb2xvciogZmluZE5hbWUKIENvbG9yOjpDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgaWYgKG5hbWVbMF0gPT0gJyMnKSB7Ci0gICAgICAgIFJHQkEzMiBjb2xvcjsKLSAg
ICAgICAgYm9vbCB2YWxpZDsKLQorICAgICAgICBPcHRpb25hbDxTaW1wbGVDb2xvcj4gY29sb3I7
CiAgICAgICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhl
eENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7
CisgICAgICAgICAgICBjb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1l
Lmxlbmd0aCgpIC0gMSwgY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xvcjo6
cGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEp
OwogCi0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAg
ICAgIGlmIChjb2xvcikKKyAgICAgICAgICAgIHNldFNpbXBsZUNvbG9yKCpjb2xvcik7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihu
YW1lKSkKLSAgICAgICAgICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAg
ICAgICAgICAgIHNldFNpbXBsZUNvbG9yKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwogICAg
IH0KIH0KIAogQ29sb3I6OkNvbG9yKGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgaWYgKG5hbWVb
MF0gPT0gJyMnKSB7Ci0gICAgICAgIFNpbXBsZUNvbG9yIGNvbG9yOwotICAgICAgICBpZiAocGFy
c2VIZXhDb2xvcihyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oJm5hbWVbMV0pLCBzdGQ6
OnN0cmxlbigmbmFtZVsxXSksIGNvbG9yKSkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7Cisg
ICAgICAgIGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oJm5hbWVbMV0pLCBzdGQ6OnN0cmxlbigmbmFtZVsxXSkpOwor
ICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcigqY29sb3IpOwog
ICAgIH0gZWxzZSBpZiAoYXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4o
bmFtZSkpKQotICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7CisgICAg
ICAgIHNldFNpbXBsZUNvbG9yKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwogfQogCiBDb2xv
cjo6Q29sb3IoY29uc3QgQ29sb3ImIG90aGVyKQpAQCAtMTkyLDggKzEyMCw4IEBAIENvbG9yOjpD
b2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMKIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5k
ZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0
IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAvLyB0b3AgMzIg
Yml0cyB3aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KLSAgICBt
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOworICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29w
eWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgIG1fY29sb3JEYXRhLnNp
bXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwogICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAm
ZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7CiAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiB9CkBA
IC0yMjIsNyArMTUwLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikK
ICAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKIAogICAgIG1fY29s
b3JEYXRhID0gb3RoZXIubV9jb2xvckRhdGE7Ci0gICAgb3RoZXIubV9jb2xvckRhdGEucmdiYUFu
ZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKyAgICBvdGhlci5tX2NvbG9yRGF0YS5zaW1wbGVD
b2xvckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNvbG9yOwogCiAgICAgcmV0dXJuICp0aGlzOwog
fQpAQCAtMjMxLDI2ICsxNTksMjcgQEAgU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QK
IHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNz
c1RleHQoKTsKLSAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXphdGlvbkZvckhUTUwoKTsKKyAgICBy
ZXR1cm4gYXNTaW1wbGVDb2xvcigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7CiB9CiAKIFN0cmlu
ZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAg
ICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlh
bGl6YXRpb25Gb3JDU1MoKTsKKyAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigpLnNlcmlhbGl6YXRp
b25Gb3JDU1MoKTsKIH0KIAogU3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBleHRlbmRlZCBjb2xvcnMuCi0gICAgcmV0
dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCk7CisgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAg
cmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgp
OwogfQogCiBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRo
aXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICBp
ZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZUNvbG9yKCkgPT0gYmxhY2spCiAgICAgICAgIHJl
dHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9
IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTI3NSw3ICsyMDQsNyBAQCBDb2xvciBDb2xv
cjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogewogICAgIC8vIEhh
cmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSB3aGl0
ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZUNvbG9yKCkgPT0gd2hpdGUpCiAg
ICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxl
RmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtMzI0LDcgKzI1Myw3IEBAIENv
bG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSAKICAgICBpbnQgZyA9IChzZWxm
RyAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlRykg
LyBkOwogICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhG
RiAqIHNvdXJjZUEgKiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gbWFrZVJHQkEociwgZywg
YiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKIH0KIAogQ29s
b3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKQEAgLTM1NCw3ICsyODMsNyBAQCBDb2xv
ciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogICAgICAgICBpbnQgZyA9IGJsZW5kQ29t
cG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50
KGV4aXN0aW5nQiwgYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gbWFrZVJHQkEo
ciwgZywgYiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywg
YiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzg4LDcgKzMxNyw3IEBAIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1
bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
Zy4KICAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAweEZGOwogCi0gICAgQ29sb3IgcmVz
dWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOworICAgIENvbG9yIHJlc3VsdCA9
IGFzU2ltcGxlQ29sb3IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2Vt
YW50aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtNDAyLDkgKzMzMSw5IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXQKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0
aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxw
aGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CisgICAgdWludDhfdCBuZXdBbHBoYSA9
IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQg
PSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CisgICAgQ29sb3IgcmVzdWx0ID0gYXNT
aW1wbGVDb2xvcigpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKICAgICBpZiAoaXNTZW1hbnRp
YygpKQogICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CkBAIC00MTUsOCArMzQ0LDggQEAgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEo
ZmxvYQogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBDb2xvciB7IGFzRXh0
ZW5kZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKSB9OwogCi0gICAgYXV0byBbciwg
ZywgYiwgZXhpc3RpbmdBbHBoYV0gPSByZ2IoKTsKLSAgICByZXR1cm4geyAweEZGIC0gciwgMHhG
RiAtIGcsIDB4RkYgLSBiLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgfTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBleGlzdGluZ0FscGhhXSA9IGFzU2ltcGxlQ29sb3IoKTsKKyAgICByZXR1cm4g
eyAweEZGIC0gciwgMHhGRiAtIGcsIDB4RkYgLSBiLCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5
dGUoYWxwaGEpIH07CiB9CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAg
LTQzNCwxNyArMzYzLDE4IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+
IEMKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVk
Q29sb3IuY2hhbm5lbHMoKSB9OwogICAgIH0KIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdi
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBhc1NpbXBsZUNvbG9yKCk7CiAgICAgcmV0dXJu
IHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1
NS4wZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xv
cjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAogewotICAgIGlmICghaXNFeHRlbmRl
ZCgpKQotICAgICAgICByZXR1cm4gcmdiKCk7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CisgICAgfQog
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAg
cmV0dXJuIG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOworICAgIHJldHVybiBhc1Np
bXBsZUNvbG9yKCk7CiB9CiAKIEZsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVu
dHNMb3NzeSgpIGNvbnN0CkBAIC00NzYsMjAgKzQwNiwyMCBAQCBDb2xvciBibGVuZChjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sCiAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhl
IHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgogICAg
IGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxp
ZWRSR0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0
byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9t
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1
dG8gcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAvLyBTaW5j
ZSBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3Bl
Y2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1h
a2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
KSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBhdXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkg
PyBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0g
bWFrZVJHQkEoCisgICAgU2ltcGxlQ29sb3IgcHJlbXVsdEJsZW5kZWQgPSBtYWtlU2ltcGxlQ29s
b3IoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLnJlZENvbXBvbmVudCgpLCBw
cmVtdWx0VG8ucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQocHJlbXVsdEZyb20uZ3JlZW5Db21wb25lbnQoKSwgcHJlbXVsdFRvLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmFscGhhQ29tcG9uZW50KCksIHByZW11bHRUby5h
bHBoYUNvbXBvbmVudCgpLCBwcm9ncmVzcykKICAgICApOwogCi0gICAgcmV0dXJuIG1ha2VVblBy
ZW11bHRpcGxpZWRSR0JBKHByZW11bHRCbGVuZGVkKTsKKyAgICByZXR1cm4gbWFrZVVucHJlbXVs
dGlwbGllZFNpbXBsZUNvbG9yKHByZW11bHRCbGVuZGVkKTsKIH0KIAogQ29sb3IgYmxlbmRXaXRo
b3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91Ymxl
IHByb2dyZXNzKQpAQCAtNTEyLDEzICs0NDIsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0
aXBseShjb25zdCBDb2xvCiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFsaWQoKQogewotICAgIG1fY29s
b3JEYXRhLnJnYmFBbmRGbGFncyB8PSB2YWxpZFJHQkFDb2xvcjsKLX0KLQotY29uc3QgRXh0ZW5k
ZWRDb2xvciYgQ29sb3I6OmFzRXh0ZW5kZWQoKSBjb25zdAotewotICAgIEFTU0VSVChpc0V4dGVu
ZGVkKCkpOwotICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKKyAgICBtX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7CiB9CiAKIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24g
MjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCi0jaW5j
bHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNo
YXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvTENo
YXIuaD4KIAogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29sb3IqIENHQ29sb3JSZWY7
CkBAIC02NCwzOCArNjAsMzggQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwg
dGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhl
IG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCiAKLSAgICBD
b2xvcihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKQorICAgIENvbG9yKFNpbXBsZUNv
bG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWxpZCkK
LSAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcihj
b2xvcik7CiAgICAgfQogCiAgICAgZW51bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07Ci0gICAg
Q29sb3IoUkdCQTMyIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICBDb2xvcihTaW1wbGVDb2xvciBj
b2xvciwgU2VtYW50aWNUYWcpCiAgICAgewotICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAg
ICBzZXRTaW1wbGVDb2xvcihjb2xvcik7CiAgICAgICAgIHNldElzU2VtYW50aWMoKTsKICAgICB9
CiAKICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogICAgIHsKLSAgICAgICAgc2V0UkdC
KHIsIGcsIGIpOworICAgICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywg
YikpOwogICAgIH0KIAogICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogICAg
IHsKLSAgICAgICAgc2V0UkdCKG1ha2VSR0JBKHIsIGcsIGIsIGEpKTsKKyAgICAgICAgc2V0U2lt
cGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKICAgICB9CiAKICAgICBDb2xv
cihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogICAgIHsKLSAgICAgICAgc2V0
UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpKTsKKyAgICAgICAgc2V0U2ltcGxl
Q29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiAgICAgfQogCiAg
ICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBo
YSB2YWx1ZXMuCiAgICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywg
ZmxvYXQgYSkKICAgICB7Ci0gICAgICAgIHNldFJHQihtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5
LCBrLCBhKSk7CisgICAgICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DTVlL
QShjLCBtLCB5LCBrLCBhKSk7CiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
Q29sb3IoY29uc3QgU3RyaW5nJik7CkBAIC0xMDMsMjMgKzk5LDIzIEBAIHB1YmxpYzoKIAogICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICB7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRSR0JBQ29sb3Is
ICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5k
ZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZh
bGlkUkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxv
b2sgbGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRl
bGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11
c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUi
KTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZFNpbXBsZUNv
bG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4
dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRIYXNoVmFsdWUg
JiB2YWxpZFNpbXBsZUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
bm90IGxvb2sgbGlrZSBhIHZhbGlkIFNpbXBsZUNvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFs
dWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xvciB3b3VsZG4ndCBo
YXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVk
SGFzaFZhbHVlOwogICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CiAgICAgfQogCiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgICAg
IHJldHVybiBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFs
dWU7CiAgICAgfQogCiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVl
VHlwZSkKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZh
bGlkUkdCQUNvbG9yLCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlr
ZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFs
dWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21l
IGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAg
bV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkU2ltcGxlQ29sb3IsICJDb2xvcidzIGVt
cHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBk
ZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVD
b2xvciB3b3VsZG4ndCBoYXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgPSBlbXB0eUhhc2hWYWx1ZTsKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIApAQCAtMTQ3LDEzICsxNDMsMTMgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdGhl
IGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0aGVyICNSUkdHQkIgb3IgI1JSR0dCQkFBCiAgICAgU3Ry
aW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKLSAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFn
cyAmIHZhbGlkUkdCQUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIHZh
bGlkU2ltcGxlQ29sb3JCaXQpOyB9CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNP
cGFxdWUoKTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQor
ICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVu
ZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZUNvbG9yKCkuaXNPcGFxdWUoKTsgfQorICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPiAwLjAgOiBhc1NpbXBsZUNvbG9yKCkuaXNWaXNpYmxlKCk7IH0KIAotICAg
IGludCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpICogMjU1IDogcmdiKCkuYWxwaGFDb21wb25lbnQoKTsgfQotICAgIGZsb2F0IGFscGhh
QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBo
YSgpIDogcmdiKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KKyAgICBpbnQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6
IGFzU2ltcGxlQ29sb3IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkg
OiBhc1NpbXBsZUNvbG9yKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KIAogICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKIApAQCAtMTkxLDcgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICBDb2xv
ciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmln
aW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50
aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5k
RmxhZ3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNTZW1hbnRpYygp
IGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkgJiYgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9y
QW5kRmxhZ3MgJiBpc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpOyB9CiAKICNpZiBQTEFURk9STShH
VEspCiAgICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOwpAQCAtMjEwLDExICsyMDYsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdDsK
ICNlbmRpZgogCi0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmLCBS
R0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcm
LCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IExDaGFyKiwg
dW5zaWduZWQsIFJHQkEzMiYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7Ci0KICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBs
ZUNvbG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsKQEAgLTIyNCwxNyArMjE1LDExIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgY29tcG9zaXRpb25GaWxsIHsgMHgzQ0FGQzBFMyB9OwotI2Vsc2UKLSAgICBzdGF0aWMg
Y29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKLSNl
bmRpZgotCiAgICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biAhKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworICAgICAg
ICByZXR1cm4gIShtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBs
ZUNvbG9yKTsKICAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRXh0ZW5kZWRDb2xvciYg
YXNFeHRlbmRlZCgpIGNvbnN0OworICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQo
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29s
b3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9yJiYpOwpAQCAt
MjUyLDE5ICsyMzcsMTkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBS
R0JBMzIgcmdiKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikg
eyBzZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0KLSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwot
ICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlz
U2VtYW50aWNSQkdBQ29sb3JCaXQ7IH0KKyAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZUNv
bG9yKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKKyAg
ICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
fD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBh
biBFeHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxp
ZCBSR0JBMzIuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBSR0JBMzIuCisgICAgLy8g
MHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KKyAgICAvLyAweF9fX19fX18x
MSBpcyBhIHZhbGlkIFNpbXBsZUNvbG9yLgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBleHRl
bmRlZENvbG9yID0gMHgwOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlkUkdCQUNv
bG9yID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvckJpdCA9
IDB4MjsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3IgPSAweDM7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQgPSAweDQ7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRTaW1wbGVDb2xvciA9IDB4MTsKKyAgICBz
dGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvckJpdCA9IDB4MjsKKyAgICBzdGF0
aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvciA9IDB4MzsKKyAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0ID0gMHg0OwogCiAgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7CiAg
ICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZG
RkZCOwpAQCAtMjcyLDcgKzI1Nyw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB0YWdBc1ZhbGlkKCk7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRG
bGFncyB7IGludmFsaWRSR0JBQ29sb3IgfTsKKyAgICAgICAgdWludDY0X3Qgc2ltcGxlQ29sb3JB
bmRGbGFncyB7IGludmFsaWRTaW1wbGVDb2xvciB9OwogICAgICAgICBFeHRlbmRlZENvbG9yKiBl
eHRlbmRlZENvbG9yOwogICAgIH0gbV9jb2xvckRhdGE7CiB9OwpAQCAtMzAwLDcgKzI4NSw3IEBA
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGMKICAgICBpZiAoYS5pc0V4
dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9y
c0VxdWFsKGEsIGIpOwogCi0gICAgcmV0dXJuIGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09
IGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzOworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnNp
bXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzOwog
fQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
YikKQEAgLTMxMiwxNSArMjk3LDE0IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGMKIHsKICAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5t
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JCaXQp
ID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FD
b2xvckJpdCk7CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
JiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuc2lt
cGxlQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0KTsKIH0K
IAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRl
bmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKLQotICAgIHJldHVy
biBXVEY6OmludEhhc2gobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzKTsKKyAgICByZXR1cm4gV1RG
OjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAgLTMzMywxNyArMzE3LDIyIEBA
IGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0EKICAgICByZXR1cm4gYWxw
aGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgp
KSA6ICp0aGlzOwogfQogCi1pbmxpbmUgUkdCQTMyIENvbG9yOjpyZ2IoKSBjb25zdAoraW5saW5l
IGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghaXNFeHRlbmRlZCgpKSBoZXJlLCBvciBwcm9kdWNl
Ci0gICAgLy8gYW4gUkdCQTMyIGVxdWl2YWxlbnQgZm9yIGFuIEV4dGVuZGVkQ29sb3IuIElkZWFs
bHkgdGhlIGZvcm1lciwKLSAgICAvLyBzbyB3ZSBjYW4gYXVkaXQgYWxsIHRoZSByZ2IoKSBjYWxs
IHNpdGVzIHRvIGhhbmRsZSBleHRlbmRlZC4KLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID4+IDMyKSB9OworICAgIEFTU0VSVChpc0V4
dGVuZGVkKCkpOworICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0KIAot
aW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdiKQoraW5saW5lIGNvbnN0IFNpbXBs
ZUNvbG9yIENvbG9yOjphc1NpbXBsZUNvbG9yKCkgY29uc3QKIHsKLSAgICBtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiLnZhbHVlKCkpIDw8IDMyOwor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFpc0V4dGVuZGVkKCkpIGhlcmUgb25jZSB3
ZSBoYXZlIHZlcmlmaWVkIGFsbAorICAgIC8vIGNhbGwgc2l0ZXMgYXJlIGNoZWNraW5nIGlzRXh0
ZW5kZWQoKS4KKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyA+PiAzMikgfTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNl
dFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yIHNpbXBsZUNvbG9yKQoreworICAgIG1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2ltcGxlQ29sb3Iu
dmFsdWUoKSkgPDwgMzI7CiAgICAgdGFnQXNWYWxpZCgpOwogfQogCkBAIC0zNTQsNyArMzQzLDcg
QEAgaW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tDb2xvcihjb25zdCBDbwogICAgICAgICByZXR1
cm4gIWV4dGVuZGVkQ29sb3IucmVkKCkgJiYgIWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0
ZW5kZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9yOjpibGFjazsKKyAgICByZXR1cm4gY29s
b3IuYXNTaW1wbGVDb2xvcigpID09IENvbG9yOjpibGFjazsKIH0KIAogaW5saW5lIGJvb2wgQ29s
b3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNjQsNyArMzUzLDcgQEAg
aW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDbwogICAgICAgICByZXR1cm4g
ZXh0ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSA9PSAxICYm
IGV4dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBjb2xvci5yZ2IoKSA9PSBDb2xvcjo6d2hpdGU7Cisg
ICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlQ29sb3IoKSA9PSBDb2xvcjo6d2hpdGU7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0zODksMTAgKzM3OCw4IEBAIHZvaWQgQ29sb3I6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb24KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBl
bmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCiAKLSAgICB1aW50MzJfdCB2YWx1
ZSA9IHJnYigpLnZhbHVlKCk7Ci0KICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8
PCB2YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpOwogfQogCiB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNDE4LDcgKzQwNSw3IEBAIE9wdGlvbmFsPENvbG9y
PiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gQ29sb3IgeyByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSwgY29sb3JTcGFjZSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxp
ZDsKQEAgLTQyNiw3ICs0MTMsNyBAQCBPcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNv
ZGVyJiBkCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICByZXR1cm4gQ29sb3IgeyB9OwogCiAg
ICAgdWludDMyX3QgdmFsdWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yQ29tcG9uCiBpbmxpbmUgdWludDhfdCBjbGFt
cGVkQ29sb3JDb21wb25lbnQoZmxvYXQgZikKIHsKICAgICAvLyBTZWUgYWxzbyBjb2xvckZsb2F0
VG9SR0JBQnl0ZSgpLgotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2Fz
dDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAyNTUpKTsKKyAgICByZXR1cm4gc3RkOjpjbGFt
cChzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOwogfQogCiBp
bmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwg
dW5zaWduZWQgcm93Qnl0ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHBpeGVsLnJlZENvbXBvbmVudCgpLCBwaXhlbC5ncmVlbkNvbXBvbmVudCgp
LCBwaXhlbC5ibHVlQ29tcG9uZW50KCksIHBpeGVsLmFscGhhQ29tcG9uZW50KCksIGZhbHNlKTsK
KyAgICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbC5y
ZWRDb21wb25lbnQoKSwgcGl4ZWwuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWwuYmx1ZUNvbXBvbmVu
dCgpLCBwaXhlbC5hbHBoYUNvbXBvbmVudCgpLCBmYWxzZSk7CiAKICAgICAgICAgdW5zaWduZWQg
ZCA9IDI1NSAtIGE7CiAKQEAgLTE3MCw5ICsxNzAsOSBAQCBwdWJsaWM6CiAgICAgICAgIGEgKz0g
ZmFzdERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgICAgICBp
ZiAobV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBn
LCBiLCBhKS52YWx1ZSgpOworICAgICAgICAgICAgKmRlc3QgPSBtYWtlU2ltcGxlQ29sb3Iociwg
ZywgYiwgYSkudmFsdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgKmRlc3QgPSBtYWtl
VW5QcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKS52YWx1ZSgpOworICAgICAgICAgICAgKmRl
c3QgPSBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IociwgZywgYiwgYSkudmFsdWUoKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CkBAIC0yMjUsOSArMjI1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJl
dHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihyLCBnLCBiLCBh
LCBmYWxzZSkudmFsdWUoKTsKIAotICAgICAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgYSku
dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKS52YWx1
ZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3Bp
eGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNTMgKzQzLDUz
IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVkQ2gKICAgICByZXR1cm4g
KGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKIH0KIAotUkdCQTMyIG1ha2VQcmVt
dWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQor
U2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGlu
dCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQogewotICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0
aXBsaWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwg
Y2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEsIGNlaWxpbmcp
LCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5u
ZWwoYiwgYSwgY2VpbGluZyksIGEpOwogfQogCi1SR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JB
KFJHQkEzMiBwaXhlbENvbG9yKQorU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVD
b2xvcihTaW1wbGVDb2xvciBwaXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzT3Bh
cXVlKCkpCiAgICAgICAgIHJldHVybiBwaXhlbENvbG9yOwotICAgIHJldHVybiBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNv
bXBvbmVudCgpKTsKKyAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhl
bENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVs
Q29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwogfQog
Ci1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpCitTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCiB7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGll
ZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlw
bGllZENoYW5uZWwoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVt
dWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKLVJHQkEzMiBtYWtlVW5QcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK1NpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRp
cGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvciBwaXhlbENvbG9yKQogewogICAgIGlmIChwaXhl
bENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENvbG9yLmlzT3BhcXVlKCkpCi0gICAgICAgIHJl
dHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBw
aXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBw
aXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByZXR1cm4gbWFrZVVucHJlbXVs
dGlwbGllZFNpbXBsZUNvbG9yKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSk7CiAgICAgcmV0dXJuIHBpeGVsQ29sb3I7CiB9CiAKLVJHQkEzMiBt
YWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQor
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKQogewotICAgIHJldHVybiBtYWtlUkdCQShjb2xvckZsb2F0VG9SR0JB
Qnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIp
LCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihj
b2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUociksIGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0
ZShnKSwgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGIpLCBjb2xvckZsb2F0VG9TaW1wbGVD
b2xvckJ5dGUoYSkpOwogfQogCi1SR0JBMzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBodWUsIGZs
b2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCitTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZs
b2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0
b3IgPSAyNTUuMDsKICAgICBGbG9hdENvbXBvbmVudHMgZmxvYXRSZXN1bHQgPSBoc2xUb1NSR0Io
eyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKAorICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgIHJvdW5kKGZsb2F0UmVz
dWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVz
dWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVz
dWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVz
dWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3RvcikpOwogfQogCi1SR0JBMzIgbWFrZVJHQkFG
cm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKK1Np
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9h
dCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewogICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKICAg
ICBpbnQgciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICog
KDEgLSBjKSkpOwogICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAw
KSAqIChjb2xvcnMgKiAoMSAtIG0pKSk7CiAgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5l
eHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKLSAgICByZXR1cm4gbWFrZVJH
QkEociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5l
eHRhZnRlcigyNTYsIDApICogYSkpOwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6
YXRpb25Gb3JIVE1MKCkgY29uc3QKQEAgLTEzNSw0ICsxMzUsNzMgQEAgU3RyaW5nIFNpbXBsZUNv
bG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZAogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4
KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNv
bXBvbmVudCgpLCAyKSk7CiB9CiAKKy8vIG9yaWdpbmFsbHkgbW92ZWQgaGVyZSBmcm9tIHRoZSBD
U1MgcGFyc2VyCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxp
bmUgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjb25zdCBDaGFy
YWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCAhPSAz
ICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHVuc2lnbmVkIHZhbHVlID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4
RGlnaXQobmFtZVtpXSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICB2YWx1ZSA8PD0gNDsKKyAgICAgICAgdmFsdWUgfD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0p
OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDYpCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OworICAgIGlmIChsZW5ndGggPT0gOCkgeworICAgICAg
ICAvLyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRvIFJHQkEgb3JkZXIsIGJ1dCB0aGUgU2ltcGxl
Q29sb3IgdHlwZQorICAgICAgICAvLyBleHBlY3RzIHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwg
c28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMuCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09
IDQpIHsKKyAgICAgICAgLy8gI2FiY2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gU2ltcGxlQ29s
b3IuCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7CisgICAgICAgICAgICAgICh2YWx1ZSAm
IDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0CisgICAgICAgICAgICB8ICh2YWx1ZSAm
IDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAorICAgICAgICAgICAgfCAodmFs
dWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQorICAgICAgICAgICAgfCAodmFsdWUg
JiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQKKyAgICAgICAgfTsKKyAgICB9CisgICAgLy8g
I2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsKKyAgICAg
ICAgICAoMHhGRjAwMDAwMCkKKyAgICAgICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFs
dWUgJiAweEYwMCkgPDwgOAorICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUg
JiAweEYwKSA8PCA0CisgICAgICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhG
KQorICAgIH07Cit9CisKK09wdGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb25zdCBMQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVy
biBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoKTsKK30KKworT3B0aW9uYWw8U2lt
cGxlQ29sb3I+IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFVDaGFyKiBuYW1lLCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1l
LCBsZW5ndGgpOworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNl
SGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5h
bWUubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZUhleENvbG9y
KG5hbWUuY2hhcmFjdGVyczgoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSk7Cit9CisKK09wdGlvbmFs
PFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3
JiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgaWYg
KCFsZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKG5hbWUuaXM4
Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwg
bmFtZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJz
MTYoKSwgbmFtZS5sZW5ndGgoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShy
ZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTYgQEAKICNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4K
KyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIENvbG9yIHZhbHVlIHdpdGggOC1iaXQgY29tcG9uZW50
cyBmb3IgcmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhLgogLy8gRm9yIGhpc3RvcmljYWwgcmVh
c29ucywgc3RvcmVkIGFzIGEgMzItYml0IGludGVnZXIsIHdpdGggYWxwaGEgaW4gdGhlIGhpZ2gg
Yml0czogQVJHQi4KKy8vIEZJWE1FOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBjb25zb2xpZGF0ZWQg
d2l0aCBDb2xvckNvbXBvbmVudHMuCiBjbGFzcyBTaW1wbGVDb2xvciB7CiBwdWJsaWM6CiAgICAg
Y29uc3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFs
dWUgfSB7IH0KQEAgLTcwLDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBh
bHBoYUNvbXBvbmVudCgpOwogICAgIH0KIAorICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xv
cj4gcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2lt
cGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBP
cHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVuc2lnbmVk
KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCk7CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAg
fTsKIH07CkBAIC03NywyMCArODYsMTcgQEAgcHJpdmF0ZToKIGJvb2wgb3BlcmF0b3I9PShTaW1w
bGVDb2xvciwgU2ltcGxlQ29sb3IpOwogYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yLCBTaW1w
bGVDb2xvcik7CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdyYXRpbmcgdG8gdGhl
IG5ldyBuYW1lLgotdXNpbmcgUkdCQTMyID0gU2ltcGxlQ29sb3I7Ci0KLWNvbnN0ZXhwciBSR0JB
MzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworY29uc3RleHByIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOwogCi1SR0JBMzIg
bWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNl
aWxpbmcgPSB0cnVlKTsKLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKLVJH
QkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
Ci1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKLQotV0VCQ09SRV9FWFBP
UlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIs
IGZsb2F0IGEpOwotV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQg
aCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7Ci1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0Eo
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CitTaW1wbGVDb2xv
ciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBh
LCBib29sIGNlaWxpbmcgPSB0cnVlKTsKK1NpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2lt
cGxlQ29sb3IoU2ltcGxlQ29sb3IpOworU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNp
bXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1NpbXBsZUNvbG9yIG1ha2VV
bnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CisKK1dFQkNPUkVfRVhQT1JU
IFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywg
ZmxvYXQgYiwgZmxvYXQgYSk7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsKK1NpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5
LCBmbG9hdCBrLCBmbG9hdCBhKTsKIAogdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGludCk7CiB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwpAQCAtOTgs
NyArMTA0LDcgQEAgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KQogdWlu
dDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERp
dmlkZUJ5MjU1KHVpbnQxNl90KTsKIAotdWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9h
dCk7Cit1aW50OF90IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShmbG9hdCk7CiAKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKQEAgLTEx
MiwxMiArMTE4LDEyIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kK
IAogaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKDI1NSwgdmFsdWUpKTsKKyAgICByZXR1
cm4gc3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKIH0KIAogaW5saW5lIHVpbnQ4X3Qgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3RkOjptYXgo
MC5mLCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKKyAgICByZXR1cm4gc3Rk
OjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5mLCAyNTUuZik7CiB9CiAKIGlubGluZSB1aW50
MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKQEAgLTEzNCwyMSArMTQwLDIx
IEBAIGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QKICAgICByZXR1cm4g
YXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9CiAKLWlubGluZSB1aW50OF90IGNv
bG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCitpbmxpbmUgdWludDhfdCBjb2xvckZsb2F0VG9T
aW1wbGVDb2xvckJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBGSVhNRTogQ29uc29saWRhdGUgd2l0
aCBjbGFtcGVkQ29sb3JDb21wb25lbnQoKS4KICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1
IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKLSAg
ICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1
NS4wZiAqIGYpKSwgMjU1KSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50
Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBt
YWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCitjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIs
IGcsIGIsIDB4RkYpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7
CiB9CiAKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpCitjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKQogewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6
Om1heCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihy
LCAweEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpjbGFtcChhLCAwLCAweEZGKSA8PCAyNCB8IHN0ZDo6Y2xhbXAociwg
MCwgMHhGRikgPDwgMTYgfCBzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpIDw8IDggfCBzdGQ6OmNsYW1w
KGIsIDAsIDB4RkYpKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRp
c2Nvbm5lY3QoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMy
RnJvbUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29sb3JBcnJheSkKK3N0YXRpYyBPcHRpb25hbDxT
aW1wbGVDb2xvcj4gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29s
b3JBcnJheSkKIHsKICAgICBpZiAoQ0ZBcnJheUdldENvdW50KGNvbG9yQXJyYXkpIDwgNCkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIE9wdGlv
bmFsPFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMyRgogICAgICAgICBjb21wb25lbnRBcnJheVtpXSA9
IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29t
cG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29t
cG9uZW50QXJyYXlbMF0pOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNv
bXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNv
bXBvbmVudEFycmF5WzBdKTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1Jl
ZiBhdHRyaWJ1dGVkU3RyaW5nKQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFJlZjxJbmJhbmRHZW5lcmlj
Q3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQo
YXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0g
bWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwog
ICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEZvcmVncm91bmRDb2xvcigqY29sb3IpOwpA
QCAtMjc5LDcgKzI3OSw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQ
cmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJh
eUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZB
cnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICgh
Y29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGN1
ZURhdGEtPnNldEJhY2tncm91bmRDb2xvcigqY29sb3IpOwpAQCAtMjkxLDcgKzI5MSw3IEBAIFJl
ZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBp
ZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5
KGFycmF5VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEhpZ2hsaWdodENv
bG9yKCpjb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUx
LDEwIEBAIFJldGFpblB0cjxDR0NvbG9yUmVmPiBUaW55TFJVQ2FjaGVQb2xpY3kKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xv
clJlZiBjb2xvcikKK3N0YXRpYyBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xv
cihDR0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVl
ZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIHNpemVfdCBudW1Db21wb25lbnRzID0g
Q0dDb2xvckdldE51bWJlck9mQ29tcG9uZW50cyhjb2xvcik7CiAgICAgY29uc3QgQ0dGbG9hdCog
Y29tcG9uZW50cyA9IENHQ29sb3JHZXRDb21wb25lbnRzKGNvbG9yKTsKIApAQCAtNzcsMjcgKzc5
LDMxIEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dDb2xvcihDR0NvbG8KICAgICB9CiAK
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAw
LjApOwotICAgIHJldHVybiBtYWtlUkdCQShyICogc2NhbGVGYWN0b3IsIGcgKiBzY2FsZUZhY3Rv
ciwgYiAqIHNjYWxlRmFjdG9yLCBhICogc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IociAqIHNjYWxlRmFjdG9yLCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3Rv
ciwgYSAqIHNjYWxlRmFjdG9yKTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Ip
CiB7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Ig
c3BhY2VzLgorCiAgICAgaWYgKCFjb2xvcikgewotICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5k
RmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOworICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNvbG9yOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgc2V0UkdCKG1ha2VSR0JBRnJvbUNHQ29sb3IoY29sb3IpKTsKKyAgICBzZXRTaW1wbGVD
b2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihjb2xvcikpOwogfQogCiBDb2xvcjo6Q29s
b3IoQ0dDb2xvclJlZiBjb2xvciwgU2VtYW50aWNUYWcpCiB7CisgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgaWYgKCFjb2xv
cikgewotICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9y
OworICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gaW52YWxpZFNpbXBs
ZUNvbG9yOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0UkdCKG1ha2VSR0JBRnJv
bUNHQ29sb3IoY29sb3IpKTsKKyAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9t
Q0dDb2xvcihjb2xvcikpOwogICAgIHNldElzU2VtYW50aWMoKTsKIH0KIApAQCAtMTI0LDcgKzEz
MCw3IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG8KIENHQ29sb3JS
ZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKCFjb2xvci5p
c0V4dGVuZGVkKCkpIHsKLSAgICAgICAgc3dpdGNoIChjb2xvci5yZ2IoKS52YWx1ZSgpKSB7Cisg
ICAgICAgIHN3aXRjaCAoY29sb3IuYXNTaW1wbGVDb2xvcigpLnZhbHVlKCkpIHsKICAgICAgICAg
Y2FzZSBDb2xvcjo6dHJhbnNwYXJlbnQudmFsdWUoKTogewogICAgICAgICAgICAgc3RhdGljIENH
Q29sb3JSZWYgdHJhbnNwYXJlbnRDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwogICAgICAg
ICAgICAgcmV0dXJuIHRyYW5zcGFyZW50Q0dDb2xvcjsKQEAgLTE0MCw3ICsxNDYsNyBAQCBDR0Nv
bG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBBU1NFUlQoY29sb3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLnJnYigpLnZhbHVlKCkpOwor
ICAgIEFTU0VSVChjb2xvci5pc0V4dGVuZGVkKCkgfHwgY29sb3IuYXNTaW1wbGVDb2xvcigpLnZh
bHVlKCkpOwogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVDYWNoZTxDb2xvciwg
UmV0YWluUHRyPENHQ29sb3JSZWY+LCAzMj4+IGNhY2hlOwogICAgIHJldHVybiBjYWNoZS5nZXQo
KS5nZXQoY29sb3IpLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw4ICs1MywxMCBAQCBib29sIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkKICAgICBy
ZXR1cm4gdXNlT2xkQXF1YUZvY3VzUmluZ0NvbG9yOwogfQogCi1zdGF0aWMgUkdCQTMyIG1ha2VS
R0JBRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCitzdGF0aWMgU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7CisgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgQVNTRVJU
X0FSRyhjb2xvciwgY29sb3IpOwogCiAgICAgQ0dGbG9hdCByZWRDb21wb25lbnQ7CkBAIC04MCwy
NCArODIsMjggQEAgc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21OU0NvbG9yKE5TQ29sbwogICAg
ICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVs
OnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0dXJuIG1ha2VSR0JBKHBpeGVsWzBdLCBw
aXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiAgICAgfQogCiAg
ICAgW3JnYkNvbG9yIGdldFJlZDomcmVkQ29tcG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBi
bHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBoYV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0
ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHNjYWxlRmFjdG9yICogcmVkQ29t
cG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJsdWVD
b21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3Ioc2NhbGVGYWN0b3IgKiByZWRDb21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25l
bnQsIHNjYWxlRmFjdG9yICogYmx1ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CiB9
CiAKIENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7Ci0gICAgcmV0dXJu
IENvbG9yKG1ha2VSR0JBRnJvbU5TQ29sb3IoY29sb3IpKTsKKyAgICAvLyBGSVhNRTogRXh0ZW5k
ZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKKyAgICByZXR1cm4gQ29s
b3IobWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoY29sb3IpKTsKIH0KIAogQ29sb3Igc2VtYW50
aWNDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewotICAgIHJldHVybiBDb2xvciht
YWtlUkdCQUZyb21OU0NvbG9yKGNvbG9yKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAvLyBGSVhN
RTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKKyAgICBy
ZXR1cm4gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoY29sb3IpLCBDb2xvcjo6U2Vt
YW50aWMpOwogfQogCiBOU0NvbG9yICpuc0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0Yg
Y29sb3IpCiB7Ci0gICAgc2V0UkdCKG1ha2VSR0JBKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcgKiAy
NTUsIGNvbG9yLmIgKiAyNTUsIGNvbG9yLmEgKiAyNTUpKTsKKyAgICBzZXRTaW1wbGVDb2xvciht
YWtlU2ltcGxlQ29sb3IoY29sb3IuciAqIDI1NSwgY29sb3IuZyAqIDI1NSwgY29sb3IuYiAqIDI1
NSwgY29sb3IuYSAqIDI1NSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHJldmlz
aW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENv
bG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiB7CisgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gRklY
TUU6IE1ha2UgdGhpcyB3b3JrIGZvciBhIFVJQ29sb3IgdGhhdCB3YXMgY3JlYXRlZCBmcm9tIGEg
cGF0dGVybiBvciBhIERpc3BheVAzIGNvbG9yLgogICAgIENHRmxvYXQgcmVkQ29tcG9uZW50Owog
ICAgIENHRmxvYXQgZ3JlZW5Db21wb25lbnQ7CkBAIC00Myw3ICs0NSw3IEBAIENvbG9yIGNvbG9y
RnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9u
ZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBo
YV07CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1
Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlUkdCQShzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVu
dCwgc2NhbGVGYWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9u
ZW50LCBzY2FsZUZhY3RvciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNj
YWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBz
Y2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDgsNyArMTI0OCw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3IKIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkuZnJh
bWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAg
ICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29sb3I6
OmNvbXBvc2l0aW9uRmlsbCwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9y
KCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZyYW1lKCku
ZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOworICAgICAgICBwYWludE1hcmtlZFRleHRCYWNr
Z3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlvbkhpZ2hsaWdodDo6ZGVmYXVs
dENvbXBvc2l0aW9uRmlsbENvbG9yLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5l
ZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCkpLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJh
bWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA3OSw3ICs0MDc5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRSZXNpemVyKEdyYXBoaWNzQwogICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3Qp
OwogICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwogICAg
ICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgp
ICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKENvbG9yKG1ha2VSR0IoMjE3LCAyMTcsIDIxNykpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjE3LCAyMTcsIDIxNykpOwog
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAgY29udGV4dC5kcmF3
UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNjIxMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4NSw3ICszMDg1LDcgQEAgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpQ
YWludExheWVyRmxhZz4gUgogc3RydWN0IFBhdHRlcm5EZXNjcmlwdGlvbiB7CiAgICAgQVNDSUlM
aXRlcmFsIG5hbWU7CiAgICAgRmxvYXRTaXplIHBoYXNlOwotICAgIFJHQkEzMiBmaWxsQ29sb3I7
CisgICAgU2ltcGxlQ29sb3IgZmlsbENvbG9yOwogfTsKIAogc3RhdGljIFJlZlB0cjxQYXR0ZXJu
PiBwYXR0ZXJuRm9yRGVzY3JpcHRpb24oUGF0dGVybkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBG
bG9hdFNpemUgY29udGVudE9mZnNldCwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKQEAg
LTMxNDUsNyArMzE0NSw3IEBAIHN0YXRpYyBSZWZQdHI8UGF0dGVybj4gcGF0dGVybkZvclRvdWNo
QWMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIGZpbGxD
b2xvciA9IG1ha2VSR0JBKDAsIDAsIDAsIDEyOCk7CisgICAgY29uc3RleHByIGF1dG8gZmlsbENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKICAgICBzdGF0aWMgY29uc3Qg
UGF0dGVybkRlc2NyaXB0aW9uIHBhdHRlcm5EZXNjcmlwdGlvbnNbXSA9IHsKICAgICAgICAgeyAi
YXV0byJfcywgeyB9LCBmaWxsQ29sb3IgfSwKQEAgLTMxNjUsNyArMzE2NSw3IEBAIHN0YXRpYyBS
ZWZQdHI8UGF0dGVybj4gcGF0dGVybkZvclRvdWNoQWMKIAogc3RhdGljIFJlZlB0cjxQYXR0ZXJu
PiBwYXR0ZXJuRm9yRXZlbnRMaXN0ZW5lclJlZ2lvblR5cGUoRXZlbnRMaXN0ZW5lclJlZ2lvblR5
cGUgdHlwZSwgRmxvYXRTaXplIGNvbnRlbnRPZmZzZXQsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gZmlsbENvbG9yID0gbWFrZVJHQkEoMCwgMTI4
LCAwLCAxMjgpOworICAgIGNvbnN0ZXhwciBhdXRvIGZpbGxDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigwLCAxMjgsIDAsIDEyOCk7CiAKICAgICBhdXRvIHBhdHRlcm5BbmRQaGFzZSA9IFsmXSgpIC0+
IFBhdHRlcm5EZXNjcmlwdGlvbiB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjYyMTEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2Fj
aGVkU3lzdGVtRgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhbZm9udE1hbmFnZXIg
dHJhaXRzT2ZGb250OmZvbnRdICYgTlNJdGFsaWNGb250TWFzayk7CiB9CiAKLXN0YXRpYyBSR0JB
MzIgbWVudUJhY2tncm91bmRDb2xvcigpCitzdGF0aWMgU2ltcGxlQ29sb3IgbWVudUJhY2tncm91
bmRDb2xvcigpCiB7CiAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+IG9mZnNjcmVlblJl
cCA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQ
bGFuZXM6bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAgYml0c1BlclNhbXBs
ZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNl
TmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJd
KTsKQEAgLTU2OCw3ICs1NjgsNyBAQCBzdGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29sb3Io
KQogICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpw
aXhlbCBhdFg6MCB5OjBdOwogCi0gICAgcmV0dXJuIG1ha2VSR0JBKHBpeGVsWzBdLCBwaXhlbFsx
XSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVs
WzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhl
bWVNYWM6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYy
MTExKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMC0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNv
bnNpc3RlbnRseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV0lQCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbToKKyAgICAgICAgKGNvbXBvc2l0aW9uSGlnaGxpZ2h0cyk6CisKIDIwMjAtMDUtMjQgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9yIENs
ZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBTaW1w
bGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRvIGV4
dGVuZGVkIGNvbG9ycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjYyMTExKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDYyNCw3ICs0NjI0LDcgQEAgc3RhdGljIFZlY3RvcjxXZWJDb3Jl
OjpDb21wb3NpdGlvbkhpZ2hsaQogICAgICAgICBpZiAoIWF0dHJpYnV0ZXNbTlNNYXJrZWRDbGF1
c2VTZWdtZW50QXR0cmlidXRlTmFtZV0pCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
V2ViQ29yZTo6Q29sb3IgaGlnaGxpZ2h0Q29sb3IgeyBXZWJDb3JlOjpDb2xvcjo6Y29tcG9zaXRp
b25GaWxsIH07CisgICAgICAgIFdlYkNvcmU6OkNvbG9yIGhpZ2hsaWdodENvbG9yIHsgV2ViQ29y
ZTo6Q29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvciB9Owog
ICAgICAgICBpZiAoVUlDb2xvciAqdWlDb2xvciA9IGF0dHJpYnV0ZXNbTlNCYWNrZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXSkKICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yID0gV2ViQ29yZTo6
Y29sb3JGcm9tVUlDb2xvcih1aUNvbG9yKTsKICAgICAgICAgaGlnaGxpZ2h0cy5hcHBlbmQoeyBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTlNNYXhSYW5nZShyYW5nZSkpLCBoaWdobGlnaHRDb2xvciB9KTsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIw
LTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRl
ZCBDb2xvciBDbGVhbnVwOiBVc2UgdGhlIG5hbWUgU2ltcGxlQ29sb3IgY29uc2lzdGVudGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzMzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorCiAyMDIwLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
IAogICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBh
Y2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfV2hpdGUpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBs
aWdodG5lc3MpOwogICAgIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
UkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1
dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUs
IHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlUkdCQUZy
b21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91
bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJp
cHBlZENvbG9yKTsKIH0KIApAQCAtNzcsNyArNzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9S
ZWQpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7
CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVJHQkFGcm9tSFNMQSho
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xv
cik7CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JlZW4pCiAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVJHQkFGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5l
c3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9
CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBh
bHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC0xMjUsNyArMTI1LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1
cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC0xNDEsNyArMTQxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xv
cihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
MTU3LDcgKzE1Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xv
cihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400180</attachid>
            <date>2020-05-24 14:29:38 -0700</date>
            <delta_ts>2020-05-24 16:46:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212337-20200524142937.patch</filename>
            <type>text/plain</type>
            <size>87054</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZh
c3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYXN0UGFyc2VDb2xvckludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcik6CisgICAg
ICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhleENvbG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg6Cisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIGh0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1wbGVDb2xvclZh
bHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0
YTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lQWR3YWl0YTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpuYW1l
Rm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNPcGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNTZW1hbnRpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphc1NpbXBsZUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpzZXRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNCbGFja0Nv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1doaXRlQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRSR0IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1w
ZWRDb2xvckNvbXBvbmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21D
TVlLQSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhleENvbG9ySW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VVblByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VS
R0JBMzJGcm9tRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJv
bUhTTEEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tQ01ZS0EpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5dGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCQSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNv
bG9yRnJvbUNHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFG
cm9tQ0dDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tTlND
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tTlNDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvQ29sb3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21VSUNvbG9yKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGF0dGVybkZvclRvdWNoQWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVnaW9uVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6CisK
IDIwMjAtMDUtMjQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHNvbWUgbWlzc2luZyBpbmNsdWRlcyBkdWUgdG8gdW5pZmllZCBzb3VyY2VzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckZhc3RQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSwyMCArNDA5LDIwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IENoYXIKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgQ29sb3IgZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wg
cXVpcmtzTW9kZSkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgcXVpcmtzTW9kZSkKIHsKICAgICBDU1NVbml0VHlwZSBleHBlY3QgPSBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAobGVuZ3RoID49IDQgJiYgY2hhcmFjdGVyc1swXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIHJnYjsKLSAgICAgICAgaWYgKENvbG9yOjpwYXJzZUhl
eENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAgICAgICAgICAgcmV0
dXJuIENvbG9yKHJnYik7CisgICAgICAgIGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSk7CisgICAgICAgIGlmIChjb2xvcikK
KyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICBpZiAocXVpcmtzTW9kZSAm
JiAobGVuZ3RoID09IDMgfHwgbGVuZ3RoID09IDYpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2I7Ci0g
ICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IocmdiKTsKKyAgICAgICAgYXV0byBjb2xvciA9IFNp
bXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIGlm
IChjb2xvcikKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICAvLyBUcnkg
cmdiYSgpIHN5bnRheC4KQEAgLTQzNSwxNiArNDM1LDE2IEBAIHN0YXRpYyBDb2xvciBmYXN0UGFy
c2VDb2xvckludGVybmFsKGNvbnMKICAgICAgICAgaW50IGFscGhhOwogCiAgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQp
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwg
ZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCi0g
ICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIH0KIAogICAgIC8v
IFRyeSByZ2IoKSBzeW50YXguCkBAIC00NTUsMTcgKzQ1NSwxNyBAQCBzdGF0aWMgQ29sb3IgZmFz
dFBhcnNlQ29sb3JJbnRlcm5hbChjb25zCiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50
IGJsdWU7CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBl
bmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4
cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQihyZWQsIGdy
ZWVuLCBibHVlKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KIAotICAgIHJl
dHVybiBDb2xvcigpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgdmFsdWVQb29sKQpAQCAt
NDgxLDE0ICs0ODEsMTQgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBh
cgogICAgIGJvb2wgcXVpcmtzTW9kZSA9IGlzUXVpcmtzTW9kZUJlaGF2aW9yKHBhcnNlck1vZGUp
OwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciBoZXggY29sb3JzIGFuZCByZ2IoKS9yZ2JhKCkgY29s
b3JzCi0gICAgQ29sb3IgY29sb3I7CisgICAgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOwog
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBxdWlya3NNb2Rl
KTsKICAgICBlbHNlCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgcXVpcmtzTW9kZSk7Ci0gICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCisgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIHZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKKyAgICBy
ZXR1cm4gdmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUoKmNvbG9yKTsKIH0KIAogYm9vbCBDU1NQ
YXJzZXJGYXN0UGF0aHM6OmlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlSUQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw2IEBAIHN0YXRpYyBpbnQgY2xhbXBSR0JDb21wb25lbnQo
Y29uc3QgQ1NTUHIKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVJn
YmEpOwotICAgIENvbG9yIHJlc3VsdDsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBj
b25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3JQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlm
ICghY29sb3JQYXJhbWV0ZXIpCkBAIC01ODgsMTIgKzU4NywxMCBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGFscGhhQ29tcG9uZW50ID0gc3RhdGlj
X2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4wLCAxLjApICogMjU1
LjBmKSk7CiAgICAgfTsKIAotICAgIHJlc3VsdCA9IENvbG9yKG1ha2VSR0JBKGNvbG9yQXJyYXlb
MF0sIGNvbG9yQXJyYXlbMV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KSk7Ci0KICAg
ICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29sb3JBcnJheVswXSwgY29s
b3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxwaGFDb21wb25lbnQpOwogfQogCiBzdGF0aWMg
Q29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCkBAIC02NDUsNyArNjQyLDcgQEAgc3RhdGljIENvbG9y
IHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21IU0xB
KHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGFscGhhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNjk1LDExICs2OTIsMTMg
QEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogCiBzdGF0aWMgQ29s
b3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRR
dWlya3lDb2xvcnMpCiB7Ci0gICAgUkdCQTMyIHJlc3VsdDsKKyAgICBTaW1wbGVDb2xvciByZXN1
bHQ7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gSGFzaFRva2VuKSB7Ci0gICAgICAgIGlmICghQ29sb3I6OnBh
cnNlSGV4Q29sb3IodG9rZW4udmFsdWUoKSwgcmVzdWx0KSkKKyAgICAgICAgYXV0byBzaW1wbGVD
b2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKHRva2VuLnZhbHVlKCkpOworICAgICAg
ICBpZiAoIXNpbXBsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAg
IHJlc3VsdCA9ICpzaW1wbGVDb2xvcjsKICAgICB9IGVsc2UgaWYgKGFjY2VwdFF1aXJreUNvbG9y
cykgewogICAgICAgICBTdHJpbmcgY29sb3I7CiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
TnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBAIC03MTgs
MTMgKzcxNywxNSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbG9yLmxlbmd0aCgpOwogICAgICAgICBpZiAobGVu
Z3RoICE9IDMgJiYgbGVuZ3RoICE9IDYpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAg
ICAgICAgaWYgKCFDb2xvcjo6cGFyc2VIZXhDb2xvcihjb2xvciwgcmVzdWx0KSkKKyAgICAgICAg
YXV0byBzaW1wbGVDb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKHRva2VuLnZhbHVl
KCkpOworICAgICAgICBpZiAoIXNpbXBsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CisgICAgICAgIHJlc3VsdCA9ICpzaW1wbGVDb2xvcjsKICAgICB9IGVsc2UgewogICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKICAgICB9CiAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKLSAgICByZXR1cm4gQ29sb3IocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCShyZXZpc2lvbiAyNjIxMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDkgKzM5LDE1IEBAIHN0cnVjdCBDb21wb3NpdGlvbkhpZ2hsaWdodCB7CiAg
ICAgewogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBTaW1wbGVDb2xvciBkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IgeyAweDNDQUZDMEUz
IH07CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGVmYXVsdENvbXBv
c2l0aW9uRmlsbENvbG9yIHsgMHhGRkUxREQ1NSB9OworI2VuZGlmCisKICAgICB1bnNpZ25lZCBz
dGFydE9mZnNldCB7IDAgfTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgeyAwIH07Ci0gICAgQ29s
b3IgY29sb3IgeyBDb2xvcjo6Y29tcG9zaXRpb25GaWxsIH07CisgICAgQ29sb3IgY29sb3IgeyBk
ZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IgfTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29tcG9zaXRpb25IaWdobGlnaHQ+IGRlY29kZShEZWNvZGVy
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyNSw3ICs2MjUsNyBAQCBOU0FycmF5
ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3Vu
ZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJv
bUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11
bHRpcGxpZXIgKiBhbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgdW5kZXJs
aW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIG92ZXJy
aWRlTGlnaHRuZXNzLCBvdmVycmlkZUFscGhhTXVsdGlwbGllciAqIGFscGhhKTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJsaW5lQ29sb3IuY3NzVGV4dCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjgsMTEgKzY4LDExIEBAIHN0YXRpYyBib29sIGlzVmFsaWRTaW1wbGVDb2xvcihTdHJpbmdWaWUK
IH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbW9uLW1p
Y3Jvc3ludGF4ZXMuaHRtbCNydWxlcy1mb3ItcGFyc2luZy1zaW1wbGUtY29sb3VyLXZhbHVlcwot
c3RhdGljIE9wdGlvbmFsPFJHQkEzMj4gcGFyc2VTaW1wbGVDb2xvclZhbHVlKFN0cmluZ1ZpZXcg
c3RyaW5nKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9yVmFs
dWUoU3RyaW5nVmlldyBzdHJpbmcpCiB7CiAgICAgaWYgKCFpc1ZhbGlkU2ltcGxlQ29sb3Ioc3Ry
aW5nKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gbWFrZVJHQih0
b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzFdLCBzdHJpbmdbMl0pLCB0b0FTQ0lJSGV4VmFsdWUoc3Ry
aW5nWzNdLCBzdHJpbmdbNF0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzVdLCBzdHJpbmdbNl0p
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHRvQVNDSUlIZXhWYWx1ZShzdHJpbmdbMV0s
IHN0cmluZ1syXSksIHRvQVNDSUlIZXhWYWx1ZShzdHJpbmdbM10sIHN0cmluZ1s0XSksIHRvQVND
SUlIZXhWYWx1ZShzdHJpbmdbNV0sIHN0cmluZ1s2XSkpOwogfQogCiBDb2xvcklucHV0VHlwZTo6
fkNvbG9ySW5wdXRUeXBlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTczLDcgKzk3Myw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhU
TUxMZW5ndGhUb1N0eWxlKE0KICAgICBhZGRQcm9wZXJ0eVRvUHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoc3R5bGUsIHByb3BlcnR5SUQsIHZhbHVlKTsKIH0KIAotc3RhdGljIFJHQkEzMiBwYXJz
ZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29uc3QgU3RyaW5nJiBjb2xvclN0cmlu
ZykKK3N0YXRpYyBTaW1wbGVDb2xvciBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVs
ZXMoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKIHsKICAgICAvLyBQZXIgc3BlYywgb25seSBs
b29rIGF0IHRoZSBmaXJzdCAxMjggZGlnaXRzIG9mIHRoZSBzdHJpbmcuCiAgICAgY29uc3Qgc2l6
ZV90IG1heENvbG9yTGVuZ3RoID0gMTI4OwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAgc3RhdGljIFJH
QkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TAogICAgIGRpZ2l0QnVmZmVyLmFwcGVuZCgn
MCcpOwogCiAgICAgaWYgKGRpZ2l0QnVmZmVyLnNpemUoKSA8IDYpCi0gICAgICAgIHJldHVybiBt
YWtlUkdCKHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclswXSksIHRvQVNDSUlIZXhWYWx1ZShk
aWdpdEJ1ZmZlclsxXSksIHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclsyXSkpOworICAgICAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclswXSks
IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclsxXSksIHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1
ZmZlclsyXSkpOwogCiAgICAgLy8gU3BsaXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVu
dHMsIHRoZW4gc2VhcmNoIHRoZSBsYXN0IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgogICAg
IEFTU0VSVChkaWdpdEJ1ZmZlci5zaXplKCkgPj0gNik7CkBAIC0xMDI2LDcgKzEwMjYsNyBAQCBz
dGF0aWMgUkdCQTMyIHBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMCiAgICAgaW50IHJlZFZhbHVl
ID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVk
SW5kZXggKyAxXSk7CiAgICAgaW50IGdyZWVuVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRC
dWZmZXJbZ3JlZW5JbmRleF0sIGRpZ2l0QnVmZmVyW2dyZWVuSW5kZXggKyAxXSk7CiAgICAgaW50
IGJsdWVWYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdp
dEJ1ZmZlcltibHVlSW5kZXggKyAxXSk7Ci0gICAgcmV0dXJuIG1ha2VSR0IocmVkVmFsdWUsIGdy
ZWVuVmFsdWUsIGJsdWVWYWx1ZSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWRWYWx1
ZSwgZ3JlZW5WYWx1ZSwgYmx1ZVZhbHVlKTsKIH0KIAogLy8gQ29sb3IgcGFyc2luZyB0aGF0IG1h
dGNoZXMgSFRNTCdzICJydWxlcyBmb3IgcGFyc2luZyBhIGxlZ2FjeSBjb2xvciB2YWx1ZSIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9s
bGJhclRoZW1lQWR3YWl0YS5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTMgKzQzLDEzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBvdmVybGF5VGh1bWJT
aXplID0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVGh1bWJTaXplID0gNDA7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdGh1bWJTaXplID0gNjsKIHN0YXRpYyBjb25zdCBkb3VibGUgc2Ny
b2xsYmFyT3BhY2l0eSA9IDAuODsKLXN0YXRpYyBjb25zdCBDb2xvciBzY3JvbGxiYXJCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOwotc3RhdGljIGNvbnN0IENvbG9yIHNj
cm9sbGJhckJvcmRlckNvbG9yID0gbWFrZVJHQigyMjAsIDIyMywgMjI3KTsKLXN0YXRpYyBjb25z
dCBDb2xvciBvdmVybGF5VGh1bWJCb3JkZXJDb2xvciA9IG1ha2VSR0JBKDI1NSwgMjU1LCAyNTUs
IDEwMCk7Ci1zdGF0aWMgY29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQ29sb3IgPSBtYWtlUkdCQSg0
NiwgNTIsIDU0LCAxMDApOwotc3RhdGljIGNvbnN0IENvbG9yIHRodW1iSG92ZXJlZENvbG9yID0g
bWFrZVJHQig4NiwgOTEsIDkyKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0aHVtYlByZXNzZWRDb2xv
ciA9IG1ha2VSR0IoMjcsIDEwNiwgMjAzKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0aHVtYkNvbG9y
ID0gbWFrZVJHQigxMjYsIDEyOSwgMTMwKTsKK3N0YXRpYyBjb25zdCBDb2xvciBzY3JvbGxiYXJC
YWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMg
Y29uc3QgQ29sb3Igc2Nyb2xsYmFyQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjIwLCAy
MjMsIDIyNyk7CitzdGF0aWMgY29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTAwKTsKK3N0YXRpYyBjb25zdCBDb2xvciBv
dmVybGF5VGh1bWJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig0NiwgNTIsIDU0LCAxMDApOworc3Rh
dGljIGNvbnN0IENvbG9yIHRodW1iSG92ZXJlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDg2LCA5
MSwgOTIpOworc3RhdGljIGNvbnN0IENvbG9yIHRodW1iUHJlc3NlZENvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI3LCAxMDYsIDIwMyk7CitzdGF0aWMgY29uc3QgQ29sb3IgdGh1bWJDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigxMjYsIDEyOSwgMTMwKTsKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUFkd2Fp
dGE6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCShyZXZpc2lvbiAyNjIx
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDI4ICszNiwyOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZm9jdXNMaW5lV2lkdGggPSAxOwotc3RhdGljIGNvbnN0
IENvbG9yIGZvY3VzUmluZ0NvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgMTUwKTsKK3N0YXRp
YyBjb25zdCBDb2xvciBmb2N1c1JpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig0NiwgNTIsIDU0
LCAxNTApOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFycm93U2l6ZSA9IDE2Owotc3RhdGljIGNv
bnN0IENvbG9yIGFycm93Q29sb3IgPSBtYWtlUkdCKDQ2LCA1MiwgNTQpOworc3RhdGljIGNvbnN0
IENvbG9yIGFycm93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoNDYsIDUyLCA1NCk7CiBzdGF0aWMg
Y29uc3QgaW50IGJ1dHRvbkZvY3VzT2Zmc2V0ID0gLTM7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
YnV0dG9uUGFkZGluZyA9IDU7CiBzdGF0aWMgY29uc3QgaW50IGJ1dHRvbkJvcmRlclNpemUgPSAx
OyAvLyBLZWVwIGluIHN5bmMgd2l0aCBtZW51TGlzdEJ1dHRvbkJvcmRlclNpemUgaW4gUmVuZGVy
VGhlbWVBZHdhaXRhLgotc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJvcmRlckNvbG9yID0gbWFr
ZVJHQigyMDUsIDE5OSwgMTk0KTsKLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3JvdW5k
Q29sb3IgPSBtYWtlUkdCKDI0NCwgMjQyLCAyNDEpOwotc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRv
bkJhY2tncm91bmRQcmVzc2VkQ29sb3IgPSBtYWtlUkdCKDIxNCwgMjA5LCAyMDUpOwotc3RhdGlj
IGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmRIb3ZlcmVkQ29sb3IgPSBtYWtlUkdCKDI0OCwg
MjQ4LCAyNDcpOwotc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmREaXNhYmxlZENv
bG9yID0gbWFrZVJHQigyNDYsIDI0NiwgMjQ0KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVC
YWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1NSwgMjU1LCAyNTUpOwotc3RhdGljIGNvbnN0IENv
bG9yIHRvZ2dsZUJhY2tncm91bmRIb3ZlcmVkQ29sb3IgPSBtYWtlUkdCKDI0MiwgMjQyLCAyNDIp
Owotc3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZUJhY2tncm91bmREaXNhYmxlZENvbG9yID0gbWFr
ZVJHQigyNTIsIDI1MiwgMjUyKTsKK3N0YXRpYyBjb25zdCBDb2xvciBidXR0b25Cb3JkZXJDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyMDUsIDE5OSwgMTk0KTsKK3N0YXRpYyBjb25zdCBDb2xvciBi
dXR0b25CYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjQ0LCAyNDIsIDI0MSk7Citz
dGF0aWMgY29uc3QgQ29sb3IgYnV0dG9uQmFja2dyb3VuZFByZXNzZWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigyMTQsIDIwOSwgMjA1KTsKK3N0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3Jv
dW5kSG92ZXJlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0OCwgMjQ4LCAyNDcpOworc3RhdGlj
IGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmREaXNhYmxlZENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDI0NiwgMjQ2LCAyNDQpOworc3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZUJhY2tncm91bmRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1KTsKK3N0YXRpYyBjb25zdCBDb2xv
ciB0b2dnbGVCYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0MiwgMjQy
LCAyNDIpOworc3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZUJhY2tncm91bmREaXNhYmxlZENvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1MiwgMjUyLCAyNTIpOwogc3RhdGljIGNvbnN0IGRvdWJsZSB0
b2dnbGVTaXplID0gMTQuOwogc3RhdGljIGNvbnN0IGludCB0b2dnbGVGb2N1c09mZnNldCA9IDI7
Ci1zdGF0aWMgY29uc3QgQ29sb3IgdG9nZ2xlQ29sb3IgPSBtYWtlUkdCKDQ2LCA1MiwgNTQpOwot
c3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZURpc2FibGVkQ29sb3IgPSBtYWtlUkdCKDE2MCwgMTYw
LCAxNjApOwotc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25Cb3JkZXJDb2xvciA9IG1ha2VS
R0IoMjIwLCAyMjMsIDIyNyk7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91
bmRDb2xvciA9IG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc3Bp
bkJ1dHRvbkJhY2tncm91bmRIb3ZlcmVkQ29sb3IgPSBtYWtlUkdCQSg0NiwgNTIsIDU0LCA1MCk7
Ci1zdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91bmRQcmVzc2VkQ29sb3IgPSBt
YWtlUkdCQSg0NiwgNTIsIDU0LCA3MCk7CitzdGF0aWMgY29uc3QgQ29sb3IgdG9nZ2xlQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoNDYsIDUyLCA1NCk7CitzdGF0aWMgY29uc3QgQ29sb3IgdG9nZ2xl
RGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxNjAsIDE2MCwgMTYwKTsKK3N0YXRpYyBj
b25zdCBDb2xvciBzcGluQnV0dG9uQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjIwLCAy
MjMsIDIyNyk7CitzdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91bmRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKK3N0YXRpYyBjb25zdCBDb2xvciBzcGlu
QnV0dG9uQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig0NiwgNTIsIDU0
LCA1MCk7CitzdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91bmRQcmVzc2VkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoNDYsIDUyLCA1NCwgNzApOwogCiAjaWYgIVBMQVRGT1JNKEdU
SykgfHwgVVNFKEdUSzQpCiBUaGVtZSYgVGhlbWU6OnNpbmdsZXRvbigpCkBAIC02OSwxNyArNjks
MTcgQEAgVGhlbWUmIFRoZW1lOjpzaW5nbGV0b24oKQogCiBDb2xvciBUaGVtZUFkd2FpdGE6OmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VS
R0IoMjU1LCAyNTUsIDI1NSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwg
MjU1KTsKIH0KIAogQ29sb3IgVGhlbWVBZHdhaXRhOjphY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBtYWtlUkdCKDUyLCAxMzIsIDIyOCk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcig1MiwgMTMyLCAyMjgpOwogfQogCiBDb2xvciBUaGVtZUFk
d2FpdGE6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDI1MiwgMjUyLCAyNTIpOwogfQogCiBDb2xvciBUaGVtZUFkd2FpdGE6OmluYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSGFzaFRvb2xzLmgi
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNDAsODcgKzM5
LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3Ig
bGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAKLS8vIG9yaWdpbmFsbHkgbW92ZWQg
aGVyZSBmcm9tIHRoZSBDU1MgcGFyc2VyCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUhleENvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFj
dGVyVHlwZSogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICBpZiAo
bGVuZ3RoICE9IDMgJiYgbGVuZ3RoICE9IDQgJiYgbGVuZ3RoICE9IDYgJiYgbGVuZ3RoICE9IDgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCB2YWx1ZSA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNBU0NJ
SUhleERpZ2l0KG5hbWVbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2
YWx1ZSA8PD0gNDsKLSAgICAgICAgdmFsdWUgfD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0pOwot
ICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDYpIHsKLSAgICAgICAgcmdiID0geyAweEZGMDAwMDAw
IHwgdmFsdWUgfTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5ndGgg
PT0gOCkgewotICAgICAgICAvLyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRvIFJHQkEgb3JkZXIs
IGJ1dCB0aGUgUkdCQTMyIHR5cGUKLSAgICAgICAgLy8gZXhwZWN0cyB0aGVtIHRvIGJlIGluIEFS
R0Igb3JkZXIsIHNvIHdlIHJpZ2h0IHJvdGF0ZSBlaWdodCBiaXRzLgotICAgICAgICByZ2IgPSB7
IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKGxlbmd0aCA9PSA0KSB7Ci0gICAgICAgIC8vICNhYmNkIGNvbnZlcnRzIHRvIGRk
YWFiYmNjIGluIFJHQkEzMi4KLSAgICAgICAgcmdiID0geyAodmFsdWUgJiAweEYpIDw8IDI4IHwg
KHZhbHVlICYgMHhGKSA8PCAyNAotICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMDApIDw8IDgg
fCAodmFsdWUgJiAweEYwMDApIDw8IDQKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8
IDQgfCAodmFsdWUgJiAweEYwMCkKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAodmFs
dWUgJiAweEYwKSA+PiA0IH07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyAj
YWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKLSAgICByZ2IgPSB7IDB4RkYwMDAwMDAKLSAgICAgICAg
fCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUgJiAweEYwMCkgPDwgOAotICAgICAgICB8
ICh2YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUgJiAweEYwKSA8PCA0Ci0gICAgICAgIHwgKHZh
bHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKSB9OwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIENvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IExDaGFyKiBuYW1lLCB1bnNpZ25lZCBs
ZW5ndGgsIFJHQkEzMiYgcmdiKQotewotICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwo
bmFtZSwgbGVuZ3RoLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0
IFVDaGFyKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJHQkEzMiYgcmdiKQotewotICAgIHJldHVy
biBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoLCByZ2IpOwotfQotCi1ib29sIENv
bG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7
Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5n
dGgoKSwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdW
aWV3JiBuYW1lLCBSR0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxl
bmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG5hbWUuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczgoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihu
YW1lLmNoYXJhY3RlcnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCiBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImIGMxLCBjb25zdCBDb2xvciYgYzIpCiB7CiAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYXNzdW1pbmcgdGhhdCB0aGUgY29sb3JzIGFyZSBpbiB0aGUgc2FtZSBj
b2xvcnNwYWNlLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSByZXR1cm4gYSBm
bG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAgICAgLy8gc2l0ZXMg
aGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4gV2UnZCBuZWVkIHRv
IGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNoYW5nZSB0aGVtIDop
Ci0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgp
ICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7Ci0gICAgaW50IGMxR3JlZW4gPSBjMS5p
c0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLnJnYigpLmdy
ZWVuQ29tcG9uZW50KCk7Ci0gICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFz
RXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7Ci0gICAg
aW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1
IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7Ci0gICAgaW50IGMyR3JlZW4gPSBjMi5pc0V4dGVu
ZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLnJnYigpLmdyZWVuQ29t
cG9uZW50KCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5k
ZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMx
UmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEu
YXNTaW1wbGVDb2xvcigpLnJlZENvbXBvbmVudCgpOworICAgIGludCBjMUdyZWVuID0gYzEuaXNF
eHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5hc1NpbXBsZUNv
bG9yKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgp
ID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMxLmFzU2ltcGxlQ29sb3IoKS5ibHVl
Q29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRl
bmRlZCgpLnJlZCgpICogMjU1IDogYzIuYXNTaW1wbGVDb2xvcigpLnJlZENvbXBvbmVudCgpOwor
ICAgIGludCBjMkdyZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVu
KCkgKiAyNTUgOiBjMi5hc1NpbXBsZUNvbG9yKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQg
YzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6
IGMyLmFzU2ltcGxlQ29sb3IoKS5ibHVlQ29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQg
LSBjMlJlZDsKICAgICBpbnQgZEcgPSBjMUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBj
MUJsdWUgLSBjMkJsdWU7CkBAIC0xNDYsMzAgKzc2LDI4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3Qg
TmFtZWRDb2xvciogZmluZE5hbWUKIENvbG9yOjpDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgaWYgKG5hbWVbMF0gPT0gJyMnKSB7Ci0gICAgICAgIFJHQkEzMiBjb2xvcjsKLSAgICAg
ICAgYm9vbCB2YWxpZDsKLQorICAgICAgICBPcHRpb25hbDxTaW1wbGVDb2xvcj4gY29sb3I7CiAg
ICAgICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENv
bG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7Cisg
ICAgICAgICAgICBjb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxl
bmd0aCgpIC0gMSwgY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFy
c2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEpOwog
Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgICAg
IGlmIChjb2xvcikKKyAgICAgICAgICAgIHNldFNpbXBsZUNvbG9yKCpjb2xvcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihuYW1l
KSkKLSAgICAgICAgICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAgICAg
ICAgICAgIHNldFNpbXBsZUNvbG9yKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwogICAgIH0K
IH0KIAogQ29sb3I6OkNvbG9yKGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgaWYgKG5hbWVbMF0g
PT0gJyMnKSB7Ci0gICAgICAgIFNpbXBsZUNvbG9yIGNvbG9yOwotICAgICAgICBpZiAocGFyc2VI
ZXhDb2xvcihyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oJm5hbWVbMV0pLCBzdGQ6OnN0
cmxlbigmbmFtZVsxXSksIGNvbG9yKSkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAg
ICAgIGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oJm5hbWVbMV0pLCBzdGQ6OnN0cmxlbigmbmFtZVsxXSkpOworICAg
ICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcigqY29sb3IpOwogICAg
IH0gZWxzZSBpZiAoYXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4obmFt
ZSkpKQotICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7CisgICAgICAg
IHNldFNpbXBsZUNvbG9yKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwogfQogCiBDb2xvcjo6
Q29sb3IoY29uc3QgQ29sb3ImIG90aGVyKQpAQCAtMTkyLDggKzEyMCw4IEBAIENvbG9yOjpDb2xv
cihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMKIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGlu
IGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAvLyB0b3AgMzIgYml0
cyB3aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KLSAgICBtX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOworICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWlu
ZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgIG1fY29sb3JEYXRhLnNpbXBs
ZUNvbG9yQW5kRmxhZ3MgPSAwOwogICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0
ZW5kZWRDb2xvci5sZWFrUmVmKCk7CiAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiB9CkBAIC0y
MjIsNyArMTUwLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKICAg
ICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKIAogICAgIG1fY29sb3JE
YXRhID0gb3RoZXIubV9jb2xvckRhdGE7Ci0gICAgb3RoZXIubV9jb2xvckRhdGEucmdiYUFuZEZs
YWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKyAgICBvdGhlci5tX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNvbG9yOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpA
QCAtMjMxLDI2ICsxNTksMjcgQEAgU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKIHsK
ICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1Rl
eHQoKTsKLSAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXphdGlvbkZvckhUTUwoKTsKKyAgICByZXR1
cm4gYXNTaW1wbGVDb2xvcigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7CiB9CiAKIFN0cmluZyBD
b2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAg
cmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6
YXRpb25Gb3JDU1MoKTsKKyAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigpLnNlcmlhbGl6YXRpb25G
b3JDU1MoKTsKIH0KIAogU3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBleHRlbmRlZCBjb2xvcnMuCi0gICAgcmV0dXJu
IHJnYigpLnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCk7CisgICAgaWYgKGlzRXh0
ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0
dXJuIGFzU2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwog
fQogCiBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMg
Y29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICBpZiAo
IWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZUNvbG9yKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVy
biBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5l
eHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTI3NSw3ICsyMDQsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogewogICAgIC8vIEhhcmRj
b2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkK
KyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZUNvbG9yKCkgPT0gd2hpdGUpCiAgICAg
ICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFj
dG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtMzI0LDcgKzI1Myw3IEBAIENvbG9y
IENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSAKICAgICBpbnQgZyA9IChzZWxmRyAq
IHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlRykgLyBk
OwogICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAq
IHNvdXJjZUEgKiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwg
YSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3Ig
Q29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKQEAgLTM1NCw3ICsyODMsNyBAQCBDb2xvciBD
b2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9u
ZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4
aXN0aW5nQiwgYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gbWFrZVJHQkEociwg
ZywgYiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
YWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMzg4LDcgKzMxNyw3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0
aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4K
ICAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAweEZGOwogCi0gICAgQ29sb3IgcmVzdWx0
ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOworICAgIENvbG9yIHJlc3VsdCA9IGFz
U2ltcGxlQ29sb3IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50
aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtNDAyLDkgKzMzMSw5IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXQKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9u
IGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEg
PSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CisgICAgdWludDhfdCBuZXdBbHBoYSA9IGNv
bG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSBy
Z2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CisgICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1w
bGVDb2xvcigpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygp
KQogICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CkBA
IC00MTUsOCArMzQ0LDggQEAgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxv
YQogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBDb2xvciB7IGFzRXh0ZW5k
ZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKSB9OwogCi0gICAgYXV0byBbciwgZywg
YiwgZXhpc3RpbmdBbHBoYV0gPSByZ2IoKTsKLSAgICByZXR1cm4geyAweEZGIC0gciwgMHhGRiAt
IGcsIDB4RkYgLSBiLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgfTsKKyAgICBhdXRvIFty
LCBnLCBiLCBleGlzdGluZ0FscGhhXSA9IGFzU2ltcGxlQ29sb3IoKTsKKyAgICByZXR1cm4geyAw
eEZGIC0gciwgMHhGRiAtIGcsIDB4RkYgLSBiLCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUo
YWxwaGEpIH07CiB9CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTQz
NCwxNyArMzYzLDE4IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IEMK
ICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVkQ29s
b3IuY2hhbm5lbHMoKSB9OwogICAgIH0KIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBhc1NpbXBsZUNvbG9yKCk7CiAgICAgcmV0dXJuIHsg
Q29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4w
ZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAogewotICAgIGlmICghaXNFeHRlbmRlZCgp
KQotICAgICAgICByZXR1cm4gcmdiKCk7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CisgICAgfQogCi0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0
dXJuIG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOworICAgIHJldHVybiBhc1NpbXBs
ZUNvbG9yKCk7CiB9CiAKIEZsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpIGNvbnN0CkBAIC00NzYsMjAgKzQwNiwyMCBAQCBDb2xvciBibGVuZChjb25zdCBDb2xv
ciYgZnJvbSwgY29uc3QgQ29sCiAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0
byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHN0
YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigp
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRS
R0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0byBw
cmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8g
cHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAvLyBTaW5jZSBt
YWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lh
bC1jYXNlIHRoYXQuCisgICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQ
cmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6
IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBhdXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBt
YWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkp
IDogQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0gbWFr
ZVJHQkEoCisgICAgU2ltcGxlQ29sb3IgcHJlbXVsdEJsZW5kZWQgPSBtYWtlU2ltcGxlQ29sb3Io
CiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLnJlZENvbXBvbmVudCgpLCBwcmVt
dWx0VG8ucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdEZyb20uZ3JlZW5Db21wb25lbnQoKSwgcHJlbXVsdFRvLmdyZWVuQ29tcG9uZW50KCks
IHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNvbXBv
bmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmFscGhhQ29tcG9uZW50KCksIHByZW11bHRUby5hbHBo
YUNvbXBvbmVudCgpLCBwcm9ncmVzcykKICAgICApOwogCi0gICAgcmV0dXJuIG1ha2VVblByZW11
bHRpcGxpZWRSR0JBKHByZW11bHRCbGVuZGVkKTsKKyAgICByZXR1cm4gbWFrZVVucHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yKHByZW11bHRCbGVuZGVkKTsKIH0KIAogQ29sb3IgYmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHBy
b2dyZXNzKQpAQCAtNTEyLDEzICs0NDIsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvCiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFsaWQoKQogewotICAgIG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyB8PSB2YWxpZFJHQkFDb2xvcjsKLX0KLQotY29uc3QgRXh0ZW5kZWRD
b2xvciYgQ29sb3I6OmFzRXh0ZW5kZWQoKSBjb25zdAotewotICAgIEFTU0VSVChpc0V4dGVuZGVk
KCkpOwotICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKKyAgICBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7CiB9CiAKIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYy
MTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5j
bHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvTENoYXIu
aD4KIAogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29sb3IqIENHQ29sb3JSZWY7CkBA
IC02NCwzOCArNjAsMzggQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
c2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9u
ZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCiAKLSAgICBDb2xv
cihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKQorICAgIENvbG9yKFNpbXBsZUNvbG9y
IGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWxpZCkKLSAg
ICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcihjb2xv
cik7CiAgICAgfQogCiAgICAgZW51bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07Ci0gICAgQ29s
b3IoUkdCQTMyIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xv
ciwgU2VtYW50aWNUYWcpCiAgICAgewotICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBz
ZXRTaW1wbGVDb2xvcihjb2xvcik7CiAgICAgICAgIHNldElzU2VtYW50aWMoKTsKICAgICB9CiAK
ICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogICAgIHsKLSAgICAgICAgc2V0UkdCKHIs
IGcsIGIpOworICAgICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikp
OwogICAgIH0KIAogICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogICAgIHsK
LSAgICAgICAgc2V0UkdCKG1ha2VSR0JBKHIsIGcsIGIsIGEpKTsKKyAgICAgICAgc2V0U2ltcGxl
Q29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKICAgICB9CiAKICAgICBDb2xvcihm
bG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogICAgIHsKLSAgICAgICAgc2V0UkdC
KG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpKTsKKyAgICAgICAgc2V0U2ltcGxlQ29s
b3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiAgICAgfQogCiAgICAg
Ly8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2
YWx1ZXMuCiAgICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxv
YXQgYSkKICAgICB7Ci0gICAgICAgIHNldFJHQihtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5LCBr
LCBhKSk7CisgICAgICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShj
LCBtLCB5LCBrLCBhKSk7CiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgQ29s
b3IoY29uc3QgU3RyaW5nJik7CkBAIC0xMDMsMjMgKzk5LDIzIEBAIHB1YmxpYzoKIAogICAgIGV4
cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRSR0JBQ29sb3IsICJD
b2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRD
b2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlk
UkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sg
bGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0
ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
aGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsK
LSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZFNpbXBsZUNvbG9y
LCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVu
ZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRIYXNoVmFsdWUgJiB2
YWxpZFNpbXBsZUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90
IGxvb2sgbGlrZSBhIHZhbGlkIFNpbXBsZUNvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
ZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUg
bXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xvciB3b3VsZG4ndCBoYXZl
Iik7CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFz
aFZhbHVlOwogICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgICAgIHJl
dHVybiBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7
CiAgICAgfQogCiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlw
ZSkKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlk
UkdCQUNvbG9yLCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBh
biBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUg
JiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJp
dHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkU2ltcGxlQ29sb3IsICJDb2xvcidzIGVtcHR5
IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxl
dGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xv
ciB3b3VsZG4ndCBoYXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxh
Z3MgPSBlbXB0eUhhc2hWYWx1ZTsKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwogICAg
IH0KIApAQCAtMTQ3LDEzICsxNDMsMTMgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIGNv
bG9yIHNlcmlhbGl6ZWQgYXMgZWl0aGVyICNSUkdHQkIgb3IgI1JSR0dCQkFBCiAgICAgU3RyaW5n
IG5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKLSAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAm
IHZhbGlkUkdCQUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIHZhbGlk
U2ltcGxlQ29sb3JCaXQpOyB9CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4g
aXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFx
dWUoKTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorICAg
IGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZUNvbG9yKCkuaXNPcGFxdWUoKTsgfQorICAgIGJv
b2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgp
LmFscGhhKCkgPiAwLjAgOiBhc1NpbXBsZUNvbG9yKCkuaXNWaXNpYmxlKCk7IH0KIAotICAgIGlu
dCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBo
YSgpICogMjU1IDogcmdiKCkuYWxwaGFDb21wb25lbnQoKTsgfQotICAgIGZsb2F0IGFscGhhQXNG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgp
IDogcmdiKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KKyAgICBpbnQgYWxwaGEoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IGFz
U2ltcGxlQ29sb3IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBh
c1NpbXBsZUNvbG9yKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKIApAQCAtMTkxLDcgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNTZW1hbnRpYygpIGNv
bnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkgJiYgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgJiBpc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpOyB9CiAKICNpZiBQTEFURk9STShHVEsp
CiAgICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOwpAQCAtMjEwLDExICsyMDYsNiBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdDsKICNl
bmRpZgogCi0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmLCBSR0JB
MzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCBS
R0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IExDaGFyKiwgdW5z
aWduZWQsIFJHQkEzMiYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7Ci0KICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsKQEAgLTIyNCwxNyArMjE1LDExIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07CiAK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgY29tcG9zaXRpb25GaWxsIHsgMHgzQ0FGQzBFMyB9OwotI2Vsc2UKLSAgICBzdGF0aWMgY29u
c3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKLSNlbmRp
ZgotCiAgICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAh
KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworICAgICAgICBy
ZXR1cm4gIShtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBsZUNv
bG9yKTsKICAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRXh0ZW5kZWRDb2xvciYgYXNF
eHRlbmRlZCgpIGNvbnN0OworICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3Im
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9yJiYpOwpAQCAtMjUy
LDE5ICsyMzcsMTkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBSR0JB
MzIgcmdiKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBz
ZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0KLSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwotICAg
IHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2Vt
YW50aWNSQkdBQ29sb3JCaXQ7IH0KKyAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZUNvbG9y
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKKyAgICB2
b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBF
eHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBS
R0JBMzIuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBSR0JBMzIuCisgICAgLy8gMHhf
X19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KKyAgICAvLyAweF9fX19fX18xMSBp
cyBhIHZhbGlkIFNpbXBsZUNvbG9yLgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBleHRlbmRl
ZENvbG9yID0gMHgwOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlkUkdCQUNvbG9y
ID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvckJpdCA9IDB4
MjsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3IgPSAweDM7Ci0gICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQgPSAweDQ7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRTaW1wbGVDb2xvciA9IDB4MTsKKyAgICBzdGF0
aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvckJpdCA9IDB4MjsKKyAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvciA9IDB4MzsKKyAgICBzdGF0aWMgY29uc3Qg
dWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0ID0gMHg0OwogCiAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7CiAgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZC
OwpAQCAtMjcyLDcgKzI1Nyw3IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
YWdBc1ZhbGlkKCk7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRGbGFn
cyB7IGludmFsaWRSR0JBQ29sb3IgfTsKKyAgICAgICAgdWludDY0X3Qgc2ltcGxlQ29sb3JBbmRG
bGFncyB7IGludmFsaWRTaW1wbGVDb2xvciB9OwogICAgICAgICBFeHRlbmRlZENvbG9yKiBleHRl
bmRlZENvbG9yOwogICAgIH0gbV9jb2xvckRhdGE7CiB9OwpAQCAtMzAwLDcgKzI4NSw3IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGMKICAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0Vx
dWFsKGEsIGIpOwogCi0gICAgcmV0dXJuIGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGIu
bV9jb2xvckRhdGEucmdiYUFuZEZsYWdzOworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnNpbXBs
ZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzOwogfQog
CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikK
QEAgLTMxMiwxNSArMjk3LDE0IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0Nv
bG9yKGMKIHsKICAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAg
ICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JCaXQpID09
IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xv
ckJpdCk7CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+
Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuc2ltcGxl
Q29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0KTsKIH0KIAog
aW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRl
ZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKLQotICAgIHJldHVybiBX
VEY6OmludEhhc2gobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzKTsKKyAgICByZXR1cm4gV1RGOjpp
bnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAgLTMzMywxNyArMzE3LDIyIEBAIGlu
bGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0EKICAgICByZXR1cm4gYWxwaGEg
PyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6
ICp0aGlzOwogfQogCi1pbmxpbmUgUkdCQTMyIENvbG9yOjpyZ2IoKSBjb25zdAoraW5saW5lIGNv
bnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghaXNFeHRlbmRlZCgpKSBoZXJlLCBvciBwcm9kdWNlCi0g
ICAgLy8gYW4gUkdCQTMyIGVxdWl2YWxlbnQgZm9yIGFuIEV4dGVuZGVkQ29sb3IuIElkZWFsbHkg
dGhlIGZvcm1lciwKLSAgICAvLyBzbyB3ZSBjYW4gYXVkaXQgYWxsIHRoZSByZ2IoKSBjYWxsIHNp
dGVzIHRvIGhhbmRsZSBleHRlbmRlZC4KLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID4+IDMyKSB9OworICAgIEFTU0VSVChpc0V4dGVu
ZGVkKCkpOworICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0KIAotaW5s
aW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdiKQoraW5saW5lIGNvbnN0IFNpbXBsZUNv
bG9yIENvbG9yOjphc1NpbXBsZUNvbG9yKCkgY29uc3QKIHsKLSAgICBtX2NvbG9yRGF0YS5yZ2Jh
QW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiLnZhbHVlKCkpIDw8IDMyOworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFpc0V4dGVuZGVkKCkpIGhlcmUgb25jZSB3ZSBo
YXZlIHZlcmlmaWVkIGFsbAorICAgIC8vIGNhbGwgc2l0ZXMgYXJlIGNoZWNraW5nIGlzRXh0ZW5k
ZWQoKS4KKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuc2lt
cGxlQ29sb3JBbmRGbGFncyA+PiAzMikgfTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldFNp
bXBsZUNvbG9yKFNpbXBsZUNvbG9yIHNpbXBsZUNvbG9yKQoreworICAgIG1fY29sb3JEYXRhLnNp
bXBsZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2ltcGxlQ29sb3IudmFs
dWUoKSkgPDwgMzI7CiAgICAgdGFnQXNWYWxpZCgpOwogfQogCkBAIC0zNTQsNyArMzQzLDcgQEAg
aW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tDb2xvcihjb25zdCBDbwogICAgICAgICByZXR1cm4g
IWV4dGVuZGVkQ29sb3IucmVkKCkgJiYgIWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5k
ZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9yOjpibGFjazsKKyAgICByZXR1cm4gY29sb3Iu
YXNTaW1wbGVDb2xvcigpID09IENvbG9yOjpibGFjazsKIH0KIAogaW5saW5lIGJvb2wgQ29sb3I6
OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNjQsNyArMzUzLDcgQEAgaW5s
aW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDbwogICAgICAgICByZXR1cm4gZXh0
ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSA9PSAxICYmIGV4
dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBjb2xvci5yZ2IoKSA9PSBDb2xvcjo6d2hpdGU7CisgICAg
cmV0dXJuIGNvbG9yLmFzU2ltcGxlQ29sb3IoKSA9PSBDb2xvcjo6d2hpdGU7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CkBAIC0zODksMTAgKzM3OCw4IEBAIHZvaWQgQ29sb3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb24KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNv
ZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCiAKLSAgICB1aW50MzJfdCB2YWx1ZSA9
IHJnYigpLnZhbHVlKCk7Ci0KICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCB2
YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpOwogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNDE4LDcgKzQwNSw3IEBAIE9wdGlvbmFsPENvbG9yPiBD
b2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gQ29sb3IgeyByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSwgY29sb3JTcGFjZSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsK
QEAgLTQyNiw3ICs0MTMsNyBAQCBPcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVy
JiBkCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWlzVmFsaWQpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICByZXR1cm4gQ29sb3IgeyB9OwogCiAgICAg
dWludDMyX3QgdmFsdWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yQ29tcG9uCiBpbmxpbmUgdWludDhfdCBjbGFtcGVk
Q29sb3JDb21wb25lbnQoZmxvYXQgZikKIHsKICAgICAvLyBTZWUgYWxzbyBjb2xvckZsb2F0VG9S
R0JBQnl0ZSgpLgotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxp
bnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAyNTUpKTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChz
dGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOwogfQogCiBpbmxp
bmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5z
aWduZWQgcm93Qnl0ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11bHRp
cGxpZWRSR0JBKHBpeGVsLnJlZENvbXBvbmVudCgpLCBwaXhlbC5ncmVlbkNvbXBvbmVudCgpLCBw
aXhlbC5ibHVlQ29tcG9uZW50KCksIHBpeGVsLmFscGhhQ29tcG9uZW50KCksIGZhbHNlKTsKKyAg
ICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbC5yZWRD
b21wb25lbnQoKSwgcGl4ZWwuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWwuYmx1ZUNvbXBvbmVudCgp
LCBwaXhlbC5hbHBoYUNvbXBvbmVudCgpLCBmYWxzZSk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9
IDI1NSAtIGE7CiAKQEAgLTE3MCw5ICsxNzAsOSBAQCBwdWJsaWM6CiAgICAgICAgIGEgKz0gZmFz
dERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBoYUNvbXBvbmVudCgpKTsKIAogICAgICAgICBpZiAo
bV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBi
LCBhKS52YWx1ZSgpOworICAgICAgICAgICAgKmRlc3QgPSBtYWtlU2ltcGxlQ29sb3IociwgZywg
YiwgYSkudmFsdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5Q
cmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKS52YWx1ZSgpOworICAgICAgICAgICAgKmRlc3Qg
PSBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IociwgZywgYiwgYSkudmFsdWUoKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBA
IC0yMjUsOSArMjI1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAg
ICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJldHVy
biBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihyLCBnLCBiLCBhLCBm
YWxzZSkudmFsdWUoKTsKIAotICAgICAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgYSkudmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKS52YWx1ZSgp
OwogICAgIH0KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVs
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNTMgKzQzLDUzIEBA
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVkQ2gKICAgICByZXR1cm4gKGZh
c3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKIH0KIAotUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQorU2lt
cGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSwgYm9vbCBjZWlsaW5nKQogewotICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBs
aWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2Vp
bGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEsIGNlaWxpbmcpLCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwo
YiwgYSwgY2VpbGluZyksIGEpOwogfQogCi1SR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKFJH
QkEzMiBwaXhlbENvbG9yKQorU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xv
cihTaW1wbGVDb2xvciBwaXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzT3BhcXVl
KCkpCiAgICAgICAgIHJldHVybiBwaXhlbENvbG9yOwotICAgIHJldHVybiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBv
bmVudCgpKTsKKyAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENv
bG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29s
b3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwogfQogCi1S
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
CitTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEpCiB7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENo
YW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGll
ZENoYW5uZWwoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVt
dWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBs
aWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK1NpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxp
ZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvciBwaXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENv
bG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENvbG9yLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhl
bENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhl
bENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByZXR1cm4gbWFrZVVucHJlbXVsdGlw
bGllZFNpbXBsZUNvbG9yKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3Jl
ZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxw
aGFDb21wb25lbnQoKSk7CiAgICAgcmV0dXJuIHBpeGVsQ29sb3I7CiB9CiAKLVJHQkEzMiBtYWtl
UkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQorU2lt
cGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQogewotICAgIHJldHVybiBtYWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0
ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBj
b2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihjb2xv
ckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUociksIGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShn
KSwgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGIpLCBjb2xvckZsb2F0VG9TaW1wbGVDb2xv
ckJ5dGUoYSkpOwogfQogCi1SR0JBMzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0
IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCitTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZsb2F0
IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3Ig
PSAyNTUuMDsKICAgICBGbG9hdENvbXBvbmVudHMgZmxvYXRSZXN1bHQgPSBoc2xUb1NSR0IoeyBo
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VSR0JB
KAorICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0
LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0
LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0
LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0
LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3RvcikpOwogfQogCi1SR0JBMzIgbWFrZVJHQkFGcm9t
Q01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKK1NpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5
LCBmbG9hdCBrLCBmbG9hdCBhKQogewogICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKICAgICBp
bnQgciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEg
LSBjKSkpOwogICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAq
IChjb2xvcnMgKiAoMSAtIG0pKSk7CiAgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRh
ZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKLSAgICByZXR1cm4gbWFrZVJHQkEo
ciwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRh
ZnRlcigyNTYsIDApICogYSkpOwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRp
b25Gb3JIVE1MKCkgY29uc3QKQEAgLTEzNSw0ICsxMzUsNzMgQEAgU3RyaW5nIFNpbXBsZUNvbG9y
OjpzZXJpYWxpemF0aW9uRm9yUmVuZAogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJl
ZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBv
bmVudCgpLCAyKSk7CiB9CiAKKy8vIG9yaWdpbmFsbHkgbW92ZWQgaGVyZSBmcm9tIHRoZSBDU1Mg
cGFyc2VyCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUg
T3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYm
IGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHVuc2lnbmVkIHZhbHVlID0gMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGln
aXQobmFtZVtpXSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB2
YWx1ZSA8PD0gNDsKKyAgICAgICAgdmFsdWUgfD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0pOwor
ICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDYpCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7
IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OworICAgIGlmIChsZW5ndGggPT0gOCkgeworICAgICAgICAv
LyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRvIFJHQkEgb3JkZXIsIGJ1dCB0aGUgU2ltcGxlQ29s
b3IgdHlwZQorICAgICAgICAvLyBleHBlY3RzIHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28g
d2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMuCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7
IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDQp
IHsKKyAgICAgICAgLy8gI2FiY2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gU2ltcGxlQ29sb3Iu
CisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7CisgICAgICAgICAgICAgICh2YWx1ZSAmIDB4
RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4
RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAorICAgICAgICAgICAgfCAodmFsdWUg
JiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQorICAgICAgICAgICAgfCAodmFsdWUgJiAw
eEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQKKyAgICAgICAgfTsKKyAgICB9CisgICAgLy8gI2Fi
YyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsKKyAgICAgICAg
ICAoMHhGRjAwMDAwMCkKKyAgICAgICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUg
JiAweEYwMCkgPDwgOAorICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUgJiAw
eEYwKSA8PCA0CisgICAgICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKQor
ICAgIH07Cit9CisKK09wdGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhD
b2xvcihjb25zdCBMQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBw
YXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoKTsKK30KKworT3B0aW9uYWw8U2ltcGxl
Q29sb3I+IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFVDaGFyKiBuYW1lLCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBs
ZW5ndGgpOworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNlSGV4
Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUu
bGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5h
bWUuY2hhcmFjdGVyczgoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29s
b3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSk7Cit9CisKK09wdGlvbmFsPFNp
bXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3JiBu
YW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKG5hbWUuaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFt
ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYo
KSwgbmFtZS5sZW5ndGgoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZp
c2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTYgQEAKICNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KKyNp
bmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIENvbG9yIHZhbHVlIHdpdGggOC1iaXQgY29tcG9uZW50cyBm
b3IgcmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhLgogLy8gRm9yIGhpc3RvcmljYWwgcmVhc29u
cywgc3RvcmVkIGFzIGEgMzItYml0IGludGVnZXIsIHdpdGggYWxwaGEgaW4gdGhlIGhpZ2ggYml0
czogQVJHQi4KKy8vIEZJWE1FOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBjb25zb2xpZGF0ZWQgd2l0
aCBDb2xvckNvbXBvbmVudHMuCiBjbGFzcyBTaW1wbGVDb2xvciB7CiBwdWJsaWM6CiAgICAgY29u
c3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFsdWUg
fSB7IH0KQEAgLTcwLDYgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBhbHBo
YUNvbXBvbmVudCgpOwogICAgIH0KIAorICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4g
cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxl
Q29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBPcHRp
b25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsK
KyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCk7CisKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsK
IH07CkBAIC03NywyMCArODYsMTcgQEAgcHJpdmF0ZToKIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVD
b2xvciwgU2ltcGxlQ29sb3IpOwogYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yLCBTaW1wbGVD
b2xvcik7CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdyYXRpbmcgdG8gdGhlIG5l
dyBuYW1lLgotdXNpbmcgUkdCQTMyID0gU2ltcGxlQ29sb3I7Ci0KLWNvbnN0ZXhwciBSR0JBMzIg
bWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOwogCi1SR0JBMzIgbWFr
ZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxp
bmcgPSB0cnVlKTsKLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKLVJHQkEz
MiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci1S
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKLQotV0VCQ09SRV9FWFBPUlQg
UkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpOwotV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwg
ZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7Ci1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBt
YWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBi
b29sIGNlaWxpbmcgPSB0cnVlKTsKK1NpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxl
Q29sb3IoU2ltcGxlQ29sb3IpOworU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1NpbXBsZUNvbG9yIG1ha2VVbnBy
ZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CisKK1dFQkNPUkVfRVhQT1JUIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSk7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsKK1NpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKTsKIAogdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGlu
dCk7CiB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwpAQCAtOTgsNyAr
MTA0LDcgQEAgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KQogdWludDE2
X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERpdmlk
ZUJ5MjU1KHVpbnQxNl90KTsKIAotdWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCk7
Cit1aW50OF90IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShmbG9hdCk7CiAKIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKQEAgLTExMiwx
MiArMTE4LDEyIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAog
aW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKDI1NSwgdmFsdWUpKTsKKyAgICByZXR1cm4g
c3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKIH0KIAogaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3RkOjptYXgoMC5m
LCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKKyAgICByZXR1cm4gc3RkOjpj
bGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5mLCAyNTUuZik7CiB9CiAKIGlubGluZSB1aW50MTZf
dCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKQEAgLTEzNCwyMSArMTQwLDIxIEBA
IGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QKICAgICByZXR1cm4gYXBw
cm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9CiAKLWlubGluZSB1aW50OF90IGNvbG9y
RmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCitpbmxpbmUgdWludDhfdCBjb2xvckZsb2F0VG9TaW1w
bGVDb2xvckJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBGSVhNRTogQ29uc29saWRhdGUgd2l0aCBj
bGFtcGVkQ29sb3JDb21wb25lbnQoKS4KICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGlu
c3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKLSAgICBy
ZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4w
ZiAqIGYpKSwgMjU1KSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpCitjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcs
IGIsIDB4RkYpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7CiB9
CiAKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKQogewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAw
eEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpjbGFtcChhLCAwLCAweEZGKSA8PCAyNCB8IHN0ZDo6Y2xhbXAociwgMCwg
MHhGRikgPDwgMTYgfCBzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpIDw8IDggfCBzdGQ6OmNsYW1wKGIs
IDAsIDB4RkYpKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAy
NjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRpc2Nv
bm5lY3QoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMyRnJv
bUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29sb3JBcnJheSkKK3N0YXRpYyBPcHRpb25hbDxTaW1w
bGVDb2xvcj4gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29sb3JB
cnJheSkKIHsKICAgICBpZiAoQ0ZBcnJheUdldENvdW50KGNvbG9yQXJyYXkpIDwgNCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIE9wdGlvbmFs
PFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMyRgogICAgICAgICBjb21wb25lbnRBcnJheVtpXSA9IGNv
bXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29tcG9u
ZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9u
ZW50QXJyYXlbMF0pOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbXBv
bmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBv
bmVudEFycmF5WzBdKTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiBh
dHRyaWJ1dGVkU3RyaW5nKQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3Vl
PiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJy
YXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFr
ZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwogICAg
ICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEZvcmVncm91bmRDb2xvcigqY29sb3IpOwpAQCAt
Mjc5LDcgKzI3OSw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkK
ICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdl
dFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJh
eShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghY29s
b3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGN1ZURh
dGEtPnNldEJhY2tncm91bmRDb2xvcigqY29sb3IpOwpAQCAtMjkxLDcgKzI5MSw3IEBAIFJlZjxJ
bmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAo
Q0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBh
dXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFy
cmF5VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEhpZ2hsaWdodENvbG9y
KCpjb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQ29s
b3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQSgqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxD
b2xvciA9IG1ha2VSR0JBKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkQ29tcG9uZW50KCldLCBs
b29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhl
bENvbG9yLmJsdWVDb21wb25lbnQoKV0sIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7Ci0g
ICAgICAgICAgICAqcGl4ZWwgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvcikudmFs
dWUoKTsKKyAgICAgICAgICAgIGF1dG8gcGl4ZWxDb2xvciA9IG1ha2VVbnByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcigqcGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VTaW1wbGVD
b2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVl
Q29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICAgICAg
KnBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENvbG9yKS52YWx1ZSgp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNh
bFNpemUuaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDI2
MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUlt
YWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIENvbG9yIG5hdGl2
ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQogICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKIAotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKCpwaXhlbCk7CisgICAgU2ltcGxlQ29s
b3IqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8U2ltcGxlQ29sb3IqPihjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbnByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcigqcGl4ZWwpOwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShj
b25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxMCBAQCBSZXRhaW5Q
dHI8Q0dDb2xvclJlZj4gVGlueUxSVUNhY2hlUG9saWN5CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21DR0NvbG9yKENHQ29sb3JSZWYgY29sb3IpCitz
dGF0aWMgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBj
b2xvcikKIHsKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBj
b2xvciBzcGFjZXMuCisKICAgICBzaXplX3QgbnVtQ29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1i
ZXJPZkNvbXBvbmVudHMoY29sb3IpOwogICAgIGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBD
R0NvbG9yR2V0Q29tcG9uZW50cyhjb2xvcik7CiAKQEAgLTc3LDI3ICs3OSwzMSBAQCBzdGF0aWMg
UkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xvCiAgICAgfQogCiAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBzY2FsZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1
cm4gbWFrZVJHQkEociAqIHNjYWxlRmFjdG9yLCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZh
Y3RvciwgYSAqIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIgKiBz
Y2FsZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9yLCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2FsZUZh
Y3Rvcik7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxp
ZFJHQkFDb2xvcjsKKyAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGlu
dmFsaWRTaW1wbGVDb2xvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFJHQiht
YWtlUkdCQUZyb21DR0NvbG9yKGNvbG9yKSk7CisgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYg
Y29sb3IsIFNlbWFudGljVGFnKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVl
ZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICghY29sb3IpIHsKLSAgICAgICAg
bV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKyAgICAgICAgbV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFJHQihtYWtlUkdCQUZyb21DR0NvbG9yKGNvbG9y
KSk7CisgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3Ip
KTsKICAgICBzZXRJc1NlbWFudGljKCk7CiB9CiAKQEAgLTEyNCw3ICsxMzAsNyBAQCBzdGF0aWMg
Q0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7
Ci0gICAgICAgIHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgeworICAgICAgICBzd2l0Y2gg
KGNvbG9yLmFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgQ29sb3I6OnRy
YW5zcGFyZW50LnZhbHVlKCk6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5z
cGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0
cmFuc3BhcmVudENHQ29sb3I7CkBAIC0xNDAsNyArMTQ2LDcgQEAgQ0dDb2xvclJlZiBjYWNoZWRD
R0NvbG9yKGNvbnN0IENvbG9yJiBjbwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKGNv
bG9yLmlzRXh0ZW5kZWQoKSB8fCBjb2xvci5yZ2IoKS52YWx1ZSgpKTsKKyAgICBBU1NFUlQoY29s
b3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLmFzU2ltcGxlQ29sb3IoKS52YWx1ZSgpKTsKIAogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55TFJVQ2FjaGU8Q29sb3IsIFJldGFpblB0cjxDR0Nv
bG9yUmVmPiwgMzI+PiBjYWNoZTsKICAgICByZXR1cm4gY2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5n
ZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEm
IGMpCiB7Ci0gICAgc2V0UkdCKG1ha2VSR0JBKHN0YXRpY19jYXN0PGludD4oYy5yZWQgKiAyNTUp
LAorICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihjLnJlZCAqIDI1NSksCiAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5ncmVlbiAq
IDI1NSksCiAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5ibHVlICogMjU1KSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihjLmFscGhhICogMjU1KSkpOworICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KGMuYWxwaGEgKiAyNTUpCisgICAgKSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JB
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMs
MTAgQEAgYm9vbCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpCiAgICAgcmV0dXJuIHVzZU9s
ZEFxdWFGb2N1c1JpbmdDb2xvcjsKIH0KIAotc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21OU0Nv
bG9yKE5TQ29sb3IgKmNvbG9yKQorc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZy
b21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9y
IC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIEFTU0VSVF9BUkcoY29sb3Is
IGNvbG9yKTsKIAogICAgIENHRmxvYXQgcmVkQ29tcG9uZW50OwpAQCAtODAsMjQgKzgyLDI4IEBA
IHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tTlNDb2xvcihOU0NvbG8KICAgICAgICAgTlNVSW50
ZWdlciBwaXhlbFs0XTsKICAgICAgICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6
MCB5OjBdOwogCi0gICAgICAgIHJldHVybiBtYWtlUkdCQShwaXhlbFswXSwgcGl4ZWxbMV0sIHBp
eGVsWzJdLCBwaXhlbFszXSk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocGl4ZWxb
MF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xv
ciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNv
bXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAw
LjApOwotICAgIHJldHVybiBtYWtlUkdCQShzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2Nh
bGVGYWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBz
Y2FsZUZhY3RvciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNjYWxlRmFj
dG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBzY2FsZUZh
Y3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwogfQogCiBDb2xvciBj
b2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewotICAgIHJldHVybiBDb2xvcihtYWtl
UkdCQUZyb21OU0NvbG9yKGNvbG9yKSk7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBu
ZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1w
bGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKSk7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9t
TlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3IobWFrZVJHQkFGcm9t
TlNDb2xvcihjb2xvciksIENvbG9yOjpTZW1hbnRpYyk7CisgICAgLy8gRklYTUU6IEV4dGVuZGVk
Q29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCisgICAgcmV0dXJuIENvbG9y
KG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKSwgQ29sb3I6OlNlbWFudGljKTsKIH0K
IAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogewot
ICAgIHNldFJHQihtYWtlUkdCQShjb2xvci5yICogMjU1LCBjb2xvci5nICogMjU1LCBjb2xvci5i
ICogMjU1LCBjb2xvci5hICogMjU1KSk7CisgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcgKiAyNTUsIGNvbG9yLmIgKiAyNTUsIGNvbG9yLmEg
KiAyNTUpKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5OCw4ICsxOTgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0RvdHNGb3JEb2N1bWVuCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBzcGVsbGluZ1BhdHRlcm5Db2xvciB7IG1ha2VSR0IoMjU1LCAw
LCAwKSB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5D
b2xvciB7IG1ha2VSR0IoMCwgMTI4LCAwKSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKSB9
OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5Db2xvciB7
IG1ha2VTaW1wbGVDb2xvcigwLCAxMjgsIDApIH07CiAKICAgICBjb25zdCBTaW1wbGVDb2xvciYg
cGF0dGVybkNvbG9yID0gc3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsK
ICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IucmVk
Q29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ncmVlbkNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3Iu
Ymx1ZUNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRBY3RpdmVMCiAKIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYg
Y29sb3IpCiB7Ci0gICAgUkdCQTMyIGNvbG9yS2V5ID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29s
b3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSk7CisgICAgU2ltcGxlQ29sb3IgY29sb3JL
ZXkgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIs
IGNvbG9yLmEpOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVyb0Jy
dXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNp
b24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29s
b3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHdvcmsgZm9yIGEgVUlDb2xvciB0aGF0IHdhcyBjcmVhdGVkIGZyb20gYSBw
YXR0ZXJuIG9yIGEgRGlzcGF5UDMgY29sb3IuCiAgICAgQ0dGbG9hdCByZWRDb21wb25lbnQ7CiAg
ICAgQ0dGbG9hdCBncmVlbkNvbXBvbmVudDsKQEAgLTQzLDcgKzQ1LDcgQEAgQ29sb3IgY29sb3JG
cm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25l
bnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhh
XTsKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2
LjAsIDAuMCk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50
LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25l
bnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2Nh
bGVGYWN0b3IgKiByZWRDb21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNj
YWxlRmFjdG9yICogYmx1ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0OCw3ICsxMjQ4LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcgogdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKQogewogICAgIGlmICghcmVuZGVyZXIoKS5mcmFt
ZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uVXNlc0N1c3RvbUhpZ2hsaWdodHMoKSkgewotICAgICAg
ICBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb2xvcjo6
Y29tcG9zaXRpb25GaWxsLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3Io
KS5jb21wb3NpdGlvblN0YXJ0KCkpLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5l
ZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7CisgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIGNsYW1wZWRPZmZzZXQocmVuZGVyZXIoKS5mcmFtZSgpLmVk
aXRvcigpLmNvbXBvc2l0aW9uU3RhcnQoKSksIGNsYW1wZWRPZmZzZXQocmVuZGVyZXIoKS5mcmFt
ZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDc5LDcgKzQwNzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7
CiAgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CiAgICAg
ICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkg
KyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJHQigyMTcsIDIxNywgMjE3KSkpOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigyMTcsIDIxNywgMjE3KSk7CiAg
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwogICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgICAgICBjb250ZXh0LmRyYXdS
ZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI2MjExMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDg1LDcgKzMwODUsNyBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBh
aW50TGF5ZXJGbGFnPiBSCiBzdHJ1Y3QgUGF0dGVybkRlc2NyaXB0aW9uIHsKICAgICBBU0NJSUxp
dGVyYWwgbmFtZTsKICAgICBGbG9hdFNpemUgcGhhc2U7Ci0gICAgUkdCQTMyIGZpbGxDb2xvcjsK
KyAgICBTaW1wbGVDb2xvciBmaWxsQ29sb3I7CiB9OwogCiBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm5Gb3JEZXNjcmlwdGlvbihQYXR0ZXJuRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIEZs
b2F0U2l6ZSBjb250ZW50T2Zmc2V0LCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQpAQCAt
MzE0NSw3ICszMTQ1LDcgQEAgc3RhdGljIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yVG91Y2hB
YwogICAgICAgICByZXR1cm4gMDsKICAgICB9OwogCi0gICAgY29uc3RleHByIGF1dG8gZmlsbENv
bG9yID0gbWFrZVJHQkEoMCwgMCwgMCwgMTI4KTsKKyAgICBjb25zdGV4cHIgYXV0byBmaWxsQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIHN0YXRpYyBjb25zdCBQ
YXR0ZXJuRGVzY3JpcHRpb24gcGF0dGVybkRlc2NyaXB0aW9uc1tdID0gewogICAgICAgICB7ICJh
dXRvIl9zLCB7IH0sIGZpbGxDb2xvciB9LApAQCAtMzE2NSw3ICszMTY1LDcgQEAgc3RhdGljIFJl
ZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yVG91Y2hBYwogCiBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVnaW9uVHlwZShFdmVudExpc3RlbmVyUmVnaW9uVHlw
ZSB0eXBlLCBGbG9hdFNpemUgY29udGVudE9mZnNldCwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCkKIHsKLSAgICBjb25zdGV4cHIgYXV0byBmaWxsQ29sb3IgPSBtYWtlUkdCQSgwLCAxMjgs
IDAsIDEyOCk7CisgICAgY29uc3RleHByIGF1dG8gZmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDEyOCwgMCwgMTI4KTsKIAogICAgIGF1dG8gcGF0dGVybkFuZFBoYXNlID0gWyZdKCkgLT4g
UGF0dGVybkRlc2NyaXB0aW9uIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcAkocmV2aXNp
b24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgY29uc3QgaW50IHRleHRGaWVsZEJvcmRlclNpemUgPSAxOwotc3RhdGlj
IGNvbnN0IENvbG9yIHRleHRGaWVsZEJvcmRlckNvbG9yID0gbWFrZVJHQigyMDUsIDE5OSwgMTk0
KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCb3JkZXJEaXNhYmxlZENvbG9yID0gbWFr
ZVJHQigyMTMsIDIwOCwgMjA0KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlUkdCKDI1NSwgMjU1LCAyNTUpOwotc3RhdGljIGNvbnN0IENvbG9yIHRl
eHRGaWVsZEJhY2tncm91bmREaXNhYmxlZENvbG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsK
K3N0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigyMDUsIDE5OSwgMTk0KTsKK3N0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCb3JkZXJEaXNh
YmxlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIxMywgMjA4LCAyMDQpOworc3RhdGljIGNvbnN0
IENvbG9yIHRleHRGaWVsZEJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1KTsKK3N0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCYWNrZ3JvdW5kRGlzYWJsZWRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtZW51TGlzdEJ1dHRvbkFycm93U2l6ZSA9IDE2Owogc3RhdGljIGNvbnN0IGludCBtZW51
TGlzdEJ1dHRvbkZvY3VzT2Zmc2V0ID0gLTM7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWVudUxp
c3RCdXR0b25QYWRkaW5nID0gNTsKQEAgLTU3LDIzICs1NywyMyBAQCBzdGF0aWMgY29uc3QgdW5z
aWduZWQgcHJvZ3Jlc3NBY3Rpdml0eUJsCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZUNvdW50ID0gNzU7CiBzdGF0aWMgY29uc3QgU2Vjb25kcyBwcm9ncmVzc0Fu
aW1hdGlvbkZyYW1lUmF0ZSA9IDMzX21zOyAvLyAzMGZwcy4KIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBwcm9ncmVzc0JhclNpemUgPSA2Owotc3RhdGljIGNvbnN0IENvbG9yIHByb2dyZXNzQmFyQm9y
ZGVyQ29sb3IgPSBtYWtlUkdCKDIwNSwgMTk5LCAxOTQpOwotc3RhdGljIGNvbnN0IENvbG9yIHBy
b2dyZXNzQmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyMjUsIDIyMiwgMjE5KTsKK3N0YXRp
YyBjb25zdCBDb2xvciBwcm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIw
NSwgMTk5LCAxOTQpOworc3RhdGljIGNvbnN0IENvbG9yIHByb2dyZXNzQmFyQmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDIyNSwgMjIyLCAyMTkpOwogc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNsaWRlclRyYWNrU2l6ZSA9IDY7CiBzdGF0aWMgY29uc3QgaW50IHNsaWRlclRyYWNrQm9y
ZGVyU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVHJhY2tCb3JkZXJDb2xvciA9
IG1ha2VSR0IoMjA1LCAxOTksIDE5NCk7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVHJhY2tC
YWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDIyNSwgMjIyLCAyMTkpOworc3RhdGljIGNvbnN0IENv
bG9yIHNsaWRlclRyYWNrQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA1LCAxOTksIDE5
NCk7CitzdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVHJhY2tCYWNrZ3JvdW5kQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMjI1LCAyMjIsIDIxOSk7CiBzdGF0aWMgY29uc3QgaW50IHNsaWRlclRyYWNr
Rm9jdXNPZmZzZXQgPSAyOwogc3RhdGljIGNvbnN0IGludCBzbGlkZXJUaHVtYlNpemUgPSAyMDsK
IHN0YXRpYyBjb25zdCBpbnQgc2xpZGVyVGh1bWJCb3JkZXJTaXplID0gMTsKLXN0YXRpYyBjb25z
dCBDb2xvciBzbGlkZXJUaHVtYkJvcmRlckNvbG9yID0gbWFrZVJHQigyMDUsIDE5OSwgMTk0KTsK
LXN0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJhY2tncm91bmRDb2xvciA9IG1ha2VSR0Io
MjQ0LCAyNDIsIDI0MSk7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVGh1bWJCYWNrZ3JvdW5k
SG92ZXJlZENvbG9yID0gbWFrZVJHQigyNDgsIDI0OCwgMjQ3KTsKLXN0YXRpYyBjb25zdCBDb2xv
ciBzbGlkZXJUaHVtYkJhY2tncm91bmREaXNhYmxlZENvbG9yID0gbWFrZVJHQigyNDQsIDI0Miwg
MjQxKTsKK3N0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJvcmRlckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDIwNSwgMTk5LCAxOTQpOworc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRodW1i
QmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0NCwgMjQyLCAyNDEpOworc3RhdGlj
IGNvbnN0IENvbG9yIHNsaWRlclRodW1iQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigyNDgsIDI0OCwgMjQ3KTsKK3N0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJh
Y2tncm91bmREaXNhYmxlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0NCwgMjQyLCAyNDEpOwog
I2lmIEVOQUJMRShWSURFTykKLXN0YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQmFj
a2dyb3VuZGNvbG9yID0gbWFrZVJHQig3NywgNzcsIDc3KTsKLXN0YXRpYyBjb25zdCBDb2xvciBt
ZWRpYVNsaWRlclRyYWNrQnVmZmVyZWRDb2xvciA9IG1ha2VSR0IoMTczLCAxNzMsIDE3Myk7Ci1z
dGF0aWMgY29uc3QgQ29sb3IgbWVkaWFTbGlkZXJUcmFja0FjdGl2ZUNvbG9yID0gbWFrZVJHQigy
NTIsIDI1MiwgMjUyKTsKK3N0YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQmFja2dy
b3VuZGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDc3LCA3NywgNzcpOworc3RhdGljIGNvbnN0IENv
bG9yIG1lZGlhU2xpZGVyVHJhY2tCdWZmZXJlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDE3Mywg
MTczLCAxNzMpOworc3RhdGljIGNvbnN0IENvbG9yIG1lZGlhU2xpZGVyVHJhY2tBY3RpdmVDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKICNlbmRpZgogCiAjaWYgIVBMQVRG
T1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5c3RlbUYKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNJ
dGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9udE1hc2sp
OwogfQogCi1zdGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQorc3RhdGljIFNpbXBs
ZUNvbG9yIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIFJldGFpblB0cjxOU0JpdG1hcElt
YWdlUmVwPiBvZmZzY3JlZW5SZXAgPSBhZG9wdE5TKFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10g
aW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbCBwaXhlbHNXaWRlOjEgcGl4ZWxzSGlnaDoxCiAg
ICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQ
bGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93
OjQgYml0c1BlclBpeGVsOjMyXSk7CkBAIC01NjgsNyArNTY4LDcgQEAgc3RhdGljIFJHQkEzMiBt
ZW51QmFja2dyb3VuZENvbG9yKCkKICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgIFtvZmZz
Y3JlZW5SZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgIHJldHVybiBtYWtlUkdC
QShwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9
CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVl
SUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDog
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFVzZSB0aGUg
bmFtZSBTaW1wbGVDb2xvciBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChjb21wb3NpdGlvbkhpZ2hsaWdodHMp
OgorCiAyMDIwLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8g
dGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0
IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJl
dmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2MjQsNyArNDYyNCw3IEBAIHN0
YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25IaWdobGkKICAgICAgICAgaWYgKCFhdHRy
aWJ1dGVzW05TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWVdKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIFdlYkNvcmU6OkNvbG9yIGhpZ2hsaWdodENvbG9yIHsgV2ViQ29y
ZTo6Q29sb3I6OmNvbXBvc2l0aW9uRmlsbCB9OworICAgICAgICBXZWJDb3JlOjpDb2xvciBoaWdo
bGlnaHRDb2xvciB7IFdlYkNvcmU6OkNvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9z
aXRpb25GaWxsQ29sb3IgfTsKICAgICAgICAgaWYgKFVJQ29sb3IgKnVpQ29sb3IgPSBhdHRyaWJ1
dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0pCiAgICAgICAgICAgICBoaWdobGln
aHRDb2xvciA9IFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IodWlDb2xvcik7CiAgICAgICAgIGhp
Z2hsaWdodHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLmxvY2F0aW9uKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5TTWF4UmFuZ2UocmFuZ2UpKSwgaGlnaGxpZ2h0Q29sb3Ig
fSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjIxMTEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAyMC0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNv
bG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNS0yNCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51cDogU3Rv
cCBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNvbG9yIChp
dCBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5kZWQgY29s
b3JzKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gQ29sb3IobWFrZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBs
ZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAg
RVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTYxLDcgKzYxLDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29s
b3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9y
RnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNU
X0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgVEVT
VChDb2xvciwgUkdCVG9IU0xfUmVkKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9y
KG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7Cisg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX0dyZWVuKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
LCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VS
R0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91
bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlUkdCQUZy
b21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91
bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJp
cHBlZENvbG9yKTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0RhcmtHcmF5KQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
bGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlUkdC
QUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQxLDcgKzE0MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0
bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVJHQkFGcm9t
SFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBw
ZWRDb2xvcik7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9M
aWdodEdyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0
bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVJHQkFGcm9t
SFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBw
ZWRDb2xvcik7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400182</attachid>
            <date>2020-05-24 16:46:09 -0700</date>
            <delta_ts>2020-05-24 18:14:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212337-20200524164607.patch</filename>
            <type>text/plain</type>
            <size>87238</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZh
c3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYXN0UGFyc2VDb2xvckludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcik6CisgICAg
ICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhleENvbG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg6Cisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIGh0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1wbGVDb2xvclZh
bHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0
YTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lQWR3YWl0YTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpuYW1l
Rm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNPcGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNTZW1hbnRpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphc1NpbXBsZUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpzZXRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNCbGFja0Nv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1doaXRlQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRSR0IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1w
ZWRDb2xvckNvbXBvbmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21D
TVlLQSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhleENvbG9ySW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VVblByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VS
R0JBMzJGcm9tRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJv
bUhTTEEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tQ01ZS0EpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5dGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCQSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNv
bG9yRnJvbUNHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFG
cm9tQ0dDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tTlND
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tTlNDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvQ29sb3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21VSUNvbG9yKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGF0dGVybkZvclRvdWNoQWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVnaW9uVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6CisK
IDIwMjAtMDUtMjQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHNvbWUgbWlzc2luZyBpbmNsdWRlcyBkdWUgdG8gdW5pZmllZCBzb3VyY2VzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckZhc3RQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSwyMCArNDA5LDIwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IENoYXIKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgQ29sb3IgZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wg
cXVpcmtzTW9kZSkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgcXVpcmtzTW9kZSkKIHsKICAgICBDU1NVbml0VHlwZSBleHBlY3QgPSBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAobGVuZ3RoID49IDQgJiYgY2hhcmFjdGVyc1swXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIHJnYjsKLSAgICAgICAgaWYgKENvbG9yOjpwYXJzZUhl
eENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAgICAgICAgICAgcmV0
dXJuIENvbG9yKHJnYik7CisgICAgICAgIGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSk7CisgICAgICAgIGlmIChjb2xvcikK
KyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICBpZiAocXVpcmtzTW9kZSAm
JiAobGVuZ3RoID09IDMgfHwgbGVuZ3RoID09IDYpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2I7Ci0g
ICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IocmdiKTsKKyAgICAgICAgYXV0byBjb2xvciA9IFNp
bXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIGlm
IChjb2xvcikKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICAvLyBUcnkg
cmdiYSgpIHN5bnRheC4KQEAgLTQzNSwxNiArNDM1LDE2IEBAIHN0YXRpYyBDb2xvciBmYXN0UGFy
c2VDb2xvckludGVybmFsKGNvbnMKICAgICAgICAgaW50IGFscGhhOwogCiAgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQp
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwg
ZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCi0g
ICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIH0KIAogICAgIC8v
IFRyeSByZ2IoKSBzeW50YXguCkBAIC00NTUsMTcgKzQ1NSwxNyBAQCBzdGF0aWMgQ29sb3IgZmFz
dFBhcnNlQ29sb3JJbnRlcm5hbChjb25zCiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50
IGJsdWU7CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBl
bmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4
cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQihyZWQsIGdy
ZWVuLCBibHVlKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KIAotICAgIHJl
dHVybiBDb2xvcigpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgdmFsdWVQb29sKQpAQCAt
NDgxLDE0ICs0ODEsMTQgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBh
cgogICAgIGJvb2wgcXVpcmtzTW9kZSA9IGlzUXVpcmtzTW9kZUJlaGF2aW9yKHBhcnNlck1vZGUp
OwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciBoZXggY29sb3JzIGFuZCByZ2IoKS9yZ2JhKCkgY29s
b3JzCi0gICAgQ29sb3IgY29sb3I7CisgICAgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOwog
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBxdWlya3NNb2Rl
KTsKICAgICBlbHNlCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgcXVpcmtzTW9kZSk7Ci0gICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCisgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIHZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKKyAgICBy
ZXR1cm4gdmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUoKmNvbG9yKTsKIH0KIAogYm9vbCBDU1NQ
YXJzZXJGYXN0UGF0aHM6OmlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlSUQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw2IEBAIHN0YXRpYyBpbnQgY2xhbXBSR0JDb21wb25lbnQo
Y29uc3QgQ1NTUHIKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVJn
YmEpOwotICAgIENvbG9yIHJlc3VsdDsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBj
b25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3JQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlm
ICghY29sb3JQYXJhbWV0ZXIpCkBAIC01ODgsMTIgKzU4NywxMCBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGFscGhhQ29tcG9uZW50ID0gc3RhdGlj
X2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4wLCAxLjApICogMjU1
LjBmKSk7CiAgICAgfTsKIAotICAgIHJlc3VsdCA9IENvbG9yKG1ha2VSR0JBKGNvbG9yQXJyYXlb
MF0sIGNvbG9yQXJyYXlbMV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KSk7Ci0KICAg
ICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29sb3JBcnJheVswXSwgY29s
b3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxwaGFDb21wb25lbnQpOwogfQogCiBzdGF0aWMg
Q29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCkBAIC02NDUsNyArNjQyLDcgQEAgc3RhdGljIENvbG9y
IHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21IU0xB
KHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGFscGhhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNjk1LDExICs2OTIsMTMg
QEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogCiBzdGF0aWMgQ29s
b3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRR
dWlya3lDb2xvcnMpCiB7Ci0gICAgUkdCQTMyIHJlc3VsdDsKKyAgICBTaW1wbGVDb2xvciByZXN1
bHQ7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gSGFzaFRva2VuKSB7Ci0gICAgICAgIGlmICghQ29sb3I6OnBh
cnNlSGV4Q29sb3IodG9rZW4udmFsdWUoKSwgcmVzdWx0KSkKKyAgICAgICAgYXV0byBzaW1wbGVD
b2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKHRva2VuLnZhbHVlKCkpOworICAgICAg
ICBpZiAoIXNpbXBsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAg
IHJlc3VsdCA9ICpzaW1wbGVDb2xvcjsKICAgICB9IGVsc2UgaWYgKGFjY2VwdFF1aXJreUNvbG9y
cykgewogICAgICAgICBTdHJpbmcgY29sb3I7CiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
TnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBAIC03MTgs
MTMgKzcxNywxNSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbG9yLmxlbmd0aCgpOwogICAgICAgICBpZiAobGVu
Z3RoICE9IDMgJiYgbGVuZ3RoICE9IDYpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAg
ICAgICAgaWYgKCFDb2xvcjo6cGFyc2VIZXhDb2xvcihjb2xvciwgcmVzdWx0KSkKKyAgICAgICAg
YXV0byBzaW1wbGVDb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbG9yKTsKKyAg
ICAgICAgaWYgKCFzaW1wbGVDb2xvcikKICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICByZXN1bHQgPSAqc2ltcGxlQ29sb3I7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJu
IENvbG9yKCk7CiAgICAgfQogICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
Ci0gICAgcmV0dXJuIENvbG9yKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3Rh
dGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRpb25IaWdobGlnaHQuaAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw5ICszOSwxNSBAQCBzdHJ1Y3QgQ29tcG9zaXRpb25IaWdobGlnaHQgewogICAgIHsKICAg
ICB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIHsgMHgzQ0FGQzBFMyB9OworI2Vs
c2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRlZmF1bHRDb21wb3NpdGlvbkZp
bGxDb2xvciB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgeyAwIH07CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0IHsgMCB9OwotICAgIENvbG9yIGNvbG9y
IHsgQ29sb3I6OmNvbXBvc2l0aW9uRmlsbCB9OworICAgIENvbG9yIGNvbG9yIHsgZGVmYXVsdENv
bXBvc2l0aW9uRmlsbENvbG9yIH07CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiBkZWNvZGUoRGVjb2RlciYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2
aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjUsMTAgKzYyNSwxMCBAQCBOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
byB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNp
bmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxp
ZXIgKiBhbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVMaWdo
dG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVyICogYWxwaGEpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbkNvbG9yLCB1bmRlcmxpbmVDb2xvci5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uQ29sb3IsIHVuZGVybGluZUNvbG9yLnNlcmlhbGl6YXRpb25Gb3JDU1Mo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkocmV2aXNpb24g
MjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDExICs2OCwxMSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2ltcGxlQ29s
b3IoU3RyaW5nVmllCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlw
YWdlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctc2ltcGxlLWNv
bG91ci12YWx1ZXMKLXN0YXRpYyBPcHRpb25hbDxSR0JBMzI+IHBhcnNlU2ltcGxlQ29sb3JWYWx1
ZShTdHJpbmdWaWV3IHN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VT
aW1wbGVDb2xvclZhbHVlKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIGlmICghaXNWYWxpZFNp
bXBsZUNvbG9yKHN0cmluZykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0
dXJuIG1ha2VSR0IodG9BU0NJSUhleFZhbHVlKHN0cmluZ1sxXSwgc3RyaW5nWzJdKSwgdG9BU0NJ
SUhleFZhbHVlKHN0cmluZ1szXSwgc3RyaW5nWzRdKSwgdG9BU0NJSUhleFZhbHVlKHN0cmluZ1s1
XSwgc3RyaW5nWzZdKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFs
dWUoc3RyaW5nWzFdLCBzdHJpbmdbMl0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzNdLCBzdHJp
bmdbNF0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzVdLCBzdHJpbmdbNl0pKTsKIH0KIAogQ29s
b3JJbnB1dFR5cGU6On5Db2xvcklucHV0VHlwZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIEhUTUxF
bGVtZW50OjphZGRIVE1MTGVuZ3RoVG9TdHlsZShNCiAgICAgYWRkUHJvcGVydHlUb1ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKHN0eWxlLCBwcm9wZXJ0eUlELCB2YWx1ZSk7CiB9CiAKLXN0YXRp
YyBSR0JBMzIgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmlu
ZyYgY29sb3JTdHJpbmcpCitzdGF0aWMgU2ltcGxlQ29sb3IgcGFyc2VDb2xvclN0cmluZ1dpdGhD
cmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgLy8gUGVy
IHNwZWMsIG9ubHkgbG9vayBhdCB0aGUgZmlyc3QgMTI4IGRpZ2l0cyBvZiB0aGUgc3RyaW5nLgog
ICAgIGNvbnN0IHNpemVfdCBtYXhDb2xvckxlbmd0aCA9IDEyODsKQEAgLTEwMDIsNyArMTAwMiw3
IEBAIHN0YXRpYyBSR0JBMzIgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUwKICAgICBkaWdpdEJ1
ZmZlci5hcHBlbmQoJzAnKTsKIAogICAgIGlmIChkaWdpdEJ1ZmZlci5zaXplKCkgPCA2KQotICAg
ICAgICByZXR1cm4gbWFrZVJHQih0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMF0pLCB0b0FT
Q0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJb
Ml0pKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFsdWUoZGln
aXRCdWZmZXJbMF0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4
VmFsdWUoZGlnaXRCdWZmZXJbMl0pKTsKIAogICAgIC8vIFNwbGl0IHRoZSBkaWdpdHMgaW50byB0
aHJlZSBjb21wb25lbnRzLCB0aGVuIHNlYXJjaCB0aGUgbGFzdCA4IGRpZ2l0cyBvZiBlYWNoIGNv
bXBvbmVudC4KICAgICBBU1NFUlQoZGlnaXRCdWZmZXIuc2l6ZSgpID49IDYpOwpAQCAtMTAyNiw3
ICsxMDI2LDcgQEAgc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TAogICAg
IGludCByZWRWYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltyZWRJbmRleF0sIGRp
Z2l0QnVmZmVyW3JlZEluZGV4ICsgMV0pOwogICAgIGludCBncmVlblZhbHVlID0gdG9BU0NJSUhl
eFZhbHVlKGRpZ2l0QnVmZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsg
MV0pOwogICAgIGludCBibHVlVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbYmx1
ZUluZGV4XSwgZGlnaXRCdWZmZXJbYmx1ZUluZGV4ICsgMV0pOwotICAgIHJldHVybiBtYWtlUkdC
KHJlZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3IocmVkVmFsdWUsIGdyZWVuVmFsdWUsIGJsdWVWYWx1ZSk7CiB9CiAKIC8vIENvbG9yIHBh
cnNpbmcgdGhhdCBtYXRjaGVzIEhUTUwncyAicnVsZXMgZm9yIHBhcnNpbmcgYSBsZWdhY3kgY29s
b3IgdmFsdWUiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJh
clRoZW1lQWR3YWl0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0MywxMyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
b3ZlcmxheVRodW1iU2l6ZSA9CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVRodW1iU2l6
ZSA9IDQwOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRodW1iU2l6ZSA9IDY7CiBzdGF0aWMgY29u
c3QgZG91YmxlIHNjcm9sbGJhck9wYWNpdHkgPSAwLjg7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2Ny
b2xsYmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKLXN0YXRpYyBj
b25zdCBDb2xvciBzY3JvbGxiYXJCb3JkZXJDb2xvciA9IG1ha2VSR0IoMjIwLCAyMjMsIDIyNyk7
Ci1zdGF0aWMgY29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQm9yZGVyQ29sb3IgPSBtYWtlUkdCQSgy
NTUsIDI1NSwgMjU1LCAxMDApOwotc3RhdGljIGNvbnN0IENvbG9yIG92ZXJsYXlUaHVtYkNvbG9y
ID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgMTAwKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0aHVtYkhv
dmVyZWRDb2xvciA9IG1ha2VSR0IoODYsIDkxLCA5Mik7Ci1zdGF0aWMgY29uc3QgQ29sb3IgdGh1
bWJQcmVzc2VkQ29sb3IgPSBtYWtlUkdCKDI3LCAxMDYsIDIwMyk7Ci1zdGF0aWMgY29uc3QgQ29s
b3IgdGh1bWJDb2xvciA9IG1ha2VSR0IoMTI2LCAxMjksIDEzMCk7CitzdGF0aWMgY29uc3QgQ29s
b3Igc2Nyb2xsYmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1MiwgMjUyLCAy
NTIpOworc3RhdGljIGNvbnN0IENvbG9yIHNjcm9sbGJhckJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDIyMCwgMjIzLCAyMjcpOworc3RhdGljIGNvbnN0IENvbG9yIG92ZXJsYXlUaHVtYkJv
cmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEwMCk7CitzdGF0aWMg
Y29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoNDYsIDUyLCA1
NCwgMTAwKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0aHVtYkhvdmVyZWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcig4NiwgOTEsIDkyKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0aHVtYlByZXNzZWRDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyNywgMTA2LCAyMDMpOworc3RhdGljIGNvbnN0IENvbG9yIHRo
dW1iQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTI2LCAxMjksIDEzMCk7CiAKIGJvb2wgU2Nyb2xs
YmFyVGhlbWVBZHdhaXRhOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAko
cmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVt
ZUFkd2FpdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyOCArMzYsMjggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvY3VzTGluZVdpZHRoID0gMTsK
LXN0YXRpYyBjb25zdCBDb2xvciBmb2N1c1JpbmdDb2xvciA9IG1ha2VSR0JBKDQ2LCA1MiwgNTQs
IDE1MCk7CitzdGF0aWMgY29uc3QgQ29sb3IgZm9jdXNSaW5nQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoNDYsIDUyLCA1NCwgMTUwKTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcnJvd1NpemUgPSAx
NjsKLXN0YXRpYyBjb25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVJHQig0NiwgNTIsIDU0KTsK
K3N0YXRpYyBjb25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1Miwg
NTQpOwogc3RhdGljIGNvbnN0IGludCBidXR0b25Gb2N1c09mZnNldCA9IC0zOwogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGJ1dHRvblBhZGRpbmcgPSA1Owogc3RhdGljIGNvbnN0IGludCBidXR0b25C
b3JkZXJTaXplID0gMTsgLy8gS2VlcCBpbiBzeW5jIHdpdGggbWVudUxpc3RCdXR0b25Cb3JkZXJT
aXplIGluIFJlbmRlclRoZW1lQWR3YWl0YS4KLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25Cb3Jk
ZXJDb2xvciA9IG1ha2VSR0IoMjA1LCAxOTksIDE5NCk7Ci1zdGF0aWMgY29uc3QgQ29sb3IgYnV0
dG9uQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNDQsIDI0MiwgMjQxKTsKLXN0YXRpYyBjb25z
dCBDb2xvciBidXR0b25CYWNrZ3JvdW5kUHJlc3NlZENvbG9yID0gbWFrZVJHQigyMTQsIDIwOSwg
MjA1KTsKLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0g
bWFrZVJHQigyNDgsIDI0OCwgMjQ3KTsKLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3Jv
dW5kRGlzYWJsZWRDb2xvciA9IG1ha2VSR0IoMjQ2LCAyNDYsIDI0NCk7Ci1zdGF0aWMgY29uc3Qg
Q29sb3IgdG9nZ2xlQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNTUsIDI1NSwgMjU1KTsKLXN0
YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVJHQigy
NDIsIDI0MiwgMjQyKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5kRGlzYWJs
ZWRDb2xvciA9IG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMgY29uc3QgQ29sb3IgYnV0
dG9uQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA1LCAxOTksIDE5NCk7CitzdGF0aWMg
Y29uc3QgQ29sb3IgYnV0dG9uQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0NCwg
MjQyLCAyNDEpOworc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmRQcmVzc2VkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMjE0LCAyMDksIDIwNSk7CitzdGF0aWMgY29uc3QgQ29sb3Ig
YnV0dG9uQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDgsIDI0OCwg
MjQ3KTsKK3N0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNDYsIDI0NiwgMjQ0KTsKK3N0YXRpYyBjb25zdCBDb2xvciB0b2dn
bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSk7CitzdGF0
aWMgY29uc3QgQ29sb3IgdG9nZ2xlQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVD
b2xvcigyNDIsIDI0MiwgMjQyKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5k
RGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKIHN0YXRpYyBj
b25zdCBkb3VibGUgdG9nZ2xlU2l6ZSA9IDE0LjsKIHN0YXRpYyBjb25zdCBpbnQgdG9nZ2xlRm9j
dXNPZmZzZXQgPSAyOwotc3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZUNvbG9yID0gbWFrZVJHQig0
NiwgNTIsIDU0KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVEaXNhYmxlZENvbG9yID0gbWFr
ZVJHQigxNjAsIDE2MCwgMTYwKTsKLXN0YXRpYyBjb25zdCBDb2xvciBzcGluQnV0dG9uQm9yZGVy
Q29sb3IgPSBtYWtlUkdCKDIyMCwgMjIzLCAyMjcpOwotc3RhdGljIGNvbnN0IENvbG9yIHNwaW5C
dXR0b25CYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOwotc3RhdGljIGNv
bnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVJHQkEoNDYs
IDUyLCA1NCwgNTApOwotc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kUHJl
c3NlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgNzApOworc3RhdGljIGNvbnN0IENvbG9y
IHRvZ2dsZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1MiwgNTQpOworc3RhdGljIGNvbnN0
IENvbG9yIHRvZ2dsZURpc2FibGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTYwLCAxNjAsIDE2
MCk7CitzdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDIyMCwgMjIzLCAyMjcpOworc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNr
Z3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMgY29u
c3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91bmRIb3ZlcmVkQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoNDYsIDUyLCA1NCwgNTApOworc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3Jv
dW5kUHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1MiwgNTQsIDcwKTsKIAogI2lm
ICFQTEFURk9STShHVEspIHx8IFVTRShHVEs0KQogVGhlbWUmIFRoZW1lOjpzaW5nbGV0b24oKQpA
QCAtNjksMTcgKzY5LDE3IEBAIFRoZW1lJiBUaGVtZTo6c2luZ2xldG9uKCkKIAogQ29sb3IgVGhl
bWVBZHdhaXRhOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAg
IHJldHVybiBtYWtlUkdCKDI1NSwgMjU1LCAyNTUpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyNTUsIDI1NSk7CiB9CiAKIENvbG9yIFRoZW1lQWR3YWl0YTo6YWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFrZVJHQig1MiwgMTMy
LCAyMjgpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoNTIsIDEzMiwgMjI4KTsKIH0KIAog
Q29sb3IgVGhlbWVBZHdhaXRhOjppbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKIH0KIAogQ29sb3IgVGhlbWVBZHdhaXRhOjpp
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
Ikhhc2hUb29scy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
QEAgLTQwLDg3ICszOSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3RleHBy
IFNpbXBsZUNvbG9yIGxpZ2h0ZW5lZEJsYWNrIHsgMHhGRjU0NTQ1NCB9Owogc3RhdGljIGNvbnN0
ZXhwciBTaW1wbGVDb2xvciBkYXJrZW5lZFdoaXRlIHsgMHhGRkFCQUJBQiB9OwogCi0vLyBvcmln
aW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvckludGVybmFs
KGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2Ip
Ci17Ci0gICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYm
IGxlbmd0aCAhPSA4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgdmFsdWUg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPDw9IDQ7Ci0gICAgICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1
ZShuYW1lW2ldKTsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA2KSB7Ci0gICAgICAgIHJnYiA9
IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBpZiAobGVuZ3RoID09IDgpIHsKLSAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1ZXMgaW50
byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCi0gICAgICAgIC8vIGV4cGVjdHMgdGhl
bSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0cy4KLSAg
ICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICAvLyAjYWJjZCBj
b252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCi0gICAgICAgIHJnYiA9IHsgKHZhbHVlICYg
MHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKLSAgICAgICAgICAgIHwgKHZhbHVlICYg
MHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCi0gICAgICAgICAgICB8ICh2YWx1ZSAm
IDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCi0gICAgcmdiID0geyAweEZGMDAw
MDAwCi0gICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8
IDgKLSAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAot
ICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciogbmFt
ZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICByZXR1cm4gcGFyc2VIZXhD
b2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikK
LXsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsK
LX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEz
MiYgcmdiKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxl
bmd0aCgpLCByZ2IpOwotICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2
KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3Io
Y29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci0gICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLX0K
LQogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29sb3ImIGMy
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9ycyBhcmUg
aW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFi
bHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUgY2FsbAog
ICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9uIGZlZWwu
IFdlJ2QgbmVlZCB0byBicmVhayBvdXQKICAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxlcyB0byBj
aGFuZ2UgdGhlbSA6KQotICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0
ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBj
MUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUg
OiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVu
ZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCkuYmx1ZUNvbXBv
bmVudCgpOwotICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQo
KS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBjMkdyZWVu
ID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMi5y
Z2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNvbXBvbmVudCgp
OworICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5yZWQo
KSAqIDI1NSA6IGMxLmFzU2ltcGxlQ29sb3IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQgYzFH
cmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDog
YzEuYXNTaW1wbGVDb2xvcigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5hc1NpbXBs
ZUNvbG9yKCkuYmx1ZUNvbXBvbmVudCgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQo
KSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLmFzU2ltcGxlQ29sb3IoKS5yZWRD
b21wb25lbnQoKTsKKyAgICBpbnQgYzJHcmVlbiA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0
ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuYXNTaW1wbGVDb2xvcigpLmdyZWVuQ29tcG9uZW50
KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5i
bHVlKCkgKiAyNTUgOiBjMi5hc1NpbXBsZUNvbG9yKCkuYmx1ZUNvbXBvbmVudCgpOwogICAgIGlu
dCBkUiA9IGMxUmVkIC0gYzJSZWQ7CiAgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CiAg
ICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOwpAQCAtMTQ2LDMwICs3NiwyOCBAQCBzdGF0aWMg
aW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lCiBDb2xvcjo6Q29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBSR0JBMzIg
Y29sb3I7Ci0gICAgICAgIGJvb2wgdmFsaWQ7Ci0KKyAgICAgICAgT3B0aW9uYWw8U2ltcGxlQ29s
b3I+IGNvbG9yOwogICAgICAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgICAgIHZhbGlk
ID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0g
MSwgY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigp
ICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKyAgICAgICAgICAgIGNvbG9yID0gU2lt
cGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVu
Z3RoKCkgLSAxKTsKIAotICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29s
b3IpOworICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcigqY29s
b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5h
bWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFs
dWUgfSk7CisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1
ZSB9KTsKICAgICB9CiB9CiAKIENvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQogewogICAg
IGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKLSAgICAg
ICAgaWYgKHBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1l
WzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVbMV0pLCBjb2xvcikpCi0gICAgICAgICAgICBzZXRSR0Io
Y29sb3IpOworICAgICAgICBhdXRvIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3Io
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5h
bWVbMV0pKTsKKyAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgc2V0U2ltcGxlQ29sb3Io
KmNvbG9yKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFt
ZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAgc2V0UkdCKHsgZm91bmRDb2xvci0+QVJHQlZhbHVl
IH0pOworICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsK
IH0KIAogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKQEAgLTE5Miw4ICsxMjAsOCBA
QCBDb2xvcjo6Q29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjCiBDb2xvcjo6Q29sb3Io
UmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1
bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCi0gICAg
Ly8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVs
b3cuCi0gICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKKyAgICAvLyB0b3AgMzIgYml0
cyB3aGVuIGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KKyAgICBtX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gMDsKICAgICBtX2NvbG9yRGF0YS5leHRlbmRl
ZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwogICAgIEFTU0VSVChpc0V4dGVuZGVk
KCkpOwogfQpAQCAtMjIyLDcgKzE1MCw3IEBAIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9y
JiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAK
ICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKIAogICAgIHJldHVy
biAqdGhpczsKIH0KQEAgLTIzMSwyNiArMTU5LDI3IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXpl
ZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1M
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwog
fQogCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVk
KCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4dCgpOwotICAgIHJldHVybiBy
Z2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7CisgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5z
ZXJpYWxpemF0aW9uRm9yQ1NTKCk7CiB9CiAKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3Jz
LgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwor
ICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4
dCgpOworICAgIHJldHVybiBhc1NpbXBsZUNvbG9yKCkuc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIHsKICAgICAvLyBI
YXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAocmdiKCkgPT0gYmxh
Y2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgYXNTaW1wbGVDb2xvcigpID09IGJsYWNrKQog
ICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAgICAgCiAgICAgY29uc3QgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC0yNzUsNyArMjA0LDcgQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKIHsK
ICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAocmdi
KCkgPT0gd2hpdGUpCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgYXNTaW1wbGVDb2xvcigpID09
IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKICAgICBjb25zdCBm
bG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTMyNCw3ICsy
NTMsNyBAQCBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgCiAgICAgaW50
IGcgPSAoc2VsZkcgKiBzZWxmQSAqICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAq
IHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDB4RkYgLSBzb3Vy
Y2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlQikgLyBkOwogCi0gICAgcmV0dXJuIG1ha2VS
R0JBKHIsIGcsIGIsIGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7
CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0CkBAIC0zNTQsNyArMjgz
LDcgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICAgICAgaW50IGcg
PSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKICAgICAgICAgaW50IGIgPSBibGVu
ZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKICAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9
IG1ha2VSR0JBKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVNpbXBsZUNv
bG9yKHIsIGcsIGIsIGFscGhhKTsKIAogICAgICAgICBpZiAociA+PSAwICYmIGcgPj0gMCAmJiBi
ID49IDApCiAgICAgICAgICAgICBicmVhazsKQEAgLTM4OCw3ICszMTcsNyBAQCBDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hl
cmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcuCiAgICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhhICogMHhGRjsKIAotICAg
IENvbG9yIHJlc3VsdCA9IHJnYigpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xv
ciByZXN1bHQgPSBhc1NpbXBsZUNvbG9yKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAg
IGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTQwMiw5ICszMzEsOSBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFVc2luZ0FsdGVybmF0CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUg
dGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZy4KLSAgICB1aW50
OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpOworICAgIHVpbnQ4X3Qg
bmV3QWxwaGEgPSBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoYWxwaGEpOwogCi0gICAgQ29s
b3IgcmVzdWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOworICAgIENvbG9yIHJl
c3VsdCA9IGFzU2ltcGxlQ29sb3IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYg
KGlzU2VtYW50aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtNDE1LDggKzM0NCw4IEBAIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9y
V2l0aEFscGhhKGZsb2EKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gQ29s
b3IgeyBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSkgfTsKIAotICAg
IGF1dG8gW3IsIGcsIGIsIGV4aXN0aW5nQWxwaGFdID0gcmdiKCk7Ci0gICAgcmV0dXJuIHsgMHhG
RiAtIHIsIDB4RkYgLSBnLCAweEZGIC0gYiwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07
CisgICAgYXV0byBbciwgZywgYiwgZXhpc3RpbmdBbHBoYV0gPSBhc1NpbXBsZUNvbG9yKCk7Cisg
ICAgcmV0dXJuIHsgMHhGRiAtIHIsIDB4RkYgLSBnLCAweEZGIC0gYiwgY29sb3JGbG9hdFRvU2lt
cGxlQ29sb3JCeXRlKGFscGhhKSB9OwogfQogCiBDb2xvciBDb2xvcjo6c2VtYW50aWNDb2xvcigp
IGNvbnN0CkBAIC00MzQsMTcgKzM2MywxOCBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRD
b21wb25lbnRzPiBDCiAgICAgICAgIHJldHVybiB7IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgp
LCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkgfTsKICAgICB9CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHJnYigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYXNTaW1wbGVDb2xvcigpOwog
ICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHIgLyAyNTUu
MGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsICBhIC8gMjU1LjBmIH0gfTsKIH0KIAogU2ltcGxl
Q29sb3IgQ29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKIHsKLSAgICBpZiAo
IWlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHJnYigpOworICAgIGlmIChpc0V4dGVuZGVk
KCkpIHsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEp
OworICAgIH0KIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwotICAgIHJldHVybiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKKyAgICBy
ZXR1cm4gYXNTaW1wbGVDb2xvcigpOwogfQogCiBGbG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSBjb25zdApAQCAtNDc2LDIwICs0MDYsMjAgQEAgQ29sb3IgYmxl
bmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KICAgICAvLyBXZSBuZWVkIHRvIHBy
ZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBhdCB0aGUgZW5kIG9mIHRoZSBhbmlt
YXRpb24KICAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIFNpbmNlIG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQSgpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0
LgotICAgIGF1dG8gcHJlbXVsdEZyb20gPSBmcm9tLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGll
ZFJHQkEoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVu
dDsKLSAgICBhdXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFJH
QkEodG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cisg
ICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcigpIGJhaWxzIG9uIHplcm8g
YWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0LgorICAgIGF1dG8gcHJlbXVsdEZyb20gPSBmcm9tLmFs
cGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGZyb20udG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgYXV0byBwcmVtdWx0VG8gPSB0
by5hbHBoYSgpID8gbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcih0by50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAotICAgIFJHQkEzMiBwcmVtdWx0
QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgIFNpbXBsZUNvbG9yIHByZW11bHRCbGVuZGVkID0gbWFr
ZVNpbXBsZUNvbG9yKAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21w
b25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVl
bkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRG
cm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3Mp
LAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBw
cmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCiAgICAgKTsKIAotICAgIHJldHVy
biBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7CisgICAgcmV0dXJuIG1h
a2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwcmVtdWx0QmxlbmRlZCk7CiB9CiAKIENvbG9y
IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYg
dG8sIGRvdWJsZSBwcm9ncmVzcykKQEAgLTUxMiwxMyArNDQyLDcgQEAgQ29sb3IgYmxlbmRXaXRo
b3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiB2b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKIHsK
LSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gdmFsaWRSR0JBQ29sb3I7Ci19Ci0KLWNv
bnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3I7
CisgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNvbG9y
OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJ
KHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCw5IEBACiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgogI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlICJTaW1wbGVDb2xv
ci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDx1
bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0xDaGFyLmg+CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBD
R0NvbG9yUmVmOwpAQCAtNjQsMzggKzYwLDM4IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBS
ZW1vdmUgYWxsIHRoZXNlIGNvbnN0cnVjdG9ycyBhbmQgY3JlYXRpb24gZnVuY3Rpb25zIGFuZCBy
ZXBsYWNlIHRoZSBvbmVzIHRoYXQgYXJlIHN0aWxsIG5lZWRlZCB3aXRoIGZyZWUgZnVuY3Rpb25z
LgogCi0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xv
cihTaW1wbGVDb2xvciBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCiAgICAgewogICAgICAgICBp
ZiAodmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICAgICAgc2V0U2lt
cGxlQ29sb3IoY29sb3IpOwogICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRp
YyB9OwotICAgIENvbG9yKFJHQkEzMiBjb2xvciwgU2VtYW50aWNUYWcpCisgICAgQ29sb3IoU2lt
cGxlQ29sb3IgY29sb3IsIFNlbWFudGljVGFnKQogICAgIHsKLSAgICAgICAgc2V0UkdCKGNvbG9y
KTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwogICAgICAgICBzZXRJc1NlbWFudGlj
KCk7CiAgICAgfQogCiAgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKICAgICB7Ci0gICAg
ICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNv
bG9yKHIsIGcsIGIpKTsKICAgICB9CiAKICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKICAgICB7Ci0gICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBnLCBiLCBhKSk7CisgICAg
ICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKSk7CiAgICAgfQog
CiAgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKICAgICB7Ci0g
ICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CisgICAgICAg
IHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkpOwog
ICAgIH0KIAogICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0aGUgc3BlY2lmaWMgQ01Z
SyBhbmQgYWxwaGEgdmFsdWVzLgogICAgIENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCiAgICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ01Z
S0EoYywgbSwgeSwgaywgYSkpOworICAgICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29s
b3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwpAQCAtMTAzLDIzICs5OSwyMyBAQCBwdWJs
aWM6CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiBpbnZhbGlk
UkdCQUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRIYXNo
VmFsdWUgJiB2YWxpZFJHQkFDb2xvckJpdCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBt
dXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBSR0JBMzIgQ29sb3IiKTsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFz
aCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJHQkEzMiBDb2xvciB3b3Vs
ZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGRlbGV0ZWRI
YXNoVmFsdWU7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFs
aWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sg
bGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShkZWxldGVk
SGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2
YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBTaW1wbGVDb2xvciIpOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRl
ZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gU2ltcGxlQ29sb3Ig
d291bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
ID0gZGVsZXRlZEhhc2hWYWx1ZTsKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwogICAg
IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVl
OworICAgICAgICByZXR1cm4gbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9PSBkZWxl
dGVkSGFzaFZhbHVlOwogICAgIH0KIAogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxl
RW1wdHlWYWx1ZVR5cGUpCiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZh
bHVlICYgaW52YWxpZFJHQkFDb2xvciwgIkNvbG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5v
dCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGVt
cHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0
IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJHQkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7
Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGVtcHR5SGFzaFZhbHVlOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZFNpbXBsZUNvbG9yLCAi
Q29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENv
bG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwg
IkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQg
YW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5zaW1w
bGVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CiAgICAgICAgIEFTU0VSVCghaXNFeHRl
bmRlZCgpKTsKICAgICB9CiAKQEAgLTE0NywxMyArMTQzLDEzIEBAIHB1YmxpYzoKICAgICAvLyBS
ZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFzIGVpdGhlciAjUlJHR0JCIG9yICNSUkdHQkJB
QQogICAgIFN0cmluZyBuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgJiB2YWxpZFJHQkFDb2xvckJpdCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgJiB2YWxpZFNpbXBsZUNvbG9yQml0KTsgfQogCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6
IHJnYigpLmlzT3BhcXVlKCk7IH0KLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogcmdiKCkuaXNWaXNp
YmxlKCk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGVDb2xvcigpLmlzT3BhcXVl
KCk7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/
IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGVDb2xvcigpLmlzVmlzaWJsZSgp
OyB9CiAKLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KLSAgICBm
bG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVu
ZGVkKCkuYWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CisgICAgaW50
IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgKiAyNTUgOiBhc1NpbXBsZUNvbG9yKCkuYWxwaGFDb21wb25lbnQoKTsgfQorICAgIGZsb2F0
IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpIDogYXNTaW1wbGVDb2xvcigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAK
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTE5MSw3ICsxODcsNyBAQCBwdWJsaWM6
CiAgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUg
Y29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCi0gICAgYm9v
bCBpc1NlbWFudGljKCkgY29uc3QgeyByZXR1cm4gIWlzRXh0ZW5kZWQoKSAmJiAobV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzICYgaXNTZW1hbnRpY1JCR0FDb2xvckJpdCk7IH0KKyAgICBib29sIGlz
U2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0KTsgfQogCiAjaWYg
UExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKQEAgLTIxMCwxMSArMjA2
LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfVkVDVE9SXzRG
KCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3Qg
U3RyaW5nJiwgUkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBT
dHJpbmdWaWV3JiwgUkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25z
dCBMQ2hhciosIHVuc2lnbmVkLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENv
bG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBTaW1wbGVDb2xvciBibGFjayB7IDB4RkYwMDAwMDAgfTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIHdoaXRlIHsgMHhGRkZGRkZGRiB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgU2ltcGxlQ29sb3IgZGFya0dyYXkgeyAweEZGODA4MDgwIH07CkBAIC0yMjQsMTcgKzIxNSwx
MSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjeWFuIHsgMHhG
RjAwRkZGRiB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgeWVsbG93IHsgMHhG
RkZGRkYwMCB9OwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4M0NBRkMwRTMgfTsKLSNlbHNlCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21wb3NpdGlvbkZpbGwgeyAweEZGRTFE
RDU1IH07Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNFeHRlbmRlZCgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpbnZhbGlkUkdCQUNvbG9y
KTsKKyAgICAgICAgcmV0dXJuICEobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIGlu
dmFsaWRTaW1wbGVDb2xvcik7CiAgICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEV4dGVu
ZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKKyAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBh
c0V4dGVuZGVkKCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9
KGNvbnN0IENvbG9yJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShDb2xv
ciYmKTsKQEAgLTI1MiwxOSArMjM3LDE5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZh
dGU6Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQg
ZywgaW50IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywgYikpOyB9Ci0gICAgdm9pZCBzZXRSR0Io
UkdCQTMyKTsKLSAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyB8PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9CisgICAgY29uc3QgU2ltcGxlQ29sb3Ig
YXNTaW1wbGVDb2xvcigpIGNvbnN0OworCisgICAgdm9pZCBzZXRTaW1wbGVDb2xvcihTaW1wbGVD
b2xvcik7CisgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQogCiAgICAgLy8gMHhfX19f
X19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xvciBwb2ludGVyLgotICAgIC8vIDB4X19fX19fXzAxIGlz
IGFuIGludmFsaWQgUkdCQTMyLgotICAgIC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgUkdCQTMy
LgorICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgU2ltcGxlQ29sb3IuCisgICAgLy8g
MHhfX19fX19fMTEgaXMgYSB2YWxpZCBTaW1wbGVDb2xvci4KICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52
YWxpZFJHQkFDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JB
Q29sb3JCaXQgPSAweDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9y
ID0gMHgzOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljUkJHQUNvbG9yQml0
ID0gMHg0OworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZhbGlkU2ltcGxlQ29sb3IgPSAw
eDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkU2ltcGxlQ29sb3JCaXQgPSAweDI7
CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkU2ltcGxlQ29sb3IgPSAweDM7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCA9IDB4NDsKIAog
ICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFzaFZhbHVlID0gMHhGRkZGRkZGRkZG
RkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBlbXB0eUhhc2hWYWx1ZSA9IDB4RkZG
RkZGRkZGRkZGRkZGQjsKQEAgLTI3Miw3ICsyNTcsNyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdGFnQXNWYWxpZCgpOwogCiAgICAgdW5pb24gewotICAgICAgICB1aW50NjRf
dCByZ2JhQW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07CisgICAgICAgIHVpbnQ2NF90IHNp
bXBsZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkU2ltcGxlQ29sb3IgfTsKICAgICAgICAgRXh0ZW5k
ZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRhOwogfTsKQEAgLTMwMCw3
ICsyODUsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjCiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gZXh0
ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9PSBiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFnczsKKyAgICByZXR1cm4gYS5tX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGIubV9jb2xvckRhdGEuc2ltcGxlQ29sb3JB
bmRGbGFnczsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCkBAIC0zMTIsMTUgKzI5NywxNCBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjCiB7CiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRl
bmRlZCgpKQogICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKLSAgICBy
ZXR1cm4gKGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJH
QUNvbG9yQml0KSA9PSAoYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2Vt
YW50aWNSQkdBQ29sb3JCaXQpOworICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpID09IChiLm1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xv
ckJpdCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNoKCk7Ci0K
LSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyk7CisgICAg
cmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzKTsKIH0K
IAogaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBAIC0zMzMsMTcg
KzMxNywyMiBAQCBpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBCiAgICAg
cmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxw
aGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5lIFJHQkEzMiBDb2xvcjo6cmdiKCkgY29u
c3QKK2lubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwg
b3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENv
bG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUg
cmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCi0gICAgcmV0dXJuIHsgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikgfTsKKyAgICBB
U1NFUlQoaXNFeHRlbmRlZCgpKTsKKyAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29s
b3I7CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikKK2lubGluZSBj
b25zdCBTaW1wbGVDb2xvciBDb2xvcjo6YXNTaW1wbGVDb2xvcigpIGNvbnN0CiB7Ci0gICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJnYi52YWx1ZSgp
KSA8PCAzMjsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghaXNFeHRlbmRlZCgpKSBo
ZXJlIG9uY2Ugd2UgaGF2ZSB2ZXJpZmllZCBhbGwKKyAgICAvLyBjYWxsIHNpdGVzIGFyZSBjaGVj
a2luZyBpc0V4dGVuZGVkKCkuCisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
Y29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH07Cit9CisKK2lubGluZSB2b2lk
IENvbG9yOjpzZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvciBzaW1wbGVDb2xvcikKK3sKKyAgICBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNp
bXBsZUNvbG9yLnZhbHVlKCkpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIApAQCAtMzU0
LDcgKzM0Myw3IEBAIGlubGluZSBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ28KICAg
ICAgICAgcmV0dXJuICFleHRlbmRlZENvbG9yLnJlZCgpICYmICFleHRlbmRlZENvbG9yLmdyZWVu
KCkgJiYgIWV4dGVuZGVkQ29sb3IuYmx1ZSgpICYmIGV4dGVuZGVkQ29sb3IuYWxwaGEoKSA9PSAx
OwogICAgIH0KIAotICAgIHJldHVybiBjb2xvci5yZ2IoKSA9PSBDb2xvcjo6YmxhY2s7CisgICAg
cmV0dXJuIGNvbG9yLmFzU2ltcGxlQ29sb3IoKSA9PSBDb2xvcjo6YmxhY2s7CiB9CiAKIGlubGlu
ZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMzY0LDcg
KzM1Myw3IEBAIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ28KICAgICAg
ICAgcmV0dXJuIGV4dGVuZGVkQ29sb3IucmVkKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmdyZWVu
KCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmJsdWUoKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYWxw
aGEoKSA9PSAxOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6
OndoaXRlOworICAgIHJldHVybiBjb2xvci5hc1NpbXBsZUNvbG9yKCkgPT0gQ29sb3I6OndoaXRl
OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzg5LDEwICszNzgsOCBAQCB2b2lk
IENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uCiAKICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGljLgogCi0gICAgdWlu
dDMyX3QgdmFsdWUgPSByZ2IoKS52YWx1ZSgpOwotCiAgICAgZW5jb2RlciA8PCB0cnVlOwotICAg
IGVuY29kZXIgPDwgdmFsdWU7CisgICAgZW5jb2RlciA8PCBhc1NpbXBsZUNvbG9yKCkudmFsdWUo
KTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTQxOCw3ICs0MDUsNyBAQCBPcHRp
b25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9yKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb2xvclNwYWNlKTsKKyAgICAgICAgcmV0dXJuIENvbG9y
IHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UgfTsKICAgICB9CiAKICAgICBi
b29sIGlzVmFsaWQ7CkBAIC00MjYsNyArNDEzLDcgQEAgT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYg
KCFpc1ZhbGlkKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIENvbG9y
IHsgfTsKIAogICAgIHVpbnQzMl90IHZhbHVlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFs
dWUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1
LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvckNvbXBvbgogaW5saW5lIHVp
bnQ4X3QgY2xhbXBlZENvbG9yQ29tcG9uZW50KGZsb2F0IGYpCiB7CiAgICAgLy8gU2VlIGFsc28g
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKS4KLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4o
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7CisgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1
KTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVu
c2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyNjIx
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBwaXhlbCA9
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbC5yZWRDb21wb25lbnQoKSwgcGl4ZWwuZ3JlZW5D
b21wb25lbnQoKSwgcGl4ZWwuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbC5hbHBoYUNvbXBvbmVudCgp
LCBmYWxzZSk7CisgICAgICAgICAgICBwaXhlbCA9IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29s
b3IocGl4ZWwucmVkQ29tcG9uZW50KCksIHBpeGVsLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsLmJs
dWVDb21wb25lbnQoKSwgcGl4ZWwuYWxwaGFDb21wb25lbnQoKSwgZmFsc2UpOwogCiAgICAgICAg
IHVuc2lnbmVkIGQgPSAyNTUgLSBhOwogCkBAIC0xNzAsOSArMTcwLDkgQEAgcHVibGljOgogICAg
ICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwuYWxwaGFDb21wb25lbnQoKSk7CiAK
ICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVJHQkEociwgZywgYiwgYSkudmFsdWUoKTsKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVNpbXBs
ZUNvbG9yKHIsIGcsIGIsIGEpLnZhbHVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSkudmFsdWUoKTsKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHIsIGcsIGIsIGEp
LnZhbHVlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQpAQCAtMjI1LDkgKzIyNSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gMDsKIAogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCi0gICAg
ICAgICAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEsIGZhbHNlKS52
YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3Io
ciwgZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7CiAKLSAgICAgICAgcmV0dXJuIG1ha2VSR0JBKHIs
IGcsIGIsIGEpLnZhbHVlKCk7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywg
YiwgYSkudmFsdWUoKTsKICAgICB9CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyOjpEYXRhU2Vn
bWVudD4gbV9waXhlbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDUzICs0Myw1MyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoCiAg
ICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7CiB9CiAKLVJHQkEz
MiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wg
Y2VpbGluZykKK1NpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZykKIHsKLSAgICByZXR1cm4gbWFrZVJH
QkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFu
bmVsKGcsIGEsIGNlaWxpbmcpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwg
YSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
LCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRp
cGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKIH0KIAotUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK1NpbXBsZUNvbG9yIG1ha2VQcmVtdWx0aXBs
aWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IgcGl4ZWxDb2xvcikKIHsKICAgICBpZiAocGl4ZWxD
b2xvci5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKLSAgICByZXR1cm4g
bWFrZVByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29s
b3IuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29s
b3IuYWxwaGFDb21wb25lbnQoKSk7CisgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxl
Q29sb3IocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVu
dCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVu
dCgpKTsKIH0KIAotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKQorU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogewotICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
ZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwogfQogCi1SR0JBMzIgbWFr
ZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCitTaW1wbGVDb2xvciBtYWtl
VW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IgcGl4ZWxDb2xvcikKIHsKICAg
ICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUoKSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQot
ICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21w
b25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21w
b25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBw
aXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBw
aXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQog
Ci1SR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwg
ZmxvYXQgYSkKK1NpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwg
ZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JG
bG9hdFRvUkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9S
R0JBQnl0ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKHIpLCBjb2xvckZsb2F0VG9TaW1w
bGVDb2xvckJ5dGUoZyksIGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShiKSwgY29sb3JGbG9h
dFRvU2ltcGxlQ29sb3JCeXRlKGEpKTsKIH0KIAotUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxv
YXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQor
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1
cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQogewogICAgIGNvbnN0IGZsb2F0
IHNjYWxlRmFjdG9yID0gMjU1LjA7CiAgICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0g
aHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOwotICAgIHJl
dHVybiBtYWtlUkdCQSgKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICByb3Vu
ZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzBdICogc2NhbGVGYWN0b3IpLAogICAgICAgICByb3Vu
ZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzFdICogc2NhbGVGYWN0b3IpLAogICAgICAgICByb3Vu
ZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzJdICogc2NhbGVGYWN0b3IpLAogICAgICAgICByb3Vu
ZChmbG9hdFJlc3VsdC5jb21wb25lbnRzWzNdICogc2NhbGVGYWN0b3IpKTsKIH0KIAotUkdCQTMy
IG1ha2VSR0JBRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZs
b2F0IGEpCitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKICAgICBkb3VibGUgY29sb3JzID0g
MSAtIGs7CiAgICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICog
KGNvbG9ycyAqICgxIC0gYykpKTsKICAgICBpbnQgZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFm
dGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwogICAgIGludCBiID0gc3RhdGljX2Nh
c3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0
dXJuIG1ha2VSR0JBKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAw
KSAqIGEpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0
PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKIH0KIAogU3RyaW5nIFNpbXBsZUNvbG9y
OjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0CkBAIC0xMzUsNCArMTM1LDczIEBAIFN0cmlu
ZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvclJlbmQKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiksIGhleChncmVlbkNvbXBvbmVudCgpLCAyKSwg
aGV4KGJsdWVDb21wb25lbnQoKSwgMikpOwogfQogCisvLyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUg
ZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgaW5saW5lIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9ySW50ZXJuYWwo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChs
ZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0gNiAmJiBsZW5ndGggIT0gOCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IDA7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICgh
aXNBU0NJSUhleERpZ2l0KG5hbWVbaV0pKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1
ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA2KQorICAgICAgICByZXR1cm4g
U2ltcGxlQ29sb3IgeyAweEZGMDAwMDAwIHwgdmFsdWUgfTsKKyAgICBpZiAobGVuZ3RoID09IDgp
IHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1ZXMgaW50byBSR0JBIG9yZGVyLCBidXQg
dGhlIFNpbXBsZUNvbG9yIHR5cGUKKyAgICAgICAgLy8gZXhwZWN0cyB0aGVtIHRvIGJlIGluIEFS
R0Igb3JkZXIsIHNvIHdlIHJpZ2h0IHJvdGF0ZSBlaWdodCBiaXRzLgorICAgICAgICByZXR1cm4g
U2ltcGxlQ29sb3IgeyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICB9CisgICAgaWYg
KGxlbmd0aCA9PSA0KSB7CisgICAgICAgIC8vICNhYmNkIGNvbnZlcnRzIHRvIGRkYWFiYmNjIGlu
IFNpbXBsZUNvbG9yLgorICAgICAgICByZXR1cm4gU2ltcGxlQ29sb3IgeworICAgICAgICAgICAg
ICAodmFsdWUgJiAweEYpIDw8IDI4IHwgKHZhbHVlICYgMHhGKSA8PCAyNAorICAgICAgICAgICAg
fCAodmFsdWUgJiAweEYwMDApIDw8IDggfCAodmFsdWUgJiAweEYwMDApIDw8IDQKKyAgICAgICAg
ICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDQgfCAodmFsdWUgJiAweEYwMCkKKyAgICAgICAgICAg
IHwgKHZhbHVlICYgMHhGMCkgfCAodmFsdWUgJiAweEYwKSA+PiA0CisgICAgICAgIH07CisgICAg
fQorICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYworICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7CisgICAgICAgICAgKDB4RkYwMDAwMDApCisgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8
IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgKKyAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4
IHwgKHZhbHVlICYgMHhGMCkgPDwgNAorICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2
YWx1ZSAmIDB4RikKKyAgICB9OworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29s
b3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCk7Cit9CisKK09w
dGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50
ZXJuYWwobmFtZSwgbGVuZ3RoKTsKK30KKworT3B0aW9uYWw8U2ltcGxlQ29sb3I+IFNpbXBsZUNv
bG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFy
c2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVy
biBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCkpOworfQor
CitPcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3Qg
U3RyaW5nVmlldyYgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgp
OworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlm
IChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJh
Y3RlcnM4KCksIG5hbWUubGVuZ3RoKCkpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUu
Y2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCkpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDE2IEBACiAj
aW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVk
ZSA8Y21hdGg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvTENo
YXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBDb2xvciB2YWx1ZSB3aXRoIDgtYml0
IGNvbXBvbmVudHMgZm9yIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYS4KIC8vIEZvciBoaXN0
b3JpY2FsIHJlYXNvbnMsIHN0b3JlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aXRoIGFscGhhIGlu
IHRoZSBoaWdoIGJpdHM6IEFSR0IuCisvLyBGSVhNRTogVGhpcyBjbGFzcyBzaG91bGQgYmUgY29u
c29saWRhdGVkIHdpdGggQ29sb3JDb21wb25lbnRzLgogY2xhc3MgU2ltcGxlQ29sb3IgewogcHVi
bGljOgogICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50MzJfdCB2YWx1ZSA9IDApIDogbV92
YWx1ZSB7IHZhbHVlIH0geyB9CkBAIC03MCw2ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgT3B0aW9uYWw8
U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIE9w
dGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAg
ICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIq
LCB1bnNpZ25lZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENv
bG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOworCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1f
dmFsdWUgeyAwIH07CiB9OwpAQCAtNzcsMjAgKzg2LDE3IEBAIHByaXZhdGU6CiBib29sIG9wZXJh
dG9yPT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVD
b2xvciwgU2ltcGxlQ29sb3IpOwogCi0vLyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgbWlncmF0
aW5nIHRvIHRoZSBuZXcgbmFtZS4KLXVzaW5nIFJHQkEzMiA9IFNpbXBsZUNvbG9yOwotCi1jb25z
dGV4cHIgUkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYik7Ci1jb25zdGV4cHIgUkdC
QTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK2NvbnN0ZXhwciBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYik7Citjb25zdGV4cHIg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsK
IAotUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSk7Ci1SR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKFJH
QkEzMik7Ci1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpOwotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKFJHQkEzMik7Ci0KLVdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBn
LCBmbG9hdCBiLCBmbG9hdCBhKTsKLVdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQUZyb21I
U0xBKGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IGwsIGZsb2F0IGEpOwotUkdCQTMyIG1ha2VSR0JB
RnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOwor
U2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGlu
dCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSk7CitTaW1wbGVDb2xvciBtYWtlUHJlbXVs
dGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKK1NpbXBsZUNvbG9yIG1ha2VVbnByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitTaW1wbGVD
b2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOworCitXRUJD
T1JFX0VYUE9SVCBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQg
YSk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQg
bSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CiAKIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChpbnQpOwogdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0
KTsKQEAgLTk4LDcgKzEwNCw3IEBAIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChm
bG9hdCkKIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQx
Nl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKLXVpbnQ4X3QgY29sb3JGbG9hdFRvUkdC
QUJ5dGUoZmxvYXQpOwordWludDhfdCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoZmxvYXQp
OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIp
CiB7CkBAIC0xMTIsMTIgKzExOCwxMiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNv
bG9yIGEsIFNpCiAKIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50
IHZhbHVlKQogewotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigyNTUsIHZhbHVlKSk7
CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CiB9CiAKIGlubGluZSB1aW50
OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7CisgICAg
cmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuZiwgMjU1LmYpOwogfQogCiBp
bmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkBAIC0xMzQs
MjEgKzE0MCwyMSBAQCBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90CiAg
ICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVtYWluZGVyID4+IDgpOwogfQogCi1pbmxpbmUg
dWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoraW5saW5lIHVpbnQ4X3QgY29s
b3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8gRklYTUU6IENvbnNv
bGlkYXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9uZW50KCkuCiAgICAgLy8gV2UgdXNlIGxyb3Vu
ZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJv
dW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4o
bHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDAsIDI1NSk7CiB9CiAKLWNvbnN0ZXhw
ciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQorY29uc3RleHByIFNpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewotICAgIHJldHVybiBt
YWtlUkdCQShyLCBnLCBiLCAweEZGKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcs
IGIsIDB4RkYpOwogfQogCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKQorY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSkKIHsKLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMHhGRikpIDw8IDI0IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4ociwgMHhGRikpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oZywgMHhGRikp
IDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAweEZGKSkpIH07CisgICAgcmV0dXJuIHsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6Y2xhbXAoYSwgMCwgMHhGRikgPDwgMjQgfCBzdGQ6
OmNsYW1wKHIsIDAsIDB4RkYpIDw8IDE2IHwgc3RkOjpjbGFtcChnLCAwLCAweEZGKSA8PCA4IHwg
c3RkOjpjbGFtcChiLCAwLCAweEZGKSkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNw
cAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6On5JbmJhbmRUZXh0
VHIKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4g
bWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShDRkFycmF5UmVmIGNvbG9yQXJyYXkpCitzdGF0aWMg
T3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJheShDRkFy
cmF5UmVmIGNvbG9yQXJyYXkpCiB7CiAgICAgaWYgKENGQXJyYXlHZXRDb3VudChjb2xvckFycmF5
KSA8IDQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC04MCw3ICs4MCw3IEBAIHN0
YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gbWFrZVJHQkEzMkYKICAgICAgICAgY29tcG9uZW50
QXJyYXlbaV0gPSBjb21wb25lbnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIG1ha2VSR0JBMzJGcm9t
RmxvYXRzKGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJy
YXlbM10sIGNvbXBvbmVudEFycmF5WzBdKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFy
cmF5WzNdLCBjb21wb25lbnRBcnJheVswXSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0
ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykKQEAgLTI2Nyw3ICsyNjcsNyBAQCBSZWY8SW5i
YW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAgICAgaWYgKENG
R2V0VHlwZUlEKGFycmF5VmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0
byBjb2xvciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJheShhcnJh
eVZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRGb3JlZ3JvdW5kQ29sb3Io
KmNvbG9yKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5k
VGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUp
ICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VSR0JBMzJG
cm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9
IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWNvbG9yKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBjdWVEYXRhLT5zZXRCYWNrZ3JvdW5kQ29sb3IoKmNvbG9yKTsKQEAgLTI5MSw3ICsy
OTEsNyBAQCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpCiAgICAgICAg
ICAgICAgICAgaWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlW
YWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21B
UkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRI
aWdobGlnaHRDb2xvcigqY29sb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCw5IEBAIHZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKICAgICAgICAgdW5zaWduZWQqIHJv
dyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkp
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsr
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAgICAgICAgICAg
YXV0byBwaXhlbENvbG9yID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoKnBpeGVsKTsKLSAgICAg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUkdCQShsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29t
cG9uZW50KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHBp
eGVsQ29sb3IpLnZhbHVlKCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSBtYWtlVW5w
cmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKV0s
IGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQoKV0sIGxvb2tVcFRhYmxlW3Bp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpXSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsK
KyAgICAgICAgICAgICpwaXhlbCA9IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IocGl4ZWxD
b2xvcikudmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0
aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3Bw
CShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBA
QCBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFn
ZS5nZXQoKSkpOwotICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQSgqcGl4ZWwpOwor
ICAgIFNpbXBsZUNvbG9yKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFNpbXBsZUNvbG9y
Kj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOworICAgIHJldHVy
biBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoKnBpeGVsKTsKIH0KIAogdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEs
MTAgQEAgUmV0YWluUHRyPENHQ29sb3JSZWY+IFRpbnlMUlVDYWNoZVBvbGljeQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9tQ0dDb2xvcihDR0NvbG9y
UmVmIGNvbG9yKQorc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
KENHQ29sb3JSZWYgY29sb3IpCiB7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgc2l6ZV90IG51bUNvbXBvbmVudHMgPSBD
R0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBjb25zdCBDR0Zsb2F0KiBj
b21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOwogCkBAIC03NywyNyArNzks
MzEgQEAgc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21DR0NvbG9yKENHQ29sbwogICAgIH0KIAog
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAu
MCk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIgKiBzY2FsZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9y
LCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcihyICogc2NhbGVGYWN0b3IsIGcgKiBzY2FsZUZhY3RvciwgYiAqIHNjYWxlRmFjdG9y
LCBhICogc2NhbGVGYWN0b3IpOwogfQogCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
IHsKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBz
cGFjZXMuCisKICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9y
QW5kRmxhZ3MgPSBpbnZhbGlkU2ltcGxlQ29sb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ0dDb2xvcihjb2xvcikpOworICAgIHNldFNpbXBsZUNv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSk7CiB9CiAKIENvbG9yOjpDb2xv
cihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKKyAgICAvLyBGSVhNRTogRXh0ZW5k
ZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWNvbG9y
KSB7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7
CisgICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBpbnZhbGlkU2ltcGxl
Q29sb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRSR0IobWFrZVJHQkFGcm9t
Q0dDb2xvcihjb2xvcikpOworICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21D
R0NvbG9yKGNvbG9yKSk7CiAgICAgc2V0SXNTZW1hbnRpYygpOwogfQogCkBAIC0xMjQsNyArMTMw
LDcgQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogQ0dDb2xvclJl
ZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yLmlz
RXh0ZW5kZWQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvbG9yLnJnYigpLnZhbHVlKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChjb2xvci5hc1NpbXBsZUNvbG9yKCkudmFsdWUoKSkgewogICAgICAgICBj
YXNlIENvbG9yOjp0cmFuc3BhcmVudC52YWx1ZSgpOiB7CiAgICAgICAgICAgICBzdGF0aWMgQ0dD
b2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAgICAg
ICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwpAQCAtMTQwLDcgKzE0Niw3IEBAIENHQ29s
b3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY28KICAgICAgICAgfQogICAgIH0KIAot
ICAgIEFTU0VSVChjb2xvci5pc0V4dGVuZGVkKCkgfHwgY29sb3IucmdiKCkudmFsdWUoKSk7Cisg
ICAgQVNTRVJUKGNvbG9yLmlzRXh0ZW5kZWQoKSB8fCBjb2xvci5hc1NpbXBsZUNvbG9yKCkudmFs
dWUoKSk7CiAKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGlueUxSVUNhY2hlPENvbG9yLCBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4sIDMyPj4gY2FjaGU7CiAgICAgcmV0dXJuIGNhY2hlLmdldCgp
LmdldChjb2xvcikuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDEwICsyOCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihj
b25zdCBHZGtSR0JBJiBjKQogewotICAgIHNldFJHQihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+
KGMucmVkICogMjU1KSwKKyAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IoCisgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAogICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KGMuZ3JlZW4gKiAyNTUpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYmx1ZSAqIDI1
NSksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5hbHBoYSAqIDI1NSkpKTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihjLmFscGhhICogMjU1KQorICAgICkpOwogfQogCiBDb2xvcjo6b3Bl
cmF0b3IgR2RrUkdCQSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUzLDggKzUzLDEwIEBAIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKQogICAg
IHJldHVybiB1c2VPbGRBcXVhRm9jdXNSaW5nQ29sb3I7CiB9CiAKLXN0YXRpYyBSR0JBMzIgbWFr
ZVJHQkFGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKK3N0YXRpYyBTaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsKKyAgICAvLyBGSVhNRTog
RXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBBU1NF
UlRfQVJHKGNvbG9yLCBjb2xvcik7CiAKICAgICBDR0Zsb2F0IHJlZENvbXBvbmVudDsKQEAgLTgw
LDI0ICs4MiwyOCBAQCBzdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbU5TQ29sb3IoTlNDb2xvCiAg
ICAgICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgICAgIFtvZmZzY3JlZW5SZXAgZ2V0UGl4
ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgICAgICByZXR1cm4gbWFrZVJHQkEocGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKICAgICB9CiAK
ICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVJHQkEoc2NhbGVGYWN0b3IgKiByZWRD
b21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1
ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBncmVlbkNvbXBv
bmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGFscGhhKTsK
IH0KIAogQ29sb3IgY29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsKLSAgICByZXR1
cm4gQ29sb3IobWFrZVJHQkFGcm9tTlNDb2xvcihjb2xvcikpOworICAgIC8vIEZJWE1FOiBFeHRl
bmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKworICAgIHJldHVybiBD
b2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOwogfQogCiBDb2xvciBzZW1h
bnRpY0NvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7Ci0gICAgcmV0dXJuIENvbG9y
KG1ha2VSR0JBRnJvbU5TQ29sb3IoY29sb3IpLCBDb2xvcjo6U2VtYW50aWMpOworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKworICAg
IHJldHVybiBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvciksIENvbG9yOjpT
ZW1hbnRpYyk7CiB9CiAKIE5TQ29sb3IgKm5zQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xv
ckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1Jf
RiBjb2xvcikKIHsKLSAgICBzZXRSR0IobWFrZVJHQkEoY29sb3IuciAqIDI1NSwgY29sb3IuZyAq
IDI1NSwgY29sb3IuYiAqIDI1NSwgY29sb3IuYSAqIDI1NSkpOworICAgIHNldFNpbXBsZUNvbG9y
KG1ha2VTaW1wbGVDb2xvcihjb2xvci5yICogMjU1LCBjb2xvci5nICogMjU1LCBjb2xvci5iICog
MjU1LCBjb2xvci5hICogMjU1KSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0Yo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjIxMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsOCArMTk4LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbgogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3IgeyBt
YWtlUkdCKDI1NSwgMCwgMCkgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdy
YW1tYXJQYXR0ZXJuQ29sb3IgeyBtYWtlUkdCKDAsIDEyOCwgMCkgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIFNpbXBsZUNvbG9yIHNwZWxsaW5nUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBsZUNvbG9y
KDI1NSwgMCwgMCkgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQ
YXR0ZXJuQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3IoMCwgMTI4LCAwKSB9OwogCiAgICAgY29uc3Qg
U2ltcGxlQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yIDogc3BlbGxpbmdQ
YXR0ZXJuQ29sb3I7CiAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0
dGVybkNvbG9yLnJlZENvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwg
cGF0dGVybkNvbG9yLmJsdWVDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmFscGhhQ29tcG9uZW50
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjIx
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENv
bG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBE
MkQxX0NPTE9SX0YmIGNvbG9yKQogewotICAgIFJHQkEzMiBjb2xvcktleSA9IG1ha2VSR0JBMzJG
cm9tRmxvYXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEpOworICAgIFNpbXBs
ZUNvbG9yIGNvbG9yS2V5ID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhjb2xvci5yLCBjb2xv
ci5nLCBjb2xvci5iLCBjb2xvci5hKTsKIAogICAgIGlmICghY29sb3JLZXkpIHsKICAgICAgICAg
aWYgKCFtX3plcm9CcnVzaCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xv
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJ
T1MubW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9D
b2xvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiB7CisgICAg
Ly8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgor
CiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGZvciBhIFVJQ29sb3IgdGhhdCB3YXMgY3Jl
YXRlZCBmcm9tIGEgcGF0dGVybiBvciBhIERpc3BheVAzIGNvbG9yLgogICAgIENHRmxvYXQgcmVk
Q29tcG9uZW50OwogICAgIENHRmxvYXQgZ3JlZW5Db21wb25lbnQ7CkBAIC00Myw3ICs0NSw3IEBA
IENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAgICAgW2NvbG9yIGdldFJl
ZDomcmVkQ29tcG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50
IGFscGhhOiZhbHBoYV07CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0g
bmV4dGFmdGVyKDI1Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlUkdCQShzY2FsZUZhY3RvciAq
IHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3Ig
KiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVu
Q29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxw
aGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NDgsNyArMTI0OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3IK
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikKIHsKICAgICBpZiAoIXJl
bmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRz
KCkpIHsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9y
aWdpbiwgQ29sb3I6OmNvbXBvc2l0aW9uRmlsbCwgY2xhbXBlZE9mZnNldChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgY2xhbXBlZE9mZnNldChyZW5kZXJl
cigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25FbmQoKSkpOworICAgICAgICBwYWludE1h
cmtlZFRleHRCYWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBDb21wb3NpdGlvbkhpZ2hs
aWdodDo6ZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yLCBjbGFtcGVkT2Zmc2V0KHJlbmRlcmVy
KCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCkpLCBjbGFtcGVkT2Zmc2V0KHJl
bmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3OSw3ICs0MDc5LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogICAgICAgICBjb250ZXh0LmNsaXAocmVz
aXplckFic1JlY3QpOwogICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJB
YnNSZWN0OwogICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNv
cm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOwotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKG1ha2VSR0IoMjE3LCAyMTcsIDIxNykp
KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjE3LCAy
MTcsIDIxNykpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAg
ICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAg
Y29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZp
c2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4NSw3ICszMDg1LDcgQEAgT3B0aW9uU2V0PFJl
bmRlckxheWVyOjpQYWludExheWVyRmxhZz4gUgogc3RydWN0IFBhdHRlcm5EZXNjcmlwdGlvbiB7
CiAgICAgQVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgRmxvYXRTaXplIHBoYXNlOwotICAgIFJHQkEz
MiBmaWxsQ29sb3I7CisgICAgU2ltcGxlQ29sb3IgZmlsbENvbG9yOwogfTsKIAogc3RhdGljIFJl
ZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yRGVzY3JpcHRpb24oUGF0dGVybkRlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uLCBGbG9hdFNpemUgY29udGVudE9mZnNldCwgR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCkKQEAgLTMxNDUsNyArMzE0NSw3IEBAIHN0YXRpYyBSZWZQdHI8UGF0dGVybj4gcGF0
dGVybkZvclRvdWNoQWMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfTsKIAotICAgIGNvbnN0ZXhw
ciBhdXRvIGZpbGxDb2xvciA9IG1ha2VSR0JBKDAsIDAsIDAsIDEyOCk7CisgICAgY29uc3RleHBy
IGF1dG8gZmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKICAgICBz
dGF0aWMgY29uc3QgUGF0dGVybkRlc2NyaXB0aW9uIHBhdHRlcm5EZXNjcmlwdGlvbnNbXSA9IHsK
ICAgICAgICAgeyAiYXV0byJfcywgeyB9LCBmaWxsQ29sb3IgfSwKQEAgLTMxNjUsNyArMzE2NSw3
IEBAIHN0YXRpYyBSZWZQdHI8UGF0dGVybj4gcGF0dGVybkZvclRvdWNoQWMKIAogc3RhdGljIFJl
ZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yRXZlbnRMaXN0ZW5lclJlZ2lvblR5cGUoRXZlbnRMaXN0
ZW5lclJlZ2lvblR5cGUgdHlwZSwgRmxvYXRTaXplIGNvbnRlbnRPZmZzZXQsIEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gZmlsbENvbG9yID0gbWFr
ZVJHQkEoMCwgMTI4LCAwLCAxMjgpOworICAgIGNvbnN0ZXhwciBhdXRvIGZpbGxDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigwLCAxMjgsIDAsIDEyOCk7CiAKICAgICBhdXRvIHBhdHRlcm5BbmRQaGFz
ZSA9IFsmXSgpIC0+IFBhdHRlcm5EZXNjcmlwdGlvbiB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0
YS5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUFkd2FpdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTAgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCB0ZXh0RmllbGRCb3JkZXJTaXpl
ID0gMTsKLXN0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCb3JkZXJDb2xvciA9IG1ha2VSR0Io
MjA1LCAxOTksIDE5NCk7Ci1zdGF0aWMgY29uc3QgQ29sb3IgdGV4dEZpZWxkQm9yZGVyRGlzYWJs
ZWRDb2xvciA9IG1ha2VSR0IoMjEzLCAyMDgsIDIwNCk7Ci1zdGF0aWMgY29uc3QgQ29sb3IgdGV4
dEZpZWxkQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNTUsIDI1NSwgMjU1KTsKLXN0YXRpYyBj
b25zdCBDb2xvciB0ZXh0RmllbGRCYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9IG1ha2VSR0IoMjUy
LCAyNTIsIDI1Mik7CitzdGF0aWMgY29uc3QgQ29sb3IgdGV4dEZpZWxkQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjA1LCAxOTksIDE5NCk7CitzdGF0aWMgY29uc3QgQ29sb3IgdGV4dEZp
ZWxkQm9yZGVyRGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMTMsIDIwOCwgMjA0KTsK
K3N0YXRpYyBjb25zdCBDb2xvciB0ZXh0RmllbGRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDI1NSk7CitzdGF0aWMgY29uc3QgQ29sb3IgdGV4dEZpZWxkQmFja2dy
b3VuZERpc2FibGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjUyLCAyNTIsIDI1Mik7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWVudUxpc3RCdXR0b25BcnJvd1NpemUgPSAxNjsKIHN0YXRpYyBj
b25zdCBpbnQgbWVudUxpc3RCdXR0b25Gb2N1c09mZnNldCA9IC0zOwogc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1lbnVMaXN0QnV0dG9uUGFkZGluZyA9IDU7CkBAIC01NywyMyArNTcsMjMgQEAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHByb2dyZXNzQWN0aXZpdHlCbAogc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVDb3VudCA9IDc1Owogc3RhdGljIGNvbnN0IFNlY29u
ZHMgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGUgPSAzM19tczsgLy8gMzBmcHMuCiBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgcHJvZ3Jlc3NCYXJTaXplID0gNjsKLXN0YXRpYyBjb25zdCBDb2xvciBw
cm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVJHQigyMDUsIDE5OSwgMTk0KTsKLXN0YXRpYyBj
b25zdCBDb2xvciBwcm9ncmVzc0JhckJhY2tncm91bmRDb2xvciA9IG1ha2VSR0IoMjI1LCAyMjIs
IDIxOSk7CitzdGF0aWMgY29uc3QgQ29sb3IgcHJvZ3Jlc3NCYXJCb3JkZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigyMDUsIDE5OSwgMTk0KTsKK3N0YXRpYyBjb25zdCBDb2xvciBwcm9ncmVzc0Jh
ckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMjUsIDIyMiwgMjE5KTsKIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzbGlkZXJUcmFja1NpemUgPSA2Owogc3RhdGljIGNvbnN0IGludCBz
bGlkZXJUcmFja0JvcmRlclNpemUgPSAxOwotc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRyYWNr
Qm9yZGVyQ29sb3IgPSBtYWtlUkdCKDIwNSwgMTk5LCAxOTQpOwotc3RhdGljIGNvbnN0IENvbG9y
IHNsaWRlclRyYWNrQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyMjUsIDIyMiwgMjE5KTsKK3N0
YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUcmFja0JvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDIwNSwgMTk5LCAxOTQpOworc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRyYWNrQmFja2dyb3Vu
ZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIyNSwgMjIyLCAyMTkpOwogc3RhdGljIGNvbnN0IGlu
dCBzbGlkZXJUcmFja0ZvY3VzT2Zmc2V0ID0gMjsKIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVyVGh1
bWJTaXplID0gMjA7CiBzdGF0aWMgY29uc3QgaW50IHNsaWRlclRodW1iQm9yZGVyU2l6ZSA9IDE7
Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVGh1bWJCb3JkZXJDb2xvciA9IG1ha2VSR0IoMjA1
LCAxOTksIDE5NCk7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVGh1bWJCYWNrZ3JvdW5kQ29s
b3IgPSBtYWtlUkdCKDI0NCwgMjQyLCAyNDEpOwotc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRo
dW1iQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VSR0IoMjQ4LCAyNDgsIDI0Nyk7Ci1zdGF0
aWMgY29uc3QgQ29sb3Igc2xpZGVyVGh1bWJCYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9IG1ha2VS
R0IoMjQ0LCAyNDIsIDI0MSk7CitzdGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVGh1bWJCb3JkZXJD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMDUsIDE5OSwgMTk0KTsKK3N0YXRpYyBjb25zdCBDb2xv
ciBzbGlkZXJUaHVtYkJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDQsIDI0Miwg
MjQxKTsKK3N0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJhY2tncm91bmRIb3ZlcmVkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMjQ4LCAyNDgsIDI0Nyk7CitzdGF0aWMgY29uc3QgQ29sb3Ig
c2xpZGVyVGh1bWJCYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDQs
IDI0MiwgMjQxKTsKICNpZiBFTkFCTEUoVklERU8pCi1zdGF0aWMgY29uc3QgQ29sb3IgbWVkaWFT
bGlkZXJUcmFja0JhY2tncm91bmRjb2xvciA9IG1ha2VSR0IoNzcsIDc3LCA3Nyk7Ci1zdGF0aWMg
Y29uc3QgQ29sb3IgbWVkaWFTbGlkZXJUcmFja0J1ZmZlcmVkQ29sb3IgPSBtYWtlUkdCKDE3Mywg
MTczLCAxNzMpOwotc3RhdGljIGNvbnN0IENvbG9yIG1lZGlhU2xpZGVyVHJhY2tBY3RpdmVDb2xv
ciA9IG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMgY29uc3QgQ29sb3IgbWVkaWFTbGlk
ZXJUcmFja0JhY2tncm91bmRjb2xvciA9IG1ha2VTaW1wbGVDb2xvcig3NywgNzcsIDc3KTsKK3N0
YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQnVmZmVyZWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxNzMsIDE3MywgMTczKTsKK3N0YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRy
YWNrQWN0aXZlQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjUyLCAyNTIsIDI1Mik7CiAjZW5kaWYK
IAogI2lmICFQTEFURk9STShHVEspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1MSw3ICs1NTEsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDYWNoZWRTeXN0ZW1GCiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldElzSXRhbGljKFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6Zm9udF0gJiBOU0l0
YWxpY0ZvbnRNYXNrKTsKIH0KIAotc3RhdGljIFJHQkEzMiBtZW51QmFja2dyb3VuZENvbG9yKCkK
K3N0YXRpYyBTaW1wbGVDb2xvciBtZW51QmFja2dyb3VuZENvbG9yKCkKIHsKICAgICBSZXRhaW5Q
dHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFwSW1h
Z2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZToxIHBp
eGVsc0hpZ2g6MQogICAgICAgICBiaXRzUGVyU2FtcGxlOjggc2FtcGxlc1BlclBpeGVsOjQgaGFz
QWxwaGE6WUVTIGlzUGxhbmFyOk5PIGNvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFj
ZSBieXRlc1BlclJvdzo0IGJpdHNQZXJQaXhlbDozMl0pOwpAQCAtNTY4LDcgKzU2OCw3IEBAIHN0
YXRpYyBSR0JBMzIgbWVudUJhY2tncm91bmRDb2xvcigpCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0
XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICBy
ZXR1cm4gbWFrZVJHQkEocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwg
cGl4ZWxbM10pOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3IoQ1NTVmFs
dWVJRCBjc3NWYWx1ZUlELCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA1LTI0ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVh
bnVwOiBVc2UgdGhlIG5hbWUgU2ltcGxlQ29sb3IgY29uc2lzdGVudGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSVAKKworICAgICAgICAqIFVJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoY29tcG9zaXRp
b25IaWdobGlnaHRzKToKKwogMjAyMC0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51cDogU3RvcCBhbGxvd2luZyBkaXJl
Y3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNvbG9yIChpdCBpcyBhbG1vc3QgYWx3
YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5kZWQgY29sb3JzKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NjI0LDcg
KzQ2MjQsNyBAQCBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uSGlnaGxpCiAgICAg
ICAgIGlmICghYXR0cmlidXRlc1tOU01hcmtlZENsYXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lXSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBXZWJDb3JlOjpDb2xvciBoaWdobGlnaHRD
b2xvciB7IFdlYkNvcmU6OkNvbG9yOjpjb21wb3NpdGlvbkZpbGwgfTsKKyAgICAgICAgV2ViQ29y
ZTo6Q29sb3IgaGlnaGxpZ2h0Q29sb3IgeyBXZWJDb3JlOjpDb21wb3NpdGlvbkhpZ2hsaWdodDo6
ZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIH07CiAgICAgICAgIGlmIChVSUNvbG9yICp1aUNv
bG9yID0gYXR0cmlidXRlc1tOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdKQogICAgICAg
ICAgICAgaGlnaGxpZ2h0Q29sb3IgPSBXZWJDb3JlOjpjb2xvckZyb21VSUNvbG9yKHVpQ29sb3Ip
OwogICAgICAgICBoaWdobGlnaHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5n
ZS5sb2NhdGlvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihOU01heFJhbmdlKHJhbmdlKSksIGhp
Z2hsaWdodENvbG9yIH0pOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTExKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFVzZSB0aGUg
bmFtZSBTaW1wbGVDb2xvciBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDUtMjQg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9y
IENsZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBT
aW1wbGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRv
IGV4dGVuZGVkIGNvbG9ycykKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBh
bHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC02MSw3ICs2MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1h
a2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkp
OwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03Nyw3
ICs3Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBDb2xvcihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBF
WFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTMsNyArOTMsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBDb2xvcihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1Rf
RVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsK
KyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhT
TEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Q29sb3IobWFrZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEp
KTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJv
bUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VR
KGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9HcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9y
KG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7Cisg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9y
KG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7Cisg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400184</attachid>
            <date>2020-05-24 18:14:44 -0700</date>
            <delta_ts>2020-05-25 11:30:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212337-20200524181443.patch</filename>
            <type>text/plain</type>
            <size>88087</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MCBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogVXNlIHRoZSBuYW1lIFNpbXBsZUNvbG9yIGNvbnNpc3RlbnRseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzM3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIFJlbW92ZXMgUkdCQTMy
IHR5cGUgYWxpYXMsIHVwZGF0aW5nIGFsbCByZW1haW5pbmcgdXNlcnMgb2YgaXQuCisgICAgICAg
IC0gUmVuYW1lcyBmdW5jdGlvbnMgdGhhdCB0YWtlL3JldHVybiBTaW1wbGVDb2xvciB0byB1c2Ug
dGhlIG5hbWUKKyAgICAgICAgICBTaW1wbGVDb2xvciByYXRoZXIgdGhhbiBSR0IgKGUuZy4gbWFr
ZVJHQkEgLT4gbWFrZVNpbXBsZUNvbG9yKQorICAgICAgICAtIE1vdmVzIGhleCBjb2xvciBwYXJz
aW5nIGZyb20gQ29sb3IgdG8gU2ltcGxlQ29sb3IsIGFzIHRoYXQgaXMKKyAgICAgICAgICB0aGUg
dHlwZSBpdCByZXR1cm5zLiBBbHNvIHRvb2sgdGhlIG9wZXJ0dW5pdHkgdG8gbWFrZSBpdCByZXR1
cm4KKyAgICAgICAgICBhbiBPcHRpb25hbDxTaW1wbGVDb2xvcj4gaW5zdGVhZCBvZiB1c2luZyBh
IGJvb2wvb3V0IHBhcmFtZXRlci4KKyAgICAgICAgLSBNb3ZlIENvbG9yOjpjb21wb3NpdGlvbkZp
bGwgdG8gZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCisgICAgICAgICAgSXQgbWFkZSBu
b3QgcmVhbCBzZW5zZSB0byBrZWVwIGl0IGluIENvbG9yLmgKKyAgICAgICAgLSBSZXBsYWNlcyBy
Z2IoKSBmdW5jdGlvbiBpbiBDb2xvciB3aXRoIGFzU2ltcGxlQ29sb3IoKSBmb3IgCisgICAgICAg
ICAgc3ltbWV0cnkgd2l0aCBhc0V4dGVuZGVkKCkuCisgICAgICAgIC0gUmVwbGFjZWQgc3RkOjpt
YXgoYSwgc3RkOjptaW4odmFsdWUsIGIpKSB3aXRoIHN0ZDo6Y2xhbXAodmFsdWUsIGEsIGIpCisg
ICAgICAgICAgZm9yIGNsYXJpdHkuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZh
c3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYXN0UGFyc2VDb2xvckludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcik6CisgICAg
ICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhleENvbG9yKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg6Cisg
ICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIGh0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1wbGVDb2xvclZh
bHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0
YTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lQWR3YWl0YTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpuYW1l
Rm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRhZ0FzVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNPcGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNTZW1hbnRpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphc1NpbXBsZUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpzZXRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNCbGFja0Nv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1doaXRlQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRSR0IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OnJnYiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1w
ZWRDb2xvckNvbXBvbmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21D
TVlLQSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhleENvbG9ySW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VVblByZW11bHRpcGxpZWRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VS
R0JBMzJGcm9tRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJv
bUhTTEEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tQ01ZS0EpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5dGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCQSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNv
bG9yRnJvbUNHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJHQkFG
cm9tQ0dDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tTlND
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVJHQkFGcm9tTlNDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvQ29sb3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21VSUNvbG9yKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGF0dGVybkZvclRvdWNoQWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVnaW9uVHlwZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6CisK
IDIwMjAtMDUtMjQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHNvbWUgbWlzc2luZyBpbmNsdWRlcyBkdWUgdG8gdW5pZmllZCBzb3VyY2VzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckZhc3RQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSwyMCArNDA5LDIwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IENoYXIKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgQ29sb3IgZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wg
cXVpcmtzTW9kZSkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgcXVpcmtzTW9kZSkKIHsKICAgICBDU1NVbml0VHlwZSBleHBlY3QgPSBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAobGVuZ3RoID49IDQgJiYgY2hhcmFjdGVyc1swXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIHJnYjsKLSAgICAgICAgaWYgKENvbG9yOjpwYXJzZUhl
eENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAgICAgICAgICAgcmV0
dXJuIENvbG9yKHJnYik7CisgICAgICAgIGF1dG8gY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSk7CisgICAgICAgIGlmIChjb2xvcikK
KyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICBpZiAocXVpcmtzTW9kZSAm
JiAobGVuZ3RoID09IDMgfHwgbGVuZ3RoID09IDYpKSB7Ci0gICAgICAgIFJHQkEzMiByZ2I7Ci0g
ICAgICAgIGlmIChDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHJnYikp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IocmdiKTsKKyAgICAgICAgYXV0byBjb2xvciA9IFNp
bXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIGlm
IChjb2xvcikKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9CiAKICAgICAvLyBUcnkg
cmdiYSgpIHN5bnRheC4KQEAgLTQzNSwxNiArNDM1LDE2IEBAIHN0YXRpYyBDb2xvciBmYXN0UGFy
c2VDb2xvckludGVybmFsKGNvbnMKICAgICAgICAgaW50IGFscGhhOwogCiAgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQp
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwg
ZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCi0g
ICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIH0KIAogICAgIC8v
IFRyeSByZ2IoKSBzeW50YXguCkBAIC00NTUsMTcgKzQ1NSwxNyBAQCBzdGF0aWMgQ29sb3IgZmFz
dFBhcnNlQ29sb3JJbnRlcm5hbChjb25zCiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50
IGJsdWU7CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBl
bmQsICcsJywgZXhwZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQotICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4
cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXR1cm4gQ29sb3IobWFrZVJHQihyZWQsIGdy
ZWVuLCBibHVlKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KIAotICAgIHJl
dHVybiBDb2xvcigpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgdmFsdWVQb29sKQpAQCAt
NDgxLDE0ICs0ODEsMTQgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBh
cgogICAgIGJvb2wgcXVpcmtzTW9kZSA9IGlzUXVpcmtzTW9kZUJlaGF2aW9yKHBhcnNlck1vZGUp
OwogCiAgICAgLy8gRmFzdCBwYXRoIGZvciBoZXggY29sb3JzIGFuZCByZ2IoKS9yZ2JhKCkgY29s
b3JzCi0gICAgQ29sb3IgY29sb3I7CisgICAgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOwog
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJ
bnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBxdWlya3NNb2Rl
KTsKICAgICBlbHNlCiAgICAgICAgIGNvbG9yID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5hbChzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgcXVpcmtzTW9kZSk7Ci0gICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCisgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIHZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKKyAgICBy
ZXR1cm4gdmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUoKmNvbG9yKTsKIH0KIAogYm9vbCBDU1NQ
YXJzZXJGYXN0UGF0aHM6OmlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlSUQgdmFsdWVJRCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw2IEBAIHN0YXRpYyBpbnQgY2xhbXBSR0JDb21wb25lbnQo
Y29uc3QgQ1NTUHIKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVJn
YmEpOwotICAgIENvbG9yIHJlc3VsdDsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBj
b25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3JQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlm
ICghY29sb3JQYXJhbWV0ZXIpCkBAIC01ODgsMTIgKzU4NywxMCBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGFscGhhQ29tcG9uZW50ID0gc3RhdGlj
X2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4wLCAxLjApICogMjU1
LjBmKSk7CiAgICAgfTsKIAotICAgIHJlc3VsdCA9IENvbG9yKG1ha2VSR0JBKGNvbG9yQXJyYXlb
MF0sIGNvbG9yQXJyYXlbMV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KSk7Ci0KICAg
ICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29sb3JBcnJheVswXSwgY29s
b3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxwaGFDb21wb25lbnQpOwogfQogCiBzdGF0aWMg
Q29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCkBAIC02NDUsNyArNjQyLDcgQEAgc3RhdGljIENvbG9y
IHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21IU0xB
KHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGFscGhhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNjk1LDExICs2OTIsMTMg
QEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogCiBzdGF0aWMgQ29s
b3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRR
dWlya3lDb2xvcnMpCiB7Ci0gICAgUkdCQTMyIHJlc3VsdDsKKyAgICBTaW1wbGVDb2xvciByZXN1
bHQ7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gSGFzaFRva2VuKSB7Ci0gICAgICAgIGlmICghQ29sb3I6OnBh
cnNlSGV4Q29sb3IodG9rZW4udmFsdWUoKSwgcmVzdWx0KSkKKyAgICAgICAgYXV0byBzaW1wbGVD
b2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKHRva2VuLnZhbHVlKCkpOworICAgICAg
ICBpZiAoIXNpbXBsZUNvbG9yKQogICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAg
IHJlc3VsdCA9ICpzaW1wbGVDb2xvcjsKICAgICB9IGVsc2UgaWYgKGFjY2VwdFF1aXJreUNvbG9y
cykgewogICAgICAgICBTdHJpbmcgY29sb3I7CiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
TnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBAIC03MTgs
MTMgKzcxNywxNSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbG9yLmxlbmd0aCgpOwogICAgICAgICBpZiAobGVu
Z3RoICE9IDMgJiYgbGVuZ3RoICE9IDYpCiAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAg
ICAgICAgaWYgKCFDb2xvcjo6cGFyc2VIZXhDb2xvcihjb2xvciwgcmVzdWx0KSkKKyAgICAgICAg
YXV0byBzaW1wbGVDb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbG9yKTsKKyAg
ICAgICAgaWYgKCFzaW1wbGVDb2xvcikKICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICByZXN1bHQgPSAqc2ltcGxlQ29sb3I7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJu
IENvbG9yKCk7CiAgICAgfQogICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
Ci0gICAgcmV0dXJuIENvbG9yKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3Rh
dGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRpb25IaWdobGlnaHQuaAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGlvbkhpZ2hsaWdodC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw5ICszOSwxNSBAQCBzdHJ1Y3QgQ29tcG9zaXRpb25IaWdobGlnaHQgewogICAgIHsKICAg
ICB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yIHsgMHgzQ0FGQzBFMyB9OworI2Vs
c2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRlZmF1bHRDb21wb3NpdGlvbkZp
bGxDb2xvciB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgeyAwIH07CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0IHsgMCB9OwotICAgIENvbG9yIGNvbG9y
IHsgQ29sb3I6OmNvbXBvc2l0aW9uRmlsbCB9OworICAgIENvbG9yIGNvbG9yIHsgZGVmYXVsdENv
bXBvc2l0aW9uRmlsbENvbG9yIH07CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiBkZWNvZGUoRGVjb2RlciYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2
aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjUsMTAgKzYyNSwxMCBAQCBOU0FycmF5ICpEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
byB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNp
bmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxp
ZXIgKiBhbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVMaWdo
dG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVyICogYWxwaGEpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbkNvbG9yLCB1bmRlcmxpbmVDb2xvci5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uQ29sb3IsIHVuZGVybGluZUNvbG9yLnNlcmlhbGl6YXRpb25Gb3JDU1Mo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkocmV2aXNpb24g
MjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDExICs2OCwxMSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2ltcGxlQ29s
b3IoU3RyaW5nVmllCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlw
YWdlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctc2ltcGxlLWNv
bG91ci12YWx1ZXMKLXN0YXRpYyBPcHRpb25hbDxSR0JBMzI+IHBhcnNlU2ltcGxlQ29sb3JWYWx1
ZShTdHJpbmdWaWV3IHN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VT
aW1wbGVDb2xvclZhbHVlKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIGlmICghaXNWYWxpZFNp
bXBsZUNvbG9yKHN0cmluZykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0
dXJuIG1ha2VSR0IodG9BU0NJSUhleFZhbHVlKHN0cmluZ1sxXSwgc3RyaW5nWzJdKSwgdG9BU0NJ
SUhleFZhbHVlKHN0cmluZ1szXSwgc3RyaW5nWzRdKSwgdG9BU0NJSUhleFZhbHVlKHN0cmluZ1s1
XSwgc3RyaW5nWzZdKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFs
dWUoc3RyaW5nWzFdLCBzdHJpbmdbMl0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzNdLCBzdHJp
bmdbNF0pLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzVdLCBzdHJpbmdbNl0pKTsKIH0KIAogQ29s
b3JJbnB1dFR5cGU6On5Db2xvcklucHV0VHlwZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIEhUTUxF
bGVtZW50OjphZGRIVE1MTGVuZ3RoVG9TdHlsZShNCiAgICAgYWRkUHJvcGVydHlUb1ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKHN0eWxlLCBwcm9wZXJ0eUlELCB2YWx1ZSk7CiB9CiAKLXN0YXRp
YyBSR0JBMzIgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmlu
ZyYgY29sb3JTdHJpbmcpCitzdGF0aWMgU2ltcGxlQ29sb3IgcGFyc2VDb2xvclN0cmluZ1dpdGhD
cmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgLy8gUGVy
IHNwZWMsIG9ubHkgbG9vayBhdCB0aGUgZmlyc3QgMTI4IGRpZ2l0cyBvZiB0aGUgc3RyaW5nLgog
ICAgIGNvbnN0IHNpemVfdCBtYXhDb2xvckxlbmd0aCA9IDEyODsKQEAgLTEwMDIsNyArMTAwMiw3
IEBAIHN0YXRpYyBSR0JBMzIgcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUwKICAgICBkaWdpdEJ1
ZmZlci5hcHBlbmQoJzAnKTsKIAogICAgIGlmIChkaWdpdEJ1ZmZlci5zaXplKCkgPCA2KQotICAg
ICAgICByZXR1cm4gbWFrZVJHQih0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMF0pLCB0b0FT
Q0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJb
Ml0pKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b0FTQ0lJSGV4VmFsdWUoZGln
aXRCdWZmZXJbMF0pLCB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbMV0pLCB0b0FTQ0lJSGV4
VmFsdWUoZGlnaXRCdWZmZXJbMl0pKTsKIAogICAgIC8vIFNwbGl0IHRoZSBkaWdpdHMgaW50byB0
aHJlZSBjb21wb25lbnRzLCB0aGVuIHNlYXJjaCB0aGUgbGFzdCA4IGRpZ2l0cyBvZiBlYWNoIGNv
bXBvbmVudC4KICAgICBBU1NFUlQoZGlnaXRCdWZmZXIuc2l6ZSgpID49IDYpOwpAQCAtMTAyNiw3
ICsxMDI2LDcgQEAgc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TAogICAg
IGludCByZWRWYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltyZWRJbmRleF0sIGRp
Z2l0QnVmZmVyW3JlZEluZGV4ICsgMV0pOwogICAgIGludCBncmVlblZhbHVlID0gdG9BU0NJSUhl
eFZhbHVlKGRpZ2l0QnVmZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsg
MV0pOwogICAgIGludCBibHVlVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbYmx1
ZUluZGV4XSwgZGlnaXRCdWZmZXJbYmx1ZUluZGV4ICsgMV0pOwotICAgIHJldHVybiBtYWtlUkdC
KHJlZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3IocmVkVmFsdWUsIGdyZWVuVmFsdWUsIGJsdWVWYWx1ZSk7CiB9CiAKIC8vIENvbG9yIHBh
cnNpbmcgdGhhdCBtYXRjaGVzIEhUTUwncyAicnVsZXMgZm9yIHBhcnNpbmcgYSBsZWdhY3kgY29s
b3IgdmFsdWUiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJh
clRoZW1lQWR3YWl0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0MywxMyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
b3ZlcmxheVRodW1iU2l6ZSA9CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVRodW1iU2l6
ZSA9IDQwOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRodW1iU2l6ZSA9IDY7CiBzdGF0aWMgY29u
c3QgZG91YmxlIHNjcm9sbGJhck9wYWNpdHkgPSAwLjg7Ci1zdGF0aWMgY29uc3QgQ29sb3Igc2Ny
b2xsYmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKLXN0YXRpYyBj
b25zdCBDb2xvciBzY3JvbGxiYXJCb3JkZXJDb2xvciA9IG1ha2VSR0IoMjIwLCAyMjMsIDIyNyk7
Ci1zdGF0aWMgY29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQm9yZGVyQ29sb3IgPSBtYWtlUkdCQSgy
NTUsIDI1NSwgMjU1LCAxMDApOwotc3RhdGljIGNvbnN0IENvbG9yIG92ZXJsYXlUaHVtYkNvbG9y
ID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgMTAwKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0aHVtYkhv
dmVyZWRDb2xvciA9IG1ha2VSR0IoODYsIDkxLCA5Mik7Ci1zdGF0aWMgY29uc3QgQ29sb3IgdGh1
bWJQcmVzc2VkQ29sb3IgPSBtYWtlUkdCKDI3LCAxMDYsIDIwMyk7Ci1zdGF0aWMgY29uc3QgQ29s
b3IgdGh1bWJDb2xvciA9IG1ha2VSR0IoMTI2LCAxMjksIDEzMCk7CitzdGF0aWMgY29uc3QgQ29s
b3Igc2Nyb2xsYmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1MiwgMjUyLCAy
NTIpOworc3RhdGljIGNvbnN0IENvbG9yIHNjcm9sbGJhckJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDIyMCwgMjIzLCAyMjcpOworc3RhdGljIGNvbnN0IENvbG9yIG92ZXJsYXlUaHVtYkJv
cmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEwMCk7CitzdGF0aWMg
Y29uc3QgQ29sb3Igb3ZlcmxheVRodW1iQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoNDYsIDUyLCA1
NCwgMTAwKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0aHVtYkhvdmVyZWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcig4NiwgOTEsIDkyKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0aHVtYlByZXNzZWRDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyNywgMTA2LCAyMDMpOworc3RhdGljIGNvbnN0IENvbG9yIHRo
dW1iQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTI2LCAxMjksIDEzMCk7CiAKIGJvb2wgU2Nyb2xs
YmFyVGhlbWVBZHdhaXRhOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAko
cmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVt
ZUFkd2FpdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyOCArMzYsMjggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvY3VzTGluZVdpZHRoID0gMTsK
LXN0YXRpYyBjb25zdCBDb2xvciBmb2N1c1JpbmdDb2xvciA9IG1ha2VSR0JBKDQ2LCA1MiwgNTQs
IDE1MCk7CitzdGF0aWMgY29uc3QgQ29sb3IgZm9jdXNSaW5nQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoNDYsIDUyLCA1NCwgMTUwKTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcnJvd1NpemUgPSAx
NjsKLXN0YXRpYyBjb25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVJHQig0NiwgNTIsIDU0KTsK
K3N0YXRpYyBjb25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1Miwg
NTQpOwogc3RhdGljIGNvbnN0IGludCBidXR0b25Gb2N1c09mZnNldCA9IC0zOwogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGJ1dHRvblBhZGRpbmcgPSA1Owogc3RhdGljIGNvbnN0IGludCBidXR0b25C
b3JkZXJTaXplID0gMTsgLy8gS2VlcCBpbiBzeW5jIHdpdGggbWVudUxpc3RCdXR0b25Cb3JkZXJT
aXplIGluIFJlbmRlclRoZW1lQWR3YWl0YS4KLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25Cb3Jk
ZXJDb2xvciA9IG1ha2VSR0IoMjA1LCAxOTksIDE5NCk7Ci1zdGF0aWMgY29uc3QgQ29sb3IgYnV0
dG9uQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNDQsIDI0MiwgMjQxKTsKLXN0YXRpYyBjb25z
dCBDb2xvciBidXR0b25CYWNrZ3JvdW5kUHJlc3NlZENvbG9yID0gbWFrZVJHQigyMTQsIDIwOSwg
MjA1KTsKLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0g
bWFrZVJHQigyNDgsIDI0OCwgMjQ3KTsKLXN0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3Jv
dW5kRGlzYWJsZWRDb2xvciA9IG1ha2VSR0IoMjQ2LCAyNDYsIDI0NCk7Ci1zdGF0aWMgY29uc3Qg
Q29sb3IgdG9nZ2xlQmFja2dyb3VuZENvbG9yID0gbWFrZVJHQigyNTUsIDI1NSwgMjU1KTsKLXN0
YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVJHQigy
NDIsIDI0MiwgMjQyKTsKLXN0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5kRGlzYWJs
ZWRDb2xvciA9IG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMgY29uc3QgQ29sb3IgYnV0
dG9uQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA1LCAxOTksIDE5NCk7CitzdGF0aWMg
Y29uc3QgQ29sb3IgYnV0dG9uQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0NCwg
MjQyLCAyNDEpOworc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmRQcmVzc2VkQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMjE0LCAyMDksIDIwNSk7CitzdGF0aWMgY29uc3QgQ29sb3Ig
YnV0dG9uQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDgsIDI0OCwg
MjQ3KTsKK3N0YXRpYyBjb25zdCBDb2xvciBidXR0b25CYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNDYsIDI0NiwgMjQ0KTsKK3N0YXRpYyBjb25zdCBDb2xvciB0b2dn
bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSk7CitzdGF0
aWMgY29uc3QgQ29sb3IgdG9nZ2xlQmFja2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVD
b2xvcigyNDIsIDI0MiwgMjQyKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVCYWNrZ3JvdW5k
RGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKIHN0YXRpYyBj
b25zdCBkb3VibGUgdG9nZ2xlU2l6ZSA9IDE0LjsKIHN0YXRpYyBjb25zdCBpbnQgdG9nZ2xlRm9j
dXNPZmZzZXQgPSAyOwotc3RhdGljIGNvbnN0IENvbG9yIHRvZ2dsZUNvbG9yID0gbWFrZVJHQig0
NiwgNTIsIDU0KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0b2dnbGVEaXNhYmxlZENvbG9yID0gbWFr
ZVJHQigxNjAsIDE2MCwgMTYwKTsKLXN0YXRpYyBjb25zdCBDb2xvciBzcGluQnV0dG9uQm9yZGVy
Q29sb3IgPSBtYWtlUkdCKDIyMCwgMjIzLCAyMjcpOwotc3RhdGljIGNvbnN0IENvbG9yIHNwaW5C
dXR0b25CYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOwotc3RhdGljIGNv
bnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVJHQkEoNDYs
IDUyLCA1NCwgNTApOwotc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kUHJl
c3NlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgNzApOworc3RhdGljIGNvbnN0IENvbG9y
IHRvZ2dsZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1MiwgNTQpOworc3RhdGljIGNvbnN0
IENvbG9yIHRvZ2dsZURpc2FibGVkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTYwLCAxNjAsIDE2
MCk7CitzdGF0aWMgY29uc3QgQ29sb3Igc3BpbkJ1dHRvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDIyMCwgMjIzLCAyMjcpOworc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNr
Z3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjUyLCAyNTIsIDI1Mik7CitzdGF0aWMgY29u
c3QgQ29sb3Igc3BpbkJ1dHRvbkJhY2tncm91bmRIb3ZlcmVkQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoNDYsIDUyLCA1NCwgNTApOworc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3Jv
dW5kUHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDQ2LCA1MiwgNTQsIDcwKTsKIAogI2lm
ICFQTEFURk9STShHVEspIHx8IFVTRShHVEs0KQogVGhlbWUmIFRoZW1lOjpzaW5nbGV0b24oKQpA
QCAtNjksMTcgKzY5LDE3IEBAIFRoZW1lJiBUaGVtZTo6c2luZ2xldG9uKCkKIAogQ29sb3IgVGhl
bWVBZHdhaXRhOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAg
IHJldHVybiBtYWtlUkdCKDI1NSwgMjU1LCAyNTUpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyNTUsIDI1NSk7CiB9CiAKIENvbG9yIFRoZW1lQWR3YWl0YTo6YWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFrZVJHQig1MiwgMTMy
LCAyMjgpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoNTIsIDEzMiwgMjI4KTsKIH0KIAog
Q29sb3IgVGhlbWVBZHdhaXRhOjppbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0IoMjUyLCAyNTIsIDI1Mik7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcigyNTIsIDI1MiwgMjUyKTsKIH0KIAogQ29sb3IgVGhlbWVBZHdhaXRhOjpp
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
Ikhhc2hUb29scy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
QEAgLTQwLDg3ICszOSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3RleHBy
IFNpbXBsZUNvbG9yIGxpZ2h0ZW5lZEJsYWNrIHsgMHhGRjU0NTQ1NCB9Owogc3RhdGljIGNvbnN0
ZXhwciBTaW1wbGVDb2xvciBkYXJrZW5lZFdoaXRlIHsgMHhGRkFCQUJBQiB9OwogCi0vLyBvcmln
aW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvckludGVybmFs
KGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2Ip
Ci17Ci0gICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYm
IGxlbmd0aCAhPSA4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgdmFsdWUg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPDw9IDQ7Ci0gICAgICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1
ZShuYW1lW2ldKTsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA2KSB7Ci0gICAgICAgIHJnYiA9
IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBpZiAobGVuZ3RoID09IDgpIHsKLSAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1ZXMgaW50
byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCi0gICAgICAgIC8vIGV4cGVjdHMgdGhl
bSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0cy4KLSAg
ICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICAvLyAjYWJjZCBj
b252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCi0gICAgICAgIHJnYiA9IHsgKHZhbHVlICYg
MHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKLSAgICAgICAgICAgIHwgKHZhbHVlICYg
MHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCi0gICAgICAgICAgICB8ICh2YWx1ZSAm
IDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCi0gICAgcmdiID0geyAweEZGMDAw
MDAwCi0gICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8
IDgKLSAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAot
ICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciogbmFt
ZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICByZXR1cm4gcGFyc2VIZXhD
b2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikK
LXsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsK
LX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEz
MiYgcmdiKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxl
bmd0aCgpLCByZ2IpOwotICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2
KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3Io
Y29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci0gICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLX0K
LQogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29sb3ImIGMy
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9ycyBhcmUg
aW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFi
bHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUgY2FsbAog
ICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9uIGZlZWwu
IFdlJ2QgbmVlZCB0byBicmVhayBvdXQKICAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxlcyB0byBj
aGFuZ2UgdGhlbSA6KQotICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0
ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBj
MUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUg
OiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVu
ZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCkuYmx1ZUNvbXBv
bmVudCgpOwotICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQo
KS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBjMkdyZWVu
ID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMi5y
Z2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNvbXBvbmVudCgp
OworICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5yZWQo
KSAqIDI1NSA6IGMxLmFzU2ltcGxlQ29sb3IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQgYzFH
cmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDog
YzEuYXNTaW1wbGVDb2xvcigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5hc1NpbXBs
ZUNvbG9yKCkuYmx1ZUNvbXBvbmVudCgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQo
KSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLmFzU2ltcGxlQ29sb3IoKS5yZWRD
b21wb25lbnQoKTsKKyAgICBpbnQgYzJHcmVlbiA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0
ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuYXNTaW1wbGVDb2xvcigpLmdyZWVuQ29tcG9uZW50
KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5i
bHVlKCkgKiAyNTUgOiBjMi5hc1NpbXBsZUNvbG9yKCkuYmx1ZUNvbXBvbmVudCgpOwogICAgIGlu
dCBkUiA9IGMxUmVkIC0gYzJSZWQ7CiAgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CiAg
ICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOwpAQCAtMTQ2LDMwICs3NiwyOCBAQCBzdGF0aWMg
aW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lCiBDb2xvcjo6Q29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBSR0JBMzIg
Y29sb3I7Ci0gICAgICAgIGJvb2wgdmFsaWQ7Ci0KKyAgICAgICAgT3B0aW9uYWw8U2ltcGxlQ29s
b3I+IGNvbG9yOwogICAgICAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgICAgIHZhbGlk
ID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0g
MSwgY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigp
ICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKyAgICAgICAgICAgIGNvbG9yID0gU2lt
cGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVu
Z3RoKCkgLSAxKTsKIAotICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29s
b3IpOworICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcigqY29s
b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5h
bWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFs
dWUgfSk7CisgICAgICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1
ZSB9KTsKICAgICB9CiB9CiAKIENvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQogewogICAg
IGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKLSAgICAg
ICAgaWYgKHBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1l
WzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVbMV0pLCBjb2xvcikpCi0gICAgICAgICAgICBzZXRSR0Io
Y29sb3IpOworICAgICAgICBhdXRvIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3Io
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5h
bWVbMV0pKTsKKyAgICAgICAgaWYgKGNvbG9yKQorICAgICAgICAgICAgc2V0U2ltcGxlQ29sb3Io
KmNvbG9yKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFt
ZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAgc2V0UkdCKHsgZm91bmRDb2xvci0+QVJHQlZhbHVl
IH0pOworICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsK
IH0KIAogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKQEAgLTE5Miw4ICsxMjAsOCBA
QCBDb2xvcjo6Q29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjCiBDb2xvcjo6Q29sb3Io
UmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1
bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCi0gICAg
Ly8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVs
b3cuCi0gICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKKyAgICAvLyB0b3AgMzIgYml0
cyB3aGVuIGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KKyAgICBtX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gMDsKICAgICBtX2NvbG9yRGF0YS5leHRlbmRl
ZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwogICAgIEFTU0VSVChpc0V4dGVuZGVk
KCkpOwogfQpAQCAtMjIyLDcgKzE1MCw3IEBAIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9y
JiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAK
ICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKIAogICAgIHJldHVy
biAqdGhpczsKIH0KQEAgLTIzMSwyNiArMTU5LDI1IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXpl
ZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1M
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwog
fQogCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVk
KCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4dCgpOwotICAgIHJldHVybiBy
Z2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7CisgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKS5z
ZXJpYWxpemF0aW9uRm9yQ1NTKCk7CiB9CiAKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3Jz
LgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwor
ICAgIHJldHVybiBhc1NpbXBsZUNvbG9yKCkuc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29k
ZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAocmdiKCkgPT0gYmxhY2spCisg
ICAgaWYgKGFzU2ltcGxlQ29sb3IoKSA9PSBibGFjaykKICAgICAgICAgcmV0dXJuIGxpZ2h0ZW5l
ZEJsYWNrOwogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigy
NTYuMGYsIDAuMGYpOwpAQCAtMjc1LDcgKzIwMiw3IEBAIENvbG9yIENvbG9yOjpsaWdodCgpIGNv
bnN0CiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBj
b21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKHJnYigpID09IHdoaXRlKQorICAgIGlmIChh
c1NpbXBsZUNvbG9yKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwog
ICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAu
MGYpOwpAQCAtMzI0LDcgKzI1MSw3IEBAIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYg
c291cmNlKSAKICAgICBpbnQgZyA9IChzZWxmRyAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSAr
IDB4RkYgKiBzb3VyY2VBICogc291cmNlRykgLyBkOwogICAgIGludCBiID0gKHNlbGZCICogc2Vs
ZkEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VCKSAvIGQ7CiAK
LSAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29u
c3QKQEAgLTM1NCw3ICsyODEsNyBAQCBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25z
dAogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAg
ICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogICAgICAgICAK
LSAgICAgICAgcmVzdWx0ID0gbWFrZVJHQkEociwgZywgYiwgYWxwaGEpOworICAgICAgICByZXN1
bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49
IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg4LDcgKzMx
NSw3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkKICAgICAvLyBG
SVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KICAgICB1aW50OF90IG5ld0FscGhhID0gYWxw
aGEgKiAweEZGOwogCi0gICAgQ29sb3IgcmVzdWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3
QWxwaGEpOworICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlQ29sb3IoKS5jb2xvcldpdGhBbHBo
YShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElz
U2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDAyLDkgKzMyOSw5IEBAIENvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXQKICAgICB9CiAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBo
YVVzaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBo
YSk7CisgICAgdWludDhfdCBuZXdBbHBoYSA9IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShh
bHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBo
YSk7CisgICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1wbGVDb2xvcigpLmNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXN1bHQuc2V0SXNTZW1h
bnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00MTUsOCArMzQyLDggQEAgQ29sb3IgQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBDb2xvciB7IGFzRXh0ZW5kZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhh
KGFscGhhKSB9OwogCi0gICAgYXV0byBbciwgZywgYiwgZXhpc3RpbmdBbHBoYV0gPSByZ2IoKTsK
LSAgICByZXR1cm4geyAweEZGIC0gciwgMHhGRiAtIGcsIDB4RkYgLSBiLCBjb2xvckZsb2F0VG9S
R0JBQnl0ZShhbHBoYSkgfTsKKyAgICBhdXRvIFtyLCBnLCBiLCBleGlzdGluZ0FscGhhXSA9IGFz
U2ltcGxlQ29sb3IoKTsKKyAgICByZXR1cm4geyAweEZGIC0gciwgMHhGRiAtIGcsIDB4RkYgLSBi
LCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoYWxwaGEpIH07CiB9CiAKIENvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTQzNCwxNyArMzYxLDE4IEBAIHN0ZDo6cGFpcjxD
b2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IEMKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRD
b2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9OwogICAgIH0KIAot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBh
c1NpbXBsZUNvbG9yKCk7CiAgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21w
b25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYg
fSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBj
b25zdAogewotICAgIGlmICghaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gcmdiKCk7Cisg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMociwgZywgYiwgYSk7CisgICAgfQogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIs
IGcsIGIsIGEpOworICAgIHJldHVybiBhc1NpbXBsZUNvbG9yKCk7CiB9CiAKIEZsb2F0Q29tcG9u
ZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CkBAIC00NzYsMjAgKzQw
NCwyMCBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAgICAgLy8g
RklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAg
IC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRo
ZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgogICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRSR0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwg
c3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1h
a2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKKyAgICAvLyBTaW5jZSBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9y
KCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBwcmVt
dWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoZnJv
bS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBh
dXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9y
KHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwogCi0g
ICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0gbWFrZVJHQkEoCisgICAgU2ltcGxlQ29sb3IgcHJl
bXVsdEJsZW5kZWQgPSBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHBy
ZW11bHRGcm9tLnJlZENvbXBvbmVudCgpLCBwcmVtdWx0VG8ucmVkQ29tcG9uZW50KCksIHByb2dy
ZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uZ3JlZW5Db21wb25lbnQo
KSwgcHJlbXVsdFRvLmdyZWVuQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNvbXBvbmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmFs
cGhhQ29tcG9uZW50KCksIHByZW11bHRUby5hbHBoYUNvbXBvbmVudCgpLCBwcm9ncmVzcykKICAg
ICApOwogCi0gICAgcmV0dXJuIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHByZW11bHRCbGVuZGVk
KTsKKyAgICByZXR1cm4gbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHByZW11bHRCbGVu
ZGVkKTsKIH0KIAogQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpAQCAtNTEyLDEzICs0NDAsNyBA
QCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAKIHZvaWQgQ29sb3I6
OnRhZ0FzVmFsaWQoKQogewotICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyB8PSB2YWxpZFJH
QkFDb2xvcjsKLX0KLQotY29uc3QgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmFzRXh0ZW5kZWQoKSBj
b25zdAotewotICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiAqbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvcjsKKyAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9
IHZhbGlkU2ltcGxlQ29sb3I7CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDkgQEAK
ICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUNvbG9yLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNt
YXRoPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAogI2lmIFVTRShDRykKIHR5cGVkZWYg
c3RydWN0IENHQ29sb3IqIENHQ29sb3JSZWY7CkBAIC02NCwzOCArNjAsMzggQEAgcHVibGljOgog
CiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhlc2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlv
biBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9uZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdp
dGggZnJlZSBmdW5jdGlvbnMuCiAKLSAgICBDb2xvcihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQg
PSB0cnVlKQorICAgIENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7Cisg
ICAgICAgICAgICBzZXRTaW1wbGVDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgZW51bSBTZW1h
bnRpY1RhZyB7IFNlbWFudGljIH07Ci0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBTZW1hbnRpY1Rh
ZykKKyAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvciwgU2VtYW50aWNUYWcpCiAgICAgewotICAg
ICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBzZXRTaW1wbGVDb2xvcihjb2xvcik7CiAgICAg
ICAgIHNldElzU2VtYW50aWMoKTsKICAgICB9CiAKICAgICBDb2xvcihpbnQgciwgaW50IGcsIGlu
dCBiKQogICAgIHsKLSAgICAgICAgc2V0UkdCKHIsIGcsIGIpOworICAgICAgICBzZXRTaW1wbGVD
b2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwogICAgIH0KIAogICAgIENvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKQogICAgIHsKLSAgICAgICAgc2V0UkdCKG1ha2VSR0JBKHIs
IGcsIGIsIGEpKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcs
IGIsIGEpKTsKICAgICB9CiAKICAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBm
bG9hdCBhKQogICAgIHsKLSAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcs
IGIsIGEpKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cyhyLCBnLCBiLCBhKSk7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9t
IHRoZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCiAgICAgQ29sb3IoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKICAgICB7Ci0gICAgICAgIHNldFJH
QihtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgICAgIHNldFNpbXBsZUNv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CiAgICAgfQogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CkBAIC0xMDMs
MjMgKzk5LDIzIEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhh
c2hWYWx1ZSAmIGludmFsaWRSR0JBQ29sb3IsICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBt
dXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlkUkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVs
ZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIp
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNv
bG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4g
UkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFu
ZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVk
SGFzaFZhbHVlICYgaW52YWxpZFNpbXBsZUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFs
dWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydCghKGRlbGV0ZWRIYXNoVmFsdWUgJiB2YWxpZFNpbXBsZUNvbG9yQml0KSwgIkNvbG9y
J3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFNpbXBsZUNv
bG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQp
LCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhh
dCBhbiBTaW1wbGVDb2xvciB3b3VsZG4ndCBoYXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnNp
bXBsZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFzaFZhbHVlOwogICAgICAgICBBU1NFUlQoIWlz
RXh0ZW5kZWQoKSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09
IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgICAgIHJldHVybiBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CiAgICAgfQogCiAgICAgZXhwbGljaXQgQ29s
b3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKICAgICB7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9yLCAiQ29sb3IncyBlbXB0eSBo
YXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRl
ZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9y
IHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZW1w
dHlIYXNoVmFsdWU7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZh
bGlkU2ltcGxlQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBs
aWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hW
YWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNv
bWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xvciB3b3VsZG4ndCBoYXZlIik7CisgICAgICAg
IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBlbXB0eUhhc2hWYWx1ZTsKICAgICAg
ICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwogICAgIH0KIApAQCAtMTQ3LDEzICsxNDMsMTMgQEAg
cHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0aGVyICNS
UkdHQkIgb3IgI1JSR0dCQkFBCiAgICAgU3RyaW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkg
Y29uc3Q7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
fHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIHZhbGlkUkdCQUNvbG9yQml0KTsgfQorICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIHZhbGlkU2ltcGxlQ29sb3JCaXQpOyB9CiAKLSAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgp
LmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQotICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAw
LjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBs
ZUNvbG9yKCkuaXNPcGFxdWUoKTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiBhc1NpbXBsZUNv
bG9yKCkuaXNWaXNpYmxlKCk7IH0KIAotICAgIGludCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGlz
RXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpICogMjU1IDogcmdiKCkuYWxwaGFDb21w
b25lbnQoKTsgfQotICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0
ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogcmdiKCkuYWxwaGFDb21wb25lbnRBc0Zs
b2F0KCk7IH0KKyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IGFzU2ltcGxlQ29sb3IoKS5hbHBoYUNvbXBvbmVu
dCgpOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBhc1NpbXBsZUNvbG9yKCkuYWxwaGFDb21wb25l
bnRBc0Zsb2F0KCk7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIApAQCAtMTkxLDcg
KzE4Nyw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAg
ICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29s
b3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRl
ZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0
KTsgfQorICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkg
JiYgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiBpc1NlbWFudGljU2ltcGxlQ29s
b3JCaXQpOyB9CiAKICNpZiBQTEFURk9STShHVEspCiAgICAgQ29sb3IoY29uc3QgR2RrUkdCQSYp
OwpAQCAtMjEwLDExICsyMDYsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0
b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdDsKICNlbmRpZgogCi0gICAgc3RhdGljIGJvb2wgcGFy
c2VIZXhDb2xvcihjb25zdCBTdHJpbmcmLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJz
ZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBw
YXJzZUhleENvbG9yKGNvbnN0IExDaGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotICAgIHN0YXRp
YyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7Ci0K
ICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9Owog
ICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsK
QEAgLTIyNCwxNyArMjE1LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBs
ZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxsIHsgMHgzQ0FG
QzBFMyB9OwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0
aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0V4dGVuZGVkKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAm
IGludmFsaWRSR0JBQ29sb3IpOworICAgICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5zaW1wbGVD
b2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBsZUNvbG9yKTsKICAgICB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgY29uc3QgRXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OworICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xv
ciYgb3BlcmF0b3I9KENvbG9yJiYpOwpAQCAtMjUyLDE5ICsyMzcsMTkgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERl
Y29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBSR0JBMzIgcmdiKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0K
LSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwotICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQ7IH0KKyAgICBj
b25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZUNvbG9yKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNp
bXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKKyAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9
CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAg
Ly8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBSR0JBMzIuCi0gICAgLy8gMHhfX19fX19fMTEg
aXMgYSB2YWxpZCBSR0JBMzIuCisgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1w
bGVDb2xvci4KKyAgICAvLyAweF9fX19fX18xMSBpcyBhIHZhbGlkIFNpbXBsZUNvbG9yLgogICAg
IHN0YXRpYyBjb25zdCB1aW50NjRfdCBleHRlbmRlZENvbG9yID0gMHgwOwotICAgIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBpbnZhbGlkUkdCQUNvbG9yID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCB2YWxpZFJHQkFDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0
X3QgdmFsaWRSR0JBQ29sb3IgPSAweDM7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2Vt
YW50aWNSQkdBQ29sb3JCaXQgPSAweDQ7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFs
aWRTaW1wbGVDb2xvciA9IDB4MTsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1w
bGVDb2xvckJpdCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVD
b2xvciA9IDB4MzsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNv
bG9yQml0ID0gMHg0OwogCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFs
dWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5
SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwpAQCAtMjcyLDcgKzI1Nyw3IEBAIHByaXZh
dGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0YWdBc1ZhbGlkKCk7CiAKICAgICB1bmlvbiB7
Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRGbGFncyB7IGludmFsaWRSR0JBQ29sb3IgfTsKKyAg
ICAgICAgdWludDY0X3Qgc2ltcGxlQ29sb3JBbmRGbGFncyB7IGludmFsaWRTaW1wbGVDb2xvciB9
OwogICAgICAgICBFeHRlbmRlZENvbG9yKiBleHRlbmRlZENvbG9yOwogICAgIH0gbV9jb2xvckRh
dGE7CiB9OwpAQCAtMzAwLDcgKzI4NSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q29sb3ImIGEsIGMKICAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwogCi0gICAgcmV0dXJuIGEu
bV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzOwor
ICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKQEAgLTMxMiwxNSArMjk3LDE0IEBAIGlubGlu
ZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIHsKICAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0Vx
dWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29s
b3I6OmlzU2VtYW50aWNSQkdBQ29sb3JCaXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFn
cyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCk7CisgICAgcmV0dXJuIChhLm1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xv
ckJpdCkgPT0gKGIubV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNT
ZW1hbnRpY1NpbXBsZUNvbG9yQml0KTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNo
KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRl
bmRlZCgpLmhhc2goKTsKLQotICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEucmdi
YUFuZEZsYWdzKTsKKyAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNv
bG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkg
Y29uc3QKQEAgLTMzMywxNyArMzE3LDIyIEBAIGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFVc2luZ0EKICAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUgUkdCQTMy
IENvbG9yOjpyZ2IoKSBjb25zdAoraW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjph
c0V4dGVuZGVkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghaXNF
eHRlbmRlZCgpKSBoZXJlLCBvciBwcm9kdWNlCi0gICAgLy8gYW4gUkdCQTMyIGVxdWl2YWxlbnQg
Zm9yIGFuIEV4dGVuZGVkQ29sb3IuIElkZWFsbHkgdGhlIGZvcm1lciwKLSAgICAvLyBzbyB3ZSBj
YW4gYXVkaXQgYWxsIHRoZSByZ2IoKSBjYWxsIHNpdGVzIHRvIGhhbmRsZSBleHRlbmRlZC4KLSAg
ICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEucmdiYUFuZEZsYWdz
ID4+IDMyKSB9OworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworICAgIHJldHVybiAqbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JB
MzIgcmdiKQoraW5saW5lIGNvbnN0IFNpbXBsZUNvbG9yIENvbG9yOjphc1NpbXBsZUNvbG9yKCkg
Y29uc3QKIHsKLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4ocmdiLnZhbHVlKCkpIDw8IDMyOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJU
KCFpc0V4dGVuZGVkKCkpIGhlcmUgb25jZSB3ZSBoYXZlIHZlcmlmaWVkIGFsbAorICAgIC8vIGNh
bGwgc2l0ZXMgYXJlIGNoZWNraW5nIGlzRXh0ZW5kZWQoKS4KKyAgICByZXR1cm4geyBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA+PiAzMikgfTsK
K30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yIHNpbXBs
ZUNvbG9yKQoreworICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oc2ltcGxlQ29sb3IudmFsdWUoKSkgPDwgMzI7CiAgICAgdGFnQXNWYWxp
ZCgpOwogfQogCkBAIC0zNTQsNyArMzQzLDcgQEAgaW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tD
b2xvcihjb25zdCBDbwogICAgICAgICByZXR1cm4gIWV4dGVuZGVkQ29sb3IucmVkKCkgJiYgIWV4
dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5kZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5kZWRD
b2xvci5hbHBoYSgpID09IDE7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENv
bG9yOjpibGFjazsKKyAgICByZXR1cm4gY29sb3IuYXNTaW1wbGVDb2xvcigpID09IENvbG9yOjpi
bGFjazsKIH0KIAogaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC0zNjQsNyArMzUzLDcgQEAgaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xv
cihjb25zdCBDbwogICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4
dGVuZGVkQ29sb3IuZ3JlZW4oKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYg
ZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7CiAgICAgfQogICAgIAotICAgIHJldHVybiBjb2xv
ci5yZ2IoKSA9PSBDb2xvcjo6d2hpdGU7CisgICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlQ29sb3Io
KSA9PSBDb2xvcjo6d2hpdGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0zODks
MTAgKzM3OCw4IEBAIHZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb24KIAog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2Vt
YW50aWMuCiAKLSAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7Ci0KICAgICBlbmNv
ZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGFzU2lt
cGxlQ29sb3IoKS52YWx1ZSgpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNDE4
LDcgKzQwNSw3IEBAIE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoY29sb3JTcGFjZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAg
ICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAg
ICAgICByZXR1cm4gQ29sb3IgeyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgY29sb3JTcGFjZSB9
OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsKQEAgLTQyNiw3ICs0MTMsNyBAQCBPcHRpb25h
bDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICByZXR1cm4gQ29sb3IgeyB9OwogCiAgICAgdWludDMyX3QgdmFsdWU7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh2YWx1ZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9y
Q29tcG9uCiBpbmxpbmUgdWludDhfdCBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXQgZikKIHsK
ICAgICAvLyBTZWUgYWxzbyBjb2xvckZsb2F0VG9SR0JBQnl0ZSgpLgotICAgIHJldHVybiBzdGQ6
Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAy
NTUpKTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1
LjBmICogZikpLCAwLCAyNTUpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4
ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3Jl
LmgJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAg
ICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHBpeGVsLnJlZENvbXBvbmVu
dCgpLCBwaXhlbC5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbC5ibHVlQ29tcG9uZW50KCksIHBpeGVs
LmFscGhhQ29tcG9uZW50KCksIGZhbHNlKTsKKyAgICAgICAgICAgIHBpeGVsID0gbWFrZVByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbC5yZWRDb21wb25lbnQoKSwgcGl4ZWwuZ3JlZW5Db21w
b25lbnQoKSwgcGl4ZWwuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbC5hbHBoYUNvbXBvbmVudCgpLCBm
YWxzZSk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAKQEAgLTE3MCw5ICsxNzAs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBo
YUNvbXBvbmVudCgpKTsKIAogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhKQotICAgICAg
ICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKS52YWx1ZSgpOworICAgICAgICAgICAg
KmRlc3QgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSkudmFsdWUoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBh
KS52YWx1ZSgpOworICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxl
Q29sb3IociwgZywgYiwgYSkudmFsdWUoKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBpc092
ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjUsOSArMjI1LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEg
JiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwg
ZywgYiwgYSwgZmFsc2UpLnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVByZW11bHRp
cGxpZWRTaW1wbGVDb2xvcihyLCBnLCBiLCBhLCBmYWxzZSkudmFsdWUoKTsKIAotICAgICAgICBy
ZXR1cm4gbWFrZVJHQkEociwgZywgYiwgYSkudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihyLCBnLCBiLCBhKS52YWx1ZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjExMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNTMgKzQzLDUzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5w
cmVtdWx0aXBsaWVkQ2gKICAgICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEp
IC8gYTsKIH0KIAotUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGlu
dCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQorU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQogewot
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwg
cHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVs
KGIsIGEsIGNlaWxpbmcpLCBhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHByZW11bHRp
cGxpZWRDaGFubmVsKHIsIGEsIGNlaWxpbmcpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhLCBj
ZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSwgY2VpbGluZyksIGEpOwogfQogCi1S
R0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiBwaXhlbENvbG9yKQorU2ltcGxlQ29s
b3IgbWFrZVByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvciBwaXhlbENvbG9yKQog
ewogICAgIGlmIChwaXhlbENvbG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBwaXhlbENv
bG9yOwotICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21w
b25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21w
b25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICByZXR1cm4gbWFrZVBy
ZW11bHRpcGxpZWRTaW1wbGVDb2xvcihwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENv
bG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENv
bG9yLmFscGhhQ29tcG9uZW50KCkpOwogfQogCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJH
QkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCitTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0
aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiB7Ci0gICAgcmV0
dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGll
ZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVt
dWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7
CiB9CiAKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikK
K1NpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvciBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKHBpeGVsQ29sb3Iu
cmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5i
bHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgcmV0dXJu
IHBpeGVsQ29sb3I7CiB9CiAKLVJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBm
bG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQorU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHJldHVy
biBtYWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUo
ZyksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUociks
IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShnKSwgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JC
eXRlKGIpLCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoYSkpOwogfQogCi1SR0JBMzIgbWFr
ZVJHQkFGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVz
cywgZmxvYXQgYWxwaGEpCitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9h
dCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7
CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAyNTUuMDsKICAgICBGbG9hdENvbXBvbmVu
dHMgZmxvYXRSZXN1bHQgPSBoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKAorICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3Rv
ciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3Rv
ciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3Rv
ciksCiAgICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3Rv
cikpOwogfQogCi1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKK1NpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21D
TVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewogICAg
IGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKICAgICBpbnQgciA9IHN0YXRpY19jYXN0PGludD4obmV4
dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBjKSkpOwogICAgIGludCBnID0gc3RhdGlj
X2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIG0pKSk7CiAgICAg
aW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgx
IC0geSkpKTsKLSAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Iociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOwogfQogCiBT
dHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKQEAgLTEzNSw0
ICsxMzUsNzMgQEAgU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZAogICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVu
Q29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7CiB9CiAKKy8vIG9yaWdp
bmFsbHkgbW92ZWQgaGVyZSBmcm9tIHRoZSBDU1MgcGFyc2VyCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNl
SGV4Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2
ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHVuc2ln
bmVkIHZhbHVlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtpXSkpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB2YWx1ZSA8PD0gNDsKKyAgICAgICAgdmFsdWUg
fD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0pOworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDYp
CisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OworICAg
IGlmIChsZW5ndGggPT0gOCkgeworICAgICAgICAvLyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRv
IFJHQkEgb3JkZXIsIGJ1dCB0aGUgU2ltcGxlQ29sb3IgdHlwZQorICAgICAgICAvLyBleHBlY3Rz
IHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMu
CisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9
OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgLy8gI2FiY2QgY29udmVy
dHMgdG8gZGRhYWJiY2MgaW4gU2ltcGxlQ29sb3IuCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7CisgICAgICAgICAgICAgICh2YWx1ZSAmIDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8
IDI0CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAw
MCkgPDwgNAorICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4
RjAwKQorICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQK
KyAgICAgICAgfTsKKyAgICB9CisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAg
cmV0dXJuIFNpbXBsZUNvbG9yIHsKKyAgICAgICAgICAoMHhGRjAwMDAwMCkKKyAgICAgICAgfCAo
dmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUgJiAweEYwMCkgPDwgOAorICAgICAgICB8ICh2
YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUgJiAweEYwKSA8PCA0CisgICAgICAgIHwgKHZhbHVl
ICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKQorICAgIH07Cit9CisKK09wdGlvbmFsPFNpbXBs
ZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciogbmFtZSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwg
bGVuZ3RoKTsKK30KKworT3B0aW9uYWw8U2ltcGxlQ29sb3I+IFNpbXBsZUNvbG9yOjpwYXJzZUhl
eENvbG9yKGNvbnN0IFVDaGFyKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJu
IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgpOworfQorCitPcHRpb25hbDxTaW1w
bGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFtZS5sZW5n
dGgoKSk7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFt
ZS5sZW5ndGgoKSk7Cit9CisKK09wdGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFy
c2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3JiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZUhl
eENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSk7Cit9CisKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMiArMjgsMTYgQEAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIENvbG9y
IHZhbHVlIHdpdGggOC1iaXQgY29tcG9uZW50cyBmb3IgcmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFs
cGhhLgogLy8gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgc3RvcmVkIGFzIGEgMzItYml0IGludGVn
ZXIsIHdpdGggYWxwaGEgaW4gdGhlIGhpZ2ggYml0czogQVJHQi4KKy8vIEZJWE1FOiBUaGlzIGNs
YXNzIHNob3VsZCBiZSBjb25zb2xpZGF0ZWQgd2l0aCBDb2xvckNvbXBvbmVudHMuCiBjbGFzcyBT
aW1wbGVDb2xvciB7CiBwdWJsaWM6CiAgICAgY29uc3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90
IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFsdWUgfSB7IH0KQEAgLTcwLDYgKzc0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOwogICAgIH0KIAorICAg
IHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcm
KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3Qg
U3RyaW5nVmlldyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhD
b2xvcihjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxl
Q29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CisKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CkBAIC03NywyMCArODYsMTcgQEAgcHJp
dmF0ZToKIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOwogYm9vbCBv
cGVyYXRvciE9KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7CiAKLS8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBhZnRlciBtaWdyYXRpbmcgdG8gdGhlIG5ldyBuYW1lLgotdXNpbmcgUkdCQTMyID0gU2lt
cGxlQ29sb3I7Ci0KLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KTsKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OworY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGlu
dCBiKTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEpOwogCi1SR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBp
bnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKLVJHQkEzMiBtYWtlUHJl
bXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJH
QkEoUkdCQTMyKTsKLQotV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRz
KGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotV0VCQ09SRV9FWFBPUlQgUkdC
QTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7
Ci1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxv
YXQgaywgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKK1NpbXBs
ZUNvbG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOworU2ltcGxl
Q29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKK1NpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1w
bGVDb2xvcik7CisKK1dFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CitXRUJDT1JFX0VY
UE9SVCBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBz
LCBmbG9hdCBsLCBmbG9hdCBhKTsKK1NpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlL
QShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKIAogdWludDhf
dCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7CiB1aW50OF90IHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoZmxvYXQpOwpAQCAtOTgsNyArMTA0LDcgQEAgdWludDhfdCByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKGZsb2F0KQogdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2
X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAotdWludDhf
dCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCk7Cit1aW50OF90IGNvbG9yRmxvYXRUb1NpbXBs
ZUNvbG9yQnl0ZShmbG9hdCk7CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3Ig
YSwgU2ltcGxlQ29sb3IgYikKIHsKQEAgLTExMiwxMiArMTE4LDEyIEBAIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAogaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKDI1NSwgdmFsdWUpKTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsK
IH0KIAogaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gc3RkOjptYXgoMC5mLCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3Vu
ZCh2YWx1ZSkpKTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5m
LCAyNTUuZik7CiB9CiAKIGlubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZf
dCB2YWx1ZSkKQEAgLTEzNCwyMSArMTQwLDIxIEBAIGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRl
QnkyNTUodWludDE2X3QKICAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7CiB9CiAKLWlubGluZSB1aW50OF90IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCitp
bmxpbmUgdWludDhfdCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoZmxvYXQgZikKIHsKICAg
ICAvLyBGSVhNRTogQ29uc29saWRhdGUgd2l0aCBjbGFtcGVkQ29sb3JDb21wb25lbnQoKS4KICAg
ICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDAp
IHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4o
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7CisgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1
KTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCitj
b25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIp
CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIDB4RkYpOworICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7CiB9CiAKLWNvbnN0ZXhwciBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCitjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogewotICAgIHJldHVybiB7
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwg
MjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBz
dGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkg
fTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpjbGFtcChhLCAwLCAw
eEZGKSA8PCAyNCB8IHN0ZDo6Y2xhbXAociwgMCwgMHhGRikgPDwgMTYgfCBzdGQ6OmNsYW1wKGcs
IDAsIDB4RkYpIDw8IDggfCBzdGQ6OmNsYW1wKGIsIDAsIDB4RkYpKSB9OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRU
cmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotc3RhdGljIE9wdGlv
bmFsPFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMyRnJvbUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29s
b3JBcnJheSkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gbWFrZVNpbXBsZUNvbG9yRnJv
bUFSR0JDRkFycmF5KENGQXJyYXlSZWYgY29sb3JBcnJheSkKIHsKICAgICBpZiAoQ0ZBcnJheUdl
dENvdW50KGNvbG9yQXJyYXkpIDwgNCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAg
LTgwLDcgKzgwLDcgQEAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBtYWtlUkdCQTMyRgog
ICAgICAgICBjb21wb25lbnRBcnJheVtpXSA9IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5
WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0pOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJh
eVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdKTsKIH0KIAogUmVmPElu
YmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRy
aWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVkU3RyaW5nKQpAQCAtMjY3LDcg
KzI2Nyw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAg
ICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJ
RCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJh
eVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJv
bUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNl
dEZvcmVncm91bmRDb2xvcigqY29sb3IpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIFJlZjxJbmJhbmRH
ZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRU
eXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGNv
bG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFs
dWUpOwogICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEJhY2tncm91bmRDb2xvcigqY29s
b3IpOwpAQCAtMjkxLDcgKzI5MSw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0
VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0g
Q0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21B
UkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOwogICAgICAgICAgICAgICAg
IGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIGN1ZURhdGEtPnNldEhpZ2hsaWdodENvbG9yKCpjb2xvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lv
biAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDkgKzgwLDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAg
ICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRh
U3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2Fs
U2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyAr
IHg7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdC
QSgqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VSR0JBKGxvb2tVcFRhYmxl
W3BpeGVsQ29sb3IucmVkQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVu
Q29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKV0sIHBp
eGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBtYWtlUHJl
bXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvcikudmFsdWUoKTsKKyAgICAgICAgICAgIGF1dG8gcGl4
ZWxDb2xvciA9IG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcigqcGl4ZWwpOworICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9y
LnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgp
XSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFs
cGhhQ29tcG9uZW50KCkpOworICAgICAgICAgICAgKnBpeGVsID0gbWFrZVByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihwaXhlbENvbG9yKS52YWx1ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
aXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBt
X2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0
aXZlSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw4ICs1Myw4IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9y
KGMKICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIFJHQkEz
MiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVblByZW11bHRpcGxp
ZWRSR0JBKCpwaXhlbCk7CisgICAgU2ltcGxlQ29sb3IqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8U2ltcGxlQ29sb3IqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdl
dCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcigqcGl4ZWwp
OwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Us
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw4ICs1MSwxMCBAQCBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gVGlueUxSVUNhY2hl
UG9saWN5CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJHQkEzMiBtYWtlUkdCQUZy
b21DR0NvbG9yKENHQ29sb3JSZWYgY29sb3IpCitzdGF0aWMgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBzaXplX3Qg
bnVtQ29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1iZXJPZkNvbXBvbmVudHMoY29sb3IpOwogICAg
IGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9uZW50cyhjb2xvcik7
CiAKQEAgLTc3LDI3ICs3OSwzMSBAQCBzdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3Io
Q0dDb2xvCiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3RvciA9IG5l
eHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVJHQkEociAqIHNjYWxlRmFjdG9y
LCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3RvciwgYSAqIHNjYWxlRmFjdG9yKTsKKyAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIgKiBzY2FsZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9y
LCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2FsZUZhY3Rvcik7CiB9CiAKIENvbG9yOjpDb2xvcihD
R0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKKyAgICAgICAgbV9jb2xv
ckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHNldFJHQihtYWtlUkdCQUZyb21DR0NvbG9yKGNvbG9yKSk7
CisgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsK
IH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFnKQogeworICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4K
KwogICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0g
aW52YWxpZFJHQkFDb2xvcjsKKyAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyA9IGludmFsaWRTaW1wbGVDb2xvcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNl
dFJHQihtYWtlUkdCQUZyb21DR0NvbG9yKGNvbG9yKSk7CisgICAgc2V0U2ltcGxlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsKICAgICBzZXRJc1NlbWFudGljKCk7CiB9
CiAKQEAgLTEyNCw3ICsxMzAsNyBAQCBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25z
dCBDb2xvCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewog
ICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29sb3Iucmdi
KCkudmFsdWUoKSkgeworICAgICAgICBzd2l0Y2ggKGNvbG9yLmFzU2ltcGxlQ29sb3IoKS52YWx1
ZSgpKSB7CiAgICAgICAgIGNhc2UgQ29sb3I6OnRyYW5zcGFyZW50LnZhbHVlKCk6IHsKICAgICAg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9y
KGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudENHQ29sb3I7CkBAIC0xNDAs
NyArMTQ2LDcgQEAgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjbwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKGNvbG9yLmlzRXh0ZW5kZWQoKSB8fCBjb2xvci5y
Z2IoKS52YWx1ZSgpKTsKKyAgICBBU1NFUlQoY29sb3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLmFz
U2ltcGxlQ29sb3IoKS52YWx1ZSgpKTsKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55
TFJVQ2FjaGU8Q29sb3IsIFJldGFpblB0cjxDR0NvbG9yUmVmPiwgMzI+PiBjYWNoZTsKICAgICBy
ZXR1cm4gY2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYy
MTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGMpCiB7Ci0gICAgc2V0UkdCKG1ha2VSR0JB
KHN0YXRpY19jYXN0PGludD4oYy5yZWQgKiAyNTUpLAorICAgIHNldFNpbXBsZUNvbG9yKG1ha2VT
aW1wbGVDb2xvcigKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCiAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5ncmVlbiAqIDI1NSksCiAgICAgICAgIHN0YXRpY19jYXN0
PGludD4oYy5ibHVlICogMjU1KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmFscGhhICog
MjU1KSkpOworICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpCisgICAgKSk7
CiB9CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2
MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsMTAgQEAgYm9vbCB1c2VzVGVzdE1vZGVGb2N1
c1JpbmdDb2xvcigpCiAgICAgcmV0dXJuIHVzZU9sZEFxdWFGb2N1c1JpbmdDb2xvcjsKIH0KIAot
c3RhdGljIFJHQkEzMiBtYWtlUkdCQUZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQorc3RhdGlj
IFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQog
eworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNw
YWNlcy4KKwogICAgIEFTU0VSVF9BUkcoY29sb3IsIGNvbG9yKTsKIAogICAgIENHRmxvYXQgcmVk
Q29tcG9uZW50OwpAQCAtODAsMjQgKzgyLDI4IEBAIHN0YXRpYyBSR0JBMzIgbWFrZVJHQkFGcm9t
TlNDb2xvcihOU0NvbG8KICAgICAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICAgICAgW29m
ZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOwogCi0gICAgICAgIHJldHVybiBt
YWtlUkdCQShwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4
ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVl
bjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNj
YWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlUkdCQShz
Y2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBncmVlbkNvbXBvbmVudCwg
c2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGFscGhhKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZh
Y3RvciAqIGdyZWVuQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxl
RmFjdG9yICogYWxwaGEpOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNv
bG9yKQogewotICAgIHJldHVybiBDb2xvcihtYWtlUkdCQUZyb21OU0NvbG9yKGNvbG9yKSk7Cisg
ICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2Vz
LgorCisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKSk7
CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsK
LSAgICByZXR1cm4gQ29sb3IobWFrZVJHQkFGcm9tTlNDb2xvcihjb2xvciksIENvbG9yOjpTZW1h
bnRpYyk7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29s
b3Igc3BhY2VzLgorCisgICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9y
KGNvbG9yKSwgQ29sb3I6OlNlbWFudGljKTsKIH0KIAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Q29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogewotICAgIHNldFJHQihtYWtlUkdCQShjb2xvci5y
ICogMjU1LCBjb2xvci5nICogMjU1LCBjb2xvci5iICogMjU1LCBjb2xvci5hICogMjU1KSk7Cisg
ICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKGNvbG9yLnIgKiAyNTUsIGNvbG9yLmcg
KiAyNTUsIGNvbG9yLmIgKiAyNTUsIGNvbG9yLmEgKiAyNTUpKTsKIH0KIAogQ29sb3I6Om9wZXJh
dG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJ
KHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw4ICsxOTgs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBzcGVsbGlu
Z1BhdHRlcm5Db2xvciB7IG1ha2VSR0IoMjU1LCAwLCAwKSB9OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgU2ltcGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5Db2xvciB7IG1ha2VSR0IoMCwgMTI4LCAwKSB9
OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3Igc3BlbGxpbmdQYXR0ZXJuQ29sb3Ig
eyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5Db2xvciB7IG1ha2VTaW1wbGVDb2xvcigwLCAxMjgsIDAp
IH07CiAKICAgICBjb25zdCBTaW1wbGVDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUubW9kZSA9
PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0ZXJu
Q29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VD
b2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IucmVkQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5n
cmVlbkNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwYXR0ZXJuQ29s
b3IuYWxwaGFDb21wb25lbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3
ICsxMzIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRBY3RpdmVMCiAKIENP
TVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNo
V2l0aENvbG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCiB7Ci0gICAgUkdCQTMyIGNvbG9y
S2V5ID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29s
b3IuYSk7CisgICAgU2ltcGxlQ29sb3IgY29sb3JLZXkgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEpOwogCiAgICAgaWYgKCFjb2xv
cktleSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9y
ICpjb2xvcikKIHsKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZXMuCisKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgZm9yIGEgVUlD
b2xvciB0aGF0IHdhcyBjcmVhdGVkIGZyb20gYSBwYXR0ZXJuIG9yIGEgRGlzcGF5UDMgY29sb3Iu
CiAgICAgQ0dGbG9hdCByZWRDb21wb25lbnQ7CiAgICAgQ0dGbG9hdCBncmVlbkNvbXBvbmVudDsK
QEAgLTQzLDcgKzQ1LDcgQEAgQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikK
ICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJs
dWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAogICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9u
ZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRDb21wb25lbnQsIHNj
YWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1ZUNvbXBvbmVudCwg
c2NhbGVGYWN0b3IgKiBhbHBoYSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDI2
MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dE1hcmtlZFRleHREZWNvcgogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFj
a2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
KQogewogICAgIGlmICghcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uVXNl
c0N1c3RvbUhpZ2hsaWdodHMoKSkgewotICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5k
KHBhaW50SW5mbywgYm94T3JpZ2luLCBDb2xvcjo6Y29tcG9zaXRpb25GaWxsLCBjbGFtcGVkT2Zm
c2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCkpLCBjbGFt
cGVkT2Zmc2V0KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7
CisgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4s
IENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IsIGNsYW1w
ZWRPZmZzZXQocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uU3RhcnQoKSks
IGNsYW1wZWRPZmZzZXQocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5k
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIxMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDc5LDcgKzQw
NzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgICAg
IGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7CiAgICAgICAgIExheW91dFJlY3QgbGFyZ2Vy
Q29ybmVyID0gcmVzaXplckFic1JlY3Q7CiAgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExh
eW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0
KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJH
QigyMTcsIDIxNywgMjE3KSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyMTcsIDIxNywgMjE3KSk7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKDEuMGYpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnQpOwogICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNv
cm5lcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDg1LDcgKzMwODUs
NyBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnPiBSCiBzdHJ1Y3QgUGF0
dGVybkRlc2NyaXB0aW9uIHsKICAgICBBU0NJSUxpdGVyYWwgbmFtZTsKICAgICBGbG9hdFNpemUg
cGhhc2U7Ci0gICAgUkdCQTMyIGZpbGxDb2xvcjsKKyAgICBTaW1wbGVDb2xvciBmaWxsQ29sb3I7
CiB9OwogCiBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm5Gb3JEZXNjcmlwdGlvbihQYXR0
ZXJuRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIEZsb2F0U2l6ZSBjb250ZW50T2Zmc2V0LCBHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQpAQCAtMzE0NSw3ICszMTQ1LDcgQEAgc3RhdGljIFJl
ZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yVG91Y2hBYwogICAgICAgICByZXR1cm4gMDsKICAgICB9
OwogCi0gICAgY29uc3RleHByIGF1dG8gZmlsbENvbG9yID0gbWFrZVJHQkEoMCwgMCwgMCwgMTI4
KTsKKyAgICBjb25zdGV4cHIgYXV0byBmaWxsQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwg
MCwgMTI4KTsKIAogICAgIHN0YXRpYyBjb25zdCBQYXR0ZXJuRGVzY3JpcHRpb24gcGF0dGVybkRl
c2NyaXB0aW9uc1tdID0gewogICAgICAgICB7ICJhdXRvIl9zLCB7IH0sIGZpbGxDb2xvciB9LApA
QCAtMzE2NSw3ICszMTY1LDcgQEAgc3RhdGljIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yVG91
Y2hBYwogCiBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm5Gb3JFdmVudExpc3RlbmVyUmVn
aW9uVHlwZShFdmVudExpc3RlbmVyUmVnaW9uVHlwZSB0eXBlLCBGbG9hdFNpemUgY29udGVudE9m
ZnNldCwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKIHsKLSAgICBjb25zdGV4cHIgYXV0
byBmaWxsQ29sb3IgPSBtYWtlUkdCQSgwLCAxMjgsIDAsIDEyOCk7CisgICAgY29uc3RleHByIGF1
dG8gZmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMCwgMTI4KTsKIAogICAgIGF1
dG8gcGF0dGVybkFuZFBoYXNlID0gWyZdKCkgLT4gUGF0dGVybkRlc2NyaXB0aW9uIHsKICAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVBZHdhaXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVBZHdhaXRhLmNwcAkocmV2aXNpb24gMjYyMTExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDEwICs0NSwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IHRl
eHRGaWVsZEJvcmRlclNpemUgPSAxOwotc3RhdGljIGNvbnN0IENvbG9yIHRleHRGaWVsZEJvcmRl
ckNvbG9yID0gbWFrZVJHQigyMDUsIDE5OSwgMTk0KTsKLXN0YXRpYyBjb25zdCBDb2xvciB0ZXh0
RmllbGRCb3JkZXJEaXNhYmxlZENvbG9yID0gbWFrZVJHQigyMTMsIDIwOCwgMjA0KTsKLXN0YXRp
YyBjb25zdCBDb2xvciB0ZXh0RmllbGRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1NSwgMjU1
LCAyNTUpOwotc3RhdGljIGNvbnN0IENvbG9yIHRleHRGaWVsZEJhY2tncm91bmREaXNhYmxlZENv
bG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKK3N0YXRpYyBjb25zdCBDb2xvciB0ZXh0Rmll
bGRCb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMDUsIDE5OSwgMTk0KTsKK3N0YXRpYyBj
b25zdCBDb2xvciB0ZXh0RmllbGRCb3JkZXJEaXNhYmxlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDIxMywgMjA4LCAyMDQpOworc3RhdGljIGNvbnN0IENvbG9yIHRleHRGaWVsZEJhY2tncm91bmRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1KTsKK3N0YXRpYyBjb25zdCBDb2xv
ciB0ZXh0RmllbGRCYWNrZ3JvdW5kRGlzYWJsZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTIs
IDI1MiwgMjUyKTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtZW51TGlzdEJ1dHRvbkFycm93U2l6
ZSA9IDE2Owogc3RhdGljIGNvbnN0IGludCBtZW51TGlzdEJ1dHRvbkZvY3VzT2Zmc2V0ID0gLTM7
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWVudUxpc3RCdXR0b25QYWRkaW5nID0gNTsKQEAgLTU3
LDIzICs1NywyMyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJvZ3Jlc3NBY3Rpdml0eUJsCiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZUNvdW50ID0gNzU7CiBz
dGF0aWMgY29uc3QgU2Vjb25kcyBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZSA9IDMzX21zOyAv
LyAzMGZwcy4KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcm9ncmVzc0JhclNpemUgPSA2Owotc3Rh
dGljIGNvbnN0IENvbG9yIHByb2dyZXNzQmFyQm9yZGVyQ29sb3IgPSBtYWtlUkdCKDIwNSwgMTk5
LCAxOTQpOwotc3RhdGljIGNvbnN0IENvbG9yIHByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yID0g
bWFrZVJHQigyMjUsIDIyMiwgMjE5KTsKK3N0YXRpYyBjb25zdCBDb2xvciBwcm9ncmVzc0JhckJv
cmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwNSwgMTk5LCAxOTQpOworc3RhdGljIGNvbnN0
IENvbG9yIHByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIyNSwg
MjIyLCAyMTkpOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNsaWRlclRyYWNrU2l6ZSA9IDY7CiBz
dGF0aWMgY29uc3QgaW50IHNsaWRlclRyYWNrQm9yZGVyU2l6ZSA9IDE7Ci1zdGF0aWMgY29uc3Qg
Q29sb3Igc2xpZGVyVHJhY2tCb3JkZXJDb2xvciA9IG1ha2VSR0IoMjA1LCAxOTksIDE5NCk7Ci1z
dGF0aWMgY29uc3QgQ29sb3Igc2xpZGVyVHJhY2tCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDIy
NSwgMjIyLCAyMTkpOworc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRyYWNrQm9yZGVyQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjA1LCAxOTksIDE5NCk7CitzdGF0aWMgY29uc3QgQ29sb3Igc2xp
ZGVyVHJhY2tCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjI1LCAyMjIsIDIxOSk7
CiBzdGF0aWMgY29uc3QgaW50IHNsaWRlclRyYWNrRm9jdXNPZmZzZXQgPSAyOwogc3RhdGljIGNv
bnN0IGludCBzbGlkZXJUaHVtYlNpemUgPSAyMDsKIHN0YXRpYyBjb25zdCBpbnQgc2xpZGVyVGh1
bWJCb3JkZXJTaXplID0gMTsKLXN0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJvcmRlckNv
bG9yID0gbWFrZVJHQigyMDUsIDE5OSwgMTk0KTsKLXN0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJU
aHVtYkJhY2tncm91bmRDb2xvciA9IG1ha2VSR0IoMjQ0LCAyNDIsIDI0MSk7Ci1zdGF0aWMgY29u
c3QgQ29sb3Igc2xpZGVyVGh1bWJCYWNrZ3JvdW5kSG92ZXJlZENvbG9yID0gbWFrZVJHQigyNDgs
IDI0OCwgMjQ3KTsKLXN0YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJhY2tncm91bmREaXNh
YmxlZENvbG9yID0gbWFrZVJHQigyNDQsIDI0MiwgMjQxKTsKK3N0YXRpYyBjb25zdCBDb2xvciBz
bGlkZXJUaHVtYkJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwNSwgMTk5LCAxOTQpOwor
c3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRodW1iQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI0NCwgMjQyLCAyNDEpOworc3RhdGljIGNvbnN0IENvbG9yIHNsaWRlclRodW1iQmFj
a2dyb3VuZEhvdmVyZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDgsIDI0OCwgMjQ3KTsKK3N0
YXRpYyBjb25zdCBDb2xvciBzbGlkZXJUaHVtYkJhY2tncm91bmREaXNhYmxlZENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDI0NCwgMjQyLCAyNDEpOwogI2lmIEVOQUJMRShWSURFTykKLXN0YXRpYyBj
b25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQmFja2dyb3VuZGNvbG9yID0gbWFrZVJHQig3Nywg
NzcsIDc3KTsKLXN0YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQnVmZmVyZWRDb2xv
ciA9IG1ha2VSR0IoMTczLCAxNzMsIDE3Myk7Ci1zdGF0aWMgY29uc3QgQ29sb3IgbWVkaWFTbGlk
ZXJUcmFja0FjdGl2ZUNvbG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKK3N0YXRpYyBjb25z
dCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQmFja2dyb3VuZGNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDc3LCA3NywgNzcpOworc3RhdGljIGNvbnN0IENvbG9yIG1lZGlhU2xpZGVyVHJhY2tCdWZmZXJl
ZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDE3MywgMTczLCAxNzMpOworc3RhdGljIGNvbnN0IENv
bG9yIG1lZGlhU2xpZGVyVHJhY2tBY3RpdmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTIsIDI1
MiwgMjUyKTsKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MjExMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5c3Rl
bUYKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09m
Rm9udDpmb250XSAmIE5TSXRhbGljRm9udE1hc2spOwogfQogCi1zdGF0aWMgUkdCQTMyIG1lbnVC
YWNrZ3JvdW5kQ29sb3IoKQorc3RhdGljIFNpbXBsZUNvbG9yIG1lbnVCYWNrZ3JvdW5kQ29sb3Io
KQogewogICAgIFJldGFpblB0cjxOU0JpdG1hcEltYWdlUmVwPiBvZmZzY3JlZW5SZXAgPSBhZG9w
dE5TKFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5p
bCBwaXhlbHNXaWRlOjEgcGl4ZWxzSGlnaDoxCiAgICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1w
bGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNE
ZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQgYml0c1BlclBpeGVsOjMyXSk7CkBAIC01
NjgsNyArNTY4LDcgQEAgc3RhdGljIFJHQkEzMiBtZW51QmFja2dyb3VuZENvbG9yKCkKICAgICBO
U1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgIFtvZmZzY3JlZW5SZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRY
OjAgeTowXTsKIAotICAgIHJldHVybiBtYWtlUkdCQShwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVs
WzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihwaXhlbFswXSwgcGl4
ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpP
cHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjExMSkKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4
dGVuZGVkIENvbG9yIENsZWFudXA6IFVzZSB0aGUgbmFtZSBTaW1wbGVDb2xvciBjb25zaXN0ZW50
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMz
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgIChjb21wb3Np
dGlvbkhpZ2hsaWdodHMpOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBuYW1lIG9mIENvbXBvc2l0
aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IuCisKIDIwMjAtMDUtMjQg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9y
IENsZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBT
aW1wbGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRv
IGV4dGVuZGVkIGNvbG9ycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjYyMTExKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDYyNCw3ICs0NjI0LDcgQEAgc3RhdGljIFZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvbkhpZ2hsaQogICAgICAgICBpZiAoIWF0dHJpYnV0ZXNbTlNNYXJrZWRD
bGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZV0pCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgV2ViQ29yZTo6Q29sb3IgaGlnaGxpZ2h0Q29sb3IgeyBXZWJDb3JlOjpDb2xvcjo6Y29tcG9z
aXRpb25GaWxsIH07CisgICAgICAgIFdlYkNvcmU6OkNvbG9yIGhpZ2hsaWdodENvbG9yIHsgV2Vi
Q29yZTo6Q29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvciB9
OwogICAgICAgICBpZiAoVUlDb2xvciAqdWlDb2xvciA9IGF0dHJpYnV0ZXNbTlNCYWNrZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lXSkKICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yID0gV2ViQ29y
ZTo6Y29sb3JGcm9tVUlDb2xvcih1aUNvbG9yKTsKICAgICAgICAgaGlnaGxpZ2h0cy5hcHBlbmQo
eyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oTlNNYXhSYW5nZShyYW5nZSkpLCBoaWdobGlnaHRDb2xvciB9KTsKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEx
MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDIwLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRl
bmRlZCBDb2xvciBDbGVhbnVwOiBVc2UgdGhlIG5hbWUgU2ltcGxlQ29sb3IgY29uc2lzdGVudGx5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIzMzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgdGVzdCBmb3IgcmVuYW1lIG9mIG1ha2VSR0JB
RnJvbUhTTEEgdG8gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEuCisKIDIwMjAtMDUtMjQgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFu
dXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBTaW1wbGVD
b2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRvIGV4dGVu
ZGVkIGNvbG9ycykKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjExMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1h
a2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkp
OwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02MSw3
ICs2MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAgRVhQRUNUX0ZMT0FU
X0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IENvbG9yKG1ha2VSR0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5l
c3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03Nyw3ICs3Nyw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBDb2xvcihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1Rf
RVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTMsNyArOTMsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xv
cihtYWtlUkdCQUZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNM
QShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKICAgICBFWFBFQ1RfRVEoY29s
b3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0JsdWUpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFr
ZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBh
dXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCBy
b3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBURVNUKENvbG9yLCBS
R0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3Io
bWFrZVJHQkFGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9HcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
LCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VS
R0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91
bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfTGlnaHRHcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
LCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VS
R0JBRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91
bmRUcmlwcGVkQ29sb3IpOwogfQogCg==
</data>
<flag name="review"
          id="415596"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>