<?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>184395</bug_id>
          
          <creation_ts>2018-04-07 22:37:21 -0700</creation_ts>
          <short_desc>Add pointer profiling to the FTL and supporting code.</short_desc>
          <delta_ts>2018-04-09 10:42:38 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>184324</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1412675</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-07 22:37:21 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412676</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-07 22:37:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/39264019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412696</commentid>
    <comment_count>2</comment_count>
      <attachid>337452</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-08 01:35:19 -0700</bug_when>
    <thetext>Created attachment 337452
proposed patch.

Let&apos;s get some EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412698</commentid>
    <comment_count>3</comment_count>
      <attachid>337454</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-08 02:07:06 -0700</bug_when>
    <thetext>Created attachment 337454
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412908</commentid>
    <comment_count>4</comment_count>
      <attachid>337454</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-04-09 10:25:28 -0700</bug_when>
    <thetext>Comment on attachment 337454
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412910</commentid>
    <comment_count>5</comment_count>
      <attachid>337454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 10:33:10 -0700</bug_when>
    <thetext>Comment on attachment 337454
proposed patch.

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

&gt; Source/JavaScriptCore/ftl/FTLOutput.h:408
&gt; -    LValue operation(FunctionType function) { return constIntPtr(bitwise_cast&lt;void*&gt;(function)); }
&gt; +    LValue operation(FunctionType function) { return constIntPtr(tagCFunctionPtr&lt;void*&gt;(function, B3CCallPtrTag)); }

Ideally we would support passing more specific diversity to B3::CCall.  Can you file a bug and reference it here with a FIXME?

I totally see how it&apos;s not necessary for making this feature work right now, but such a FIXME will help us remember that it&apos;s only this way because it was expedient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412911</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-09 10:33:24 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #4)
&gt; Comment on attachment 337454 [details]
&gt; proposed patch.
&gt; 
&gt; r=me

r=me too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412912</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-09 10:39:13 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Comment on attachment 337454 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=337454&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLOutput.h:408
&gt; &gt; -    LValue operation(FunctionType function) { return constIntPtr(bitwise_cast&lt;void*&gt;(function)); }
&gt; &gt; +    LValue operation(FunctionType function) { return constIntPtr(tagCFunctionPtr&lt;void*&gt;(function, B3CCallPtrTag)); }
&gt; 
&gt; Ideally we would support passing more specific diversity to B3::CCall.  Can
&gt; you file a bug and reference it here with a FIXME?
&gt; 
&gt; I totally see how it&apos;s not necessary for making this feature work right now,
&gt; but such a FIXME will help us remember that it&apos;s only this way because it
&gt; was expedient.

Done.  Ref: https://bugs.webkit.org/show_bug.cgi?id=184324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412914</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-09 10:42:38 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r230444: &lt;http://trac.webkit.org/r230444&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337452</attachid>
            <date>2018-04-08 01:35:19 -0700</date>
            <delta_ts>2018-04-08 01:47:52 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184395.patch</filename>
            <type>text/plain</type>
            <size>53115</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE4LTA0LTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgcG9pbnRlciBwcm9maWxpbmcgdG8gdGhlIEZUTCBhbmQgc3VwcG9ydGluZyBjb2RlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0Mzk1CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zOTI2NDAxOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6Q29kZUxvY2F0aW9uTGFiZWw6OnJldGFnZ2VkKToKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uSnVtcDo6cmV0YWdnZWQpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
Lmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxvY2F0aW9uT2YpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToK
KyAgICAgICAgKiBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGNlcHRpb25UYXJnZXQ6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGNlcHRpb25U
YXJnZXQ6Omp1bXBzKToKKyAgICAgICAgKiBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg6CisgICAg
ICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGgu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6fkxhenlTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjppbml0aWFsaXplKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5
U2xvd1BhdGg6OkxhenlTbG93UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExhenlT
bG93UGF0aC5oOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZURpcmVjdENhbGxPckNvbnN0cnVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVUYWlsQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1
Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpsYXp5U2xvd1BhdGgpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRIYW5k
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsp
OgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlRlRMTGF6eVNsb3dQYXRoKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjYWxsV2l0aG91dFNpZGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6Om9wZXJhdGlvbik6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKiBm
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxD
b250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgor
ICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFB0clRhZyBjb25zdCk6CisgICAg
ICAgICogZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVy
YXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjpp
c1Byb2ZpbGVFbXB0eSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpyZWFkUHV0SUNDYWxsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6ZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVh
ZENhbGxUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisKIDIw
MTgtMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0pTQ10gUmVtb3ZlIHNldmVyYWwgYXNYWFggZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHJldmlzaW9uIDIzMDM3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC05Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9j
YXRpb25Db21tb24obG9jYXRpb24pIHt9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwo
dm9pZCogbG9jYXRpb24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbCByZXRhZ2dl
ZChQdHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSB7IHJldHVybiBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KIH07
CiAKIGNsYXNzIENvZGVMb2NhdGlvbkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsK
QEAgLTEwMiw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9u
KGxvY2F0aW9uKSB7fQogICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkp1bXAodm9pZCogbG9jYXRp
b24pCiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihs
b2NhdGlvbikpIHt9CisKKyAgICBDb2RlTG9jYXRpb25KdW1wIHJldGFnZ2VkKFB0clRhZyBvbGRU
YWcsIFB0clRhZyBuZXdUYWcpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpyZXRhZ2dlZChvbGRUYWcsIG5ld1RhZykpOyB9CiB9OwogCiBjbGFzcyBDb2Rl
TG9jYXRpb25DYWxsIDogcHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjMwMzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw5ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYWxsLmlz
RmxhZ1NldChDYWxsOjpUYWlsKSA/IE5lYXJDYWxsTW9kZTo6VGFpbCA6IE5lYXJDYWxsTW9kZTo6
UmVndWxhcik7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQYXRj
aGFibGVKdW1wIGp1bXApCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQYXRjaGFi
bGVKdW1wIGp1bXAsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7Ci0gICAgICAgIHJldHVy
biBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2Rl
KCksIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBD
b2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCks
IGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpLCB0YWcpKTsKICAgICB9CiAKICAgICBD
b2RlTG9jYXRpb25MYWJlbCBsb2NhdGlvbk9mKExhYmVsIGxhYmVsLCBQdHJUYWcgdGFnID0gTm9Q
dHJUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw4IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVy
YXRvcik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9j
YXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICBQdHJUYWcgb3NyRXhpdFRodW5r
VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKCkpOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIG9zckV4aXRUaHVua0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLnJl
dGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFnKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAg
ICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZv
W2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1w
czsKQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1
bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRU
aHVuay5jb2RlKCkpOworICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NS
RXhpdFB0clRhZywgdm0oKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxv
Y2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5l
YXJKdW1wUHRyVGFnKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+
b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBp
bmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZVByb2JlT1NSRXhpdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw4ICs3OSw4IEBAIHZvaWQgY29t
cGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVn
aXN0ZXJBdE9mZnNldExpc3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9CiAgICAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KHN0YXRlLnByb2MtPmNhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCgpKTsKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCi0gICAg
ICAgIGRhdGFMb2coIlVud2luZCBpbmZvIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0
ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjogIiwgKnJlZ2lzdGVyT2Zm
c2V0cywgIlxuIik7Ci0gICAgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPnNldENhbGxlZVNhdmVS
ZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rlck9mZnNldHMpKTsKKyAgICAgICAgZGF0YUxvZygiVW53
aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUQ29kZTo6
RlRMSklUKSwgIjogIiwgKnJlZ2lzdGVyT2Zmc2V0cywgIlxuIik7CisgICAgY29kZUJsb2NrLT5z
ZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUocmVnaXN0ZXJPZmZzZXRzKSk7CiAgICAgQVNT
RVJUKCEoc3RhdGUucHJvYy0+ZnJhbWVTaXplKCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CiAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudCA9IHN0YXRlLnBy
b2MtPmZyYW1lU2l6ZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIApAQCAtMTM0LDExICsx
MzQsMTIgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRy
eUZyYW1lKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0p
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFn
KEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0pOwogICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rp
b25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKTsK
ICAgICAgICAgfSk7CiAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwpAQCAtMTUyLDcgKzE1Myw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUs
IFNhZmVwb2ludDo6UmUKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFw
cGluZygpKQogICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFr
ZV91bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikp
OwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKDApKTsK
KyAgICBQdHJUYWcgZW50cnlUYWcgPSBwdHJUYWcoRlRMQ29kZVB0clRhZywgY29kZUJsb2NrKTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlu
a0J1ZmZlci0+bG9jYXRpb25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCksIGVudHJ5
VGFnKTsKICAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGxhYmVsLmV4ZWN1dGFibGVBZGRy
ZXNzPEdlbmVyYXRlZEZ1bmN0aW9uPigpOwogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVC
M0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKQEAgLTE2MSw3
ICsxNjMsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAg
ICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OwogICAgICAgICBWZWN0b3I8
Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3Jt
YXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hcHBl
bmRDYXRjaEVudHJ5cG9pbnQoCi0gICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50
cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1v
dmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+
ZW50cnlwb2ludExhYmVsKGVudHJ5cG9pbnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiAgICAgfQog
ICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5maW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0
LmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGNlcHRpb25UYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxMSBAQCBFeGNlcHRp
b25UYXJnZXQ6On5FeGNlcHRpb25UYXJnZXQoKQogewogfQogCi1Db2RlTG9jYXRpb25MYWJlbCBF
eGNlcHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCitDb2RlTG9jYXRp
b25MYWJlbCBFeGNlcHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFB0
clRhZyBoYW5kbGVyVGFnKQogewogICAgIGlmIChtX2lzRGVmYXVsdEhhbmRsZXIpCi0gICAgICAg
IHJldHVybiBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKm1fZGVmYXVsdEhhbmRsZXIpOwotICAgIHJl
dHVybiBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9oYW5kbGUtPmxhYmVsKTsKKyAgICAgICAgcmV0
dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigqbV9kZWZhdWx0SGFuZGxlciwgaGFuZGxlclRhZyk7
CisgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2hhbmRsZS0+bGFiZWwsIGhhbmRs
ZXJUYWcpOwogfQogCiBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gRXhjZXB0aW9uVGFyZ2V0
OjpqdW1wcyhDQ2FsbEhlbHBlcnMmIGppdCkKQEAgLTUwLDEzICs1MCwxMyBAQCBCb3g8Q0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdD4gRXhjZXB0aW9uVGFyCiAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6
OkxhYmVsPiBkZWZhdWx0SGFuZGxlciA9IG1fZGVmYXVsdEhhbmRsZXI7CiAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoKmRlZmF1bHRIYW5kbGVyKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KCpyZXN1bHQsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcpKTsKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBtX2hhbmRsZTsKICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAogICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtCdWZmZXIubG9jYXRp
b25PZihoYW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpy
ZXN1bHQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsLCBERkdPU1JFeGl0UHRy
VGFnKSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25U
YXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+RXhjZXB0
aW9uVGFyZ2V0KCk7CiAKICAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2lu
ZywgYnV0IG5vdCBhbnkgc29vbmVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtC
dWZmZXImKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbChMaW5rQnVmZmVyJiwgUHRyVGFn
IGhhbmRsZXJUYWcpOwogCiAgICAgLy8gT3IsIHlvdSBjYW4gZ2V0IGEgSnVtcExpc3QgYXQgYW55
IHRpbWUuIEFueXRoaW5nIHlvdSBhZGQgdG8gdGhpcyBKdW1wTGlzdCB3aWxsIGJlIGxpbmtlZCB0
bwogICAgIC8vIHRoZSB0YXJnZXQncyBsYWJlbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisj
aW5jbHVkZSAiUHRyVGFnLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApA
QCAtODUsNiArODYsMTIgQEAgSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0
KQogewogICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIq
PigpICsgb2Zmc2V0OworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2FkZHJlc3NGb3JDYWxsLmV4
ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgaWYgKCFvZmZzZXQpCisg
ICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAg
ICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9hZGRyZXNz
Rm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIHJldHVy
biB0YWdDb2RlUHRyKGV4ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0LCBDb2RlRW50cnlQdHJUYWcp
OwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlz
aW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAotTGF6eVNsb3dQYXRoOjpMYXp5U2xvd1BhdGgoCitMYXp5U2xv
d1BhdGg6On5MYXp5U2xvd1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6aW5pdGlh
bGl6ZSgKICAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsIGRvbmUsCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LAogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgsIFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcgogICAgICkKLSAgICA6IG1fcGF0Y2hhYmxl
SnVtcChwYXRjaGFibGVKdW1wKQotICAgICwgbV9kb25lKGRvbmUpCi0gICAgLCBtX2V4Y2VwdGlv
blRhcmdldChleGNlcHRpb25UYXJnZXQpCi0gICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lz
dGVycykKLSAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQotICAgICwgbV9nZW5l
cmF0b3IoZ2VuZXJhdG9yKQotewotfQotCi1MYXp5U2xvd1BhdGg6On5MYXp5U2xvd1BhdGgoKQog
eworICAgIG1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXA7CisgICAgbV9kb25lID0gZG9u
ZTsKKyAgICBtX2V4Y2VwdGlvblRhcmdldCA9IGV4Y2VwdGlvblRhcmdldDsKKyAgICBtX3VzZWRS
ZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOworICAgIG1fY2FsbFNpdGVJbmRleCA9IGNhbGxTaXRl
SW5kZXg7CisgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CiB9CiAKIHZvaWQgTGF6eVNsb3dQ
YXRoOjpnZW5lcmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTYzLDEzICs2MywxNCBAQCB2
b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBtX2dlbmVyYXRv
ci0+cnVuKGppdCwgcGFyYW1zKTsKIAorICAgIFB0clRhZyBzbG93UGF0aFRhZyA9IHB0clRhZyhG
VExMYXp5U2xvd1BhdGhQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KHRoaXMpKTsKICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQpOwotICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUpOwor
ICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUucmV0YWdnZWQoc2xv
d1BhdGhUYWcsIE5lYXJKdW1wUHRyVGFnKSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQot
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0
KTsKLSAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIs
IE5vUHRyVGFnLCAiTGF6eSBzbG93IHBhdGggY2FsbCBzdHViIik7CisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQucmV0YWdnZWQoc2xvd1Bh
dGhUYWcsIE5lYXJKdW1wUHRyVGFnKSk7CisgICAgbV9zdHViID0gRklOQUxJWkVfQ09ERV9GT1Io
Y29kZUJsb2NrLCBsaW5rQnVmZmVyLCBzbG93UGF0aFRhZywgIkxhenkgc2xvdyBwYXRoIGNhbGwg
c3R1YiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVt
cCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChtX3BhdGNoYWJsZUp1bXAucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJK
dW1wUHRyVGFnKSwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0
aFRhZywgTmVhckp1bXBQdHJUYWcpKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02MywxNSArNjMsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOwog
ICAgIH0KLSAgICAKLSAgICBMYXp5U2xvd1BhdGgoCisKKyAgICBMYXp5U2xvd1BhdGgoKSA9IGRl
ZmF1bHQ7CisKKyAgICB+TGF6eVNsb3dQYXRoKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoCiAg
ICAgICAgIENvZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwg
ZG9uZSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICAgICAgQ2FsbFNpdGVJbmRleCwgUmVmUHRy
PEdlbmVyYXRvcj4KICAgICAgICAgKTsKIAotICAgIH5MYXp5U2xvd1BhdGgoKTsKLQogICAgIENv
ZGVMb2NhdGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hhYmxl
SnVtcDsgfQogICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmUoKSBjb25zdCB7IHJldHVybiBtX2Rv
bmU7IH0KICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExp
bmsuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQwLDEzICsxNDAsMTUgQEAgdm9pZCBsaW5r
KFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwog
ICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgICAgICAgICAg
UHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQu
Y2FsbChjYWxsVGFnKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
dm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgICAgICAgICBQdHJUYWcgbG9va3VwVGFn
ID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxl
ckZyYW1lID0gaml0LmNhbGwobG9va3VwVGFnKTsKICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKHZtKTsKICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAK
QEAgLTE1NywxMCArMTU5LDEyIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAg
ICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFw
cGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKE5vUHRy
VGFnKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGpp
dC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgICAgICAgICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgICAgICBtYWluUGF0
aEp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKIAogICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CkBAIC0xNjgsMTMgKzE3MiwxNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgICAgICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9u
Q29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKTsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpOwotICAgICAgICAg
ICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENU
SVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKSkpOworICAgICAgICAgICAgbGlua0J1
ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgRnVuY3Rpb25QdHIoY29kZUJsb2NrLT5tX2lzQ29u
c3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2ssIGNhbGxUYWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOworICAgICAgICAgICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1
Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJU
YWcsICZ2bSksIE5lYXJDYWxsUHRyVGFnKSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci0+bGlu
ayhtYWluUGF0aEp1bXBzLCBDb2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0
YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CisgICAg
ICAgIFB0clRhZyBlbnRyeVRhZyA9IHB0clRhZyhGVExDb2RlUHRyVGFnLCBjb2RlQmxvY2spOwor
ICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKHJldGFnQ29kZVB0cjx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24s
IGVudHJ5VGFnLCBDb2RlRW50cnlQdHJUYWcpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0xODUsNiArMTkwLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAg
ICAgLy8gY2FsbCB0byB0aGUgQjMtZ2VuZXJhdGVkIGNvZGUuCiAgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CisgICAgICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG1haW5QYXRoSnVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgIAogICAg
ICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTE5NCw3ICsyMDAsNyBAQCB2b2lkIGxp
bmsoU3RhdGUmIHN0YXRlKQogICAgICAgICB9CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFp
blBhdGhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKSkpOwogCi0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXJ0KSk7CisgICAgICAgIHN0
YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2NhdGlv
bk9mKHN0YXJ0LCBDb2RlRW50cnlQdHJUYWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE3ICsyODYsMTkgQEAgcHVi
bGljOgogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHRocm93Q2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgUHRy
VGFnIHRocm93VGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0
LmNhbGwodGhyb3dUYWcpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgICAg
ICAgICAgICAgICAgIFB0clRhZyBsb29rdXBUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC5jYWxsKGxvb2t1cFRhZyk7CiAgICAg
ICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAg
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHIob3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93RXJyb3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsodGhyb3dDYWxsLCBGdW5jdGlvblB0cihvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dFcnJvciwgdGhyb3dUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9u
UHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwpAQCAtMzYzLDcgKzM2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAganVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoKmV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmV4Y2VwdGlv
bkhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpKTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTcx
NDUsOCArNzE0Nyw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQ
dHJUYWcsIHZtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShs
aW5rVGFnLCBOZWFyQ2FsbFB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTcyOTQsNyAr
NzI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBwYXRjaGFibGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0
Y2hhYmxlSnVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVh
ckNhbGwgY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihzbG93UGF0aCwgU2xvd1BhdGhQdHJUYWcpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0Q2FsbExvY2F0aW9ucygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0
Y2hhYmxlSnVtcExvY2F0aW9uLApAQCAtNzM0Miw3ICs3MzQ1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNs
b3dQYXRoLCBOZWFyQ2FsbFB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
c2xvd1BhdGhMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAt
NzQ2Niw4ICs3NDY5LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2Fs
bFB0clRhZywgdm0pOwogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2Rl
KGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwpKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNzYxMCw4
ICs3NjE0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAg
ICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwg
Tm9QdHJUYWcpOworICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNhbGxlZSwg
dGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwg
dGFnKTsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBB
c3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIH07CiAKQEAg
LTc3NjUsOCArNzc3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFn
ID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2Fs
bCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCkBAIC03OTQ5LDggKzc5NTUsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZS
ZXVzZWRSZWdpc3RlcnMoKSk7CiAKICAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCBOb1B0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIoY2FsbGVlLCB0YWcpKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCB0YWcpOwogICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2Vt
Ymx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVt
cFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIApAQCAtODA0OCw4ICs4MDU1LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJU
YWcsIHZtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBs
aW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5r
VGFnLCBOZWFyQ2FsbFB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
Lmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExv
Y2F0aW9ucygKQEAgLTgxMzcsOCArODE0NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
cmVxdWlyZWRCeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIHJlcXVpcmVkQnl0ZXMpOwogICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25DYWxsRXZhbCk+KEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSMCwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVy
YXRpb25DYWxsRXZhbCwgdGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BS
MCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJn
dW1lbnRHUFIwLCB0YWcpOwogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQu
ZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4
Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJy
YW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKQEAgLTEzOTYxLDIyICsxMzk3MCwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIHZtKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ySnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENU
SVN0dWIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlT
bG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFySnVtcFB0clRhZykpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6
bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFB0clRhZyBzbG93UGF0aFRhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcs
IGJpdHdpc2VfY2FzdDxQdHJUYWc+KGxhenlTbG93UGF0aC5nZXQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGxpbmtlZFBhdGNoYWJsZUp1bXAg
PSBDb2RlTG9jYXRpb25KdW1wKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHBhdGNoYWJsZUp1bXApKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihkb25lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZihwYXRjaGFibGVKdW1wLCBzbG93UGF0aFRhZykpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxpbmtlZERvbmUg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSwgc2xvd1BhdGhUYWcpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChvcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5
U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aD4oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhenlTbG93UGF0aC0+aW5pdGlhbGl6ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5rZWREb25lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+
bGFiZWwobGlua0J1ZmZlciksIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyLCBzbG93
UGF0aFRhZyksIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbFNpdGVJbmRleCwgZ2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2Rl
LT5sYXp5U2xvd1BhdGhzW2luZGV4XSA9IFdURk1vdmUobGF6eVNsb3dQYXRoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJl
dmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVSZWNvdmVyeSgKIH0KIAogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCi0gICAgdW5z
aWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29k
ZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUHRyVGFnIGV4
aXRTaXRlVGFnKQogewogICAgIC8vIFRoaXMgY29kZSByZXF1aXJlcyBmcmFtZVBvaW50ZXJSZWdp
c3RlciBpcyB0aGUgc2FtZSBhcyBjYWxsRnJhbWVSZWdpc3RlcgogICAgIHN0YXRpY19hc3NlcnQo
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyID09IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAiTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIGFuZCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciBtdXN0IGJlIHRoZSBzYW1lIik7CkBAIC0zMzgsOCArMzM4
LDkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik+KAogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRp
b25Bcmd1bWVudHMpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5P
U1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25BcmdHUFIwLCBOb1B0clRhZyk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25N
YXRlcmlhbGl6ZU9iamVjdEluT1NSLCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCB0YWcpOwogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25Ub1Bv
aW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpOwogCiAgICAgICAgICAgICAvLyBMZXQgZXZlcnlv
bmUga25vdyB0aGF0IHdlJ3JlIGRvbmUuCkBAIC0zNjYsOCArMzY3LDkgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0
ZXJpYWxpemF0aW9uKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
YXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpLAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykp
OwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBOb1B0clRhZyk7
CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRy
VGFnSUQoKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUiwgdGFnKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCB0
YWcpOwogICAgIH0KIAogICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4
aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCkBA
IC00OTQsNyArNDk2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAogICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2
ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSwKLSAgICAgICAgcGF0
Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICBwYXRjaEJ1ZmZlciwgZXhpdFNpdGVUYWcsCiAg
ICAgICAgICJGVEwgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMg
PSAlcyIsCiAgICAgICAgICAgICBleGl0SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbiku
ZGF0YSgpLAogICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0
cmluZygqY29kZUJsb2NrKS5kYXRhKCksCkBAIC01NDIsMTIgKzU0NCwxMyBAQCBleHRlcm4gIkMi
IHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZv
ck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwogCi0gICAgY29tcGlsZVN0dWIoZXhp
dElELCBqaXRDb2RlLCBleGl0LCAmdm0sIGNvZGVCbG9jayk7CisgICAgUHRyVGFnIHRodW5rVGFn
ID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsICZleGl0KTsKKyAgICBjb21waWxlU3R1YihleGl0
SUQsIGppdENvZGUsIGV4aXQsICZ2bSwgY29kZUJsb2NrLCB0aHVua1RhZyk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgIGV4aXQuY29kZUxvY2F0aW9uRm9yUmVw
YXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5jb2RlKCkpKTsK
KyAgICAgICAgZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2Nh
dGlvbkxhYmVsKGV4aXQubV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckp1bXBQdHJU
YWcpKSk7CiAgICAgCi0gICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgIHJldHVybiBleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIGJp
dHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSw5ICs0OSwxMCBAQCB2b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAg
ICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAg
PSBDb2RlTG9jYXRpb25KdW1wKGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKSk7CiAKKyAgICAg
ICAgICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExPU1JFeGl0UHRyVGFnLCAmdm0pOwog
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9qdW1w
LAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIob3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFnKSkpOwogICAgICAgICAg
ICAgaWYgKGNvbXBpbGF0aW9uKQogICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JF
eGl0U2l0ZSh7IGxpbmtCdWZmZXIubG9jYXRpb25PZihteUxhYmVsKS5leGVjdXRhYmxlQWRkcmVz
cygpIH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4MSw3ICs1ODEs
OCBAQCBleHRlcm4gIkMiIHZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUCiAgICAgTGF6eVNs
b3dQYXRoJiBsYXp5U2xvd1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF07CiAg
ICAgbGF6eVNsb3dQYXRoLmdlbmVyYXRlKGNvZGVCbG9jayk7CiAKLSAgICByZXR1cm4gbGF6eVNs
b3dQYXRoLnN0dWIoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBQdHJUYWcgc2xv
d1BhdGhUYWcgPSBwdHJUYWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPigmbGF6eVNsb3dQYXRoKSk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkucmV0
YWdnZWRDb2RlKHNsb3dQYXRoVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAx
LDExICs0MDEsMTEgQEAgcHVibGljOgogICAgIExWYWx1ZSBjYWxsV2l0aG91dFNpZGVFZmZlY3Rz
KEIzOjpUeXBlIHR5cGUsIEZ1bmN0aW9uIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBh
cmdzKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxW
YWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5vbmUoKSwKLSAgICAg
ICAgICAgIGNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgYXJnMSwg
YXJncy4uLik7CisgICAgICAgICAgICBjb25zdEludFB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+
KGZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksIGFyZzEsIGFyZ3MuLi4pOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KLSAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1
bmN0aW9uVHlwZSBmdW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihmdW5jdGlvbikpOyB9CisgICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVu
Y3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuY3Rp
b24sIEIzQ0NhbGxQdHJUYWcpKTsgfQogCiAgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrKTsKICAg
ICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0
IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6
c2NoZWR1bGUKICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9IGhh
bmRsZXI7CiAgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUlu
ZGV4LmJpdHMoKTsKICAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0
ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZl
Q29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhh
bmRsZS0+bGFiZWwsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgICAgICAgICAgICAgICAg
ICBjb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsNyArMTIyLDkgQEAgU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYQog
ewogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gY2FsbFRhcmdldC5leGVjdXRhYmxlQWRk
cmVzcygpOwogICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKGV4ZWN1dGFibGVBZGRyZXNzKTsKLSAg
ICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoTm9QdHJUYWcp
LCBrZXlXaXRoVGFyZ2V0KGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAgU2xvd1BhdGhDYWxsS2V5
IGtleSA9IGtleVdpdGhUYXJnZXQoZXhlY3V0YWJsZUFkZHJlc3MpOworICAgIFB0clRhZyBjYWxs
VGFnID0ga2V5LmNhbGxQdHJUYWcoKTsKKyAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1Bh
dGhDYWxsKG1faml0LmNhbGwoY2FsbFRhZyksIGtleSk7CiAKICAgICBtX2ppdC5hZGRMaW5rVGFz
aygKICAgICAgICAgW3Jlc3VsdCwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShy
ZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShGVExf
SklUKQogCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNjYsNiArNjcsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KHZvaWQqIGNhbGxUYXJn
ZXQpCiAgICAgeworICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY2FsbFRhcmdldCwgQ0Z1bmN0
aW9uUHRyVGFnKTsKICAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJz
KCksIGNhbGxUYXJnZXQsIGFyZ3VtZW50UmVnaXN0ZXJzKCksIG9mZnNldCgpKTsKICAgICB9CiAg
ICAgCkBAIC0xMDIsNiArMTA0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNlZFJl
Z2lzdGVycy5oYXNoKCkgKyBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQpICsgbV9v
ZmZzZXQ7CiAgICAgfQogCisgICAgUHRyVGFnIGNhbGxQdHJUYWcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaW5jbHVkZSBmYWN0b3JzIHdoaWNoIGFyZSBpbnZhcmlh
bnQgZm9yIHRoZSBzYW1lIHNsb3cgcGF0aCBzaXRlLgorICAgICAgICAvLyBtX2NhbGxUYXJnZXQg
Y2FuIHZhcnkgYW5kIHNob3VsZCBiZSBleGNsdWRlZC4KKyAgICAgICAgcmV0dXJuIHB0clRhZyhG
VExTbG93UGF0aFB0clRhZywgbV91c2VkUmVnaXN0ZXJzLmhhc2goKSwgbV9vZmZzZXQpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgdm9p
ZCogbV9jYWxsVGFyZ2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVu
a3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGVudW0gY2xhc3MgRnJh
bWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXIKIH07CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1bmN0
aW9uUHRyIGdlbmVyYXRpb25GdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0
cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50IGZyYW1l
QW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCisgICAgVk0qIHZtLCBGdW5jdGlvblB0ciBn
ZW5lcmF0aW9uRnVuY3Rpb24sIFB0clRhZyByZXN1bHRUaHVua1RhZywgY29uc3QgY2hhciogbmFt
ZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJl
cXVpcmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCiB7CiAgICAgQXNz
ZW1ibHlIZWxwZXJzIGppdChudWxscHRyKTsKIApAQCAtODYsNyArODYsOCBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lCiAgICAgaml0LnBlZWsoCiAgICAgICAgIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwKICAgICAgICAgKHN0YWNrTWlzYWxpZ25tZW50IC0gTWFjcm9B
c3NlbWJsZXI6OnB1c2hUb1NhdmVCeXRlT2Zmc2V0KCkpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOwor
ICAgIFB0clRhZyBnZW5lcmF0b3JDYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywg
bmV4dFB0clRhZ0lEKCkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9
IGppdC5jYWxsKGdlbmVyYXRvckNhbGxUYWcpOwogICAgIAogICAgIC8vIEF0IHRoaXMgcG9pbnQg
d2Ugd2FudCB0byBtYWtlIGEgdGFpbCBjYWxsIHRvIHdoYXQgd2FzIHJldHVybmVkIHRvIHVzIGlu
IHRoZQogICAgIC8vIHJldHVyblZhbHVlR1BSLiBCdXQgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBk
byB0aGlzLCB3ZSBtdXN0IHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KQEAgLTExNSwyNyArMTE2LDMx
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIAogICAgIHJlc3Rv
cmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwogCisjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9J
TlRFUl9QUk9GSUxJTkcpCisgICAgaml0LnVudGFnUHRyKEFzc2VtYmx5SGVscGVyczo6bGlua1Jl
Z2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyNlbmRpZgogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgZ2VuZXJhdGlvbkZ1bmN0aW9uKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICIlcyIsIG5hbWUpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cihnZW5lcmF0aW9uRnVuY3Rpb24sIGdlbmVyYXRv
ckNhbGxUYWcpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgcmVzdWx0
VGh1bmtUYWcsICIlcyIsIG5hbWUpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQ
b3BzVG9SZXN0b3JlID0gMDsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7CisgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4
aXRQdHJUYWcsIHZtKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRv
cigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0LCB0YWcpLCAiRlRM
IE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5k
U3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlv
blB0cihjb21waWxlRlRMT1NSRXhpdCksIHRodW5rVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRp
b24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVx
dWlyZW1lbnQ6Ok5lZWRlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1Bh
dGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJh
UG9wc1RvUmVzdG9yZSA9IDE7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRUaHVua1B0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOworICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExMYXp5
U2xvd1BhdGhQdHJUYWcsIHZtKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dl
bmVyYXRvcigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgs
IHRhZyksICJGVEwgbGF6eSBzbG93IHBhdGggZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1Rv
UmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsK
KyAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgpLCB0aHVua1Rh
ZywgIkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0
b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOb3ROZWVkZWQpOwogfQog
CiBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwg
UmVnaXN0ZXJTZXQgZG9udENsb2JiZXIpCkBAIC0xNjksNyArMTc0LDggQEAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQ
YXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQogewogICAg
IEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7Ci0gICAgCisgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKwogICAgIC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXJzIGF0
IHRoZSBnaXZlbiBvZmZzZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQogICAgIC8vIG9sZCBy
ZXR1cm4gYWRkcmVzcyBzb21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5kIHRoZW4gZmluYWxs
eSB3ZSB3YW50IHRvIG1ha2UgdGhlCiAgICAgLy8gY2FsbC4KQEAgLTE5OSw3ICsyMDUsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgcmVnaXN0
ZXJDbG9iYmVyQ2hlY2soaml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7CiAgICAgCi0gICAg
UHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
KyAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKICAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKGNhbGxU
YWcpOwogCiAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKQEAgLTIyNyw3ICsyMzMsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyKGtleS5jYWxsVGFyZ2V0KCksIGNhbGxUYWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9y
ICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwga2V5LmNhbGxQdHJUYWcoKSwgIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBm
b3IgJXMiLCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGVsdGFGcm9t
U3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c3RhdGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAg
ICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBO
b1B0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0
ZS5zbG93UGF0aFN0YXJ0KSk7CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUoKSBjb25zdCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxOSArNjYsMTkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdl
dChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorc3RhdGljIEZ1
bmN0aW9uUHRyIHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVM
b2NhdGlvbkNhbGwgY2FsbCkKIHsKLSAgICBGdW5jdGlvblB0ciByZXN1bHQgPSBNYWNyb0Fzc2Vt
Ymxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbCk7CisgICAgRnVuY3Rpb25QdHIgdGFyZ2V0ID0gTWFj
cm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOwogI2lmIEVOQUJMRShGVExfSklUKQog
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKGNvZGVCbG9jay0+dm0oKS0+ZnRsVGh1bmtzLT5rZXlGb3JT
bG93UGF0aENhbGxUaHVuaygKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKAotICAgICAgICAgICAgICAgIHJlc3VsdC5leGVjdXRh
YmxlQWRkcmVzcygpKSkuY2FsbFRhcmdldCgpLCBDb2RlRW50cnlQdHJUYWcpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgYXV0byogY2FsbFRhcmdldCA9IGNvZGVCbG9jay0+dm0oKS0+ZnRsVGh1bmtz
LT5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKS5jYWxsVGFyZ2V0KCk7Cisg
ICAgICAgIHJldHVybiBGdW5jdGlvblB0cihjYWxsVGFyZ2V0LCBDRnVuY3Rpb25QdHJUYWcpOwog
ICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gRnVuY3Rpb25QdHIo
dW50YWdDRnVuY3Rpb25QdHIodGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCksIFB1dFByb3BlcnR5
UHRyVGFnKSwgQ0Z1bmN0aW9uUHRyVGFnKTsKIH0KIAogdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRj
aENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCkBAIC04NywxMSArODcsMTIgQEAgdm9pZCBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKICAgICAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0o
KTsKICAgICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2bS5mdGxUaHVua3M7Ci0gICAgICAg
IEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVu
aygKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdl
dChjYWxsKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIEZ1bmN0aW9uUHRyIHRhcmdl
dCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENh
bGxUaHVuayhzbG93UGF0aFRodW5rKTsKICAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0
KG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBuZXdDYWxs
ZWVGdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayhrZXkp
LmNvZGUoKSk7CisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChuZXdDYWxsZWVGdW5jdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpLCBrZXkuY2FsbFB0clRhZygpKTsKICAgICB9CiAjZWxzZSAvLyBF
TkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKQEAgLTExMjQsNyAr
MTEyNSw3IEBAIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAKIAogdm9p
ZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rp
b24gPSB1bnRhZ0NGdW5jdGlvblB0cjxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRh
cmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIFB1dFByb3BlcnR5UHRyVGFnKTsKKyAgICBWX0pJVE9wZXJhdGlvbl9FU3Np
SkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PFZfSklUT3BlcmF0aW9u
X0VTc2lKSkk+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0
aENhbGxMb2NhdGlvbigpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlv
bl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHRyVGFnLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB2KERGR09TUkV4aXRQdHJUYWcpIFwKICAgICB2KERGR09wZXJh
dGlvblB0clRhZykgXAogICAgIHYoRXhjZXB0aW9uSGFuZGxlclB0clRhZykgXAorICAgIHYoRlRM
Q29kZVB0clRhZykgXAorICAgIHYoRlRMTGF6eVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihGVExP
U1JFeGl0UHRyVGFnKSBcCisgICAgdihGVExPcGVyYXRpb25QdHJUYWcpIFwKKyAgICB2KEZUTFNs
b3dQYXRoUHRyVGFnKSBcCiAgICAgdihHZXRQcm9wZXJ0eVB0clRhZykgXAogICAgIHYoR2V0dGVy
U2V0dGVyUHRyVGFnKSBcCiAgICAgdihIYXNQcm9wZXJ0eVB0clRhZykgXApAQCAtNjYsMTMgKzcx
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoU3BlY2lhbGl6ZWRUaHVua1B0clRhZykgXAog
ICAgIHYoU3dpdGNoVGFibGVQdHJUYWcpIFwKICAgICB2KFRocm93RXhjZXB0aW9uUHRyVGFnKSBc
Ci0gICAgXAogICAgIHYoWWFycjhCaXRQdHJUYWcpIFwKICAgICB2KFlhcnIxNkJpdFB0clRhZykg
XAogICAgIHYoWWFyck1hdGNoT25seThCaXRQdHJUYWcpIFwKICAgICB2KFlhcnJNYXRjaE9ubHkx
NkJpdFB0clRhZykgXAogICAgIHYoWWFyckJhY2t0cmFja1B0clRhZykgXAotICAgIFwKICAgICB2
KFdhc21DYWxsUHRyVGFnKSBcCiAgICAgdihXYXNtSGVscGVyUHRyVGFnKSBcCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337454</attachid>
            <date>2018-04-08 02:07:06 -0700</date>
            <delta_ts>2018-04-09 10:33:10 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184395.patch</filename>
            <type>text/plain</type>
            <size>59678</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE4LTA0LTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgcG9pbnRlciBwcm9maWxpbmcgdG8gdGhlIEZUTCBhbmQgc3VwcG9ydGluZyBjb2RlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0Mzk1CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zOTI2NDAxOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6Q29kZUxvY2F0aW9uTGFiZWw6OnJldGFnZ2VkKToKKyAgICAgICAgKEpTQzo6Q29k
