<?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>184784</bug_id>
          
          <creation_ts>2018-04-19 09:26:14 -0700</creation_ts>
          <short_desc>[JSC] Remove ModuleLoaderPrototype</short_desc>
          <delta_ts>2018-04-22 06:46:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1415944</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-19 09:26:14 -0700</bug_when>
    <thetext>[JSC] Remove ModuleLoaderPrototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415946</commentid>
    <comment_count>1</comment_count>
      <attachid>338328</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-19 09:27:42 -0700</bug_when>
    <thetext>Created attachment 338328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415948</commentid>
    <comment_count>2</comment_count>
      <attachid>338329</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-19 09:30:32 -0700</bug_when>
    <thetext>Created attachment 338329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415952</commentid>
    <comment_count>3</comment_count>
      <attachid>338331</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-19 09:35:03 -0700</bug_when>
    <thetext>Created attachment 338331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416735</commentid>
    <comment_count>4</comment_count>
      <attachid>338331</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-21 22:01:23 -0700</bug_when>
    <thetext>Comment on attachment 338331
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416756</commentid>
    <comment_count>5</comment_count>
      <attachid>338331</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-22 06:18:39 -0700</bug_when>
    <thetext>Comment on attachment 338331
Patch

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416757</commentid>
    <comment_count>6</comment_count>
      <attachid>338331</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-22 06:45:02 -0700</bug_when>
    <thetext>Comment on attachment 338331
Patch

Clearing flags on attachment: 338331

Committed r230900: &lt;https://trac.webkit.org/changeset/230900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416758</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-22 06:45:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416759</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-22 06:46:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/39628713&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338328</attachid>
            <date>2018-04-19 09:27:42 -0700</date>
            <delta_ts>2018-04-19 09:30:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184784-20180420012741.patch</filename>
            <type>text/plain</type>
            <size>75321</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YzkwM2YyMDhiOTc2ZmMzYWVjNjAyY2M1OGRlMWMxNDJiNjMyMWI5Li45ZDUyOGZjNjQxNTE5OWQ1
