<?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>121641</bug_id>
          
          <creation_ts>2013-09-19 15:11:11 -0700</creation_ts>
          <short_desc>Unify baseline JIT and DFG inline caching logic</short_desc>
          <delta_ts>2013-10-15 21:34:08 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121637</dependson>
    
    <dependson>121734</dependson>
    
    <dependson>121749</dependson>
    
    <dependson>121753</dependson>
    
    <dependson>122704</dependson>
    
    <dependson>122861</dependson>
    
    <dependson>122876</dependson>
    
    <dependson>122877</dependson>
          <blocked>121756</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931106</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-19 15:11:11 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931127</commentid>
    <comment_count>1</comment_count>
      <attachid>212106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-19 16:19:43 -0700</bug_when>
    <thetext>Created attachment 212106
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931723</commentid>
    <comment_count>2</comment_count>
      <attachid>212255</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-20 23:08:38 -0700</bug_when>
    <thetext>Created attachment 212255
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940228</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 19:36:06 -0700</bug_when>
    <thetext>I think this is basically done after http://trac.webkit.org/changeset/157480.  I will leave this open to track some final clean-up efforts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940263</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-15 21:34:08 -0700</bug_when>
    <thetext>OK, I think this is done as of http://trac.webkit.org/changeset/157489.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212106</attachid>
            <date>2013-09-19 16:19:43 -0700</date>
            <delta_ts>2013-09-20 23:08:38 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>355884</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTU2MTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgi
CiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgpAQCAtNTcsMjgzICs1
OCw2IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaWYgQ1BVKE1JUFMpCi0jaWYgV1RGX01JUFNf
UElDCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAgICAgICAgIi5z
ZXQgbm9yZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKLSAgICAg
ICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiXG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1
bmN0aW9uKSAiIiAiXG4iCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAotICAgIGFzbSgg
XAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURF
X1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoi
ICJcbiIgXAotICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4i
IFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFk
ZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIHI4KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZz
ZXQpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxu
IiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92
ICglZXNwKSwgJWVheFxuIiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJWkUob2Zmc2V0
KSAiKCVlc3ApXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTUyhmdW5jdGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFS
TV9USFVNQjIpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFs
aWduIDIiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBc
Ci0gICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0g
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGEyLCBs
ciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFN
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBc
Ci0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5j
b2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVp
bmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVk
IHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJl
c3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcg
Y2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUg
SU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgot
I2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtz
cCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1Nf
RUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5f
QUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAo
IFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVN
Ql9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VK
SSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFN
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBc
Ci0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCi0g
ICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3Mi
ICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJ
T05BTCkKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShm
dW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlv
bikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIg
XAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4i
IFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElE
RV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rp
b24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJt
b3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24p
ICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUg
aW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQg
aW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChy
MCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBh
dCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYg
Q09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNU
UlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vs
c2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIs
IFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJ
ICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElP
TihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAg
ICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAotICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9M
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0g
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0j
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50
ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcykgXAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBcCi0gICAgICAg
ICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIg
XAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0g
ICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAg
ICAgICAgIm1vdmUgJGEzLCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLSAg
ICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9f
VDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAkcmEsIDIwKCRz
cCkiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50
ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcykgXAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4iIFwKLSAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotCi0jZGVmaW5l
IFNINF9TQ1JBVENIX1JFR0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAgICAgICJicmEg
IiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0g
ICAgICAgICJub3AiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4
dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAot
ICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAgICAgICAgIm1v
di5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAiYnJhZiAiIFNI
NF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICAgICAg
IjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICApOwotCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0
LCBzY3JhdGNoKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAg
ICAgInN0cyBwciwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBzY3JhdGNoICIs
IEAoIiBTVFJJTkdJWkUob2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJm
LCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4iIFwKLSAgICAg
ICAgIm5vcCIgIlxuIiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAgICAi
MjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0x
YiIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIp
Ci0KLSNlbmRpZgotCi0jZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBS
ZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKLQotI2RlZmlu
ZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0
cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdfT1BF
UkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURf
RlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShmdW5jdGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTM1Nyw3ICs4MSw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci1B
TFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDY2LDcgKzE5MCw3IEBAIGNoYXIqIG5ld1R5cGVkQXJy
YXlXaXRoT25lQXJndW1lbnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtNDc0LDcgKzE5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00ODIsNyArMjA2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpKTsKIH0KIAot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTQ5NSw3ICsyMTksNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlVGhpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY29uc3RydWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBh
Y2l0eSktPnN0cnVjdHVyZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIyNyw3IEBAIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1cm4gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTUxNCw3ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChleGVjLCBvcDEs
IG9wMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVl
QWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtNTQ3LDcgKzI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlW
YWwoRXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMs
IGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC01NzgsNyArMzAyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2Vs
bChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFBy
b3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENl
bGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MiwxNyBAQCBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YmFzZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMs
IGJhc2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQz
Ml90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4
KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5kZXgpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChl
eGVjLCBpZGVudCwgc2xvdCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlw
ZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5m
byk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7
Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAg
ICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5m
byk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUpOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAot
ICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdl
dFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSWRlbnRp
ZmllciBpZGVudCh2bSwga2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKLSAgICBi
b29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8u
YWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0
Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgZWxz
ZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCoga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1l
dGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtl
eSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSkt
Pmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6
OmRlY29kZShrZXkpLCBiYXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2Us
IFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAg
ICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJh
c2UpLCBpZGVudCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVy
U2V0dGVyKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NTksNyArMzYwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1
ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0K
IAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3LDcgKzM2OCw3
IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAgICBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3Bl
cnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcgKzM3Niw3IEBA
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25Q
dXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzgz
LDcgKzM4NCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAg
ICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUo
Y2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90
IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC03OTgsNyArMzk5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC04MTMsNyArNDE0LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGlu
ZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyArNDMxLDcgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJheSwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQog
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJv
dW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBp
bmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTg0Nyw3ICs0NDgsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwg
anNWYWx1ZSwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUs
IEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04
NzMsNyArNDc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcgog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAg
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292
ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04ODMsNyArNDg0
LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcgKzQ5Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlucHV0KSk7CiB9
CiAgICAgICAgIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEsMjM3ICs1MTIs
NyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0dXJu
IGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAgCi12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwot
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwot
ICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZv
LnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNs
b3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2Vl
biA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNl
KTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAg
IHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChi
YXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0g
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikK
LSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0K
LVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VS
VChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UK
LSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFs
dWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0
KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qp
Owotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1
ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vz
c1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkp
OwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1
aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3Qp
OwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAot
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MTE0OSw3ICs1MjAsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVz
CiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC0xMTU3LDcgKzUyOCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXMKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC0xMTY1LDcgKzUzNiw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihleGVjLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9
CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NCw3IEBAIHNpemVf
dCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzRXE8
ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVF
cShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1Myw5IEBAIHNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogbGVmdCwgSlNDZWxsKiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdo
dCkKICNlbmRpZgogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5OCw3ICs1Njks
NyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAjZW5kaWYKIH0K
IAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFD
ZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyArNTgzLDcgQEAg
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1Zh
bHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKIH0KIAotc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMzE0LDEyICs2ODUsMTIgQEAgaW5saW5lIGNoYXIq
IGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewog
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWNDYWxsZWUpCiB7CiAgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNv
bnN0cnVjdCk7CiB9CkBAIC0xMzg3LDcgKzc1OCw3IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09w
dGltaXplQ2xvc3VyZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciog
cmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpOwpAQCAtMTM5OSwxNyArNzcwLDE3IEBAIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlKQogeyAgICAKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ2FsbCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewogICAgIHJldHVy
biB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDE3LDcgKzc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJh
eVN0cnVjdHVyZSwgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MTQyNSw3ICs3OTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4
CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUlu
ZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIp
LCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQzMyw3ICs4MDQsNyBA
QCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyCiAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsK
IH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtMTQ0NCwxMjIgKzgxNSwxMjIgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheVdpdAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNy
ZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFy
cmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
YXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2
ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFu
dEJ1ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0lu
dDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0
aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhP
bmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdp
dGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoT25lQXJndW1lbnQ8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdp
dGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNp
emUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDMyQXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJh
eVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQo
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1l
bnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50PEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQog
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNp
emUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0
aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJf
dCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xh
bXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1
ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRo
U2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6
ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxl
bmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDE2QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBl
ZEFycmF5V2l0aFNpemU8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFy
Z3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhP
bmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlX
aXRoT25lQXJndW1lbnQ8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFs
dWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdp
dGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRo
U2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90
IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQzMkFy
cmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQz
MkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVy
biBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwg
bGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJy
YXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
NjRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5l
d1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIHJlZ2V4cFB0cikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1NzIsNyArOTQzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVj
dHVyZSgpLCByZWdleHApKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTU4MSw3ICs5NTIsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlQWN0CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CkBAIC0xNTkyLDcgKzk2Myw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVBcmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKQEAgLTE2MDQsNyArOTc1LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBh
cmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3Vt
ZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNv
ZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewpA
QCAtMTYxNCwxNCArOTg1LDE0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2Zm
QXJndW0KICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhl
Yyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3Vt
ZW50cygKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50
cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBh
Y3RpdmF0aW9uQ2VsbCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChhY3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRpb25DZWxsKTsgLy8gQ3VycmVu
dGx5LCB3ZSBkb24ndCBpbmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0aXZhdGlvbnMuCiAgICAganND
YXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMsIGlubGluZUNhbGxG
cmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJn
dW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKQEAgLTE2MzMsNyArMTAwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhl
YywgaWRlbnQsIHNsb3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNS
ZWdpc3RlciwgaW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRz
UmVnaXN0ZXIsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNjQ4LDcgKzEw
MTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhcmd1bWVudHNWYWx1ZS5nZXQoZXhlYywgaW5kZXgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1l
bnRCeVZhbCgKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5l
ZEFyZ3VtZW50QnlWYWwoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1Jl
Z2lzdGVyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgaW50MzJfdCBpbmRleCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY2Niw3ICsxMDM3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5j
dGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0x
Njc0LDcgKzEwNDUsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
CiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
ZnVuY3Rpb25FeGVjdXRhYmxlKQogewogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmlu
aGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKQEAgLTE2ODIsNyArMTA1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0
ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFi
bGUpLCBleGVjLT5zY29wZSgpKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9u
RXhlY3V0YWJsZUFzQ2VsbCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5j
dGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJs
ZUFzQ2VsbCkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsLT5pbmhlcml0
cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOwogCkBAIC0xNjk0LDIyICsxMDY1LDIyIEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhlYy0+c2NvcGUoKSk7
CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAg
IHJldHVybiBqc0lzT2JqZWN0VHlwZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0K
IAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2Rl
ZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZTo6
ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBl
T2YoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFsdWUpCiB7CiAgICAg
cmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMsIEpTVmFsdWUodmFsdWUpKS5hc0NlbGwo
KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5k
RmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTcyMCw3ICsxMDkxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVTdAogICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTcyOSw3ICsxMTAw
LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTczOCw3
ICsxMTA5LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAg
ICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZh
bHNlLCAwKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBA
IC0xNzQ5LDcgKzExMjAsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9H
cm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6
ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzU5LDcgKzExMzAsNyBAQCBjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBj
ZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc3MCw3ICsxMTQxLDcgQEAgY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlSW50MzIodm0pLmRhdGEoKSk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzgx
LDcgKzExNTIsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVE
b3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3OTIsNyArMTE2Myw3IEBAIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGkKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgwMyw3ICsxMTc0LDcgQEAgY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25SYWdlRW5zdXJlQwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pihhc09iamVjdChjZWxsKS0+cmFnZUVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CkBAIC0xODE0LDcgKzExODUsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkVuc3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0
KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0KIAotU3RyaW5nSW1wbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBz
dHJpbmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4
MjIsNyArMTE5Myw3IEBAIFN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2wK
ICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CiAKLUpTU3RyaW5nKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIGludDMyX3QgY2hhcmFjdGVyKQorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODMwLDcgKzEyMDEsNyBAQCBKU1N0cmluZyogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDCiAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGV4ZWMsIHN0YXRpY19jYXN0PFVDaGFyPihjaGFyYWN0ZXIpKTsKIH0KIAotSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBz
dHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgzOCw3
ICsxMjA5LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZwogICAg
IHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIHN0cmluZyk7CiB9
CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKQEAgLTE4NDYsNyArMTIxNyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25Ub1N0cmluZ08KICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS50b1N0cmluZyhleGVjKTsKIH0K
IAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKQEAgLTE4NTQsNyArMTIyNSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25Ub1N0cmluZygKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1N0cmlu
ZyhleGVjKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0LCBKU1N0cmluZyogcmlnaHQpCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NjIsNyAr
MTIzMyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIKICAgICBy
ZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGxlZnQsIHJpZ2h0KTsKIH0KIAotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcqIGMpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5n
KiBiLCBKU1N0cmluZyogYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NzAsNyArMTI0MSw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMKICAgICByZXR1cm4gSlNS
b3BlU3RyaW5nOjpjcmVhdGUodm0sIGEsIGIsIGMpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoCiAgICAgRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KQog
ewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0xODg0
LDcgKzEyNTUsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPih0YWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
QEAgLTE4OTIsMTkgKzEyNjMsMTkgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25Td2l0
Y2hTdHJpbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oZXhlYy0+Y29kZUJsb2NrKCkt
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzdHJpbmctPnZh
bHVlKGV4ZWMpLmltcGwoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWRvdWJsZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCitkb3Vi
bGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBi
KQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBvcDEp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNT
dGF0ZSogZXhlYywgaW50MzJfdCBvcDEpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpT
Qzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKLURGR0hhbmRsZXJFbmNvZGVk
IERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQzMl90IGNhbGxJbmRleCkKK0RGR0hhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGNhbGxJbmRleCkKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKQEAgLTE5MTgsNyArMTI4OSw3IEBAIERGR0hhbmRsZXJFbmNvZGVkIERG
R19PUEVSQVRJT04gbG9va3VwRXgKICAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxl
ci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKIH0KIAotREZHSGFuZGxlckVuY29k
ZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQorREZHSGFuZGxlckVuY29kZWQgSklU
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkzNSw3
ICsxMzA2LDcgQEAgREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeAogICAg
IHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRj
aFJvdXRpbmUpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRv
SW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk0NCw3ICsxMzE1LDcgQEAg
c2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZHX09QRVJB
VElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVl
VG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtMTk1Miw3ICsxMzIzLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04g
ZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
KS50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZv
UmF3LCB2b2lkKiBzY3JhdGNoKQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJp
bnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcs
IHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTkwLDcgKzEzNjEsNyBAQCB2
b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygiXG4i
KTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0
aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVy
ZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJs
ZS4KQEAgLTIwMzQsNyArMTQwNSw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRy
aWdnZXJSZW8KIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFUSU9OIHRy
aWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMjA5Niw3
ICsxNDY3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAg
ICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayks
IHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2Vy
T1NSRW50cnlOb3coCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAg
ICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1J
bmRleCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIyMTUsNyArMTU4Niw3IEBA
IGNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhNRTogTWFr
ZSBjYWxscyB3b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgog
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSogZXhlYykK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUo
KTsKICAgICAKQEAgLTIyMzUsNyArMTYwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRlQKIAogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50
bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBF
eGVjU3RhdGUqIGNhbGxlckV4ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjEy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJQdXRLaW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzcsMjI5ICszOCwxMTYgQEAgbmFt
ZXNwYWNlIERGRyB7CiAKIGV4dGVybiAiQyIgewogCi0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lT
X1NURENBTEwKLSNkZWZpbmUgREZHX09QRVJBVElPTiBDREVDTAotI2Vsc2UKLSNkZWZpbmUgREZH
X09QRVJBVElPTgotI2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVkZWZzIHByb3ZpZGUgdHlwZWNoZWNr
aW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVscGVyIHJvdXRpbmVzOwotLy8gdGhp
cyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRoZSB3cm9uZyBh
cmd1bWVudHMhCi0vKgotICAgIEtleToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNWYWx1ZQotICAg
IFA6IHBvaW50ZXIgKHZvaWQqKQotICAgIEM6IEpTQ2VsbCoKLSAgICBBOiBKU0FycmF5KgotICAg
IFM6IHNpemVfdAotICAgIFo6IGludDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJOiBTdHJpbmdJ
bXBsKgotKi8KLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBWikoRXhlY1N0
YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5n
SW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FREEpKEV4ZWNT
dGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLXR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSnNzWikoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2
b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXpl
X3QsIHNpemVfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90
LCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRp
b25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZH
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdf
T1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlw
ZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpD
X0RGR09wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVk
ZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdP
cGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwotdHlw
ZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzKShFeGVj
U3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJB
VElPTiAoKkNfREZHT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
SlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpD
X0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Ci10eXBl
ZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3Bl
cmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVS
QVRJT04gKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwotdHlwZWRlZiBkb3Vi
bGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX1paKShpbnQzMl90LCBpbnQzMl90KTsK
LXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQzMl90IERGR19PUEVSQVRJT04gKCpa
X0RGR09wZXJhdGlvbl9EKShkb3VibGUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAo
KlNfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBl
ZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09w
ZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7
Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlwZWRl
ZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBK
U09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRl
ZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAo
KlZfREZHT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5s
aW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDWiko
RXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIHZvaWQg
REZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgdm9pZCosIHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdP
cGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVl
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hw
b2ludFNldCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
dGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXpl
X3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKLXR5cGVkZWYg
Y2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKLXR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNzKShFeGVjU3Rh
dGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3Qp
OwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgU3RyaW5nSW1wbCog
REZHX09QRVJBVElPTiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
Kik7Ci10eXBlZGVmIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
U3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3Rh
dGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHBy
b3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMg
dG9vIGNvbXBsZXggdG8gSklULgotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09i
amVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3Ry
aW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVj
U3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0
ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFM
OwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5
V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1l
bnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0
ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0
YXRlKiwgZG91YmxlIHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5Kikg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJh
eVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RC
dWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90
IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
VGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2Vs
bChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdU
Rl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlW
YWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChF
eGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJy
YXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJh
eVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhPbmVBcmd1bWVu
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdp
dGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5k
c1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSosIGRvdWJsZSB2
YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVy
TGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9v
bGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVk
IHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVn
RXhwVGVzdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1zaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlND
ZWxsKikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KSBXVEZfSU5URVJOQUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVm
dCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBK
U0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CiAjZWxzZQotc2l6ZV90IERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxs
KiByaWdodCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RG
X0lOVEVSTkFMOwogI2VuZGlmCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25W
aXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1K
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJn
dW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFt
ZSopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJn
dW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVj
U3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGludDMyX3Qs
IElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQz
Ml90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7Ci1kb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QsIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2Jq
ZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUq
LCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlND
ZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3Vz
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci1KU1N0
cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0
YXRlKiwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJp
bmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLUpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
LUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRG
b3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNp
emVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24o
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNM
ZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUq
LCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0
YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhp
bnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVj
U3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJl
Q29udGlndW91cyhFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworU3RyaW5nSW1w
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyopOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1h
a2VSb3BlMihFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNo
SW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFi
bGVJbmRleCk7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVj
U3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKIAogI2lmIEVOQUJMRShGVExf
SklUKQogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBh
IHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2Fs
bChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1
Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQog
CiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBr
ZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwpAQCAtMzAwLDIxICsxODgsMjEgQEAgaW5s
aW5lIERGR0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZAogICAgIHJldHVybiBjcmVhdGVE
RkdIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsKIH0KICNlbmRpZgotREZHSGFuZGxl
ckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSos
IHVpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1ERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1Yklu
Zm8qKSBXVEZfSU5URVJOQUw7CitERkdIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiwgdWludDMyX3QpIFdURl9JTlRFUk5BTDsKK0RG
R0hhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1
YihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyopIFdURl9JTlRFUk5BTDsKIAogLy8gVGhl
c2Ugb3BlcmF0aW9ucyBpbXBsZW1lbnQgdGhlIGltcGxpY2l0bHkgY2FsbGVkIFRvSW50MzIgYW5k
IFRvQm9vbGVhbiBjb252ZXJzaW9ucyBmcm9tIEVTNS4KIC8vIFRoaXMgY29udmVyc2lvbiByZXR1
cm5zIGFuIGludDMyX3Qgd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMgemVy
byBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KLXNpemVfdCBERkdfT1BFUkFUSU9OIGRm
Z0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4o
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BF
UkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4oRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIAotdm9p
ZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhl
Y1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiwg
dm9pZCopIFdURl9JTlRFUk5BTDsKIAotdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGlt
aXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
dHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsKIAogI2lm
IEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50
cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUlu
ZGV4KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JF
bnRyeU5vdyhFeGVjU3RhdGUqLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFt
SW5kZXgpIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogfSAvLyBl
eHRlcm4gIkMiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNl
dC5oCShyZXZpc2lvbiAxNTYxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
Z2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdSZWdpc3RlclNl
dF9oCi0jZGVmaW5lIERGR1JlZ2lzdGVyU2V0X2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVk
ZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1iZXJPZlJl
Z2lzdGVycyA9Ci0gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNJblJl
Z2lzdGVyU2V0ID0KLSAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+IDM7Ci0KLXR5
cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldF07
Ci0KLWNsYXNzIFJlZ2lzdGVyU2V0IHsKLXB1YmxpYzoKLSAgICBSZWdpc3RlclNldCgpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsg
aS0tOykKLSAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0
ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAg
ICBtX3NldFtpXSA9IG90aGVyW2ldOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBSZWdpc3RlclNl
dFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQotICAgIAotICAgIHZvaWQgY29w
eUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAg
ICBvdGhlcltpXSA9IG1fc2V0W2ldOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChHUFJSZWcg
cmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAg
ICAgc2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcihHUFJSZWcgcmVn
KQotICAgIHsKLSAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4g
Z2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRleCd0aCBm
cmVlIEdQUi4KLSAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkpICYmICFpbmRl
eC0tKQotICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICBzZXRCaXQoR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y2xlYXIoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOwotICAg
IH0KLSAgICAKLSAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7
Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRl
eCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAgIHZv
aWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHNldChCYW5rSW5m
bzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYW5rSW5mbz4KLSAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7Ci0gICAgfQot
ICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0Ci0gICAgewotICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlNldEZQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzICsgaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQr
KzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1
bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbE51bWJlck9m
UmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIHNldEJp
dCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSAm
PSB+KDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0Qml0KHVuc2lnbmVk
IGkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMpOwotICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKTsK
LSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19OwotCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKSAtPiBzbyBpZiBERkcg
aXMgZGlzYWJsZWQKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBEZWZp
bmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1dCBpcyBvdGhl
cndpc2UgdXNlbGVzcywKLS8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRvIHRoaXMgdHlw
ZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRoZSBERkcgaXMgZGlzYWJs
ZWQuCi0KLXN0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHUmVnaXN0
ZXJTZXRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDE1NjEyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQot
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIK
LSNpbmNsdWRlICJERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJERkdT
cGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1ZGUgIkdDQXdh
cmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgotI2luY2x1
ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNv
ZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5j
dGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLXN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBj
b21wYWN0KQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwot
Ci0gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7Ci0KLSAgICAvLyBQ
YXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1U
b0NhbGwpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9u
SXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxp
bmVPZmZzZXQob2Zmc2V0KSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY29tcGFjdCkK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7Ci0g
ICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7
Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9y
U3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3Nl
bWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVy
ZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsK
LSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaykpOwotI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLSAgICAg
ICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBz
dHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rl
cy4KLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJy
YW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSk7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIG9rLmxpbmsoJmppdCk7
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBN
YWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAg
IAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFz
Q2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJn
ZXQpCi17Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhK
dW1wKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIC0oaW50
cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJn
ZXQpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVy
JiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWls
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVk
VG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIs
IGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIAot
ICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5r
UmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2Nh
dGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikK
LXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAg
IAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0g
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9yZVNj
cmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBm
YWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7
Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJS
ZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
dmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRG
cmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgIAot
ICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIo
YmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxh
dGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQ
Uik7Ci0jZW5kaWYKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgICAgICBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgU3RydWN0dXJl
KiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBw
cm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChl
eGVjKSk7Ci0gICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAg
IHByb3RvT2JqZWN0LCBwcm90b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgfQotICAgIAotICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCks
IHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJK
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmpl
Y3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVy
Zmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7
Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgIAotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hC
dWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMs
IHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPSBG
SU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1
Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUNh
Y2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBw
cm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxp
a2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4K
LQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYm
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
YmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRh
Z0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BS
KTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVl
R1BSKCk7Ci0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVj
dWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRh
Z0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAg
ICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCi0gICAgICAgIHN0
dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSkpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5vcjY0KEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOwotICAgICAgICBzdHViSml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigweGZm
ZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKLSNlbmRpZgotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAg
ICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNj
cmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Ci0gICAg
ICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAg
ICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZH
X1NUVUIoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5
SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwot
ICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogc2hv
dWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgotCi0gICAgLy8gRklYTUU6IENh
Y2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+
c3RydWN0dXJlKCk7Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vz
cy4KLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6
OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkQnVpbGRMaXN0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7
Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0g
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vzcyhl
eGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwot
ICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNz
U3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVj
dHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1
YkluZm8uc3R1YlJvdXRpbmUpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5m
bywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAg
ICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCi1zdGF0aWMgYm9vbCBnZXRQb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QoCi0gICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dComIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5kZXgsCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwmIHNsb3dDYXNlKQotewotICAgIHNsb3dDYXNlID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191
bnNldCkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDA7
Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRf
c2VsZikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0
QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJ
bmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVl
KTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRp
b25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGlu
ZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZM
aXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0SW5k
ZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVM
aXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0
U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUq
IHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5k
aWRTZWxmUGF0Y2hpbmcpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19Ci0KLXN0YXRp
YyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpCi0gICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKLSAgICAgICAgfHwgIWJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBKU0NlbGwqIGJh
c2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0Zs
dXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNo
aW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5
SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3Bl
cnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRv
IGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdl
cmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICAgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0SW5kZXg7Ci0g
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotCi0gICAgICAgIGlmICghZ2V0UG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlz
dFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBDQ2Fs
bEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNlIGZvciBzdHVi
cyBpcyBhcyBmb2xsb3dzOgotICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIgdGhhdCBjYWxs
cyB0aGUgZ2V0dGVyLgotICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0
aW9uLCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCi0gICAgICAgIC8vICAgIGhl
bHBlci4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlvbkZ1bmN0
aW9uOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UK
LSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
LCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0
ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihGdW5jdGlvblB0
cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0g
ICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0
dGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBOZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUs
IHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZy
b20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAg
ICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9u
QXNSYXdCaXRzKCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJl
c3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdWNj
ZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSk7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJK
aXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNl
Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BSKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9m
ZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAg
ICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAgICAKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgc2xvd0Nhc2UpOwotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAgICAgaWYg
KCFpc0RpcmVjdCkgewotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxs
LCBvcGVyYXRpb25GdW5jdGlvbik7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRs
ZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9Ci0gICAgICAg
ICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAgICAgKnZtLAotICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAg
c2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSk7Ci0g
ICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3Ry
dWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaEp1bXBUb0dldEJ5SWRT
dHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAgICAgcmV0
dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIGlk
ZW50LCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50
IGxpc3RJbmRleDsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLSAgICBpZiAoIWdl
dFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsr
OwotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0g
ICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHNs
b3dDYXNlLCBzdHViUm91dGluZSk7Ci0gICAgCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1wVG9HZXRC
eUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsK
LX0KLQotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgYm9vbCBkb250Q2hh
bmdlQ2FsbCA9IHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvKTsKLSAgICBpZiAoIWRvbnRDaGFuZ2VDYWxsKQotICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQotc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKQ0kgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xv
dCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7Ci0g
ICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdDsKLX0KLQotc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlh
dGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90
LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0QnVpbGRMaXN0OwotICAgIH0KLSAgICBpZiAocHV0S2luZCA9PSBEaXJlY3Qp
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0
OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0OwotfQotCi1z
dGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVjLAotICAg
IEpTVmFsdWUsCi0gICAgY29uc3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBQdXRLaW5k
LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1
cmVMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdp
c3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFs
c2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IHRydWU7Ci0jZWxz
ZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7Ci0jZW5kaWYKLSAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgIAotICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBpc091dE9mTGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwg
dmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpz
ZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBzdHViSml0LnB1
c2goc2NyYXRjaEdQUik7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3Ry
dWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gU3BlY3VsYXRpdmVKSVQ6OnNl
bGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAg
ICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIs
IHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICBzdHViSml0
LnB1c2goc2NyYXRjaEdQUjIpOwotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1
YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7Ci0jZW5kaWYKLSAg
ICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwot
ICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBv
cChzY3JhdGNoR1BSKTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAg
ICAKLSAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgZmFp
bHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICgiREZHIFB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwot
fQotCi1zdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLAotICAgIEpTVmFsdWUsCi0gICAgY29uc3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAg
ICBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluLAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
YmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Ci0j
ZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7Ci0gICAgYWxsb2Nh
dG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBhbGxvY2F0b3Iu
bG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7
Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAgICAgCi0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAg
IEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEg
IT0gdmFsdWVHUFIpOwotICAgIAotICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBmYWxzZTsK
LSAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCi0gICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotI2VuZGlmCi0g
ICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgbmVl
ZFRoaXJkU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyOwot
ICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9
IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOwotICAg
ICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotICAgIH0gZWxzZQotICAg
ICAgICBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIz
OwotICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIzID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMg
IT0gYmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7Ci0g
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjcmF0
Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAotICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAgICAKLSAgICBBU1NFUlQob2xk
U3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
LSAgICAKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9sZFN0
cnVjdHVyZSkpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
ICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgICAgICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgZm9y
IChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAq
aXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKLSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwotICAgIEFTU0VSVChzY3Jh
dGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMg
d3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVz
IGl0Ci0gICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
LSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAg
ICAKLSAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlm
IChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBDb3BpZWRBbGxvY2F0
b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJl
bWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJK
aXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAg
ICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAg
ICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNW
YWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEg
PSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKLSAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIzLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lk
KikpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCAr
IHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwotICAgIH0KLQotICAg
IHN0dWJKaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3Rv
cmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgICAgICAgICAKLSAgICBpZiAo
YWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0g
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQp
OwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBvcGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQ
YXRoOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRoLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZSgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1Rv
U2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIp
OwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFz
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7
Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVy
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3VjY2Vzc0lu
U2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9y
YWdlQW5kRmluaXNoUHV0KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzSW5TbG93
UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIH0KLSAgICAKLSAgICBzdHViUm91dGlu
ZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAgRklOQUxJWkVf
REZHX0NPREUoCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAgICAg
KCJERkcgUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRp
bmcgIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwK
LSAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAg
ICAgICAgICBzdHJ1Y3R1cmUpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNDZWxsKiBiYXNlQ2Vs
bCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VD
ZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpOwotICAgIAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBh
Y2Nlc3MuCi0gICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAg
ICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBp
ZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKQotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2Ms
IGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4K
LSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQ
cm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIGlkZW50
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9s
ZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCi0gICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0
UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRT
dHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJv
b2wgY2FjaGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIHJl
cGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci19Ci0K
LXN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJl
KCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KTsKLSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlm
IChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlk
TGlzdCogbGlzdDsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYg
d2UgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0
IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYK
LSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAgJiYgb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNl
IHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCi0gICAgICAgICAg
ICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291
bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVj
LCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUg
c3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgbGlz
dCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0gICAgICAgICAgICAgICAgcHV0S2lu
ZCwgc3R1YkluZm8sCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgICAg
ICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KCkpLAotICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1
dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJl
LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgICAgICBzdHViUm91
dGluZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1p
dHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGlu
Z2x5LgotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0g
ICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1YkluZm8sCi0gICAgICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dFJl
cGxhY2VTdHViKAotICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENv
ZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRp
bmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAg
ICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIHN0dWJSb3V0aW5lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsaXN0LT5p
c0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgYm9vbCBjYWNoZWQgPSB0cnlCdWlsZFB1dEJ5SWRMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7
Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeVJlcGF0Y2hJbigK
LSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGJvb2wgd2FzRm91bmQsCi0gICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUoKS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7Ci0gICAgCi0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxp
emVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0ZvdW5kID8gc2xv
dC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7Ci0gICAgaWYg
KGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlTGFiZWw7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX3Vuc2V0KSB7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5l
dyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgc3R1YkluZm8uaW5p
dEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOwotICAgICAgICBzbG93Q2FzZUxh
YmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgICAgIGxp
c3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Ci0gICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGxp
c3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOwotICAgICAgICBzbG93Q2FzZUxh
YmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0gICAgewotICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgIAotICAgICAgICBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOwotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNl
bGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQu
cHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotICAg
ICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICAg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICAgICAgZmFp
bHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
c3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJK
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BS
KTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
cywgZmFpbDsKLSAgICAgICAgCi0gICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNh
c2VzKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0gICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChw
YXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKLSAgICAgICAgCi0gICAgICAgIHN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5v
IiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgICAg
IHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAgIAotICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwotICAg
IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1Yklu
Zm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotfQotCi12b2lkIHJlcGF0Y2hJbigKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgd2FzRm91bmQsCi0gICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBp
ZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJl
cGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkluKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOwotfQotCi12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24q
IGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKLSAgICAKLSAg
ICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERGRyBjYWxsZXIgdGhlbiB5
b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2Nr
KQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJG
cmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7
Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7
Ci0gICAgCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExp
bmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZv
LmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKLSAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1l
KCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0
cik7Ci0gICAgCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8p
OwotICAgIAotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElT
dHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JD
b25zdHJ1Y3QpOwotfQotCi12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICBs
aW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKLX0KLQot
dm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0gICAgCi0gICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsK
LSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgR1BSUmVnIGNh
bGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUik7Ci0g
ICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9jayk7Ci0gICAg
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2hUZXN0
NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFk
eSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0jZW5kaWYKLSAgICAKLSAgICBz
bG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjYWxsZWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKLSAgICAKLSAgICBzbG93UGF0
aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxs
ZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOwotICAgIAotICAgIHN0dWJK
aXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAgICBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0dWJKaXQuc3RvcmU2NCgKLSAg
ICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKLSNlbHNlCi0gICAgc3R1
YkppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotI2VuZGlmCi0gICAgCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgc2xvd1BhdGgubGluaygmc3R1
YkppdCk7Ci0gICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotI2Vu
ZGlmCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIyKTsKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3cgPSBzdHVi
Sml0Lmp1bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJK
aXQsIGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAKLSAg
ICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihu
ZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCi0g
ICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIGNsb3N1cmUgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCi0gICAgICAgICAg
ICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0g
ICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NTdHJpbmcocG9p
bnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICp2bSwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxs
TGlua0luZm8uY29kZU9yaWdpbikpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdp
dGhKdW1wKAotICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7Ci0gICAgCi0gICAg
Y2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7Ci0gICAgCi0gICAgQVNT
RVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFs
cmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOwotfQotCi12b2lkIHJlc2V0R2V0QnlJRChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmRmZy5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50
ZXIpKTsKLSAgICB9Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSks
IDApOwotI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLXZvaWQgcmVzZXRQdXRC
eUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8Vl9ERkdPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxs
VGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dCkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwot
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6
OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaCgKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKLSAgICAg
ICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVz
ZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
MCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0K
LXZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0K
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiAxNTYxMjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgREZHUmVwYXRjaF9oCi0jZGVmaW5lIERGR1JlcGF0Y2hfaAotCi0jaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7Ci0KLXZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Ci12b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lk
IGJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVw
YXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Ci12b2lkIGJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Ci12b2lk
IHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3
YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQg
bGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
Ci12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIpOwotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZWxzZSAvLyBFTkFCTEUoREZH
X0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBSZXBhdGNoQnVmZmVyOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwotCi1uYW1l
c3BhY2UgREZHIHsKLQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldEdl
dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJl
c2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLWlubGluZSBOT19SRVRVUk4gdm9pZCByZXNldEluKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLSNlbmRpZiAvLyBERkdSZXBhdGNoX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTU2MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCi0jZGVmaW5lIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcl9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShERkdfSklU
KQotCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJTZXQuaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYSBsb3ctbGV2ZWwgcmVnaXN0ZXIgYWxsb2NhdG9yIGZvciB1c2UgaW4gc3R1YnMu
Ci0KLWNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAg
ICAgICA6IG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQotICAgICAgICAsIG1fZGlkUmV1
c2VSZWdpc3RlcnMoZmFsc2UpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHZvaWQgbG9jayhUIHJlZykgeyBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocmVn
KTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAgIHR5cGVuYW1l
IEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCkKLSAgICB7Ci0gICAgICAg
IC8vIEZpcnN0IHRyeSB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIHRoYXQgaXMgdG90YWxseSBmcmVl
LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5
cGUgcmVnID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fbG9j
a2VkUmVnaXN0ZXJzLmdldChyZWcpCi0gICAgICAgICAgICAgICAgJiYgIW1fdXNlZFJlZ2lzdGVy
cy5nZXQocmVnKQotICAgICAgICAgICAgICAgICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJl
ZykpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gU2luY2UgdGhhdCBmYWlsZWQsIHRyeSB0byBhbGxvY2F0ZSBhIHJlZ2lz
dGVyIHRoYXQgaXMgbm90IHlldAotICAgICAgICAvLyBsb2NrZWQgb3IgdXNlZCBmb3Igc2NyYXRj
aC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJU
eXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQocmVnKSAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7
Ci0gICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOwotICAgICAgICAg
ICAgICAgIG1fZGlkUmV1c2VSZWdpc3RlcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVy
biByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdl
IGZhaWxlZC4KLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgLy8gTWFrZSBzb21lIHNpbGx5IGNv
bXBpbGVycyBoYXBweS4KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEJhbmtJ
bmZvOjpSZWdpc3RlclR5cGU+KC0xKTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGFsbG9jYXRl
U2NyYXRjaEdQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxHUFJJbmZvPigpOyB9Ci0gICAg
RlBSUmVnIGFsbG9jYXRlU2NyYXRjaEZQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxGUFJJ
bmZvPigpOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRSZXVzZVJlZ2lzdGVycygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9kaWRSZXVzZVJlZ2lzdGVyczsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVnaXN0ZXJzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hS
ZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRl
eChpKSkgewotICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMig4KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAg
ICAgICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHZvaWQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fz
c2VtYmxlciYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVnaXN0ZXJzKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3Nj
cmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BS
QnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIo
aSkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJz
LmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsK
LSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig4KSwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICB1bnNpZ25lZCBkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAqIHNpemVvZihKU1Zh
bHVlKTsgfQotICAgIAotICAgIHZvaWQgcHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVm
ZmVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIsIEdQ
UlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BS
QnlJbmRleChpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50
KyspKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIg
PT0gSW52YWxpZEdQUlJlZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAm
JiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIH0KLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsr
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCAqIHNpemVvZihKU1ZhbHVlKSA9PSBkZXNpcmVk
U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCAqIHNpemVvZihKU1ZhbHVlKSkpLCBz
Y3JhdGNoR1BSKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZXN0b3JlVXNlZFJlZ2lzdGVyc0Zy
b21TY3JhdGNoQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIsIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKLSAgICB7Ci0gICAg
ICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIC8vIEZp
bmQgYSBzY3JhdGNoIHJlZ2lzdGVyLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9s
b2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSB8fCBtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgCi0gICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxl
bmd0aFB0cigpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUik7Ci0KLSAgICAgICAgLy8gUmVzdG9y
ZSBkb3VibGUgcmVnaXN0ZXJzIGZpcnN0LgotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IG1fdXNl
ZFJlZ2lzdGVycy5udW1iZXJPZlNldEdQUnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3Vz
ZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVl
Kj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKHNjcmF0Y2hHUFIsIEZQUkluZm86OnRv
UmVnaXN0ZXIoaSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQ
UkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgaml0LmxvYWQzMihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIo
aSkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNldCBt
X2xvY2tlZFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNldCBtX3NjcmF0Y2hSZWdpc3RlcnM7Ci0g
ICAgYm9vbCBtX2RpZFJldXNlUmVnaXN0ZXJzOwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNlbmRpZiAvLyBERkdTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU2MTIzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5NSwyMiArODk1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSog
bgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNz
ZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaml0
KTsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7
Ci0gICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2Ny
YXRjaDIpOwotICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7Ci0KLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQs
IFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgot
fQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBH
UFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KG93bmVyR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NjEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2lu
Y2x1ZGUgIkRGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUg
Ik1hcmtlZEFsbG9jYXRvci5oIgpAQCAtMzExLDggKzMxMSw2IEBAIHB1YmxpYzoKICAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2N1cnJlbnRO
b2RlLT5jb2RlT3JpZ2luKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIo
TWFjcm9Bc3NlbWJsZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BS
UmVnIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKLQogICAgIHZvaWQgd3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmll
cihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQ
UlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IElu
dmFsaWRHUFJSZWcpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJl
ZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNj
cmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7CkBAIC03MzIsOSArNzMwLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBO
b2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1
bGF0aXZlQ29tcGFyZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxz
ZSk7CiAgICAgCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBO
b2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19E
RkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICBib29sIG5vblNw
ZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxw
ZXJGdW5jdGlvbik7CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0
RXEoTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBib29sIGludmVydCA9
IGZhbHNlKTsKQEAgLTkyNCwxNjkgKzkyMiwxNjkgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUg
cmVnaXN0ZXJzLCBhbmQgZGVsZWdhdGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBzcGVjaWZpYwog
ICAgIC8vIGRlY2lzaW9uIGFzIHRvIGhvdyB0byBmaWxsIHRoZSByZWdzaXRlcnMgdG8gc2V0dXBB
cmd1bWVudHMqIG1ldGhvZHMuCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
Y2VsbCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9u
X0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoY2VsbCk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJh
dGlvbl9FTyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FTyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU9TIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVk
SW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9i
amVjdCwgaW50MzJfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19KSVRPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVj
dCwgaW50MzJfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUp
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2xkLCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQs
IHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTSnNz
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IGluZGV4LCBHUFJSZWcgYXJnMSkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTSnNzIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IGluZGV4LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KGluZGV4KSwgYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVy
YXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tMzIoYXJnMikpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
SklUT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qg
c2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9u
X0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZv
aWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RT
UyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
aW5kZXgsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9KSVRPcGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IGluZGV4LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IFRydXN0ZWRJbW1QdHIoaW5kZXgpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3Bl
cmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUND
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSWNmIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSWNmIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmxpbmVD
YWxsRnJhbWUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VK
c3NTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VKc3NTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRp
b25fRUpzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9u
X0VKc3NKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3Mgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpzc19ERkdPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpzc19KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0ljZiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSWNmIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQ0ljZiBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDWiBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBpbnQgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBp
bnQgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9K
SVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9XIG9wZXJhdGlvbiwg
V2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOwpAQCAtMTExOCwyNDQgKzExMTYsMjQ0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0LCBhcmc1KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKERfREZHT3BlcmF0aW9uX1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9K
SVRPcGVyYXRpb25fWlogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcy
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0
aW9uX0REIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fREQg
b3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKElfREZHT3BlcmF0aW9uX0VKc3Mgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKElfSklUT3BlcmF0aW9uX0VKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2
b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9ERkdPcGVyYXRpb25fRCBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEZQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKG9wZXJh
dGlvbik7CiAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
aW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKc3NaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVy
LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNp
emVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3Rh
bnQsIGludCBudW1Db25zdGFudHMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQgc3RhcnRD
b25zdGFudCwgaW50IG51bUNvbnN0YW50cykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoc3RhcnRDb25zdGFudCksIFRydXN0ZWRJ
bW0zMihudW1Db25zdGFudHMpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihwb2ludGVy
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2Vs
bCogY2VsbCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2Vs
bCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FREEg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbTMyKGFyZzEpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBh
cmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
KGFyZzEpLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RG
R09wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNp
emVfdCBpbmRleCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3Bl
cmF0aW9uX0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgc2l6ZV90
IGluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KHZhbHVlLCBUcnVzdGVkSW1tUHRyKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19ERkdPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25f
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRP
cGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMiBpbW0pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0pCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUpKSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mi5ncHIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgRlBSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50
ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJ
bXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBs
KiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNKSiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtMTM3OSw3ICsxMzc3
LDcgQEAgcHVibGljOgogI2RlZmluZSBTSDRfMzJCSVRfRFVNTVlfQVJHCiAjZW5kaWYKIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9ERkdPcGVyYXRpb25fRCBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQ
UlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpOwogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxKTsKQEAgLTEzODcsMjMzICsxMzg1LDIzMyBA
QCBwdWJsaWM6CiAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
dm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIHZvaWQq
IHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBh
eWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRl
ciwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBu
dW1Db25zdGFudHMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29u
c3RhbnQpLCBUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9h
ZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCog
cG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBH
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEpTQ2VsbCogY2VsbCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEpTQ2VsbCogY2VsbCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1
c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQ
YXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJp
bmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgaW50MzJfdCBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVp
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJ
XzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgVHJ1c3RlZEltbTMyKGFyZzFUYWcpLCBUcnVz
dGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURB
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEZQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMiBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMiBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2Fk
LCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXls
b2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIFRydXN0ZWRJbW1QdHIo
aW5saW5lQ2FsbEZyYW1lKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihh
cmcxKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VKUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTVmFsdWVSZWdzIHZhbHVlLCBzaXplX3QgaW5kZXgp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIHZhbHVlLnBheWxvYWRHUFIoKSwgdmFsdWUudGFnR1BSKCksIFRydXN0
ZWRJbW1QdHIoaW5kZXgpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMlRh
ZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMlBheWxvYWQsIGFy
ZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3Bl
cmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBH
UFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJS
ZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MVBheWxvYWQsIGFyZzFUYWcsIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJU
YWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1t
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJH
IGltbSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0s
IEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgaW1tLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQ
YXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEpTVmFsdWVS
ZWdzIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1Zh
bHVlUmVncyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIucGF5bG9h
ZEdQUigpLCBhcmcyLnRhZ0dQUigpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQucGF5bG9hZEdQUigpLCByZXN1
bHQudGFnR1BSKCkpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVN
TVlfQVJHIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlk
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklf
MzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRy
KHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZH
T3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQ
UlJlZyBhcmcyUGF5bG9hZCwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwg
R1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywg
YXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1Bh
eWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcz
UGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9h
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXls
b2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzNUYWcsIEdQUlJlZyBhcmcz
UGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBTSDRfMzJCSVRfRFVNTVlfQVJHIGFy
ZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5
bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTE5MTYsOCArMTkxNCw4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmljdEludDUyKGVkZ2Uubm9kZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBjb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdP
cGVyYXRpb25fRUpKKTsKLSAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlKiwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVD
b25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21wYXJlKE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKKTsKKyAgICBib29sIGNvbXBpbGVQZWVwSG9s
ZUJyYW5jaChOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSik7CiAgICAgdm9p
ZCBjb21waWxlUGVlcEhvbGVJbnQzMkJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklU
Q29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xl
SW50NTJCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUJvb2xlYW5CcmFuY2goTm9k
ZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDE1
NjEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsMjM4ICs5Myw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvblQKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcg
T1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKIH0KIAotaW5saW5lIHZvaWQgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKLXsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzTm9uWmVybyA9IGpp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgcG9pbnRlckdQUik7Ci0gICAg
aml0LmJyZWFrcG9pbnQoKTsKLSAgICBpc05vblplcm8ubGluaygmaml0KTsKLSAgICBqaXQucHVz
aChwb2ludGVyR1BSKTsKLSAgICBqaXQubG9hZDgocG9pbnRlckdQUiwgcG9pbnRlckdQUik7Ci0g
ICAgaml0LnBvcChwb2ludGVyR1BSKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHBvaW50ZXJHUFIpOwotI2VuZGlmCi19Ci0KLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQot
ewotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAotICAgIC8vIFdlIHdpbGwganVtcCB0
byBoZXJlIGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtpbmcgYSBjYWxsLCBidXQgdGhl
Ci0gICAgLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRocm93IGFuIGV4
Y2VwdGlvbiBpbnN0ZWFkLiBXZSB3aWxsCi0gICAgLy8gaGF2ZSBzYXZlZCB0aGUgY2FsbFJldHVy
bkluZGV4IGluIHRoZSBmaXJzdCBhcmd1bWVudHMgb2YgSklUU3RhY2tGcmFtZS4KLSAgICAvLyBO
b3RlIHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMg
cG9pbnQsIHNvIHdlCi0gICAgLy8gbmVlZCB0byByZW1vdmUgaXQgYW5kIGRyb3AgaXQgb24gdGhl
IGZsb29yLCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgotICAgIC8vIEZpbmFsbHkgbm90
ZSB0aGF0IHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyIHBvaW50cyBhdCB0aGUgY2FsbGVlIGZyYW1l
LCBzbwotICAgIC8vIHdlIG5lZWQgdG8gcG9wIGl0LgotICAgIGppdC5wcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBq
aXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAotICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBq
aXQucGVlazY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFN
RV9BUkdTX0lOREVYKTsKLSNlbHNlCi0gICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2VuZGlmCi0gICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVu
ayIpKTsKLX0KLQotc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBq
aXQsIFZNKiB2bSwgUF9ERkdPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQotewotICAgIGpp
dC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0g
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAg
aml0LnN0b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
aml0LnBva2U2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJB
TUVfQVJHU19JTkRFWCk7Ci0jZWxzZQotICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGpp
dC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
Ci0gICAgLy8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgotICAg
IC8vIDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgotICAgIC8vIDMp
IFRoZSBmdW5jdGlvbiB0byBjYWxsLgotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBK
U1N0YWNrOjpSZXR1cm5QQyksCi0gICAgICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7Ci0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoMCksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7Ci0gICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
LSAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVy
YXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICAv
LyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lz
dGVyLiBXZSB3aWxsIGhlbmNlCi0gICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhl
IGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCi0gICAgLy8gdG8g
cGVyZm9ybSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhw
ZWN0IHRoZSBjYWxsZWUKLSAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBh
eWxvYWQvdGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5Ci0gICAgLy8gYmVlbiBh
ZGp1c3RlZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFu
ZGxlciBpbmRleCwKLSAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFi
bGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKLSAgICAvLyB0byBzYXZlIGlt
cG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCi0gICAgCi0gICAgQ0NhbGxIZWxwZXJz
IGppdCh2bSk7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9y
Q2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0gICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAg
ICAoIkRGRyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAi
Y2FsbCIgOiAiY29uc3RydWN0IikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVy
YXRvcih2bSwgQ29kZUZvckNhbGwpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gbGlua0ZvclRodW5r
R2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotLy8gRm9yIGNsb3N1cmUgb3B0
aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcg
Y2xvc3VyZXMgZm9yCi0vLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRv
IGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJl
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
LSAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwp
OwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyBsaW5r
IGNsb3N1cmUgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBv
biB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCi0gICAg
Ly8ganVtcCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUg
Y2FsbCBmcmFtZSB3aGlsZSB3ZQotICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbCB0byB0
aGUgYXBwcm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KLQotICAgIENDYWxsSGVscGVycyBqaXQodm0p
OwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tz
LiBJbiBtYW55IGNhc2VzLAotICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMg
ZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KLSAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFRl
c3Q2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHNsb3dDYXNlLmFw
cGVuZCgKLSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgR1BSSW5mbzo6bm9uQXJnR1BSMSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0jZW5kaWYKLSAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFwcGVu
ZCgKLSAgICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwotICAgIAotICAgIC8v
IE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgotICAgIAotICAgIGppdC5sb2FkUHRy
KAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICBHUFJJbmZvOjpub25BcmdH
UFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2gzMigKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4sCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJs
ZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSksCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgIAotICAgIC8vIE5vdyB3ZSBrbm93IHRo
YXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBm
YXN0Ci0gICAgLy8gY2FsbC4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBqaXQuc3RvcmU2NCgKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbikpOwotI2Vsc2UKLSAgICBqaXQuc3Rv
cmVQdHIoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgIGppdC5zdG9yZTMyKAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rl
cikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAg
IGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9y
KGtpbmQpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAotICAgIC8vIE1ha2UgYSB0
YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBERkcgY29kZS4KLSAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmVnVDApOwotCi0gICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICAKLSAgICAvLyBIZXJl
IHdlIGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGgu
Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9w
ZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7Ci0gICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IkRGRyB2aXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAi
Y2FsbCIgOiAiY29uc3RydWN0IikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVu
a0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gdmly
dHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9uIDE1NjEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDE2ICs0MCw2IEBAIG5hbWVzcGFjZSBERkcgewogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7Ci0KLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7Ci0KLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMTU2MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDYgKzQxMywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAg
ICB9CiAKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCisgICAgewor
ICAgICAgICBVTlVTRURfUEFSQU0oaml0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNj
cmF0Y2gyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgICAgICBBU1NFUlQo
b3duZXIgIT0gc2NyYXRjaDEpOworICAgICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwor
ICAgICAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgICAgICAKKyNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIGVtaXRDb3VudChXcml0ZUJhcnJp
ZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICB9CisKICAg
ICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29k
ZUJsb2NrKik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTYxMjMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaDoxNTYxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdS
ZWdpc3RlclNldF9oCisjZGVmaW5lIERGR1JlZ2lzdGVyU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgi
CisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlJlZ2lzdGVycyA9CisgICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
Qnl0ZXNJblJlZ2lzdGVyU2V0ID0KKyAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+
IDM7CisKK3R5cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdp
c3RlclNldF07CisKK2NsYXNzIFJlZ2lzdGVyU2V0IHsKK3B1YmxpYzoKKyAgICBSZWdpc3RlclNl
dCgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdp
c3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKKyAgICB9CisgICAgCisg
ICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisg
ICAgICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBS
ZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorICAgIAorICAg
IHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisg
ICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dChHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVn
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
KTsKKyAgICAgICAgc2V0Qml0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihH
UFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAg
ICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIHRoZSBp
bmRleCd0aCBmcmVlIEdQUi4KKyAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9
IDApIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkp
ICYmICFpbmRleC0tKQorICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldChGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgc2V0Qml0KEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBz
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIGNsZWFyQml0KEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJl
ZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgKyBpbmRleCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZv
PgorICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHNl
dChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFn
ZXRCaXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXN1bHQr
KzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3Rh
bE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEJpdChpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkIHNldEJpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51
bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9zZXRb
aSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0Qml0
KHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVy
T2ZSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChp
ICYgNykpKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKSAtPiBz
byBpZiBERkcgaXMgZGlzYWJsZWQKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CisvLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1
dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKKy8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRv
IHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KKy8vIHRoZSBERkcg
aXMgZGlzYWJsZWQuCisKK3N0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUmVnaXN0ZXJTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4ICsyMywxOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBERkdSZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1JlZ2lzdGVy
U2V0X2gKKyNpZm5kZWYgUmVnaXN0ZXJTZXRfaAorI2RlZmluZSBSZWdpc3RlclNldF9oCiAKICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIEVOQUJMRShERkdfSklUKQorI2lmIEVOQUJM
RShKSVQpCiAKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2lu
Y2x1ZGUgPHd0Zi9CaXRtYXAuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
bmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUmVn
aXN0ZXJzID0KICAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOwpAQCAtMTk3LDExICsxOTcsMTEgQEAgcHJpdmF0ZToKICAgICBSZWdpc3Rl
clNldFBPRCBtX3NldDsKIH07CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKK30gLy8gbmFt
ZXNwYWNlIEpTQwogCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkgLT4gc28gaWYgREZHIGlzIGRp
c2FibGVkCisjZWxzZSAvLyBFTkFCTEUoSklUKSAtPiBzbyBpZiBKSVQgaXMgZGlzYWJsZWQKIAot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFtZXNwYWNlIEpTQyB7CiAKIC8vIERl
ZmluZSBSZWdpc3RlclNldFBPRCB0byBzb21ldGhpbmcgdGhhdCBpcyBhIFBPRCwgYnV0IGlzIG90
aGVyd2lzZSB1c2VsZXNzLAogLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhpcyB0
eXBlIGluIGNvZGUgdGhhdCBtYXkgYmUgY29tcGlsZWQgd2hlbgpAQCAtMjA5LDkgKzIwOSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogc3RydWN0IFJlZ2lzdGVyU2V0UE9E
IHsgfTsKIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworfSAvLyBuYW1lc3BhY2UgSlNDCiAK
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5k
aWYgLy8gREZHUmVnaXN0ZXJTZXRfaAorI2VuZGlmIC8vIFJlZ2lzdGVyU2V0X2gKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTYxMjQpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHA6MTU2MTI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1JlcGF0Y2gu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAi
REZHVGh1bmtzLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyB2
b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZWJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQoreworICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGws
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9u
UHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCit7CisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisKKyAgICAvLyBPbmx5IG9wdGltaXplIG9uY2Uh
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBz
bG93UGF0aEZ1bmN0aW9uKTsKKworICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0
aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCksIHN0cnVjdHVyZSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvU3RvcmFnZUxvYWQpLCBpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIGlmIChjb21wYWN0KQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZl
VG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyAgICBlbHNlCisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgaWYgKGNvbXBhY3QpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hl
ZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVs
YXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGlj
IHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgIEpTQ2VsbCogb2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKG9i
amVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisjaWYg
REZHX0VOQUJMRShKSVRfQVNTRVJUKQorICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29k
ZSwgdGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAor
ICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgorICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0LmJyZWFrcG9p
bnQoKTsKKyAgICAgICAgb2subGluaygmaml0KTsKKyNlbmRpZgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9i
amVjdCksIHNjcmF0Y2hHUFIpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCisgICAgICAgIGpp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpKTsKK30KKworc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAorICAgIEpTVmFsdWUgcHJvdG90eXBlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAg
ICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNT
RVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7CisgICAgCisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAorICAgICAgICBwcm90b3R5cGUuYXNDZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwKKyAgICAgICAgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSKTsKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKK3sKKyAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBSZXBhdGNoQnVm
ZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKAorICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNl
dCgKKyAgICAgICAgICAgICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDaGVja0ltbVRvQ2FsbCkpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0
UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2Vz
cywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMpCit7CisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAg
IHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgc3VjY2VzcyA9IHN0
dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhl
cmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNrLgorICAgICAg
ICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzID0gc3R1YkppdC5q
dW1wKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBw
YXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQoreworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3VjY2Vzc0xhYmVsKTsKKyAgICAgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbCwgc2xvd0Nhc2VCZWdpbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGRp
cmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVD
YXNlcywgc2xvd0Nhc2VCZWdpbik7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRj
aChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzKQoreworICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVy
YXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBz
dWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRT
dHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBH
UFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
dmFsdWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxp
ZEdQUlJlZykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVj
dWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworI2Vsc2UK
KyAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBzdHViSml0
LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
KyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAgICBK
U09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0
cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvT2JqZWN0LT5z
dHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAorICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9
IGl0LT5nZXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LmxvYWQ2NChwcm90b09iamVj
dC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSksIHJlc3VsdEdQUik7
CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1
bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgCisg
ICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3Jh
dGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgIAorICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIAor
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAor
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFjY2Vz
cyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0cmluZygq
ZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
Ly8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBy
ZWN1cnNpb24gaGVyZSBqdXN0CisgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhl
biBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
Uik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0
Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXIg
c3R1YkppdDsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1
bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxzZQor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAg
c3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0
Y2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOyAKKyAgICAgICAgc3R1YkppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgCisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBzdHViSml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3R1
YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubW92ZShK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDB4ZmZmZmZmZmYpLCByZXN1bHRUYWdHUFIpOyAvLyBK
U1ZhbHVlOjpJbnQzMlRhZworI2VuZGlmCisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCAmc3R1YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtSZXN0b3JlU2Ny
YXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgc3R1YkluZm8uc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLAorICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2Rl
QmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9u
ZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBh
dGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
OworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBsZW5ndGggYWNjZXNzIGZv
ciBTdHJpbmcuCisKKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1l
ZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc3RydWN0dXJl
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAg
ICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkgeworICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IG9w
dGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFz
ZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAK
KyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgCisg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAKKyAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBjYWNoZWQgPSB0
cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cit9
CisKK3N0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKKyAgICBWTSogdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LCBpbnQmIGxpc3RJbmRleCwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nhc2UpCit7Cisg
ICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgc3R1
YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDAsIGZh
bHNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0
aW5lKHNsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpLCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIHRydWUpOworICAgICAgICBsaXN0SW5kZXggPSAxOwor
ICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2No
YWluKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwor
ICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5n
ZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CisgICAg
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LCAxLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZv
LnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93Q2FzZSA9IENv
ZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXgg
LSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgfQorICAgIAorICAgIGlmIChs
aXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobGlzdEluZGV4IDwgUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcGF0
Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlz
dCk7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgaWYg
KHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LmRpZFNlbGZQYXRjaGluZykgeworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgfHwgIXNsb3QuaXNDYWNo
ZWFibGUoKQorICAgICAgICB8fCAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAg
CisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKCFz
dHViSW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCkgeworICAgICAgICAgICAgLy8gV2Ug
Y2Fubm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5v
dCBmbHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKKyAgICAgICAg
ICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxz
LCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCisg
ICAgICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9uJ3QgZG8gbm9u
LVZhbHVlIGNhY2hpbmcuCisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIAorICAgICAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dDsKKyAgICAgICAgaW50IGxpc3RJbmRleDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2U7CisKKyAgICAgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBz
bG93Q2FzZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBz
dHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOworICAgICAgICAKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFn
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIp
OworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVH
UFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjb2RlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3Qg
PSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIC8v
IDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCisgICAgICAgIC8vIDIp
IENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3YXMsIGNhbGwg
eWV0IGFub3RoZXIKKyAgICAgICAgLy8gICAgaGVscGVyLgorICAgICAgICAKKyAgICAgICAgYm9v
bCBpc0RpcmVjdCA9IGZhbHNlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRp
b25DYWxsOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKKyAgICAg
ICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdl
dHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNo
R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNh
Y2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNj
cmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG9wZXJhdGlv
bkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdldHRlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5j
dGlvbiA9IG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhp
cyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAg
ICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJl
IHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAorICAgICAgICAgICAgLy8gcmlnaHQgbm93IQorICAg
ICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvcGVyYXRp
b25DYWxsID0gc3R1YkppdC5jYWxsKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNl
CisgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJlc3VsdFRhZ0dQ
Uik7CisjZW5kaWYKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRFeGNlcHRpb25D
aGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pKTsKKyAg
ICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAgICAgICBzdHVi
Sml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoYmFzZUdQ
UiA9PSByZXN1bHRUYWdHUFIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNl
CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQs
IGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3Ry
dWN0LCBzbG93Q2FzZSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSkpOworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJJblN0dWIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAor
ICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5bW9ycGhp
YyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAg
ICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwK
KyAgICAgICAgICAgICAgICAqdm0sCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwg
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKKyAgICAgICAgCisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICAgICAg
CisgICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1
YlJvdXRpbmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSAtIDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6
ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBi
YXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAgaWYgKGNvdW50
ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlOworICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZt
LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRl
eCwgc2xvd0Nhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NT
dHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0
dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nhc2UsIHN0dWJSb3V0aW5lKTsKKyAgICAK
KyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVl
KTsKKyAgICAKKyAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIGJ1aWxkR2V0QnlJRExpc3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRCeUlETGlz
dChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlm
ICghZG9udENoYW5nZUNhbGwpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworfQorCitz
dGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgIH0KKyAgICBpZiAocHV0S2lu
ZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0OworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworfQorCitzdGF0aWMg
Vl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3Qp
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlz
dDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7CisgICAg
fQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RCdWlsZExpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1
YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25zdCBJZGVudGlm
aWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
YmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Cisj
ZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNl
dChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGNvbnN0IGJvb2wgd3Jp
dGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3QgYm9vbCB3cml0ZUJhcnJp
ZXJOZWVkZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJK
aXQ7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAod3JpdGVC
YXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJ
VDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUik7CisjZWxzZQorICAgICAgICBz
Y3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFs
dWVHUFIsIHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7CisgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFB0cigK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgCisjaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2Ny
YXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1
ZUdQUiwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIHNjcmF0Y2hHUFIyID0gU3BlY3VsYXRpdmVK
SVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3Jh
dGNoR1BSKTsKKyNlbmRpZgorICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSMik7CisgICAgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIHN0dWJKaXQu
cG9wKHNjcmF0Y2hHUFIyKTsKKyNlbmRpZgorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICBzdHViSml0
LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIGVsc2UgeworICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAg
ICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90
LmNhY2hlZE9mZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9
CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBiYWRTdHJ1Y3R1cmUubGlu
aygmc3R1YkppdCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICBm
YWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3VjY2VzcyA9
IHN0dWJKaXQuanVtcCgpOworICAgICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0RvbmUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Cisg
ICAgICAgICAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVC
KAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgUHV0QnlJZCByZXBsYWNlIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKKyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25z
dCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKKyAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVy
ZUxhYmVsLAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICAK
KyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLmRm
Zy51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKKyNlbmRpZgor
ICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgc3R1
YkppdCh2bSk7CisgICAgICAgICAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IGJhc2VH
UFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQUik7CisgICAgCisgICAgYm9v
bCBuZWVkU2Vjb25kU2NyYXRjaCA9IGZhbHNlOworICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9
IGZhbHNlOworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBuZWVkU2Vj
b25kU2NyYXRjaCA9IHRydWU7CisjZW5kaWYKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgbmVlZFNlY29u
ZFNjcmF0Y2ggPSB0cnVlOworICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAgaWYgKG5lZWRTZWNvbmRTY3JhdGNoKSB7
CisgICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChz
Y3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBz
Y3JhdGNoR1BSMSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQ
UlJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgaWYgKG5lZWRUaGlyZFNjcmF0Y2gp
IHsKKyAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKKyAgICAgICAgQVNTRVJU
KHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIy
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICAgICAgCisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KHN0dWJKaXQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
KyAgICAgICAgICAgIAorICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOworICAgIAorICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2Fz
ZXMsCisgICAgICAgIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIAorICAgIGlmIChwdXRLaW5k
ID09IE5vdERpcmVjdCkgeworICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBp
dCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgeworICAgICAgICAgICAgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQ
cm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJl
Q2FzZXMsCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOworICAgICAgICB9CisgICAgfQor
CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEFTU0VSVChuZWVkU2Vj
b25kU2NyYXRjaCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IEludmFsaWRHUFJSZWcpOwor
ICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1
cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKKyAgICBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNT
dG9yYWdlID0gZmFsc2U7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2l6
ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CisgICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5o
ZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRj
aEdQUjEpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICBzdHViSml0Lm5l
Z1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRF
bmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgQVNTRVJU
KG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxl
cjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNo
R1BSMSkpOworICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgIHN0dWJKaXQubmVn
UHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVu
ZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOworICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9
IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgZm9yIChw
dHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRT
aXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC0ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAg
ICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3R1
YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgIHNjcmF0Y2hHUFIxSGFz
U3RvcmFnZSA9IHRydWU7CisgICAgfQorCisgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgIHN0
dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQorICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9m
ZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkK
KyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFp
bHVyZTsKKyAgICAgICAgICAgIAorICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgeworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhz
dHViSml0KTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworCisgICAgICAgIGZh
aWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0
Lmp1bXAoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7CisgICAgCisgICAgaWYgKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKKyAgICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAg
ICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAgICBhbGxv
Y2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKHN0dWJKaXQsIHNjcmF0
Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7CisjZWxzZQorICAgICAgICBzdHViSml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIG9w
ZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVV
c2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2Ny
YXRjaEdQUjEpOworICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOwor
ICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICBlbHNl
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwor
ICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9u
Q2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7
CisgICAgfQorICAgIAorICAgIHN0dWJSb3V0aW5lID0KKyAgICAgICAgY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkRGRyBQdXRCeUlkICVzdHJhbnNpdGlvbiBz
dHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDogIiIsCisgICAgICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICB0b0NTdHJp
bmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAgICAg
KnZtLAorICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSk7Cit9CisKK3N0
YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNs
b3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxv
YywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBt
YWtlIGl0IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyA8IDYKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICAgICAgICAgJiYg
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRo
ZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAg
ICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVy
ZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFp
bihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAg
ICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksCisgICAgICAgICAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7
CisgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsK
KyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlk
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKwor
ICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
SlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgIAorICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
T3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkg
eworICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OworICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3Qu
dHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNl
IHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAv
LyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgICAgICAgICAgaWYgKEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQg
dGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAg
ICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90
eXBlQ2hhaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSdyZSBu
b3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEg
YWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCisgICAgICAg
ICAgICAgICAgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsaXN0LT5h
ZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKKyAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAg
ICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
CisgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBN
b2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHVi
SW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgICAgICAgICAgICAg
ZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBs
YWNlKAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBi
dWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29s
IGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30K
Kworc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAg
ICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVk
OworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCksIGlk
ZW50LCBvZmZzZXRJZ25vcmVkKTsKKyAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CisgICAgaW50IGxpc3RJbmRl
eDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5o
b3RQYXRoQmVnaW47CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKKyAgICAK
KyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKKyAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCgpOworICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCwgMCk7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9s
aXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxp
c3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3Qu
bGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW4oZXhlYyk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAK
KyAgICB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdp
c3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KHZtKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7Cisg
ICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIGN1
cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpLCArK2l0KSB7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNP
YmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAg
ICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBwcm90b3R5
cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywg
c3R1YkppdCwKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1
bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgICAgICAKKyAgICAgICAg
ZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNo
R1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisK
KyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNl
TGFiZWwpOworICAgICAgICAKKyAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9ERkdfU1RVQigKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcg
SW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAg
ICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICB9CisgICAgCisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0
W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUr
KzsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0
KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IAorICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSk7Cit9CisKK3ZvaWQgcmVwYXRjaEluKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBp
ZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1Yklu
Zm8pKQorICAgICAgICByZXR1cm47CisgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOworfQorCitzdGF0aWMg
dm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSogdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7
CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmly
dHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Cit9CisKK3ZvaWQgbGlua0Zv
cihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sq
IGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLnN0dWIpOworICAgIAorICAgIC8vIElmIHlvdSdyZSBiZWluZyBjYWxsLWxp
bmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlkbid0IGdldCBpbmxp
bmVkLgorICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+
bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZN
KiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxs
ZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5sYXN0U2Vl
bkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKKyAgICAKKyAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+
Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZl
ciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3ZvaWQgbGlua1Ns
b3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gY2FsbGVy
Q29kZUJsb2NrLT52bSgpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
YWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZt
LCBjYWxsTGlua0luZm8sIGtpbmQpOworfQorCit2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd1BhdGguYXBwZW5k
KAorICAgICAgICBzdHViSml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Tm9uWmVybywgY2FsbGVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNl
CisgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlz
IGEgY2VsbC4KKyNlbmRpZgorICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1
YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSkpOworICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4
ZWN1dGFibGUpKSk7CisgICAgCisgICAgc3R1YkppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksCisgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgc3R1YkppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpT
Y29wZUNoYWluKSkpOworI2Vsc2UKKyAgICBzdHViSml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICBzdHViSml0LnN0b3JlMzIoCisg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CisjZW5kaWYKKyAgICAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gc3R1YkppdC5u
ZWFyQ2FsbCgpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBzdHViSml0Lm1vdmUoY2Fs
bGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisjZW5kaWYKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgIAorICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAor
ICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAg
ICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAs
IHRhcmdldCAlcCAoJXMpIiwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVC
bG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5k
YXRhKCkpKSwKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAg
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAgIFJlcGF0Y2hCdWZm
ZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQ
YXRoQmVnaW4pLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0lu
Zm8sIENvZGVGb3JDYWxsKTsKKyAgICAKKyAgICBjYWxsTGlua0luZm8uc3R1YiA9IHN0dWJSb3V0
aW5lLnJlbGVhc2UoKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxlZUNvZGVCbG9jayB8fCBjYWxs
ZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCgmY2FsbExpbmtJbmZvKSk7
Cit9CisKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAg
ICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOworICAgIH0KKyAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNl
ZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRP
clN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKK30KKwordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfREZHT3BlcmF0aW9u
X0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJhdGlvbl9F
SkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9w
dGltaXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KQor
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOworICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0
ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgUmVwYXRj
aEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1
Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1Yklu
Zm8ucGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9p
bnRlcikpOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWws
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwordm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXIm
IHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCwyNCArMjQsMjMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiREZHUmVwYXRjaC5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKIAotI2lmIEVO
QUJMRShERkdfSklUKQorI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNs
dWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVk
ZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKK25hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxs
ZWVGdW5jdGlvbikKIHsKQEAgLTE0MTQsNiArMTQxMyw2IEBAIHZvaWQgcmVzZXRJbihSZXBhdGNo
QnVmZmVyJiByZXBhdGNoQnVmZmUKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwog
fQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTU2MTI0
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaDoxNTYxMjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUmVwYXRjaF9oCisjZGVmaW5lIERGR1JlcGF0Y2hfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Cit2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIGJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7
Cit2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2lu
ZCk7Cit2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVy
JiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7Cit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOwordm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZWxzZSAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBSZXBhdGNoQnVmZmVyOworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
OworCituYW1lc3BhY2UgREZHIHsKKworaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CitpbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk4gdm9pZCBy
ZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyBERkdSZXBhdGNoX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBA
CiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIEVOQUJMRShERkdfSklUKQorI2lm
IEVOQUJMRShKSVQpCiAKLSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRG
R09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKK25hbWVzcGFj
ZSBKU0MgewogCiB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwog
dm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtNDgsOSAr
NDgsOSBAQCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0CiB2b2lkIHJl
c2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVz
ZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorI2Vsc2UgLy8gRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKQEAgLTU5LDEzICs1OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJlcGF0Y2hCdWZm
ZXI7CiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLW5hbWVzcGFjZSBERkcgewotCiBpbmxp
bmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVy
JiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
IGlubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hC
dWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogaW5saW5lIE5PX1JFVFVSTiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVj
dHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKK30gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICNlbmRpZiAvLyBERkdSZXBhdGNo
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU2MTIzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOjE1NjEyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorI2Rl
ZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0
LmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVy
IGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgorCitjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgeworcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJl
Z2lzdGVycykKKyAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGxvY2soVCByZWcp
IHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYW5rSW5mbz4KKyAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9j
YXRlU2NyYXRjaCgpCisgICAgeworICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSBy
ZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICB0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQorICAgICAg
ICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKKyAgICAgICAgICAgICAgICAm
JiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgbV9zY3Jh
dGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHRoYXQgZmFp
bGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKKyAgICAgICAg
Ly8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAg
dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3Rl
cihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1f
c2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJl
Z2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVnOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBmYWlsZWQuCisgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7CisgICAg
fQorICAgIAorICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0
ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQorICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7
IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQorICAgIAorICAgIGJvb2wgZGlk
UmV1c2VSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VS
ZWdpc3RlcnM7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRS
ZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYg
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMu
Z2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7CisgICAgICAg
IGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAg
aml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJl
Z2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVzaXJlZFNj
cmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9m
U2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KKyAgICAKKyAgICB2b2lkIHByZXNl
cnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJS
ZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAg
ICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSks
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdl
dEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
KiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAg
ICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4o
Y291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxl
ciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2hHUFIpOworCisgICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KKyAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkp
IHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZERv
dWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAg
ICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNv
dW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRS
ZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0
ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOworICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTcgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yX2gKLSNkZWZpbmUgREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKKyNpZm5kZWYgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKKyNkZWZpbmUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
X2gKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaWYgRU5BQkxFKERGR19KSVQpCisj
aWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFt
ZXNwYWNlIEpTQyB7CiAKIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBsb3ctbGV2ZWwgcmVnaXN0
ZXIgYWxsb2NhdG9yIGZvciB1c2UgaW4gc3R1YnMuCiAKQEAgLTE5NCw5ICsxOTQsOSBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKIH07CiAKLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKK30gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2VuZGlmIC8vIERGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcl9oCisjZW5kaWYgLy8gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2
aXNpb24gMTU2MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMzMgKzM4LDIzNiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VGb3Io
Vk0qIHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQoraW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKIHsKLSAgICBqaXQu
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7Ci0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEpTU3RhY2s6OlNjb3BlQ2hhaW4sIEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QyKTsKLSAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVy
ZmFjZUpJVDo6cmVnVDIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0
aWFsaXplIFJldHVyblBDIGFuZCBDb2RlQmxvY2ssIGxpa2UgYSBKUyBmdW5jdGlvbiB3b3VsZC4K
LSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMyk7Ci0gICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6
cmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKLSAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2Fs
bEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0KLSAgICBqaXQuc3RvcmVQdHIo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0g
ICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIEpTSW50ZXJmYWNlSklUOjpD
YWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gaml0LmNhbGwoKTsKLSAgICBqaXQuZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0LnJldCgpOwotICAgIAotICAgIHJl
dHVybiBjYWxsTm90SlNGdW5jdGlvbjsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGlzTm9uWmVybyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
Tm9uWmVybywgcG9pbnRlckdQUik7CisgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICBpc05vblpl
cm8ubGluaygmaml0KTsKKyAgICBqaXQucHVzaChwb2ludGVyR1BSKTsKKyAgICBqaXQubG9hZDgo
cG9pbnRlckdQUiwgcG9pbnRlckdQUik7CisgICAgaml0LnBvcChwb2ludGVyR1BSKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGppdCk7CisgICAgVU5VU0VEX1BBUkFNKHBvaW50ZXJHUFIpOwor
I2VuZGlmCiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmVyYXRv
cihWTSogdm0sIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9u
LCBjb25zdCBjaGFyKiBuYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgSlNJbnRlcmZhY2VKSVQg
aml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcExpc3Qgc2xvd0Nhc2U7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhl
cmUgaWYgdGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAg
ICAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0
aW9uIGluc3RlYWQuIFdlIHdpbGwKKyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5k
ZXggaW4gdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUg
dGhhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2lu
dCwgc28gd2UKKyAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxv
b3IsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgLy8gRmluYWxseSBub3RlIHRo
YXQgdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIgcG9pbnRzIGF0IHRoZSBjYWxsZWUgZnJhbWUsIHNv
CisgICAgLy8gd2UgbmVlZCB0byBwb3AgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5s
b2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCisgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6cmVnVDAp
KTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RUeXBlKEpTSW50ZXJmYWNl
SklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkpOwotI2Vs
c2UgLy8gVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKEpT
SW50ZXJmYWNlSklUOjpOb3RFcXVhbCwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTSW50ZXJm
YWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQotCi0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVu
Y3Rpb24gY2FsbC4KLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0lu
dGVyZmFjZUpJVDo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRl
cihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOworICAgIGppdC5w
ZWVrNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FS
R1NfSU5ERVgpOworI2Vsc2UKKyAgICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
Uik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIGppdC5qdW1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
ICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9
CiAKLSAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxpbmtp
bmcgYW5kIGV4Y2VwdGlvbnMuCi0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7CitzdGF0aWMgdm9p
ZCBzbG93UGF0aEZvcigKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBQX0pJVE9wZXJh
dGlvbl9FIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAg
IEdQUkluZm86Om5vbkFyZ0dQUjIsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7
CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENh
bGxGcmFtZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQucG9rZTY0KEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbHNl
CisgICAgaml0LnBva2UoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFD
S0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCisgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0
YXRlKCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAKKyAgICAvLyBUaGlzIHNsb3cgY2Fs
bCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAv
LyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1bmsuCisgICAgLy8gMikgSG9zdCBjYWxsIHJldHVy
biB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCisgICAgLy8gMykgVGhlIGZ1bmN0aW9uIHRvIGNhbGwu
CisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSwKKyAg
ICAgICAgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQ
dHIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
ICogSlNTdGFjazo6UmV0dXJuUEMpKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwor
ICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cit9CisKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBp
cyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKKyAg
ICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBt
YWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKKyAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxh
enkgY29tcGlsYXRpb24gaWYgbmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNhbGxlZQorICAgIC8v
IHRvIGJlIGluIG5vbkFyZ0dQUjAvbm9uQXJnR1BSMSAocGF5bG9hZC90YWcpLCB0aGUgY2FsbCBm
cmFtZSB0byBoYXZlIGFscmVhZHkKKyAgICAvLyBiZWVuIGFkanVzdGVkLCBub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIgaG9sZHMgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGluZGV4LAorICAgIC8vIGFu
ZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLiBXZSB1c2UgSklU
U3RhY2tGcmFtZTo6YXJncworICAgIC8vIHRvIHNhdmUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFj
cm9zcyBjYWxscy4KICAgICAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxG
cmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0gICAgaml0LnJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxMYXp5TGluayA9IGpp
dC5jYWxsKCk7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEpTSW50
ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93Q2FzZS5saW5rKCZqaXQp
OwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVT
bG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENv
ZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsK
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGluaywgbGF6eUxpbmspOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbE5vdEpTRnVuY3Rpb24sIG5vdEpTRnVuY3Rpb24pOwotICAg
IAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImxpbmsgJXMgdHJhbXBv
bGluZSIsIG5hbWUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgcGF0Y2hC
dWZmZXIsCisgICAgICAgICgiTGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVG
b3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRv
cih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOworICAgIHJldHVybiBsaW5rRm9yVGh1bmtH
ZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5l
cmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9u
UHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CisgICAg
cmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQor
Ly8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5j
ZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCisvLyBvYmplY3QgY29uc3RydWN0aW9uIHRo
ZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1
cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2xvc3Vy
ZUNhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNsb3N1cmUg
Y2FsbCIpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIHNsb3dQYXRoRm9y
KGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgCisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRo
dW5rIikpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHZW5l
cmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0
aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBKU0ludGVyZmFjZUpJ
VCBqaXQodm0pOwotICAgIAotICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wTGlzdCBzbG93Q2FzZTsK
LQotI2lmIFVTRShKU1ZBTFVFNjQpICAgIAotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1
bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6cmVnVDApKTsKLSNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpCi0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihKU0ludGVyZmFjZUpJVDo6
Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJVDo6cmVn
VDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKKyAgICAvLyBUaGUg
cmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4g
V2Ugd2lsbCBoZW5jZQorICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0
dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysr
IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIEpJVCBvcGVyYXRpb24uCiAKLSAgICAv
LyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxs
LgotICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklU
OjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJm
YWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICBqaXQubG9hZFB0cihK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKLSAgICBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBoYXNDb2RlQmxvY2sxID0gaml0LmJyYW5jaDMyKEpTSW50ZXJmYWNl
SklUOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJm
YWNlSklUOjpyZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNG
b3Ioa2luZCkpLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICBqaXQucHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAg
aml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOwotICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBKU0lu
dGVyZmFjZUpJVDo6Q2FsbCBjYWxsQ29tcGlsZSA9IGppdC5jYWxsKCk7Ci0gICAgaml0LnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAg
aml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdU
Mik7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGhhc0NvZGVCbG9jazEubGluaygmaml0KTsKLSAgICBq
aXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIs
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2lu
ZCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBK
U0ludGVyZmFjZUpJVDo6SnVtcCBvayA9IGppdC5icmFuY2hUZXN0UHRyKEpTSW50ZXJmYWNlSklU
OjpOb25aZXJvLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwotICAgIGppdC5icmVha3BvaW50KCk7
Ci0gICAgb2subGluaygmaml0KTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBzdG9y
eSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tzLiBJbiBtYW55IGNhc2VzLAorICAgIC8vIHRo
ZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmlu
aXRlbHkgYSBmdW5jdGlvbi4KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNsb3dDYXNl
LmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7CisjZWxzZQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6bm9uQXJnR1BS
MSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CisjZW5kaWYKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86Om5v
bkFyZ0dQUjIpOworICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFB0cigK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5j
dGlvbjo6aW5mbygpKSkpOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1
bmN0aW9uLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkpLAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQo
CisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1Ro
YW4sCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
R1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVy
c0ZvcihraW5kKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkp
OworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5k
IHdlJ3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBmYXN0CisgICAgLy8gY2FsbC4KKyAgICAKKyAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQuc3RvcmU2NCgK
KyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2Nv
cGVDaGFpbikpOworI2Vsc2UKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIEdQUkluZm86Om5v
bkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKworICAgICAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOworICAgIGppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiAr
CisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKICNlbmRpZgotICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CiAgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFy
aXR5Q2hlY2tGb3Ioa2luZCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAg
Ly8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgor
ICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQu
anVtcChHUFJJbmZvOjpyZWdUMCk7CisKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpT
SW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZv
cih2bSwgaml0KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlLCBjb21w
aWxlKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0
aW9uKTsKKyAgICAvLyBIZXJlIHdlIGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0
aGUgZnVsbCBzbG93IHBhdGguCisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdCk7CiAgICAgCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
dmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0
aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY2Fs
bF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJj
YWxsIiwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JHZW5l
cmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0IiwgQ29k
ZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5n
dGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTU2MTIzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTEgKzMxLDE2IEBACiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmly
dHVhbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29u
c3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212255</attachid>
            <date>2013-09-20 23:08:38 -0700</date>
            <delta_ts>2013-09-20 23:08:38 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>410833</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDU3ICsyMjMs
MjUgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbjsKIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIGludDhf
dCByZWdpc3RlcnNGbHVzaGVkOwotICAgICAgICAgICAgaW50OF90IGJhc2VHUFI7CisgICAgc3Ry
dWN0IHsKKyAgICAgICAgaW50OF90IHJlZ2lzdGVyc0ZsdXNoZWQ7CisgICAgICAgIGludDhfdCBi
YXNlR1BSOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBpbnQ4X3QgdmFsdWVU
YWdHUFI7Ci0jZW5kaWYKLSAgICAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAg
IERGRzo6UmVnaXN0ZXJTZXRQT0QgdXNlZFJlZ2lzdGVyczsKLSAgICAgICAgICAgIGludDMyX3Qg
ZGVsdGFDYWxsVG9Eb25lOwotICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0b3JhZ2VM
b2FkOwotICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwotICAgICAg
ICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOwotICAgICAgICAgICAgaW50MzJfdCBk
ZWx0YUNoZWNrSW1tVG9DYWxsOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBpbnQz
Ml90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxzZQotICAgICAgICAgICAgaW50MzJfdCBk
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOwotICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZTsKLSNlbmRpZgotICAgICAgICB9IGRmZzsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgICAgICAgICBpbnQxNl90IHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICAgICAgICAg
ICAgICAgICAgaW50MTZfdCBzdHJ1Y3R1cmVDaGVjazsKLSAgICAgICAgICAgICAgICAgICAgaW50
MTZfdCBwcm9wZXJ0eVN0b3JhZ2VMb2FkOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICAgICAgICAgIGludDE2X3QgZGlzcGxhY2VtZW50TGFiZWw7Ci0jZWxzZQotICAgICAgICAgICAg
ICAgICAgICBpbnQxNl90IGRpc3BsYWNlbWVudExhYmVsMTsKLSAgICAgICAgICAgICAgICAgICAg
aW50MTZfdCBkaXNwbGFjZW1lbnRMYWJlbDI7CisgICAgICAgIGludDhfdCB2YWx1ZVRhZ0dQUjsK
ICNlbmRpZgotICAgICAgICAgICAgICAgICAgICBpbnQxNl90IHB1dFJlc3VsdDsKLSAgICAgICAg
ICAgICAgICAgICAgaW50MTZfdCBjb2xkUGF0aEJlZ2luOwotICAgICAgICAgICAgICAgIH0gZ2V0
OwotICAgICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgICAgIGludDE2X3Qg
c3RydWN0dXJlVG9Db21wYXJlOwotICAgICAgICAgICAgICAgICAgICBpbnQxNl90IHByb3BlcnR5
U3RvcmFnZUxvYWQ7CisgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKKyAgICAgICAgREZHOjpSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsK
KyAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0b3JhZ2VMb2FkOworICAgICAgICBpbnQzMl90
IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CisgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TbG93
Q2FzZTsKKyAgICAgICAgaW50MzJfdCBkZWx0YUNoZWNrSW1tVG9DYWxsOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIGludDE2X3QgZGlzcGxhY2VtZW50TGFiZWw7Cisg
ICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKICNlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGludDE2X3QgZGlzcGxhY2VtZW50TGFiZWwxOwotICAgICAgICAgICAgICAgICAg
ICBpbnQxNl90IGRpc3BsYWNlbWVudExhYmVsMjsKKyAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlOworICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgfSBwdXQ7Ci0gICAgICAgICAgICB9IHU7
Ci0gICAgICAgICAgICBpbnQxNl90IG1ldGhvZENoZWNrUHJvdG9PYmo7Ci0gICAgICAgICAgICBp
bnQxNl90IG1ldGhvZENoZWNrUHJvdG9TdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgICAgICAgICBp
bnQxNl90IG1ldGhvZENoZWNrUHV0RnVuY3Rpb247Ci0gICAgICAgIH0gYmFzZWxpbmU7CiAgICAg
fSBwYXRjaDsKIAogICAgIHVuaW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCiAj
aW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU05h
bWVTY29wZS5oIgpAQCAtNTcsMjgzICs1OCw2IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaWYg
Q1BVKE1JUFMpCi0jaWYgV1RGX01JUFNfUElDCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDko
ZnVuY3Rpb24pIFwKLSAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgIi5j
cGxvYWQgJDI1IiAiXG4iIFwKLSAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCi0gICAgICAg
ICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCi0jZWxzZQotI2RlZmlu
ZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCi0jZW5kaWYKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQp
Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9u
LCByZWdpc3RlcikgXAotICAgIGFzbSggXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92ICglcnNwKSwgJSIg
U1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQotCi0jZWxpZiBDT01QSUxF
UihHQ0MpICYmIENQVShYODYpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJc
biIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAotICAgICAgICAibW92ICglZXNwKSwgJWVheFxuIiBcCi0gICAgICAgICJtb3Yg
JWVheCwgIiBTVFJJTkdJWkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwKLSAgICAgICAgImptcCAiIExP
Q0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgpCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24p
ICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDE2KQotI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyMCkKLSNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjQpCi0KLSNlbGlm
IENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAg
Ii50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxu
IiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19Q
QVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJc
biIgXAotICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBc
Ci0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1i
X2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAg
ICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIg
IlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEg
NjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3Qg
YmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBB
cyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxv
Y2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFC
SSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1Nf
RUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5f
QUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJ
T05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJ
TlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgot
I2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxp
Z24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIg
XAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwK
LSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9O
X1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikg
XAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBc
Ci0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1i
X2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVS
Tl9BRERSRVNTX0VKQ0kgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVS
KEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElP
TihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAg
ICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShm
dW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBh
c20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElO
TElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAg
KTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVn
ZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBl
dmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwg
cmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRo
ZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFS
TSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIs
IFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJ
ICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVU
VVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9T
VE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikg
XAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FE
RFJFU1NfRUpJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikg
IldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAot
ICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJN
X0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJc
biIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIg
XAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQot
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIg
XAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNU
SU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAibW92ZSAk
YTEsICRyYSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
V2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAg
ICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgIm1vdmUgJGEzLCAkcmEiICJcbiIgXAotICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkkoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBc
Ci0gICAgICAgICJzdyAkcmEsIDIwKCRzcCkiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIg
XAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNU
SU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAic3cgJHJh
LCAyNCgkc3ApIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24p
ICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0ND
KSAmJiBDUFUoU0g0KQotCi0jZGVmaW5lIFNINF9TQ1JBVENIX1JFR0lTVEVSICJyMTEiCi0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwK
LSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0g
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCBy
NSIgIlxuIiBcCi0gICAgICAgICJicmEgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRo
UmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAgICk7Ci0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIs
IHI3IiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJc
biIgXAotICAgICAgICAiYnJhZiAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAg
ICAibm9wIiAiXG4iIFwKLSAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAgICAgICIy
OiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFi
IiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0LCBzY3JhdGNoKSBcCi0gICAgYXNtKCBcCi0gICAgIi50
ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgIiBzY3JhdGNoICJcbiIgXAotICAg
ICAgICAibW92LmwgIiBzY3JhdGNoICIsIEAoIiBTVFJJTkdJWkUob2Zmc2V0KSAiLCByMTUpIiAi
XG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJicmFm
ICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgIm5vcCIgIlxuIiBcCi0gICAgICAgICIxOiAuYmFs
aWduIDQiICJcbiIgXAotICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rp
b24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJ
U1RFUikKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0ko
ZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
NCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLXZvaWQqIERGR19PUEVS
QVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJl
c3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01f
QVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVu
Y3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJO
QUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
Ci0KLSNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikgXAotdm9pZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVy
bkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKLQogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTM1Nyw3
ICs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIH0KIAog
dGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDY2LDcgKzE5
MCw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCiAKIGV4dGVybiAiQyIg
ewogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDc0LDcgKzE5OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2Rl
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00ODIsNyAr
MjA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25UbwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4
ZWMsIFN0cmljdE1vZGUpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3Qg
aW5saW5lQ2FwYWNpdHkpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhp
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVD
YXBhY2l0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ5NSw3ICsyMTksNyBAQCBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5hbGxvY2F0aW9u
UHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgpKTsKIH0KIAotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtNTAzLDcgKzIyNyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3QKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRk
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTUxNCw3ICsyMzgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0FkZChleGVjLCBvcDEsIG9wMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTQ3LDcgKzI3MSw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01NzgsNyArMzAyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFz
ZVZhbHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTYx
OCwxNDAgKzM0MiwxNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2Vs
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRl
eCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
QXJyYXlJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1
cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMsIGJhc2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQo
ZXhlYywgYmFzZSwgaW5kZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlKTsKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwotfQotCi1KX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxk
TGlzdCk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWls
ZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8o
cmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Ci19Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0K
LSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKLSAgICAgICAgaWYg
KHN0dWJJbmZvLnNlZW4pCi0gICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
dWJJbmZvLnNlZW4gPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKLX0KLQotSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KG9wZXJhdGlvbkluT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgewotICAg
ICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9y
KGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsKLSAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlKTsKLSAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJU
KGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgaWYgKHN0dWJJ
bmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBz
bG90LCBzdHViSW5mbyk7Ci0gICAgZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsK
LSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0g
ICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAg
IElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQotewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1Bh
dGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOwotfQotCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0
aW9uLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRp
ZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1
bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVyU2V0dGVyKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRl
cikpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NTksNyArMzYw
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogICAgIG9wZXJh
dGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9w
ZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtNzY3LDcgKzM2OCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbE5vblMKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBl
bmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtNzc1LDcgKzM3Niw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFs
dWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzgzLDcgKzM4NCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNl
PihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03OTgsNyArMzk5LDcgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90
KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MTMsNyArNDE0LDcgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBz
bG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGlu
dDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC04MzAsNyArNDMxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERv
dWJsZUJ5VgogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCksIGpzVmFsdWUsIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg0Nyw3ICs0NDgsNyBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTg1Niw3ICs0NTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hE
b3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0
YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtODY1LDcgKzQ2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgo
KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NzMsNyArNDc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXkt
PnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BB
bmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC04ODMsNyArNDg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVj
KSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtODk2LDcgKzQ5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KGJhc2Up
LT5leGVjKGV4ZWMsIGlucHV0KSk7CiB9CiAgICAgICAgIAotc2l6ZV90IERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxs
KiBhcmd1bWVudCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CkBAIC05MTEsMjM3ICs1MTIsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBUZXN0CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMs
IGlucHV0KTsKIH0KICAgICAgICAgCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFz
ZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgp
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJh
c2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2Rl
QmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVs
c2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
LQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBh
dGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGly
ZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
Ci0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09i
amVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50
LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFz
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1
YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAg
Ci0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2Vl
bikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19
Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAot
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwot
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsK
LSAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAg
Ci0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQot
Ci1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsK
LSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJ
ZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7
Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
QVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExp
c3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xv
dCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLX0K
LQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE0OSw3ICs1MjAsNyBAQCBzaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7
CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTU3LDcgKzUyOCw3IEBAIHNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXMKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1
ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMikpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY1LDcgKzUzNiw3
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4g
anNMZXNzPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC0xMTczLDcgKzU0NCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVH
cmUKICAgICByZXR1cm4ganNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0xMTgyLDkgKzU1Myw5IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVFcSgKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVm
dCwgSlNDZWxsKiByaWdodCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJp
Z2h0KQogI2Vsc2UKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdF
cShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK3NpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbmRpZgogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwpAQCAtMTE5OCw3ICs1NjksNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyCiAjZW5kaWYKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTEyMTIsNyArNTgzLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4
ZWMsIG9wMSwgb3AyKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjIzLDE5
MyArNTk0LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAg
IHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzcmMxLCBzcmMyKTsKIH0KIAotc3Rh
dGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBj
YWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotCi0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7Ci0gICAgZXhlY0Nh
bGxlZS0+c2V0Q29kZUJsb2NrKDApOwotCi0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsK
LSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxs
VHlwZSAhPSBDYWxsVHlwZUpTKTsKLSAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlY0NhbGxlZSk7Ci0gICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3Qo
Y2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICAg
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAg
IEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwotICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkp
OwotICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAKLSAgICBDb25zdHJ1Y3RE
YXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0
Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwotICAgIAotICAgIEFTU0VSVChj
b25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAgCi0gICAgaWYgKGNvbnN0cnVj
dFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkp
OwotICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
Y29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUp
KTsKLSAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLX0KLQotaW5saW5lIGNo
YXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKCFjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhv
c3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKLQotICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwot
ICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7Ci0gICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLQotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JD
YWxsKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7
Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwot
ICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAg
ICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0
eUNoZWNrRm9yKGtpbmQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2Fs
bCgpOwotICAgIH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYg
KCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4o
KTsKLSAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewot
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSkKLXsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsK
LX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZy
YW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVj
Q2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRK
U0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5j
dGlvbkNlbGwpKQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxl
SG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwotICAgIAotICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2Vk
KCkpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFi
bGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkp
KSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
Q2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewot
ICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7
Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxG
b3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17
Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNl
bGxJZ25vcmVkKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNl
bGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU0Z1bmN0
aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpOwotICAgIAotICAgIGlm
ICghb2xkQ2FsbGVlCi0gICAgICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVl
LT5zdHJ1Y3R1cmUoKQotICAgICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxs
ZWUtPmV4ZWN1dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VS
VChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9u
KCkpCi0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9j
ayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNv
ZGVCbG9ja0ZvckNhbGwoKTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbGlu
a0Nsb3N1cmVDYWxsKAotICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9j
aywKLSAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNv
ZGVQdHIpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFs
Rm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCk7Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVy
blBDKCkpOwotCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxs
ZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xv
d0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3Io
ZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVy
biB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDE3LDcgKzYwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJh
eVN0cnVjdHVyZSwgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MTQyNSw3ICs2MTAsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4
CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUlu
ZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIp
LCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQzMyw3ICs2MTgsNyBA
QCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyCiAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsK
IH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtMTQ0NCwxMjIgKzYyOSwxMjIgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheVdpdAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNy
ZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFy
cmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
YXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2
ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFu
dEJ1ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0lu
dDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0
aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhP
bmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdp
dGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoT25lQXJndW1lbnQ8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdp
dGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNp
emUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDMyQXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJh
eVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQo
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1l
bnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50PEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQog
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNp
emUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0
aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJf
dCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xh
bXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1
ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRo
U2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6
ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxl
bmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDE2QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBl
ZEFycmF5V2l0aFNpemU8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFy
Z3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhP
bmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlX
aXRoT25lQXJndW1lbnQ8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFs
dWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdp
dGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRo
U2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90
IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQzMkFy
cmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQz
MkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVy
biBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwg
bGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJy
YXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
NjRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5l
d1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIHJlZ2V4cFB0cikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1NzIsNyArNzU3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVj
dHVyZSgpLCByZWdleHApKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTU4MSw3ICs3NjYsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlQWN0CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CkBAIC0xNTkyLDcgKzc3Nyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVBcmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKQEAgLTE2MDQsNyArNzg5LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBh
cmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3Vt
ZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNv
ZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewpA
QCAtMTYxNCwxNCArNzk5LDE0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2Zm
QXJndW0KICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhl
Yyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3Vt
ZW50cygKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50
cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBh
Y3RpdmF0aW9uQ2VsbCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChhY3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRpb25DZWxsKTsgLy8gQ3VycmVu
dGx5LCB3ZSBkb24ndCBpbmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0aXZhdGlvbnMuCiAgICAganND
YXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMsIGlubGluZUNhbGxG
cmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJn
dW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKQEAgLTE2MzMsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVj
LCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1Jl
Z2lzdGVyLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNS
ZWdpc3RlciwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2NDgsNyArODMz
LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50
QnlWYWwoCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRB
cmd1bWVudEJ5VmFsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdp
c3RlciwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIGludDMyX3QgaW5kZXgpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2NjYsNyArODUxLDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0
YWJsZSkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlv
bkV4ZWN1dGFibGU6OmluZm8oKSkpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjc0
LDcgKzg1OSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAg
ICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5j
dGlvbkV4ZWN1dGFibGUpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJp
dHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwpAQCAtMTY4Miw3ICs4NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
Yywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwg
ZXhlYy0+c2NvcGUoKSkpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1
dGFibGVBc0NlbGwpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25F
eHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0Nl
bGwpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoRnVu
Y3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKIApAQCAtMTY5NCwyMiArODc5LDIyIEBAIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhlYy0+c2NvcGUoKSk7CiB9CiAK
LXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVy
biBqc0lzT2JqZWN0VHlwZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZTo6ZGVjb2Rl
KHZhbHVlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFsdWUpCiB7CiAgICAgcmV0dXJu
IGpzVHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMsIEpTVmFsdWUodmFsdWUpKS5hc0NlbGwoKTsKIH0K
IAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNo
UHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAt
MTcyMCw3ICs5MDUsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
CiAgICAgYmFzZS0+cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzI5LDcgKzkxNCw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5
OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHks
IGZhbHNlLCAwKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3MzgsNyArOTIzLDcg
QEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRv
SGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb2JqZWN0KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzQ5LDcg
KzkzNCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0
eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3NTksNyArOTQ0LDcgQEAgY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihyZXN1bHQpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUlu
dDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKQEAgLTE3NzAsNyArOTU1LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVJbnQzMgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09i
amVjdChjZWxsKS0+ZW5zdXJlSW50MzIodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzgxLDcgKzk2Niw3IEBA
IGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmwKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZURvdWJsZSh2bSkuZGF0
YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3Vz
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwpAQCAtMTc5Miw3ICs5NzcsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUNvbnRpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFz
T2JqZWN0KGNlbGwpLT5lbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJl
Q29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKQEAgLTE4MDMsNyArOTg4LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdl
RW5zdXJlQwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxs
KS0+cmFnZUVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODE0
LDcgKzk5OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUFy
cmF5U3RvcmFnZSh2bSkpOwogfQogCi1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKK1N0cmluZ0lt
cGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgyMiw3ICsxMDA3LDcgQEAg
U3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbAogICAgIHJldHVybiBzdHJp
bmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KIAotSlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFy
YWN0ZXIpCitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKQEAgLTE4MzAsNyArMTAxNSw3IEBAIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blNpbmdsZUMKICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgc3RhdGlj
X2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODM4LDcgKzEwMjMsNyBAQCBKU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nCiAgICAgcmV0dXJuIFN0cmluZ09i
amVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAotSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg0Niw3
ICsxMDMxLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nTwogICAg
IHJldHVybiBKU1ZhbHVlKGNlbGwpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg1
NCw3ICsxMDM5LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKAog
ICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1K
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJp
bmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg2Miw3ICsxMDQ3LDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogICAgIHJldHVybiBKU1JvcGVTdHJp
bmc6OmNyZWF0ZSh2bSwgbGVmdCwgcmlnaHQpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5n
KiBiLCBKU1N0cmluZyogYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9w
ZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg3MCw3ICsxMDU1LDcgQEAgSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0
ZSh2bSwgYSwgYiwgYyk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3
aXRjaEltbVRhcmdldEZvckRvdWJsZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmlu
ZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTE4ODQsNyArMTA2OSw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y2hhcio+KHRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
Yywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUlu
ZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg5Miw1MCArMTA3
NywxOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgp
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKK2RvdWJsZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJu
IGZtb2QoYSwgYik7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdG
cm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQz
Ml90IG9wMSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gSlNDOjpzdHJpbmdGcm9tQ2hh
ckNvZGUoZXhlYywgb3AxKTsKIH0KIAotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBs
b29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgY2FsbEluZGV4
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgCi0gICAgdW5z
aWduZWQgdlBDSW5kZXggPSBleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxs
QXRJbmRleChjYWxsSW5kZXgpOwotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7Ci0gICAgQVNTRVJU
KGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKLSAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFu
ZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKLX0KLQotREZHSGFuZGxlckVu
Y29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQotewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
Ci0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgIEFT
U0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
c3R1YkluZm8tPmNvZGVPcmlnaW47Ci0gICAgd2hpbGUgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcjsKLSAgICAKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5k
KHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAg
ICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBkZmdIYW5kbGVyRW5j
b2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotfQotCi1zaXpl
X3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRK
U1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtMTk0NCw3ICsxMDk4LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04g
ZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRv
VUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1
ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk1
Miw3ICsxMTA2LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwog
ICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQor
dm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUo
RXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CkBAIC0xOTkwLDcgKzExNDQsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVi
dWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygiXG4iKTsKIH0KIAotZXh0ZXJuICJDIiB2
b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29k
ZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0
aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVm
ZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28g
d291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KQEAgLTIwMzQsNyArMTE4OCw3
IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW8KIH0KIAogI2lmIEVO
QUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMjA5Niw3ICsxMjUwLDcgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgICAgICBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgp
KTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCitjaGFyKiBK
SVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGlu
dDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKQEAgLTIyMTUsNyArMTM2OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
dHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwuIEN1
cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhlY1N0
YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKICAgICAKQEAgLTIyMzUsNyAr
MTM4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAogLy8g
RklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVn
cmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2
MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRM
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGVjU3RhdGUqIGNhbGxlckV4ZWMg
PSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMzcsMjg0ICszOCwxMjUgQEAgbmFtZXNwYWNlIERGRyB7CiAKIGV4dGVy
biAiQyIgewogCi0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKLSNkZWZpbmUgREZH
X09QRVJBVElPTiBDREVDTAotI2Vsc2UKLSNkZWZpbmUgREZHX09QRVJBVElPTgotI2VuZGlmCi0K
LS8vIFRoZXNlIHR5cGVkZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBj
YWxscyBvdXQgdG8gaGVscGVyIHJvdXRpbmVzOwotLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxp
bmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCi0vKgotICAgIEtl
eToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBvaW50ZXIgKHZvaWQqKQot
ICAgIEM6IEpTQ2VsbCoKLSAgICBBOiBKU0FycmF5KgotICAgIFM6IHNpemVfdAotICAgIFo6IGlu
dDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgotKi8KLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSop
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMy
X3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRp
b25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJh
eSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRp
b25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBp
bnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3Rh
dGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSos
IHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0
YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFt
ZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYg
SlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10
eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3Rh
dGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVS
QVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
OwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSWNmKShF
eGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFU
SU9OICgqQ19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5
cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpzc1N0KShFeGVj
U3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVS
QVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpT
U3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9u
X0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FT1opKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJB
VElPTiAoKkNfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBl
ZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUq
LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlv
bl9ERCkoZG91YmxlLCBkb3VibGUpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJBVElPTiAoKkRf
REZHT3BlcmF0aW9uX1paKShpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19P
UEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OwotdHlwZWRlZiBpbnQzMl90IERGR19PUEVSQVRJT04gKCpaX0RGR09wZXJhdGlvbl9EKShkb3Vi
bGUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VDQyko
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFU
SU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5
cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdf
T1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVk
ZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVu
Y29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZy
YW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQ0lj
ZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQg
REZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
aW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VD
QykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBK
U0NlbGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZH
T3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsK
LXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0
YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwotdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwg
SlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
SlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRl
Kiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5n
Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3QpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUp
OwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0UFMpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwotdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQz
Ml90LCBpbnQzMl90KTsKLXR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiAoKklfREZH
T3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTU3RyaW5n
KiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJf
dCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4
ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lO
VEVSTkFMOyAKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0
byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5l
Q2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3Ry
aWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1
ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5
SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJp
bmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJ
bihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVS
TkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhP
bmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNp
emUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJB
cnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5B
TDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJn
dW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9u
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGlu
ZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5k
ZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlLCBK
U0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgo
RXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lO
VEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUq
LCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3Qs
IHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdF
bXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRo
U2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRB
cnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZB
cnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJn
dW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFs
dWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJh
eSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3Ao
RXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFM
OwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qg
c3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVy
Lgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVf
dCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRF
Uk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwor
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5U
RVJOQUw7CiAjZWxzZQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFM
Oworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0
ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmCi1z
aXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVk
QXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJ
bmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGlu
ZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNr
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVz
c2lvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
LXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25J
c0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRv
R3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXpl
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMy
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0
YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29s
dmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci1KU1N0cmluZyogREZHX09QRVJBVElPTiBv
cGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci0KLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwg
SlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25U
b1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLUpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1KU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
SlNTdHJpbmcqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0
cmluZyopOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2Vs
bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5s
aW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkg
V1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJ
bmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9D
aGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4
cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5p
c2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJm
bHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3
U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJ
bnQzMihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4
ZWNTdGF0ZSosIEpTQ2VsbCopOworU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwor
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUz
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwg
SlNTdHJpbmcqKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogLy8gRklYTUU6IE1ha2UgY2FsbHMg
d29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCi0vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv
IGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGlj
aCBpcwotLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRv
IG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCi0KLS8vIEFjY29yZGluZyB0byBD
KysgcnVsZXMsIGEgdHlwZSB1c2VkIGZvciB0aGUgcmV0dXJuIHNpZ25hdHVyZSBvZiBmdW5jdGlv
biB3aXRoIEMgbGlua2FnZSAoaS5lLgotLy8gJ2V4dGVybiAiQyInKSBuZWVkcyB0byBiZSBQT0Q7
IGhlbmNlIHB1dHRpbmcgYW55IGNvbnN0cnVjdG9ycyBpbnRvIGl0IGNvdWxkIGNhdXNlIGVpdGhl
ciBjb21waWxlcgotLy8gd2FybmluZ3MsIG9yIHdvcnNlLCBhIGNoYW5nZSBpbiB0aGUgQUJJIHVz
ZWQgdG8gcmV0dXJuIHRoZXNlIHR5cGVzLgotc3RydWN0IERGR0hhbmRsZXIgewotICAgIHVuaW9u
IFVuaW9uIHsKLSAgICAgICAgc3RydWN0IFN0cnVjdCB7Ci0gICAgICAgICAgICBFeGVjU3RhdGUq
IGV4ZWM7Ci0gICAgICAgICAgICB2b2lkKiBoYW5kbGVyOwotICAgICAgICB9IHM7Ci0gICAgICAg
IHVpbnQ2NF90IGVuY29kZWQ7Ci0gICAgfSB1OwotfTsKLQotaW5saW5lIERGR0hhbmRsZXIgY3Jl
YXRlREZHSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAgREZH
SGFuZGxlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnUucy5leGVjID0gZXhlYzsKLSAgICByZXN1bHQu
dS5zLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNpZiBDUFUo
WDg2XzY0KQotdHlwZWRlZiBERkdIYW5kbGVyIERGR0hhbmRsZXJFbmNvZGVkOwotaW5saW5lIERG
R0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
aGFuZGxlcikKLXsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5kbGVyKTsK
LX0KLSNlbHNlCi10eXBlZGVmIHVpbnQ2NF90IERGR0hhbmRsZXJFbmNvZGVkOwotaW5saW5lIERG
R0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
aGFuZGxlcikKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoREZHSGFuZGxlcjo6VW5pb24p
ID09IHNpemVvZih1aW50NjRfdCksIERGR0hhbmRsZXJfVW5pb25faXNfNjRiaXQpOwotICAgIHJl
dHVybiBjcmVhdGVERkdIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsKLX0KLSNlbmRp
ZgotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1ERkdIYW5kbGVyRW5jb2RlZCBE
RkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlU3R1YkluZm8qKSBXVEZfSU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9wZXJhdGlvbnMgaW1w
bGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jvb2xlYW4gY29udmVy
c2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJucyBhbiBpbnQzMl90IHdp
dGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0ZW5kZWQgdG8gZmls
bCB0aGUgcmVnaXN0ZXIuCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRv
SW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0
SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiBk
ZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2
b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJp
bnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJO
QUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJs
b2NrKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXph
dGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
LXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSos
IGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFM
Owordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRl
KiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJO
QUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTU2
MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHUmVnaXN0ZXJTZXRfaAotI2RlZmluZSBERkdS
ZWdpc3RlclNldF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShE
RkdfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2luY2x1ZGUgIkdQUkluZm8uaCIKLSNp
bmNsdWRlIDx3dGYvQml0bWFwLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgPQotICAgIEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7Ci0K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldCA9Ci0gICAg
KHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAzOwotCi10eXBlZGVmIHVpbnQ4X3QgUmVn
aXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXRdOwotCi1jbGFzcyBSZWdpc3Rl
clNldCB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJTZXQoKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAg
ICBtX3NldFtpXSA9IDA7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0KGNvbnN0IFJlZ2lz
dGVyU2V0UE9EJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJl
ck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAgICAgICAgbV9zZXRbaV0gPSBvdGhl
cltpXTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgUmVnaXN0ZXJTZXRQT0QmIGFzUE9EKCkgY29u
c3QgeyByZXR1cm4gbV9zZXQ7IH0KLSAgICAKLSAgICB2b2lkIGNvcHlJbmZvKFJlZ2lzdGVyU2V0
UE9EJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJl
ck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAgICAgICAgb3RoZXJbaV0gPSBtX3Nl
dFtpXTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoR1BSUmVnIHJlZykKLSAgICB7Ci0gICAg
ICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaW5k
ZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHNldEJpdChpbmRleCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoR1BSUmVnIHJlZykKLSAgICB7Ci0gICAgICAg
IGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
Z2V0KEdQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUklu
Zm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0R1BSQnlJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIGdldEJpdChpbmRleCk7Ci0g
ICAgfQotICAgIAotICAgIC8vIFJldHVybiB0aGUgaW5kZXgndGggZnJlZSBHUFIuCi0gICAgR1BS
UmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAwKSBjb25zdAotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAg
ICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAmJiAhaW5kZXgtLSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gSW52YWxpZEdQUlJlZzsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoRlBSUmVnIHJl
ZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQ
UkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0RlBSQnlJbmRl
eCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzICsgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKEZQUlJlZyByZWcp
Ci0gICAgewotICAgICAgICBjbGVhckJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQ
UkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0KEZQUlJlZyBy
ZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4g
Z2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOwotICAgIH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB2b2lkIHNldEJ5SW5kZXgodW5z
aWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBzZXQoQmFua0luZm86OnRvUmVnaXN0ZXIoaW5k
ZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+Ci0gICAg
Ym9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdl
dChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25l
ZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRGUFJzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAg
ICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxOdW1iZXJPZlJlZ2lzdGVyczsgaS0tOykg
ewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRCaXQodW5zaWduZWQgaSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAg
IG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y2xlYXJCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1i
ZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kgPj4gM10gJj0gfigxIDw8IChpICYgNykp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEJpdCh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0
dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSk7Ci0gICAgfQotICAgIAotICAg
IFJlZ2lzdGVyU2V0UE9EIG1fc2V0OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwot
Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkgLT4gc28gaWYgREZHIGlzIGRpc2FibGVkCi0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gRGVmaW5lIFJlZ2lzdGVyU2V0UE9E
IHRvIHNvbWV0aGluZyB0aGF0IGlzIGEgUE9ELCBidXQgaXMgb3RoZXJ3aXNlIHVzZWxlc3MsCi0v
LyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0aGlzIHR5cGUgaW4gY29kZSB0aGF0IG1h
eSBiZSBjb21waWxlZCB3aGVuCi0vLyB0aGUgREZHIGlzIGRpc2FibGVkLgotCi1zdHJ1Y3QgUmVn
aXN0ZXJTZXRQT0QgeyB9OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1JlZ2lzdGVyU2V0X2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTYyMDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE0MTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
REZHUmVwYXRjaC5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIK
LSNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJSZXBhdGNoQnVmZmVy
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
LQotc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0gICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKLXsKLSAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLQotICAgIC8vIE9ubHkgb3B0
aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVy
ZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGlu
dHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJl
KTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNvbXBhY3QpCi0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwotICAgIGVsc2UKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwotI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBpZiAoY29tcGFjdCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVs
YXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLSNlbmRpZgot
fQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsK
LSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVy
ZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKLSNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0gICAgICAgIC8vIElmIHdlIGV4ZWN1
dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVj
dC4gQXNzZXJ0Ci0gICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgICAgICBq
aXQuYnJlYWtwb2ludCgpOwotICAgICAgICBvay5saW5rKCZqaXQpOwotI2VuZGlmCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgK
LSAgICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGpp
dCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNo
R1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAotICAgICAg
ICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotfQotCi1zdGF0aWMgdm9pZCByZXBsYWNlV2l0
aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQotewotICAgIGlmIChN
YWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2go
KSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgICAg
IFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bFB0ckF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAtKGludHB0cl90KXN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCh0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluaygKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
IHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1
cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJh
Y2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAg
ICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0
dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3Mg
PSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExp
bmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNz
TGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRv
UmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2Fz
ZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1
cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jl
c3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVy
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotc3RhdGlj
IHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291
bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2Nh
dGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJh
c2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNl
dChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc2NyYXRj
aEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQ
Uik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAg
ICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0
Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVh
ZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09i
amVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICBwcm90b09iamVjdCwgcHJv
dG9PYmplY3QtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICBjdXJy
U3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQob2Zmc2V0KSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0
KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOwotI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpKSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgfSBl
bHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRy
ZXNzKCksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVy
Zmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFp
bDsKLSAgICAKLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2so
KSk7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNs
b3dDYXNlTGFiZWwpOwotICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
REZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyBwcm90b3R5cGUg
Y2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8g
Y2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRl
ciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCi0KLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIAotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChz
dHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0g
SW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzY3JhdGNo
R1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVj
dFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0g
ICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgCi0gICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAotICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkpOwotICAg
ICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3R1
YkppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmZmZiksIHJlc3VsdFRh
Z0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCi0jZW5kaWYKLQotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJlc3RvcmVT
Y3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgbGlu
a1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1Yklu
Zm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBHZXRCeUlkIGFycmF5IGxlbmd0aCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmco
KmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIAotICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0
aCBhY2Nlc3MgZm9yIFN0cmluZy4KLQotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nl
c3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQotICAgICAgICAgICAgfHwgIU1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGln
bmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcGF0Y2hCeUlk
U2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAgICAgICBzdHViSW5m
by5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAv
LyBGSVhNRTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0dGVycwotICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVfdCBjb3VudCA9
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBz
bG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0g
SW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwotICAgIAot
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBib29s
IGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKLX0KLQotc3RhdGljIGJvb2wgZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAot
ICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAotICAgIENvZGVMb2NhdGlvbkxhYmVsJiBzbG93
Q2FzZSkKLXsKLSAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAK
LSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwot
ICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAo
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxm
TWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNl
bGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1ZSk7Ci0gICAgICAgIGxpc3RJ
bmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFzdHViSW5mby5zdHVi
Um91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8u
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xl
YXIoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QsIDEsIGZhbHNlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAgICB9IGVs
c2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlz
dEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7Ci0gICAgICAgIHNs
b3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0
W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChsaXN0SW5kZXggPCBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlf
aWRfc2VsZl9saXN0KTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCi0gICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywg
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKQotICAgICAgICB8fCAh
c2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAgIHx8ICFiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUoKTsKLSAgICAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAg
ICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkKSB7Ci0gICAgICAg
ICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0
ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFy
LAotICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxh
bnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hl
ZC4gVGh1cywKLSAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBk
b24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0OwotICAgICAgICBpbnQgbGlzdEluZGV4OwotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZTsKLQotICAgICAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBs
aXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7Ci0gICAgICAg
IAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJl
ZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52
YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVy
cykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQo
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3
cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgICAgICAK
LSAgICAgICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Igc3R1YnMgaXMgYXMgZm9sbG93czoK
LSAgICAgICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRoYXQgY2FsbHMgdGhlIGdldHRlci4KLSAg
ICAgICAgLy8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJl
IHdhcywgY2FsbCB5ZXQgYW5vdGhlcgotICAgICAgICAvLyAgICBoZWxwZXIuCi0gICAgICAgIAot
ICAgICAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJD
YWxsOwotICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BS
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0dGVyOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0
ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUK
LSAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhh
cHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgICAgICAgICAvLyByaWdo
dCBub3chCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5sb2NhdGlvbkFzUmF3Qml0cygpKSwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHJlc3VsdEdQUiwg
cmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZzdHVi
SW5mbykpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewotICAgICAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRH
UFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIGlzRGlyZWN0
ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCAmc3R1YkppdCwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rp
b24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckluU3R1Yik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQotICAgICAgICAgICAgY3JlYXRlSklUU3R1
YlJvdXRpbmUoCi0gICAgICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCi0gICAgICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlk
IHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgICAgICBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3Qp
OwotICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsaXN0SW5kZXggPCAo
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0gICAgfQotICAgIAotICAgIGlmIChi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQo
KTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNj
ZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAg
ICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKLSAgICAKLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRp
bmUpOwotICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhd
LnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1
Y3R1cmUsIHRydWUpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0SW5k
ZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci19Ci0KLXZvaWQgYnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWls
ZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
byk7Ci0gICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZCk7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkKLXsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBpZiAocHV0S2lu
ZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgfQotICAg
IGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci19
Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0
QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5k
KQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIGlmIChwdXRLaW5k
ID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1
dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNv
bnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmRmZy5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2
YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BS
KCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgY29u
c3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwotI2Vsc2UKLSAgICBjb25zdCBib29s
IHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXIgc3R1YkppdDsKLSAgICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVn
ICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNw
ZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNl
Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwot
ICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQu
YnJhbmNoUHRyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAg
ICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgc2NyYXRjaEdQUjIgPSBT
cGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVU
YWdHUFIsIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIy
KTsKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0g
ICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOwotI2VuZGlmCi0gICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAg
ICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAKLSAgICBpZiAobmVl
ZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGJhZFN0
cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7
Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVy
ZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyBQdXRCeUlk
IHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLX0KLQotc3RhdGljIHZvaWQg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVl
LAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCBwdXRLaW5k
LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVn
IHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVH
UFIpOwotICAgIAotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxs
SGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BS
MSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQ
UjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAg
ICAKLSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkVGhp
cmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQot
ICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0
cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29u
ZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIg
PSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRo
aXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAg
ICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2Ny
YXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
c2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRH
UFJSZWc7Ci0gICAgICAgICAgICAKLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7Ci0gICAg
Ci0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
IGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0gICAg
aWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAg
ICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgKCpp
dCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgQVNT
RVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxp
ZEdQUlJlZyk7Ci0gICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMg
dGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgIFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0
b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihN
YWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNo
R1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAg
IHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1h
Y3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6
ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAg
c3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNj
cmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAgICAg
ICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2Ny
YXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdHViSml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkK
LSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwot
ICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFI
YXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0K
LSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgZmFpbHVy
ZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBp
ZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAg
ICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0
dWJKaXQpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0g
ICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1
YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNo
QnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwp
OwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1
cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpKTsKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVh
dGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiREZHIFB1dEJ5SWQgJXN0
cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAg
ICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0g
ICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAotICAgICAgICAgICAgc3RydWN0dXJl
KTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7
Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsK
LSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1
dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5l
ZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAvLyBlbm91Z2ggcmVn
aXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAg
ICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVy
ZSBoYXMKLSAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAo
b2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
Ci0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3Rv
dHlwZUNoYWluLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAg
ICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHJlcGF0Y2hQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUNh
Y2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlC
dWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7Ci0gICAgCi0gICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAg
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXpp
bmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAg
ICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgICAg
ICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJl
YWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3Rv
cmFnZS4KLSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhl
IG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBi
YXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgp
KSwKLSAgICAgICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcg
dGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1
dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAg
ICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRB
Y2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGlu
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQot
ewotICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVk
KQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5k
LAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIGlmICghYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICh3YXNGb3Vu
ZCkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldElnbm9yZWQ7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpT
VmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9yZWQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBp
bnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9
IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxh
YmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkg
ewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHVi
SW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5m
by51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlv
bkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4
ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsK
LSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5k
ZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgCi0gICAgICAgIFN0
cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykp
OwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIHByb3RvdHlwZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9
Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91
bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAg
IAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAot
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKLQotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJl
bCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICAgICAoIkRGRyBJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
Ci0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlz
dC5saXN0U2l6ZSsrOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQoMCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUgLSAxKTsKLX0KLQotdm9pZCByZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAot
ICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBz
bG90LCBzdHViSW5mbykpCi0gICAgICAgIHJldHVybjsKLSAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7Ci19
Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIs
IFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLX0KLQot
dm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0g
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0gICAgCi0gICAgLy8gSWYgeW91J3JlIGJl
aW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBkaWRu
J3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVl
Q29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgIAotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIEFTU0VS
VCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0
KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJ
bmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwotICAgIAotICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5n
Q2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKLSAgICAKLSAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQot
dm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjYWxs
ZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSog
dm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7Ci19Ci0KLXZvaWQgbGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9j
ayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQotewotICAgIEFTU0VS
VCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2Fs
bGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIpOwotICAgIAotICAgIENDYWxsSGVs
cGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93
UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cikpOwotI2Vsc2UKLSAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRo
ZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAot
ICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAg
ICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKLSAgICAKLSAgICBzdHViSml0LmxvYWRQdHIoCi0gICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAq
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0jZWxzZQotICAgIHN0dWJKaXQuc3RvcmVQdHIoCi0g
ICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0dWJKaXQu
c3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFj
azo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwg
PSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IHN0dWJK
aXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgIHN0dWJK
aXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSNlbmRpZgotICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdH
UFIyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxv
Y2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0gICAgUmVmUHRyPENsb3N1cmVD
YWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
Y2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNv
ZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4pKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJs
b2NrKTsKLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAg
UmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExp
bmtJbmZvLmhvdFBhdGhCZWdpbiksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0s
IGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwotICAgIAotICAgIGNhbGxMaW5rSW5mby5zdHVi
ID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwotICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJs
b2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxs
TGlua0luZm8pKTsKLX0KLQotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3Jv
QXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQ
UiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
LSNlbHNlCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVl9E
RkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZH
T3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIFZfREZHT3BlcmF0
aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RC
dWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7
Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
aGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAg
ICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1
Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAw
KTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0SW4oUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guaAkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1JlcGF0Y2hfaAot
I2RlZmluZSBERkdSZXBhdGNoX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2luY2x1ZGUg
IkRGR09wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12
b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURQcm90
b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCByZXBhdGNoSW4oRXhlY1N0
YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rU2xvd0Zv
cihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZv
aWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKLXZv
aWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9p
ZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lk
IHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKLQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgUmVwYXRjaEJ1
ZmZlcjsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWlu
bGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5k
aWYgLy8gREZHUmVwYXRjaF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NjIwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3JfaAotI2RlZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotCi0jaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRG
R1JlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxl
dmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgotCi1jbGFzcyBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgewotcHVibGljOgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICAgICAgOiBtX3VzZWRSZWdp
c3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lk
IGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0
ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCi0gICAgewotICAgICAgICAvLyBGaXJzdCB0cnkgdG8g
YWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0g
ICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZv
Ojp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
cmVnKQotICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKLSAgICAg
ICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOwotICAgICAgICAgICAgICAgIHJldHVy
biByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFNp
bmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5
ZXQKLSAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewot
ICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5m
bzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewotICAgICAgICAgICAgICAg
IG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICBtX2RpZFJldXNl
UmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBmYWlsZWQuCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBl
PigtMSk7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJl
dHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQotICAgIEZQUlJlZyBhbGxvY2F0ZVNj
cmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQotICAgIAot
ICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZGlkUmV1c2VSZWdpc3RlcnM7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5
SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAg
ICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaml0LnN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3Vz
ZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQucHVzaChH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lk
IHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAg
ICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0t
OykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkp
ICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAg
aml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0
ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KLSAgICAKLSAg
ICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxl
ciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRv
UmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVl
Kj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcg
JiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lz
dGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNj
cmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2Vk
UmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXpl
KCkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19j
YXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihN
YWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcg
c2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdp
c3Rlci4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0g
SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIAotICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoMCksIHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVy
cyBmaXJzdC4KLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVy
T2ZTZXRHUFJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQ
UkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY291bnQgPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykg
ewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsr
KSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5s
b2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSNlbmRpZgotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBSZWdpc3Rl
clNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7
Ci0gICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOwotICAgIGJvb2wgbV9kaWRSZXVz
ZVJlZ2lzdGVyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTUsMjIgKzg5NSw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKE5vZGUqIG4KICAgICB9CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJS
ZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJV
c2VLaW5kIHVzZUtpbmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0gICAgVU5VU0VEX1BB
UkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJB
TShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMSk7Ci0gICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAgICBBU1NF
UlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJP
RklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBF
ZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJERkdKSVRD
b21waWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgi
CiAjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3Iu
aCIKQEAgLTMxMSw4ICszMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hw
b2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwg
R1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
V3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2lu
ZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BS
LCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAg
ICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2Ug
dmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFs
aWRHUFJSZWcpOwpAQCAtNzMyLDkgKzczMCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwg
Ym9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxs
KE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUo
Tm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Cisg
ICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAg
IAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBOb2RlKiBi
cmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC05MjQs
MTY5ICs5MjIsMTY5IEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5kIGRl
bGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAvLyBkZWNpc2lvbiBh
cyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRob2Rz
LgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0
aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2Jq
ZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0
LCBpbnQzMl90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9u
X0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6
ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VP
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3Qs
IFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVy
YXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNp
emUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9F
UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmRleCksIGFyZzEpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9w
ZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3Ra
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGluZGV4LCBzaXplX3Qgc2l6
ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VT
dFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGlu
ZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2Vs
bCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NKc3Mgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
U19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQyBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGluZUNh
bGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX1cgb3BlcmF0aW9u
LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVk
SW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKQEAgLTExMTgsMjQ0ICsxMTE2LDI0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CiAg
ICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlv
bl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX1paIG9w
ZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24s
IEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0REIG9wZXJhdGlvbiwgRlBSUmVn
IHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0pJ
VE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
dm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpf
SklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgICAgICBt
X2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJp
bmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3Rh
bnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1D
b25zdGFudHMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQpLCBUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRz
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBjb25zdCBT
dHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29u
c3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCog
dWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVp
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpB
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBp
bnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBp
bnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJn
MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Va
SWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRUpTIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1c3RlZElt
bVB0cihpbmRleCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25f
RUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0
aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19E
RkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0Mgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBG
UFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBh
cmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0
ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBG
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEzNzksNyArMTM3Nyw3IEBAIHB1YmxpYzoKICNk
ZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwogI2VuZGlmCiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklU
T3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHMoYXJnMSk7CkBAIC0xMzg3LDIzMyArMTM4NSwyMzMgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2lu
dGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwq
IHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0
cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpz
c1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNTIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENv
bnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZElt
bTMyKG51bUNvbnN0YW50cykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5
bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0lt
cGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywg
VHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBp
bnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcg
YXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihhcmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1aWQpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
REEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgRlBS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVB
QklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBH
UFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJf
dCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
aW50MzJfdCBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSks
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVpaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyB2
YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRhZ0dQUigpLCBUcnVzdGVkSW1tUHRyKGluZGV4KSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0
aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5
bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFn
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9B
UkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBH
UFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQ
UlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0
XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJl
ZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRh
ZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFn
LCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVn
IGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywg
R1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGltbSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJl
ZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9h
ZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdH
UFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxvYWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigpKTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmczKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJS
ZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpD
SSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBh
cmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9w
ZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQs
IEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBH
UFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIGFyZzNQYXlsb2FkLCBhcmcz
VGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZH
T3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJl
ZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklf
MzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJ
VF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFy
ZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1Rh
Zyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09w
ZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJ
VE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CkBAIC0xOTE2LDggKzE5MTQsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24s
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7Ci0g
ICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0RGR09w
ZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfSklU
T3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Q29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xl
SW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDUyQnJhbmNoKE5vZGUq
LCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAg
ICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hO
b2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDIz
OCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0IGdlbmVyYXRp
b24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOwotICAgIGppdC5icmVha3BvaW50KCk7
Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7Ci0gICAgaml0LnB1c2gocG9pbnRlckdQUik7Ci0g
ICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOwotICAgIGppdC5wb3AocG9pbnRl
ckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShw
b2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBl
cnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklU
IGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQotICAgIC8vIGxpbmtpbmcg
aGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4g
V2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmly
c3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1
cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQotICAg
IC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2Ug
ZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAvLyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUgY2FsbCBm
cmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwgc28KLSAgICAvLyB3ZSBu
ZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LmxvYWRQdHIoCi0gICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVn
aXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnBlZWs2NChHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0j
ZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklU
U1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29r
dXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcg
dGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfREZH
T3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKLXsKLSAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGppdC5zdG9yZVB0cigKLSAg
ICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJu
UEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+
dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5wb2tlNjQoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwot
I2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJ
VFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIAotICAgIC8vIFRoaXMgc2xv
dyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgot
ICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KLSAgICAvLyAyKSBIb3N0IGNhbGwg
cmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KLSAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8g
Y2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAot
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMp
LAotICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5z
dG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LnJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
Uik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLX0KLQotc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZt
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhlIHJldHVybiBhZGRy
ZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5j
ZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxl
IHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAotICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBh
bmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCi0g
ICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBj
YWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQotICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNl
cnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCi0gICAg
Ly8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVz
ZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRp
b24gYWNyb3NzIGNhbGxzLgotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAot
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25M
aW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgbGluayAlcyBz
bG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVj
dCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQotewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JD
YWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9u
bHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgotLy8g
b2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFu
eXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKLSAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgbGluayBjbG9zdXJlIGNhbGwgc2xv
dyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBp
biB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIGp1bXAgdG8gdGhlIGNh
bGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUg
d2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIERG
RyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBo
YXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNlcywK
LSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxs
LCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGpp
dC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86
Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5i
cmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB3ZSBo
YXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nh
c2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAg
ICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51
bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2Rl
QmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAotICAgIC8vIGNhbGwu
Ci0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0g
ICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0
LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpT
U3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNlCi0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBH
UFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsK
LSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFi
bGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCi0gICAgICAg
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdp
bGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKLQotICAg
IHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFu
eXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgotICAgIAotICAgIHNsb3dQ
YXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2Fs
bCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgdmlydHVhbCAlcyBz
bG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVj
dCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVy
YXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAsNiBAQCBuYW1l
c3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxMyw2ICs0MTMsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKDApKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgfQogCisgICAgdm9pZCB3
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGppdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoMSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gx
KTsKKyAgICAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKyAgICAgICAgQVNTRVJUKHNj
cmF0Y2gxICE9IHNjcmF0Y2gyKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQorICAgICAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENv
dW50ZXJGb3IodXNlS2luZCkpOworI2VuZGlmCisgICAgfQorCiAgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogICAgIAog
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFy
YXJncyhJbnN0cnVjdGlvbgogCiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENv
ZGVCbG9jay4KICAgICBzdHViQ2FsbC5jYWxsKCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFw
cGVycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0
aW9uV3JhcHBlcnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25XcmFwcGVyc19oCisKK25hbWVzcGFj
ZSBKU0MgeworCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfUElDCisjZGVmaW5lIExPQURf
RlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4i
IFwKKyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIg
IlxuIiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4i
CisjZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCisj
ZW5kaWYKKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpZiBDT01QSUxFUihHQ0Mp
ICYmIENQVShYODZfNjQpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAorICAgIGFzbSggXAorICAgICIuZ2xvYmwgIiBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikg
IlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAi
bW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKKyAgICAgICAgImptcCAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAorICAg
ICk7CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0
aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJz
aSkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5j
dGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4
KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0
aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gp
CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0
aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQor
CisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQpIFwKKyAgICBhc20oIFwK
KyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92ICglZXNwKSwgJWVheFxuIiBc
CisgICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJWkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwKKyAg
ICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mp
ICJcbiIgXAorICAgICk7CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDgpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDE2KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCAyMCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMjQpCisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCisKKyNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAg
ICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5j
ICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCisgICAgICAg
ICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIg
XAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIu
YWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAiLnRodW1iIiAiXG4i
IFwKKyAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwK
KyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgYTQs
IGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRo
UmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNW
QUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJN
IEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIg
b3IgW3NwXSkuCisvLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQt
Ynl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCisjaWYgQ09NUElM
RVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVf
UkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgorI2RlZmluZSBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgorI2Vsc2UKKyNk
ZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwg
IzBdIgorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIg
bHIsIFtzcCwgIzRdIgorI2VuZGlmCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJc
biIgXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAi
LnRodW1iIiAiXG4iIFwKKyAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAg
ICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIu
YWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAiLnRodW1iIiAiXG4i
IFwKKyAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwK
KyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNU
SU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisK
KyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFz
bSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgSU5M
SU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExP
Q0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICAp
OworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVu
Y3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24p
ICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xf
U1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwK
KyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVz
cyIgIlxuIiBcCisgICAgKTsKKworLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlz
IGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11
c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCisv
LyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVy
IGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCisjaWYgQ09NUElMRVJfU1VQUE9SVFMo
RUFCSSkgJiYgQ1BVKEFSTSkKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJF
U1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgorI2Vsc2UKKyNkZWZpbmUgSU5TVFJV
Q1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgorI2RlZmlu
ZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRd
IgorI2VuZGlmCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBc
CisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
KyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQURE
UkVTU19FSkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikg
IldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZWxpZiBDT01QSUxFUihHQ0Mp
ICYmIENQVShNSVBTKQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAor
ICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAor
ICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAg
ICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9U
T19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgIm1vdmUgJGEzLCAk
cmEiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRl
eHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
KyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhS
ZXR1cm5BZGRyZXNzKSBcCisgICAgICAgICJzdyAkcmEsIDIwKCRzcCkiICJcbiIgXAorICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAor
ICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2Vs
aWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQorCisjZGVmaW5lIFNINF9TQ1JBVENIX1JFR0lT
VEVSICJyMTEiCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
ICAgICAic3RzIHByLCByNSIgIlxuIiBcCisgICAgICAgICJicmEgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIg
XAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKKyAgICAgICAgIm1vdi5sIDJmLCAiIFNINF9TQ1JB
VENIX1JFR0lTVEVSICJcbiIgXAorICAgICAgICAiYnJhZiAiIFNINF9TQ1JBVENIX1JFR0lTVEVS
ICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxu
IiBcCisgICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0LCBzY3JhdGNoKSBcCisgICAg
YXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgInN0cyBwciwgIiBzY3Jh
dGNoICJcbiIgXAorICAgICAgICAibW92LmwgIiBzY3JhdGNoICIsIEAoIiBTVFJJTkdJWkUob2Zm
c2V0KSAiLCByMTUpIiAiXG4iIFwKKyAgICAgICAgIm1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxuIiBc
CisgICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisg
ICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAorICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9S
RUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisgICAgKTsK
KworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0
aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBT
SDRfU0NSQVRDSF9SRUdJU1RFUikKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisKKyNlbmRpZgorCisjZGVm
aW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwK
K3ZvaWQqIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBc
CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2Rl
ZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBc
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9J
TlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pCisKKyNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSBcCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRk
cmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pCisKKyNkZWZpbmUgSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVS
RU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQorCisjZGVmaW5lIFZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKK3ZvaWQgSklUX09QRVJBVElPTiBm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3BlcmF0
aW9uV3JhcHBlcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25X
cmFwcGVycy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitleHRlcm4gIkMiIHsKKworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOworICAgIFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsK
K30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3QpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhl
YywgaWRlbnQsIHNsb3QpOworCisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIGJ1aWxkR2V0QnlJRExpc3Qo
ZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIElk
ZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nl
c3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKSB7
CisgICAgICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VDSShvcGVyYXRpb25Jbk9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBpZiAoIWJhc2UtPmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgdm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQ
YXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBiYXNlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7
CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CisgICAgYm9vbCByZXN1bHQgPSBhc09iamVj
dChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworICAgIAor
ICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRl
bnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8pOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8u
c2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
cmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4o
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSkKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKworICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAgICB2bS0+dGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIs
IGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCBrZXkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGFzT2JqZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVjLCBp
ZGVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZW5l
cmljSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGtleSkK
K3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KENvbW1vblNsb3dQYXRoczo6b3BJbihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgYmFzZSkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9t
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09iamVjdChiYXNlKSwgaWRlbnQpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGdldHRlclNldHRlcikKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEdldHRlcihleGVjLCBiYXNl
LCBnZXR0ZXJTZXR0ZXIpKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAg
IElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1ldGhv
ZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1ldGhv
ZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisg
ICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0
cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgQVNTRVJUKGJh
c2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKK30KKwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Cisg
ICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhl
YywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBl
bHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFs
c2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNl
VmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVw
YXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERp
cmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKworVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNP
YmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJh
c2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0
dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAg
IAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNl
ZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwor
fQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAK
KyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsK
KyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAg
IAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlkTGlz
dChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKK30K
KworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
dWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5
SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3Qp
OworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAg
IEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50
LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRM
aXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRp
ZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBl
eGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Cisg
ICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNs
b3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRQ
dXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOworICAg
IGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKKworICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgIAorICAgICAgICBBU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7CisgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOworICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAg
ICAgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKKyAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBj
YWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
fQorCisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgCisgICAgQ29u
c3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRhKTsKKyAgICAKKyAgICBB
U1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlSlMpOworICAgIAorICAgIGlmIChj
b25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7CisgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWND
YWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworCisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOworICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywg
Y2FsbGVlKSk7CisgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK2lu
bGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxl
ckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVl
ID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5j
dGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2FsbGVl
QXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPiho
YW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CisKKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25D
ZWxsKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCkp
OworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IDA7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAg
ICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRy
ZXNzRm9yQ2FsbCgpOworICAgIGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKKyAg
ICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
fQorICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zvcihr
aW5kKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVX
aXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoKTsKKyAgICB9CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVj
LT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwor
ICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5z
ZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorCitj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Cit9CisK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0
cnVjdCk7Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVl
ID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxs
ID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxl
ZUFzRnVuY3Rpb25DZWxsKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKyAgICAK
KyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNG
dW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5zY29wZVVu
Y2hlY2tlZCgpKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5l
eGVjdXRhYmxlKCk7CisgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9y
KGtpbmQpKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOworICAgICAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlY0NhbGxlZSwg
ZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5
Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2lubGluZSBjaGFyKiB2
aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOworICAgIHJl
dHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsSWdub3JlZCk7Cit9CisKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBpZiAoIWNhbGxlZUFzRnVu
Y3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAg
SlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKKyAgICAK
KyAgICBpZiAoIW9sZENhbGxlZQorICAgICAgICB8fCBvbGRDYWxsZWUtPnN0cnVjdHVyZSgpICE9
IGNhbGxlZS0+c3RydWN0dXJlKCkKKyAgICAgICAgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkg
IT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdl
bmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RG
dW5jdGlvbigpKQorICAgICAgICBjb2RlQmxvY2sgPSAwOworICAgIGVsc2UgeworICAgICAgICBj
b2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxl
KCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGxpbmtDbG9zdXJlQ2FsbCgKKyAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssCisgICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpLCBjb2RlUHRyKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQor
eworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CisgICAgY2hhciogcmVzdWx0ID0g
dmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNG
dW5jdGlvbkNlbGwpOworICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVl
LT5yZXR1cm5QQygpKTsKKworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChl
eGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAgICAg
bGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25W
aXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7ICAgIAorICAgIHJldHVybiB2aXJ0
dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKwor
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShvcGVyYXRpb25DYWxsRXZh
bCk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJh
bWUoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShleGVj
LT5zY29wZSgpKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRSZXR1cm5QQyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKKyAgICAKKyAgICBpZiAo
IWlzSG9zdEZ1bmN0aW9uKGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVuY0V2
YWwpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgCisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsKGV4ZWNDYWxsZWUpOworICAgIGlmICh2bS0+ZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pJVEhhbmRsZXJFbmNv
ZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMs
IHVpbnQzMl90IGNhbGxJbmRleCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uVmFs
dWUpOworICAgIAorICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gZXhlYy0+Y29kZUJsb2NrKCktPmJ5
dGVjb2RlT2Zmc2V0Rm9yQ2FsbEF0SW5kZXgoY2FsbEluZGV4KTsKKyAgICBFeGNlcHRpb25IYW5k
bGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgdlBD
SW5kZXgpOworICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CisgICAgcmV0dXJuIGRm
Z0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7
Cit9CisKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlckluU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykK
K3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5l
eGNlcHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIAorICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IHN0dWJJbmZvLT5jb2RlT3JpZ2luOworICAgIHdoaWxlIChjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgCisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5k
bGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKKyAgICBy
ZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hS
b3V0aW5lKTsKK30KKworfSAvLyBleHRlcm4gIkMiCisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9uc19oCisjZGVmaW5lIEpJVE9wZXJh
dGlvbnNfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYg
Q0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKKyNkZWZpbmUgSklUX09QRVJBVElPTiBDREVD
TAorI2Vsc2UKKyNkZWZpbmUgSklUX09QRVJBVElPTgorI2VuZGlmCisKKy8vIFRoZXNlIHR5cGVk
ZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVs
cGVyIHJvdXRpbmVzOworLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91
dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCisvKgorICAgIEtleToKKyAgICBWOiB2b2lk
CisgICAgSjogSlNWYWx1ZQorICAgIFA6IHBvaW50ZXIgKHZvaWQqKQorICAgIEM6IEpTQ2VsbCoK
KyAgICBBOiBKU0FycmF5KgorICAgIFM6IHNpemVfdAorICAgIFo6IGludDMyX3QKKyAgICBEOiBk
b3VibGUKKyAgICBJOiBTdHJpbmdJbXBsKgorKi8KK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklU
T3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUkpKEV4ZWNTdGF0
ZSosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkEpKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gKCpKX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKUCkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Cit0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFAp
KEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3Qp
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9F
WkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVpa
KShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsK
K3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUMpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIFN0cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Cit0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3Bl
cmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKK3R5
cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBk
b3VibGUpOwordHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3BlcmF0aW9uX1pa
KShpbnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJ
VE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBpbnQz
Ml90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwordHlwZWRlZiBz
aXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgc2l6ZV90IEpJ
VF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90LCBkb3VibGUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsK
K3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSlBQKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9P
UEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBl
ZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgq
UF9KSVRPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIq
IEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
Kiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9u
X0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVf
dCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FUykoRXhl
Y1N0YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3Bl
cmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Cit0eXBlZGVmIGNo
YXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0
SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9K
SVRPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90
KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFopKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsK
K3R5cGVkZWYgU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiAoKklfSklUT3BlcmF0aW9uX0VKc3Mp
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Cit0eXBlZGVmIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9O
ICgqSnNzX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKK2V4dGVybiAi
QyIgeworCisvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFu
ZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcworLy8gdGhlIHJldHVybiBsb2Nh
dGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJh
dGlvbnMgYWJvdmUuCisKKy8vIEFjY29yZGluZyB0byBDKysgcnVsZXMsIGEgdHlwZSB1c2VkIGZv
ciB0aGUgcmV0dXJuIHNpZ25hdHVyZSBvZiBmdW5jdGlvbiB3aXRoIEMgbGlua2FnZSAoaS5lLgor
Ly8gJ2V4dGVybiAiQyInKSBuZWVkcyB0byBiZSBQT0Q7IGhlbmNlIHB1dHRpbmcgYW55IGNvbnN0
cnVjdG9ycyBpbnRvIGl0IGNvdWxkIGNhdXNlIGVpdGhlciBjb21waWxlcgorLy8gd2FybmluZ3Ms
IG9yIHdvcnNlLCBhIGNoYW5nZSBpbiB0aGUgQUJJIHVzZWQgdG8gcmV0dXJuIHRoZXNlIHR5cGVz
Lgorc3RydWN0IEpJVEhhbmRsZXIgeworICAgIHVuaW9uIFVuaW9uIHsKKyAgICAgICAgc3RydWN0
IFN0cnVjdCB7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CisgICAgICAgICAgICB2b2lk
KiBoYW5kbGVyOworICAgICAgICB9IHM7CisgICAgICAgIHVpbnQ2NF90IGVuY29kZWQ7CisgICAg
fSB1OworfTsKKworaW5saW5lIEpJVEhhbmRsZXIgY3JlYXRlSklUSGFuZGxlcihFeGVjU3RhdGUq
IGV4ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgSklUSGFuZGxlciByZXN1bHQ7CisgICAgcmVz
dWx0LnUucy5leGVjID0gZXhlYzsKKyAgICByZXN1bHQudS5zLmhhbmRsZXIgPSBoYW5kbGVyOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBDUFUoWDg2XzY0KQordHlwZWRlZiBKSVRIYW5k
bGVyIEpJVEhhbmRsZXJFbmNvZGVkOworaW5saW5lIEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRs
ZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVyKTsKK30KKyNlbHNlCit0eXBlZGVmIHVpbnQ2
NF90IEpJVEhhbmRsZXJFbmNvZGVkOworaW5saW5lIEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRs
ZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoSklUSGFuZGxlcjo6VW5pb24pID09IHNpemVvZih1aW50NjRfdCksIEpJ
VEhhbmRsZXJfVW5pb25faXNfNjRiaXQpOworICAgIHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4
ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsKK30KKyNlbmRpZgorSklUSGFuZGxlckVuY29kZWQgSklU
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qKSBXVEZfSU5U
RVJOQUw7CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3Vz
dG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVj
dChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3BlcmF0aW9uc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBSZWdpc3RlclNldF9oCisjZGVmaW5lIFJlZ2lzdGVyU2V0X2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkZQUkluZm8u
aCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMgPQorICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzSW5SZWdpc3Rl
clNldCA9CisgICAgKHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAzOworCit0eXBlZGVm
IHVpbnQ4X3QgUmVnaXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXRdOworCitj
bGFzcyBSZWdpc3RlclNldCB7CitwdWJsaWM6CisgICAgUmVnaXN0ZXJTZXQoKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTsp
CisgICAgICAgICAgICBtX3NldFtpXSA9IDA7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0
KGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgbV9z
ZXRbaV0gPSBvdGhlcltpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXRQT0Qm
IGFzUE9EKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICAKKyAgICB2b2lkIGNvcHlJbmZv
KFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgb3Ro
ZXJbaV0gPSBtX3NldFtpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoR1BSUmVnIHJlZykK
KyAgICB7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHNl
dEJpdChpbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoR1BSUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgZ2V0KEdQUlJlZyByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Z2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0
R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
bmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJp
dChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybiB0aGUgaW5kZXgndGggZnJlZSBH
UFIuCisgICAgR1BSUmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAwKSBjb25zdAorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAmJiAhaW5kZXgtLSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXQoRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRl
eCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
KEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBjbGVhckJpdChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
Z2V0KEZQUlJlZyByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAg
ICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB2b2lkIHNl
dEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzZXQoQmFua0luZm86OnRv
UmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFu
a0luZm8+CisgICAgYm9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZTZXRGUFJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KSB7CisgICAgICAgICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyAr
IGkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzdWx0Kys7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxOdW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRCaXQodW5z
aWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVy
cyk7CisgICAgICAgIG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xlYXJCaXQodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
IDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIG1fc2V0W2kgPj4gM10gJj0gfigx
IDw8IChpICYgNykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEJpdCh1bnNpZ25lZCBpKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsK
KyAgICAgICAgcmV0dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSk7CisgICAg
fQorICAgIAorICAgIFJlZ2lzdGVyU2V0UE9EIG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbHNlIC8vIEVOQUJMRShKSVQpIC0+IHNvIGlmIEpJVCBpcyBkaXNhYmxlZAorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gRGVmaW5lIFJlZ2lzdGVyU2V0UE9EIHRvIHNvbWV0aGluZyB0
aGF0IGlzIGEgUE9ELCBidXQgaXMgb3RoZXJ3aXNlIHVzZWxlc3MsCisvLyB0byBtYWtlIGl0IGVh
c2llciB0byByZWZlciB0byB0aGlzIHR5cGUgaW4gY29kZSB0aGF0IG1heSBiZSBjb21waWxlZCB3
aGVuCisvLyB0aGUgREZHIGlzIGRpc2FibGVkLgorCitzdHJ1Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRp
ZiAvLyBSZWdpc3RlclNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgor
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKKyNpbmNsdWRl
ICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayog
Y29kZWJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1
bmN0aW9uKQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKwor
c3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29s
IGNvbXBhY3QpCit7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CisKKyAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKKworICAgIC8v
IFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgorICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9D
YWxsKSwgc3RydWN0dXJlKTsKKyAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklz
QWN0aXZlKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZz
ZXQob2Zmc2V0KSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoY29tcGFjdCkKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
KSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBpZiAoY29tcGFjdCkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZl
VG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZl
VG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU0NlbGwqIG9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChvYmpl
Y3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOworI2lmIERG
R19FTkFCTEUoSklUX0FTU0VSVCkKKyAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUs
IHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKKyAg
ICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5icmVha3BvaW50
KCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmpl
Y3QpLCBzY3JhdGNoR1BSKTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAorICAgICAgICBqaXQu
YnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VS
VChwcm90b3R5cGUuaXNDZWxsKCkpOworICAgIAorICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCisgICAgICAgIGZhaWx1cmVDYXNl
cywgc2NyYXRjaEdQUik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNo
QnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKKyAgICAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQo
CisgICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVj
a0ltbVRvQ2FsbCkpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2Ny
YXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
R1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
cykKK3sKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5w
b3Aoc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7CisgICAgICAgIAorICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2Ug
Y2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCisgICAgICAgIGZhaWx1cmVD
YXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0
Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKK30K
Kworc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVy
LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlQmVnaW4pCit7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNj
ZXNzTGFiZWwpOworICAgICAgICAKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFj
ayB0byBub3JtYWwgcGF0aAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93
Q2FzZUJlZ2luKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZm
ZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCit7
CisgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb1Nsb3dDYXNlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vz
c1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJS
b3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgTWFjcm9Bc3NlbWJs
ZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2gudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKCk7CisgICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgIAorICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzY3JhdGNo
R1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKKyNlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAg
ICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7CisgICAgCisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7CisgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICBwcm90b09iamVjdCA9IGFzT2Jq
ZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90
b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgfQorICAgIAorICAgIGlmIChpc0lubGluZU9mZnNl
dChvZmZzZXQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5sb2FkNjQo
cHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICB9IGVs
c2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJl
c3MoKSwgcmVzdWx0R1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5
KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Cisj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
CisjZW5kaWYKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWls
OworICAgIAorICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
KTsKKyAgICAKKyAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xv
d0Nhc2VMYWJlbCk7CisgICAgCisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9E
RkdfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBj
aGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAorICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVy
IGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgCisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMuZ2V0RnJlZUdQUigpOworICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAK
KyAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
LCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2Fz
ZXM7CisgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAor
ICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkp
OworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQub3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCisj
ZW5kaWYKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAg
ICAgICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAg
ICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cyk7CisgICAgICAgIAorICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX0RGR19TVFVCKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAo
IkRGRyBHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
KyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKKyAgICAgICAgCisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOworICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhN
RTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgorCisgICAgLy8gRklY
TUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAoIWJhc2VW
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNl
bGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
Q2VsbC0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxm
IGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICB8fCAhTWFjcm9Bc3Nl
bWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZl
VG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKKyAgICAgICAgICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwg
dHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBzZXR0
ZXJzCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZz
ZXQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWlu
QWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQs
IHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJ
bmZvLnN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8s
IHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWls
ZExpc3QpOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwg
dHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghY2FjaGVkKQorICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKK30KKworc3RhdGljIGJvb2wgZ2V0UG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0KAorICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
JiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAorICAgIENvZGVMb2Nh
dGlvbkxhYmVsJiBzbG93Q2FzZSkKK3sKKyAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOworICAgIAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAg
fSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVlKTsKKyAg
ICAgICAgbGlzdEluZGV4ID0gMTsKKyAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXN0
dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1
YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8u
dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOworICAgICAgICBzdHViSW5mby5zdHVi
Um91dGluZS5jbGVhcigpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOworICAgICAgICBsaXN0SW5kZXggPSAx
OworICAgIH0gZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgICAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0Owor
ICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsK
KyAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGxp
c3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJS
b3V0aW5lKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOworICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxm
UGF0Y2hpbmcpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5
QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAg
ICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCAhYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+
c3RydWN0dXJlKCk7CisgICAgCisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUp
IHsKKyAgICAgICAgaWYgKCFzdHViSW5mby5wYXRjaC5yZWdpc3RlcnNGbHVzaGVkKSB7CisgICAg
ICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVn
aXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1
bGFyLAorICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUg
cGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1
c2hlZC4gVGh1cywKKyAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVk
LCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KKyAgICAgICAgICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0OworICAgICAgICBpbnQgbGlzdEluZGV4OworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZTsKKworICAgICAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7CisgICAg
ICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVU
YWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoKTsKKyAgICAgICAg
CisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzdHJhdGVneSB3
ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIC8vIDEpIENhbGwgREZHIGhl
bHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCisgICAgICAgIC8vIDIpIENoZWNrIGlmIHRoZXJl
IHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3YXMsIGNhbGwgeWV0IGFub3RoZXIKKyAg
ICAgICAgLy8gICAgaGVscGVyLgorICAgICAgICAKKyAgICAgICAgYm9vbCBpc0RpcmVjdCA9IGZh
bHNlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKKyAgICAgICAgRnVuY3Rpb25QdHIg
b3BlcmF0aW9uRnVuY3Rpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7
CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRH
UFJSZWcpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9IHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRj
aEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3Bl
cmF0aW9uQ2FsbEdldHRlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAg
IGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
LAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVu
dC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlv
bkNhbGxDdXN0b21HZXR0ZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0
IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0
IHdlIGFyZSBhdAorICAgICAgICAgICAgLy8gcmlnaHQgbm93IQorICAgICAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
ZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1Ykpp
dC5jYWxsKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBz
dHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBl
cnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pKTsKKyAgICAgICAgICAgIGhhbmRs
ZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1
bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdH
UFIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0
VGFnR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7CisgICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBzbG93Q2FzZSk7
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Cisg
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUg
PQorICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICAgICAgRklO
QUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICAgICAgICAgKnZtLAor
ICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAg
ICAgICAgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSk7CisgICAgICAgIAorICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlz
dEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CisgICAgICAgIAorICAgICAgICBwYXRjaEp1bXBUb0dl
dEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsK
KyAgICB9CisgICAgCisgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgIXNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNl
KCksIGlkZW50LCBvZmZzZXQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgCisgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Cisg
ICAgaW50IGxpc3RJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKKyAgICBp
ZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0
U2l6ZSsrOworICAgIAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Cisg
ICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwg
c2xvd0Nhc2UsIHN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAKKyAgICBwYXRjaEp1bXBUb0dl
dEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAK
KyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEp
OworfQorCit2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRD
aGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghZG9udENoYW5nZUNhbGwpCisgICAgICAg
IHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkdldEJ5SWQpOworfQorCitzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsK
KyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0OworfQorCitzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3By
aWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNs
b3QsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewor
ICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVj
dCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExp
c3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Cit9CisK
K3N0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisg
ICAgSlNWYWx1ZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtp
bmQsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFp
bHVyZUxhYmVsLAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQorewor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoKTsKKyAgICBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQorICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICBjb25zdCBib29sIHdy
aXRlQmFycmllck5lZWRlZCA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJy
aWVyTmVlZGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHVi
Sml0OworICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRl
QmFycmllck5lZWRlZCB8fCBpc091dE9mTGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVK
SVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAg
c2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZh
bHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0
Y2ggPSB0cnVlOworICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgfQorCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIo
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgIAorI2lmIEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNj
cmF0Y2hHUFIyID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFs
dWVHUFIsIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZl
SklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2Ny
YXRjaEdQUik7CisjZW5kaWYKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUjIpOworICAgIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSMik7CisjZW5kaWYKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Cisg
ICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpIHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAg
fQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOworICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3Jl
U2NyYXRjaCkgeworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgc3Vj
Y2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgYmFkU3RydWN0dXJlLmxp
bmsoJnN0dWJKaXQpOworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN1Y2Nlc3Mg
PSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5j
b2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CisgICAg
ICAgICAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAor
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgUHV0QnlJZCByZXBsYWNlIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5j
b2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldCgKKyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50
aWZpZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWws
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBH
UFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOworICAgIAorICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAg
YWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxv
Y2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1
ZUdQUik7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOworICAgICAgICAgICAg
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRj
aEdQUjEgIT0gdmFsdWVHUFIpOworICAgIAorICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBm
YWxzZTsKKyAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOworI2Vu
ZGlmCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CisgICAgICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKKyAgICAg
ICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7CisgICAgfQorCisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyOworICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSMiA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIp
OworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAgIH0gZWxz
ZQorICAgICAgICBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIzOworICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0Y2hHUFIz
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUjMgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQ
Uik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7CisgICAgICAg
IEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7CisgICAgfSBlbHNlCisgICAgICAg
IHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIAorICAgIGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgICAgICAKKyAgICBBU1NF
UlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG9sZFN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
CisgICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAorICAgICAgICBzY3JhdGNoR1BS
MSk7CisgICAgICAgICAgICAKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAgICAg
ICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVh
ZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAorICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEVOQUJMRShXUklURV9CQVJS
SUVSX1BST0ZJTElORykKKyAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOworICAgIEFTU0VS
VChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAvLyBNdXN0IGFsd2F5cyBlbWl0
IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJl
cXVpcmVzIGl0CisgICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNl
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzKTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0
aDsKKyAgICAKKyAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IGZhbHNlOworICAgIAor
ICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBDb3BpZWRB
bGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgeworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7CisgICAgICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcpOworICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
Myk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQo
c3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIHN0
dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJl
bWFpbmluZyk7CisgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVv
ZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRj
aEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQ
UjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9m
ZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yo
dm9pZCopKSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIzLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVv
Zih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9m
ZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOworICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOworICAgIH0K
KworICAgIHN0dWJKaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hHUFIx
SGFzU3RvcmFnZSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgICAgICAgICAKKyAg
ICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIHN1Y2Nl
c3MgPSBzdHViSml0Lmp1bXAoKTsKKworICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1Ykpp
dCk7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0
dWJKaXQpOworICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJ
blNsb3dQYXRoOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHNsb3dQYXRo
LmxpbmsoJnN0dWJKaXQpOworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRT
Y3JhdGNoQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lz
dGVyc1RvU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFs
dWVHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIs
IHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5j
YWxsKCk7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNo
QnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3Vj
Y2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9CisgICAgCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAoYWxs
b2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOworICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNs
b3dQYXRoLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICB9CisgICAgCisgICAgc3R1YlJvdXRpbmUg
PQorICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgICAgIEZJTkFMSVpFX0RG
R19DT0RFKAorICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICgi
REZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5n
ICIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCisg
ICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKKyAgICAgICAgICAgICp2bSwKKyAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygp
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgICAg
ICBzdHJ1Y3R1cmUpOworfQorCitzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRL
aW5kIHB1dEtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpOworICAgIAorICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3Mu
CisgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBpZiAoc2xvdC50
eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgIC8v
IGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAoR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0
aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVtaXRQdXRUcmFu
c2l0aW9uU3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksCisgICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Cisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0
aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCksIGZhbHNlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHJlcGF0Y2hQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRy
eUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOworICAgIGlmICghY2FjaGVkKQorICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0
cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlKSB7CisgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Cisg
ICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgICAgIAorICAg
ICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewor
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGlt
aXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUK
KyAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCisgICAg
ICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICAgICAg
ICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVk
IHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcg
c3RvcmFnZS4KKyAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkg
dGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0Ojpmcm9tKAorICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkp
LAorICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5z
aXRpb24oCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3Rv
dHlwZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0
aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAgICAgICAgICAg
bGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAgICAgICAgcHV0
S2luZCwgc3R1YkluZm8sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgICAgICAg
ICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNz
OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisgICAgICAgIAorICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGJv
b2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOworICAgIGlmICghY2FjaGVkKQorICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwor
fQorCitzdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAorICAgIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorewor
ICAgIGlmICghYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICh3YXNGb3VuZCkgeworICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9y
ZWQ7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFj
Y2VzcyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwg
aWRlbnQsIG9mZnNldElnbm9yZWQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdElu
ZGV4OworICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZv
LmhvdFBhdGhCZWdpbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOworICAg
IAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgeworICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAwKTsKKyAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlz
dCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0
LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxp
c3RTaXplOworICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisg
ICAgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoKTsKKyAgICAg
ICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7CisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc3R1Ykpp
dC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0
cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Cisg
ICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAg
ICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCks
IGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKKyAgICAgICAgICAgICAgICBm
YWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0
LT5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1
YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRH
UFIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzLCBmYWlsOworICAgICAgICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQs
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNo
KHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOworICAgICAgICAKKyAgICAgICAg
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAi
bm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCisgICAgICAgICAgICAg
ICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9CisgICAgCisgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Cisg
ICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUrKzsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBsaXN0SW5kZXggPCAo
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Cit9CisKK3ZvaWQgcmVwYXRjaEluKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2Us
IGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pKQorICAgICAgICByZXR1cm47CisgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uSW4pOworfQorCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSk7Cit9CisKK3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlv
biogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOworICAgIAor
ICAgIC8vIElmIHlvdSdyZSBiZWluZyBjYWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVu
IHlvdSBvYnZpb3VzbHkgZGlkbid0IGdldCBpbmxpbmVkLgorICAgIGlmIChjYWxsZWVDb2RlQmxv
Y2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBm
YWxzZTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0o
KTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2Nr
KTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxs
TGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0lu
Zm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxs
ZWUpOworICAgIGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJh
bWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2Rl
UHRyKTsKKyAgICAKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxsZWVDb2Rl
QmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5m
byk7CisgICAgCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENU
SVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7
CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZv
ckNvbnN0cnVjdCk7Cit9CisKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorewor
ICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29k
ZUJsb2NrKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOworfQor
Cit2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAKKyAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygp
OworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsK
KyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKKyAg
ICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICBzdHViSml0LmJyYW5jaFRl
c3Q2NCgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJl
YWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyNlbmRpZgorICAgIAorICAg
IHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgIAorICAgIHNsb3dQ
YXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7CisgICAgCisgICAgc3R1
YkppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc3R1YkppdC5zdG9yZTY0KAor
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSkpOworI2Vsc2UKKyAgICBz
dHViSml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWlu
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKKyAgICBzdHViSml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZz
dHViSml0KTsKKyAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Cisj
ZW5kaWYKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvdyA9IHN0
dWJKaXQuanVtcCgpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGws
IEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAor
ICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVm
KG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgK
KyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxs
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKKyAgICAgICAg
ICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
KyAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhw
b2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKKyAgICAgICAgKnZtLCBjYWxs
ZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNl
V2l0aEp1bXAoCisgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0
Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4pLAorICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAKKyAg
ICBjYWxsTGlua0luZm8uc3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKKyAgICAKKyAgICBB
U1NFUlQoIWNhbGxlZUNvZGVCbG9jayB8fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxs
QWxyZWFkeUxpbmtlZCgmY2FsbExpbmtJbmZvKSk7Cit9CisKK3ZvaWQgcmVzZXRHZXRCeUlEKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0
ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7
CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaCgpKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICBSZXBhdGNoQnVm
ZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVy
ZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5w
YXRjaC5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsK
KyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
KSwgMCk7CisjZWxzZQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9T
bG93Q2FzZSkpOworfQorCit2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgVl9ERkdPcGVyYXRp
b25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9u
X0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kg
b3B0aW1pemVkRnVuY3Rpb247CisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Qp
CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7CisgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikp
OworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwg
MCk7CisjZWxzZQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9
CisKK3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdSZXBhdGNoX2gKKyNkZWZp
bmUgREZHUmVwYXRjaF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtp
bmQpOwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQpOwordm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRp
ZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2Nr
KiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8m
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNl
KiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFJlcGF0Y2hCdWZmZXI7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2lu
bGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQoraW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CitpbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorI2VuZGlmIC8vIERGR1Jl
cGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisjZGVmaW5lIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJERkdSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEg
bG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgorCitjbGFzcyBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgeworcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAgICAgOiBtX3Vz
ZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJz
KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB0eXBlbmFtZSBCYW5rSW5mbzo6
UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCisgICAgeworICAgICAgICAvLyBGaXJzdCB0
cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJh
bmtJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVy
cy5nZXQocmVnKQorICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykK
KyAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7CisgICAg
ICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAgICAgICAgICAg
IHJldHVybiByZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlz
IG5vdCB5ZXQKKyAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBC
YW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3Rl
cnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgeworICAgICAgICAg
ICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICBtX2Rp
ZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVnOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBmYWlsZWQuCisg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFw
cHkuCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0
ZXJUeXBlPigtMSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIo
KSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQorICAgIEZQUlJlZyBhbGxv
Y2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQor
ICAgIAorICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdl
dEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAg
ICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAm
JiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAgICBqaXQu
cHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGpp
dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0
ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkp
CisgICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUlu
ZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2Vk
UmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KKyAg
ICAKKyAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fz
c2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRj
aEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZW5k
aWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRj
aFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAo
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZm
ZXJTaXplKCkpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7
CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1
ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBH
UFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBpZiAoc2Ny
YXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRj
aCByZWdpc3Rlci4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0
ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hH
UFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJl
Z2lzdGVycyBmaXJzdC4KKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMu
bnVtYmVyT2ZTZXRHUFJzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJz
LmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY291bnQgPSAw
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
aS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkp
KSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChj
b3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
IGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRp
ZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBS
ZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdp
c3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOworICAgIGJvb2wgbV9k
aWRSZXVzZVJlZ2lzdGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJl
dmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMzICszOCwyMzYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3dDYXNlRm9y
KFZNKiB2bSwgSlNJbnRlcmZhY2VKSVQmIGppdCkKK2lubGluZSB2b2lkIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCiB7Ci0gICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNl
SklUOjpyZWdUMik7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QyLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5p
dGlhbGl6ZSBSZXR1cm5QQyBhbmQgQ29kZUJsb2NrLCBsaWtlIGEgSlMgZnVuY3Rpb24gd291bGQu
Ci0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6
cmVnVDMpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0gICAgaml0LmVtaXRQdXRJbW1lZGlhdGVUb0Nh
bGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwot
ICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6
Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGppdC5jYWxsKCk7Ci0gICAgaml0LmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5yZXQoKTsKLSAgICAKLSAgICBy
ZXR1cm4gY2FsbE5vdEpTRnVuY3Rpb247CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIENDYWxs
SGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIHBvaW50ZXJHUFIpOworICAgIGppdC5icmVha3BvaW50KCk7CisgICAgaXNOb25a
ZXJvLmxpbmsoJmppdCk7CisgICAgaml0LnB1c2gocG9pbnRlckdQUik7CisgICAgaml0LmxvYWQ4
KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOworICAgIGppdC5wb3AocG9pbnRlckdQUik7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAgIFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsK
KyNlbmRpZgogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lcmF0
b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlv
biwgY29uc3QgY2hhciogbmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIEpTSW50ZXJmYWNlSklU
IGppdCh2bSk7Ci0gICAgCi0gICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXBMaXN0IHNsb3dDYXNlOwor
ICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAorICAgIC8vIFdlIHdpbGwganVtcCB0byBo
ZXJlIGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtpbmcgYSBjYWxsLCBidXQgdGhlCisg
ICAgLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRocm93IGFuIGV4Y2Vw
dGlvbiBpbnN0ZWFkLiBXZSB3aWxsCisgICAgLy8gaGF2ZSBzYXZlZCB0aGUgY2FsbFJldHVybklu
ZGV4IGluIHRoZSBmaXJzdCBhcmd1bWVudHMgb2YgSklUU3RhY2tGcmFtZS4KKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9p
bnQsIHNvIHdlCisgICAgLy8gbmVlZCB0byByZW1vdmUgaXQgYW5kIGRyb3AgaXQgb24gdGhlIGZs
b29yLCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgorICAgIC8vIEZpbmFsbHkgbm90ZSB0
aGF0IHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyIHBvaW50cyBhdCB0aGUgY2FsbGVlIGZyYW1lLCBz
bworICAgIC8vIHdlIG5lZWQgdG8gcG9wIGl0LgorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQu
bG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAorICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
KSk7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFj
ZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKLSNl
bHNlIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihK
U0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuZW1pdEp1bXBJZk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKLQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1
bmN0aW9uIGNhbGwuCi0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKKyAgICBqaXQu
cGVlazY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9B
UkdTX0lOREVYKTsKKyNlbHNlCisgICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCisgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBqaXQuanVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwor
fQogCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6eSBsaW5r
aW5nIGFuZCBleGNlcHRpb25zLgotICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOworc3RhdGljIHZv
aWQgc2xvd1BhdGhGb3IoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgUF9KSVRPcGVy
YXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykp
OworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBva2U2NChHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxz
ZQorICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RB
Q0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNT
dGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAgLy8gVGhpcyBzbG93IGNh
bGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAg
Ly8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8vIDIpIEhvc3QgY2FsbCByZXR1
cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxs
LgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQyksCisg
ICAgICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3Jl
UHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksCisgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAqIEpTU3RhY2s6OlJldHVyblBDKSk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworfQorCitzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3Mg
aXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisg
ICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2Ug
bWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9ybSBsaW5raW5nIGFuZCBs
YXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUKKyAgICAv
LyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQvdGFnKSwgdGhlIGNhbGwg
ZnJhbWUgdG8gaGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3RlZCwgbm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBpbmRleCwKKyAgICAvLyBh
bmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJ
VFN0YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBh
Y3Jvc3MgY2FsbHMuCiAgICAgCi0gICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxs
RnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgIGppdC5yZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTGF6eUxpbmsgPSBq
aXQuY2FsbCgpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihKU0lu
dGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd0Nhc2UubGluaygmaml0
KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRl
U2xvd0Nhc2VGb3Iodm0sIGppdCk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBD
b2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7
CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmssIGxhenlMaW5rKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0aW9uKTsKLSAg
ICAKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJsaW5rICVzIHRyYW1w
b2xpbmUiLCBuYW1lKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNo
QnVmZmVyLAorICAgICAgICAoIkxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2Rl
Rm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0
b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlf
b3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1cm4gbGlua0ZvclRodW5r
R2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2Vu
ZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlv
blB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOworICAg
IHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkK
Ky8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2lu
Y2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgorLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0
aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1
cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJl
IGNhbGwiKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBzbG93UGF0aEZv
cihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOworICAgIAorICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsIHNsb3cgcGF0aCB0
aHVuayIpKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2Vu
ZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5j
dGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCisgICAg
Vk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgSlNJbnRlcmZhY2VK
SVQgaml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcExpc3Qgc2xvd0Nhc2U7
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAgICAKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmVtaXRK
dW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKSk7Ci0jZWxzZSAvLyBVU0UoSlNW
QUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoSlNJbnRlcmZhY2VKSVQ6
Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7CisgICAgLy8gVGhl
IHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIu
IFdlIHdpbGwgaGVuY2UKKyAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJl
dHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCisgICAgLy8gbWFrZSBhIEMr
KyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBKSVQgb3BlcmF0aW9uLgogCi0gICAg
Ly8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2Fs
bC4KLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJ
VDo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QxKTsKLSAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAgaml0LmxvYWRQdHIo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7Ci0gICAgSlNJ
bnRlcmZhY2VKSVQ6Okp1bXAgaGFzQ29kZUJsb2NrMSA9IGppdC5icmFuY2gzMihKU0ludGVyZmFj
ZUpJVDo6R3JlYXRlclRoYW5PckVxdWFsLCBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVy
ZmFjZUpJVDo6cmVnVDIsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJz
Rm9yKGtpbmQpKSwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7Ci0gICAgaml0LnBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAg
IGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9w
Q2FsbEZyYW1lKTsKLSAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgSlNJ
bnRlcmZhY2VKSVQ6OkNhbGwgY2FsbENvbXBpbGUgPSBqaXQuY2FsbCgpOwotICAgIGppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAg
IGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdU
MCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDIpOworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBoYXNDb2RlQmxvY2sxLmxpbmsoJmppdCk7Ci0gICAg
aml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qy
LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtp
bmQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
SlNJbnRlcmZhY2VKSVQ6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdFB0cihKU0ludGVyZmFjZUpJ
VDo6Tm9uWmVybywgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuYnJlYWtwb2ludCgp
OwotICAgIG9rLmxpbmsoJmppdCk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3Rv
cnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNlcywKKyAgICAvLyB0
aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZp
bml0ZWx5IGEgZnVuY3Rpb24uCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2Fz
ZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQ
UjEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworI2VuZGlmCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVu
Y3Rpb246OmluZm8oKSkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNG
dW5jdGlvbi4KKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJs
ZSgpKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5k
KAorICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NU
aGFuLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAg
IEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRl
cnNGb3Ioa2luZCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFu
ZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAorICAgIC8vIGNhbGwuCisgICAgCisg
ICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQ
UkluZm86Om5vbkFyZ0dQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnN0b3JlNjQo
CisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKTsKKyNlbHNlCisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpu
b25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKKyAgICAgICAg
ICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKKyAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4g
KworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CiAjZW5kaWYKLSAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAp
OwogICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhB
cml0eUNoZWNrRm9yKGtpbmQpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAg
IC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4K
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBK
U0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VG
b3Iodm0sIGppdCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwgY29t
cGlsZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5j
dGlvbik7CisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8g
dGhlIGZ1bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQg
PT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxD
b25zdHJ1Y3QpOwogICAgIAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
InZpcnR1YWwgJXMgdHJhbXBvbGluZSIsIG5hbWUpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiVmlydHVhbCAlcyBzbG93IHBhdGgg
dGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
LSAgICByZXR1cm4gdmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2Nh
bGxfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAi
Y2FsbCIsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29u
c3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yR2Vu
ZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5j
dGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVu
Z3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDExICszMSwxNiBAQAogI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENv
bnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKKwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>