ZUxvY2F0aW9uSnVtcDo6cmV0YWdnZWQpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
Lmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxvY2F0aW9uT2YpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToK
KyAgICAgICAgKiBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGNlcHRpb25UYXJnZXQ6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGNlcHRpb25U
YXJnZXQ6Omp1bXBzKToKKyAgICAgICAgKiBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg6CisgICAg
ICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGgu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6fkxhenlTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjppbml0aWFsaXplKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5
U2xvd1BhdGg6OkxhenlTbG93UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExhenlT
bG93UGF0aC5oOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZURpcmVjdENhbGxPckNvbnN0cnVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVUYWlsQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1
Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpsYXp5U2xvd1BhdGgpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRIYW5k
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsp
OgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlRlRMTGF6eVNsb3dQYXRoKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjYWxsV2l0aG91dFNpZGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6Om9wZXJhdGlvbik6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKiBm
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxD
b250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgor
ICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFB0clRhZyBjb25zdCk6CisgICAg
ICAgICogZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVy
YXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVE1hdGhJQy5oOgorICAgICAgICAoSlNDOjpp
c1Byb2ZpbGVFbXB0eSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpyZWFkUHV0SUNDYWxsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6ZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6
cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAg
ICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6Cisg
ICAgICAgIChKU0M6OnJlYWRDYWxsVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVw
YXRjaC5oOgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisKIDIwMTgtMDQtMDcgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3Zl
IHNldmVyYWwgYXNYWFggZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0NvZGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9j
YXRpb24pIHt9CiAgICAgZXhwbGljaXQgQ29kZUxvY2F0aW9uTGFiZWwodm9pZCogbG9jYXRpb24p
CiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2Nh
dGlvbikpIHt9CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbCByZXRhZ2dlZChQdHJUYWcgb2xkVGFn
LCBQdHJUYWcgbmV3VGFnKSB7IHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OnJldGFnZ2VkKG9sZFRhZywgbmV3VGFnKSk7IH0KIH07CiAKIGNsYXNzIENvZGVM
b2NhdGlvbkp1bXAgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKQEAgLTEwMiw2ICsxMDQs
OCBAQCBwdWJsaWM6CiAgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7fQog
ICAgIGV4cGxpY2l0IENvZGVMb2NhdGlvbkp1bXAodm9pZCogbG9jYXRpb24pCiAgICAgICAgIDog
Q29kZUxvY2F0aW9uQ29tbW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihsb2NhdGlvbikpIHt9CisK
KyAgICBDb2RlTG9jYXRpb25KdW1wIHJldGFnZ2VkKFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdU
YWcpIHsgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpyZXRh
Z2dlZChvbGRUYWcsIG5ld1RhZykpOyB9CiB9OwogCiBjbGFzcyBDb2RlTG9jYXRpb25DYWxsIDog
cHVibGljIENvZGVMb2NhdGlvbkNvbW1vbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
Niw5ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYWxsLmlzRmxhZ1NldChDYWxsOjpU
YWlsKSA/IE5lYXJDYWxsTW9kZTo6VGFpbCA6IE5lYXJDYWxsTW9kZTo6UmVndWxhcik7CiAgICAg
fQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQYXRjaGFibGVKdW1wIGp1bXAp
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihQYXRjaGFibGVKdW1wIGp1bXAsIFB0
clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25M
YWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0
KGp1bXAubV9qdW1wLm1fbGFiZWwpKSk7CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGp1
bXAubV9qdW1wLm1fbGFiZWwpLCB0YWcpKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJl
bCBsb2NhdGlvbk9mKExhYmVsIGxhYmVsLCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04Niw3ICs4Niw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cygpCiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
VGh1bmsgPSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JF
eGl0VGh1bmsuY29kZSgpKTsKKyAgICBQdHJUYWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERG
R09TUkV4aXRQdHJUYWcsIHZtKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIG9zckV4aXRUaHVu
a0xhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JF
eGl0VGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFnKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBK
dW1wTGlzdCYgZmFpbHVyZUp1bXBzID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTMyMCw3ICsz
MjEsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPSB2bSgpLT5nZXRD
VElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5jb2RlKCkpOwor
ICAgIFB0clRhZyBvc3JFeGl0VGh1bmtUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0o
KSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3Ny
RXhpdFRodW5rLnJldGFnZ2VkQ29kZShvc3JFeGl0VGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFnKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7
ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29t
cGlsYXRpb25JbmZvW2ldOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlz
aW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03OSw4ICs3OSw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3Rh
dGUsIFNhZmVwb2ludDo6UmUKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExp
c3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9CiAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJB
dE9mZnNldExpc3Q+KHN0YXRlLnByb2MtPmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgp
KTsKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCi0gICAgICAgIGRhdGFMb2coIlVu
d2luZCBpbmZvIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVC
bG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjogIiwgKnJlZ2lzdGVyT2Zmc2V0cywgIlxuIik7Ci0g
ICAgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92
ZShyZWdpc3Rlck9mZnNldHMpKTsKKyAgICAgICAgZGF0YUxvZygiVW53aW5kIGluZm8gZm9yICIs
IENvZGVCbG9ja1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjogIiwg
KnJlZ2lzdGVyT2Zmc2V0cywgIlxuIik7CisgICAgY29kZUJsb2NrLT5zZXRDYWxsZWVTYXZlUmVn
aXN0ZXJzKFdURk1vdmUocmVnaXN0ZXJPZmZzZXRzKSk7CiAgICAgQVNTRVJUKCEoc3RhdGUucHJv
Yy0+ZnJhbWVTaXplKCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgc3RhdGUuaml0
Q29kZS0+Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudCA9IHN0YXRlLnByb2MtPmZyYW1lU2l6ZSgp
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIApAQCAtMTM0LDExICsxMzQsMTIgQEAgdm9pZCBj
b21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNh
bGwoTm9QdHJUYWcpOworICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0
LmNhbGwoY2FsbFRhZyk7CiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogICAg
IGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKTsKICAgICAgICAgfSk7CiAK
ICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PExpbmtCdWZmZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAt
MTUyLDcgKzE1Myw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUK
ICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQogICAgICAg
ICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlxdWU8UENUb0Nv
ZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5N
YXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwogCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxv
Y2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKDApKTsKKyAgICBQdHJUYWcgZW50
cnlUYWcgPSBwdHJUYWcoRlRMQ29kZVB0clRhZywgY29kZUJsb2NrKTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRp
b25PZihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoMCksIGVudHJ5VGFnKTsKICAgICBzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IGxhYmVsLmV4ZWN1dGFibGVBZGRyZXNzPEdlbmVyYXRlZEZ1
bmN0aW9uPigpOwogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3Rh
dGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKQEAgLTE2MSw3ICsxNjMsNyBAQCB2b2lk
IGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IHBhaXIua2V5OwogICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFy
Z3VtZW50Rm9ybWF0cyA9IHN0YXRlLmdyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2VudHJ5cG9pbnRJ
bmRleF07CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hcHBlbmRDYXRjaEVudHJ5cG9p
bnQoCi0gICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVsKGVu
dHJ5cG9pbnRJbmRleCkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3Jt
YXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVjb2RlT2Zmc2V0LCBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhdGUucHJvYy0+ZW50cnlwb2ludExhYmVs
KGVudHJ5cG9pbnRJbmRleCksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiAgICAgfQogICAgIHN0YXRlLmppdENv
ZGUtPmNvbW1vbi5maW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkocmV2aXNpb24g
MjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDExICszNiwxMSBAQCBFeGNlcHRpb25UYXJnZXQ6On5FeGNl
cHRpb25UYXJnZXQoKQogewogfQogCi1Db2RlTG9jYXRpb25MYWJlbCBFeGNlcHRpb25UYXJnZXQ6
OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCitDb2RlTG9jYXRpb25MYWJlbCBFeGNlcHRp
b25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFB0clRhZyBoYW5kbGVyVGFn
KQogewogICAgIGlmIChtX2lzRGVmYXVsdEhhbmRsZXIpCi0gICAgICAgIHJldHVybiBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoKm1fZGVmYXVsdEhhbmRsZXIpOwotICAgIHJldHVybiBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9oYW5kbGUtPmxhYmVsKTsKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIu
bG9jYXRpb25PZigqbV9kZWZhdWx0SGFuZGxlciwgaGFuZGxlclRhZyk7CisgICAgcmV0dXJuIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2hhbmRsZS0+bGFiZWwsIGhhbmRsZXJUYWcpOwogfQogCiBC
b3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gRXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyhDQ2FsbEhl
bHBlcnMmIGppdCkKQEAgLTUwLDEzICs1MCwxMyBAQCBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlz
dD4gRXhjZXB0aW9uVGFyCiAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBkZWZhdWx0
SGFuZGxlciA9IG1fZGVmYXVsdEhhbmRsZXI7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAg
ICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmRlZmF1bHRI
YW5kbGVyKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtC
dWZmZXIubG9jYXRpb25PZigqZGVmYXVsdEhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
KTsKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBoYW5kbGUgPSBtX2hhbmRsZTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxh
YmVsKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKCpyZXN1bHQsIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsLCBERkdPU1JFeGl0UHRyVGFnKSk7CiAgICAgICAg
ICAgICB9KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+RXhjZXB0aW9uVGFyZ2V0KCk7CiAK
ICAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2luZywgYnV0IG5vdCBhbnkg
c29vbmVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtCdWZmZXImKTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbChMaW5rQnVmZmVyJiwgUHRyVGFnIGhhbmRsZXJUYWcpOwog
CiAgICAgLy8gT3IsIHlvdSBjYW4gZ2V0IGEgSnVtcExpc3QgYXQgYW55IHRpbWUuIEFueXRoaW5n
IHlvdSBhZGQgdG8gdGhpcyBKdW1wTGlzdCB3aWxsIGJlIGxpbmtlZCB0bwogICAgIC8vIHRoZSB0
YXJnZXQncyBsYWJlbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBF
TkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiUHRyVGFn
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtODUsNiArODYsMTIg
QEAgSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbAogdm9pZCogSklUQ29k
ZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewogICAgIHJldHVy
biBtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpICsgb2Zmc2V0Owor
ICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNz
KCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBt
X2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICBjaGFyKiBleGVjdXRh
YmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRh
YmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIHJldHVybiB0YWdDb2RlUHRyKGV4
ZWN1dGFibGVBZGRyZXNzICsgb2Zmc2V0LCBDb2RlRW50cnlQdHJUYWcpOwogfQogCiB2b2lkKiBK
SVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAotTGF6eVNsb3dQYXRoOjpMYXp5U2xvd1BhdGgoCitMYXp5U2xvd1BhdGg6On5MYXp5U2xv
d1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6aW5pdGlhbGl6ZSgKICAgICBDb2Rl
TG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRvbmUsCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5l
cmF0b3I+IGdlbmVyYXRvcgogICAgICkKLSAgICA6IG1fcGF0Y2hhYmxlSnVtcChwYXRjaGFibGVK
dW1wKQotICAgICwgbV9kb25lKGRvbmUpCi0gICAgLCBtX2V4Y2VwdGlvblRhcmdldChleGNlcHRp
b25UYXJnZXQpCi0gICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAsIG1f
Y2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQotICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9y
KQotewotfQotCi1MYXp5U2xvd1BhdGg6On5MYXp5U2xvd1BhdGgoKQogeworICAgIG1fcGF0Y2hh
YmxlSnVtcCA9IHBhdGNoYWJsZUp1bXA7CisgICAgbV9kb25lID0gZG9uZTsKKyAgICBtX2V4Y2Vw
dGlvblRhcmdldCA9IGV4Y2VwdGlvblRhcmdldDsKKyAgICBtX3VzZWRSZWdpc3RlcnMgPSB1c2Vk
UmVnaXN0ZXJzOworICAgIG1fY2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5kZXg7CisgICAgbV9n
ZW5lcmF0b3IgPSBnZW5lcmF0b3I7CiB9CiAKIHZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShD
b2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTYzLDEzICs2MywxNCBAQCB2b2lkIExhenlTbG93UGF0
aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFy
YW1zKTsKIAorICAgIFB0clRhZyBzbG93UGF0aFRhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQ
dHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KHRoaXMpKTsKICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotICAgIGxp
bmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUpOworICAgIGxpbmtCdWZmZXIu
bGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJK
dW1wUHRyVGFnKSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKLSAgICBtX3N0dWIg
PSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiTGF6
eSBzbG93IHBhdGggY2FsbCBzdHViIik7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRp
b25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJKdW1w
UHRyVGFnKSk7CisgICAgbV9zdHViID0gRklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5r
QnVmZmVyLCBzbG93UGF0aFRhZywgIkxhenkgc2xvdyBwYXRoIGNhbGwgc3R1YiIpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwobV9zdHViLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCht
X3BhdGNoYWJsZUp1bXAucmV0YWdnZWQoc2xvd1BhdGhUYWcsIE5lYXJKdW1wUHRyVGFnKSwgQ29k
ZUxvY2F0aW9uTGFiZWwobV9zdHViLnJldGFnZ2VkQ29kZShzbG93UGF0aFRhZywgTmVhckp1bXBQ
dHJUYWcpKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MywxNSArNjMsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGNyZWF0
ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOwogICAgIH0KLSAgICAKLSAg
ICBMYXp5U2xvd1BhdGgoCisKKyAgICBMYXp5U2xvd1BhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICB+
TGF6eVNsb3dQYXRoKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoCiAgICAgICAgIENvZGVMb2Nh
dGlvbkp1bXAgcGF0Y2hhYmxlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZSwKICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywKICAgICAgICAgQ2FsbFNpdGVJbmRleCwgUmVmUHRyPEdlbmVyYXRvcj4KICAg
ICAgICAgKTsKIAotICAgIH5MYXp5U2xvd1BhdGgoKTsKLQogICAgIENvZGVMb2NhdGlvbkp1bXAg
cGF0Y2hhYmxlSnVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hhYmxlSnVtcDsgfQogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGRvbmUoKSBjb25zdCB7IHJldHVybiBtX2RvbmU7IH0KICAgICBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lz
dGVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lv
biAyMzAzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTQwLDEzICsxNDAsMTUgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2
bS50b3BDYWxsRnJhbWUpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0
eUNoZWNrID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbChjYWxsVGFnKTsK
IAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2Fs
bChOb1B0clRhZyk7CisgICAgICAgICAgICBQdHJUYWcgbG9va3VwVGFnID0gcHRyVGFnKEZUTE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNh
bGwobG9va3VwVGFnKTsKICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KTsKICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAKQEAgLTE1NywxMCArMTU5
LDEyIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQudW50YWdSZXR1
cm5BZGRyZXNzKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5uZWFyQ2FsbCgpOwog
ICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQu
dW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChq
aXQuanVtcCgpKTsKIAogICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8
TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0x
NjgsMTMgKzE3MiwxNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAg
IHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hl
Y2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlD
aGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpOwotICAgICAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1
cEdlbmVyYXRvcikpLmNvZGUoKSkpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxs
QXJpdHlDaGVjaywgRnVuY3Rpb25QdHIoY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBvcGVy
YXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGNhbGxU
YWcpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOworICAgICAgICAgICAgbGlua0J1ZmZlci0+bGlu
ayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRyVGFnKEFyaXR5Rml4dXBQdHJUYWcsICZ2bSksIE5lYXJD
YWxsUHRyVGFnKSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWluUGF0aEp1bXBz
LCBDb2RlTG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0ZS5qaXRDb2RlLT5p
bml0aWFsaXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CisgICAgICAgIFB0clRhZyBlbnRy
eVRhZyA9IHB0clRhZyhGVExDb2RlUHRyVGFnLCBjb2RlQmxvY2spOworICAgICAgICBzdGF0ZS5q
aXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJl
dGFnQ29kZVB0cjx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24sIGVudHJ5VGFnLCBDb2Rl
RW50cnlQdHJUYWcpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xODUs
NiArMTkwLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgLy8gY2FsbCB0byB0
aGUgQjMtZ2VuZXJhdGVkIGNvZGUuCiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAg
ICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG1haW5QYXRoSnVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBsaW5rQnVmZmVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKQEAgLTE5NCw3ICsyMDAsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICB9CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KSkpOwogCi0gICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChs
aW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXJ0KSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmlu
aXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YXJ0LCBDb2Rl
RW50cnlQdHJUYWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE3ICsyODYsMTkgQEAgcHVibGljOgogCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHRocm93Q2FsbCA9IGpp
dC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgUHRyVGFnIHRocm93VGFnID0g
cHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dDYWxsID0gaml0LmNhbGwodGhyb3dUYWcp
OwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlckNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIFB0
clRhZyBsb29rdXBUYWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRp
b25IYW5kbGVyQ2FsbCA9IGppdC5jYWxsKGxvb2t1cFRhZyk7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHIob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJy
b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3Vw
RXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsodGhyb3dDYWxsLCBGdW5jdGlvblB0cihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgdGhyb3dUYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGxvb2t1cFRhZykpOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMzYzLDcg
KzM2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
KmV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmV4Y2VwdGlvbkhhbmRsZXIsIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTcxNDUsOCArNzE0Nyw5IEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2Fs
bFB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTcyOTQsNyArNzI5Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaGFi
bGVKdW1wTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzbG93UGF0aCwgU2xvd1BhdGhQdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0
aW9ucygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcExvY2F0
aW9uLApAQCAtNzM0Miw3ICs3MzQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dQYXRoTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1Bh
dGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBz
bG93UGF0aExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoLCBOZWFyQ2Fs
bFB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgc2xvd1BhdGhMb2NhdGlv
bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtNzQ2Niw4ICs3NDY5LDkg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAg
ICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJD
YWxsUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNzYxMCw4ICs3NjE0LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgTm9QdHJUYWcpOworICAg
ICAgICAgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywg
bmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGNhbGxlZSwgdGFnKSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgdGFnKTsKICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZt
LCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6
OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTc3NjUsOCArNzc3MCw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtD
YWxsUHRyVGFnLCB2bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCkBAIC03OTQ5LDggKzc5NTUsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMo
KSk7CiAKICAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0g
KHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIwKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwLCBOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdD
RnVuY3Rpb25QdHIoY2FsbGVlLCB0YWcpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIwKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwLCB0YWcpOwogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25z
LT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9y
bWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAg
ICAgICAgICAgICAgfTsKIApAQCAtODA0OCw4ICs4MDU1LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2FsbFB0
clRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGws
IEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTgx
MzcsOCArODE0NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVxdWlyZWRCeXRlcyA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJlcXVpcmVk
Qnl0ZXMpOwogICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25D
YWxsRXZhbCk+KEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DYWxs
RXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApOwotICAgICAgICAg
ICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgTm9Q
dHJUYWcpOworICAgICAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9u
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25DYWxsRXZhbCwg
dGFnKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CisgICAgICAgICAg
ICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwLCB0YWcp
OwogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBB
c3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3Q2NChDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTYxLDIy
ICsxMzk3MCwyNiBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyB0aHVu
a1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIHZtKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9ySnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlTbG93UGF0aEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHRodW5rVGFnLCBOZWFySnVtcFB0clRhZykpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6
eVNsb3dQYXRoPigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyBz
bG93UGF0aFRhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcsIGJpdHdpc2VfY2FzdDxQ
dHJUYWc+KGxhenlTbG93UGF0aC5nZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25KdW1wIGxpbmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25K
dW1wKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHBhdGNoYWJsZUp1bXApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihwYXRjaGFibGVKdW1wLCBzbG93UGF0aFRhZykpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoZG9uZSwgc2xvd1BhdGhUYWcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChv
cmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlT
bG93UGF0aCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2Vf
dW5pcXVlPExhenlTbG93UGF0aD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh
enlTbG93UGF0aC0+aW5pdGlhbGl6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5rZWREb25lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwobGlua0J1ZmZl
ciksIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyLCBzbG93UGF0aFRhZyksIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFNp
dGVJbmRleCwgZ2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5sYXp5U2xvd1BhdGhz
W2luZGV4XSA9IFdURk1vdmUobGF6eVNsb3dQYXRoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVy
eSgKIH0KIAogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCi0gICAgdW5zaWduZWQgZXhpdElELCBK
SVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhp
dCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUHRyVGFnIGV4aXRTaXRlVGFnKQogewog
ICAgIC8vIFRoaXMgY29kZSByZXF1aXJlcyBmcmFtZVBvaW50ZXJSZWdpc3RlciBpcyB0aGUgc2Ft
ZSBhcyBjYWxsRnJhbWVSZWdpc3RlcgogICAgIHN0YXRpY19hc3NlcnQoTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAiTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIGFuZCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciBtdXN0IGJlIHRoZSBzYW1lIik7CkBAIC0zMzgsOCArMzM4LDkgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik+KAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25Bcmd1bWVudHMpKTsK
LSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBO
b1B0clRhZyk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVj
dEluT1NSLCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwLCB0YWcpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIuZ2V0KG1hdGVy
aWFsaXphdGlvbikpOwogCiAgICAgICAgICAgICAvLyBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdl
J3JlIGRvbmUuCkBAIC0zNjYsOCArMzY3LDkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0ZXJpYWxpemF0aW9uKSwK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb25U
b1BvaW50ZXIuZ2V0KG1hdGVyaWFsaXphdGlvbikpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbkFyZ3VtZW50cykpOwotICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBOb1B0clRhZyk7CisgICAgICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoRlRMT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIo
b3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUiwgdGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCB0YWcpOwogICAgIH0KIAog
ICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gd2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1
cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluCkBAIC00OTQsNyArNDk2LDcg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAg
ICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwg
T3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSwKLSAgICAgICAgcGF0Y2hCdWZmZXIsIE5vUHRy
VGFnLAorICAgICAgICBwYXRjaEJ1ZmZlciwgZXhpdFNpdGVUYWcsCiAgICAgICAgICJGVEwgT1NS
IGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCiAgICAgICAg
ICAgICBleGl0SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAogICAgICAg
ICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2Nr
KS5kYXRhKCksCkBAIC01NDIsMTIgKzU0NCwxMyBAQCBleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVG
VExPU1JFeGl0KEV4ZWNTCiAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywg
ZXhpdC5tX2NvZGVPcmlnaW4pOwogCi0gICAgY29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBl
eGl0LCAmdm0sIGNvZGVCbG9jayk7CisgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9T
UkV4aXRQdHJUYWcsICZleGl0KTsKKyAgICBjb21waWxlU3R1YihleGl0SUQsIGppdENvZGUsIGV4
aXQsICZ2bSwgY29kZUJsb2NrLCB0aHVua1RhZyk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoCi0gICAgICAgIGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2sp
LCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5jb2RlKCkpKTsKKyAgICAgICAgZXhpdC5j
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQu
bV9jb2RlLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgTmVhckp1bXBQdHJUYWcpKSk7CiAgICAgCi0g
ICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHJl
dHVybiBleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KGV4ZWMpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhh
bmRsZS5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw5ICs0OSwxMCBAQCB2
b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAgICAgICAgIFtzZWxmLCBq
dW1wLCBteUxhYmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewogICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25K
dW1wKGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKSk7CiAKKyAgICAgICAgICAgIFB0clRhZyB0
aHVua1RhZyA9IHB0clRhZyhGVExPU1JFeGl0UHRyVGFnLCAmdm0pOwogICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9qdW1wLAotICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGUodGh1bmtUYWcsIE5lYXJKdW1wUHRyVGFnKSkpOwogICAgICAgICAgICAgaWYgKGNvbXBpbGF0
aW9uKQogICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0ZSh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZihteUxhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpIH0pOwogICAgICAg
ICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4MSw3ICs1ODEsOCBAQCBleHRlcm4gIkMi
IHZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUCiAgICAgTGF6eVNsb3dQYXRoJiBsYXp5U2xv
d1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF07CiAgICAgbGF6eVNsb3dQYXRo
LmdlbmVyYXRlKGNvZGVCbG9jayk7CiAKLSAgICByZXR1cm4gbGF6eVNsb3dQYXRoLnN0dWIoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBQdHJUYWcgc2xvd1BhdGhUYWcgPSBwdHJU
YWcoRlRMTGF6eVNsb3dQYXRoUHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPigmbGF6eVNsb3dQ
YXRoKSk7CisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkucmV0YWdnZWRDb2RlKHNsb3dQ
YXRoVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAxLDExICs0MDEsMTEgQEAg
cHVibGljOgogICAgIExWYWx1ZSBjYWxsV2l0aG91dFNpZGVFZmZlY3RzKEIzOjpUeXBlIHR5cGUs
IEZ1bmN0aW9uIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxWYWx1ZT4obV9wcm9jLCB0
eXBlLCBvcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5vbmUoKSwKLSAgICAgICAgICAgIGNvbnN0SW50
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgYXJnMSwgYXJncy4uLik7CisgICAg
ICAgICAgICBjb25zdEludFB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmN0aW9uLCBCM0ND
YWxsUHRyVGFnKSksIGFyZzEsIGFyZ3MuLi4pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZT4KLSAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5j
dGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PHZvaWQqPihmdW5jdGlvbikp
OyB9CisgICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVuY3Rpb24pIHsgcmV0dXJu
IGNvbnN0SW50UHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuY3Rpb24sIEIzQ0NhbGxQdHJU
YWcpKTsgfQogCiAgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrKTsKICAgICB2b2lkIGJyYW5jaChM
VmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBM
QmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSw3
ICs5MSw3IEBAIHZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGUKICAgICAg
ICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9IGhhbmRsZXI7CiAgICAgICAg
ICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKICAg
ICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKSAr
IDE7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFu
ZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmFw
cGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDkgQEAg
U2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYQogewogICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzID0gY2FsbFRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGFz
c2VydElzQ0Z1bmN0aW9uUHRyKGV4ZWN1dGFibGVBZGRyZXNzKTsKLSAgICBTbG93UGF0aENhbGwg
cmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoTm9QdHJUYWcpLCBrZXlXaXRoVGFyZ2V0
KGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleSA9IGtleVdpdGhU
YXJnZXQoZXhlY3V0YWJsZUFkZHJlc3MpOworICAgIFB0clRhZyBjYWxsVGFnID0ga2V5LmNhbGxQ
dHJUYWcoKTsKKyAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNh
bGwoY2FsbFRhZyksIGtleSk7CiAKICAgICBtX2ppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW3Jl
c3VsdCwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZpc2lvbiAyMzAzNzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVk
ZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewpAQCAtNjYsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU2xv
d1BhdGhDYWxsS2V5IHdpdGhDYWxsVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpCiAgICAgeworICAg
ICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAg
ICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQs
IGFyZ3VtZW50UmVnaXN0ZXJzKCksIG9mZnNldCgpKTsKICAgICB9CiAgICAgCkBAIC0xMDIsNiAr
MTA0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkg
KyBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQpICsgbV9vZmZzZXQ7CiAgICAgfQog
CisgICAgUHRyVGFnIGNhbGxQdHJUYWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgaW5jbHVkZSBmYWN0b3JzIHdoaWNoIGFyZSBpbnZhcmlhbnQgZm9yIHRoZSBzYW1l
IHNsb3cgcGF0aCBzaXRlLgorICAgICAgICAvLyBtX2NhbGxUYXJnZXQgY2FuIHZhcnkgYW5kIHNo
b3VsZCBiZSBleGNsdWRlZC4KKyAgICAgICAgcmV0dXJuIHB0clRhZyhGVExTbG93UGF0aFB0clRh
ZywgbV91c2VkUmVnaXN0ZXJzLmhhc2goKSwgbV9vZmZzZXQpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CiAgICAgdm9pZCogbV9jYWxsVGFyZ2V0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24g
MjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGVudW0gY2xhc3MgRnJhbWVBbmRTdGFja0FkanVz
dG1lbnRSZXF1aXIKIH07CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dl
bmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIEZ1bmN0aW9uUHRyIGdlbmVyYXRp
b25GdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3Jl
LCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50IGZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQpCisgICAgVk0qIHZtLCBGdW5jdGlvblB0ciBnZW5lcmF0aW9uRnVuY3Rp
b24sIFB0clRhZyByZXN1bHRUaHVua1RhZywgY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgZXh0
cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50IGZyYW1l
QW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGpp
dChudWxscHRyKTsKIApAQCAtODYsNyArODYsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGdlbmVyaWNHZW5lCiAgICAgaml0LnBlZWsoCiAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwKICAgICAgICAgKHN0YWNrTWlzYWxpZ25tZW50IC0gTWFjcm9Bc3NlbWJsZXI6OnB1c2hU
b1NhdmVCeXRlT2Zmc2V0KCkpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgIFB0clRhZyBnZW5l
cmF0b3JDYWxsVGFnID0gcHRyVGFnKEZUTE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxsKGdlbmVy
YXRvckNhbGxUYWcpOwogICAgIAogICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2FudCB0byBtYWtl
IGEgdGFpbCBjYWxsIHRvIHdoYXQgd2FzIHJldHVybmVkIHRvIHVzIGluIHRoZQogICAgIC8vIHJl
dHVyblZhbHVlR1BSLiBCdXQgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBkbyB0aGlzLCB3ZSBtdXN0
IHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KQEAgLTExNSwyNyArMTE2LDMxIEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIAogICAgIHJlc3RvcmVBbGxSZWdpc3RlcnMo
aml0LCBidWZmZXIpOwogCisjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcp
CisgICAgaml0LnVudGFnUHRyKEFzc2VtYmx5SGVscGVyczo6bGlua1JlZ2lzdGVyLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKyNlbmRp
ZgogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgZ2Vu
ZXJhdGlvbkZ1bmN0aW9uKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsICIlcyIsIG5hbWUpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBGdW5jdGlvblB0cihnZW5lcmF0aW9uRnVuY3Rpb24sIGdlbmVyYXRvckNhbGxUYWcpKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgcmVzdWx0VGh1bmtUYWcsICIlcyIs
IG5hbWUpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0g
MDsKLSAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7CisgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEZUTE9TUkV4aXRQdHJUYWcsIHZtKTsK
ICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAgICAgdm0s
IEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0LCB0YWcpLCAiRlRMIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50
UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxlRlRM
T1NSRXhpdCksIHRodW5rVGFnLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRy
YVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRl
ZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9
IDE7Ci0gICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgbmV4dFB0clRhZ0lE
KCkpOworICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhGVExMYXp5U2xvd1BhdGhQdHJUYWcs
IHZtKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVyYXRvcigKLSAgICAg
ICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgsIHRhZyksICJGVEwgbGF6
eSBzbG93IHBhdGggZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVB
bmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsKKyAgICAgICAgdm0sIEZ1
bmN0aW9uUHRyKGNvbXBpbGVGVExMYXp5U2xvd1BhdGgpLCB0aHVua1RhZywgIkZUTCBsYXp5IHNs
b3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0
YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50OjpOb3ROZWVkZWQpOwogfQogCiBzdGF0aWMgdm9pZCBy
ZWdpc3RlckNsb2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9u
dENsb2JiZXIpCkBAIC0xNjksNyArMTc0LDggQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVy
Q2hlY2soQXNzZW1ibAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2Vu
ZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQogewogICAgIEFzc2VtYmx5SGVscGVy
cyBqaXQobnVsbHB0cik7Ci0gICAgCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKwogICAg
IC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXJzIGF0IHRoZSBnaXZlbiBvZmZz
ZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQogICAgIC8vIG9sZCByZXR1cm4gYWRkcmVzcyBz
b21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5kIHRoZW4gZmluYWxseSB3ZSB3YW50IHRvIG1h
a2UgdGhlCiAgICAgLy8gY2FsbC4KQEAgLTE5OSw3ICsyMDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgcmVnaXN0ZXJDbG9iYmVyQ2hlY2so
aml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7CiAgICAgCi0gICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBQdHJUYWcgY2Fs
bFRhZyA9IHB0clRhZyhGVExPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICBB
c3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwogCiAgICAgaml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKQEAgLTIyNyw3ICsyMzMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1Bh
dGhDYWxsVGh1bmtHCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxs
VGFyZ2V0KCksIGNhbGxUYWcpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgTm9QdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5n
KGtleSkuZGF0YSgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwga2V5
LmNhbGxQdHJUYWcoKSwgIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NTdHJp
bmcoa2V5KS5kYXRhKCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw4ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAKICAgICAgICAgYXV0byByZXBsYWNl
Q2FsbCA9IFsmXSAoKSB7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0
clRhZywgbV9pbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoY29kZUJsb2NrLCBzbG93UGF0aENhbGxMb2NhdGlvbigpLCBGdW5jdGlvblB0cihjYWxsUmVw
bGFjZW1lbnQsIHRhZykpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoTWF0
aElDUHRyVGFnLCBtX2luc3RydWN0aW9uKTsKKyAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGNhbGxSZXBsYWNlbWVu
dCwgY2FsbFRhZyk7CiAgICAgICAgIH07CiAKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nID0gIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSk7CkBA
IC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93
UGF0aENhbGxMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoCiAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQ
YXRoQ2FsbCkpOwogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFj
cm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuc2xvd1BhdGhTdGFydCwgTm9QdHJUYWcpKTsK
KyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuc2xvd1BhdGhT
dGFydCkpOwogICAgIH0KIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMzcgKzY2LDQwIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1zdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKK3N0YXRpYyBGdW5jdGlvblB0ciBy
ZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxs
IGNhbGwpCiB7Ci0gICAgRnVuY3Rpb25QdHIgcmVzdWx0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRD
YWxsVGFyZ2V0KGNhbGwpOworICAgIEZ1bmN0aW9uUHRyIHRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKSB7Ci0gICAgICAgIHJldHVybiBG
dW5jdGlvblB0cihjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxs
VGh1bmsoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcygKLSAgICAgICAgICAgICAgICByZXN1bHQuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLmNhbGxUYXJnZXQoKSwgQ29kZUVudHJ5UHRyVGFnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAg
IGF1dG8qIGNhbGxUYXJnZXQgPSBjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsoc2xvd1BhdGhUaHVuaykuY2FsbFRhcmdldCgpOworICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHIoY2FsbFRhcmdldCwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAgICB9CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHVudGFnQ0Z1bmN0
aW9uUHRyKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpLCBQdXRQcm9wZXJ0eVB0clRhZyksIENG
dW5jdGlvblB0clRhZyk7CiB9CiAKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0Nh
bGxlZUZ1bmN0aW9uKQordm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVu
Y3Rpb24sIFB0clRhZyBjYWxsVGFnKQogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlmIChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKICAgICAgICAgVk0mIHZt
ID0gKmNvZGVCbG9jay0+dm0oKTsKICAgICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2bS5m
dGxUaHVua3M7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlG
b3JTbG93UGF0aENhbGxUaHVuaygKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAg
IEZ1bmN0aW9uUHRyIHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxs
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5r
cy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKICAgICAgICAga2V5ID0g
a2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKHRodW5rcy5nZXRTbG93
UGF0aENhbGxUaHVuayhrZXkpLmNvZGUoKSk7CisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChu
ZXdDYWxsZWVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBrZXkuY2FsbFB0clRhZygpKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0
aW9uKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbHNlIC8vIEVOQUJMRShGVExfSklUKQog
ICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyKG5ld0Nh
bGxlZUZ1bmN0aW9uLCBjYWxsVGFnKSk7CiB9CiAKIGVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewpA
QCAtMTkzLDcgKzE5Niw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
SUQKIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4o
YmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJv
cHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1p
emluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0yNTAsNyArMjUzLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnlJRAogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAg
ICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIo
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0
clRhZykpOworICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFnKTsKICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICB9CkBAIC0zNzAsNyArMzczLDcgQEAgdm9pZCBy
ZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgIAogICAgIGlmICh0cnlDYWNo
ZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBr
aW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJv
cHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpKTsK
KyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtp
bmQpLCBHZXRQcm9wZXJ0eVB0clRhZyk7CiAgICAgfQogfQogCkBAIC00NDIsNyArNDQ1LDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0
bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExv
Y2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSwgUHV0UHJvcGVydHlQdHJUYWcpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSwgUHV0UHJvcGVydHlQdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU3Niw3ICs1NzksNyBAQCB2b2lk
IHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgCiAgICAgaWYgKHRyeUNh
Y2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkgewogICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBmdGxUaHVua0F3YXJl
UmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBG
dW5jdGlvblB0cihhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIFB1dFByb3BlcnR5UHRyVGFnKSk7CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgUHV0UHJvcGVydHlQdHJUYWcp
OwogICAgIH0KIH0KIApAQCAtNjY1LDcgKzY2OCw3IEBAIHZvaWQgcmVwYXRjaEluKAogewogICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBpZiAodHJ5
Q2FjaGVJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9PSBH
aXZlVXBPbkNhY2hlKQotICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wZXJhdGlvbkluKTsK
KyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBvcGVyYXRpb25JbiwgQ0Z1bmN0aW9uUHRyVGFn
KTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIFB0clRhZyBsaW5rVGFnKQpA
QCAtMTExOCwxMyArMTEyMSwxMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKIHZvaWQg
cmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIo
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0
clRhZykpOworICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5j
dGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwog
fQogCiB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQogewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9IHVudGFnQ0Z1bmN0aW9uUHRyPFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJl
YWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgUHV0UHJvcGVydHlQdHJUYWcpOworICAgIFZfSklUT3BlcmF0
aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vl9KSVRP
cGVyYXRpb25fRVNzaUpKST4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZv
LnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklU
T3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC0xMTM3LDcgKzExNDAs
NyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OwogICAgIH0KIAotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKG9wdGltaXplZEZ1bmN0aW9u
LCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9u
LCBQdXRQcm9wZXJ0eVB0clRhZyk7CiAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
KHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2FsCiB2b2lkIHJl
c2V0R2V0QnlJRChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5SURLaW5kKTsK
IHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IHJlc2V0SW4oQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGwsIEZ1bmN0aW9uUHRy
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVC
bG9jayosIENvZGVMb2NhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uLCBQ
dHJUYWcgY2FsbFRhZyk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoREZHT1NSRXhpdFB0clRhZykgXAogICAgIHYo
REZHT3BlcmF0aW9uUHRyVGFnKSBcCiAgICAgdihFeGNlcHRpb25IYW5kbGVyUHRyVGFnKSBcCisg
ICAgdihGVExDb2RlUHRyVGFnKSBcCisgICAgdihGVExMYXp5U2xvd1BhdGhQdHJUYWcpIFwKKyAg
ICB2KEZUTE9TUkV4aXRQdHJUYWcpIFwKKyAgICB2KEZUTE9wZXJhdGlvblB0clRhZykgXAorICAg
IHYoRlRMU2xvd1BhdGhQdHJUYWcpIFwKICAgICB2KEdldFByb3BlcnR5UHRyVGFnKSBcCiAgICAg
dihHZXR0ZXJTZXR0ZXJQdHJUYWcpIFwKICAgICB2KEhhc1Byb3BlcnR5UHRyVGFnKSBcCkBAIC02
NiwxMyArNzEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihTcGVjaWFsaXplZFRodW5rUHRy
VGFnKSBcCiAgICAgdihTd2l0Y2hUYWJsZVB0clRhZykgXAogICAgIHYoVGhyb3dFeGNlcHRpb25Q
dHJUYWcpIFwKLSAgICBcCiAgICAgdihZYXJyOEJpdFB0clRhZykgXAogICAgIHYoWWFycjE2Qml0
UHRyVGFnKSBcCiAgICAgdihZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZykgXAogICAgIHYoWWFyck1h
dGNoT25seTE2Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyQmFja3RyYWNrUHRyVGFnKSBcCi0gICAg
XAogICAgIHYoV2FzbUNhbGxQdHJUYWcpIFwKICAgICB2KFdhc21IZWxwZXJQdHJUYWcpIFwKIAo=
</data>
<flag name="review"
          id="355897"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>