NGZiOGZiYWZjM2I0ZmRlZWMxYTU4YmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxOC0wNC0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBSZW1vdmUgTW9kdWxlTG9hZGVyUHJvdG90eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIGludHJv
ZHVjZSBNb2R1bGVMb2FkZXJQcm90b3R5cGUsIE1vZHVsZUxvYWRlciBtYXkgYmUgY3JlYXRlZCBi
eSB1c2VycyBhbmQgZXhwb3NlZCB0byB1c2Vycy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGxvYWRl
ciBzcGVjIGlzIGFiYW5kb25lZC4gU28gd2UgZG8gbm90IG5lZWQgdG8gaGF2ZSBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUgYW5kIEpTTW9kdWxlTG9hZGVyLgorICAgICAgICBUaGlzIHBhdGNoIG1lcmdl
cyBNb2R1bGVMb2FkZXJQcm90b3R5cGUncyBmdW5jdGlvbmFsaXR5IGludG8gSlNNb2R1bGVMb2Fk
ZXIuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVs
ZUxvYWRlclByb3RvdHlwZS5qcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHJveHlSZXZva2VTdHJ1
Y3R1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
U3RydWN0dXJlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUpOgorICAgICAg
ICAoSlNDOjptb2R1bGVMb2FkZXJSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6
bW9kdWxlTG9hZGVyUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclJlc29sdmVT
eW5jKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpt
b2R1bGVMb2FkZXJHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QpOgorICAgICAgICAoSlNDOjptb2R1
bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oOiBSZW1vdmVkLgorCiAyMDE4
LTA0LTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIEZpeCBqc2Mgc2hlbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAzYzQwNWNkMDc3NDU5NDU4MmQ0NWQyODhlZGQ5MWU4ZDQ3YzFmYTJiLi5iZjU4MTM0
ZjA3ZGY3ZmRmYjM2NmNhNWEwNjYxMmQ3MTQzZDY0ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC03NSwxMSArNzUsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVD
VF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VD
b25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAogICAgIHJ1bnRp
bWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAog
ICAgIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAotICAgIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAogICAgIHJ1bnRp
bWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMDIsNyArMTEwMiw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwotICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvTW9kdWxlTG9hZGVyLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9idWlsdGlucy9PYmplY3RDb25zdHJ1Y3Rvci5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCAwZmRkYzNhOTE2MTJjYTkzM2Q2NGYxMTIxODQxYTI3ODRi
NDc0YjdjLi44Mjk1NjkwYzdjNWI3NDI5ZGE2ZjE1Y2YxZTc2YjMyYjM1OWI1MjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTA4LDcgKzEwOCw3IEBA
IEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3Jl
KS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL01vZHVsZUxvYWRlclByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvTW9kdWxlTG9hZGVyLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9O
dW1iZXJDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVt
YmVyUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9PYmplY3RD
b25zdHJ1Y3Rvci5qcyBcCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBPQkpFQ1RfTFVUX0hFQURFUlMg
PSBcCiAgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3Qu
bHV0LmggXAogICAgIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggXAorICAgIEpT
TW9kdWxlTG9hZGVyLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21p
c2VQcm90b3R5cGUubHV0LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBNYXBQcm90b3R5cGUubHV0LmggXAotICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBc
CiAgICAgTnVtYmVyQ29uc3RydWN0b3IubHV0LmggXAogICAgIE51bWJlclByb3RvdHlwZS5sdXQu
aCBcCiAgICAgT2JqZWN0Q29uc3RydWN0b3IubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBiZTU5M2UyOGFiMDY2MGFlZWFjZGVlMmViM2UyMTgxZmRlYzBmZWFlLi42YWMw
ODE2YmVkMGM3MDIyZTBkNmEyNThjZTM2ZTMwNWE1YzNjMjcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAkJOTk2QjczMUQxQkRBMDhFRjAwMzMx
Qjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEIxQkQ5RkEyQzAwMzMxQjg0IC8qIEpTR2xvYmFsT2Jq
ZWN0Lmx1dC5oICovOyB9OwogCQk5OTZCNzMxRTFCREEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNl
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzE4NEUyNDE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggKi87IH07CiAJCTk5NkI3MzFGMUJEQTA4RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE4NEUyNTE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oICov
OyB9OwotCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2
QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCAqLzsg
fTsKKwkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlci5sdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5NkI3MzBDMUJEOUZB
MkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggKi87IH07CiAJCTk5NkI3
MzIxMUJEQTA4RUYwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwRDFCRDlGQTJDMDAzMzFC
ODQgLyogTnVtYmVyUHJvdG90eXBlLmx1dC5oICovOyB9OwogCQk5OTZCNzMyMjFCREEwOEVGMDAz
MzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwRTFCRDlGQTJDMDAzMzFCODQgLyogT2JqZWN0
Q29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCTk5NkI3MzIzMUJEQTA4RUYwMDMzMUI4NCAvKiBS
ZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTk2QjczMEYxQkQ5RkEyQzAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0Lmgg
Ki87IH07CkBAIC0xNzA0LDcgKzE3MDQsNiBAQAogCQlFMzUwNzA4QTFEQzQ5QkJGMDA4OUJDRDYg
LyogRE9NSklUU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzUwNzA4OTFEQzQ5QkI2MDA4OUJDRDYgLyogRE9NSklUU2lnbmF0dXJlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1NDYy
MkIxQjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJBMUI2MDY1RDEwMDU0NTM4NiAv
KiBDb25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTM1NTVCOEExREFFMDNBNTAwRjM2OTIxIC8qIERPTUpJVENhbGxET01H
ZXR0ZXJTbmlwcGV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzU1NUI4OTFEQUUwM0EyMDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBw
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlF
MzU1RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFCN0RDODUz
MDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi87IH07CiAJCUUzNUNBMTU0MURC
QzNBNUMwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01K
SVRIZWFwUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzVDQTE1NjFEQkMzQTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFE
QkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1RTAzNjAxQjdBQjQzRTAwNzNBRDJB
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zODYyLDcgKzM4NjEsNyBAQAogCQk5OTZCNzMwOTFC
RDlGQTJDMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVycm9yUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OTZCNzMwQTFCRDlGQTJDMDAzMzFCODQgLyogSlNEYXRhVmlld1Byb3RvdHlw
ZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3Rv
dHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEIxQkQ5RkEy
QzAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5s
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTZCNzMwQzFCRDlGQTJD
MDAzMzFCODQgLyogTW9kdWxlTG9hZGVyLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5NkI3MzBEMUJEOUZBMkMwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE51bWJlclByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEUxQkQ5RkEyQzAwMzMxQjg0
IC8qIE9iamVjdENvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPYmplY3RDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTk2QjczMEYxQkQ5RkEyQzAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZmxlY3RPYmplY3QubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTE3LDcgKzQ1MTYsNyBAQAogCQlFMTc4NjM2QzBEOUJF
RUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplVGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBWTS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29k
ZS5sYW5nLm9iamNwcDsgfTsKIAkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBWTS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRp
ZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwotCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyog
TW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBl
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE2MTgxMDFFQzVGRTA4MDAwNkEy
MTggLyogRE9NQW5ub3RhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01Bbm5vdGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTYxODExMUVD
NUZFMDgwMDA2QTIxOCAvKiBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNjE4MTIxRUM1RkUwODAwMDZBMjE4IC8q
IERPTUF0dHJpYnV0ZUdldHRlclNldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ1NTMsOCArNDU1Miw2IEBACiAJCUUzNTA3MDg5MURDNDlCQjYwMDg5QkNENiAvKiBE
T01KSVRTaWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklU
U2lnbmF0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNTQ2MjJBMUI2MDY1
RDEwMDU0NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbnN0cnVjdEFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM1NTVCODkxREFFMDNBMjAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0ZXJTbmlwcGV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVENhbGxET01HZXR0ZXJT
bmlwcGV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzNTVGMzUwMUI3REM4NTMw
MEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRl
clByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNEYxREJD
M0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJh
Y3RIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEFic3RyYWN0
SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MTFEQkMzQTU2MDBG
ODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MTg2LDcgKzYxODMsNyBAQAogCQkJCUJDMThDNTJEMEUxNkZDRTEwMEIzNDQ2MCAvKiBM
ZXhlci5sdXQuaCAqLywKIAkJCQk3MERFOUEwODFCRTdENjcwMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oICovLAogCQkJCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
bHV0LmggKi8sCi0JCQkJOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclBy
b3RvdHlwZS5sdXQuaCAqLywKKwkJCQk5OTZCNzMwQzFCRDlGQTJDMDAzMzFCODQgLyogTW9kdWxl
TG9hZGVyLmx1dC5oICovLAogCQkJCUJDMjY4MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBOdW1iZXJD
b25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMwRDFCRDlGQTJDMDAzMzFCODQgLyogTnVt
YmVyUHJvdG90eXBlLmx1dC5oICovLAogCQkJCTk5NkI3MzBFMUJEOUZBMkMwMDMzMUI4NCAvKiBP
YmplY3RDb25zdHJ1Y3Rvci5sdXQuaCAqLywKQEAgLTY4MjIsOCArNjgxOSw2IEBACiAJCQkJOTAy
MTNFM0MxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLywKIAkJCQk3QzAw
OENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8sCiAJCQkJRkUyQTg3NUYxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8sCi0JCQkJRTM1NUYz
NTAxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgKi8sCi0JCQkJ
RTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oICovLAog
CQkJCTE0NzM0MUREMURDMkNFOTYwMEFBMjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAgKi8sCiAJCQkJMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmggKi8sCiAJCQkJQkMwMkU5MDgwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwICovLApAQCAtNzkyNyw3ICs3OTIyLDcgQEAKIAkJCQlFMzNGNTA4ODFC
ODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJ
N0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJ
CTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8sCi0JCQkJRTMw
Njc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5qcyAqLywKKwkJ
CQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAogCQkJCUE1
MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQlB
MTVERTVDNTFDMEZCRjhEMDA4OTEzM0QgLyogTnVtYmVyUHJvdG90eXBlLmpzICovLAogCQkJCTdD
RjlCQzVDMUI2NUQ5QjEwMDlEQjFFRiAvKiBPYmplY3RDb25zdHJ1Y3Rvci5qcyAqLywKQEAgLTkx
OTUsOCArOTE5MCw3IEBACiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBt
b2RlbHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlFMzc5NEU3NjFCNzdFQjk3MDA1NTQzQUUgLyog
TW9kdWxlQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUUzNTVGMzUzMUI3REM4NTMwMEM1
MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTk5NkI3
MzIwMUJEQTA4RUYwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUY2MzQzNDU3NzI3NEZBRkI5MzM2QzM4IC8qIE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTBGMURDQTky
OTQwMDE0RjlGRSAvKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDczNDFENjFEQzAyRUI5MDBBQTI5QkEgLyogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDRiM2Q5ZjdlYzUw
NDA4MGI3MjMwODAzMmE3ZDJlYTcwY2RjYmZiNWIuLjUwNzViYjNkNzFkNjIwY2U4OTM5NjJlMGI5
MGMxMThlMDE5ZjdjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTg1Nyw3ICs4
NTcsNiBAQCBydW50aW1lL01hdGNoUmVzdWx0LmNwcAogcnVudGltZS9NYXRoQ29tbW9uLmNwcAog
cnVudGltZS9NYXRoT2JqZWN0LmNwcAogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAotcnVu
dGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmNwcAogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAogcnVudGltZS9O
YXRpdmVFcnJvclByb3RvdHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9Nb2R1bGVMb2FkZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvTW9kdWxlTG9hZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlZjkxZWI4NjU1MWZhOTMxOTdjMTRkODA5
MDhkZDY5ZjU2ZGM3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvTW9kdWxlTG9hZGVyLmpzCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gaHR0cHM6Ly93aGF0d2cu
Z2l0aHViLmlvL2xvYWRlci8jbG9hZGVyLW9iamVjdAorLy8gTW9kdWxlIExvYWRlciBoYXMgc2V2
ZXJhbCBob29rcyB0aGF0IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSBwbGF0Zm9ybS4KKy8vIEZv
ciBleGFtcGxlLCB0aGUgW1tGZXRjaF1dIGhvb2sgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBKYXZh
U2NyaXB0Q29yZSBzaGVsbAorLy8gYXMgZmV0Y2hpbmcgdGhlIHBheWxvYWQgZnJvbSB0aGUgbG9j
YWwgZmlsZSBzeXN0ZW0uCisvLyBDdXJyZW50bHksIHRoZXJlIGFyZSA0IGhvb2tzLgorLy8gICAg
MS4gTG9hZGVyLnJlc29sdmUKKy8vICAgIDIuIExvYWRlci5mZXRjaAorCitAZ2xvYmFsUHJpdmF0
ZQorZnVuY3Rpb24gc2V0U3RhdGVUb01heChlbnRyeSwgbmV3U3RhdGUpCit7CisgICAgLy8gaHR0
cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jc2V0LXN0YXRlLXRvLW1heAorCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgaWYgKGVudHJ5LnN0YXRlIDwgbmV3U3RhdGUpCisgICAgICAgIGVu
dHJ5LnN0YXRlID0gbmV3U3RhdGU7Cit9CisKK0BnbG9iYWxQcml2YXRlCitmdW5jdGlvbiBuZXdS
ZWdpc3RyeUVudHJ5KGtleSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9h
ZGVyLyNyZWdpc3RyeQorICAgIC8vCisgICAgLy8gRWFjaCByZWdpc3RyeSBlbnRyeSBiZWNvbWVz
IG9uZSBvZiB0aGUgNSBzdGF0ZXMuCisgICAgLy8gMS4gRmV0Y2gKKyAgICAvLyAgICAgUmVhZHkg
dG8gZmV0Y2ggKG9yIG5vdyBmZXRjaGluZykgdGhlIHJlc291cmNlIG9mIHRoaXMgbW9kdWxlLgor
ICAgIC8vICAgICBUeXBpY2FsbHksIHdlIGZldGNoIHRoZSBzb3VyY2UgY29kZSBvdmVyIHRoZSBu
ZXR3b3JrIG9yIGZyb20gdGhlIGZpbGUgc3lzdGVtLgorICAgIC8vICAgICBhLiBJZiB0aGUgc3Rh
dHVzIGlzIEZldGNoIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50
cnkgaXMgcmVhZHkgdG8gZmV0Y2guCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgRmV0
Y2ggYW5kIHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50cnkgaXMganVz
dCBmZXRjaGluZyB0aGUgcmVzb3VyY2UuCisgICAgLy8KKyAgICAvLyAyLiBJbnN0YW50aWF0ZSAo
QW5hbHl6ZU1vZHVsZSkKKyAgICAvLyAgICAgUmVhZHkgdG8gaW5zdGFudGlhdGUgKG9yIG5vdyBp
bnN0YW50aWF0aW5nKSB0aGUgbW9kdWxlIHJlY29yZCBmcm9tIHRoZSBmZXRjaGVkCisgICAgLy8g
ICAgIHNvdXJjZSBjb2RlLgorICAgIC8vICAgICBUeXBpY2FsbHksIHdlIHBhcnNlIHRoZSBtb2R1
bGUgY29kZSwgZXh0cmFjdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBiaW5kaW5nIGluZm9ybWF0aW9u
LgorICAgIC8vICAgICBhLiBJZiB0aGUgc3RhdHVzIGlzIEluc3RhbnRpYXRlIGFuZCB0aGVyZSBp
cyBubyBlbnRyeS5pbnN0YW50aWF0ZSBwcm9taXNlLCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gaW5z
dGFudGlhdGUuCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5k
IHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50cnkgaXMganVzdCBpbnN0
YW50aWF0aW5nCisgICAgLy8gICAgICAgIHRoZSBtb2R1bGUgcmVjb3JkLgorICAgIC8vCisgICAg
Ly8gMy4gU2F0aXNmeQorICAgIC8vICAgICBSZWFkeSB0byByZXF1ZXN0IHRoZSBkZXBlbmRlbnQg
bW9kdWxlcyAob3Igbm93IHJlcXVlc3RpbmcgJiByZXNvbHZpbmcpLgorICAgIC8vICAgICBXaXRo
b3V0IHRoaXMgc3RhdGUsIHRoZSBjdXJyZW50IGRyYWZ0IGNhdXNlcyBpbmZpbml0ZSByZWN1cnNp
b24gd2hlbiB0aGVyZSBpcyBjaXJjdWxhciBkZXBlbmRlbmN5LgorICAgIC8vICAgICBhLiBJZiB0
aGUgc3RhdHVzIGlzIFNhdGlzZnkgYW5kIHRoZXJlIGlzIG5vIGVudHJ5LnNhdGlzZnkgcHJvbWlz
ZSwgdGhlIGVudHJ5IGlzIHJlYWR5IHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcy4KKyAgICAv
LyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBTYXRpc2Z5IGFuZCB0aGVyZSBpcyB0aGUgZW50cnku
c2F0aXNmeSBwcm9taXNlLCB0aGUgZW50cnkgaXMganVzdCByZXNvbHZpbmcKKyAgICAvLyAgICAg
ICAgdGhlIGRlcGVuZGVuY2llcy4KKyAgICAvLworICAgIC8vIDQuIExpbmsKKyAgICAvLyAgICAg
UmVhZHkgdG8gbGluayB0aGUgbW9kdWxlIHdpdGggdGhlIG90aGVyIG1vZHVsZXMuCisgICAgLy8g
ICAgIExpbmtpbmcgbWVhbnMgdGhhdCB0aGUgbW9kdWxlIGltcG9ydHMgYW5kIGV4cG9ydHMgdGhl
IGJpbmRpbmdzIGZyb20vdG8gdGhlIG90aGVyIG1vZHVsZXMuCisgICAgLy8KKyAgICAvLyA1LiBS
ZWFkeQorICAgIC8vICAgICBUaGUgbW9kdWxlIGlzIGxpbmtlZCwgc28gdGhlIG1vZHVsZSBpcyBy
ZWFkeSB0byBiZSBleGVjdXRlZC4KKyAgICAvLworICAgIC8vIEVhY2ggcmVnaXN0cnkgZW50cnkg
aGFzIHRoZSA0IHByb21pc2VzOyAiZmV0Y2giLCAiaW5zdGFudGlhdGUiIGFuZCAic2F0aXNmeSIu
CisgICAgLy8gVGhleSBhcmUgYXNzaWduZWQgd2hlbiBzdGFydGluZyB0aGUgZWFjaCBwaGFzZS4g
QW5kIHRoZXkgYXJlIGZ1bGZpbGxlZCB3aGVuIHRoZSBlYWNoIHBoYXNlIGlzIGNvbXBsZXRlZC4K
KyAgICAvLworICAgIC8vIEluIHRoZSBjdXJyZW50IG1vZHVsZSBkcmFmdCwgbGlua2luZyB3aWxs
IGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgd2hvbGUgbW9kdWxlcyBhcmUgaW5zdGFudGlhdGVkIGFu
ZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZXNvbHZlZC4KKyAgICAvLyBBbmQgZXhlY3V0aW9uIGlz
IGFsc28gZG9uZSBhZnRlciB0aGUgYWxsIG1vZHVsZXMgYXJlIGxpbmtlZC4KKyAgICAvLworICAg
IC8vIFRPRE86IFdlIG5lZWQgdG8gZXhwbG9pdCB0aGUgd2F5IHRvIGV4ZWN1dGUgdGhlIG1vZHVs
ZSB3aGlsZSBmZXRjaGluZyBub24tcmVsYXRlZCBtb2R1bGVzLgorICAgIC8vIE9uZSBzb2x1dGlv
bjsgaW50cm9kdWNpbmcgdGhlIHJlYWR5IHByb21pc2UgY2hhaW4gdG8gZXhlY3V0ZSB0aGUgbW9k
dWxlcyBjb25jdXJyZW50bHkgd2hpbGUga2VlcGluZworICAgIC8vIHRoZSBleGVjdXRpb24gb3Jk
ZXIuCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IGtl
eSwKKyAgICAgICAgc3RhdGU6IEBNb2R1bGVGZXRjaCwKKyAgICAgICAgZmV0Y2g6IEB1bmRlZmlu
ZWQsCisgICAgICAgIGluc3RhbnRpYXRlOiBAdW5kZWZpbmVkLAorICAgICAgICBzYXRpc2Z5OiBA
dW5kZWZpbmVkLAorICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLCAvLyBUbyBrZWVwIHRoZSBtb2R1
bGUgb3JkZXIsIHdlIHN0b3JlIHRoZSBtb2R1bGUga2V5cyBpbiB0aGUgYXJyYXkuCisgICAgICAg
IG1vZHVsZTogQHVuZGVmaW5lZCwgLy8gSlNNb2R1bGVSZWNvcmQKKyAgICAgICAgbGlua0Vycm9y
OiBAdW5kZWZpbmVkLAorICAgICAgICBsaW5rU3VjY2VlZGVkOiB0cnVlLAorICAgICAgICBldmFs
dWF0ZWQ6IGZhbHNlLAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGVuc3VyZVJlZ2lzdGVyZWQoa2V5
KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Vuc3VyZS1yZWdp
c3RlcmVkCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLnJlZ2lz
dHJ5LkBnZXQoa2V5KTsKKyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgIGVudHJ5ID0gQG5ld1JlZ2lzdHJ5RW50cnkoa2V5KTsKKyAgICB0aGlzLnJlZ2lzdHJ5LkBz
ZXQoa2V5LCBlbnRyeSk7CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK2Z1bmN0aW9uIGZvcmNl
RnVsZmlsbFByb21pc2UocHJvbWlzZSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKEBnZXRCeUlkRGlyZWN0UHJpdmF0ZShwcm9taXNlLCAicHJvbWlzZVN0YXRlIikgPT09
IEBwcm9taXNlU3RhdGVQZW5kaW5nKQorICAgICAgICBAZnVsZmlsbFByb21pc2UocHJvbWlzZSwg
dmFsdWUpOworfQorCitmdW5jdGlvbiBmdWxmaWxsRmV0Y2goZW50cnksIHNvdXJjZSkKK3sKKyAg
ICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNmdWxmaWxsLWZldGNoCisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIWVudHJ5LmZldGNoKQorICAgICAgICBlbnRyeS5m
ZXRjaCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTsK
KyAgICB0aGlzLmZvcmNlRnVsZmlsbFByb21pc2UoZW50cnkuZmV0Y2gsIHNvdXJjZSk7CisgICAg
QHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7Cit9CisKKy8vIExvYWRl
ci4KKworZnVuY3Rpb24gcmVxdWVzdEZldGNoKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKQor
eworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtZmV0Y2gK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChlbnRyeS5mZXRjaCkgeworICAgICAgICB2
YXIgY3VycmVudEF0dGVtcHQgPSBlbnRyeS5mZXRjaDsKKyAgICAgICAgaWYgKGVudHJ5LnN0YXRl
ICE9PSBATW9kdWxlRmV0Y2gpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudEF0dGVtcHQ7CisK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRBdHRlbXB0LmNhdGNoKChlcnJvcikgPT4geworICAgICAg
ICAgICAgLy8gRXZlbiBpZiB0aGUgZXhpc3RpbmcgZmV0Y2hpbmcgcmVxdWVzdCBmYWlsZWQsIHRo
aXMgYXR0ZW1wdCBtYXkgc3VjY2VlZC4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBwcmV2
aW91cyBhdHRlbXB0IHVzZWQgaW52YWxpZCBpbnRlZ3JpdHk9IiIgdmFsdWUuIEJ1dCB0aGlzCisg
ICAgICAgICAgICAvLyByZXF1ZXN0IGNvdWxkIGhhdmUgdGhlIGNvcnJlY3QgaW50ZWdyaXR5PSIi
IHZhbHVlLiBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZAorICAgICAgICAgICAgLy8gcmV0cnkgZmV0
Y2hpbmcgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvI2ZldGNoLWEtc2luZ2xlLW1vZHVsZS1zY3JpcHQKKyAgICAgICAgICAgIGlm
IChjdXJyZW50QXR0ZW1wdCA9PT0gZW50cnkuZmV0Y2gpCisgICAgICAgICAgICAgICAgZW50cnku
ZmV0Y2ggPSBAdW5kZWZpbmVkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEZldGNo
KGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
Ly8gSG9vayBwb2ludC4KKyAgICAvLyAyLiBMb2FkZXIuZmV0Y2gKKyAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1mZXRjaAorICAgIC8vICAgICBUYWtl
IHRoZSBrZXkgYW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1YWxseS4KKyAgICAvLyAgICAgRm9y
IGV4YW1wbGUsIEphdmFTY3JpcHRDb3JlIHNoZWxsIGNhbiBwcm92aWRlIHRoZSBob29rIGZldGNo
aW5nIHRoZSByZXNvdXJjZQorICAgIC8vICAgICBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4K
KyAgICB2YXIgZmV0Y2hQcm9taXNlID0gdGhpcy5mZXRjaChlbnRyeS5rZXksIHBhcmFtZXRlcnMs
IGZldGNoZXIpLnRoZW4oKHNvdXJjZSkgPT4geworICAgICAgICBAc2V0U3RhdGVUb01heChlbnRy
eSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICB9KTsK
KyAgICBlbnRyeS5mZXRjaCA9IGZldGNoUHJvbWlzZTsKKyAgICByZXR1cm4gZmV0Y2hQcm9taXNl
OworfQorCitmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGUoZW50cnksIHBhcmFtZXRlcnMsIGZl
dGNoZXIpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVz
dC1pbnN0YW50aWF0ZQorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8gZW50cnkuaW5zdGFu
dGlhdGUgaXMgc2V0IGlmIGZldGNoIHN1Y2NlZWRzLgorICAgIGlmIChlbnRyeS5pbnN0YW50aWF0
ZSkKKyAgICAgICAgcmV0dXJuIGVudHJ5Lmluc3RhbnRpYXRlOworCisgICAgdmFyIGluc3RhbnRp
YXRlUHJvbWlzZSA9IHRoaXMucmVxdWVzdEZldGNoKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVy
KS50aGVuKChzb3VyY2UpID0+IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy8jZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAorICAgICAgICAvLyBOb3cgZmV0Y2hp
bmcgcmVxdWVzdCBzdWNjZWVkcy4gVGhlbiBldmVuIGlmIGluc3RhbnRpYXRpb24gZmFpbHMsIHdl
IHNob3VsZCBjYWNoZSBpdC4KKyAgICAgICAgLy8gSW5zdGFudGlhdGlvbiB3b24ndCBiZSByZXRy
aWVkLgorICAgICAgICBpZiAoZW50cnkuaW5zdGFudGlhdGUpCisgICAgICAgICAgICByZXR1cm4g
ZW50cnkuaW5zdGFudGlhdGU7CisgICAgICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gaW5zdGFudGlh
dGVQcm9taXNlOworCisgICAgICAgIHZhciBrZXkgPSBlbnRyeS5rZXk7CisgICAgICAgIHJldHVy
biB0aGlzLnBhcnNlTW9kdWxlKGtleSwgc291cmNlKS50aGVuKChtb2R1bGVSZWNvcmQpID0+IHsK
KyAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXNNYXAgPSBtb2R1bGVSZWNvcmQuZGVwZW5kZW5j
aWVzTWFwOworICAgICAgICAgICAgdmFyIHJlcXVlc3RlZE1vZHVsZXMgPSB0aGlzLnJlcXVlc3Rl
ZE1vZHVsZXMobW9kdWxlUmVjb3JkKTsKKyAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSBA
bmV3QXJyYXlXaXRoU2l6ZShyZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aCk7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVxdWVzdGVkTW9kdWxlcy5sZW5ndGg7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBkZXBOYW1lID0gcmVxdWVzdGVkTW9kdWxl
c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgZGVwS2V5ID0gdGhpcy5yZXNvbHZlU3luYyhkZXBO
YW1lLCBrZXksIGZldGNoZXIpOworICAgICAgICAgICAgICAgIHZhciBkZXBFbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChkZXBLZXkpOworICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVj
dChkZXBlbmRlbmNpZXMsIGksIGRlcEVudHJ5KTsKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNp
ZXNNYXAuQHNldChkZXBOYW1lLCBkZXBFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbnRyeS5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7CisgICAgICAgICAgICBlbnRyeS5t
b2R1bGUgPSBtb2R1bGVSZWNvcmQ7CisgICAgICAgICAgICBAc2V0U3RhdGVUb01heChlbnRyeSwg
QE1vZHVsZVNhdGlzZnkpOworICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9KTsK
KyAgICB9KTsKKyAgICByZXR1cm4gaW5zdGFudGlhdGVQcm9taXNlOworfQorCitmdW5jdGlvbiBy
ZXF1ZXN0U2F0aXNmeShlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlciwgdmlzaXRlZCkKK3sKKyAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNpbnRlcm5hbC1tb2R1bGUtc2NyaXB0
LWdyYXBoLWZldGNoaW5nLXByb2NlZHVyZQorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYg
KGVudHJ5LnNhdGlzZnkpCisgICAgICAgIHJldHVybiBlbnRyeS5zYXRpc2Z5OworCisgICAgdmlz
aXRlZC5AYWRkKGVudHJ5KTsKKyAgICB2YXIgc2F0aXNmeVByb21pc2UgPSB0aGlzLnJlcXVlc3RJ
bnN0YW50aWF0ZShlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoZW50cnkpID0+IHsK
KyAgICAgICAgaWYgKGVudHJ5LnNhdGlzZnkpCisgICAgICAgICAgICByZXR1cm4gZW50cnkuc2F0
aXNmeTsKKworICAgICAgICB2YXIgZGVwTG9hZHMgPSBAbmV3QXJyYXlXaXRoU2l6ZShlbnRyeS5k
ZXBlbmRlbmNpZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVu
dHJ5LmRlcGVuZGVuY2llcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
dmFyIGRlcEVudHJ5ID0gZW50cnkuZGVwZW5kZW5jaWVzW2ldOworICAgICAgICAgICAgdmFyIHBy
b21pc2U7CisKKyAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSByZXNvbHZpbmcuIFRoZSBkZXBlbmRl
bmNpZXMgb2YgdGhpcyBlbnRyeSBpcyBiZWluZyByZXNvbHZlZCBvciBhbHJlYWR5IHJlc29sdmVk
LgorICAgICAgICAgICAgLy8gU3RvcCB0cmFjaW5nIHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMu
CisgICAgICAgICAgICAvLyBCdXQgdG8gcmV0cmlldmUgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUg
cmVjb3JkIGNvcnJlY3RseSwKKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhl
IGluc3RhbnRpYXRpb24gZm9yIHRoZSBkZXBlbmRlbnQgbW9kdWxlLgorICAgICAgICAgICAgLy8g
Rm9yIGV4YW1wbGUsIHJlYWNoaW5nIGhlcmUsIHRoZSBtb2R1bGUgaXMgc3RhcnRpbmcgcmVzb2x2
aW5nIHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAvLyBCdXQgdGhlIG1vZHVsZSBtYXkg
b3IgbWF5IG5vdCByZWFjaCB0aGUgaW5zdGFudGlhdGlvbiBwaGFzZSBpbiB0aGUgbG9hZGVyJ3Mg
cGlwZWxpbmUuCisgICAgICAgICAgICAvLyBJZiB3ZSB3YWl0IGZvciB0aGUgU2F0aXNmeSBmb3Ig
dGhpcyBtb2R1bGUsIGl0IGNvbnN0cnVjdCB0aGUgY2lyY3VsYXIgcHJvbWlzZSBjaGFpbiBhbmQK
KyAgICAgICAgICAgIC8vIHJlamVjdGVkIGJ5IHRoZSBQcm9taXNlcyBydW50aW1lLiBTaW5jZSBv
bmx5IHdlIG5lZWQgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUsIGluc3RlYWQgb2Ygd2FpdGlu
ZworICAgICAgICAgICAgLy8gdGhlIFNhdGlzZnkgZm9yIHRoaXMgbW9kdWxlLCB3ZSBqdXN0IHdh
aXQgSW5zdGFudGlhdGUgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAodmlzaXRlZC5AaGFzKGRl
cEVudHJ5KSkKKyAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGUoZGVwRW50cnksIEB1bmRlZmluZWQsIGZldGNoZXIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBtb2R1bGUgbG9hZGVyIGRvIG5vdCBwYXNzIGFu
eSBpbmZvcm1hdGlvbiBmb3Igbm9uLXRvcC1sZXZlbCBtb2R1bGUgZmV0Y2hpbmcuCisgICAgICAg
ICAgICAgICAgcHJvbWlzZSA9IHRoaXMucmVxdWVzdFNhdGlzZnkoZGVwRW50cnksIEB1bmRlZmlu
ZWQsIGZldGNoZXIsIHZpc2l0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQHB1dEJ5
VmFsRGlyZWN0KGRlcExvYWRzLCBpLCBwcm9taXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBASW50ZXJuYWxQcm9taXNlLmludGVybmFsQWxsKGRlcExvYWRzKS50aGVuKChlbnRyaWVz
KSA9PiB7CisgICAgICAgICAgICBpZiAoZW50cnkuc2F0aXNmeSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnk7CisgICAgICAgICAgICBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUxp
bmspOworICAgICAgICAgICAgZW50cnkuc2F0aXNmeSA9IHNhdGlzZnlQcm9taXNlOworICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIHJldHVybiBz
YXRpc2Z5UHJvbWlzZTsKK30KKworLy8gTGlua2luZyBzZW1hbnRpY3MuCisKK2Z1bmN0aW9uIGxp
bmsoZW50cnksIGZldGNoZXIpCit7CisgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy8jZmV0Y2gtdGhlLWRlc2NlbmRhbnRzLW9mLWFuZC1pbnN0YW50aWF0ZS1hLW1vZHVsZS1zY3Jp
cHQKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghZW50cnkubGlua1N1Y2NlZWRlZCkK
KyAgICAgICAgdGhyb3cgZW50cnkubGlua0Vycm9yOworICAgIGlmIChlbnRyeS5zdGF0ZSA9PT0g
QE1vZHVsZVJlYWR5KQorICAgICAgICByZXR1cm47CisgICAgQHNldFN0YXRlVG9NYXgoZW50cnks
IEBNb2R1bGVSZWFkeSk7CisKKyAgICB0cnkgeworICAgICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5
IGhhdmUgdGhlICJkZXBlbmRlbmNpZXMiIGZpZWxkLAorICAgICAgICAvLyB3ZSBjYW4gY2FsbCBt
b2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gd2l0aCB0aGUgY29ycmVjdCBvcmRlcgorICAg
ICAgICAvLyB3aXRob3V0IGNvbnN0cnVjdGluZyB0aGUgZGVwZW5kZW5jeSBncmFwaCBieSBjYWxs
aW5nIGRlcGVuZGVuY3lHcmFwaC4KKyAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRl
cGVuZGVuY2llczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRlcGVuZGVuY2ll
cy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMubGluayhkZXBlbmRl
bmNpZXNbaV0sIGZldGNoZXIpOworCisgICAgICAgIHRoaXMubW9kdWxlRGVjbGFyYXRpb25JbnN0
YW50aWF0aW9uKGVudHJ5Lm1vZHVsZSwgZmV0Y2hlcik7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsK
KyAgICAgICAgZW50cnkubGlua1N1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICBlbnRyeS5saW5r
RXJyb3IgPSBlcnJvcjsKKyAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorfQorCisvLyBNb2R1
bGUgc2VtYW50aWNzLgorCitmdW5jdGlvbiBtb2R1bGVFdmFsdWF0aW9uKGVudHJ5LCBmZXRjaGVy
KQoreworICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82
LjAvI3NlYy1tb2R1bGVldmFsdWF0aW9uCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAo
ZW50cnkuZXZhbHVhdGVkKQorICAgICAgICByZXR1cm47CisgICAgZW50cnkuZXZhbHVhdGVkID0g
dHJ1ZTsKKworICAgIC8vIFRoZSBjb250ZW50cyBvZiB0aGUgW1tSZXF1ZXN0ZWRNb2R1bGVzXV0g
aXMgY2xvbmVkIGludG8gZW50cnkuZGVwZW5kZW5jaWVzLgorICAgIHZhciBkZXBlbmRlbmNpZXMg
PSBlbnRyeS5kZXBlbmRlbmNpZXM7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRlcGVu
ZGVuY2llcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgdGhpcy5tb2R1bGVFdmFs
dWF0aW9uKGRlcGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7CisKKyAgICB0aGlzLmV2YWx1YXRlKGVu
dHJ5LmtleSwgZW50cnkubW9kdWxlLCBmZXRjaGVyKTsKK30KKworLy8gQVBJcyB0byBjb250cm9s
IHRoZSBtb2R1bGUgbG9hZGVyLgorCitmdW5jdGlvbiBwcm92aWRlRmV0Y2goa2V5LCB2YWx1ZSkK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lz
dGVyZWQoa2V5KTsKKworICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVGZXRjaCkKKyAgICAg
ICAgQHRocm93VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgZmV0Y2hlZC4i
KTsKKyAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgdmFsdWUpOworfQorCitmdW5jdGlvbiBs
b2FkTW9kdWxlKG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIpCit7CisgICAgInVzZSBz
dHJpY3QiOworCisgICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBwb2ludC4KKyAgICAvLyByZXNv
bHZlOiBtb2R1bGVOYW1lID0+IFByb21pc2UobW9kdWxlS2V5KQorICAgIC8vIFRha2UgdGhlIG5h
bWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3Vy
Y2UgbG9jYXRpb24uCisgICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFuZCBy
ZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgorICAgIHJldHVybiB0aGlzLnJlc29sdmUo
bW9kdWxlTmFtZSwgQHVuZGVmaW5lZCwgZmV0Y2hlcikudGhlbigoa2V5KSA9PiB7CisgICAgICAg
IHJldHVybiB0aGlzLnJlcXVlc3RTYXRpc2Z5KHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpLCBw
YXJhbWV0ZXJzLCBmZXRjaGVyLCBuZXcgQFNldCk7CisgICAgfSkudGhlbigoZW50cnkpID0+IHsK
KyAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gbGlua0Fu
ZEV2YWx1YXRlTW9kdWxlKGtleSwgZmV0Y2hlcikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTsKKyAgICBpZiAoZW50cnku
c3RhdGUgPCBATW9kdWxlTGluaykKKyAgICAgICAgQHRocm93VHlwZUVycm9yKCJSZXF1ZXN0ZWQg
bW9kdWxlIGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LiIpOworCisgICAgdGhpcy5saW5rKGVudHJ5
LCBmZXRjaGVyKTsKKyAgICByZXR1cm4gdGhpcy5tb2R1bGVFdmFsdWF0aW9uKGVudHJ5LCBmZXRj
aGVyKTsKK30KKworZnVuY3Rpb24gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKG1vZHVsZU5hbWUsIHBh
cmFtZXRlcnMsIGZldGNoZXIpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHRo
aXMubG9hZE1vZHVsZShtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChrZXkp
ID0+IHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSwgZmV0
Y2hlcik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbXBvcnRNb2R1bGUoa2V5LCBw
YXJhbWV0ZXJzLCBmZXRjaGVyKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB0
aGlzLnJlcXVlc3RTYXRpc2Z5KHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpLCBwYXJhbWV0ZXJz
LCBmZXRjaGVyLCBuZXcgQFNldCkudGhlbigoZW50cnkpID0+IHsKKyAgICAgICAgdGhpcy5saW5r
QW5kRXZhbHVhdGVNb2R1bGUoZW50cnkua2V5LCBmZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KGVudHJ5Lm1vZHVsZSk7CisgICAgfSk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJv
dG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlclBy
b3RvdHlwZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmOTFlYjg2NTUxZmE5
MzE5N2MxNGQ4MDkwOGRkNjlmNTZkYzc0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBodHRwczovL3do
YXR3Zy5naXRodWIuaW8vbG9hZGVyLyNsb2FkZXItb2JqZWN0Ci0vLyBNb2R1bGUgTG9hZGVyIGhh
cyBzZXZlcmFsIGhvb2tzIHRoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgdGhlIHBsYXRmb3JtLgot
Ly8gRm9yIGV4YW1wbGUsIHRoZSBbW0ZldGNoXV0gaG9vayBjYW4gYmUgcHJvdmlkZWQgYnkgdGhl
IEphdmFTY3JpcHRDb3JlIHNoZWxsCi0vLyBhcyBmZXRjaGluZyB0aGUgcGF5bG9hZCBmcm9tIHRo
ZSBsb2NhbCBmaWxlIHN5c3RlbS4KLS8vIEN1cnJlbnRseSwgdGhlcmUgYXJlIDQgaG9va3MuCi0v
LyAgICAxLiBMb2FkZXIucmVzb2x2ZQotLy8gICAgMi4gTG9hZGVyLmZldGNoCi0KLUBnbG9iYWxQ
cml2YXRlCi1mdW5jdGlvbiBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBuZXdTdGF0ZSkKLXsKLSAgICAv
LyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNzZXQtc3RhdGUtdG8tbWF4Ci0KLSAg
ICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAoZW50cnkuc3RhdGUgPCBuZXdTdGF0ZSkKLSAgICAg
ICAgZW50cnkuc3RhdGUgPSBuZXdTdGF0ZTsKLX0KLQotQGdsb2JhbFByaXZhdGUKLWZ1bmN0aW9u
IG5ld1JlZ2lzdHJ5RW50cnkoa2V5KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5p
by9sb2FkZXIvI3JlZ2lzdHJ5Ci0gICAgLy8KLSAgICAvLyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGJl
Y29tZXMgb25lIG9mIHRoZSA1IHN0YXRlcy4KLSAgICAvLyAxLiBGZXRjaAotICAgIC8vICAgICBS
ZWFkeSB0byBmZXRjaCAob3Igbm93IGZldGNoaW5nKSB0aGUgcmVzb3VyY2Ugb2YgdGhpcyBtb2R1
bGUuCi0gICAgLy8gICAgIFR5cGljYWxseSwgd2UgZmV0Y2ggdGhlIHNvdXJjZSBjb2RlIG92ZXIg
dGhlIG5ldHdvcmsgb3IgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgLy8gICAgIGEuIElmIHRo
ZSBzdGF0dXMgaXMgRmV0Y2ggYW5kIHRoZXJlIGlzIG5vIGVudHJ5LmZldGNoIHByb21pc2UsIHRo
ZSBlbnRyeSBpcyByZWFkeSB0byBmZXRjaC4KLSAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBp
cyBGZXRjaCBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBp
cyBqdXN0IGZldGNoaW5nIHRoZSByZXNvdXJjZS4KLSAgICAvLwotICAgIC8vIDIuIEluc3RhbnRp
YXRlIChBbmFseXplTW9kdWxlKQotICAgIC8vICAgICBSZWFkeSB0byBpbnN0YW50aWF0ZSAob3Ig
bm93IGluc3RhbnRpYXRpbmcpIHRoZSBtb2R1bGUgcmVjb3JkIGZyb20gdGhlIGZldGNoZWQKLSAg
ICAvLyAgICAgc291cmNlIGNvZGUuCi0gICAgLy8gICAgIFR5cGljYWxseSwgd2UgcGFyc2UgdGhl
IG1vZHVsZSBjb2RlLCBleHRyYWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJpbmRpbmcgaW5mb3Jt
YXRpb24uCi0gICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5kIHRo
ZXJlIGlzIG5vIGVudHJ5Lmluc3RhbnRpYXRlIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFkeSB0
byBpbnN0YW50aWF0ZS4KLSAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0
ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0
IGluc3RhbnRpYXRpbmcKLSAgICAvLyAgICAgICAgdGhlIG1vZHVsZSByZWNvcmQuCi0gICAgLy8K
LSAgICAvLyAzLiBTYXRpc2Z5Ci0gICAgLy8gICAgIFJlYWR5IHRvIHJlcXVlc3QgdGhlIGRlcGVu
ZGVudCBtb2R1bGVzIChvciBub3cgcmVxdWVzdGluZyAmIHJlc29sdmluZykuCi0gICAgLy8gICAg
IFdpdGhvdXQgdGhpcyBzdGF0ZSwgdGhlIGN1cnJlbnQgZHJhZnQgY2F1c2VzIGluZmluaXRlIHJl
Y3Vyc2lvbiB3aGVuIHRoZXJlIGlzIGNpcmN1bGFyIGRlcGVuZGVuY3kuCi0gICAgLy8gICAgIGEu
IElmIHRoZSBzdGF0dXMgaXMgU2F0aXNmeSBhbmQgdGhlcmUgaXMgbm8gZW50cnkuc2F0aXNmeSBw
cm9taXNlLCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgot
ICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIFNhdGlzZnkgYW5kIHRoZXJlIGlzIHRoZSBl
bnRyeS5zYXRpc2Z5IHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IHJlc29sdmluZwotICAgIC8v
ICAgICAgICB0aGUgZGVwZW5kZW5jaWVzLgotICAgIC8vCi0gICAgLy8gNC4gTGluawotICAgIC8v
ICAgICBSZWFkeSB0byBsaW5rIHRoZSBtb2R1bGUgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4KLSAg
ICAvLyAgICAgTGlua2luZyBtZWFucyB0aGF0IHRoZSBtb2R1bGUgaW1wb3J0cyBhbmQgZXhwb3J0
cyB0aGUgYmluZGluZ3MgZnJvbS90byB0aGUgb3RoZXIgbW9kdWxlcy4KLSAgICAvLwotICAgIC8v
IDUuIFJlYWR5Ci0gICAgLy8gICAgIFRoZSBtb2R1bGUgaXMgbGlua2VkLCBzbyB0aGUgbW9kdWxl
IGlzIHJlYWR5IHRvIGJlIGV4ZWN1dGVkLgotICAgIC8vCi0gICAgLy8gRWFjaCByZWdpc3RyeSBl
bnRyeSBoYXMgdGhlIDQgcHJvbWlzZXM7ICJmZXRjaCIsICJpbnN0YW50aWF0ZSIgYW5kICJzYXRp
c2Z5Ii4KLSAgICAvLyBUaGV5IGFyZSBhc3NpZ25lZCB3aGVuIHN0YXJ0aW5nIHRoZSBlYWNoIHBo
YXNlLiBBbmQgdGhleSBhcmUgZnVsZmlsbGVkIHdoZW4gdGhlIGVhY2ggcGhhc2UgaXMgY29tcGxl
dGVkLgotICAgIC8vCi0gICAgLy8gSW4gdGhlIGN1cnJlbnQgbW9kdWxlIGRyYWZ0LCBsaW5raW5n
IHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSB3aG9sZSBtb2R1bGVzIGFyZSBpbnN0YW50aWF0
ZWQgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLgotICAgIC8vIEFuZCBleGVjdXRp
b24gaXMgYWxzbyBkb25lIGFmdGVyIHRoZSBhbGwgbW9kdWxlcyBhcmUgbGlua2VkLgotICAgIC8v
Ci0gICAgLy8gVE9ETzogV2UgbmVlZCB0byBleHBsb2l0IHRoZSB3YXkgdG8gZXhlY3V0ZSB0aGUg
bW9kdWxlIHdoaWxlIGZldGNoaW5nIG5vbi1yZWxhdGVkIG1vZHVsZXMuCi0gICAgLy8gT25lIHNv
bHV0aW9uOyBpbnRyb2R1Y2luZyB0aGUgcmVhZHkgcHJvbWlzZSBjaGFpbiB0byBleGVjdXRlIHRo
ZSBtb2R1bGVzIGNvbmN1cnJlbnRseSB3aGlsZSBrZWVwaW5nCi0gICAgLy8gdGhlIGV4ZWN1dGlv
biBvcmRlci4KLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIGtl
eToga2V5LAotICAgICAgICBzdGF0ZTogQE1vZHVsZUZldGNoLAotICAgICAgICBmZXRjaDogQHVu
ZGVmaW5lZCwKLSAgICAgICAgaW5zdGFudGlhdGU6IEB1bmRlZmluZWQsCi0gICAgICAgIHNhdGlz
Znk6IEB1bmRlZmluZWQsCi0gICAgICAgIGRlcGVuZGVuY2llczogW10sIC8vIFRvIGtlZXAgdGhl
IG1vZHVsZSBvcmRlciwgd2Ugc3RvcmUgdGhlIG1vZHVsZSBrZXlzIGluIHRoZSBhcnJheS4KLSAg
ICAgICAgbW9kdWxlOiBAdW5kZWZpbmVkLCAvLyBKU01vZHVsZVJlY29yZAotICAgICAgICBsaW5r
RXJyb3I6IEB1bmRlZmluZWQsCi0gICAgICAgIGxpbmtTdWNjZWVkZWQ6IHRydWUsCi0gICAgICAg
IGV2YWx1YXRlZDogZmFsc2UsCi0gICAgfTsKLX0KLQotZnVuY3Rpb24gZW5zdXJlUmVnaXN0ZXJl
ZChrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZW5zdXJl
LXJlZ2lzdGVyZWQKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMu
cmVnaXN0cnkuQGdldChrZXkpOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgcmV0dXJuIGVudHJ5
OwotCi0gICAgZW50cnkgPSBAbmV3UmVnaXN0cnlFbnRyeShrZXkpOwotICAgIHRoaXMucmVnaXN0
cnkuQHNldChrZXksIGVudHJ5KTsKLQotICAgIHJldHVybiBlbnRyeTsKLX0KLQotZnVuY3Rpb24g
Zm9yY2VGdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKLXsKLSAgICAidXNlIHN0cmljdCI7
Ci0KLSAgICBpZiAoQGdldEJ5SWREaXJlY3RQcml2YXRlKHByb21pc2UsICJwcm9taXNlU3RhdGUi
KSA9PT0gQHByb21pc2VTdGF0ZVBlbmRpbmcpCi0gICAgICAgIEBmdWxmaWxsUHJvbWlzZShwcm9t
aXNlLCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0aW9uIGZ1bGZpbGxGZXRjaChlbnRyeSwgc291cmNlKQot
ewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Z1bGZpbGwtZmV0Y2gK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICghZW50cnkuZmV0Y2gpCi0gICAgICAgIGVu
dHJ5LmZldGNoID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpLkBwcm9t
aXNlOwotICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5mZXRjaCwgc291cmNlKTsK
LSAgICBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKLX0KLQotLy8g
TG9hZGVyLgotCi1mdW5jdGlvbiByZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNo
ZXIpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC1m
ZXRjaAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKGVudHJ5LmZldGNoKSB7Ci0gICAg
ICAgIHZhciBjdXJyZW50QXR0ZW1wdCA9IGVudHJ5LmZldGNoOwotICAgICAgICBpZiAoZW50cnku
c3RhdGUgIT09IEBNb2R1bGVGZXRjaCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50QXR0ZW1w
dDsKLQotICAgICAgICByZXR1cm4gY3VycmVudEF0dGVtcHQuY2F0Y2goKGVycm9yKSA9PiB7Ci0g
ICAgICAgICAgICAvLyBFdmVuIGlmIHRoZSBleGlzdGluZyBmZXRjaGluZyByZXF1ZXN0IGZhaWxl
ZCwgdGhpcyBhdHRlbXB0IG1heSBzdWNjZWVkLgotICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IHByZXZpb3VzIGF0dGVtcHQgdXNlZCBpbnZhbGlkIGludGVncml0eT0iIiB2YWx1ZS4gQnV0IHRo
aXMKLSAgICAgICAgICAgIC8vIHJlcXVlc3QgY291bGQgaGF2ZSB0aGUgY29ycmVjdCBpbnRlZ3Jp
dHk9IiIgdmFsdWUuIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkCi0gICAgICAgICAgICAvLyByZXRy
eSBmZXRjaGluZyBmb3IgdGhpcyByZXF1ZXN0LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1s
LnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRBdHRlbXB0ID09PSBlbnRyeS5mZXRjaCkKLSAgICAgICAgICAgICAgICBl
bnRyeS5mZXRjaCA9IEB1bmRlZmluZWQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0
RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICAvLyBIb29rIHBvaW50LgotICAgIC8vIDIuIExvYWRlci5mZXRjaAotICAgIC8vICAgICBo
dHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLWZldGNoCi0gICAgLy8gICAg
IFRha2UgdGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291cmNlIGFjdHVhbGx5LgotICAgIC8vICAg
ICBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sg
ZmV0Y2hpbmcgdGhlIHJlc291cmNlCi0gICAgLy8gICAgIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lz
dGVtLgotICAgIHZhciBmZXRjaFByb21pc2UgPSB0aGlzLmZldGNoKGVudHJ5LmtleSwgcGFyYW1l
dGVycywgZmV0Y2hlcikudGhlbigoc291cmNlKSA9PiB7Ci0gICAgICAgIEBzZXRTdGF0ZVRvTWF4
KGVudHJ5LCBATW9kdWxlSW5zdGFudGlhdGUpOwotICAgICAgICByZXR1cm4gc291cmNlOwotICAg
IH0pOwotICAgIGVudHJ5LmZldGNoID0gZmV0Y2hQcm9taXNlOwotICAgIHJldHVybiBmZXRjaFBy
b21pc2U7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0ZShlbnRyeSwgcGFyYW1ldGVy
cywgZmV0Y2hlcikKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNy
ZXF1ZXN0LWluc3RhbnRpYXRlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLyBlbnRyeS5p
bnN0YW50aWF0ZSBpcyBzZXQgaWYgZmV0Y2ggc3VjY2VlZHMuCi0gICAgaWYgKGVudHJ5Lmluc3Rh
bnRpYXRlKQotICAgICAgICByZXR1cm4gZW50cnkuaW5zdGFudGlhdGU7Ci0KLSAgICB2YXIgaW5z
dGFudGlhdGVQcm9taXNlID0gdGhpcy5yZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZl
dGNoZXIpLnRoZW4oKHNvdXJjZSkgPT4gewotICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnLyNmZXRjaC1hLXNpbmdsZS1tb2R1bGUtc2NyaXB0Ci0gICAgICAgIC8vIE5vdyBm
ZXRjaGluZyByZXF1ZXN0IHN1Y2NlZWRzLiBUaGVuIGV2ZW4gaWYgaW5zdGFudGlhdGlvbiBmYWls
cywgd2Ugc2hvdWxkIGNhY2hlIGl0LgotICAgICAgICAvLyBJbnN0YW50aWF0aW9uIHdvbid0IGJl
IHJldHJpZWQuCi0gICAgICAgIGlmIChlbnRyeS5pbnN0YW50aWF0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBlbnRyeS5pbnN0YW50aWF0ZTsKLSAgICAgICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0
YW50aWF0ZVByb21pc2U7Ci0KLSAgICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKLSAgICAgICAg
cmV0dXJuIHRoaXMucGFyc2VNb2R1bGUoa2V5LCBzb3VyY2UpLnRoZW4oKG1vZHVsZVJlY29yZCkg
PT4gewotICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llc01hcCA9IG1vZHVsZVJlY29yZC5kZXBl
bmRlbmNpZXNNYXA7Ci0gICAgICAgICAgICB2YXIgcmVxdWVzdGVkTW9kdWxlcyA9IHRoaXMucmVx
dWVzdGVkTW9kdWxlcyhtb2R1bGVSZWNvcmQpOwotICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2ll
cyA9IEBuZXdBcnJheVdpdGhTaXplKHJlcXVlc3RlZE1vZHVsZXMubGVuZ3RoKTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRlcE5hbWUgPSByZXF1ZXN0ZWRN
b2R1bGVzW2ldOwotICAgICAgICAgICAgICAgIHZhciBkZXBLZXkgPSB0aGlzLnJlc29sdmVTeW5j
KGRlcE5hbWUsIGtleSwgZmV0Y2hlcik7Ci0gICAgICAgICAgICAgICAgdmFyIGRlcEVudHJ5ID0g
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGRlcEtleSk7Ci0gICAgICAgICAgICAgICAgQHB1dEJ5VmFs
RGlyZWN0KGRlcGVuZGVuY2llcywgaSwgZGVwRW50cnkpOwotICAgICAgICAgICAgICAgIGRlcGVu
ZGVuY2llc01hcC5Ac2V0KGRlcE5hbWUsIGRlcEVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVudHJ5LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llczsKLSAgICAgICAgICAgIGVu
dHJ5Lm1vZHVsZSA9IG1vZHVsZVJlY29yZDsKLSAgICAgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVu
dHJ5LCBATW9kdWxlU2F0aXNmeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotICAgIHJldHVybiBpbnN0YW50aWF0ZVByb21pc2U7Ci19Ci0KLWZ1bmN0
aW9uIHJlcXVlc3RTYXRpc2Z5KGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyLCB2aXNpdGVkKQot
ewotICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2ludGVybmFsLW1vZHVsZS1z
Y3JpcHQtZ3JhcGgtZmV0Y2hpbmctcHJvY2VkdXJlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAg
ICBpZiAoZW50cnkuc2F0aXNmeSkKLSAgICAgICAgcmV0dXJuIGVudHJ5LnNhdGlzZnk7Ci0KLSAg
ICB2aXNpdGVkLkBhZGQoZW50cnkpOwotICAgIHZhciBzYXRpc2Z5UHJvbWlzZSA9IHRoaXMucmVx
dWVzdEluc3RhbnRpYXRlKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChlbnRyeSkg
PT4gewotICAgICAgICBpZiAoZW50cnkuc2F0aXNmeSkKLSAgICAgICAgICAgIHJldHVybiBlbnRy
eS5zYXRpc2Z5OwotCi0gICAgICAgIHZhciBkZXBMb2FkcyA9IEBuZXdBcnJheVdpdGhTaXplKGVu
dHJ5LmRlcGVuZGVuY2llcy5sZW5ndGgpOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZW50cnkuZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgZGVwRW50cnkgPSBlbnRyeS5kZXBlbmRlbmNpZXNbaV07Ci0gICAgICAgICAgICB2
YXIgcHJvbWlzZTsKLQotICAgICAgICAgICAgLy8gUmVjdXJzaXZlIHJlc29sdmluZy4gVGhlIGRl
cGVuZGVuY2llcyBvZiB0aGlzIGVudHJ5IGlzIGJlaW5nIHJlc29sdmVkIG9yIGFscmVhZHkgcmVz
b2x2ZWQuCi0gICAgICAgICAgICAvLyBTdG9wIHRyYWNpbmcgdGhlIGNpcmN1bGFyIGRlcGVuZGVu
Y2llcy4KLSAgICAgICAgICAgIC8vIEJ1dCB0byByZXRyaWV2ZSB0aGUgaW5zdGFudGlhdGVkIG1v
ZHVsZSByZWNvcmQgY29ycmVjdGx5LAotICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZv
ciB0aGUgaW5zdGFudGlhdGlvbiBmb3IgdGhlIGRlcGVuZGVudCBtb2R1bGUuCi0gICAgICAgICAg
ICAvLyBGb3IgZXhhbXBsZSwgcmVhY2hpbmcgaGVyZSwgdGhlIG1vZHVsZSBpcyBzdGFydGluZyBy
ZXNvbHZpbmcgdGhlIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgIC8vIEJ1dCB0aGUgbW9kdWxl
IG1heSBvciBtYXkgbm90IHJlYWNoIHRoZSBpbnN0YW50aWF0aW9uIHBoYXNlIGluIHRoZSBsb2Fk
ZXIncyBwaXBlbGluZS4KLSAgICAgICAgICAgIC8vIElmIHdlIHdhaXQgZm9yIHRoZSBTYXRpc2Z5
IGZvciB0aGlzIG1vZHVsZSwgaXQgY29uc3RydWN0IHRoZSBjaXJjdWxhciBwcm9taXNlIGNoYWlu
IGFuZAotICAgICAgICAgICAgLy8gcmVqZWN0ZWQgYnkgdGhlIFByb21pc2VzIHJ1bnRpbWUuIFNp
bmNlIG9ubHkgd2UgbmVlZCBpcyB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSwgaW5zdGVhZCBvZiB3
YWl0aW5nCi0gICAgICAgICAgICAvLyB0aGUgU2F0aXNmeSBmb3IgdGhpcyBtb2R1bGUsIHdlIGp1
c3Qgd2FpdCBJbnN0YW50aWF0ZSBmb3IgdGhpcy4KLSAgICAgICAgICAgIGlmICh2aXNpdGVkLkBo
YXMoZGVwRW50cnkpKQotICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0
YW50aWF0ZShkZXBFbnRyeSwgQHVuZGVmaW5lZCwgZmV0Y2hlcik7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIG1vZHVsZSBsb2FkZXIgZG8gbm90IHBh
c3MgYW55IGluZm9ybWF0aW9uIGZvciBub24tdG9wLWxldmVsIG1vZHVsZSBmZXRjaGluZy4KLSAg
ICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy5yZXF1ZXN0U2F0aXNmeShkZXBFbnRyeSwgQHVu
ZGVmaW5lZCwgZmV0Y2hlciwgdmlzaXRlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBA
cHV0QnlWYWxEaXJlY3QoZGVwTG9hZHMsIGksIHByb21pc2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIEBJbnRlcm5hbFByb21pc2UuaW50ZXJuYWxBbGwoZGVwTG9hZHMpLnRoZW4oKGVu
dHJpZXMpID0+IHsKLSAgICAgICAgICAgIGlmIChlbnRyeS5zYXRpc2Z5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9k
dWxlTGluayk7Ci0gICAgICAgICAgICBlbnRyeS5zYXRpc2Z5ID0gc2F0aXNmeVByb21pc2U7Ci0g
ICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0
dXJuIHNhdGlzZnlQcm9taXNlOwotfQotCi0vLyBMaW5raW5nIHNlbWFudGljcy4KLQotZnVuY3Rp
b24gbGluayhlbnRyeSwgZmV0Y2hlcikKLXsKLSAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnLyNmZXRjaC10aGUtZGVzY2VuZGFudHMtb2YtYW5kLWluc3RhbnRpYXRlLWEtbW9kdWxl
LXNjcmlwdAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFlbnRyeS5saW5rU3VjY2Vl
ZGVkKQotICAgICAgICB0aHJvdyBlbnRyeS5saW5rRXJyb3I7Ci0gICAgaWYgKGVudHJ5LnN0YXRl
ID09PSBATW9kdWxlUmVhZHkpCi0gICAgICAgIHJldHVybjsKLSAgICBAc2V0U3RhdGVUb01heChl
bnRyeSwgQE1vZHVsZVJlYWR5KTsKLQotICAgIHRyeSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlIGFs
cmVhZHkgaGF2ZSB0aGUgImRlcGVuZGVuY2llcyIgZmllbGQsCi0gICAgICAgIC8vIHdlIGNhbiBj
YWxsIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiB3aXRoIHRoZSBjb3JyZWN0IG9yZGVy
Ci0gICAgICAgIC8vIHdpdGhvdXQgY29uc3RydWN0aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGJ5
IGNhbGxpbmcgZGVwZW5kZW5jeUdyYXBoLgotICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50
cnkuZGVwZW5kZW5jaWVzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5k
ZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5saW5rKGRl
cGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7Ci0KLSAgICAgICAgdGhpcy5tb2R1bGVEZWNsYXJhdGlv
bkluc3RhbnRpYXRpb24oZW50cnkubW9kdWxlLCBmZXRjaGVyKTsKLSAgICB9IGNhdGNoIChlcnJv
cikgewotICAgICAgICBlbnRyeS5saW5rU3VjY2VlZGVkID0gZmFsc2U7Ci0gICAgICAgIGVudHJ5
LmxpbmtFcnJvciA9IGVycm9yOwotICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci19Ci0KLS8v
IE1vZHVsZSBzZW1hbnRpY3MuCi0KLWZ1bmN0aW9uIG1vZHVsZUV2YWx1YXRpb24oZW50cnksIGZl
dGNoZXIpCi17Ci0gICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEt
MjYyLzYuMC8jc2VjLW1vZHVsZWV2YWx1YXRpb24KLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IGlmIChlbnRyeS5ldmFsdWF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBlbnRyeS5ldmFsdWF0
ZWQgPSB0cnVlOwotCi0gICAgLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBbW1JlcXVlc3RlZE1vZHVs
ZXNdXSBpcyBjbG9uZWQgaW50byBlbnRyeS5kZXBlbmRlbmNpZXMuCi0gICAgdmFyIGRlcGVuZGVu
Y2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
ZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICB0aGlzLm1vZHVs
ZUV2YWx1YXRpb24oZGVwZW5kZW5jaWVzW2ldLCBmZXRjaGVyKTsKLQotICAgIHRoaXMuZXZhbHVh
dGUoZW50cnkua2V5LCBlbnRyeS5tb2R1bGUsIGZldGNoZXIpOwotfQotCi0vLyBBUElzIHRvIGNv
bnRyb2wgdGhlIG1vZHVsZSBsb2FkZXIuCi0KLWZ1bmN0aW9uIHByb3ZpZGVGZXRjaChrZXksIHZh
bHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJl
UmVnaXN0ZXJlZChrZXkpOwotCi0gICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVsZUZldGNoKQot
ICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSBmZXRj
aGVkLiIpOwotICAgIHRoaXMuZnVsZmlsbEZldGNoKGVudHJ5LCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0
aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgcGFyYW1ldGVycywgZmV0Y2hlcikKLXsKLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgotICAgIC8v
IHJlc29sdmU6IG1vZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCi0gICAgLy8gVGFrZSB0
aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBy
ZXNvdXJjZSBsb2NhdGlvbi4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIg
YW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCi0gICAgcmV0dXJuIHRoaXMucmVz
b2x2ZShtb2R1bGVOYW1lLCBAdW5kZWZpbmVkLCBmZXRjaGVyKS50aGVuKChrZXkpID0+IHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFNhdGlzZnkodGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtl
eSksIHBhcmFtZXRlcnMsIGZldGNoZXIsIG5ldyBAU2V0KTsKLSAgICB9KS50aGVuKChlbnRyeSkg
PT4gewotICAgICAgICByZXR1cm4gZW50cnkua2V5OwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBs
aW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5LCBmZXRjaGVyKQotewotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwotICAgIGlmIChl
bnRyeS5zdGF0ZSA8IEBNb2R1bGVMaW5rKQotICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlJlcXVl
c3RlZCBtb2R1bGUgaXMgbm90IGluc3RhbnRpYXRlZCB5ZXQuIik7Ci0KLSAgICB0aGlzLmxpbmso
ZW50cnksIGZldGNoZXIpOwotICAgIHJldHVybiB0aGlzLm1vZHVsZUV2YWx1YXRpb24oZW50cnks
IGZldGNoZXIpOwotfQotCi1mdW5jdGlvbiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUobW9kdWxlTmFt
ZSwgcGFyYW1ldGVycywgZmV0Y2hlcikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1
cm4gdGhpcy5sb2FkTW9kdWxlKG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIpLnRoZW4o
KGtleSkgPT4gewotICAgICAgICByZXR1cm4gdGhpcy5saW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5
LCBmZXRjaGVyKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gcmVxdWVzdEltcG9ydE1vZHVsZShr
ZXksIHBhcmFtZXRlcnMsIGZldGNoZXIpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0
dXJuIHRoaXMucmVxdWVzdFNhdGlzZnkodGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSksIHBhcmFt
ZXRlcnMsIGZldGNoZXIsIG5ldyBAU2V0KS50aGVuKChlbnRyeSkgPT4gewotICAgICAgICB0aGlz
LmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShlbnRyeS5rZXksIGZldGNoZXIpOwotICAgICAgICByZXR1
cm4gdGhpcy5nZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoZW50cnkubW9kdWxlKTsKLSAgICB9KTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAppbmRleCBhNDgzMTc3M2U5ODE0NWU1YWI4NmNhM2JjNjcyZjIyYzhhZjVlY2NiLi5kNDY3NGMw
MTlkODY0ODA0ZjRjNjY2ODVkYTlkZjk2NWZkMWVkOWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xMzEsNyArMTMxLDYgQEAK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJNYXRoT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTWljcm90YXNrLmgiCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk5hdGl2
ZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiTnVsbEdldHRlckZ1bmN0aW9uLmgiCkBAIC02
NTAsOCArNjQ5LDYgQEAgbV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlz
LCBpbnN0YW5jZVR5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGgKICAgICAKICN1bmRlZiBDUkVB
VEVfUFJPVE9UWVBFX0ZPUl9MQVpZX1RZUEUKICAgICAKLSAgICBtX21vZHVsZUxvYWRlclByb3Rv
dHlwZS5zZXQodm0sIHRoaXMsIE1vZHVsZUxvYWRlclByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlz
LCBNb2R1bGVMb2FkZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0gICAgCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKICAgICBP
YmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29uc3RydWN0b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHZtLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
OwpAQCAtNzc5LDggKzc3Niw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT4ganNOYW1lLCBsb3dlck5hbWUgIyMgQ29uc3RydWN0CiAgICAgUmVmbGVj
dE9iamVjdCogcmVmbGVjdE9iamVjdCA9IFJlZmxlY3RPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywg
UmVmbGVjdE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5SZWZsZWN0LCByZWZsZWN0T2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKLSAgICBtX21vZHVsZUxvYWRlclN0cnVjdHVy
ZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1bGVMb2FkZXIuc2V0
KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMs
IG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpKSk7CisgICAgbV9tb2R1bGVMb2FkZXIuc2V0
KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMs
IEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpKSkpOwog
ICAgIGlmIChPcHRpb25zOjpleHBvc2VJbnRlcm5hbE1vZHVsZUxvYWRlcigpKQogICAgICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TG9hZGVyLCBt
X21vZHVsZUxvYWRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwogCkBAIC0xMzc0LDcgKzEzNzAsNiBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9hc3luY0dlbmVyYXRvclByb3RvdHlwZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9hc3luY0l0ZXJhdG9yUHJvdG90eXBl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTG9h
ZGVyUHJvdG90eXBlKTsKIAogICAgIHRoaXNPYmplY3QtPm1fZGVidWdnZXJTY29wZVN0cnVjdHVy
ZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVyZS52
aXNpdCh2aXNpdG9yKTsKQEAgLTE0MjUsNyArMTQyMCw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1cmUp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHlSZXZva2VTdHJ1Y3R1cmUp
OwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTG9hZGVyU3RydWN0dXJl
KTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyUHJv
dG90eXBlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyU3Ry
dWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCmluZGV4IDU3MGU0Yjg5NjIyNGFmNzk0YTI4M2NjYjgzNDNmZDUxYWM0YjhhNmMuLmRiM2Y4
M2Y1MDExMGZiYWMyZGMwYmZiMDY4Zjg4YjUyMmIwNzdlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtOTgsNyArOTgsNyBAQCBjbGFz
cyBEaXJlY3RFdmFsRXhlY3V0YWJsZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNs
YXNzIE1hcFByb3RvdHlwZTsKIGNsYXNzIE1pY3JvdGFzazsKLWNsYXNzIE1vZHVsZUxvYWRlclBy
b3RvdHlwZTsKK2NsYXNzIE1vZHVsZUxvYWRlcjsKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOwogY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKIGNsYXNzIE51bGxHZXR0ZXJGdW5j
dGlvbjsKQEAgLTMwMiw3ICszMDIsNiBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBXcml0ZUJhcnJpZXI8R2VuZXJhdG9yRnVu
Y3Rpb25Qcm90b3R5cGU+IG1fZ2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgV3JpdGVC
YXJyaWVyPEdlbmVyYXRvclByb3RvdHlwZT4gbV9nZW5lcmF0b3JQcm90b3R5cGU7CiAgICAgV3Jp
dGVCYXJyaWVyPEFzeW5jR2VuZXJhdG9yUHJvdG90eXBlPiBtX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlOwotICAgIFdyaXRlQmFycmllcjxNb2R1bGVMb2FkZXJQcm90b3R5cGU+IG1fbW9kdWxlTG9h
ZGVyUHJvdG90eXBlOwogCiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmU+IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV93aXRoU2NvcGVTdHJ1Y3R1cmU7CkBAIC0zNTgsNyArMzU3LDYg
QEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCB7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcm94eU9iamVjdFN0cnVjdHVyZTsK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1
cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcm94eVJldm9rZVN0cnVjdHVyZTsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX21vZHVsZUxvYWRlclN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3Rv
dHlwZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJl
OwogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQpAQCAtNjc3LDcgKzY3NSw2IEBAIGNs
YXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qgewog
ICAgIFN0cnVjdHVyZSogcHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3By
b3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVByb3h5
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICBTdHJ1Y3R1
cmUqIG1vZHVsZUxvYWRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVy
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZXN0UGFyYW1ldGVyU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gYXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOyB9CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLmdldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKaW5kZXgg
OTA4NTkxZDkyODBjOGRmOGQzM2Y2NWNmMzM5NzhiMzI3OGMwMGYwNS4uNGM0OGY0NWZmNTYzOGZl
NmVhMThjMzZiYTJlMDNkZmJlZmE5MDU1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcApAQCAtMzgsMTQgKzM4LDMwIEBACiAjaW5jbHVk
ZSAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1NvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5oIgotI2luY2x1ZGUgIk1vZHVsZUxv
YWRlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQYXJzZU1v
ZHVsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlclJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJFdmFsdWF0ZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck1vZHVsZURlY2xh
cmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlc29sdmUoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlU3luYyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckZl
dGNoKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyR2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KEV4ZWNTdGF0ZSopOworCit9CisKKyNp
bmNsdWRlICJKU01vZHVsZUxvYWRlci5sdXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUz
LDYgKzY5LDMyIEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01v
ZHVsZUxvYWRlcik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU01vZHVsZUxvYWRlcjo6c19pbmZvID0g
eyAiTW9kdWxlTG9hZGVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01vZHVsZUxvYWRlcikgfTsKIAorLyogU291cmNlIGZvciBKU01vZHVs
ZUxvYWRlci5sdXQuaAorQGJlZ2luIG1vZHVsZUxvYWRlclRhYmxlCisgICAgZW5zdXJlUmVnaXN0
ZXJlZCAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgICAgZm9yY2VGdWxmaWxsUHJvbWlzZSAgICAgICAg
ICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAyCisgICAgZnVsZmlsbEZldGNoICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgICAg
cmVxdWVzdEZldGNoICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCisgICAgcmVxdWVzdEluc3RhbnRp
YXRlICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAzCisgICAgcmVxdWVzdFNhdGlzZnkgICAgICAgICAgICAgICAg
IEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAzCisgICAgbGluayAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgICAgbW9k
dWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIG1vZHVsZUxvYWRlck1vZHVsZURlY2xhcmF0aW9u
SW5zdGFudGlhdGlvbiBEb250RW51bXxGdW5jdGlvbiAyCisgICAgbW9kdWxlRXZhbHVhdGlvbiAg
ICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAyCisgICAgZXZhbHVhdGUgICAgICAgICAgICAgICAgICAgICAgIG1v
ZHVsZUxvYWRlckV2YWx1YXRlICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAzCisgICAgcHJvdmlkZUZldGNoICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgICAgbG9hZEFu
ZEV2YWx1YXRlTW9kdWxlICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCisgICAgbG9hZE1vZHVsZSAgICAgICAgICAg
ICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAzCisgICAgbGlua0FuZEV2YWx1YXRlTW9kdWxlICAgICAgICAgIEpTQnVp
bHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAy
CisgICAgcmVxdWVzdEltcG9ydE1vZHVsZSAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCisgICAgZ2V0TW9kdWxl
TmFtZXNwYWNlT2JqZWN0ICAgICAgIG1vZHVsZUxvYWRlckdldE1vZHVsZU5hbWVzcGFjZU9iamVj
dCAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgICAgcGFyc2VNb2R1bGUgICAgICAgICAgICAg
ICAgICAgIG1vZHVsZUxvYWRlclBhcnNlTW9kdWxlICAgICAgICAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAyCisgICAgcmVxdWVzdGVkTW9kdWxlcyAgICAgICAgICAgICAgIG1vZHVsZUxv
YWRlclJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisg
ICAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZUxvYWRlclJlc29sdmUgICAg
ICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgICAgcmVzb2x2ZVN5bmMg
ICAgICAgICAgICAgICAgICAgIG1vZHVsZUxvYWRlclJlc29sdmVTeW5jICAgICAgICAgICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgICAgZmV0Y2ggICAgICAgICAgICAgICAgICAgICAg
ICAgIG1vZHVsZUxvYWRlckZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAzCitAZW5kCisqLworCiBKU01vZHVsZUxvYWRlcjo6SlNNb2R1bGVMb2FkZXIoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKIHsKQEAgLTI5NSw0ICszMzcsMTYzIEBAIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
KiBKU01vZHVsZUxvYWRlcjo6Z2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
CiAgICAgcmV0dXJuIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUGFyc2VNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisg
ICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAg
ICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgIGF1dG8gcmVqZWN0ID0g
WyZdIHsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBkZWZl
cnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHNjb3BlLnJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgfTsKKworICAgIGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQorICAgICAgICByZXR1cm4gcmVqZWN0KCk7CisKKyAgICBKU1ZhbHVlIHNvdXJjZSA9
IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IGpzQ2FzdDxKU1Nv
dXJjZUNvZGUqPihzb3VyY2UpOworICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IGpzU291cmNl
Q29kZS0+c291cmNlQ29kZSgpOworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChz
b3VyY2VDb2RlLnByb3ZpZGVyKCktPnNvdXJjZVR5cGUoKSA9PSBTb3VyY2VQcm92aWRlclNvdXJj
ZVR5cGU6OldlYkFzc2VtYmx5KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFz
c2VtYmx5UHJvdG90eXBlOjppbnN0YW50aWF0ZShleGVjLCBkZWZlcnJlZCwgbW9kdWxlS2V5LCBq
c1NvdXJjZUNvZGUpKTsKKyNlbmRpZgorCisgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJj
ZUNvZGUpOworCisgICAgUGFyc2VyRXJyb3IgZXJyb3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1v
ZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1O
b2RlPigKKyAgICAgICAgJnZtLCBzb3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCisgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0
LCBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFs
eXplTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKKyAgICBpZiAoZXJyb3Iu
aXNWYWxpZCgpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlamVjdChleGVj
LCBlcnJvci50b0Vycm9yT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNl
Q29kZSkpOworICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH0KKyAgICBBU1NFUlQobW9k
dWxlUHJvZ3JhbU5vZGUpOworCisgICAgTW9kdWxlQW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoZXhl
YywgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBtb2R1bGVQcm9ncmFtTm9kZS0+dmFyRGVjbGFyYXRp
b25zKCksIG1vZHVsZVByb2dyYW1Ob2RlLT5sZXhpY2FsVmFyaWFibGVzKCkpOworICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiByZWplY3QoKTsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgbW9kdWxlQW5hbHl6ZXIu
YW5hbHl6ZSgqbW9kdWxlUHJvZ3JhbU5vZGUpKTsKKyAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9F
eGNlcHRpb24oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUmVxdWVzdGVkTW9kdWxlcyhF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogbW9kdWxlUmVjb3JkID0g
anNEeW5hbWljQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KHZtLCBleGVjLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKCFtb2R1bGVSZWNvcmQpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
bnVsbHB0cikpOworICAgIH0KKworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6
ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICBzaXplX3QgaSA9IDA7CisgICAgZm9yIChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJl
cXVlc3RlZE1vZHVsZXMoKSkgeworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGkrKywganNTdHJpbmcoZXhlYywga2V5LmdldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEFi
c3RyYWN0TW9kdWxlUmVjb3JkKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1v
ZHVsZVJlY29yZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCisgICAgICAg
IGRhdGFMb2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxu
Iik7CisKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvb2sgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlc29s
dmUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8g
SG9vayBwb2ludCwgTG9hZGVyLnJlc29sdmUuCisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHVi
LmlvL2xvYWRlci8jYnJvd3Nlci1yZXNvbHZlCisgICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQgcmVz
b2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2NhdGlv
bi4KKyAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0aGUg
VVJMIGZvciB0aGUgcmVzb3VyY2UuCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHlu
YW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghbG9hZGVyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5yZXNvbHZlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlU3luYyhF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBKU01vZHVsZUxvYWRlciogbG9h
ZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgYXV0byByZXN1bHQgPSBsb2FkZXItPnJlc29sdmVTeW5jKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgcmVzdWx0KSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyRmV0Y2goRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gSG9vayBw
b2ludCwgTG9hZGVyLmZldGNoCisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jYnJvd3Nlci1mZXRjaAorICAgIC8vIFRha2UgdGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291
cmNlIGFjdHVhbGx5LgorICAgIC8vIEZvciBleGFtcGxlLCBKYXZhU2NyaXB0Q29yZSBzaGVsbCBj
YW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0aGUgcmVzb3VyY2UKKyAgICAvLyBmcm9tIHRo
ZSBsb2NhbCBmaWxlIHN5c3RlbS4KKyAgICBKU01vZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5h
bWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYg
KCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmZldGNoKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQoMikpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJHZXRNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogbG9h
ZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgYXV0byogbW9kdWxlTmFtZXNwYWNlT2JqZWN0ID0gbG9hZGVyLT5n
ZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLSBBZGRpdGlvbmFsIEhvb2sgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBUbyBpbnN0cnVtZW50IGFuZCByZXRyaWV2
ZSB0aGUgZXJyb3JzIHJhaXNlZCBmcm9tIHRoZSBtb2R1bGUgZXhlY3V0aW9uLAorICAgIC8vIHdl
IGluc2VydGVkIHRoZSBob29rIHBvaW50IGhlcmUuCisKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9h
ZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGxvYWRlci0+ZXZhbHVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMt
PmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCmlu
ZGV4IDk3ZmVkODMxMmJmNmMwODk4NmViNjJkNjhhNWNmYmMwYTc0ZGQxNDYuLjRkY2Q1MjJhZmVh
MjRiYjZjODYyNjNjYzQ3OTZhZWNhN2FjYzU0NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaApAQCAtMzgsNyArMzgsOCBAQCBjbGFzcyBKU01v
ZHVsZUxvYWRlciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHByaXZhdGU6CiAg
ICAgSlNNb2R1bGVMb2FkZXIoVk0mLCBTdHJ1Y3R1cmUqKTsKIHB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CiAKICAgICBlbnVtIFN0YXR1cyB7
CiAgICAgICAgIEZldGNoID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiOGJkYzlmNTFjZmQ2YTI3MjQ2YmJlNmJmN2I4N2M3M2IzODlmOTcwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vZHVsZUxvYWRlclByb3Rv
dHlwZS5oIgotCi0jaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCi0jaW5jbHVkZSAiQ2F0Y2hTY29w
ZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJFcnJvci5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgi
Ci0jaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgotI2luY2x1ZGUgIkpTTWFw
LmgiCi0jaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkpTTW9kdWxl
TG9hZGVyLmgiCi0jaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRl
ICJKU01vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgotI2luY2x1ZGUg
Ik1vZHVsZUFuYWx5emVyLmgiCi0jaW5jbHVkZSAiTm9kZXMuaCIKLSNpbmNsdWRlICJQYXJzZXIu
aCIKLSNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5UHJvdG90
eXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJl
cXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVs
ZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90
b3R5cGVSZXNvbHZlU3luYyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUZldGNoKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlR2V0TW9k
dWxlTmFtZXNwYWNlT2JqZWN0KEV4ZWNTdGF0ZSopOwotCi19Ci0KLSNpbmNsdWRlICJNb2R1bGVM
b2FkZXJQcm90b3R5cGUubHV0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1TVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoTW9kdWxlTG9hZGVyUHJvdG90eXBlKTsKLQotY29u
c3QgQ2xhc3NJbmZvIE1vZHVsZUxvYWRlclByb3RvdHlwZTo6c19pbmZvID0geyAiTW9kdWxlTG9h
ZGVyIiwgJkJhc2U6OnNfaW5mbywgJm1vZHVsZUxvYWRlclByb3RvdHlwZVRhYmxlLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZUxvYWRlclByb3RvdHlwZSkgfTsKLQotLyogU291
cmNlIGZvciBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmgKLUBiZWdpbiBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVUYWJsZQotICAgIGVuc3VyZVJlZ2lzdGVyZWQgICAgICAgICAgICAgICBKU0J1aWx0
aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMQotICAgIGZvcmNlRnVsZmlsbFByb21pc2UgICAgICAgICAgICBKU0J1aWx0aW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgotICAgIGZ1bGZpbGxGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAg
IHJlcXVlc3RGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwotICAgIHJlcXVl
c3RJbnN0YW50aWF0ZSAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwotICAgIHJlcXVlc3RTYXRp
c2Z5ICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwotICAgIGxpbmsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFu
dGlhdGlvbiBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24gRG9udEVudW18RnVuY3Rpb24gMgotICAgIG1vZHVsZUV2YWx1YXRpb24gICAgICAgICAgICAg
ICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMgotICAgIGV2YWx1YXRlICAgICAgICAgICAgICAgICAgICAgICBtb2R1
bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZSAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMwotICAgIHByb3ZpZGVGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMgotICAgIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwot
ICAgIGxvYWRNb2R1bGUgICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwotICAgIGxp
bmtBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIHJlcXVlc3RJ
bXBvcnRNb2R1bGUgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwotICAgIGdldE1vZHVsZU5hbWVz
cGFjZU9iamVjdCAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVHZXRNb2R1bGVOYW1lc3BhY2VP
YmplY3QgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHBhcnNlTW9kdWxlICAgICAgICAg
ICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZSAgICAgICAgICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIHJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAg
ICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMQotICAgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICBt
b2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMgotICAgIHJlc29sdmVTeW5jICAgICAgICAgICAgICAgICAgICBtb2R1bGVM
b2FkZXJQcm90b3R5cGVSZXNvbHZlU3luYyAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMgotICAgIGZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVGZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MwotQGVuZAotKi8KLQotTW9kdWxlTG9hZGVyUHJvdG90eXBlOjpNb2R1bGVMb2FkZXJQcm90b3R5
cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJy
ZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCk7Ci0KLSAgICBhdXRvIHJlamVjdCA9IFsmXSB7Ci0gICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRp
b24pOwotICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH07Ci0KLSAgICBjb25zdCBJZGVu
dGlmaWVyIG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIHJl
amVjdCgpOwotCi0gICAgSlNWYWx1ZSBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBh
dXRvKiBqc1NvdXJjZUNvZGUgPSBqc0Nhc3Q8SlNTb3VyY2VDb2RlKj4oc291cmNlKTsKLSAgICBT
b3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBqc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKTsKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBpZiAoc291cmNlQ29kZS5wcm92aWRlcigpLT5zb3Vy
Y2VUeXBlKCkgPT0gU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseVByb3RvdHlwZTo6aW5zdGFudGlh
dGUoZXhlYywgZGVmZXJyZWQsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7Ci0jZW5kaWYKLQot
ICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQotICAgIFBhcnNlckVycm9y
IGVycm9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJv
Z3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCi0gICAgICAgICZ2bSwgc291cmNl
Q29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAotICAg
ICAgICBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1
bGUsIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90
TmVlZGVkLCBlcnJvcik7Ci0gICAgaWYgKGVycm9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXJyb3IudG9FcnJvck9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZUNvZGUpKTsKLSAgICAgICAgc2NvcGUucmVs
ZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKLSAgICB9Ci0gICAgQVNTRVJUKG1vZHVsZVByb2dyYW1Ob2RlKTsKLQotICAgIE1v
ZHVsZUFuYWx5emVyIG1vZHVsZUFuYWx5emVyKGV4ZWMsIG1vZHVsZUtleSwgc291cmNlQ29kZSwg
bW9kdWxlUHJvZ3JhbU5vZGUtPnZhckRlY2xhcmF0aW9ucygpLCBtb2R1bGVQcm9ncmFtTm9kZS0+
bGV4aWNhbFZhcmlhYmxlcygpKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQotICAgICAgICByZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVk
LT5yZXNvbHZlKGV4ZWMsIG1vZHVsZUFuYWx5emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1Ob2Rl
KSk7Ci0gICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8QWJz
dHJhY3RNb2R1bGVSZWNvcmQqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghbW9k
dWxlUmVjb3JkKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKLSAgICB9
Ci0KLSAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIsIG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpLnNpemUoKSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgc2l6ZV90IGkgPSAw
OwotICAgIGZvciAoYXV0byYga2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkp
IHsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3RyaW5nKGV4
ZWMsIGtleS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlw
ZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxBYnN0cmFjdE1v
ZHVsZVJlY29yZCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFtb2R1bGVSZWNv
cmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQotICAgICAgICBkYXRhTG9n
KCJMb2FkZXIgW2xpbmtdICIsIG1vZHVsZVJlY29yZC0+bW9kdWxlS2V5KCksICJcbiIpOwotCi0g
ICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBIb29rIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNv
bHZlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIC8v
IEhvb2sgcG9pbnQsIExvYWRlci5yZXNvbHZlLgotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1
Yi5pby9sb2FkZXIvI2Jyb3dzZXItcmVzb2x2ZQotICAgIC8vIFRha2UgdGhlIG5hbWUgYW5kIHJl
c29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2UgbG9jYXRp
b24uCi0gICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFuZCByZXR1cm4gdGhl
IFVSTCBmb3IgdGhlIHJlc291cmNlLgotICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5
bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBp
ZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVz
b2x2ZVN5bmMoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNNb2R1bGVM
b2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+
dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbG9hZGVyLT5yZXNvbHZl
U3luYyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFy
Z3VtZW50KDIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGlkZW50aWZpZXJUb0pTVmFsdWUodm0s
IHJlc3VsdCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRl
clByb3RvdHlwZUZldGNoKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5mZXRjaAotICAgIC8vIGh0dHBzOi8vd2hh
dHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItZmV0Y2gKLSAgICAvLyBUYWtlIHRoZSBrZXkg
YW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1YWxseS4KLSAgICAvLyBGb3IgZXhhbXBsZSwgSmF2
YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291
cmNlCi0gICAgLy8gZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCi0gICAgSlNNb2R1bGVMb2Fk
ZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhp
c1ZhbHVlKCkpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5m
ZXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFy
Z3VtZW50KDIpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9h
ZGVyUHJvdG90eXBlR2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGF1dG8qIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVM
b2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbG9hZGVyKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8qIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdCA9IGxvYWRlci0+Z2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZU5hbWVzcGFj
ZU9iamVjdCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCBIb29rIEZ1
bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgLy8gVG8gaW5zdHJ1bWVudCBhbmQgcmV0cmlldmUgdGhlIGVycm9ycyByYWlzZWQg
ZnJvbSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiwKLSAgICAvLyB3ZSBpbnNlcnRlZCB0aGUgaG9vayBw
b2ludCBoZXJlLgotCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU01vZHVsZUxvYWRl
ciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlz
VmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmV2
YWx1YXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+
YXJndW1lbnQoMikpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjZkNjFkNzU0MzA4ZmRmMmVkYTAwMmMyMjA1YTg5ZWIw
M2FjZmMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU09iamVjdC5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNJbnRlcm5hbFByb21pc2U7Ci0KLWNsYXNz
IE1vZHVsZUxvYWRlclByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
LXByaXZhdGU6Ci0gICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwotCi0gICAgc3RhdGljIE1vZHVsZUxvYWRlclByb3RvdHlwZSog
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICB7Ci0gICAgICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZSogb2JqZWN0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8TW9kdWxlTG9hZGVyUHJvdG90eXBlPih2bS5oZWFwKSkgTW9kdWxlTG9h
ZGVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338329</attachid>
            <date>2018-04-19 09:30:32 -0700</date>
            <delta_ts>2018-04-19 09:35:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184784-20180420013031.patch</filename>
            <type>text/plain</type>
            <size>75443</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YzkwM2YyMDhiOTc2ZmMzYWVjNjAyY2M1OGRlMWMxNDJiNjMyMWI5Li45ZDUyOGZjNjQxNTE5OWQ1
NGZiOGZiYWZjM2I0ZmRlZWMxYTU4YmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxOC0wNC0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBSZW1vdmUgTW9kdWxlTG9hZGVyUHJvdG90eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIGludHJv
ZHVjZSBNb2R1bGVMb2FkZXJQcm90b3R5cGUsIE1vZHVsZUxvYWRlciBtYXkgYmUgY3JlYXRlZCBi
eSB1c2VycyBhbmQgZXhwb3NlZCB0byB1c2Vycy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGxvYWRl
ciBzcGVjIGlzIGFiYW5kb25lZC4gU28gd2UgZG8gbm90IG5lZWQgdG8gaGF2ZSBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUgYW5kIEpTTW9kdWxlTG9hZGVyLgorICAgICAgICBUaGlzIHBhdGNoIG1lcmdl
cyBNb2R1bGVMb2FkZXJQcm90b3R5cGUncyBmdW5jdGlvbmFsaXR5IGludG8gSlNNb2R1bGVMb2Fk
ZXIuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVs
ZUxvYWRlclByb3RvdHlwZS5qcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHJveHlSZXZva2VTdHJ1
Y3R1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
U3RydWN0dXJlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUpOgorICAgICAg
ICAoSlNDOjptb2R1bGVMb2FkZXJSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6
bW9kdWxlTG9hZGVyUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclJlc29sdmVT
eW5jKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpt
b2R1bGVMb2FkZXJHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QpOgorICAgICAgICAoSlNDOjptb2R1
bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oOiBSZW1vdmVkLgorCiAyMDE4
LTA0LTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIEZpeCBqc2Mgc2hlbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAzYzQwNWNkMDc3NDU5NDU4MmQ0NWQyODhlZGQ5MWU4ZDQ3YzFmYTJiLi5iZjU4MTM0
ZjA3ZGY3ZmRmYjM2NmNhNWEwNjYxMmQ3MTQzZDY0ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC03NSwxMSArNzUsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVD
VF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VD
b25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAogICAgIHJ1bnRp
bWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAog
ICAgIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAotICAgIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAogICAgIHJ1bnRp
bWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMDIsNyArMTEwMiw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwotICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvTW9kdWxlTG9hZGVyLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9idWlsdGlucy9PYmplY3RDb25zdHJ1Y3Rvci5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCAwZmRkYzNhOTE2MTJjYTkzM2Q2NGYxMTIxODQxYTI3ODRi
NDc0YjdjLi44Mjk1NjkwYzdjNWI3NDI5ZGE2ZjE1Y2YxZTc2YjMyYjM1OWI1MjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTA4LDcgKzEwOCw3IEBA
IEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3Jl
KS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL01vZHVsZUxvYWRlclByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvTW9kdWxlTG9hZGVyLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9O
dW1iZXJDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVt
YmVyUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9PYmplY3RD
b25zdHJ1Y3Rvci5qcyBcCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBPQkpFQ1RfTFVUX0hFQURFUlMg
PSBcCiAgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3Qu
bHV0LmggXAogICAgIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggXAorICAgIEpT
TW9kdWxlTG9hZGVyLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21p
c2VQcm90b3R5cGUubHV0LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBNYXBQcm90b3R5cGUubHV0LmggXAotICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBc
CiAgICAgTnVtYmVyQ29uc3RydWN0b3IubHV0LmggXAogICAgIE51bWJlclByb3RvdHlwZS5sdXQu
aCBcCiAgICAgT2JqZWN0Q29uc3RydWN0b3IubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBiZTU5M2UyOGFiMDY2MGFlZWFjZGVlMmViM2UyMTgxZmRlYzBmZWFlLi42YWMw
ODE2YmVkMGM3MDIyZTBkNmEyNThjZTM2ZTMwNWE1YzNjMjcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAkJOTk2QjczMUQxQkRBMDhFRjAwMzMx
Qjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEIxQkQ5RkEyQzAwMzMxQjg0IC8qIEpTR2xvYmFsT2Jq
ZWN0Lmx1dC5oICovOyB9OwogCQk5OTZCNzMxRTFCREEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNl
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzE4NEUyNDE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggKi87IH07CiAJCTk5NkI3MzFGMUJEQTA4RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE4NEUyNTE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oICov
OyB9OwotCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2
QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCAqLzsg
fTsKKwkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlci5sdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5NkI3MzBDMUJEOUZB
MkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggKi87IH07CiAJCTk5NkI3
MzIxMUJEQTA4RUYwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwRDFCRDlGQTJDMDAzMzFC
ODQgLyogTnVtYmVyUHJvdG90eXBlLmx1dC5oICovOyB9OwogCQk5OTZCNzMyMjFCREEwOEVGMDAz
MzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwRTFCRDlGQTJDMDAzMzFCODQgLyogT2JqZWN0
Q29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCTk5NkI3MzIzMUJEQTA4RUYwMDMzMUI4NCAvKiBS
ZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTk2QjczMEYxQkQ5RkEyQzAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0Lmgg
Ki87IH07CkBAIC0xNzA0LDcgKzE3MDQsNiBAQAogCQlFMzUwNzA4QTFEQzQ5QkJGMDA4OUJDRDYg
LyogRE9NSklUU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzUwNzA4OTFEQzQ5QkI2MDA4OUJDRDYgLyogRE9NSklUU2lnbmF0dXJlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1NDYy
MkIxQjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJBMUI2MDY1RDEwMDU0NTM4NiAv
KiBDb25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTM1NTVCOEExREFFMDNBNTAwRjM2OTIxIC8qIERPTUpJVENhbGxET01H
ZXR0ZXJTbmlwcGV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzU1NUI4OTFEQUUwM0EyMDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBw
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlF
MzU1RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFCN0RDODUz
MDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi87IH07CiAJCUUzNUNBMTU0MURC
QzNBNUMwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01K
SVRIZWFwUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzVDQTE1NjFEQkMzQTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFE
QkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1RTAzNjAxQjdBQjQzRTAwNzNBRDJB
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zODYyLDcgKzM4NjEsNyBAQAogCQk5OTZCNzMwOTFC
RDlGQTJDMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVycm9yUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OTZCNzMwQTFCRDlGQTJDMDAzMzFCODQgLyogSlNEYXRhVmlld1Byb3RvdHlw
ZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3Rv
dHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEIxQkQ5RkEy
QzAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5s
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTZCNzMwQzFCRDlGQTJD
MDAzMzFCODQgLyogTW9kdWxlTG9hZGVyLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5NkI3MzBEMUJEOUZBMkMwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE51bWJlclByb3RvdHlwZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEUxQkQ5RkEyQzAwMzMxQjg0
IC8qIE9iamVjdENvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPYmplY3RDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTk2QjczMEYxQkQ5RkEyQzAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZmxlY3RPYmplY3QubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTE3LDcgKzQ1MTYsNyBAQAogCQlFMTc4NjM2QzBEOUJF
RUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplVGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE4RTNBNTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBWTS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29k
ZS5sYW5nLm9iamNwcDsgfTsKIAkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBWTS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRp
ZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwotCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyog
TW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBl
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE2MTgxMDFFQzVGRTA4MDAwNkEy
MTggLyogRE9NQW5ub3RhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01Bbm5vdGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTYxODExMUVD
NUZFMDgwMDA2QTIxOCAvKiBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNjE4MTIxRUM1RkUwODAwMDZBMjE4IC8q
IERPTUF0dHJpYnV0ZUdldHRlclNldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ1NTMsOCArNDU1Miw2IEBACiAJCUUzNTA3MDg5MURDNDlCQjYwMDg5QkNENiAvKiBE
T01KSVRTaWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklU
U2lnbmF0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNTQ2MjJBMUI2MDY1
RDEwMDU0NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbnN0cnVjdEFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM1NTVCODkxREFFMDNBMjAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0ZXJTbmlwcGV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVENhbGxET01HZXR0ZXJT
bmlwcGV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzNTVGMzUwMUI3REM4NTMw
MEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRl
clByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNEYxREJD
M0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJh
Y3RIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEFic3RyYWN0
SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MTFEQkMzQTU2MDBG
ODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MTg2LDcgKzYxODMsNyBAQAogCQkJCUJDMThDNTJEMEUxNkZDRTEwMEIzNDQ2MCAvKiBM
ZXhlci5sdXQuaCAqLywKIAkJCQk3MERFOUEwODFCRTdENjcwMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oICovLAogCQkJCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
bHV0LmggKi8sCi0JCQkJOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclBy
b3RvdHlwZS5sdXQuaCAqLywKKwkJCQk5OTZCNzMwQzFCRDlGQTJDMDAzMzFCODQgLyogTW9kdWxl
TG9hZGVyLmx1dC5oICovLAogCQkJCUJDMjY4MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBOdW1iZXJD
b25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5OTZCNzMwRDFCRDlGQTJDMDAzMzFCODQgLyogTnVt
YmVyUHJvdG90eXBlLmx1dC5oICovLAogCQkJCTk5NkI3MzBFMUJEOUZBMkMwMDMzMUI4NCAvKiBP
YmplY3RDb25zdHJ1Y3Rvci5sdXQuaCAqLywKQEAgLTY4MjIsOCArNjgxOSw2IEBACiAJCQkJOTAy
MTNFM0MxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLywKIAkJCQk3QzAw
OENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8sCiAJCQkJRkUyQTg3NUYxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8sCi0JCQkJRTM1NUYz
NTAxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgKi8sCi0JCQkJ
RTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oICovLAog
CQkJCTE0NzM0MUREMURDMkNFOTYwMEFBMjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5j
cHAgKi8sCiAJCQkJMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmggKi8sCiAJCQkJQkMwMkU5MDgwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwICovLApAQCAtNzkyNyw3ICs3OTIyLDcgQEAKIAkJCQlFMzNGNTA4ODFC
ODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJ
N0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJ
CTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8sCi0JCQkJRTMw
Njc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5qcyAqLywKKwkJ
CQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAogCQkJCUE1
MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQlB
MTVERTVDNTFDMEZCRjhEMDA4OTEzM0QgLyogTnVtYmVyUHJvdG90eXBlLmpzICovLAogCQkJCTdD
RjlCQzVDMUI2NUQ5QjEwMDlEQjFFRiAvKiBPYmplY3RDb25zdHJ1Y3Rvci5qcyAqLywKQEAgLTkx
OTUsOCArOTE5MCw3IEBACiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBt
b2RlbHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlFMzc5NEU3NjFCNzdFQjk3MDA1NTQzQUUgLyog
TW9kdWxlQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUUzNTVGMzUzMUI3REM4NTMwMEM1
MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTk5NkI3
MzIwMUJEQTA4RUYwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUY2MzQzNDU3NzI3NEZBRkI5MzM2QzM4IC8qIE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTBGMURDQTky
OTQwMDE0RjlGRSAvKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDczNDFENjFEQzAyRUI5MDBBQTI5QkEgLyogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDRiM2Q5ZjdlYzUw
NDA4MGI3MjMwODAzMmE3ZDJlYTcwY2RjYmZiNWIuLjUwNzViYjNkNzFkNjIwY2U4OTM5NjJlMGI5
MGMxMThlMDE5ZjdjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTg1Nyw3ICs4
NTcsNiBAQCBydW50aW1lL01hdGNoUmVzdWx0LmNwcAogcnVudGltZS9NYXRoQ29tbW9uLmNwcAog
cnVudGltZS9NYXRoT2JqZWN0LmNwcAogcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAotcnVu
dGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmNwcAogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAogcnVudGltZS9O
YXRpdmVFcnJvclByb3RvdHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9Nb2R1bGVMb2FkZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvTW9kdWxlTG9hZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlZjkxZWI4NjU1MWZhOTMxOTdjMTRkODA5
MDhkZDY5ZjU2ZGM3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvTW9kdWxlTG9hZGVyLmpzCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gaHR0cHM6Ly93aGF0d2cu
Z2l0aHViLmlvL2xvYWRlci8jbG9hZGVyLW9iamVjdAorLy8gTW9kdWxlIExvYWRlciBoYXMgc2V2
ZXJhbCBob29rcyB0aGF0IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSBwbGF0Zm9ybS4KKy8vIEZv
ciBleGFtcGxlLCB0aGUgW1tGZXRjaF1dIGhvb2sgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBKYXZh
U2NyaXB0Q29yZSBzaGVsbAorLy8gYXMgZmV0Y2hpbmcgdGhlIHBheWxvYWQgZnJvbSB0aGUgbG9j
YWwgZmlsZSBzeXN0ZW0uCisvLyBDdXJyZW50bHksIHRoZXJlIGFyZSA0IGhvb2tzLgorLy8gICAg
MS4gTG9hZGVyLnJlc29sdmUKKy8vICAgIDIuIExvYWRlci5mZXRjaAorCitAZ2xvYmFsUHJpdmF0
ZQorZnVuY3Rpb24gc2V0U3RhdGVUb01heChlbnRyeSwgbmV3U3RhdGUpCit7CisgICAgLy8gaHR0
cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jc2V0LXN0YXRlLXRvLW1heAorCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgaWYgKGVudHJ5LnN0YXRlIDwgbmV3U3RhdGUpCisgICAgICAgIGVu
dHJ5LnN0YXRlID0gbmV3U3RhdGU7Cit9CisKK0BnbG9iYWxQcml2YXRlCitmdW5jdGlvbiBuZXdS
ZWdpc3RyeUVudHJ5KGtleSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9h
ZGVyLyNyZWdpc3RyeQorICAgIC8vCisgICAgLy8gRWFjaCByZWdpc3RyeSBlbnRyeSBiZWNvbWVz
IG9uZSBvZiB0aGUgNSBzdGF0ZXMuCisgICAgLy8gMS4gRmV0Y2gKKyAgICAvLyAgICAgUmVhZHkg
dG8gZmV0Y2ggKG9yIG5vdyBmZXRjaGluZykgdGhlIHJlc291cmNlIG9mIHRoaXMgbW9kdWxlLgor
ICAgIC8vICAgICBUeXBpY2FsbHksIHdlIGZldGNoIHRoZSBzb3VyY2UgY29kZSBvdmVyIHRoZSBu
ZXR3b3JrIG9yIGZyb20gdGhlIGZpbGUgc3lzdGVtLgorICAgIC8vICAgICBhLiBJZiB0aGUgc3Rh
dHVzIGlzIEZldGNoIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50
cnkgaXMgcmVhZHkgdG8gZmV0Y2guCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgRmV0
Y2ggYW5kIHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50cnkgaXMganVz
dCBmZXRjaGluZyB0aGUgcmVzb3VyY2UuCisgICAgLy8KKyAgICAvLyAyLiBJbnN0YW50aWF0ZSAo
QW5hbHl6ZU1vZHVsZSkKKyAgICAvLyAgICAgUmVhZHkgdG8gaW5zdGFudGlhdGUgKG9yIG5vdyBp
bnN0YW50aWF0aW5nKSB0aGUgbW9kdWxlIHJlY29yZCBmcm9tIHRoZSBmZXRjaGVkCisgICAgLy8g
ICAgIHNvdXJjZSBjb2RlLgorICAgIC8vICAgICBUeXBpY2FsbHksIHdlIHBhcnNlIHRoZSBtb2R1
bGUgY29kZSwgZXh0cmFjdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBiaW5kaW5nIGluZm9ybWF0aW9u
LgorICAgIC8vICAgICBhLiBJZiB0aGUgc3RhdHVzIGlzIEluc3RhbnRpYXRlIGFuZCB0aGVyZSBp
cyBubyBlbnRyeS5pbnN0YW50aWF0ZSBwcm9taXNlLCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gaW5z
dGFudGlhdGUuCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5k
IHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50cnkgaXMganVzdCBpbnN0
YW50aWF0aW5nCisgICAgLy8gICAgICAgIHRoZSBtb2R1bGUgcmVjb3JkLgorICAgIC8vCisgICAg
Ly8gMy4gU2F0aXNmeQorICAgIC8vICAgICBSZWFkeSB0byByZXF1ZXN0IHRoZSBkZXBlbmRlbnQg
bW9kdWxlcyAob3Igbm93IHJlcXVlc3RpbmcgJiByZXNvbHZpbmcpLgorICAgIC8vICAgICBXaXRo
b3V0IHRoaXMgc3RhdGUsIHRoZSBjdXJyZW50IGRyYWZ0IGNhdXNlcyBpbmZpbml0ZSByZWN1cnNp
b24gd2hlbiB0aGVyZSBpcyBjaXJjdWxhciBkZXBlbmRlbmN5LgorICAgIC8vICAgICBhLiBJZiB0
aGUgc3RhdHVzIGlzIFNhdGlzZnkgYW5kIHRoZXJlIGlzIG5vIGVudHJ5LnNhdGlzZnkgcHJvbWlz
ZSwgdGhlIGVudHJ5IGlzIHJlYWR5IHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcy4KKyAgICAv
LyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBTYXRpc2Z5IGFuZCB0aGVyZSBpcyB0aGUgZW50cnku
c2F0aXNmeSBwcm9taXNlLCB0aGUgZW50cnkgaXMganVzdCByZXNvbHZpbmcKKyAgICAvLyAgICAg
ICAgdGhlIGRlcGVuZGVuY2llcy4KKyAgICAvLworICAgIC8vIDQuIExpbmsKKyAgICAvLyAgICAg
UmVhZHkgdG8gbGluayB0aGUgbW9kdWxlIHdpdGggdGhlIG90aGVyIG1vZHVsZXMuCisgICAgLy8g
ICAgIExpbmtpbmcgbWVhbnMgdGhhdCB0aGUgbW9kdWxlIGltcG9ydHMgYW5kIGV4cG9ydHMgdGhl
IGJpbmRpbmdzIGZyb20vdG8gdGhlIG90aGVyIG1vZHVsZXMuCisgICAgLy8KKyAgICAvLyA1LiBS
ZWFkeQorICAgIC8vICAgICBUaGUgbW9kdWxlIGlzIGxpbmtlZCwgc28gdGhlIG1vZHVsZSBpcyBy
ZWFkeSB0byBiZSBleGVjdXRlZC4KKyAgICAvLworICAgIC8vIEVhY2ggcmVnaXN0cnkgZW50cnkg
aGFzIHRoZSA0IHByb21pc2VzOyAiZmV0Y2giLCAiaW5zdGFudGlhdGUiIGFuZCAic2F0aXNmeSIu
CisgICAgLy8gVGhleSBhcmUgYXNzaWduZWQgd2hlbiBzdGFydGluZyB0aGUgZWFjaCBwaGFzZS4g
QW5kIHRoZXkgYXJlIGZ1bGZpbGxlZCB3aGVuIHRoZSBlYWNoIHBoYXNlIGlzIGNvbXBsZXRlZC4K
KyAgICAvLworICAgIC8vIEluIHRoZSBjdXJyZW50IG1vZHVsZSBkcmFmdCwgbGlua2luZyB3aWxs
IGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgd2hvbGUgbW9kdWxlcyBhcmUgaW5zdGFudGlhdGVkIGFu
ZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZXNvbHZlZC4KKyAgICAvLyBBbmQgZXhlY3V0aW9uIGlz
IGFsc28gZG9uZSBhZnRlciB0aGUgYWxsIG1vZHVsZXMgYXJlIGxpbmtlZC4KKyAgICAvLworICAg
IC8vIFRPRE86IFdlIG5lZWQgdG8gZXhwbG9pdCB0aGUgd2F5IHRvIGV4ZWN1dGUgdGhlIG1vZHVs
ZSB3aGlsZSBmZXRjaGluZyBub24tcmVsYXRlZCBtb2R1bGVzLgorICAgIC8vIE9uZSBzb2x1dGlv
bjsgaW50cm9kdWNpbmcgdGhlIHJlYWR5IHByb21pc2UgY2hhaW4gdG8gZXhlY3V0ZSB0aGUgbW9k
dWxlcyBjb25jdXJyZW50bHkgd2hpbGUga2VlcGluZworICAgIC8vIHRoZSBleGVjdXRpb24gb3Jk
ZXIuCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IGtl
eSwKKyAgICAgICAgc3RhdGU6IEBNb2R1bGVGZXRjaCwKKyAgICAgICAgZmV0Y2g6IEB1bmRlZmlu
ZWQsCisgICAgICAgIGluc3RhbnRpYXRlOiBAdW5kZWZpbmVkLAorICAgICAgICBzYXRpc2Z5OiBA
dW5kZWZpbmVkLAorICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLCAvLyBUbyBrZWVwIHRoZSBtb2R1
bGUgb3JkZXIsIHdlIHN0b3JlIHRoZSBtb2R1bGUga2V5cyBpbiB0aGUgYXJyYXkuCisgICAgICAg
IG1vZHVsZTogQHVuZGVmaW5lZCwgLy8gSlNNb2R1bGVSZWNvcmQKKyAgICAgICAgbGlua0Vycm9y
OiBAdW5kZWZpbmVkLAorICAgICAgICBsaW5rU3VjY2VlZGVkOiB0cnVlLAorICAgICAgICBldmFs
dWF0ZWQ6IGZhbHNlLAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGVuc3VyZVJlZ2lzdGVyZWQoa2V5
KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Vuc3VyZS1yZWdp
c3RlcmVkCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLnJlZ2lz
dHJ5LkBnZXQoa2V5KTsKKyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgIGVudHJ5ID0gQG5ld1JlZ2lzdHJ5RW50cnkoa2V5KTsKKyAgICB0aGlzLnJlZ2lzdHJ5LkBz
ZXQoa2V5LCBlbnRyeSk7CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK2Z1bmN0aW9uIGZvcmNl
RnVsZmlsbFByb21pc2UocHJvbWlzZSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKEBnZXRCeUlkRGlyZWN0UHJpdmF0ZShwcm9taXNlLCAicHJvbWlzZVN0YXRlIikgPT09
IEBwcm9taXNlU3RhdGVQZW5kaW5nKQorICAgICAgICBAZnVsZmlsbFByb21pc2UocHJvbWlzZSwg
dmFsdWUpOworfQorCitmdW5jdGlvbiBmdWxmaWxsRmV0Y2goZW50cnksIHNvdXJjZSkKK3sKKyAg
ICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNmdWxmaWxsLWZldGNoCisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIWVudHJ5LmZldGNoKQorICAgICAgICBlbnRyeS5m
ZXRjaCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTsK
KyAgICB0aGlzLmZvcmNlRnVsZmlsbFByb21pc2UoZW50cnkuZmV0Y2gsIHNvdXJjZSk7CisgICAg
QHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7Cit9CisKKy8vIExvYWRl
ci4KKworZnVuY3Rpb24gcmVxdWVzdEZldGNoKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKQor
eworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtZmV0Y2gK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChlbnRyeS5mZXRjaCkgeworICAgICAgICB2
YXIgY3VycmVudEF0dGVtcHQgPSBlbnRyeS5mZXRjaDsKKyAgICAgICAgaWYgKGVudHJ5LnN0YXRl
ICE9PSBATW9kdWxlRmV0Y2gpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudEF0dGVtcHQ7CisK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRBdHRlbXB0LmNhdGNoKChlcnJvcikgPT4geworICAgICAg
ICAgICAgLy8gRXZlbiBpZiB0aGUgZXhpc3RpbmcgZmV0Y2hpbmcgcmVxdWVzdCBmYWlsZWQsIHRo
aXMgYXR0ZW1wdCBtYXkgc3VjY2VlZC4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBwcmV2
aW91cyBhdHRlbXB0IHVzZWQgaW52YWxpZCBpbnRlZ3JpdHk9IiIgdmFsdWUuIEJ1dCB0aGlzCisg
ICAgICAgICAgICAvLyByZXF1ZXN0IGNvdWxkIGhhdmUgdGhlIGNvcnJlY3QgaW50ZWdyaXR5PSIi
IHZhbHVlLiBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZAorICAgICAgICAgICAgLy8gcmV0cnkgZmV0
Y2hpbmcgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvI2ZldGNoLWEtc2luZ2xlLW1vZHVsZS1zY3JpcHQKKyAgICAgICAgICAgIGlm
IChjdXJyZW50QXR0ZW1wdCA9PT0gZW50cnkuZmV0Y2gpCisgICAgICAgICAgICAgICAgZW50cnku
ZmV0Y2ggPSBAdW5kZWZpbmVkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEZldGNo
KGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
Ly8gSG9vayBwb2ludC4KKyAgICAvLyAyLiBMb2FkZXIuZmV0Y2gKKyAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1mZXRjaAorICAgIC8vICAgICBUYWtl
IHRoZSBrZXkgYW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1YWxseS4KKyAgICAvLyAgICAgRm9y
IGV4YW1wbGUsIEphdmFTY3JpcHRDb3JlIHNoZWxsIGNhbiBwcm92aWRlIHRoZSBob29rIGZldGNo
aW5nIHRoZSByZXNvdXJjZQorICAgIC8vICAgICBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4K
KyAgICB2YXIgZmV0Y2hQcm9taXNlID0gdGhpcy5mZXRjaChlbnRyeS5rZXksIHBhcmFtZXRlcnMs
IGZldGNoZXIpLnRoZW4oKHNvdXJjZSkgPT4geworICAgICAgICBAc2V0U3RhdGVUb01heChlbnRy
eSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICB9KTsK
KyAgICBlbnRyeS5mZXRjaCA9IGZldGNoUHJvbWlzZTsKKyAgICByZXR1cm4gZmV0Y2hQcm9taXNl
OworfQorCitmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGUoZW50cnksIHBhcmFtZXRlcnMsIGZl
dGNoZXIpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVz
dC1pbnN0YW50aWF0ZQorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8gZW50cnkuaW5zdGFu
dGlhdGUgaXMgc2V0IGlmIGZldGNoIHN1Y2NlZWRzLgorICAgIGlmIChlbnRyeS5pbnN0YW50aWF0
ZSkKKyAgICAgICAgcmV0dXJuIGVudHJ5Lmluc3RhbnRpYXRlOworCisgICAgdmFyIGluc3RhbnRp
YXRlUHJvbWlzZSA9IHRoaXMucmVxdWVzdEZldGNoKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVy
KS50aGVuKChzb3VyY2UpID0+IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy8jZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAorICAgICAgICAvLyBOb3cgZmV0Y2hp
bmcgcmVxdWVzdCBzdWNjZWVkcy4gVGhlbiBldmVuIGlmIGluc3RhbnRpYXRpb24gZmFpbHMsIHdl
IHNob3VsZCBjYWNoZSBpdC4KKyAgICAgICAgLy8gSW5zdGFudGlhdGlvbiB3b24ndCBiZSByZXRy
aWVkLgorICAgICAgICBpZiAoZW50cnkuaW5zdGFudGlhdGUpCisgICAgICAgICAgICByZXR1cm4g
ZW50cnkuaW5zdGFudGlhdGU7CisgICAgICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gaW5zdGFudGlh
dGVQcm9taXNlOworCisgICAgICAgIHZhciBrZXkgPSBlbnRyeS5rZXk7CisgICAgICAgIHJldHVy
biB0aGlzLnBhcnNlTW9kdWxlKGtleSwgc291cmNlKS50aGVuKChtb2R1bGVSZWNvcmQpID0+IHsK
KyAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXNNYXAgPSBtb2R1bGVSZWNvcmQuZGVwZW5kZW5j
aWVzTWFwOworICAgICAgICAgICAgdmFyIHJlcXVlc3RlZE1vZHVsZXMgPSB0aGlzLnJlcXVlc3Rl
ZE1vZHVsZXMobW9kdWxlUmVjb3JkKTsKKyAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSBA
bmV3QXJyYXlXaXRoU2l6ZShyZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aCk7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVxdWVzdGVkTW9kdWxlcy5sZW5ndGg7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBkZXBOYW1lID0gcmVxdWVzdGVkTW9kdWxl
c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgZGVwS2V5ID0gdGhpcy5yZXNvbHZlU3luYyhkZXBO
YW1lLCBrZXksIGZldGNoZXIpOworICAgICAgICAgICAgICAgIHZhciBkZXBFbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChkZXBLZXkpOworICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVj
dChkZXBlbmRlbmNpZXMsIGksIGRlcEVudHJ5KTsKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNp
ZXNNYXAuQHNldChkZXBOYW1lLCBkZXBFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbnRyeS5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7CisgICAgICAgICAgICBlbnRyeS5t
b2R1bGUgPSBtb2R1bGVSZWNvcmQ7CisgICAgICAgICAgICBAc2V0U3RhdGVUb01heChlbnRyeSwg
QE1vZHVsZVNhdGlzZnkpOworICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9KTsK
KyAgICB9KTsKKyAgICByZXR1cm4gaW5zdGFudGlhdGVQcm9taXNlOworfQorCitmdW5jdGlvbiBy
ZXF1ZXN0U2F0aXNmeShlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlciwgdmlzaXRlZCkKK3sKKyAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNpbnRlcm5hbC1tb2R1bGUtc2NyaXB0
LWdyYXBoLWZldGNoaW5nLXByb2NlZHVyZQorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYg
KGVudHJ5LnNhdGlzZnkpCisgICAgICAgIHJldHVybiBlbnRyeS5zYXRpc2Z5OworCisgICAgdmlz
aXRlZC5AYWRkKGVudHJ5KTsKKyAgICB2YXIgc2F0aXNmeVByb21pc2UgPSB0aGlzLnJlcXVlc3RJ
bnN0YW50aWF0ZShlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoZW50cnkpID0+IHsK
KyAgICAgICAgaWYgKGVudHJ5LnNhdGlzZnkpCisgICAgICAgICAgICByZXR1cm4gZW50cnkuc2F0
aXNmeTsKKworICAgICAgICB2YXIgZGVwTG9hZHMgPSBAbmV3QXJyYXlXaXRoU2l6ZShlbnRyeS5k
ZXBlbmRlbmNpZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVu
dHJ5LmRlcGVuZGVuY2llcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
dmFyIGRlcEVudHJ5ID0gZW50cnkuZGVwZW5kZW5jaWVzW2ldOworICAgICAgICAgICAgdmFyIHBy
b21pc2U7CisKKyAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSByZXNvbHZpbmcuIFRoZSBkZXBlbmRl
bmNpZXMgb2YgdGhpcyBlbnRyeSBpcyBiZWluZyByZXNvbHZlZCBvciBhbHJlYWR5IHJlc29sdmVk
LgorICAgICAgICAgICAgLy8gU3RvcCB0cmFjaW5nIHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMu
CisgICAgICAgICAgICAvLyBCdXQgdG8gcmV0cmlldmUgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUg
cmVjb3JkIGNvcnJlY3RseSwKKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhl
IGluc3RhbnRpYXRpb24gZm9yIHRoZSBkZXBlbmRlbnQgbW9kdWxlLgorICAgICAgICAgICAgLy8g
Rm9yIGV4YW1wbGUsIHJlYWNoaW5nIGhlcmUsIHRoZSBtb2R1bGUgaXMgc3RhcnRpbmcgcmVzb2x2
aW5nIHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAvLyBCdXQgdGhlIG1vZHVsZSBtYXkg
b3IgbWF5IG5vdCByZWFjaCB0aGUgaW5zdGFudGlhdGlvbiBwaGFzZSBpbiB0aGUgbG9hZGVyJ3Mg
cGlwZWxpbmUuCisgICAgICAgICAgICAvLyBJZiB3ZSB3YWl0IGZvciB0aGUgU2F0aXNmeSBmb3Ig
dGhpcyBtb2R1bGUsIGl0IGNvbnN0cnVjdCB0aGUgY2lyY3VsYXIgcHJvbWlzZSBjaGFpbiBhbmQK
KyAgICAgICAgICAgIC8vIHJlamVjdGVkIGJ5IHRoZSBQcm9taXNlcyBydW50aW1lLiBTaW5jZSBv
bmx5IHdlIG5lZWQgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUsIGluc3RlYWQgb2Ygd2FpdGlu
ZworICAgICAgICAgICAgLy8gdGhlIFNhdGlzZnkgZm9yIHRoaXMgbW9kdWxlLCB3ZSBqdXN0IHdh
aXQgSW5zdGFudGlhdGUgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAodmlzaXRlZC5AaGFzKGRl
cEVudHJ5KSkKKyAgICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGUoZGVwRW50cnksIEB1bmRlZmluZWQsIGZldGNoZXIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBtb2R1bGUgbG9hZGVyIGRvIG5vdCBwYXNzIGFu
eSBpbmZvcm1hdGlvbiBmb3Igbm9uLXRvcC1sZXZlbCBtb2R1bGUgZmV0Y2hpbmcuCisgICAgICAg
ICAgICAgICAgcHJvbWlzZSA9IHRoaXMucmVxdWVzdFNhdGlzZnkoZGVwRW50cnksIEB1bmRlZmlu
ZWQsIGZldGNoZXIsIHZpc2l0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQHB1dEJ5
VmFsRGlyZWN0KGRlcExvYWRzLCBpLCBwcm9taXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBASW50ZXJuYWxQcm9taXNlLmludGVybmFsQWxsKGRlcExvYWRzKS50aGVuKChlbnRyaWVz
KSA9PiB7CisgICAgICAgICAgICBpZiAoZW50cnkuc2F0aXNmeSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnk7CisgICAgICAgICAgICBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUxp
bmspOworICAgICAgICAgICAgZW50cnkuc2F0aXNmeSA9IHNhdGlzZnlQcm9taXNlOworICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIHJldHVybiBz
YXRpc2Z5UHJvbWlzZTsKK30KKworLy8gTGlua2luZyBzZW1hbnRpY3MuCisKK2Z1bmN0aW9uIGxp
bmsoZW50cnksIGZldGNoZXIpCit7CisgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy8jZmV0Y2gtdGhlLWRlc2NlbmRhbnRzLW9mLWFuZC1pbnN0YW50aWF0ZS1hLW1vZHVsZS1zY3Jp
cHQKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghZW50cnkubGlua1N1Y2NlZWRlZCkK
KyAgICAgICAgdGhyb3cgZW50cnkubGlua0Vycm9yOworICAgIGlmIChlbnRyeS5zdGF0ZSA9PT0g
QE1vZHVsZVJlYWR5KQorICAgICAgICByZXR1cm47CisgICAgQHNldFN0YXRlVG9NYXgoZW50cnks
IEBNb2R1bGVSZWFkeSk7CisKKyAgICB0cnkgeworICAgICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5
IGhhdmUgdGhlICJkZXBlbmRlbmNpZXMiIGZpZWxkLAorICAgICAgICAvLyB3ZSBjYW4gY2FsbCBt
b2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gd2l0aCB0aGUgY29ycmVjdCBvcmRlcgorICAg
ICAgICAvLyB3aXRob3V0IGNvbnN0cnVjdGluZyB0aGUgZGVwZW5kZW5jeSBncmFwaCBieSBjYWxs
aW5nIGRlcGVuZGVuY3lHcmFwaC4KKyAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRl
cGVuZGVuY2llczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRlcGVuZGVuY2ll
cy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMubGluayhkZXBlbmRl
bmNpZXNbaV0sIGZldGNoZXIpOworCisgICAgICAgIHRoaXMubW9kdWxlRGVjbGFyYXRpb25JbnN0
YW50aWF0aW9uKGVudHJ5Lm1vZHVsZSwgZmV0Y2hlcik7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsK
KyAgICAgICAgZW50cnkubGlua1N1Y2NlZWRlZCA9IGZhbHNlOworICAgICAgICBlbnRyeS5saW5r
RXJyb3IgPSBlcnJvcjsKKyAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorfQorCisvLyBNb2R1
bGUgc2VtYW50aWNzLgorCitmdW5jdGlvbiBtb2R1bGVFdmFsdWF0aW9uKGVudHJ5LCBmZXRjaGVy
KQoreworICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82
LjAvI3NlYy1tb2R1bGVldmFsdWF0aW9uCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAo
ZW50cnkuZXZhbHVhdGVkKQorICAgICAgICByZXR1cm47CisgICAgZW50cnkuZXZhbHVhdGVkID0g
dHJ1ZTsKKworICAgIC8vIFRoZSBjb250ZW50cyBvZiB0aGUgW1tSZXF1ZXN0ZWRNb2R1bGVzXV0g
aXMgY2xvbmVkIGludG8gZW50cnkuZGVwZW5kZW5jaWVzLgorICAgIHZhciBkZXBlbmRlbmNpZXMg
PSBlbnRyeS5kZXBlbmRlbmNpZXM7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRlcGVu
ZGVuY2llcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgdGhpcy5tb2R1bGVFdmFs
dWF0aW9uKGRlcGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7CisKKyAgICB0aGlzLmV2YWx1YXRlKGVu
dHJ5LmtleSwgZW50cnkubW9kdWxlLCBmZXRjaGVyKTsKK30KKworLy8gQVBJcyB0byBjb250cm9s
IHRoZSBtb2R1bGUgbG9hZGVyLgorCitmdW5jdGlvbiBwcm92aWRlRmV0Y2goa2V5LCB2YWx1ZSkK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lz
dGVyZWQoa2V5KTsKKworICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVGZXRjaCkKKyAgICAg
ICAgQHRocm93VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgZmV0Y2hlZC4i
KTsKKyAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgdmFsdWUpOworfQorCitmdW5jdGlvbiBs
b2FkTW9kdWxlKG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIpCit7CisgICAgInVzZSBz
dHJpY3QiOworCisgICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBwb2ludC4KKyAgICAvLyByZXNv
bHZlOiBtb2R1bGVOYW1lID0+IFByb21pc2UobW9kdWxlS2V5KQorICAgIC8vIFRha2UgdGhlIG5h
bWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3Vy
Y2UgbG9jYXRpb24uCisgICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFuZCBy
ZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgorICAgIHJldHVybiB0aGlzLnJlc29sdmUo
bW9kdWxlTmFtZSwgQHVuZGVmaW5lZCwgZmV0Y2hlcikudGhlbigoa2V5KSA9PiB7CisgICAgICAg
IHJldHVybiB0aGlzLnJlcXVlc3RTYXRpc2Z5KHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpLCBw
YXJhbWV0ZXJzLCBmZXRjaGVyLCBuZXcgQFNldCk7CisgICAgfSkudGhlbigoZW50cnkpID0+IHsK
KyAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gbGlua0Fu
ZEV2YWx1YXRlTW9kdWxlKGtleSwgZmV0Y2hlcikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTsKKyAgICBpZiAoZW50cnku
c3RhdGUgPCBATW9kdWxlTGluaykKKyAgICAgICAgQHRocm93VHlwZUVycm9yKCJSZXF1ZXN0ZWQg
bW9kdWxlIGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LiIpOworCisgICAgdGhpcy5saW5rKGVudHJ5
LCBmZXRjaGVyKTsKKyAgICByZXR1cm4gdGhpcy5tb2R1bGVFdmFsdWF0aW9uKGVudHJ5LCBmZXRj
aGVyKTsKK30KKworZnVuY3Rpb24gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKG1vZHVsZU5hbWUsIHBh
cmFtZXRlcnMsIGZldGNoZXIpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHRo
aXMubG9hZE1vZHVsZShtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChrZXkp
ID0+IHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSwgZmV0
Y2hlcik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbXBvcnRNb2R1bGUoa2V5LCBw
YXJhbWV0ZXJzLCBmZXRjaGVyKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB0
aGlzLnJlcXVlc3RTYXRpc2Z5KHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpLCBwYXJhbWV0ZXJz
LCBmZXRjaGVyLCBuZXcgQFNldCkudGhlbigoZW50cnkpID0+IHsKKyAgICAgICAgdGhpcy5saW5r
QW5kRXZhbHVhdGVNb2R1bGUoZW50cnkua2V5LCBmZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KGVudHJ5Lm1vZHVsZSk7CisgICAgfSk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJv
dG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlclBy
b3RvdHlwZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmOTFlYjg2NTUxZmE5
MzE5N2MxNGQ4MDkwOGRkNjlmNTZkYzc0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBodHRwczovL3do
YXR3Zy5naXRodWIuaW8vbG9hZGVyLyNsb2FkZXItb2JqZWN0Ci0vLyBNb2R1bGUgTG9hZGVyIGhh
cyBzZXZlcmFsIGhvb2tzIHRoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgdGhlIHBsYXRmb3JtLgot
Ly8gRm9yIGV4YW1wbGUsIHRoZSBbW0ZldGNoXV0gaG9vayBjYW4gYmUgcHJvdmlkZWQgYnkgdGhl
IEphdmFTY3JpcHRDb3JlIHNoZWxsCi0vLyBhcyBmZXRjaGluZyB0aGUgcGF5bG9hZCBmcm9tIHRo
ZSBsb2NhbCBmaWxlIHN5c3RlbS4KLS8vIEN1cnJlbnRseSwgdGhlcmUgYXJlIDQgaG9va3MuCi0v
LyAgICAxLiBMb2FkZXIucmVzb2x2ZQotLy8gICAgMi4gTG9hZGVyLmZldGNoCi0KLUBnbG9iYWxQ
cml2YXRlCi1mdW5jdGlvbiBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBuZXdTdGF0ZSkKLXsKLSAgICAv
LyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNzZXQtc3RhdGUtdG8tbWF4Ci0KLSAg
ICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAoZW50cnkuc3RhdGUgPCBuZXdTdGF0ZSkKLSAgICAg
ICAgZW50cnkuc3RhdGUgPSBuZXdTdGF0ZTsKLX0KLQotQGdsb2JhbFByaXZhdGUKLWZ1bmN0aW9u
IG5ld1JlZ2lzdHJ5RW50cnkoa2V5KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5p
by9sb2FkZXIvI3JlZ2lzdHJ5Ci0gICAgLy8KLSAgICAvLyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGJl
Y29tZXMgb25lIG9mIHRoZSA1IHN0YXRlcy4KLSAgICAvLyAxLiBGZXRjaAotICAgIC8vICAgICBS
ZWFkeSB0byBmZXRjaCAob3Igbm93IGZldGNoaW5nKSB0aGUgcmVzb3VyY2Ugb2YgdGhpcyBtb2R1
bGUuCi0gICAgLy8gICAgIFR5cGljYWxseSwgd2UgZmV0Y2ggdGhlIHNvdXJjZSBjb2RlIG92ZXIg
dGhlIG5ldHdvcmsgb3IgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgLy8gICAgIGEuIElmIHRo
ZSBzdGF0dXMgaXMgRmV0Y2ggYW5kIHRoZXJlIGlzIG5vIGVudHJ5LmZldGNoIHByb21pc2UsIHRo
ZSBlbnRyeSBpcyByZWFkeSB0byBmZXRjaC4KLSAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBp
cyBGZXRjaCBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBp
cyBqdXN0IGZldGNoaW5nIHRoZSByZXNvdXJjZS4KLSAgICAvLwotICAgIC8vIDIuIEluc3RhbnRp
YXRlIChBbmFseXplTW9kdWxlKQotICAgIC8vICAgICBSZWFkeSB0byBpbnN0YW50aWF0ZSAob3Ig
bm93IGluc3RhbnRpYXRpbmcpIHRoZSBtb2R1bGUgcmVjb3JkIGZyb20gdGhlIGZldGNoZWQKLSAg
ICAvLyAgICAgc291cmNlIGNvZGUuCi0gICAgLy8gICAgIFR5cGljYWxseSwgd2UgcGFyc2UgdGhl
IG1vZHVsZSBjb2RlLCBleHRyYWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJpbmRpbmcgaW5mb3Jt
YXRpb24uCi0gICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5kIHRo
ZXJlIGlzIG5vIGVudHJ5Lmluc3RhbnRpYXRlIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFkeSB0
byBpbnN0YW50aWF0ZS4KLSAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0
ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0
IGluc3RhbnRpYXRpbmcKLSAgICAvLyAgICAgICAgdGhlIG1vZHVsZSByZWNvcmQuCi0gICAgLy8K
LSAgICAvLyAzLiBTYXRpc2Z5Ci0gICAgLy8gICAgIFJlYWR5IHRvIHJlcXVlc3QgdGhlIGRlcGVu
ZGVudCBtb2R1bGVzIChvciBub3cgcmVxdWVzdGluZyAmIHJlc29sdmluZykuCi0gICAgLy8gICAg
IFdpdGhvdXQgdGhpcyBzdGF0ZSwgdGhlIGN1cnJlbnQgZHJhZnQgY2F1c2VzIGluZmluaXRlIHJl
Y3Vyc2lvbiB3aGVuIHRoZXJlIGlzIGNpcmN1bGFyIGRlcGVuZGVuY3kuCi0gICAgLy8gICAgIGEu
IElmIHRoZSBzdGF0dXMgaXMgU2F0aXNmeSBhbmQgdGhlcmUgaXMgbm8gZW50cnkuc2F0aXNmeSBw
cm9taXNlLCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgot
ICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIFNhdGlzZnkgYW5kIHRoZXJlIGlzIHRoZSBl
bnRyeS5zYXRpc2Z5IHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IHJlc29sdmluZwotICAgIC8v
ICAgICAgICB0aGUgZGVwZW5kZW5jaWVzLgotICAgIC8vCi0gICAgLy8gNC4gTGluawotICAgIC8v
ICAgICBSZWFkeSB0byBsaW5rIHRoZSBtb2R1bGUgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4KLSAg
ICAvLyAgICAgTGlua2luZyBtZWFucyB0aGF0IHRoZSBtb2R1bGUgaW1wb3J0cyBhbmQgZXhwb3J0
cyB0aGUgYmluZGluZ3MgZnJvbS90byB0aGUgb3RoZXIgbW9kdWxlcy4KLSAgICAvLwotICAgIC8v
IDUuIFJlYWR5Ci0gICAgLy8gICAgIFRoZSBtb2R1bGUgaXMgbGlua2VkLCBzbyB0aGUgbW9kdWxl
IGlzIHJlYWR5IHRvIGJlIGV4ZWN1dGVkLgotICAgIC8vCi0gICAgLy8gRWFjaCByZWdpc3RyeSBl
bnRyeSBoYXMgdGhlIDQgcHJvbWlzZXM7ICJmZXRjaCIsICJpbnN0YW50aWF0ZSIgYW5kICJzYXRp
c2Z5Ii4KLSAgICAvLyBUaGV5IGFyZSBhc3NpZ25lZCB3aGVuIHN0YXJ0aW5nIHRoZSBlYWNoIHBo
YXNlLiBBbmQgdGhleSBhcmUgZnVsZmlsbGVkIHdoZW4gdGhlIGVhY2ggcGhhc2UgaXMgY29tcGxl
dGVkLgotICAgIC8vCi0gICAgLy8gSW4gdGhlIGN1cnJlbnQgbW9kdWxlIGRyYWZ0LCBsaW5raW5n
IHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSB3aG9sZSBtb2R1bGVzIGFyZSBpbnN0YW50aWF0
ZWQgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLgotICAgIC8vIEFuZCBleGVjdXRp
b24gaXMgYWxzbyBkb25lIGFmdGVyIHRoZSBhbGwgbW9kdWxlcyBhcmUgbGlua2VkLgotICAgIC8v
Ci0gICAgLy8gVE9ETzogV2UgbmVlZCB0byBleHBsb2l0IHRoZSB3YXkgdG8gZXhlY3V0ZSB0aGUg
bW9kdWxlIHdoaWxlIGZldGNoaW5nIG5vbi1yZWxhdGVkIG1vZHVsZXMuCi0gICAgLy8gT25lIHNv
bHV0aW9uOyBpbnRyb2R1Y2luZyB0aGUgcmVhZHkgcHJvbWlzZSBjaGFpbiB0byBleGVjdXRlIHRo
ZSBtb2R1bGVzIGNvbmN1cnJlbnRseSB3aGlsZSBrZWVwaW5nCi0gICAgLy8gdGhlIGV4ZWN1dGlv
biBvcmRlci4KLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIGtl
eToga2V5LAotICAgICAgICBzdGF0ZTogQE1vZHVsZUZldGNoLAotICAgICAgICBmZXRjaDogQHVu
ZGVmaW5lZCwKLSAgICAgICAgaW5zdGFudGlhdGU6IEB1bmRlZmluZWQsCi0gICAgICAgIHNhdGlz
Znk6IEB1bmRlZmluZWQsCi0gICAgICAgIGRlcGVuZGVuY2llczogW10sIC8vIFRvIGtlZXAgdGhl
IG1vZHVsZSBvcmRlciwgd2Ugc3RvcmUgdGhlIG1vZHVsZSBrZXlzIGluIHRoZSBhcnJheS4KLSAg
ICAgICAgbW9kdWxlOiBAdW5kZWZpbmVkLCAvLyBKU01vZHVsZVJlY29yZAotICAgICAgICBsaW5r
RXJyb3I6IEB1bmRlZmluZWQsCi0gICAgICAgIGxpbmtTdWNjZWVkZWQ6IHRydWUsCi0gICAgICAg
IGV2YWx1YXRlZDogZmFsc2UsCi0gICAgfTsKLX0KLQotZnVuY3Rpb24gZW5zdXJlUmVnaXN0ZXJl
ZChrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZW5zdXJl
LXJlZ2lzdGVyZWQKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMu
cmVnaXN0cnkuQGdldChrZXkpOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgcmV0dXJuIGVudHJ5
OwotCi0gICAgZW50cnkgPSBAbmV3UmVnaXN0cnlFbnRyeShrZXkpOwotICAgIHRoaXMucmVnaXN0
cnkuQHNldChrZXksIGVudHJ5KTsKLQotICAgIHJldHVybiBlbnRyeTsKLX0KLQotZnVuY3Rpb24g
Zm9yY2VGdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKLXsKLSAgICAidXNlIHN0cmljdCI7
Ci0KLSAgICBpZiAoQGdldEJ5SWREaXJlY3RQcml2YXRlKHByb21pc2UsICJwcm9taXNlU3RhdGUi
KSA9PT0gQHByb21pc2VTdGF0ZVBlbmRpbmcpCi0gICAgICAgIEBmdWxmaWxsUHJvbWlzZShwcm9t
aXNlLCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0aW9uIGZ1bGZpbGxGZXRjaChlbnRyeSwgc291cmNlKQot
ewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Z1bGZpbGwtZmV0Y2gK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICghZW50cnkuZmV0Y2gpCi0gICAgICAgIGVu
dHJ5LmZldGNoID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpLkBwcm9t
aXNlOwotICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5mZXRjaCwgc291cmNlKTsK
LSAgICBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKLX0KLQotLy8g
TG9hZGVyLgotCi1mdW5jdGlvbiByZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNo
ZXIpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC1m
ZXRjaAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKGVudHJ5LmZldGNoKSB7Ci0gICAg
ICAgIHZhciBjdXJyZW50QXR0ZW1wdCA9IGVudHJ5LmZldGNoOwotICAgICAgICBpZiAoZW50cnku
c3RhdGUgIT09IEBNb2R1bGVGZXRjaCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50QXR0ZW1w
dDsKLQotICAgICAgICByZXR1cm4gY3VycmVudEF0dGVtcHQuY2F0Y2goKGVycm9yKSA9PiB7Ci0g
ICAgICAgICAgICAvLyBFdmVuIGlmIHRoZSBleGlzdGluZyBmZXRjaGluZyByZXF1ZXN0IGZhaWxl
ZCwgdGhpcyBhdHRlbXB0IG1heSBzdWNjZWVkLgotICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IHByZXZpb3VzIGF0dGVtcHQgdXNlZCBpbnZhbGlkIGludGVncml0eT0iIiB2YWx1ZS4gQnV0IHRo
aXMKLSAgICAgICAgICAgIC8vIHJlcXVlc3QgY291bGQgaGF2ZSB0aGUgY29ycmVjdCBpbnRlZ3Jp
dHk9IiIgdmFsdWUuIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkCi0gICAgICAgICAgICAvLyByZXRy
eSBmZXRjaGluZyBmb3IgdGhpcyByZXF1ZXN0LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1s
LnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRBdHRlbXB0ID09PSBlbnRyeS5mZXRjaCkKLSAgICAgICAgICAgICAgICBl
bnRyeS5mZXRjaCA9IEB1bmRlZmluZWQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0
RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICAvLyBIb29rIHBvaW50LgotICAgIC8vIDIuIExvYWRlci5mZXRjaAotICAgIC8vICAgICBo
dHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLWZldGNoCi0gICAgLy8gICAg
IFRha2UgdGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291cmNlIGFjdHVhbGx5LgotICAgIC8vICAg
ICBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sg
ZmV0Y2hpbmcgdGhlIHJlc291cmNlCi0gICAgLy8gICAgIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lz
dGVtLgotICAgIHZhciBmZXRjaFByb21pc2UgPSB0aGlzLmZldGNoKGVudHJ5LmtleSwgcGFyYW1l
dGVycywgZmV0Y2hlcikudGhlbigoc291cmNlKSA9PiB7Ci0gICAgICAgIEBzZXRTdGF0ZVRvTWF4
KGVudHJ5LCBATW9kdWxlSW5zdGFudGlhdGUpOwotICAgICAgICByZXR1cm4gc291cmNlOwotICAg
IH0pOwotICAgIGVudHJ5LmZldGNoID0gZmV0Y2hQcm9taXNlOwotICAgIHJldHVybiBmZXRjaFBy
b21pc2U7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0ZShlbnRyeSwgcGFyYW1ldGVy
cywgZmV0Y2hlcikKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNy
ZXF1ZXN0LWluc3RhbnRpYXRlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLyBlbnRyeS5p
bnN0YW50aWF0ZSBpcyBzZXQgaWYgZmV0Y2ggc3VjY2VlZHMuCi0gICAgaWYgKGVudHJ5Lmluc3Rh
bnRpYXRlKQotICAgICAgICByZXR1cm4gZW50cnkuaW5zdGFudGlhdGU7Ci0KLSAgICB2YXIgaW5z
dGFudGlhdGVQcm9taXNlID0gdGhpcy5yZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZl
dGNoZXIpLnRoZW4oKHNvdXJjZSkgPT4gewotICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnLyNmZXRjaC1hLXNpbmdsZS1tb2R1bGUtc2NyaXB0Ci0gICAgICAgIC8vIE5vdyBm
ZXRjaGluZyByZXF1ZXN0IHN1Y2NlZWRzLiBUaGVuIGV2ZW4gaWYgaW5zdGFudGlhdGlvbiBmYWls
cywgd2Ugc2hvdWxkIGNhY2hlIGl0LgotICAgICAgICAvLyBJbnN0YW50aWF0aW9uIHdvbid0IGJl
IHJldHJpZWQuCi0gICAgICAgIGlmIChlbnRyeS5pbnN0YW50aWF0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBlbnRyeS5pbnN0YW50aWF0ZTsKLSAgICAgICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0
YW50aWF0ZVByb21pc2U7Ci0KLSAgICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKLSAgICAgICAg
cmV0dXJuIHRoaXMucGFyc2VNb2R1bGUoa2V5LCBzb3VyY2UpLnRoZW4oKG1vZHVsZVJlY29yZCkg
PT4gewotICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llc01hcCA9IG1vZHVsZVJlY29yZC5kZXBl
bmRlbmNpZXNNYXA7Ci0gICAgICAgICAgICB2YXIgcmVxdWVzdGVkTW9kdWxlcyA9IHRoaXMucmVx
dWVzdGVkTW9kdWxlcyhtb2R1bGVSZWNvcmQpOwotICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2ll
cyA9IEBuZXdBcnJheVdpdGhTaXplKHJlcXVlc3RlZE1vZHVsZXMubGVuZ3RoKTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRlcE5hbWUgPSByZXF1ZXN0ZWRN
b2R1bGVzW2ldOwotICAgICAgICAgICAgICAgIHZhciBkZXBLZXkgPSB0aGlzLnJlc29sdmVTeW5j
KGRlcE5hbWUsIGtleSwgZmV0Y2hlcik7Ci0gICAgICAgICAgICAgICAgdmFyIGRlcEVudHJ5ID0g
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGRlcEtleSk7Ci0gICAgICAgICAgICAgICAgQHB1dEJ5VmFs
RGlyZWN0KGRlcGVuZGVuY2llcywgaSwgZGVwRW50cnkpOwotICAgICAgICAgICAgICAgIGRlcGVu
ZGVuY2llc01hcC5Ac2V0KGRlcE5hbWUsIGRlcEVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVudHJ5LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llczsKLSAgICAgICAgICAgIGVu
dHJ5Lm1vZHVsZSA9IG1vZHVsZVJlY29yZDsKLSAgICAgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVu
dHJ5LCBATW9kdWxlU2F0aXNmeSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotICAgIHJldHVybiBpbnN0YW50aWF0ZVByb21pc2U7Ci19Ci0KLWZ1bmN0
aW9uIHJlcXVlc3RTYXRpc2Z5KGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyLCB2aXNpdGVkKQot
ewotICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2ludGVybmFsLW1vZHVsZS1z
Y3JpcHQtZ3JhcGgtZmV0Y2hpbmctcHJvY2VkdXJlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAg
ICBpZiAoZW50cnkuc2F0aXNmeSkKLSAgICAgICAgcmV0dXJuIGVudHJ5LnNhdGlzZnk7Ci0KLSAg
ICB2aXNpdGVkLkBhZGQoZW50cnkpOwotICAgIHZhciBzYXRpc2Z5UHJvbWlzZSA9IHRoaXMucmVx
dWVzdEluc3RhbnRpYXRlKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChlbnRyeSkg
PT4gewotICAgICAgICBpZiAoZW50cnkuc2F0aXNmeSkKLSAgICAgICAgICAgIHJldHVybiBlbnRy
eS5zYXRpc2Z5OwotCi0gICAgICAgIHZhciBkZXBMb2FkcyA9IEBuZXdBcnJheVdpdGhTaXplKGVu
dHJ5LmRlcGVuZGVuY2llcy5sZW5ndGgpOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gZW50cnkuZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgZGVwRW50cnkgPSBlbnRyeS5kZXBlbmRlbmNpZXNbaV07Ci0gICAgICAgICAgICB2
YXIgcHJvbWlzZTsKLQotICAgICAgICAgICAgLy8gUmVjdXJzaXZlIHJlc29sdmluZy4gVGhlIGRl
cGVuZGVuY2llcyBvZiB0aGlzIGVudHJ5IGlzIGJlaW5nIHJlc29sdmVkIG9yIGFscmVhZHkgcmVz
b2x2ZWQuCi0gICAgICAgICAgICAvLyBTdG9wIHRyYWNpbmcgdGhlIGNpcmN1bGFyIGRlcGVuZGVu
Y2llcy4KLSAgICAgICAgICAgIC8vIEJ1dCB0byByZXRyaWV2ZSB0aGUgaW5zdGFudGlhdGVkIG1v
ZHVsZSByZWNvcmQgY29ycmVjdGx5LAotICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZv
ciB0aGUgaW5zdGFudGlhdGlvbiBmb3IgdGhlIGRlcGVuZGVudCBtb2R1bGUuCi0gICAgICAgICAg
ICAvLyBGb3IgZXhhbXBsZSwgcmVhY2hpbmcgaGVyZSwgdGhlIG1vZHVsZSBpcyBzdGFydGluZyBy
ZXNvbHZpbmcgdGhlIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgIC8vIEJ1dCB0aGUgbW9kdWxl
IG1heSBvciBtYXkgbm90IHJlYWNoIHRoZSBpbnN0YW50aWF0aW9uIHBoYXNlIGluIHRoZSBsb2Fk
ZXIncyBwaXBlbGluZS4KLSAgICAgICAgICAgIC8vIElmIHdlIHdhaXQgZm9yIHRoZSBTYXRpc2Z5
IGZvciB0aGlzIG1vZHVsZSwgaXQgY29uc3RydWN0IHRoZSBjaXJjdWxhciBwcm9taXNlIGNoYWlu
IGFuZAotICAgICAgICAgICAgLy8gcmVqZWN0ZWQgYnkgdGhlIFByb21pc2VzIHJ1bnRpbWUuIFNp
bmNlIG9ubHkgd2UgbmVlZCBpcyB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSwgaW5zdGVhZCBvZiB3
YWl0aW5nCi0gICAgICAgICAgICAvLyB0aGUgU2F0aXNmeSBmb3IgdGhpcyBtb2R1bGUsIHdlIGp1
c3Qgd2FpdCBJbnN0YW50aWF0ZSBmb3IgdGhpcy4KLSAgICAgICAgICAgIGlmICh2aXNpdGVkLkBo
YXMoZGVwRW50cnkpKQotICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0
YW50aWF0ZShkZXBFbnRyeSwgQHVuZGVmaW5lZCwgZmV0Y2hlcik7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIG1vZHVsZSBsb2FkZXIgZG8gbm90IHBh
c3MgYW55IGluZm9ybWF0aW9uIGZvciBub24tdG9wLWxldmVsIG1vZHVsZSBmZXRjaGluZy4KLSAg
ICAgICAgICAgICAgICBwcm9taXNlID0gdGhpcy5yZXF1ZXN0U2F0aXNmeShkZXBFbnRyeSwgQHVu
ZGVmaW5lZCwgZmV0Y2hlciwgdmlzaXRlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBA
cHV0QnlWYWxEaXJlY3QoZGVwTG9hZHMsIGksIHByb21pc2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIEBJbnRlcm5hbFByb21pc2UuaW50ZXJuYWxBbGwoZGVwTG9hZHMpLnRoZW4oKGVu
dHJpZXMpID0+IHsKLSAgICAgICAgICAgIGlmIChlbnRyeS5zYXRpc2Z5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9k
dWxlTGluayk7Ci0gICAgICAgICAgICBlbnRyeS5zYXRpc2Z5ID0gc2F0aXNmeVByb21pc2U7Ci0g
ICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0
dXJuIHNhdGlzZnlQcm9taXNlOwotfQotCi0vLyBMaW5raW5nIHNlbWFudGljcy4KLQotZnVuY3Rp
b24gbGluayhlbnRyeSwgZmV0Y2hlcikKLXsKLSAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnLyNmZXRjaC10aGUtZGVzY2VuZGFudHMtb2YtYW5kLWluc3RhbnRpYXRlLWEtbW9kdWxl
LXNjcmlwdAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFlbnRyeS5saW5rU3VjY2Vl
ZGVkKQotICAgICAgICB0aHJvdyBlbnRyeS5saW5rRXJyb3I7Ci0gICAgaWYgKGVudHJ5LnN0YXRl
ID09PSBATW9kdWxlUmVhZHkpCi0gICAgICAgIHJldHVybjsKLSAgICBAc2V0U3RhdGVUb01heChl
bnRyeSwgQE1vZHVsZVJlYWR5KTsKLQotICAgIHRyeSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlIGFs
cmVhZHkgaGF2ZSB0aGUgImRlcGVuZGVuY2llcyIgZmllbGQsCi0gICAgICAgIC8vIHdlIGNhbiBj
YWxsIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiB3aXRoIHRoZSBjb3JyZWN0IG9yZGVy
Ci0gICAgICAgIC8vIHdpdGhvdXQgY29uc3RydWN0aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGJ5
IGNhbGxpbmcgZGVwZW5kZW5jeUdyYXBoLgotICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50
cnkuZGVwZW5kZW5jaWVzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5k
ZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5saW5rKGRl
cGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7Ci0KLSAgICAgICAgdGhpcy5tb2R1bGVEZWNsYXJhdGlv
bkluc3RhbnRpYXRpb24oZW50cnkubW9kdWxlLCBmZXRjaGVyKTsKLSAgICB9IGNhdGNoIChlcnJv
cikgewotICAgICAgICBlbnRyeS5saW5rU3VjY2VlZGVkID0gZmFsc2U7Ci0gICAgICAgIGVudHJ5
LmxpbmtFcnJvciA9IGVycm9yOwotICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci19Ci0KLS8v
IE1vZHVsZSBzZW1hbnRpY3MuCi0KLWZ1bmN0aW9uIG1vZHVsZUV2YWx1YXRpb24oZW50cnksIGZl
dGNoZXIpCi17Ci0gICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEt
MjYyLzYuMC8jc2VjLW1vZHVsZWV2YWx1YXRpb24KLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IGlmIChlbnRyeS5ldmFsdWF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBlbnRyeS5ldmFsdWF0
ZWQgPSB0cnVlOwotCi0gICAgLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBbW1JlcXVlc3RlZE1vZHVs
ZXNdXSBpcyBjbG9uZWQgaW50byBlbnRyeS5kZXBlbmRlbmNpZXMuCi0gICAgdmFyIGRlcGVuZGVu
Y2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
ZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICB0aGlzLm1vZHVs
ZUV2YWx1YXRpb24oZGVwZW5kZW5jaWVzW2ldLCBmZXRjaGVyKTsKLQotICAgIHRoaXMuZXZhbHVh
dGUoZW50cnkua2V5LCBlbnRyeS5tb2R1bGUsIGZldGNoZXIpOwotfQotCi0vLyBBUElzIHRvIGNv
bnRyb2wgdGhlIG1vZHVsZSBsb2FkZXIuCi0KLWZ1bmN0aW9uIHByb3ZpZGVGZXRjaChrZXksIHZh
bHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJl
UmVnaXN0ZXJlZChrZXkpOwotCi0gICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVsZUZldGNoKQot
ICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSBmZXRj
aGVkLiIpOwotICAgIHRoaXMuZnVsZmlsbEZldGNoKGVudHJ5LCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0
aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgcGFyYW1ldGVycywgZmV0Y2hlcikKLXsKLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgotICAgIC8v
IHJlc29sdmU6IG1vZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCi0gICAgLy8gVGFrZSB0
aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBy
ZXNvdXJjZSBsb2NhdGlvbi4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIg
YW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCi0gICAgcmV0dXJuIHRoaXMucmVz
b2x2ZShtb2R1bGVOYW1lLCBAdW5kZWZpbmVkLCBmZXRjaGVyKS50aGVuKChrZXkpID0+IHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFNhdGlzZnkodGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtl
eSksIHBhcmFtZXRlcnMsIGZldGNoZXIsIG5ldyBAU2V0KTsKLSAgICB9KS50aGVuKChlbnRyeSkg
PT4gewotICAgICAgICByZXR1cm4gZW50cnkua2V5OwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBs
aW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5LCBmZXRjaGVyKQotewotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwotICAgIGlmIChl
bnRyeS5zdGF0ZSA8IEBNb2R1bGVMaW5rKQotICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlJlcXVl
c3RlZCBtb2R1bGUgaXMgbm90IGluc3RhbnRpYXRlZCB5ZXQuIik7Ci0KLSAgICB0aGlzLmxpbmso
ZW50cnksIGZldGNoZXIpOwotICAgIHJldHVybiB0aGlzLm1vZHVsZUV2YWx1YXRpb24oZW50cnks
IGZldGNoZXIpOwotfQotCi1mdW5jdGlvbiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUobW9kdWxlTmFt
ZSwgcGFyYW1ldGVycywgZmV0Y2hlcikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1
cm4gdGhpcy5sb2FkTW9kdWxlKG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIpLnRoZW4o
KGtleSkgPT4gewotICAgICAgICByZXR1cm4gdGhpcy5saW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5
LCBmZXRjaGVyKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gcmVxdWVzdEltcG9ydE1vZHVsZShr
ZXksIHBhcmFtZXRlcnMsIGZldGNoZXIpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0
dXJuIHRoaXMucmVxdWVzdFNhdGlzZnkodGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSksIHBhcmFt
ZXRlcnMsIGZldGNoZXIsIG5ldyBAU2V0KS50aGVuKChlbnRyeSkgPT4gewotICAgICAgICB0aGlz
LmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShlbnRyeS5rZXksIGZldGNoZXIpOwotICAgICAgICByZXR1
cm4gdGhpcy5nZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoZW50cnkubW9kdWxlKTsKLSAgICB9KTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAppbmRleCBhNDgzMTc3M2U5ODE0NWU1YWI4NmNhM2JjNjcyZjIyYzhhZjVlY2NiLi5kNDY3NGMw
MTlkODY0ODA0ZjRjNjY2ODVkYTlkZjk2NWZkMWVkOWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xMzEsNyArMTMxLDYgQEAK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJNYXRoT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTWljcm90YXNrLmgiCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk5hdGl2
ZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiTnVsbEdldHRlckZ1bmN0aW9uLmgiCkBAIC02
NTAsOCArNjQ5LDYgQEAgbV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlz
LCBpbnN0YW5jZVR5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGgKICAgICAKICN1bmRlZiBDUkVB
VEVfUFJPVE9UWVBFX0ZPUl9MQVpZX1RZUEUKICAgICAKLSAgICBtX21vZHVsZUxvYWRlclByb3Rv
dHlwZS5zZXQodm0sIHRoaXMsIE1vZHVsZUxvYWRlclByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlz
LCBNb2R1bGVMb2FkZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0gICAgCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKICAgICBP
YmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29uc3RydWN0b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHZtLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
OwpAQCAtNzc5LDggKzc3Niw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT4ganNOYW1lLCBsb3dlck5hbWUgIyMgQ29uc3RydWN0CiAgICAgUmVmbGVj
dE9iamVjdCogcmVmbGVjdE9iamVjdCA9IFJlZmxlY3RPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywg
UmVmbGVjdE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5SZWZsZWN0LCByZWZsZWN0T2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAKLSAgICBtX21vZHVsZUxvYWRlclN0cnVjdHVy
ZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1bGVMb2FkZXIuc2V0
KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMs
IG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpKSk7CisgICAgbV9tb2R1bGVMb2FkZXIuc2V0
KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMs
IEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpKSkpOwog
ICAgIGlmIChPcHRpb25zOjpleHBvc2VJbnRlcm5hbE1vZHVsZUxvYWRlcigpKQogICAgICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TG9hZGVyLCBt
X21vZHVsZUxvYWRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwogCkBAIC0xMzc0LDcgKzEzNzAsNiBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9hc3luY0dlbmVyYXRvclByb3RvdHlwZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9hc3luY0l0ZXJhdG9yUHJvdG90eXBl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25Qcm90b3R5cGUpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTG9h
ZGVyUHJvdG90eXBlKTsKIAogICAgIHRoaXNPYmplY3QtPm1fZGVidWdnZXJTY29wZVN0cnVjdHVy
ZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVyZS52
aXNpdCh2aXNpdG9yKTsKQEAgLTE0MjUsNyArMTQyMCw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1cmUp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJveHlSZXZva2VTdHJ1Y3R1cmUp
OwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlTG9hZGVyU3RydWN0dXJl
KTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyUHJv
dG90eXBlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyU3Ry
dWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCmluZGV4IDU3MGU0Yjg5NjIyNGFmNzk0YTI4M2NjYjgzNDNmZDUxYWM0YjhhNmMuLmRiM2Y4
M2Y1MDExMGZiYWMyZGMwYmZiMDY4Zjg4YjUyMmIwNzdlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtOTgsNyArOTgsNyBAQCBjbGFz
cyBEaXJlY3RFdmFsRXhlY3V0YWJsZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNs
YXNzIE1hcFByb3RvdHlwZTsKIGNsYXNzIE1pY3JvdGFzazsKLWNsYXNzIE1vZHVsZUxvYWRlclBy
b3RvdHlwZTsKK2NsYXNzIE1vZHVsZUxvYWRlcjsKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlOwogY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKIGNsYXNzIE51bGxHZXR0ZXJGdW5j
dGlvbjsKQEAgLTMwMiw3ICszMDIsNiBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBXcml0ZUJhcnJpZXI8R2VuZXJhdG9yRnVu
Y3Rpb25Qcm90b3R5cGU+IG1fZ2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgV3JpdGVC
YXJyaWVyPEdlbmVyYXRvclByb3RvdHlwZT4gbV9nZW5lcmF0b3JQcm90b3R5cGU7CiAgICAgV3Jp
dGVCYXJyaWVyPEFzeW5jR2VuZXJhdG9yUHJvdG90eXBlPiBtX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlOwotICAgIFdyaXRlQmFycmllcjxNb2R1bGVMb2FkZXJQcm90b3R5cGU+IG1fbW9kdWxlTG9h
ZGVyUHJvdG90eXBlOwogCiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmU+IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV93aXRoU2NvcGVTdHJ1Y3R1cmU7CkBAIC0zNTgsNyArMzU3LDYg
QEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCB7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcm94eU9iamVjdFN0cnVjdHVyZTsK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1
cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcm94eVJldm9rZVN0cnVjdHVyZTsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX21vZHVsZUxvYWRlclN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3Rv
dHlwZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJl
OwogI2lmIEVOQUJMRShTSEFSRURfQVJSQVlfQlVGRkVSKQpAQCAtNjc3LDcgKzY3NSw2IEBAIGNs
YXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qgewog
ICAgIFN0cnVjdHVyZSogcHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3By
b3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVByb3h5
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICBTdHJ1Y3R1
cmUqIG1vZHVsZUxvYWRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVy
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZXN0UGFyYW1ldGVyU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gYXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOyB9CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLmdldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKaW5kZXgg
OTA4NTkxZDkyODBjOGRmOGQzM2Y2NWNmMzM5NzhiMzI3OGMwMGYwNS4uNjU5OGQ1NDQzNjFjMzI1
Y2QyZTMzNThiOGYwMzhhZTlmMjg2OGJkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcApAQCAtMzgsMjAgKzM4LDYyIEBACiAjaW5jbHVk
ZSAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU1NvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5oIgotI2luY2x1ZGUgIk1vZHVsZUxv
YWRlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQYXJzZU1v
ZHVsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlclJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJFdmFsdWF0ZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck1vZHVsZURlY2xh
cmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlc29sdmUoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlU3luYyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckZl
dGNoKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyR2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KEV4ZWNTdGF0ZSopOworCit9CisKKyNp
bmNsdWRlICJKU01vZHVsZUxvYWRlci5sdXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01vZHVsZUxvYWRlcik7CiAKLWNv
bnN0IENsYXNzSW5mbyBKU01vZHVsZUxvYWRlcjo6c19pbmZvID0geyAiTW9kdWxlTG9hZGVyIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU01v
ZHVsZUxvYWRlcikgfTsKK2NvbnN0IENsYXNzSW5mbyBKU01vZHVsZUxvYWRlcjo6c19pbmZvID0g
eyAiTW9kdWxlTG9hZGVyIiwgJkJhc2U6OnNfaW5mbywgJm1vZHVsZUxvYWRlclRhYmxlLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTW9kdWxlTG9hZGVyKSB9OworCisvKiBTb3VyY2Ug
Zm9yIEpTTW9kdWxlTG9hZGVyLmx1dC5oCitAYmVnaW4gbW9kdWxlTG9hZGVyVGFibGUKKyAgICBl
bnN1cmVSZWdpc3RlcmVkICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBmb3JjZUZ1bGZpbGxQcm9t
aXNlICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBmdWxmaWxsRmV0Y2ggICAgICAgICAgICAgICAgICAg
SlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDIKKyAgICByZXF1ZXN0RmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICByZXF1
ZXN0SW5zdGFudGlhdGUgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICByZXF1ZXN0U2F0aXNmeSAgICAg
ICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDMKKyAgICBsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNC
dWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDIKKyAgICBtb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gbW9kdWxlTG9hZGVyTW9kdWxl
RGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBtb2R1bGVF
dmFsdWF0aW9uICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBldmFsdWF0ZSAgICAgICAgICAgICAg
ICAgICAgICAgbW9kdWxlTG9hZGVyRXZhbHVhdGUgICAgICAgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDMKKyAgICBwcm92aWRlRmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWls
dGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIK
KyAgICBsb2FkQW5kRXZhbHVhdGVNb2R1bGUgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICBsb2FkTW9kdWxl
ICAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICBsaW5rQW5kRXZhbHVhdGVNb2R1bGUgICAg
ICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uIDIKKyAgICByZXF1ZXN0SW1wb3J0TW9kdWxlICAgICAgICAgICAgSlNCdWlsdGlu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAg
ICBnZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QgICAgICAgbW9kdWxlTG9hZGVyR2V0TW9kdWxlTmFt
ZXNwYWNlT2JqZWN0ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBwYXJzZU1vZHVsZSAg
ICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUgICAgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICByZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAg
ICAgbW9kdWxlTG9hZGVyUmVxdWVzdGVkTW9kdWxlcyAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDEKKyAgICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVy
UmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBy
ZXNvbHZlU3luYyAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUmVzb2x2ZVN5bmMgICAg
ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBmZXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyRmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDMKK0BlbmQKKyovCiAKIEpTTW9kdWxlTG9hZGVyOjpKU01vZHVs
ZUxvYWRlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogSlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKQpAQCAtMjk1LDQgKzMzNywxNjMgQEAgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqIEpTTW9kdWxlTG9hZGVyOjpnZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoRXhlY1N0
YXRlKiBleGUKICAgICByZXR1cm4gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhl
Yyk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJQYXJzZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisKKyAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgYXV0byBy
ZWplY3QgPSBbJl0geworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBhdXRvIHJlc3Vs
dCA9IGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgc2NvcGUucmVs
ZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICB9OworCisgICAgY29uc3QgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBleGVj
LT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiByZWplY3QoKTsKKworICAgIEpTVmFsdWUg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgYXV0byoganNTb3VyY2VDb2RlID0ganND
YXN0PEpTU291cmNlQ29kZSo+KHNvdXJjZSk7CisgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0g
anNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCk7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgaWYgKHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291cmNlVHlwZSgpID09IFNvdXJjZVByb3Zp
ZGVyU291cmNlVHlwZTo6V2ViQXNzZW1ibHkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoV2ViQXNzZW1ibHlQcm90b3R5cGU6Omluc3RhbnRpYXRlKGV4ZWMsIGRlZmVycmVkLCBtb2R1
bGVLZXksIGpzU291cmNlQ29kZSkpOworI2VuZGlmCisKKyAgICBDb2RlUHJvZmlsaW5nIHByb2Zp
bGUoc291cmNlQ29kZSk7CisKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxl
UHJvZ3JhbU5vZGU+KAorICAgICAgICAmdm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQ
YXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKKyAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2Rl
OjpTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlLCBTb3VyY2VQYXJzZU1vZGU6Ok1v
ZHVsZUFuYWx5emVNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJyb3IpOworICAgIGlm
IChlcnJvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVq
ZWN0KGV4ZWMsIGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBzb3VyY2VDb2RlKSk7CisgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAgIEFT
U0VSVChtb2R1bGVQcm9ncmFtTm9kZSk7CisKKyAgICBNb2R1bGVBbmFseXplciBtb2R1bGVBbmFs
eXplcihleGVjLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dyYW1Ob2RlLT52YXJE
ZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJsZXMoKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHJlamVj
dCgpOworCisgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBtb2R1bGVB
bmFseXplci5hbmFseXplKCptb2R1bGVQcm9ncmFtTm9kZSkpOworICAgIHNjb3BlLnJlbGVhc2VB
c3NlcnROb0V4Y2VwdGlvbigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXF1ZXN0ZWRN
b2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBtb2R1bGVS
ZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEFic3RyYWN0TW9kdWxlUmVjb3JkKj4odm0sIGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZVJlY29yZCkgeworICAgICAgICBzY29wZS5yZWxl
YXNlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyKSk7CisgICAgfQorCisgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVs
ZXMoKS5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVsZVJl
Y29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKSB7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1p
Y0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAg
IGlmICghbW9kdWxlUmVjb3JkKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkK
KyAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtl
eSgpLCAiXG4iKTsKKworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBleGVjLT5hcmd1bWVu
dCgxKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9h
ZGVyUmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAvLyBIb29rIHBvaW50LCBMb2FkZXIucmVzb2x2ZS4KKyAgICAvLyBodHRwczovL3doYXR3
Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXJlc29sdmUKKyAgICAvLyBUYWtlIHRoZSBuYW1l
IGFuZCByZXNvbHZlIGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNl
IGxvY2F0aW9uLgorICAgIC8vIEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0
dXJuIHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KKyAgICBKU01vZHVsZUxvYWRlciogbG9hZGVy
ID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnJlc29sdmUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgy
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlc29s
dmVTeW5jKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEpTTW9kdWxlTG9h
ZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGxvYWRlci0+cmVzb2x2ZVN5
bmMoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1
bWVudCgyKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBy
ZXN1bHQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJG
ZXRjaChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAv
LyBIb29rIHBvaW50LCBMb2FkZXIuZmV0Y2gKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIu
aW8vbG9hZGVyLyNicm93c2VyLWZldGNoCisgICAgLy8gVGFrZSB0aGUga2V5IGFuZCBmZXRjaCB0
aGUgcmVzb3VyY2UgYWN0dWFsbHkuCisgICAgLy8gRm9yIGV4YW1wbGUsIEphdmFTY3JpcHRDb3Jl
IHNoZWxsIGNhbiBwcm92aWRlIHRoZSBob29rIGZldGNoaW5nIHRoZSByZXNvdXJjZQorICAgIC8v
IGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsK
KyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+ZmV0Y2goZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckdldE1vZHVs
ZU5hbWVzcGFjZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBh
dXRvKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBhdXRvKiBtb2R1bGVOYW1lc3BhY2VPYmplY3QgPSBs
b2FkZXItPmdldE1vZHVsZU5hbWVzcGFjZU9iamVjdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGVOYW1lc3BhY2VPYmplY3QpOworfQorCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9uYWwgSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9h
ZGVyRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIFRvIGluc3RydW1lbnQgYW5k
IHJldHJpZXZlIHRoZSBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24sCisg
ICAgLy8gd2UgaW5zZXJ0ZWQgdGhlIGhvb2sgcG9pbnQgaGVyZS4KKworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNN
b2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbG9hZGVyKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5ldmFsdWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmgKaW5kZXggOTdmZWQ4MzEyYmY2YzA4OTg2ZWI2MmQ2OGE1Y2ZiYzBhNzRkZDE0Ni4uNGRj
ZDUyMmFmZWEyNGJiNmM4NjI2M2NjNDc5NmFlY2E3YWNjNTQ2MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCkBAIC0zOCw3ICszOCw4IEBAIGNs
YXNzIEpTTW9kdWxlTG9hZGVyIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHJp
dmF0ZToKICAgICBKU01vZHVsZUxvYWRlcihWTSYsIFN0cnVjdHVyZSopOwogcHVibGljOgotICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBKU05vbkZp
bmFsT2JqZWN0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAogICAgIGVudW0g
U3RhdHVzIHsKICAgICAgICAgRmV0Y2ggPSAxLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGI4YmRjOWY1MWNmZDZhMjcyNDZiYmU2YmY3Yjg3YzczYjM4OWY5NzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmgiCi0KLSNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJD
YXRjaFNjb3BlLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUgIkVycm9y
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiSlNJbnRlcm5hbFBy
b21pc2UuaCIKLSNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCi0jaW5jbHVk
ZSAiSlNNYXAuaCIKLSNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAi
SlNNb2R1bGVMb2FkZXIuaCIKLSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgot
I2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCi0jaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCi0j
aW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIuaCIKLSNpbmNsdWRlICJOb2Rlcy5oIgotI2luY2x1ZGUg
IlBhcnNlci5oIgotI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1i
bHlQcm90b3R5cGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJv
dG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUV2YWx1YXRlKEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90
eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZShF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxv
YWRlclByb3RvdHlwZVJlc29sdmVTeW5jKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5
cGVHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoRXhlY1N0YXRlKik7Ci0KLX0KLQotI2luY2x1ZGUg
Ik1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShNb2R1bGVMb2FkZXJQcm90b3R5cGUp
OwotCi1jb25zdCBDbGFzc0luZm8gTW9kdWxlTG9hZGVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJN
b2R1bGVMb2FkZXIiLCAmQmFzZTo6c19pbmZvLCAmbW9kdWxlTG9hZGVyUHJvdG90eXBlVGFibGUs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoTW9kdWxlTG9hZGVyUHJvdG90eXBlKSB9Owot
Ci0vKiBTb3VyY2UgZm9yIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaAotQGJlZ2luIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVRhYmxlCi0gICAgZW5zdXJlUmVnaXN0ZXJlZCAgICAgICAgICAgICAg
IEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAxCi0gICAgZm9yY2VGdWxmaWxsUHJvbWlzZSAgICAgICAgICAgIEpTQnVp
bHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAyCi0gICAgZnVsZmlsbEZldGNoICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAyCi0gICAgcmVxdWVzdEZldGNoICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCi0g
ICAgcmVxdWVzdEluc3RhbnRpYXRlICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCi0gICAgcmVx
dWVzdFNhdGlzZnkgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCi0gICAgbGluayAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCi0gICAgbW9kdWxlRGVjbGFyYXRp
b25JbnN0YW50aWF0aW9uIG1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xhcmF0aW9uSW5z
dGFudGlhdGlvbiBEb250RW51bXxGdW5jdGlvbiAyCi0gICAgbW9kdWxlRXZhbHVhdGlvbiAgICAg
ICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAyCi0gICAgZXZhbHVhdGUgICAgICAgICAgICAgICAgICAg
ICAgIG1vZHVsZUxvYWRlclByb3RvdHlwZUV2YWx1YXRlICAgICAgICAgICAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAzCi0gICAgcHJvdmlkZUZldGNoICAgICAgICAgICAgICAgICAgIEpT
QnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAyCi0gICAgbG9hZEFuZEV2YWx1YXRlTW9kdWxlICAgICAgICAgIEpTQnVpbHRp
biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAzCi0gICAgbG9hZE1vZHVsZSAgICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAz
Ci0gICAgbGlua0FuZEV2YWx1YXRlTW9kdWxlICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCi0gICAg
cmVxdWVzdEltcG9ydE1vZHVsZSAgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCi0gICAgZ2V0TW9k
dWxlTmFtZXNwYWNlT2JqZWN0ICAgICAgIG1vZHVsZUxvYWRlclByb3RvdHlwZUdldE1vZHVsZU5h
bWVzcGFjZU9iamVjdCAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCi0gICAgcGFyc2VNb2R1bGUg
ICAgICAgICAgICAgICAgICAgIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxlICAgICAg
ICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCi0gICAgcmVxdWVzdGVkTW9kdWxlcyAg
ICAgICAgICAgICAgIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMgICAgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCi0gICAgcmVzb2x2ZSAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAyCi0gICAgcmVzb2x2ZVN5bmMgICAgICAgICAgICAgICAgICAg
IG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmVTeW5jICAgICAgICAgICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAyCi0gICAgZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVs
ZUxvYWRlclByb3RvdHlwZUZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAzCi1AZW5kCi0qLwotCi1Nb2R1bGVMb2FkZXJQcm90b3R5cGU6Ok1vZHVsZUxvYWRl
clByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1
bGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBzY29wZS5yZWxlYXNlQXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAgIGF1dG8gcmVqZWN0ID0gWyZdIHsKLSAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMs
IGV4Y2VwdGlvbik7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgfTsKLQotICAgIGNv
bnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICBy
ZXR1cm4gcmVqZWN0KCk7Ci0KLSAgICBKU1ZhbHVlIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEp
OwotICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IGpzQ2FzdDxKU1NvdXJjZUNvZGUqPihzb3VyY2Up
OwotICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IGpzU291cmNlQ29kZS0+c291cmNlQ29kZSgp
OwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChzb3VyY2VDb2RlLnByb3ZpZGVy
KCktPnNvdXJjZVR5cGUoKSA9PSBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OldlYkFzc2VtYmx5
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5UHJvdG90eXBlOjpp
bnN0YW50aWF0ZShleGVjLCBkZWZlcnJlZCwgbW9kdWxlS2V5LCBqc1NvdXJjZUNvZGUpKTsKLSNl
bmRpZgotCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZUNvZGUpOwotCi0gICAgUGFy
c2VyRXJyb3IgZXJyb3I7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBt
b2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKLSAgICAgICAgJnZt
LCBzb3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0
aW4sCi0gICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0LCBKU1BhcnNlclNjcmlwdE1v
ZGU6Ok1vZHVsZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5k
aW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlamVjdChleGVjLCBlcnJvci50b0Vycm9yT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlQ29kZSkpOwotICAgICAgICBz
Y29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwotICAgIH0KLSAgICBBU1NFUlQobW9kdWxlUHJvZ3JhbU5vZGUpOwot
Ci0gICAgTW9kdWxlQW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoZXhlYywgbW9kdWxlS2V5LCBzb3Vy
Y2VDb2RlLCBtb2R1bGVQcm9ncmFtTm9kZS0+dmFyRGVjbGFyYXRpb25zKCksIG1vZHVsZVByb2dy
YW1Ob2RlLT5sZXhpY2FsVmFyaWFibGVzKCkpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCi0gICAgICAgIHJldHVybiByZWplY3QoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0g
ZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgbW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZSgqbW9kdWxlUHJv
Z3JhbU5vZGUpKTsKLSAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNEeW5hbWlj
Q2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKCFtb2R1bGVSZWNvcmQpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cikp
OwotICAgIH0KLQotICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBzaXpl
X3QgaSA9IDA7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1v
ZHVsZXMoKSkgewotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGkrKywganNT
dHJpbmcoZXhlYywga2V5LmdldCgpKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVy
UHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEFi
c3RyYWN0TW9kdWxlUmVjb3JkKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIW1v
ZHVsZVJlY29yZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLQotICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCi0gICAgICAg
IGRhdGFMb2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxu
Iik7Ci0KLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvb2sgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3Rv
dHlwZVJlc29sdmUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLnJlc29sdmUuCi0gICAgLy8gaHR0cHM6Ly93aGF0
d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1yZXNvbHZlCi0gICAgLy8gVGFrZSB0aGUgbmFt
ZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJj
ZSBsb2NhdGlvbi4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJl
dHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCi0gICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5yZXNvbHZlKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwgZXhlYy0+YXJndW1lbnQo
MikpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90
b3R5cGVSZXNvbHZlU3luYyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBK
U01vZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZt
LCBleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byByZXN1bHQgPSBsb2FkZXIt
PnJlc29sdmVTeW5jKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwg
ZXhlYy0+YXJndW1lbnQoMikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaWRlbnRpZmllclRvSlNW
YWx1ZSh2bSwgcmVzdWx0KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmZldGNoCi0gICAgLy8gaHR0
cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1mZXRjaAotICAgIC8vIFRha2Ug
dGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291cmNlIGFjdHVhbGx5LgotICAgIC8vIEZvciBleGFt
cGxlLCBKYXZhU2NyaXB0Q29yZSBzaGVsbCBjYW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0
aGUgcmVzb3VyY2UKLSAgICAvLyBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KLSAgICBKU01v
ZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBl
eGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShs
b2FkZXItPmZldGNoKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSwg
ZXhlYy0+YXJndW1lbnQoMikpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJQcm90b3R5cGVHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgYXV0byogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxK
U01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0
byogbW9kdWxlTmFtZXNwYWNlT2JqZWN0ID0gbG9hZGVyLT5nZXRNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxl
TmFtZXNwYWNlT2JqZWN0KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRpdGlvbmFs
IEhvb2sgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICAvLyBUbyBpbnN0cnVtZW50IGFuZCByZXRyaWV2ZSB0aGUgZXJyb3Jz
IHJhaXNlZCBmcm9tIHRoZSBtb2R1bGUgZXhlY3V0aW9uLAotICAgIC8vIHdlIGluc2VydGVkIHRo
ZSBob29rIHBvaW50IGhlcmUuCi0KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTW9k
dWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxv
YWRlci0+ZXZhbHVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEp
LCBleGVjLT5hcmd1bWVudCgyKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NmQ2MWQ3NTQzMDhmZGYyZWRhMDAyYzIy
MDVhODllYjAzYWNmYzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU0ludGVybmFsUHJvbWlzZTsK
LQotY2xhc3MgTW9kdWxlTG9hZGVyUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewotcHJpdmF0ZToKLSAgICBNb2R1bGVMb2FkZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1
cmUqKTsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7Ci0KLSAgICBzdGF0aWMgTW9kdWxlTG9hZGVyUHJv
dG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIHsKLSAgICAgICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlKiBvYmplY3QgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVMb2FkZXJQcm90b3R5cGU+KHZtLmhlYXApKSBN
b2R1bGVMb2FkZXJQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338331</attachid>
            <date>2018-04-19 09:35:03 -0700</date>
            <delta_ts>2018-04-22 06:45:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184784-20180420013501.patch</filename>
            <type>text/plain</type>
            <size>75424</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YzkwM2YyMDhiOTc2ZmMzYWVjNjAyY2M1OGRlMWMxNDJiNjMyMWI5Li45ZDUyOGZjNjQxNTE5OWQ1
NGZiOGZiYWZjM2I0ZmRlZWMxYTU4YmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxOC0wNC0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBSZW1vdmUgTW9kdWxlTG9hZGVyUHJvdG90eXBlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQ3ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIGludHJv
ZHVjZSBNb2R1bGVMb2FkZXJQcm90b3R5cGUsIE1vZHVsZUxvYWRlciBtYXkgYmUgY3JlYXRlZCBi
eSB1c2VycyBhbmQgZXhwb3NlZCB0byB1c2Vycy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGxvYWRl
ciBzcGVjIGlzIGFiYW5kb25lZC4gU28gd2UgZG8gbm90IG5lZWQgdG8gaGF2ZSBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUgYW5kIEpTTW9kdWxlTG9hZGVyLgorICAgICAgICBUaGlzIHBhdGNoIG1lcmdl
cyBNb2R1bGVMb2FkZXJQcm90b3R5cGUncyBmdW5jdGlvbmFsaXR5IGludG8gSlNNb2R1bGVMb2Fk
ZXIuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVs
ZUxvYWRlclByb3RvdHlwZS5qcy4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHJveHlSZXZva2VTdHJ1
Y3R1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
U3RydWN0dXJlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUpOgorICAgICAg
ICAoSlNDOjptb2R1bGVMb2FkZXJSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6
bW9kdWxlTG9hZGVyUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclJlc29sdmVT
eW5jKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpt
b2R1bGVMb2FkZXJHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QpOgorICAgICAgICAoSlNDOjptb2R1
bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oOiBSZW1vdmVkLgorCiAyMDE4
LTA0LTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIEZpeCBqc2Mgc2hlbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAzYzQwNWNkMDc3NDU5NDU4MmQ0NWQyODhlZGQ5MWU4ZDQ3YzFmYTJiLi5iZjU4MTM0
ZjA3ZGY3ZmRmYjM2NmNhNWEwNjYxMmQ3MTQzZDY0ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC03NSwxMSArNzUsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVD
VF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VD
b25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAogICAgIHJ1bnRp
bWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAog
ICAgIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAotICAgIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAogICAgIHJ1bnRp
bWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMDIsNyArMTEwMiw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwotICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvTW9kdWxlTG9hZGVyLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9idWlsdGlucy9PYmplY3RDb25zdHJ1Y3Rvci5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCAwZmRkYzNhOTE2MTJjYTkzM2Q2NGYxMTIxODQxYTI3ODRi
NDc0YjdjLi44Mjk1NjkwYzdjNWI3NDI5ZGE2ZjE1Y2YxZTc2YjMyYjM1OWI1MjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTA4LDcgKzEwOCw3IEBA
IEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3Jl
KS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL01vZHVsZUxvYWRlclByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvTW9kdWxlTG9hZGVyLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9O
dW1iZXJDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVt
YmVyUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9PYmplY3RD
b25zdHJ1Y3Rvci5qcyBcCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBPQkpFQ1RfTFVUX0hFQURFUlMg
PSBcCiAgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3Qu
bHV0LmggXAogICAgIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggXAorICAgIEpT
TW9kdWxlTG9hZGVyLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21p
c2VQcm90b3R5cGUubHV0LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBNYXBQcm90b3R5cGUubHV0LmggXAotICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBc
CiAgICAgTnVtYmVyQ29uc3RydWN0b3IubHV0LmggXAogICAgIE51bWJlclByb3RvdHlwZS5sdXQu
aCBcCiAgICAgT2JqZWN0Q29uc3RydWN0b3IubHV0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBiZTU5M2UyOGFiMDY2MGFlZWFjZGVlMmViM2UyMTgxZmRlYzBmZWFlLi5hZmY2
YzdiYmZlNzk3MDdhYzJkZmE2YWZiYWYxMzU0YWQ2MGQyYzlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAkJOTk2QjczMUQxQkRBMDhFRjAwMzMx
Qjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEIxQkQ5RkEyQzAwMzMxQjg0IC8qIEpTR2xvYmFsT2Jq
ZWN0Lmx1dC5oICovOyB9OwogCQk5OTZCNzMxRTFCREEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNl
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzE4NEUyNDE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggKi87IH07CiAJCTk5NkI3MzFGMUJEQTA4RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzE4NEUyNTE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oICov
OyB9OwotCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2
QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCAqLzsg
fTsKKwkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIEpTTW9kdWxlTG9hZGVyLmx1dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEMxQkQ5
RkEyQzAwMzMxQjg0IC8qIEpTTW9kdWxlTG9hZGVyLmx1dC5oICovOyB9OwogCQk5OTZCNzMyMTFC
REEwOEVGMDAzMzFCODQgLyogTnVtYmVyUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEQxQkQ5RkEyQzAwMzMxQjg0IC8q
IE51bWJlclByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJOTk2QjczMjIxQkRBMDhFRjAwMzMxQjg0
IC8qIE9iamVjdENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEUxQkQ5RkEyQzAwMzMxQjg0IC8qIE9iamVjdENvbnN0
cnVjdG9yLmx1dC5oICovOyB9OwogCQk5OTZCNzMyMzFCREEwOEVGMDAzMzFCODQgLyogUmVmbGVj
dE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk5NkI3MzBGMUJEOUZBMkMwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oICovOyB9
OwpAQCAtMTcwNCw3ICsxNzA0LDYgQEAKIAkJRTM1MDcwOEExREM0OUJCRjAwODlCQ0Q2IC8qIERP
TUpJVFNpZ25hdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1MDcwODkxREM0OUJCNjAwODlCQ0Q2IC8qIERPTUpJVFNpZ25hdHVyZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNTQ2MjJCMUI2
MDY1RDEwMDU0NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29u
c3RydWN0QWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUzNTU1QjhBMURBRTAzQTUwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVy
U25pcHBldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM1NTVCODkxREFFMDNBMjAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0ZXJTbmlwcGV0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTM1NUYz
NTMxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUYzNTExQjdEQzg1MzAwQzUw
REM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oICovOyB9OwogCQlFMzVDQTE1NDFEQkMzQTVD
MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVh
cFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJDM0E1
NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUUwMzYwMUI3QUI0M0UwMDczQUQyQSAvKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUUwMzVFMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzg2Miw3ICszODYxLDcgQEAKIAkJOTk2QjczMDkxQkQ5RkEy
QzAwMzMxQjg0IC8qIEVycm9yUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFcnJvclByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTk2QjczMEExQkQ5RkEyQzAwMzMxQjg0IC8qIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUu
bHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5NkI3MzBCMUJEOUZBMkMwMDMz
MUI4NCAvKiBKU0dsb2JhbE9iamVjdC5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNHbG9iYWxPYmplY3QubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk5NkI3MzBDMUJEOUZBMkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5s
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTk2QjczMEMxQkQ5RkEyQzAwMzMx
Qjg0IC8qIEpTTW9kdWxlTG9hZGVyLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01vZHVsZUxvYWRlci5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTk2QjczMEQxQkQ5RkEyQzAwMzMxQjg0IC8qIE51bWJlclByb3RvdHlwZS5sdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTnVtYmVyUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCNzMwRTFCRDlGQTJDMDAzMzFCODQgLyogT2JqZWN0
Q29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVj
dENvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCNzMw
RjFCRDlGQTJDMDAzMzFCODQgLyogUmVmbGVjdE9iamVjdC5sdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVmbGVjdE9iamVjdC5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQ1MTcsNyArNDUxNiw3IEBACiAJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3
NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFZNLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2Jq
Y3BwOyB9OwogCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFZNLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNv
ZGUubGFuZy5jcHA7IH07Ci0JCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
MDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNb2R1bGVMb2FkZXIuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzMTYxODEwMUVDNUZFMDgwMDA2QTIxOCAvKiBET01Bbm5vdGF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUFubm90YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNjE4MTExRUM1RkUwODAwMDZBMjE4IC8qIERP
TUF0dHJpYnV0ZUdldHRlclNldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzE2MTgxMjFFQzVGRTA4MDAwNkEyMTggLyogRE9NQXR0cmlidXRlR2V0dGVy
U2V0dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUF0dHJpYnV0ZUdl
dHRlclNldHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU1Myw4ICs0NTUy
LDYgQEAKIAkJRTM1MDcwODkxREM0OUJCNjAwODlCQ0Q2IC8qIERPTUpJVFNpZ25hdHVyZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRTaWduYXR1cmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1NDYyMkExQjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0
cnVjdEFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RydWN0
QWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzU1NUI4OTFEQUUwM0Ey
MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBwZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NSklUQ2FsbERPTUdldHRlclNuaXBwZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM1NUYzNTAxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxv
YWRlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
MzU1RjM1MTFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE0RjFEQkMzQTU2MDBGODM1MTYgLyogRE9N
SklUQWJzdHJhY3RIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERPTUpJVEFic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NUNBMTUwMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklUQWJzdHJhY3RIZWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzNUNBMTUxMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFw
UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUSGVh
cFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxODYsNyArNjE4Myw3
IEBACiAJCQkJQkMxOEM1MkQwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oICovLAogCQkJ
CTcwREU5QTA4MUJFN0Q2NzAwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggKi8sCiAJCQkJNzAz
NTU4N0UxQzQxODQ1ODAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLywKLQkJCQk5OTZC
NzMwQzFCRDlGQTJDMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oICovLAor
CQkJCTk5NkI3MzBDMUJEOUZBMkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXIubHV0LmggKi8sCiAJ
CQkJQkMyNjgwRTYwRTE2RDUyMzAwQTA2RTkyIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oICov
LAogCQkJCTk5NkI3MzBEMUJEOUZBMkMwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0Lmgg
Ki8sCiAJCQkJOTk2QjczMEUxQkQ5RkEyQzAwMzMxQjg0IC8qIE9iamVjdENvbnN0cnVjdG9yLmx1
dC5oICovLApAQCAtNjgyMiw4ICs2ODE5LDYgQEAKIAkJCQk5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovLAogCQkJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMy
NCAvKiBNaWNyb3Rhc2suaCAqLywKIAkJCQlGRTJBODc1RjFGMDIzODE2MDBFQjMxQjIgLyogTWlu
aW11bVJlc2VydmVkWm9uZVNpemUuaCAqLywKLQkJCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUg
LyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCAqLywKLQkJCQlFMzU1RjM1MTFCN0RDODUzMDBD
NTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi8sCiAJCQkJMTQ3MzQxREQxREMyQ0U5
NjAwQUEyOUJBIC8qIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkxNDczNDFE
NTFEQzAyRUI5MDBBQTI5QkEgLyogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCAqLywKIAkJCQlC
QzAyRTkwODBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8s
CkBAIC03OTI3LDcgKzc5MjIsNyBAQAogCQkJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJ
bnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5
REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAw
NEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAqLywKLQkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3
RjAgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzICovLAorCQkJCUUzMDY3Nzk3MUI4QkM2RjUw
MDNGODdGMCAvKiBNb2R1bGVMb2FkZXIuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0
QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQwMDg5
MTMzRCAvKiBOdW1iZXJQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNUMxQjY1RDlCMTAwOURC
MUVGIC8qIE9iamVjdENvbnN0cnVjdG9yLmpzICovLApAQCAtOTE5NSw4ICs5MTkwLDcgQEAKIAkJ
CQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSBpbiBIZWFkZXJz
ICovLAogCQkJCUUzNzk0RTc2MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTM1NUYzNTMxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRl
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0
IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5NkI3
MzIwMUJEQTA4RUYwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXIubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5RjYzNDM0NTc3Mjc0RkFGQjkzMzZDMzggLyogTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2Fz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBRDkxMEYxRENBOTI5NDAwMTRGOUZFIC8qIE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzM0MUQ2MURDMDJFQjkw
MEFBMjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNGIzZDlmN2VjNTA0MDgwYjcyMzA4MDMyYTdkMmVh
NzBjZGNiZmI1Yi4uNTA3NWJiM2Q3MWQ2MjBjZTg5Mzk2MmUwYjkwYzExOGUwMTlmN2M1YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtODU3LDcgKzg1Nyw2IEBAIHJ1bnRpbWUvTWF0
Y2hSZXN1bHQuY3BwCiBydW50aW1lL01hdGhDb21tb24uY3BwCiBydW50aW1lL01hdGhPYmplY3Qu
Y3BwCiBydW50aW1lL01lbW9yeVN0YXRpc3RpY3MuY3BwCi1ydW50aW1lL01vZHVsZUxvYWRlclBy
b3RvdHlwZS5jcHAKIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCiBydW50aW1l
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxv
YWRlci5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWVmOTFlYjg2NTUxZmE5MzE5N2MxNGQ4MDkwOGRkNjlmNTZkYzc0YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2Fk
ZXIuanMKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNs
b2FkZXItb2JqZWN0CisvLyBNb2R1bGUgTG9hZGVyIGhhcyBzZXZlcmFsIGhvb2tzIHRoYXQgY2Fu
IGJlIGN1c3RvbWl6ZWQgYnkgdGhlIHBsYXRmb3JtLgorLy8gRm9yIGV4YW1wbGUsIHRoZSBbW0Zl
dGNoXV0gaG9vayBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIEphdmFTY3JpcHRDb3JlIHNoZWxsCisv
LyBhcyBmZXRjaGluZyB0aGUgcGF5bG9hZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KKy8v
IEN1cnJlbnRseSwgdGhlcmUgYXJlIDQgaG9va3MuCisvLyAgICAxLiBMb2FkZXIucmVzb2x2ZQor
Ly8gICAgMi4gTG9hZGVyLmZldGNoCisKK0BnbG9iYWxQcml2YXRlCitmdW5jdGlvbiBzZXRTdGF0
ZVRvTWF4KGVudHJ5LCBuZXdTdGF0ZSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIu
aW8vbG9hZGVyLyNzZXQtc3RhdGUtdG8tbWF4CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBp
ZiAoZW50cnkuc3RhdGUgPCBuZXdTdGF0ZSkKKyAgICAgICAgZW50cnkuc3RhdGUgPSBuZXdTdGF0
ZTsKK30KKworQGdsb2JhbFByaXZhdGUKK2Z1bmN0aW9uIG5ld1JlZ2lzdHJ5RW50cnkoa2V5KQor
eworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlZ2lzdHJ5CisgICAg
Ly8KKyAgICAvLyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGJlY29tZXMgb25lIG9mIHRoZSA1IHN0YXRl
cy4KKyAgICAvLyAxLiBGZXRjaAorICAgIC8vICAgICBSZWFkeSB0byBmZXRjaCAob3Igbm93IGZl
dGNoaW5nKSB0aGUgcmVzb3VyY2Ugb2YgdGhpcyBtb2R1bGUuCisgICAgLy8gICAgIFR5cGljYWxs
eSwgd2UgZmV0Y2ggdGhlIHNvdXJjZSBjb2RlIG92ZXIgdGhlIG5ldHdvcmsgb3IgZnJvbSB0aGUg
ZmlsZSBzeXN0ZW0uCisgICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgRmV0Y2ggYW5kIHRo
ZXJlIGlzIG5vIGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFkeSB0byBmZXRj
aC4KKyAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBGZXRjaCBhbmQgdGhlcmUgaXMgdGhl
IGVudHJ5LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IGZldGNoaW5nIHRoZSByZXNv
dXJjZS4KKyAgICAvLworICAgIC8vIDIuIEluc3RhbnRpYXRlIChBbmFseXplTW9kdWxlKQorICAg
IC8vICAgICBSZWFkeSB0byBpbnN0YW50aWF0ZSAob3Igbm93IGluc3RhbnRpYXRpbmcpIHRoZSBt
b2R1bGUgcmVjb3JkIGZyb20gdGhlIGZldGNoZWQKKyAgICAvLyAgICAgc291cmNlIGNvZGUuCisg
ICAgLy8gICAgIFR5cGljYWxseSwgd2UgcGFyc2UgdGhlIG1vZHVsZSBjb2RlLCBleHRyYWN0IHRo
ZSBkZXBlbmRlbmNpZXMgYW5kIGJpbmRpbmcgaW5mb3JtYXRpb24uCisgICAgLy8gICAgIGEuIElm
IHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5kIHRoZXJlIGlzIG5vIGVudHJ5Lmluc3RhbnRp
YXRlIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFkeSB0byBpbnN0YW50aWF0ZS4KKyAgICAvLyAg
ICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5
LmZldGNoIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IGluc3RhbnRpYXRpbmcKKyAgICAvLyAg
ICAgICAgdGhlIG1vZHVsZSByZWNvcmQuCisgICAgLy8KKyAgICAvLyAzLiBTYXRpc2Z5CisgICAg
Ly8gICAgIFJlYWR5IHRvIHJlcXVlc3QgdGhlIGRlcGVuZGVudCBtb2R1bGVzIChvciBub3cgcmVx
dWVzdGluZyAmIHJlc29sdmluZykuCisgICAgLy8gICAgIFdpdGhvdXQgdGhpcyBzdGF0ZSwgdGhl
IGN1cnJlbnQgZHJhZnQgY2F1c2VzIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHRoZXJlIGlzIGNp
cmN1bGFyIGRlcGVuZGVuY3kuCisgICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgU2F0aXNm
eSBhbmQgdGhlcmUgaXMgbm8gZW50cnkuc2F0aXNmeSBwcm9taXNlLCB0aGUgZW50cnkgaXMgcmVh
ZHkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgorICAgIC8vICAgICBiLiBJZiB0aGUgc3Rh
dHVzIGlzIFNhdGlzZnkgYW5kIHRoZXJlIGlzIHRoZSBlbnRyeS5zYXRpc2Z5IHByb21pc2UsIHRo
ZSBlbnRyeSBpcyBqdXN0IHJlc29sdmluZworICAgIC8vICAgICAgICB0aGUgZGVwZW5kZW5jaWVz
LgorICAgIC8vCisgICAgLy8gNC4gTGluaworICAgIC8vICAgICBSZWFkeSB0byBsaW5rIHRoZSBt
b2R1bGUgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4KKyAgICAvLyAgICAgTGlua2luZyBtZWFucyB0
aGF0IHRoZSBtb2R1bGUgaW1wb3J0cyBhbmQgZXhwb3J0cyB0aGUgYmluZGluZ3MgZnJvbS90byB0
aGUgb3RoZXIgbW9kdWxlcy4KKyAgICAvLworICAgIC8vIDUuIFJlYWR5CisgICAgLy8gICAgIFRo
ZSBtb2R1bGUgaXMgbGlua2VkLCBzbyB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGJlIGV4ZWN1dGVk
LgorICAgIC8vCisgICAgLy8gRWFjaCByZWdpc3RyeSBlbnRyeSBoYXMgdGhlIDQgcHJvbWlzZXM7
ICJmZXRjaCIsICJpbnN0YW50aWF0ZSIgYW5kICJzYXRpc2Z5Ii4KKyAgICAvLyBUaGV5IGFyZSBh
c3NpZ25lZCB3aGVuIHN0YXJ0aW5nIHRoZSBlYWNoIHBoYXNlLiBBbmQgdGhleSBhcmUgZnVsZmls
bGVkIHdoZW4gdGhlIGVhY2ggcGhhc2UgaXMgY29tcGxldGVkLgorICAgIC8vCisgICAgLy8gSW4g
dGhlIGN1cnJlbnQgbW9kdWxlIGRyYWZ0LCBsaW5raW5nIHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVy
IHRoZSB3aG9sZSBtb2R1bGVzIGFyZSBpbnN0YW50aWF0ZWQgYW5kIHRoZSBkZXBlbmRlbmNpZXMg
YXJlIHJlc29sdmVkLgorICAgIC8vIEFuZCBleGVjdXRpb24gaXMgYWxzbyBkb25lIGFmdGVyIHRo
ZSBhbGwgbW9kdWxlcyBhcmUgbGlua2VkLgorICAgIC8vCisgICAgLy8gVE9ETzogV2UgbmVlZCB0
byBleHBsb2l0IHRoZSB3YXkgdG8gZXhlY3V0ZSB0aGUgbW9kdWxlIHdoaWxlIGZldGNoaW5nIG5v
bi1yZWxhdGVkIG1vZHVsZXMuCisgICAgLy8gT25lIHNvbHV0aW9uOyBpbnRyb2R1Y2luZyB0aGUg
cmVhZHkgcHJvbWlzZSBjaGFpbiB0byBleGVjdXRlIHRoZSBtb2R1bGVzIGNvbmN1cnJlbnRseSB3
aGlsZSBrZWVwaW5nCisgICAgLy8gdGhlIGV4ZWN1dGlvbiBvcmRlci4KKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgIGtleToga2V5LAorICAgICAgICBzdGF0ZTog
QE1vZHVsZUZldGNoLAorICAgICAgICBmZXRjaDogQHVuZGVmaW5lZCwKKyAgICAgICAgaW5zdGFu
dGlhdGU6IEB1bmRlZmluZWQsCisgICAgICAgIHNhdGlzZnk6IEB1bmRlZmluZWQsCisgICAgICAg
IGRlcGVuZGVuY2llczogW10sIC8vIFRvIGtlZXAgdGhlIG1vZHVsZSBvcmRlciwgd2Ugc3RvcmUg
dGhlIG1vZHVsZSBrZXlzIGluIHRoZSBhcnJheS4KKyAgICAgICAgbW9kdWxlOiBAdW5kZWZpbmVk
LCAvLyBKU01vZHVsZVJlY29yZAorICAgICAgICBsaW5rRXJyb3I6IEB1bmRlZmluZWQsCisgICAg
ICAgIGxpbmtTdWNjZWVkZWQ6IHRydWUsCisgICAgICAgIGV2YWx1YXRlZDogZmFsc2UsCisgICAg
fTsKK30KKworZnVuY3Rpb24gZW5zdXJlUmVnaXN0ZXJlZChrZXkpCit7CisgICAgLy8gaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZW5zdXJlLXJlZ2lzdGVyZWQKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMucmVnaXN0cnkuQGdldChrZXkpOworICAg
IGlmIChlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgZW50cnkgPSBAbmV3UmVn
aXN0cnlFbnRyeShrZXkpOworICAgIHRoaXMucmVnaXN0cnkuQHNldChrZXksIGVudHJ5KTsKKwor
ICAgIHJldHVybiBlbnRyeTsKK30KKworZnVuY3Rpb24gZm9yY2VGdWxmaWxsUHJvbWlzZShwcm9t
aXNlLCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoQGdldEJ5SWREaXJl
Y3RQcml2YXRlKHByb21pc2UsICJwcm9taXNlU3RhdGUiKSA9PT0gQHByb21pc2VTdGF0ZVBlbmRp
bmcpCisgICAgICAgIEBmdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSk7Cit9CisKK2Z1bmN0
aW9uIGZ1bGZpbGxGZXRjaChlbnRyeSwgc291cmNlKQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdn
LmdpdGh1Yi5pby9sb2FkZXIvI2Z1bGZpbGwtZmV0Y2gKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIGlmICghZW50cnkuZmV0Y2gpCisgICAgICAgIGVudHJ5LmZldGNoID0gQG5ld1Byb21pc2VD
YXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpLkBwcm9taXNlOworICAgIHRoaXMuZm9yY2VGdWxm
aWxsUHJvbWlzZShlbnRyeS5mZXRjaCwgc291cmNlKTsKKyAgICBAc2V0U3RhdGVUb01heChlbnRy
eSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKK30KKworLy8gTG9hZGVyLgorCitmdW5jdGlvbiByZXF1
ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpCit7CisgICAgLy8gaHR0cHM6Ly93
aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC1mZXRjaAorCisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgaWYgKGVudHJ5LmZldGNoKSB7CisgICAgICAgIHZhciBjdXJyZW50QXR0ZW1wdCA9
IGVudHJ5LmZldGNoOworICAgICAgICBpZiAoZW50cnkuc3RhdGUgIT09IEBNb2R1bGVGZXRjaCkK
KyAgICAgICAgICAgIHJldHVybiBjdXJyZW50QXR0ZW1wdDsKKworICAgICAgICByZXR1cm4gY3Vy
cmVudEF0dGVtcHQuY2F0Y2goKGVycm9yKSA9PiB7CisgICAgICAgICAgICAvLyBFdmVuIGlmIHRo
ZSBleGlzdGluZyBmZXRjaGluZyByZXF1ZXN0IGZhaWxlZCwgdGhpcyBhdHRlbXB0IG1heSBzdWNj
ZWVkLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHByZXZpb3VzIGF0dGVtcHQgdXNlZCBp
bnZhbGlkIGludGVncml0eT0iIiB2YWx1ZS4gQnV0IHRoaXMKKyAgICAgICAgICAgIC8vIHJlcXVl
c3QgY291bGQgaGF2ZSB0aGUgY29ycmVjdCBpbnRlZ3JpdHk9IiIgdmFsdWUuIEluIHRoYXQgY2Fz
ZSwgd2Ugc2hvdWxkCisgICAgICAgICAgICAvLyByZXRyeSBmZXRjaGluZyBmb3IgdGhpcyByZXF1
ZXN0LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gt
YS1zaW5nbGUtbW9kdWxlLXNjcmlwdAorICAgICAgICAgICAgaWYgKGN1cnJlbnRBdHRlbXB0ID09
PSBlbnRyeS5mZXRjaCkKKyAgICAgICAgICAgICAgICBlbnRyeS5mZXRjaCA9IEB1bmRlZmluZWQ7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMs
IGZldGNoZXIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBIb29rIHBvaW50LgorICAg
IC8vIDIuIExvYWRlci5mZXRjaAorICAgIC8vICAgICBodHRwczovL3doYXR3Zy5naXRodWIuaW8v
bG9hZGVyLyNicm93c2VyLWZldGNoCisgICAgLy8gICAgIFRha2UgdGhlIGtleSBhbmQgZmV0Y2gg
dGhlIHJlc291cmNlIGFjdHVhbGx5LgorICAgIC8vICAgICBGb3IgZXhhbXBsZSwgSmF2YVNjcmlw
dENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCisg
ICAgLy8gICAgIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICAgIHZhciBmZXRjaFByb21p
c2UgPSB0aGlzLmZldGNoKGVudHJ5LmtleSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoc291
cmNlKSA9PiB7CisgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlSW5zdGFudGlh
dGUpOworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0pOworICAgIGVudHJ5LmZldGNoID0g
ZmV0Y2hQcm9taXNlOworICAgIHJldHVybiBmZXRjaFByb21pc2U7Cit9CisKK2Z1bmN0aW9uIHJl
cXVlc3RJbnN0YW50aWF0ZShlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlcikKK3sKKyAgICAvLyBo
dHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNyZXF1ZXN0LWluc3RhbnRpYXRlCisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBlbnRyeS5pbnN0YW50aWF0ZSBpcyBzZXQgaWYgZmV0
Y2ggc3VjY2VlZHMuCisgICAgaWYgKGVudHJ5Lmluc3RhbnRpYXRlKQorICAgICAgICByZXR1cm4g
ZW50cnkuaW5zdGFudGlhdGU7CisKKyAgICB2YXIgaW5zdGFudGlhdGVQcm9taXNlID0gdGhpcy5y
ZXF1ZXN0RmV0Y2goZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpLnRoZW4oKHNvdXJjZSkgPT4g
eworICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNmZXRjaC1hLXNpbmds
ZS1tb2R1bGUtc2NyaXB0CisgICAgICAgIC8vIE5vdyBmZXRjaGluZyByZXF1ZXN0IHN1Y2NlZWRz
LiBUaGVuIGV2ZW4gaWYgaW5zdGFudGlhdGlvbiBmYWlscywgd2Ugc2hvdWxkIGNhY2hlIGl0Lgor
ICAgICAgICAvLyBJbnN0YW50aWF0aW9uIHdvbid0IGJlIHJldHJpZWQuCisgICAgICAgIGlmIChl
bnRyeS5pbnN0YW50aWF0ZSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5pbnN0YW50aWF0ZTsK
KyAgICAgICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZVByb21pc2U7CisKKyAgICAg
ICAgdmFyIGtleSA9IGVudHJ5LmtleTsKKyAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNb2R1bGUo
a2V5LCBzb3VyY2UpLnRoZW4oKG1vZHVsZVJlY29yZCkgPT4geworICAgICAgICAgICAgdmFyIGRl
cGVuZGVuY2llc01hcCA9IG1vZHVsZVJlY29yZC5kZXBlbmRlbmNpZXNNYXA7CisgICAgICAgICAg
ICB2YXIgcmVxdWVzdGVkTW9kdWxlcyA9IHRoaXMucmVxdWVzdGVkTW9kdWxlcyhtb2R1bGVSZWNv
cmQpOworICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IEBuZXdBcnJheVdpdGhTaXplKHJl
cXVlc3RlZE1vZHVsZXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSByZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGRlcE5hbWUgPSByZXF1ZXN0ZWRNb2R1bGVzW2ldOworICAgICAgICAgICAg
ICAgIHZhciBkZXBLZXkgPSB0aGlzLnJlc29sdmVTeW5jKGRlcE5hbWUsIGtleSwgZmV0Y2hlcik7
CisgICAgICAgICAgICAgICAgdmFyIGRlcEVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGRl
cEtleSk7CisgICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGRlcGVuZGVuY2llcywgaSwg
ZGVwRW50cnkpOworICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc01hcC5Ac2V0KGRlcE5hbWUs
IGRlcEVudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5LmRlcGVuZGVuY2ll
cyA9IGRlcGVuZGVuY2llczsKKyAgICAgICAgICAgIGVudHJ5Lm1vZHVsZSA9IG1vZHVsZVJlY29y
ZDsKKyAgICAgICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlU2F0aXNmeSk7Cisg
ICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIHJldHVy
biBpbnN0YW50aWF0ZVByb21pc2U7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RTYXRpc2Z5KGVudHJ5
LCBwYXJhbWV0ZXJzLCBmZXRjaGVyLCB2aXNpdGVkKQoreworICAgIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvI2ludGVybmFsLW1vZHVsZS1zY3JpcHQtZ3JhcGgtZmV0Y2hpbmctcHJv
Y2VkdXJlCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoZW50cnkuc2F0aXNmeSkKKyAg
ICAgICAgcmV0dXJuIGVudHJ5LnNhdGlzZnk7CisKKyAgICB2aXNpdGVkLkBhZGQoZW50cnkpOwor
ICAgIHZhciBzYXRpc2Z5UHJvbWlzZSA9IHRoaXMucmVxdWVzdEluc3RhbnRpYXRlKGVudHJ5LCBw
YXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChlbnRyeSkgPT4geworICAgICAgICBpZiAoZW50cnku
c2F0aXNmeSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5zYXRpc2Z5OworCisgICAgICAgIHZh
ciBkZXBMb2FkcyA9IEBuZXdBcnJheVdpdGhTaXplKGVudHJ5LmRlcGVuZGVuY2llcy5sZW5ndGgp
OworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZW50cnkuZGVwZW5kZW5jaWVzLmxl
bmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgZGVwRW50cnkgPSBlbnRy
eS5kZXBlbmRlbmNpZXNbaV07CisgICAgICAgICAgICB2YXIgcHJvbWlzZTsKKworICAgICAgICAg
ICAgLy8gUmVjdXJzaXZlIHJlc29sdmluZy4gVGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGVudHJ5
IGlzIGJlaW5nIHJlc29sdmVkIG9yIGFscmVhZHkgcmVzb2x2ZWQuCisgICAgICAgICAgICAvLyBT
dG9wIHRyYWNpbmcgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIC8vIEJ1
dCB0byByZXRyaWV2ZSB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSByZWNvcmQgY29ycmVjdGx5LAor
ICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgaW5zdGFudGlhdGlvbiBmb3Ig
dGhlIGRlcGVuZGVudCBtb2R1bGUuCisgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgcmVhY2hp
bmcgaGVyZSwgdGhlIG1vZHVsZSBpcyBzdGFydGluZyByZXNvbHZpbmcgdGhlIGRlcGVuZGVuY2ll
cy4KKyAgICAgICAgICAgIC8vIEJ1dCB0aGUgbW9kdWxlIG1heSBvciBtYXkgbm90IHJlYWNoIHRo
ZSBpbnN0YW50aWF0aW9uIHBoYXNlIGluIHRoZSBsb2FkZXIncyBwaXBlbGluZS4KKyAgICAgICAg
ICAgIC8vIElmIHdlIHdhaXQgZm9yIHRoZSBTYXRpc2Z5IGZvciB0aGlzIG1vZHVsZSwgaXQgY29u
c3RydWN0IHRoZSBjaXJjdWxhciBwcm9taXNlIGNoYWluIGFuZAorICAgICAgICAgICAgLy8gcmVq
ZWN0ZWQgYnkgdGhlIFByb21pc2VzIHJ1bnRpbWUuIFNpbmNlIG9ubHkgd2UgbmVlZCBpcyB0aGUg
aW5zdGFudGlhdGVkIG1vZHVsZSwgaW5zdGVhZCBvZiB3YWl0aW5nCisgICAgICAgICAgICAvLyB0
aGUgU2F0aXNmeSBmb3IgdGhpcyBtb2R1bGUsIHdlIGp1c3Qgd2FpdCBJbnN0YW50aWF0ZSBmb3Ig
dGhpcy4KKyAgICAgICAgICAgIGlmICh2aXNpdGVkLkBoYXMoZGVwRW50cnkpKQorICAgICAgICAg
ICAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0YW50aWF0ZShkZXBFbnRyeSwgQHVuZGVm
aW5lZCwgZmV0Y2hlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBD
dXJyZW50bHksIG1vZHVsZSBsb2FkZXIgZG8gbm90IHBhc3MgYW55IGluZm9ybWF0aW9uIGZvciBu
b24tdG9wLWxldmVsIG1vZHVsZSBmZXRjaGluZy4KKyAgICAgICAgICAgICAgICBwcm9taXNlID0g
dGhpcy5yZXF1ZXN0U2F0aXNmeShkZXBFbnRyeSwgQHVuZGVmaW5lZCwgZmV0Y2hlciwgdmlzaXRl
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QoZGVwTG9hZHMs
IGksIHByb21pc2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEBJbnRlcm5hbFByb21p
c2UuaW50ZXJuYWxBbGwoZGVwTG9hZHMpLnRoZW4oKGVudHJpZXMpID0+IHsKKyAgICAgICAgICAg
IGlmIChlbnRyeS5zYXRpc2Z5KQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAg
ICAgICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlTGluayk7CisgICAgICAgICAgICBl
bnRyeS5zYXRpc2Z5ID0gc2F0aXNmeVByb21pc2U7CisgICAgICAgICAgICByZXR1cm4gZW50cnk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgcmV0dXJuIHNhdGlzZnlQcm9taXNlOworfQor
CisvLyBMaW5raW5nIHNlbWFudGljcy4KKworZnVuY3Rpb24gbGluayhlbnRyeSwgZmV0Y2hlcikK
K3sKKyAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNmZXRjaC10aGUtZGVzY2Vu
ZGFudHMtb2YtYW5kLWluc3RhbnRpYXRlLWEtbW9kdWxlLXNjcmlwdAorCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgaWYgKCFlbnRyeS5saW5rU3VjY2VlZGVkKQorICAgICAgICB0aHJvdyBlbnRy
eS5saW5rRXJyb3I7CisgICAgaWYgKGVudHJ5LnN0YXRlID09PSBATW9kdWxlUmVhZHkpCisgICAg
ICAgIHJldHVybjsKKyAgICBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVJlYWR5KTsKKwor
ICAgIHRyeSB7CisgICAgICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgImRlcGVuZGVu
Y2llcyIgZmllbGQsCisgICAgICAgIC8vIHdlIGNhbiBjYWxsIG1vZHVsZURlY2xhcmF0aW9uSW5z
dGFudGlhdGlvbiB3aXRoIHRoZSBjb3JyZWN0IG9yZGVyCisgICAgICAgIC8vIHdpdGhvdXQgY29u
c3RydWN0aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGJ5IGNhbGxpbmcgZGVwZW5kZW5jeUdyYXBo
LgorICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzOworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0
aDsgKytpKQorICAgICAgICAgICAgdGhpcy5saW5rKGRlcGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7
CisKKyAgICAgICAgdGhpcy5tb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oZW50cnkubW9k
dWxlLCBmZXRjaGVyKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBlbnRyeS5saW5r
U3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgIGVudHJ5LmxpbmtFcnJvciA9IGVycm9yOworICAg
ICAgICB0aHJvdyBlcnJvcjsKKyAgICB9Cit9CisKKy8vIE1vZHVsZSBzZW1hbnRpY3MuCisKK2Z1
bmN0aW9uIG1vZHVsZUV2YWx1YXRpb24oZW50cnksIGZldGNoZXIpCit7CisgICAgLy8gaHR0cDov
L3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZWV2YWx1
YXRpb24KKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChlbnRyeS5ldmFsdWF0ZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBlbnRyeS5ldmFsdWF0ZWQgPSB0cnVlOworCisgICAgLy8gVGhl
IGNvbnRlbnRzIG9mIHRoZSBbW1JlcXVlc3RlZE1vZHVsZXNdXSBpcyBjbG9uZWQgaW50byBlbnRy
eS5kZXBlbmRlbmNpZXMuCisgICAgdmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRlcGVuZGVuY2ll
czsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgKytpKQorICAgICAgICB0aGlzLm1vZHVsZUV2YWx1YXRpb24oZGVwZW5kZW5jaWVz
W2ldLCBmZXRjaGVyKTsKKworICAgIHRoaXMuZXZhbHVhdGUoZW50cnkua2V5LCBlbnRyeS5tb2R1
bGUsIGZldGNoZXIpOworfQorCisvLyBBUElzIHRvIGNvbnRyb2wgdGhlIG1vZHVsZSBsb2FkZXIu
CisKK2Z1bmN0aW9uIHByb3ZpZGVGZXRjaChrZXksIHZhbHVlKQoreworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOworCisgICAg
aWYgKGVudHJ5LnN0YXRlID4gQE1vZHVsZUZldGNoKQorICAgICAgICBAdGhyb3dUeXBlRXJyb3Io
IlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSBmZXRjaGVkLiIpOworICAgIHRoaXMuZnVsZmls
bEZldGNoKGVudHJ5LCB2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFt
ZSwgcGFyYW1ldGVycywgZmV0Y2hlcikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBM
b2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgorICAgIC8vIHJlc29sdmU6IG1vZHVsZU5hbWUgPT4g
UHJvbWlzZShtb2R1bGVLZXkpCisgICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0
byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2NhdGlvbi4KKyAgICAv
LyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0aGUgVVJMIGZvciB0
aGUgcmVzb3VyY2UuCisgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShtb2R1bGVOYW1lLCBAdW5kZWZp
bmVkLCBmZXRjaGVyKS50aGVuKChrZXkpID0+IHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVz
dFNhdGlzZnkodGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSksIHBhcmFtZXRlcnMsIGZldGNoZXIs
IG5ldyBAU2V0KTsKKyAgICB9KS50aGVuKChlbnRyeSkgPT4geworICAgICAgICByZXR1cm4gZW50
cnkua2V5OworICAgIH0pOworfQorCitmdW5jdGlvbiBsaW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5
LCBmZXRjaGVyKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChrZXkpOworICAgIGlmIChlbnRyeS5zdGF0ZSA8IEBNb2R1bGVMaW5r
KQorICAgICAgICBAdGhyb3dUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgbm90IGluc3Rh
bnRpYXRlZCB5ZXQuIik7CisKKyAgICB0aGlzLmxpbmsoZW50cnksIGZldGNoZXIpOworICAgIHJl
dHVybiB0aGlzLm1vZHVsZUV2YWx1YXRpb24oZW50cnksIGZldGNoZXIpOworfQorCitmdW5jdGlv
biBsb2FkQW5kRXZhbHVhdGVNb2R1bGUobW9kdWxlTmFtZSwgcGFyYW1ldGVycywgZmV0Y2hlcikK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gdGhpcy5sb2FkTW9kdWxlKG1vZHVs
ZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIpLnRoZW4oKGtleSkgPT4geworICAgICAgICByZXR1
cm4gdGhpcy5saW5rQW5kRXZhbHVhdGVNb2R1bGUoa2V5LCBmZXRjaGVyKTsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gcmVxdWVzdEltcG9ydE1vZHVsZShrZXksIHBhcmFtZXRlcnMsIGZldGNoZXIp
Cit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHRoaXMucmVxdWVzdFNhdGlzZnko
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSksIHBhcmFtZXRlcnMsIGZldGNoZXIsIG5ldyBAU2V0
KS50aGVuKChlbnRyeSkgPT4geworICAgICAgICB0aGlzLmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShl
bnRyeS5rZXksIGZldGNoZXIpOworICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoZW50cnkubW9kdWxlKTsKKyAgICB9KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWY5MWViODY1NTFmYTkzMTk3YzE0ZDgwOTA4ZGQ2OWY1
NmRjNzRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2Fk
ZXIvI2xvYWRlci1vYmplY3QKLS8vIE1vZHVsZSBMb2FkZXIgaGFzIHNldmVyYWwgaG9va3MgdGhh
dCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgcGxhdGZvcm0uCi0vLyBGb3IgZXhhbXBsZSwgdGhl
IFtbRmV0Y2hdXSBob29rIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgSmF2YVNjcmlwdENvcmUgc2hl
bGwKLS8vIGFzIGZldGNoaW5nIHRoZSBwYXlsb2FkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVt
LgotLy8gQ3VycmVudGx5LCB0aGVyZSBhcmUgNCBob29rcy4KLS8vICAgIDEuIExvYWRlci5yZXNv
bHZlCi0vLyAgICAyLiBMb2FkZXIuZmV0Y2gKLQotQGdsb2JhbFByaXZhdGUKLWZ1bmN0aW9uIHNl
dFN0YXRlVG9NYXgoZW50cnksIG5ld1N0YXRlKQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdp
dGh1Yi5pby9sb2FkZXIvI3NldC1zdGF0ZS10by1tYXgKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIGlmIChlbnRyeS5zdGF0ZSA8IG5ld1N0YXRlKQotICAgICAgICBlbnRyeS5zdGF0ZSA9IG5l
d1N0YXRlOwotfQotCi1AZ2xvYmFsUHJpdmF0ZQotZnVuY3Rpb24gbmV3UmVnaXN0cnlFbnRyeShr
ZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVnaXN0cnkK
LSAgICAvLwotICAgIC8vIEVhY2ggcmVnaXN0cnkgZW50cnkgYmVjb21lcyBvbmUgb2YgdGhlIDUg
c3RhdGVzLgotICAgIC8vIDEuIEZldGNoCi0gICAgLy8gICAgIFJlYWR5IHRvIGZldGNoIChvciBu
b3cgZmV0Y2hpbmcpIHRoZSByZXNvdXJjZSBvZiB0aGlzIG1vZHVsZS4KLSAgICAvLyAgICAgVHlw
aWNhbGx5LCB3ZSBmZXRjaCB0aGUgc291cmNlIGNvZGUgb3ZlciB0aGUgbmV0d29yayBvciBmcm9t
IHRoZSBmaWxlIHN5c3RlbS4KLSAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBGZXRjaCBh
bmQgdGhlcmUgaXMgbm8gZW50cnkuZmV0Y2ggcHJvbWlzZSwgdGhlIGVudHJ5IGlzIHJlYWR5IHRv
IGZldGNoLgotICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIEZldGNoIGFuZCB0aGVyZSBp
cyB0aGUgZW50cnkuZmV0Y2ggcHJvbWlzZSwgdGhlIGVudHJ5IGlzIGp1c3QgZmV0Y2hpbmcgdGhl
IHJlc291cmNlLgotICAgIC8vCi0gICAgLy8gMi4gSW5zdGFudGlhdGUgKEFuYWx5emVNb2R1bGUp
Ci0gICAgLy8gICAgIFJlYWR5IHRvIGluc3RhbnRpYXRlIChvciBub3cgaW5zdGFudGlhdGluZykg
dGhlIG1vZHVsZSByZWNvcmQgZnJvbSB0aGUgZmV0Y2hlZAotICAgIC8vICAgICBzb3VyY2UgY29k
ZS4KLSAgICAvLyAgICAgVHlwaWNhbGx5LCB3ZSBwYXJzZSB0aGUgbW9kdWxlIGNvZGUsIGV4dHJh
Y3QgdGhlIGRlcGVuZGVuY2llcyBhbmQgYmluZGluZyBpbmZvcm1hdGlvbi4KLSAgICAvLyAgICAg
YS4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0ZSBhbmQgdGhlcmUgaXMgbm8gZW50cnkuaW5z
dGFudGlhdGUgcHJvbWlzZSwgdGhlIGVudHJ5IGlzIHJlYWR5IHRvIGluc3RhbnRpYXRlLgotICAg
IC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIEluc3RhbnRpYXRlIGFuZCB0aGVyZSBpcyB0aGUg
ZW50cnkuZmV0Y2ggcHJvbWlzZSwgdGhlIGVudHJ5IGlzIGp1c3QgaW5zdGFudGlhdGluZwotICAg
IC8vICAgICAgICB0aGUgbW9kdWxlIHJlY29yZC4KLSAgICAvLwotICAgIC8vIDMuIFNhdGlzZnkK
LSAgICAvLyAgICAgUmVhZHkgdG8gcmVxdWVzdCB0aGUgZGVwZW5kZW50IG1vZHVsZXMgKG9yIG5v
dyByZXF1ZXN0aW5nICYgcmVzb2x2aW5nKS4KLSAgICAvLyAgICAgV2l0aG91dCB0aGlzIHN0YXRl
LCB0aGUgY3VycmVudCBkcmFmdCBjYXVzZXMgaW5maW5pdGUgcmVjdXJzaW9uIHdoZW4gdGhlcmUg
aXMgY2lyY3VsYXIgZGVwZW5kZW5jeS4KLSAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBT
YXRpc2Z5IGFuZCB0aGVyZSBpcyBubyBlbnRyeS5zYXRpc2Z5IHByb21pc2UsIHRoZSBlbnRyeSBp
cyByZWFkeSB0byByZXNvbHZlIHRoZSBkZXBlbmRlbmNpZXMuCi0gICAgLy8gICAgIGIuIElmIHRo
ZSBzdGF0dXMgaXMgU2F0aXNmeSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LnNhdGlzZnkgcHJvbWlz
ZSwgdGhlIGVudHJ5IGlzIGp1c3QgcmVzb2x2aW5nCi0gICAgLy8gICAgICAgIHRoZSBkZXBlbmRl
bmNpZXMuCi0gICAgLy8KLSAgICAvLyA0LiBMaW5rCi0gICAgLy8gICAgIFJlYWR5IHRvIGxpbmsg
dGhlIG1vZHVsZSB3aXRoIHRoZSBvdGhlciBtb2R1bGVzLgotICAgIC8vICAgICBMaW5raW5nIG1l
YW5zIHRoYXQgdGhlIG1vZHVsZSBpbXBvcnRzIGFuZCBleHBvcnRzIHRoZSBiaW5kaW5ncyBmcm9t
L3RvIHRoZSBvdGhlciBtb2R1bGVzLgotICAgIC8vCi0gICAgLy8gNS4gUmVhZHkKLSAgICAvLyAg
ICAgVGhlIG1vZHVsZSBpcyBsaW5rZWQsIHNvIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gYmUgZXhl
Y3V0ZWQuCi0gICAgLy8KLSAgICAvLyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGhhcyB0aGUgNCBwcm9t
aXNlczsgImZldGNoIiwgImluc3RhbnRpYXRlIiBhbmQgInNhdGlzZnkiLgotICAgIC8vIFRoZXkg
YXJlIGFzc2lnbmVkIHdoZW4gc3RhcnRpbmcgdGhlIGVhY2ggcGhhc2UuIEFuZCB0aGV5IGFyZSBm
dWxmaWxsZWQgd2hlbiB0aGUgZWFjaCBwaGFzZSBpcyBjb21wbGV0ZWQuCi0gICAgLy8KLSAgICAv
LyBJbiB0aGUgY3VycmVudCBtb2R1bGUgZHJhZnQsIGxpbmtpbmcgd2lsbCBiZSBwZXJmb3JtZWQg
YWZ0ZXIgdGhlIHdob2xlIG1vZHVsZXMgYXJlIGluc3RhbnRpYXRlZCBhbmQgdGhlIGRlcGVuZGVu
Y2llcyBhcmUgcmVzb2x2ZWQuCi0gICAgLy8gQW5kIGV4ZWN1dGlvbiBpcyBhbHNvIGRvbmUgYWZ0
ZXIgdGhlIGFsbCBtb2R1bGVzIGFyZSBsaW5rZWQuCi0gICAgLy8KLSAgICAvLyBUT0RPOiBXZSBu
ZWVkIHRvIGV4cGxvaXQgdGhlIHdheSB0byBleGVjdXRlIHRoZSBtb2R1bGUgd2hpbGUgZmV0Y2hp
bmcgbm9uLXJlbGF0ZWQgbW9kdWxlcy4KLSAgICAvLyBPbmUgc29sdXRpb247IGludHJvZHVjaW5n
IHRoZSByZWFkeSBwcm9taXNlIGNoYWluIHRvIGV4ZWN1dGUgdGhlIG1vZHVsZXMgY29uY3VycmVu
dGx5IHdoaWxlIGtlZXBpbmcKLSAgICAvLyB0aGUgZXhlY3V0aW9uIG9yZGVyLgotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAga2V5OiBrZXksCi0gICAgICAgIHN0
YXRlOiBATW9kdWxlRmV0Y2gsCi0gICAgICAgIGZldGNoOiBAdW5kZWZpbmVkLAotICAgICAgICBp
bnN0YW50aWF0ZTogQHVuZGVmaW5lZCwKLSAgICAgICAgc2F0aXNmeTogQHVuZGVmaW5lZCwKLSAg
ICAgICAgZGVwZW5kZW5jaWVzOiBbXSwgLy8gVG8ga2VlcCB0aGUgbW9kdWxlIG9yZGVyLCB3ZSBz
dG9yZSB0aGUgbW9kdWxlIGtleXMgaW4gdGhlIGFycmF5LgotICAgICAgICBtb2R1bGU6IEB1bmRl
ZmluZWQsIC8vIEpTTW9kdWxlUmVjb3JkCi0gICAgICAgIGxpbmtFcnJvcjogQHVuZGVmaW5lZCwK
LSAgICAgICAgbGlua1N1Y2NlZWRlZDogdHJ1ZSwKLSAgICAgICAgZXZhbHVhdGVkOiBmYWxzZSwK
LSAgICB9OwotfQotCi1mdW5jdGlvbiBlbnN1cmVSZWdpc3RlcmVkKGtleSkKLXsKLSAgICAvLyBo
dHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNlbnN1cmUtcmVnaXN0ZXJlZAotCi0gICAg
InVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0gdGhpcy5yZWdpc3RyeS5AZ2V0KGtleSk7
Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICByZXR1cm4gZW50cnk7Ci0KLSAgICBlbnRyeSA9IEBu
ZXdSZWdpc3RyeUVudHJ5KGtleSk7Ci0gICAgdGhpcy5yZWdpc3RyeS5Ac2V0KGtleSwgZW50cnkp
OwotCi0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1mdW5jdGlvbiBmb3JjZUZ1bGZpbGxQcm9taXNl
KHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChAZ2V0QnlJ
ZERpcmVjdFByaXZhdGUocHJvbWlzZSwgInByb21pc2VTdGF0ZSIpID09PSBAcHJvbWlzZVN0YXRl
UGVuZGluZykKLSAgICAgICAgQGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHZhbHVlKTsKLX0KLQot
ZnVuY3Rpb24gZnVsZmlsbEZldGNoKGVudHJ5LCBzb3VyY2UpCi17Ci0gICAgLy8gaHR0cHM6Ly93
aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZnVsZmlsbC1mZXRjaAotCi0gICAgInVzZSBzdHJpY3Qi
OwotCi0gICAgaWYgKCFlbnRyeS5mZXRjaCkKLSAgICAgICAgZW50cnkuZmV0Y2ggPSBAbmV3UHJv
bWlzZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSkuQHByb21pc2U7Ci0gICAgdGhpcy5mb3Jj
ZUZ1bGZpbGxQcm9taXNlKGVudHJ5LmZldGNoLCBzb3VyY2UpOwotICAgIEBzZXRTdGF0ZVRvTWF4
KGVudHJ5LCBATW9kdWxlSW5zdGFudGlhdGUpOwotfQotCi0vLyBMb2FkZXIuCi0KLWZ1bmN0aW9u
IHJlcXVlc3RGZXRjaChlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlcikKLXsKLSAgICAvLyBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNyZXF1ZXN0LWZldGNoCi0KLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBpZiAoZW50cnkuZmV0Y2gpIHsKLSAgICAgICAgdmFyIGN1cnJlbnRBdHRl
bXB0ID0gZW50cnkuZmV0Y2g7Ci0gICAgICAgIGlmIChlbnRyeS5zdGF0ZSAhPT0gQE1vZHVsZUZl
dGNoKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRBdHRlbXB0OwotCi0gICAgICAgIHJldHVy
biBjdXJyZW50QXR0ZW1wdC5jYXRjaCgoZXJyb3IpID0+IHsKLSAgICAgICAgICAgIC8vIEV2ZW4g
aWYgdGhlIGV4aXN0aW5nIGZldGNoaW5nIHJlcXVlc3QgZmFpbGVkLCB0aGlzIGF0dGVtcHQgbWF5
IHN1Y2NlZWQuCi0gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgcHJldmlvdXMgYXR0ZW1wdCB1
c2VkIGludmFsaWQgaW50ZWdyaXR5PSIiIHZhbHVlLiBCdXQgdGhpcwotICAgICAgICAgICAgLy8g
cmVxdWVzdCBjb3VsZCBoYXZlIHRoZSBjb3JyZWN0IGludGVncml0eT0iIiB2YWx1ZS4gSW4gdGhh
dCBjYXNlLCB3ZSBzaG91bGQKLSAgICAgICAgICAgIC8vIHJldHJ5IGZldGNoaW5nIGZvciB0aGlz
IHJlcXVlc3QuCi0gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNm
ZXRjaC1hLXNpbmdsZS1tb2R1bGUtc2NyaXB0Ci0gICAgICAgICAgICBpZiAoY3VycmVudEF0dGVt
cHQgPT09IGVudHJ5LmZldGNoKQotICAgICAgICAgICAgICAgIGVudHJ5LmZldGNoID0gQHVuZGVm
aW5lZDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RGZXRjaChlbnRyeSwgcGFyYW1l
dGVycywgZmV0Y2hlcik7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8vIEhvb2sgcG9pbnQu
Ci0gICAgLy8gMi4gTG9hZGVyLmZldGNoCi0gICAgLy8gICAgIGh0dHBzOi8vd2hhdHdnLmdpdGh1
Yi5pby9sb2FkZXIvI2Jyb3dzZXItZmV0Y2gKLSAgICAvLyAgICAgVGFrZSB0aGUga2V5IGFuZCBm
ZXRjaCB0aGUgcmVzb3VyY2UgYWN0dWFsbHkuCi0gICAgLy8gICAgIEZvciBleGFtcGxlLCBKYXZh
U2NyaXB0Q29yZSBzaGVsbCBjYW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0aGUgcmVzb3Vy
Y2UKLSAgICAvLyAgICAgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCi0gICAgdmFyIGZldGNo
UHJvbWlzZSA9IHRoaXMuZmV0Y2goZW50cnkua2V5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVu
KChzb3VyY2UpID0+IHsKLSAgICAgICAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0
YW50aWF0ZSk7Ci0gICAgICAgIHJldHVybiBzb3VyY2U7Ci0gICAgfSk7Ci0gICAgZW50cnkuZmV0
Y2ggPSBmZXRjaFByb21pc2U7Ci0gICAgcmV0dXJuIGZldGNoUHJvbWlzZTsKLX0KLQotZnVuY3Rp
b24gcmVxdWVzdEluc3RhbnRpYXRlKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKQotewotICAg
IC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtaW5zdGFudGlhdGUK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vIGVudHJ5Lmluc3RhbnRpYXRlIGlzIHNldCBp
ZiBmZXRjaCBzdWNjZWVkcy4KLSAgICBpZiAoZW50cnkuaW5zdGFudGlhdGUpCi0gICAgICAgIHJl
dHVybiBlbnRyeS5pbnN0YW50aWF0ZTsKLQotICAgIHZhciBpbnN0YW50aWF0ZVByb21pc2UgPSB0
aGlzLnJlcXVlc3RGZXRjaChlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoc291cmNl
KSA9PiB7Ci0gICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWEt
c2luZ2xlLW1vZHVsZS1zY3JpcHQKLSAgICAgICAgLy8gTm93IGZldGNoaW5nIHJlcXVlc3Qgc3Vj
Y2VlZHMuIFRoZW4gZXZlbiBpZiBpbnN0YW50aWF0aW9uIGZhaWxzLCB3ZSBzaG91bGQgY2FjaGUg
aXQuCi0gICAgICAgIC8vIEluc3RhbnRpYXRpb24gd29uJ3QgYmUgcmV0cmllZC4KLSAgICAgICAg
aWYgKGVudHJ5Lmluc3RhbnRpYXRlKQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5Lmluc3RhbnRp
YXRlOwotICAgICAgICBlbnRyeS5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlUHJvbWlzZTsKLQot
ICAgICAgICB2YXIga2V5ID0gZW50cnkua2V5OwotICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU1v
ZHVsZShrZXksIHNvdXJjZSkudGhlbigobW9kdWxlUmVjb3JkKSA9PiB7Ci0gICAgICAgICAgICB2
YXIgZGVwZW5kZW5jaWVzTWFwID0gbW9kdWxlUmVjb3JkLmRlcGVuZGVuY2llc01hcDsKLSAgICAg
ICAgICAgIHZhciByZXF1ZXN0ZWRNb2R1bGVzID0gdGhpcy5yZXF1ZXN0ZWRNb2R1bGVzKG1vZHVs
ZVJlY29yZCk7Ci0gICAgICAgICAgICB2YXIgZGVwZW5kZW5jaWVzID0gQG5ld0FycmF5V2l0aFNp
emUocmVxdWVzdGVkTW9kdWxlcy5sZW5ndGgpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGxlbmd0aCA9IHJlcXVlc3RlZE1vZHVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZGVwTmFtZSA9IHJlcXVlc3RlZE1vZHVsZXNbaV07Ci0gICAgICAg
ICAgICAgICAgdmFyIGRlcEtleSA9IHRoaXMucmVzb2x2ZVN5bmMoZGVwTmFtZSwga2V5LCBmZXRj
aGVyKTsKLSAgICAgICAgICAgICAgICB2YXIgZGVwRW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVy
ZWQoZGVwS2V5KTsKLSAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QoZGVwZW5kZW5jaWVz
LCBpLCBkZXBFbnRyeSk7Ci0gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzTWFwLkBzZXQoZGVw
TmFtZSwgZGVwRW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZW50cnkuZGVwZW5k
ZW5jaWVzID0gZGVwZW5kZW5jaWVzOwotICAgICAgICAgICAgZW50cnkubW9kdWxlID0gbW9kdWxl
UmVjb3JkOwotICAgICAgICAgICAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVTYXRpc2Z5
KTsKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIGluc3RhbnRpYXRlUHJvbWlzZTsKLX0KLQotZnVuY3Rpb24gcmVxdWVzdFNhdGlzZnko
ZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIsIHZpc2l0ZWQpCi17Ci0gICAgLy8gaHR0cHM6Ly9o
dG1sLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJuYWwtbW9kdWxlLXNjcmlwdC1ncmFwaC1mZXRjaGlu
Zy1wcm9jZWR1cmUKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChlbnRyeS5zYXRpc2Z5
KQotICAgICAgICByZXR1cm4gZW50cnkuc2F0aXNmeTsKLQotICAgIHZpc2l0ZWQuQGFkZChlbnRy
eSk7Ci0gICAgdmFyIHNhdGlzZnlQcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFudGlhdGUoZW50
cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpLnRoZW4oKGVudHJ5KSA9PiB7Ci0gICAgICAgIGlmIChl
bnRyeS5zYXRpc2Z5KQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnNhdGlzZnk7Ci0KLSAgICAg
ICAgdmFyIGRlcExvYWRzID0gQG5ld0FycmF5V2l0aFNpemUoZW50cnkuZGVwZW5kZW5jaWVzLmxl
bmd0aCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbnRyeS5kZXBlbmRlbmNp
ZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkZXBFbnRyeSA9
IGVudHJ5LmRlcGVuZGVuY2llc1tpXTsKLSAgICAgICAgICAgIHZhciBwcm9taXNlOwotCi0gICAg
ICAgICAgICAvLyBSZWN1cnNpdmUgcmVzb2x2aW5nLiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMg
ZW50cnkgaXMgYmVpbmcgcmVzb2x2ZWQgb3IgYWxyZWFkeSByZXNvbHZlZC4KLSAgICAgICAgICAg
IC8vIFN0b3AgdHJhY2luZyB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAg
Ly8gQnV0IHRvIHJldHJpZXZlIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlIHJlY29yZCBjb3JyZWN0
bHksCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBpbnN0YW50aWF0aW9u
IGZvciB0aGUgZGVwZW5kZW50IG1vZHVsZS4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBy
ZWFjaGluZyBoZXJlLCB0aGUgbW9kdWxlIGlzIHN0YXJ0aW5nIHJlc29sdmluZyB0aGUgZGVwZW5k
ZW5jaWVzLgotICAgICAgICAgICAgLy8gQnV0IHRoZSBtb2R1bGUgbWF5IG9yIG1heSBub3QgcmVh
Y2ggdGhlIGluc3RhbnRpYXRpb24gcGhhc2UgaW4gdGhlIGxvYWRlcidzIHBpcGVsaW5lLgotICAg
ICAgICAgICAgLy8gSWYgd2Ugd2FpdCBmb3IgdGhlIFNhdGlzZnkgZm9yIHRoaXMgbW9kdWxlLCBp
dCBjb25zdHJ1Y3QgdGhlIGNpcmN1bGFyIHByb21pc2UgY2hhaW4gYW5kCi0gICAgICAgICAgICAv
LyByZWplY3RlZCBieSB0aGUgUHJvbWlzZXMgcnVudGltZS4gU2luY2Ugb25seSB3ZSBuZWVkIGlz
IHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlLCBpbnN0ZWFkIG9mIHdhaXRpbmcKLSAgICAgICAgICAg
IC8vIHRoZSBTYXRpc2Z5IGZvciB0aGlzIG1vZHVsZSwgd2UganVzdCB3YWl0IEluc3RhbnRpYXRl
IGZvciB0aGlzLgotICAgICAgICAgICAgaWYgKHZpc2l0ZWQuQGhhcyhkZXBFbnRyeSkpCi0gICAg
ICAgICAgICAgICAgcHJvbWlzZSA9IHRoaXMucmVxdWVzdEluc3RhbnRpYXRlKGRlcEVudHJ5LCBA
dW5kZWZpbmVkLCBmZXRjaGVyKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIEN1cnJlbnRseSwgbW9kdWxlIGxvYWRlciBkbyBub3QgcGFzcyBhbnkgaW5mb3JtYXRpb24g
Zm9yIG5vbi10b3AtbGV2ZWwgbW9kdWxlIGZldGNoaW5nLgotICAgICAgICAgICAgICAgIHByb21p
c2UgPSB0aGlzLnJlcXVlc3RTYXRpc2Z5KGRlcEVudHJ5LCBAdW5kZWZpbmVkLCBmZXRjaGVyLCB2
aXNpdGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChkZXBM
b2FkcywgaSwgcHJvbWlzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQEludGVybmFs
UHJvbWlzZS5pbnRlcm5hbEFsbChkZXBMb2FkcykudGhlbigoZW50cmllcykgPT4gewotICAgICAg
ICAgICAgaWYgKGVudHJ5LnNhdGlzZnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Owot
ICAgICAgICAgICAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVMaW5rKTsKLSAgICAgICAg
ICAgIGVudHJ5LnNhdGlzZnkgPSBzYXRpc2Z5UHJvbWlzZTsKLSAgICAgICAgICAgIHJldHVybiBl
bnRyeTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc2F0aXNmeVByb21pc2U7
Ci19Ci0KLS8vIExpbmtpbmcgc2VtYW50aWNzLgotCi1mdW5jdGlvbiBsaW5rKGVudHJ5LCBmZXRj
aGVyKQotewotICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLXRoZS1k
ZXNjZW5kYW50cy1vZi1hbmQtaW5zdGFudGlhdGUtYS1tb2R1bGUtc2NyaXB0Ci0KLSAgICAidXNl
IHN0cmljdCI7Ci0KLSAgICBpZiAoIWVudHJ5LmxpbmtTdWNjZWVkZWQpCi0gICAgICAgIHRocm93
IGVudHJ5LmxpbmtFcnJvcjsKLSAgICBpZiAoZW50cnkuc3RhdGUgPT09IEBNb2R1bGVSZWFkeSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlUmVhZHkp
OwotCi0gICAgdHJ5IHsKLSAgICAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSAiZGVw
ZW5kZW5jaWVzIiBmaWVsZCwKLSAgICAgICAgLy8gd2UgY2FuIGNhbGwgbW9kdWxlRGVjbGFyYXRp
b25JbnN0YW50aWF0aW9uIHdpdGggdGhlIGNvcnJlY3Qgb3JkZXIKLSAgICAgICAgLy8gd2l0aG91
dCBjb25zdHJ1Y3RpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYnkgY2FsbGluZyBkZXBlbmRlbmN5
R3JhcGguCi0gICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSBlbnRyeS5kZXBlbmRlbmNpZXM7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLmxpbmsoZGVwZW5kZW5jaWVzW2ldLCBmZXRj
aGVyKTsKLQotICAgICAgICB0aGlzLm1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihlbnRy
eS5tb2R1bGUsIGZldGNoZXIpOwotICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgIGVudHJ5
LmxpbmtTdWNjZWVkZWQgPSBmYWxzZTsKLSAgICAgICAgZW50cnkubGlua0Vycm9yID0gZXJyb3I7
Ci0gICAgICAgIHRocm93IGVycm9yOwotICAgIH0KLX0KLQotLy8gTW9kdWxlIHNlbWFudGljcy4K
LQotZnVuY3Rpb24gbW9kdWxlRXZhbHVhdGlvbihlbnRyeSwgZmV0Y2hlcikKLXsKLSAgICAvLyBo
dHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxl
ZXZhbHVhdGlvbgotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKGVudHJ5LmV2YWx1YXRl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGVudHJ5LmV2YWx1YXRlZCA9IHRydWU7Ci0KLSAgICAv
LyBUaGUgY29udGVudHMgb2YgdGhlIFtbUmVxdWVzdGVkTW9kdWxlc11dIGlzIGNsb25lZCBpbnRv
IGVudHJ5LmRlcGVuZGVuY2llcy4KLSAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50cnkuZGVwZW5k
ZW5jaWVzOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3Ro
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHRoaXMubW9kdWxlRXZhbHVhdGlvbihkZXBlbmRl
bmNpZXNbaV0sIGZldGNoZXIpOwotCi0gICAgdGhpcy5ldmFsdWF0ZShlbnRyeS5rZXksIGVudHJ5
Lm1vZHVsZSwgZmV0Y2hlcik7Ci19Ci0KLS8vIEFQSXMgdG8gY29udHJvbCB0aGUgbW9kdWxlIGxv
YWRlci4KLQotZnVuY3Rpb24gcHJvdmlkZUZldGNoKGtleSwgdmFsdWUpCi17Ci0gICAgInVzZSBz
dHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7Ci0K
LSAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlRmV0Y2gpCi0gICAgICAgIEB0aHJvd1R5cGVF
cnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IGZldGNoZWQuIik7Ci0gICAgdGhpcy5m
dWxmaWxsRmV0Y2goZW50cnksIHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gbG9hZE1vZHVsZShtb2R1
bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRjaGVyKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IC8vIExvYWRlci5yZXNvbHZlIGhvb2sgcG9pbnQuCi0gICAgLy8gcmVzb2x2ZTogbW9kdWxlTmFt
ZSA9PiBQcm9taXNlKG1vZHVsZUtleSkKLSAgICAvLyBUYWtlIHRoZSBuYW1lIGFuZCByZXNvbHZl
IGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlIGxvY2F0aW9uLgot
ICAgIC8vIEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJuIHRoZSBVUkwg
Zm9yIHRoZSByZXNvdXJjZS4KLSAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVsZU5hbWUsIEB1
bmRlZmluZWQsIGZldGNoZXIpLnRoZW4oKGtleSkgPT4gewotICAgICAgICByZXR1cm4gdGhpcy5y
ZXF1ZXN0U2F0aXNmeSh0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KSwgcGFyYW1ldGVycywgZmV0
Y2hlciwgbmV3IEBTZXQpOwotICAgIH0pLnRoZW4oKGVudHJ5KSA9PiB7Ci0gICAgICAgIHJldHVy
biBlbnRyeS5rZXk7Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZShrZXksIGZldGNoZXIpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0g
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7Ci0gICAgaWYgKGVudHJ5LnN0YXRlIDwgQE1vZHVs
ZUxpbmspCi0gICAgICAgIEB0aHJvd1R5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBub3Qg
aW5zdGFudGlhdGVkIHlldC4iKTsKLQotICAgIHRoaXMubGluayhlbnRyeSwgZmV0Y2hlcik7Ci0g
ICAgcmV0dXJuIHRoaXMubW9kdWxlRXZhbHVhdGlvbihlbnRyeSwgZmV0Y2hlcik7Ci19Ci0KLWZ1
bmN0aW9uIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRj
aGVyKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB0aGlzLmxvYWRNb2R1bGUo
bW9kdWxlTmFtZSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoa2V5KSA9PiB7Ci0gICAgICAg
IHJldHVybiB0aGlzLmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShrZXksIGZldGNoZXIpOwotICAgIH0p
OwotfQotCi1mdW5jdGlvbiByZXF1ZXN0SW1wb3J0TW9kdWxlKGtleSwgcGFyYW1ldGVycywgZmV0
Y2hlcikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gdGhpcy5yZXF1ZXN0U2F0
aXNmeSh0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KSwgcGFyYW1ldGVycywgZmV0Y2hlciwgbmV3
IEBTZXQpLnRoZW4oKGVudHJ5KSA9PiB7Ci0gICAgICAgIHRoaXMubGlua0FuZEV2YWx1YXRlTW9k
dWxlKGVudHJ5LmtleSwgZmV0Y2hlcik7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZU5h
bWVzcGFjZU9iamVjdChlbnRyeS5tb2R1bGUpOwotICAgIH0pOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGE0ODMxNzczZTk4
MTQ1ZTVhYjg2Y2EzYmM2NzJmMjJjOGFmNWVjY2IuLmQ0Njc0YzAxOWQ4NjQ4MDRmNGM2NjY4NWRh
OWRmOTY1ZmQxZWQ5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKQEAgLTEzMSw3ICsxMzEsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hdGhPYmplY3QuaCIKICNpbmNsdWRlICJNaWNyb3Rh
c2suaCIKLSNpbmNsdWRlICJNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJOYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJOdWxsR2V0dGVyRnVuY3Rpb24uaCIKQEAgLTY1MCw4ICs2NDksNiBAQCBtXyAj
IyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlVHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aAogICAgIAogI3VuZGVmIENSRUFURV9QUk9UT1RZUEVfRk9SX0xB
WllfVFlQRQogICAgIAotICAgIG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLnNldCh2bSwgdGhpcywg
TW9kdWxlTG9hZGVyUHJvdG90eXBlOjpjcmVhdGUodm0sIHRoaXMsIE1vZHVsZUxvYWRlclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKLSAgICAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAogICAgIE9iamVjdENvbnN0cnVjdG9yKiBv
YmplY3RDb25zdHJ1Y3RvciA9IE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIE9i
amVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CkBAIC03NzksOCArNzc2LDcg
QEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05h
bWUsIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3QKICAgICBSZWZsZWN0T2JqZWN0KiByZWZsZWN0T2Jq
ZWN0ID0gUmVmbGVjdE9iamVjdDo6Y3JlYXRlKHZtLCB0aGlzLCBSZWZsZWN0T2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlJlZmxlY3QsIHJl
ZmxlY3RPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKIAotICAgIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNN
b2R1bGVMb2FkZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJQcm90
b3R5cGUuZ2V0KCkpKTsKLSAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpTTW9kdWxl
TG9hZGVyOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJTdHJ1
Y3R1cmUuZ2V0KCkpKTsKKyAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpTTW9kdWxl
TG9hZGVyOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB2bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKSk7CiAgICAgaWYgKE9wdGlvbnM6OmV4
cG9zZUludGVybmFsTW9kdWxlTG9hZGVyKCkpCiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5Mb2FkZXIsIG1fbW9kdWxlTG9hZGVyLmdldCgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAK
QEAgLTEzNzQsNyArMTM3MCw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2FzeW5jSXRlcmF0b3JQcm90b3R5cGUpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fYXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVMb2FkZXJQcm90b3R5cGUpOwogCiAg
ICAgdGhpc09iamVjdC0+bV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwog
ICAgIHRoaXNPYmplY3QtPm1fd2l0aFNjb3BlU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwpAQCAt
MTQyNSw3ICsxNDIwLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJveHlPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9wcm94eVJldm9rZVN0cnVjdHVyZSk7Ci0gICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmUpOwogICAgIAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJQcm90b3R5cGUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggNTcwZTRiODk2
MjI0YWY3OTRhMjgzY2NiODM0M2ZkNTFhYzRiOGE2Yy4uZGIzZjgzZjUwMTEwZmJhYzJkYzBiZmIw
NjhmODhiNTIyYjA3N2UxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIERpcmVjdEV2YWxFeGVjdXRh
YmxlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFwUHJvdG90eXBlOwog
Y2xhc3MgTWljcm90YXNrOwotY2xhc3MgTW9kdWxlTG9hZGVyUHJvdG90eXBlOworY2xhc3MgTW9k
dWxlTG9hZGVyOwogY2xhc3MgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU7CiBjbGFzcyBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOwogY2xhc3MgTnVsbEdldHRlckZ1bmN0aW9uOwpAQCAtMzAyLDcgKzMw
Miw2IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QgewogICAgIFdyaXRlQmFycmllcjxHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZT4gbV9n
ZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8R2VuZXJhdG9yUHJv
dG90eXBlPiBtX2dlbmVyYXRvclByb3RvdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8QXN5bmNHZW5l
cmF0b3JQcm90b3R5cGU+IG1fYXN5bmNHZW5lcmF0b3JQcm90b3R5cGU7Ci0gICAgV3JpdGVCYXJy
aWVyPE1vZHVsZUxvYWRlclByb3RvdHlwZT4gbV9tb2R1bGVMb2FkZXJQcm90b3R5cGU7CiAKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kZWJ1Z2dlclNjb3Bl
U3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBt
X3dpdGhTY29wZVN0cnVjdHVyZTsKQEAgLTM1OCw3ICszNTcsNiBAQCBjbGFzcyBKU0dsb2JhbE9i
amVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3Byb3h5T2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOwogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFNIQVJF
RF9BUlJBWV9CVUZGRVIpCkBAIC02NzcsNyArNjc1LDYgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Qg
OiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgU3RydWN0dXJlKiBwcm94
eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGNhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAg
ICBTdHJ1Y3R1cmUqIHByb3h5UmV2b2tlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9wcm94
eVJldm9rZVN0cnVjdHVyZS5nZXQoKTsgfQotICAgIFN0cnVjdHVyZSogbW9kdWxlTG9hZGVyU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICBTdHJ1Y3R1cmUqIHJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBh
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29u
dGlndW91cyk7IH0KICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgU3RydWN0dXJlKiB3ZWJB
c3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAppbmRleCA5MDg1OTFkOTI4MGM4ZGY4ZDMz
ZjY1Y2YzMzk3OGIzMjc4YzAwZjA1Li42NTk4ZDU0NDM2MWMzMjVjZDJlMzM1OGI4ZjAzOGFlOWYy
ODY4YmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuY3BwCkBAIC0zOCwyMCArMzgsNjIgQEAKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmly
b25tZW50LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKICNpbmNsdWRl
ICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgogI2luY2x1ZGUg
Ik1vZHVsZUFuYWx5emVyLmgiCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlQcm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUmVxdWVzdGVk
TW9kdWxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlckV2YWx1YXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9u
KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxl
TG9hZGVyUmVzb2x2ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1vZHVsZUxvYWRlclJlc29sdmVTeW5jKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyRmV0Y2goRXhlY1N0YXRlKik7Citz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJHZXRNb2R1bGVO
YW1lc3BhY2VPYmplY3QoRXhlY1N0YXRlKik7CisKK30KKworI2luY2x1ZGUgIkpTTW9kdWxlTG9h
ZGVyLmx1dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19UUklWSUFM
TFlfREVTVFJVQ1RJQkxFKEpTTW9kdWxlTG9hZGVyKTsKIAotY29uc3QgQ2xhc3NJbmZvIEpTTW9k
dWxlTG9hZGVyOjpzX2luZm8gPSB7ICJNb2R1bGVMb2FkZXIiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTW9kdWxlTG9hZGVyKSB9OworY29u
c3QgQ2xhc3NJbmZvIEpTTW9kdWxlTG9hZGVyOjpzX2luZm8gPSB7ICJNb2R1bGVMb2FkZXIiLCAm
QmFzZTo6c19pbmZvLCAmbW9kdWxlTG9hZGVyVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNNb2R1bGVMb2FkZXIpIH07CisKKy8qIFNvdXJjZSBmb3IgSlNNb2R1bGVMb2FkZXIu
bHV0LmgKK0BiZWdpbiBtb2R1bGVMb2FkZXJUYWJsZQorICAgIGVuc3VyZVJlZ2lzdGVyZWQgICAg
ICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMQorICAgIGZvcmNlRnVsZmlsbFByb21pc2UgICAgICAgICAgICBKU0J1
aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgorICAgIGZ1bGZpbGxGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIHJlcXVlc3RG
ZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIHJlcXVlc3RJbnN0YW50aWF0ZSAgICAg
ICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMworICAgIHJlcXVlc3RTYXRpc2Z5ICAgICAgICAgICAgICAgICBKU0J1aWx0
aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMwor
ICAgIGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIG1vZHVsZURlY2xh
cmF0aW9uSW5zdGFudGlhdGlvbiBtb2R1bGVMb2FkZXJNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRp
YXRpb24gRG9udEVudW18RnVuY3Rpb24gMgorICAgIG1vZHVsZUV2YWx1YXRpb24gICAgICAgICAg
ICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMgorICAgIGV2YWx1YXRlICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2Fk
ZXJFdmFsdWF0ZSAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAg
IHByb3ZpZGVGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIGxvYWRNb2R1bGUgICAgICAgICAgICAgICAgICAg
ICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMworICAgIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIHJl
cXVlc3RJbXBvcnRNb2R1bGUgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIGdldE1vZHVsZU5hbWVzcGFj
ZU9iamVjdCAgICAgICBtb2R1bGVMb2FkZXJHZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMQorICAgIHBhcnNlTW9kdWxlICAgICAgICAgICAgICAgICAgICBt
b2R1bGVMb2FkZXJQYXJzZU1vZHVsZSAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMgorICAgIHJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJSZXF1
ZXN0ZWRNb2R1bGVzICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIHJlc29s
dmUgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJSZXNvbHZlICAgICAgICAgICAg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIHJlc29sdmVTeW5jICAgICAgICAg
ICAgICAgICAgICBtb2R1bGVMb2FkZXJSZXNvbHZlU3luYyAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMgorICAgIGZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1
bGVMb2FkZXJGZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MworQGVuZAorKi8KIAogSlNNb2R1bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
CkBAIC0yOTUsNCArMzM3LDE2MyBAQCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogSlNNb2R1bGVM
b2FkZXI6OmdldE1vZHVsZU5hbWVzcGFjZU9iamVjdChFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVy
biBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKIH0KIAorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclBh
cnNlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgc2NvcGUucmVs
ZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICBhdXRvIHJlamVjdCA9IFsmXSB7CisgICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlamVj
dChleGVjLCBleGNlcHRpb24pOworICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH07CisK
KyAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJv
cGVydHlLZXkoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgcmV0dXJuIHJlamVjdCgpOworCisgICAgSlNWYWx1ZSBzb3VyY2UgPSBleGVjLT5hcmd1
bWVudCgxKTsKKyAgICBhdXRvKiBqc1NvdXJjZUNvZGUgPSBqc0Nhc3Q8SlNTb3VyY2VDb2RlKj4o
c291cmNlKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBqc1NvdXJjZUNvZGUtPnNvdXJj
ZUNvZGUoKTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoc291cmNlQ29kZS5w
cm92aWRlcigpLT5zb3VyY2VUeXBlKCkgPT0gU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJB
c3NlbWJseSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseVByb3Rv
dHlwZTo6aW5zdGFudGlhdGUoZXhlYywgZGVmZXJyZWQsIG1vZHVsZUtleSwganNTb3VyY2VDb2Rl
KSk7CisjZW5kaWYKKworICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKKwor
ICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFt
Tm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCisgICAg
ICAgICZ2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpO
b3RCdWlsdGluLAorICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgSlNQYXJzZXJT
Y3JpcHRNb2RlOjpNb2R1bGUsIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CisgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXJyb3IudG9F
cnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZUNvZGUpKTsKKyAg
ICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgQVNTRVJUKG1vZHVsZVByb2dyYW1O
b2RlKTsKKworICAgIE1vZHVsZUFuYWx5emVyIG1vZHVsZUFuYWx5emVyKGV4ZWMsIG1vZHVsZUtl
eSwgc291cmNlQ29kZSwgbW9kdWxlUHJvZ3JhbU5vZGUtPnZhckRlY2xhcmF0aW9ucygpLCBtb2R1
bGVQcm9ncmFtTm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gcmVqZWN0KCk7CisKKyAgICBhdXRvIHJl
c3VsdCA9IGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIG1vZHVsZUFuYWx5emVyLmFuYWx5emUoKm1v
ZHVsZVByb2dyYW1Ob2RlKSk7CisgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nh
c3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlm
ICghbW9kdWxlUmVjb3JkKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsK
KyAgICB9CisKKyAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpLnNpemUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2l6ZV90
IGkgPSAwOworICAgIGZvciAoYXV0byYga2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1
bGVzKCkpIHsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpKyssIGpzU3Ry
aW5nKGV4ZWMsIGtleS5nZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck1v
ZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxBYnN0cmFjdE1vZHVs
ZVJlY29yZCo+KHZtLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFtb2R1bGVSZWNvcmQp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBp
ZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQorICAgICAgICBkYXRhTG9nKCJM
b2FkZXIgW2xpbmtdICIsIG1vZHVsZVJlY29yZC0+bW9kdWxlS2V5KCksICJcbiIpOworCisgICAg
bW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBIb29rIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIC8vIEhvb2sgcG9pbnQs
IExvYWRlci5yZXNvbHZlLgorICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2Jyb3dzZXItcmVzb2x2ZQorICAgIC8vIFRha2UgdGhlIG5hbWUgYW5kIHJlc29sdmUgaXQgdG8g
dGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2UgbG9jYXRpb24uCisgICAgLy8g
Rm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFuZCByZXR1cm4gdGhlIFVSTCBmb3IgdGhl
IHJlc291cmNlLgorICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpT
TW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxvYWRlcikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7Cit9CisKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUmVzb2x2ZVN5bmMoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHlu
YW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghbG9hZGVyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIGF1dG8gcmVzdWx0ID0gbG9hZGVyLT5yZXNvbHZlU3luYyhleGVjLCBleGVjLT5hcmd1
bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIHJlc3VsdCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckZldGNoKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIC8vIEhvb2sgcG9pbnQsIExvYWRl
ci5mZXRjaAorICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXIt
ZmV0Y2gKKyAgICAvLyBUYWtlIHRoZSBrZXkgYW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1YWxs
eS4KKyAgICAvLyBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3ZpZGUg
dGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCisgICAgLy8gZnJvbSB0aGUgbG9jYWwgZmls
ZSBzeXN0ZW0uCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNN
b2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbG9hZGVyKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5mZXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSwg
ZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIpKSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyR2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGxvYWRlciA9IGpzRHlu
YW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghbG9hZGVyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIGF1dG8qIG1vZHVsZU5hbWVzcGFjZU9iamVjdCA9IGxvYWRlci0+Z2V0TW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0g
QWRkaXRpb25hbCBIb29rIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJFdmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgLy8gVG8gaW5zdHJ1bWVudCBhbmQgcmV0cmlldmUgdGhlIGVycm9y
cyByYWlzZWQgZnJvbSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiwKKyAgICAvLyB3ZSBpbnNlcnRlZCB0
aGUgaG9vayBwb2ludCBoZXJlLgorCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU01v
ZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBl
eGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShs
b2FkZXItPmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgx
KSwgZXhlYy0+YXJndW1lbnQoMikpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAppbmRleCA5N2ZlZDgz
MTJiZjZjMDg5ODZlYjYyZDY4YTVjZmJjMGE3NGRkMTQ2Li40ZGNkNTIyYWZlYTI0YmI2Yzg2MjYz
Y2M0Nzk2YWVjYTdhY2M1NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUxvYWRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTG9hZGVyLmgKQEAgLTM4LDcgKzM4LDggQEAgY2xhc3MgSlNNb2R1bGVMb2FkZXIg
ZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwcml2YXRlOgogICAgIEpTTW9kdWxl
TG9hZGVyKFZNJiwgU3RydWN0dXJlKik7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCiAgICAgZW51bSBTdGF0dXMgewogICAgICAgICBG
ZXRjaCA9IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVMb2FkZXJQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhi
ZGM5ZjUxY2ZkNmEyNzI0NmJiZTZiZjdiODdjNzNiMzg5Zjk3MC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCIKLQot
I2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKLSNpbmNs
dWRlICJDb2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgotI2luY2x1ZGUg
IkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNsdWRlICJKU01hcC5oIgotI2luY2x1
ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU01vZHVsZUxvYWRlci5oIgot
I2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNNb2R1bGVS
ZWNvcmQuaCIKLSNpbmNsdWRlICJKU1NvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJNb2R1bGVBbmFs
eXplci5oIgotI2luY2x1ZGUgIk5vZGVzLmgiCi0jaW5jbHVkZSAiUGFyc2VyLmgiCi0jaW5jbHVk
ZSAiUGFyc2VyRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1
bGVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlv
bkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2
ZVN5bmMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJQcm90b3R5cGVGZXRjaChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUdldE1vZHVsZU5hbWVzcGFj
ZU9iamVjdChFeGVjU3RhdGUqKTsKLQotfQotCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmx1dC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotU1RBVElDX0FTU0VSVF9JU19UUklWSUFM
TFlfREVTVFJVQ1RJQkxFKE1vZHVsZUxvYWRlclByb3RvdHlwZSk7Ci0KLWNvbnN0IENsYXNzSW5m
byBNb2R1bGVMb2FkZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk1vZHVsZUxvYWRlciIsICZCYXNl
OjpzX2luZm8sICZtb2R1bGVMb2FkZXJQcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShNb2R1bGVMb2FkZXJQcm90b3R5cGUpIH07Ci0KLS8qIFNvdXJjZSBmb3IgTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oCi1AYmVnaW4gbW9kdWxlTG9hZGVyUHJvdG90eXBlVGFi
bGUKLSAgICBlbnN1cmVSZWdpc3RlcmVkICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAg
ICBmb3JjZUZ1bGZpbGxQcm9taXNlICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBmdWxm
aWxsRmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICByZXF1ZXN0RmV0
Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICByZXF1ZXN0SW5zdGFudGlh
dGUgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICByZXF1ZXN0U2F0aXNmeSAgICAgICAg
ICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICBsaW5rICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBtb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gbW9k
dWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIERvbnRFbnVt
fEZ1bmN0aW9uIDIKLSAgICBtb2R1bGVFdmFsdWF0aW9uICAgICAgICAgICAgICAgSlNCdWlsdGlu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDIKLSAgICBldmFsdWF0ZSAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJv
dG90eXBlRXZhbHVhdGUgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMK
LSAgICBwcm92aWRlRmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBs
b2FkQW5kRXZhbHVhdGVNb2R1bGUgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICBsb2FkTW9k
dWxlICAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICBsaW5rQW5kRXZhbHVh
dGVNb2R1bGUgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICByZXF1ZXN0SW1wb3J0TW9kdWxl
ICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLSAgICBnZXRNb2R1bGVOYW1lc3BhY2VPYmplY3Qg
ICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlR2V0TW9kdWxlTmFtZXNwYWNlT2JqZWN0ICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICBwYXJzZU1vZHVsZSAgICAgICAgICAgICAgICAgICAg
bW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUgICAgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDIKLSAgICByZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAgICAgbW9kdWxl
TG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDEKLSAgICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVy
UHJvdG90eXBlUmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDIKLSAgICByZXNvbHZlU3luYyAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90
eXBlUmVzb2x2ZVN5bmMgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAg
ICBmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlRmV0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKLUBlbmQKLSov
Ci0KLU1vZHVsZUxvYWRlclByb3RvdHlwZTo6TW9kdWxlTG9hZGVyUHJvdG90eXBlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwotICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwot
Ci0gICAgYXV0byByZWplY3QgPSBbJl0gewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNj
b3BlLmV4Y2VwdGlvbigpOwotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAg
ICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9OwotCi0gICAgY29uc3QgSWRlbnRpZmllciBtb2R1
bGVLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiByZWplY3QoKTsKLQot
ICAgIEpTVmFsdWUgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgYXV0byoganNTb3Vy
Y2VDb2RlID0ganNDYXN0PEpTU291cmNlQ29kZSo+KHNvdXJjZSk7Ci0gICAgU291cmNlQ29kZSBz
b3VyY2VDb2RlID0ganNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCk7Ci0KLSNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0gICAgaWYgKHNvdXJjZUNvZGUucHJvdmlkZXIoKS0+c291cmNlVHlwZSgpID09
IFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6V2ViQXNzZW1ibHkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlQcm90b3R5cGU6Omluc3RhbnRpYXRlKGV4ZWMsIGRl
ZmVycmVkLCBtb2R1bGVLZXksIGpzU291cmNlQ29kZSkpOwotI2VuZGlmCi0KLSAgICBDb2RlUHJv
ZmlsaW5nIHByb2ZpbGUoc291cmNlQ29kZSk7Ci0KLSAgICBQYXJzZXJFcnJvciBlcnJvcjsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0g
cGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAotICAgICAgICAmdm0sIHNvdXJjZUNvZGUsIElkZW50
aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKLSAgICAgICAgSlNQYXJz
ZXJTdHJpY3RNb2RlOjpTdHJpY3QsIEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlLCBTb3VyY2VQ
YXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJy
b3IpOwotICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBk
ZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBzb3VyY2VDb2RlKSk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0g
ICAgfQotICAgIEFTU0VSVChtb2R1bGVQcm9ncmFtTm9kZSk7Ci0KLSAgICBNb2R1bGVBbmFseXpl
ciBtb2R1bGVBbmFseXplcihleGVjLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dy
YW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJp
YWJsZXMoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIHJlamVjdCgpOwotCi0gICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShl
eGVjLCBtb2R1bGVBbmFseXplci5hbmFseXplKCptb2R1bGVQcm9ncmFtTm9kZSkpOwotICAgIHNj
b3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2Fk
ZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEFic3RyYWN0TW9kdWxl
UmVjb3JkKj4odm0sIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIW1vZHVsZVJlY29yZCkg
ewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKSk7Ci0gICAgfQotCi0gICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBtb2R1bGVS
ZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3Ig
KGF1dG8mIGtleSA6IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKSB7Ci0gICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0
KCkpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNs
YXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNvcmQq
Pih2bSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghbW9kdWxlUmVjb3JkKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgaWYgKE9wdGlv
bnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAgICAgZGF0YUxvZygiTG9hZGVyIFts
aW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKLQotICAgIG1vZHVsZVJl
Y29yZC0+bGluayhleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAvLyBIb29rIHBvaW50
LCBMb2FkZXIucmVzb2x2ZS4KLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVy
LyNicm93c2VyLXJlc29sdmUKLSAgICAvLyBUYWtlIHRoZSBuYW1lIGFuZCByZXNvbHZlIGl0IHRv
IHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlIGxvY2F0aW9uLgotICAgIC8v
IEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJuIHRoZSBVUkwgZm9yIHRo
ZSByZXNvdXJjZS4KLSAgICBKU01vZHVsZUxvYWRlciogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxK
U01vZHVsZUxvYWRlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnJlc29sdmUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmVTeW5jKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTTW9kdWxlTG9hZGVyKiBsb2Fk
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBhdXRvIHJlc3VsdCA9IGxvYWRlci0+cmVzb2x2ZVN5bmMoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCByZXN1bHQpKTsK
LX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVG
ZXRjaChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAv
LyBIb29rIHBvaW50LCBMb2FkZXIuZmV0Y2gKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIu
aW8vbG9hZGVyLyNicm93c2VyLWZldGNoCi0gICAgLy8gVGFrZSB0aGUga2V5IGFuZCBmZXRjaCB0
aGUgcmVzb3VyY2UgYWN0dWFsbHkuCi0gICAgLy8gRm9yIGV4YW1wbGUsIEphdmFTY3JpcHRDb3Jl
IHNoZWxsIGNhbiBwcm92aWRlIHRoZSBob29rIGZldGNoaW5nIHRoZSByZXNvdXJjZQotICAgIC8v
IGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgotICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsK
LSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+ZmV0Y2goZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBleGVjLT5hcmd1bWVudCgyKSkp
OwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlw
ZUdldE1vZHVsZU5hbWVzcGFjZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBhdXRvKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0s
IGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvKiBtb2R1bGVOYW1lc3BhY2VP
YmplY3QgPSBsb2FkZXItPmdldE1vZHVsZU5hbWVzcGFjZU9iamVjdChleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9uYWwgSG9vayBGdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8v
IFRvIGluc3RydW1lbnQgYW5kIHJldHJpZXZlIHRoZSBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIG1v
ZHVsZSBleGVjdXRpb24sCi0gICAgLy8gd2UgaW5zZXJ0ZWQgdGhlIGhvb2sgcG9pbnQgaGVyZS4K
LQotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9
IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOwot
ICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5ldmFsdWF0ZShleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSksIGV4ZWMtPmFyZ3VtZW50KDIp
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTY2ZDYxZDc1NDMwOGZkZjJlZGEwMDJjMjIwNWE4OWViMDNhY2ZjMC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIEpTSW50ZXJuYWxQcm9taXNlOwotCi1jbGFzcyBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwotcHVibGljOgotICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKLQotICAgIHN0YXRpYyBNb2R1bGVMb2FkZXJQcm90b3R5cGUqIGNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAg
ICBNb2R1bGVMb2FkZXJQcm90b3R5cGUqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPE1vZHVsZUxvYWRlclByb3RvdHlwZT4odm0uaGVhcCkpIE1vZHVsZUxvYWRlclByb3RvdHlw
ZSh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0g
ICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>