<?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>179036</bug_id>
          
          <creation_ts>2017-10-30 16:34:17 -0700</creation_ts>
          <short_desc>Remove pointers and array refs from Logical-Mode WSL programs</short_desc>
          <delta_ts>2018-08-29 17:06:09 -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>WebGPU</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>176967</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1366223</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-30 16:34:17 -0700</bug_when>
    <thetext>Remove pointers and array refs from Logical-Mode WSL programs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366225</commentid>
    <comment_count>1</comment_count>
      <attachid>325387</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-30 16:35:23 -0700</bug_when>
    <thetext>Created attachment 325387
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366279</commentid>
    <comment_count>2</comment_count>
      <attachid>325407</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-30 18:45:57 -0700</bug_when>
    <thetext>Created attachment 325407
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366329</commentid>
    <comment_count>3</comment_count>
      <attachid>325425</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-30 23:06:13 -0700</bug_when>
    <thetext>Created attachment 325425
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366424</commentid>
    <comment_count>4</comment_count>
      <attachid>325450</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-31 09:28:38 -0700</bug_when>
    <thetext>Created attachment 325450
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366426</commentid>
    <comment_count>5</comment_count>
      <attachid>325452</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-31 09:34:06 -0700</bug_when>
    <thetext>Created attachment 325452
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455032</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-08-29 17:06:09 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 176967 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325387</attachid>
            <date>2017-10-30 16:35:23 -0700</date>
            <delta_ts>2017-10-30 18:45:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>9369</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGZjNTJiOTI0ZGM0M2JhMmY4MTc3M2IyODlhOTYwMmIzMGEyZDk5YjgKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gT2N0IDMw
IDE2OjM0OjQ1IDIwMTcgLTA3MDAKCiAgICBSZW1vdmUgcG9pbnRlcnMKCmRpZmYgLS1naXQgYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9BbGwuanMKaW5kZXggOGJmZTJmY2I3MzguLmU2ZjM4YmVjNGQ1IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKKysrIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCkBAIC0xMjQsNiArMTI0LDcgQEAgbG9hZCgiTnVs
bFR5cGUuanMiKTsKIGxvYWQoIk9yaWdpbktpbmQuanMiKTsKIGxvYWQoIk92ZXJsb2FkUmVzb2x1
dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7Citsb2FkKCJQb2ludGVyUmVtb3Zl
ci5qcyIpOwogbG9hZCgiUHJlcGFyZS5qcyIpOwogbG9hZCgiUHJvZ3JhbS5qcyIpOwogbG9hZCgi
UHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbW92ZWQuanMiKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BvaW50ZXJSZW1vdmVyLmpzIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUG9pbnRlclJlbW92ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3N2I3MGNhZGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUG9pbnRlclJlbW92ZXIuanMKQEAgLTAsMCArMSwx
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBQb2ludGVyUmVtb3ZlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICBj
b25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9tYXAg
PSBuZXcgTWFwKCk7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgQXJyYXlSZWZzLgorICAg
IH0KKworICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRDb21tYUV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIHRo
aXMuX21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChub2RlLnRhcmdldCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdE1ha2VQdHJFeHByZXNzaW9u
KG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHJlc3VsdC5sVmFsdWUpOworICAg
IH0KKworICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKTsK
KyAgICAgICAgdGhpcy5fbWFwLnNldChub2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxl
dCByZXN1bHQgPSBzdXBlci52aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX21hcC5nZXQobm9kZS5wdHIpOworICAgIH0KKworICAgIHZpc2l0Q29t
bWFFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlz
aXRDb21tYUV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmIChub2RlLmxpc3QubGVuZ3RoID4g
MCkKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChub2RlLmxp
c3Rbbm9kZS5saXN0Lmxlbmd0aCAtIDFdKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKKyAgICB7CisgICAgICAgIGlmICgobm9k
ZS50eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgfHwgKG5vZGUudHlwZSBpbnN0YW5jZW9mIEFycmF5
UmVmVHlwZSkpIHsKKyAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcyk7Cisg
ICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMuX21hcC5nZXQobm9kZS5pbml0aWFs
aXplcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybiBz
dXBlci52aXNpdFZhcmlhYmxlRGVjbChub2RlKTsKKyAgICB9CisKKyAgICB2aXNpdFZhcmlhYmxl
UmVmKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRWYXJpYWJs
ZVJlZihub2RlKTsKKyAgICAgICAgdGhpcy5fbWFwLnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5v
ZGUudmFyaWFibGUpKTsKKyAgICAgICAgaWYgKChub2RlLnZhcmlhYmxlLnR5cGUgaW5zdGFuY2Vv
ZiBQdHJUeXBlKSB8fCAobm9kZS52YXJpYWJsZS50eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBl
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB2aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNz
aW9uKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHJlc3VsdC5sVmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCisgICAgeworICAg
ICAgICBsZXQgYXJndW1lbnRMaXN0ID0gW107CisgICAgICAgIGxldCBwYXJhbWV0ZXJzID0gW107
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmFtZXRlcnNbaV0udHlwZSBpbnN0YW5jZW9m
IFB0clR5cGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFtpXS52aXNpdCh0
aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUucGFyYW1ldGVyc1tpXSwg
dGhpcy5fbWFwLmdldChub2RlLmFyZ3VtZW50TGlzdFtpXSkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudExpc3QucHVzaChub2RlLmFyZ3VtZW50TGlzdFtp
XS52aXNpdCh0aGlzKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKG5vZGUucGFy
YW1ldGVyc1tpXS52aXNpdCh0aGlzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBsZXQgbmV3Qm9keSA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKworICAgICAgICBpZiAo
bm9kZS5yZXR1cm5UeXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgeworICAgICAgICAgICAgbGV0IHJl
dHVybkV4cHJlc3Npb247CisgICAgICAgICAgICBjbGFzcyBGaW5kUmV0dXJuIGV4dGVuZHMgVmlz
aXRvciB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gdmlzaXRSZXR1cm4obm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAocmV0dXJuRXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgcmV0dXJuIHZhbHVlcyBmb3VuZCBpbiBs
b2dpY2FsIG1vZGUgcHJvZ3JhbS4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuRXhwcmVz
c2lvbiA9IG5vZGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24gdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKSB7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbmV3Qm9keS52aXNpdChuZXcgRmluZFJldHVybigpKTsK
KyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChyZXR1cm5FeHBy
ZXNzaW9uLnZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQg
PSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisgICAgICAgICAgICBub2RlLm9yaWdpbiwKKyAgICAg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKKyAgICAgICAgICAgIGFy
Z3VtZW50TGlzdCwKKyAgICAgICAgICAgIHBhcmFtZXRlcnMsCisgICAgICAgICAgICBuZXdCb2R5
KTsKKyAgICAgICAgcmVzdWx0LnJldHVybkVQdHIgPSBub2RlLnJldHVybkVQdHI7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZnVuYy5pc0ZpZWxkQ29uc3RydWN0b3IpIHsKKyAgICAg
ICAgICAgIGxldCBtYXAgPSBuZXcgTWFwKCk7CisgICAgICAgICAgICBsZXQgc3RydWN0VHlwZSA9
IG5vZGUuZnVuYy5yZXR1cm5UeXBlLnR5cGU7CisgICAgICAgICAgICBsZXQgZmllbGRzID0gQXJy
YXkuZnJvbShzdHJ1Y3RUeXBlLmZpZWxkcyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbGV0
IGZpZWxkVHlwZSA9IGZpZWxkc1tpXS50eXBlOworICAgICAgICAgICAgICAgIG5vZGUuYXJndW1l
bnRMaXN0W2ldLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgICAgIG1hcC5zZXQoZmllbGRzW2ld
Lm5hbWUsIHRoaXMuX3BvaW50ZXJNYXAuZ2V0KG5vZGUuYXJndW1lbnRMaXN0W2ldKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIG1hcCk7CisgICAgICAg
ICAgICAvLyBGSVhNRTogRW1pdCBhIG5ldyBDYWxsRXhwcmVzc2lvbiB3aXRoIHRoZSBwb2ludGVy
IGFyZ3VtZW50cyByZW1vdmVkLgorICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZnVuYy5uYW1lLnN0
YXJ0c1dpdGgoIm9wZXJhdG9yLiIpICYmICFub2RlLmZ1bmMubmFtZS5lbmRzV2l0aCgiPSIpICYm
IChub2RlLmZ1bmMucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpKSB7CisgICAgICAgICAg
ICBsZXQgZmllbGROYW1lID0gbm9kZS5mdW5jLm5hbWUuc3Vic3RyaW5nKCJvcGVyYXRvci4iLmxl
bmd0aCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lv
bihub2RlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KHJlc3VsdC5hcmd1bWVu
dExpc3RbMF0pLmdldChmaWVsZE5hbWUpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgaW5kZXggZXhwcmVzc2lvbnMgd2l0aCBjb25zdGV4cHIgaW5kaWNlcy4KKyAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSBzbGljZXMuCisgICAgfQorCisgICAgdmlzaXRTdHJ1Y3RUeXBlKG5v
ZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gMCkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU3RydWN0cyBzaG91bGQgbm90IGhhdmUgdHlw
ZSBwYXJhbWV0ZXJzIHdoZW4gcGVyZm9ybWluZyBMb2dpY2FsIE1vZGUgcmV3cml0aW5nISIpOwor
ICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUobm9kZS5vcmlnaW4sIG5vZGUubmFt
ZSwgbm9kZS50eXBlUGFyYW1ldGVycyk7CisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIG5vZGUu
ZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhKGZpZWxkLnR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSAm
JiAhKGZpZWxkLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hZGQoZmllbGQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworLy8g
RklYTUU6IERlbGV0ZSBhbGwgdGhlIHVuZGVmaW5lZCBub2Rlcy4KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IDgwZGJiMDZjYTg5Li42ZTdjYjJjYjcwMCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAorKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCkBAIC0xMDcsNiArMTA3LDcg
QEAgdGQgewogICAgIDxzY3JpcHQgc3JjPSJPcmlnaW5LaW5kLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUG9pbnRl
clJlbW92ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMK
aW5kZXggNWQ3NWZmZjU5NTYuLmRkZDlhMTVjMWZlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCisrKyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKQEAg
LTIxNyw2ICsyMTcsNyBAQCBmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dy
YW0pCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
OworICAgICAgICBuYXRpdmVGdW5jLmlzRmllbGRDb25zdHJ1Y3RvciA9IHRydWU7CiAgICAgICAg
IHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuaHRtbAppbmRleCBjN2Q5OGU4MmE5Yy4uYTVlMWZiNzczOGEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAorKysgYi9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKQEAgLTEwMSw2ICsxMDEsNyBAQAogPHNj
cmlwdCBzcmM9Ik9yaWdpbktpbmQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik92ZXJsb2Fk
UmVzb2x1dGlvbkZhaWx1cmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQb2ludGVyUmVtb3Zlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNv
bHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAppbmRleCAyYWIzNmE1NDVkOC4u
YmYxYjk5ZWZmOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2lu
ZGV4Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbApA
QCAtMTAxLDYgKzEwMSw3IEBACiA8c2NyaXB0IHNyYz0iT3JpZ2luS2luZC5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlBvaW50ZXJSZW1v
dmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQ
cm9ncmFtLmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325407</attachid>
            <date>2017-10-30 18:45:57 -0700</date>
            <delta_ts>2017-10-30 23:06:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>16478</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwppbmRleCA4YmZlMmZjYjczOC4uMDM1NDhi
M2NhMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTEwNyw2ICsxMDcs
NyBAQCBsb2FkKCJMZXhlci5qcyIpOwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0
ZXJhbFR5cGVDaGVja2VyLmpzIik7CiBsb2FkKCJMb2dpY2FsRXhwcmVzc2lvbi5qcyIpOworbG9h
ZCgiTG9naWNhbE1vZGUuanMiKTsKIGxvYWQoIkxvZ2ljYWxOb3QuanMiKTsKIGxvYWQoIkxvb3BD
aGVja2VyLmpzIik7CiBsb2FkKCJNYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzIik7CkBAIC0xMjQs
NiArMTI1LDcgQEAgbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk9yaWdpbktpbmQuanMiKTsK
IGxvYWQoIk92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7
Citsb2FkKCJQb2ludGVyUmVtb3Zlci5qcyIpOwogbG9hZCgiUHJlcGFyZS5qcyIpOwogbG9hZCgi
UHJvZ3JhbS5qcyIpOwogbG9hZCgiUHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbW92ZWQu
anMiKTsKQEAgLTE2OSw2ICsxNzEsNyBAQCBsb2FkKCJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpz
Iik7CiBsb2FkKCJWYXJpYWJsZURlY2wuanMiKTsKIGxvYWQoIlZhcmlhYmxlUmVmLmpzIik7CiBs
b2FkKCJWaXNpdGluZ1NldC5qcyIpOworbG9hZCgiV0xvZ2ljYWxFcnJvci5qcyIpOwogbG9hZCgi
V1N5bnRheEVycm9yLmpzIik7CiBsb2FkKCJXVHJhcEVycm9yLmpzIik7CiBsb2FkKCJXVHlwZUVy
cm9yLmpzIik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Mb2dp
Y2FsTW9kZS5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xvZ2ljYWxNb2RlLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OTlkYmQ0MzQ4NgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xvZ2ljYWxNb2Rl
LmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gbG93ZXJUb0xvZ2ljYWxNb2RlKHBy
b2dyYW0pCit7CisgICAgZm9yIChmdW5jdGlvbnMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMpIHsKKyAg
ICAKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
b2ludGVyUmVtb3Zlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BvaW50ZXJS
ZW1vdmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MGYzZjcz
Y2I5MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Bv
aW50ZXJSZW1vdmVyLmpzCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUG9pbnRlclJlbW92
ZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAg
c3VwZXIoKTsKKyAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpOworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IEFycmF5UmVmcy4KKyAgICB9CisKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0Q29tbWFF
eHByZXNzaW9uKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMuX21hcC5n
ZXQobm9kZS50YXJnZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2
aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
c3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgdGhpcy5fbWFwLnNl
dChub2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICB9CisKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdE1h
a2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIHRoaXMuX21hcC5zZXQobm9kZSwg
cmVzdWx0LmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lv
bihub2RlKTsKKyAgICAgICAgcmVzdWx0ID0gdGhpcy5fbWFwLmdldChub2RlLnB0cik7CisgICAg
ICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dp
Y2FsRXJyb3IoIkNhbm5vdCBzdGF0aWNhbGx5IGRldGVybWluZSB3aGljaCB2YWx1ZSB3ZSBhcmUg
ZGVyZWZlcmVuY2luZy4iKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2
aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubGlzdC5maWx0ZXIoZXhwcmVzc2lv
biA9PiBleHByZXNzaW9uICE9IHVuZGVmaW5lZCkubWFwKGV4cHJlc3Npb24gPT4geworICAgICAg
ICAgICAgbGV0IHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcmVzdWx0
IGZyb20gIiArIGV4cHJlc3Npb24pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfSkpOworICAgICAgICBpZiAobm9kZS5saXN0Lmxlbmd0aCA+IDApCisgICAgICAgICAgICB0
aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMuX21hcC5nZXQobm9kZS5saXN0W25vZGUubGlzdC5sZW5n
dGggLSAxXSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNp
dEJsb2NrKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEJsb2NrKG5vZGUu
b3JpZ2luKTsKKyAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUuc3RhdGVtZW50cy5m
aWx0ZXIoc3RhdGVtZW50ID0+IHN0YXRlbWVudCAhPSB1bmRlZmluZWQpKQorICAgICAgICAgICAg
cmVzdWx0LmFkZChzdGF0ZW1lbnQudmlzaXQodGhpcykpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCisgICAgeworICAgICAgICBp
ZiAoKG5vZGUudHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpIHx8IChub2RlLnR5cGUgaW5zdGFuY2Vv
ZiBBcnJheVJlZlR5cGUpKSB7CisgICAgICAgICAgICBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRo
aXMpOworICAgICAgICAgICAgdGhpcy5fbWFwLnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5vZGUu
aW5pdGlhbGl6ZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gc3VwZXIudmlzaXRWYXJpYWJsZURlY2wobm9kZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0QXNzaWdubWVudChub2RlKQorICAgIHsKKyAgICAgICAgY2xhc3MgUG9pbnRlckZpbmRlciBl
eHRlbmRzIFZpc2l0b3IgeworICAgICAgICAgICAgdmlzaXRQdHJUeXBlKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV0xvZ2ljYWxFcnJvcigiQ2Fubm90IGFzc2lnbiB0byBhIHBv
aW50ZXIgaW4gbG9naWNhbCBtb2RlLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGxldCB0eXBlID0gbm9kZS50eXBlOworICAgICAgICB3aGlsZSAodHlwZSBpbnN0YW5jZW9m
IFR5cGVSZWYpCisgICAgICAgICAgICB0eXBlID0gdHlwZS50eXBlOworICAgICAgICB0eXBlLnZp
c2l0KG5ldyBQb2ludGVyRmluZGVyKCkpOworICAgICAgICBzdXBlci52aXNpdEFzc2lnbm1lbnQo
bm9kZSk7CisgICAgfQorCisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0VmFyaWFibGVSZWYobm9kZSk7CisgICAgICAgIHRo
aXMuX21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChub2RlLnZhcmlhYmxlKSk7CisgICAgICAg
IGlmICgobm9kZS52YXJpYWJsZS50eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgfHwgKG5vZGUudmFy
aWFibGUudHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRDb252ZXJ0UHRyVG9B
cnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBzdXBl
ci52aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgdGhp
cy5fbWFwLnNldChub2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRG
dW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFyZ3VtZW50TGlzdCA9
IFtdOworICAgICAgICBsZXQgcGFyYW1ldGVycyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS5wYXJhbWV0ZXJzW2ldLnR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcyk7CisgICAgICAgICAgICAgICAg
dGhpcy5fbWFwLnNldChub2RlLnBhcmFtZXRlcnNbaV0sIHRoaXMuX21hcC5nZXQobm9kZS5hcmd1
bWVudExpc3RbaV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXJn
dW1lbnRMaXN0LnB1c2gobm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcykpOworICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMucHVzaChub2RlLnBhcmFtZXRlcnNbaV0udmlzaXQodGhpcykp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGV0IG5ld0JvZHkgPSBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisKKyAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSBpbnN0YW5j
ZW9mIFB0clR5cGUpIHsKKyAgICAgICAgICAgIGxldCByZXR1cm5FeHByZXNzaW9uOworICAgICAg
ICAgICAgY2xhc3MgRmluZFJldHVybiBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIHZpc2l0UmV0dXJuKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl
dHVybkV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV0xvZ2lj
YWxFcnJvcigiTXVsdGlwbGUgcmV0dXJuIHZhbHVlcyBmb3VuZCBpbiBsb2dpY2FsIG1vZGUgcHJv
Z3JhbS4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuRXhwcmVzc2lvbiA9IG5vZGU7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gdmlzaXRGdW5jdGlv
bkxpa2VCbG9jayhub2RlKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbmV3Qm9keS52aXNpdChuZXcgRmluZFJldHVybigpKTsKKyAgICAgICAgICAgIHRo
aXMuX21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChyZXR1cm5FeHByZXNzaW9uLnZhbHVlKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25M
aWtlQmxvY2soCisgICAgICAgICAgICBub2RlLm9yaWdpbiwKKyAgICAgICAgICAgIE5vZGUudmlz
aXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKKyAgICAgICAgICAgIGFyZ3VtZW50TGlzdCwKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMsCisgICAgICAgICAgICBuZXdCb2R5KTsKKyAgICAgICAgcmVz
dWx0LnJldHVybkVQdHIgPSBub2RlLnJldHVybkVQdHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUuZnVuYy5pc0ZpZWxkQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIGxldCBtYXAg
PSBuZXcgTWFwKCk7CisgICAgICAgICAgICBsZXQgc3RydWN0VHlwZSA9IG5vZGUuZnVuYy5yZXR1
cm5UeXBlLnR5cGU7CisgICAgICAgICAgICBsZXQgZmllbGRzID0gQXJyYXkuZnJvbShzdHJ1Y3RU
eXBlLmZpZWxkcyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJndW1l
bnRMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbGV0IGZpZWxkVHlwZSA9IGZp
ZWxkc1tpXS50eXBlOworICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0
KHRoaXMpOworICAgICAgICAgICAgICAgIG1hcC5zZXQoZmllbGRzW2ldLm5hbWUsIHRoaXMuX3Bv
aW50ZXJNYXAuZ2V0KG5vZGUuYXJndW1lbnRMaXN0W2ldKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIG1hcCk7CisgICAgICAgICAgICAvLyBGSVhNRTog
RW1pdCBhIG5ldyBDYWxsRXhwcmVzc2lvbiB3aXRoIHRoZSBwb2ludGVyIGFyZ3VtZW50cyByZW1v
dmVkLgorICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZnVuYy5uYW1lLnN0YXJ0c1dpdGgoIm9wZXJh
dG9yLiIpICYmICFub2RlLmZ1bmMubmFtZS5lbmRzV2l0aCgiPSIpICYmIChub2RlLmZ1bmMucmV0
dXJuVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpKSB7CisgICAgICAgICAgICBsZXQgZmllbGROYW1l
ID0gbm9kZS5mdW5jLm5hbWUuc3Vic3RyaW5nKCJvcGVyYXRvci4iLmxlbmd0aCk7CisgICAgICAg
ICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHRoaXMuX21hcC5nZXQocmVzdWx0LmFyZ3VtZW50TGlzdFswXSkuZ2V0
KGZpZWxkTmFtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkKKyAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV0xvZ2ljYWxFcnJvcigiQ2Fubm90IGZpbmQgZmllbGQgcG9p
bnRlciB2YWx1ZS4iKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSBpbmRleCBleHByZXNzaW9ucyB3aXRoIGNvbnN0ZXhwciBp
bmRpY2VzLgorICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHNsaWNlcy4KKyAgICB9CisKKyAgICB2
aXNpdFN0cnVjdFR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLnR5cGVQYXJhbWV0
ZXJzLmxlbmd0aCAhPSAwKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dpY2FsRXJyb3IoIlN0
cnVjdHMgc2hvdWxkIG5vdCBoYXZlIHR5cGUgcGFyYW1ldGVycyB3aGVuIHBlcmZvcm1pbmcgTG9n
aWNhbCBNb2RlIHJld3JpdGluZyEiKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RU
eXBlKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZVBhcmFtZXRlcnMpOworICAgICAg
ICBmb3IgKGxldCBmaWVsZCBvZiBub2RlLmZpZWxkcy5maWx0ZXIoZmllbGQgPT4gIShmaWVsZC50
eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgJiYgIShmaWVsZC50eXBlIGluc3RhbmNlb2YgQXJyYXlS
ZWZUeXBlKSkpCisgICAgICAgICAgICByZXN1bHQuYWRkKGZpZWxkKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9Cit9CisKKy8vIEZJWE1FOiBEZWxldGUgYWxsIHRoZSB1bmRlZmluZWQg
bm9kZXMuCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5o
dG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAppbmRleCA4MGRi
YjA2Y2E4OS4uNmVjMmYzODkxOGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1NQSVJWLmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
UlYuaHRtbApAQCAtOTAsNiArOTAsNyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9IkxleGVyVG9r
ZW4uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMaXRlcmFsVHlwZUNoZWNrZXIuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMb2dpY2FsRXhwcmVzc2lvbi5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxNb2RlLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ikxvb3BD
aGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+CkBAIC0xMDcsNiArMTA4LDcgQEAgdGQgewogICAgIDxzY3JpcHQg
c3JjPSJPcmlnaW5LaW5kLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlBhcnNlLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUG9pbnRlclJlbW92ZXIuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb2dy
YW0uanMiPjwvc2NyaXB0PgpAQCAtMTU2LDYgKzE1OCw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNy
Yz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmFyaWFibGVS
ZWYuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaXNpdGluZ1NldC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IldMb2dpY2FsRXJyb3IuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJX
VHJhcEVycm9yLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iV1R5cGVFcnJvci5qcyI+
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50
aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwppbmRleCA1ZDc1ZmZmNTk1Ni4uZGRkOWExNWMx
ZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwpAQCAtMjE3LDYgKzIxNyw3IEBAIGZ1bmN0aW9uIHN5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH07CisgICAgICAgIG5hdGl2ZUZ1bmMuaXNGaWVs
ZENvbnN0cnVjdG9yID0gdHJ1ZTsKICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCmluZGV4IGM3ZDk4
ZTgyYTljLi41MDM4MTNlYjlkMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbApAQCAtODQsNiArODQsNyBAQAogPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkxpdGVyYWxUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iTG9naWNhbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ikxv
Z2ljYWxNb2RlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CkBAIC0xMDEsNiArMTAyLDcg
QEAKIDxzY3JpcHQgc3JjPSJPcmlnaW5LaW5kLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJP
dmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQYXJz
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUG9pbnRlclJlbW92ZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3Bl
cnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2Ny
aXB0PgpAQCAtMTQ2LDYgKzE0OCw3IEBACiA8c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWYXJpYWJsZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IldMb2dpY2FsRXJy
b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldTeW50YXhFcnJvci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iV1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1R5
cGVFcnJvci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9XTG9naWNhbEVycm9yLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
V0xvZ2ljYWxFcnJvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
Mjg1Zjg1ODIzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9XTG9naWNhbEVycm9yLmpzCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgV0xvZ2lj
YWxFcnJvciBleHRlbmRzIEVycm9yIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW5TdHJpbmcsIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBzdXBlcigiUHJvZ3JhbSBkb2VzIG5vdCBjb25mb3JtIHRv
IGxvZ2ljYWwgbW9kZSBydWxlcyBhdCAiICsgb3JpZ2luU3RyaW5nICsgIjogIiArIG1lc3NhZ2Up
OworICAgICAgICB0aGlzLm9yaWdpblN0cmluZyA9IG9yaWdpblN0cmluZzsKKyAgICAgICAgdGhp
cy5zeW50YXhFcnJvck1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKaW5kZXggMmFiMzZhNTQ1ZDguLjhjMDAzZGU5YTZk
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCisr
KyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKQEAgLTg0LDYgKzg0
LDcgQEAKIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJMaXRlcmFsVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxvZ2ljYWxF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJMb2dpY2FsTW9kZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iTG9vcENoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4
cHJlc3Npb24uanMiPjwvc2NyaXB0PgpAQCAtMTAxLDYgKzEwMiw3IEBACiA8c2NyaXB0IHNyYz0i
T3JpZ2luS2luZC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9u
RmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlBvaW50ZXJSZW1vdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQ
cmVwYXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KQEAgLTE0Niw2ICsx
NDgsNyBAQAogPHNjcmlwdCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJXTG9naWNhbEVycm9yLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldU
cmFwRXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMiPjwvc2Ny
aXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325425</attachid>
            <date>2017-10-30 23:06:13 -0700</date>
            <delta_ts>2017-10-31 09:28:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>39781</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwppbmRleCAzMGEwYjA5OTY1NS4uMDM1NDhi
M2NhMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTEwMSwxMSArMTAx
LDEzIEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJh
bC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMi
KTsKK2xvYWQoIkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgiTGF0ZUNoZWNrZXIu
anMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJM
aXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKIGxvYWQoIkxvZ2ljYWxFeHByZXNzaW9uLmpzIik7Cits
b2FkKCJMb2dpY2FsTW9kZS5qcyIpOwogbG9hZCgiTG9naWNhbE5vdC5qcyIpOwogbG9hZCgiTG9v
cENoZWNrZXIuanMiKTsKIGxvYWQoIk1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiKTsKQEAgLTEy
Myw2ICsxMjUsNyBAQCBsb2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiT3JpZ2luS2luZC5qcyIp
OwogbG9hZCgiT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyIpOwogbG9hZCgiUGFyc2UuanMi
KTsKK2xvYWQoIlBvaW50ZXJSZW1vdmVyLmpzIik7CiBsb2FkKCJQcmVwYXJlLmpzIik7CiBsb2Fk
KCJQcm9ncmFtLmpzIik7CiBsb2FkKCJQcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3Zl
ZC5qcyIpOwpAQCAtMTMyLDYgKzEzNSw3IEBAIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9h
ZCgiUHJvdG9jb2xGdW5jRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQo
IlB0clR5cGUuanMiKTsKK2xvYWQoIlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgi
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5q
cyIpOwogbG9hZCgiUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiKTsKQEAgLTE2Nyw2ICsxNzEsNyBA
QCBsb2FkKCJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpzIik7CiBsb2FkKCJWYXJpYWJsZURlY2wu
anMiKTsKIGxvYWQoIlZhcmlhYmxlUmVmLmpzIik7CiBsb2FkKCJWaXNpdGluZ1NldC5qcyIpOwor
bG9hZCgiV0xvZ2ljYWxFcnJvci5qcyIpOwogbG9hZCgiV1N5bnRheEVycm9yLmpzIik7CiBsb2Fk
KCJXVHJhcEVycm9yLmpzIik7CiBsb2FkKCJXVHlwZUVycm9yLmpzIik7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCmluZGV4IDQwZjVi
ZDMxY2MzLi5mMTQzNzE1ZDY1YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgQW5vbnlt
b3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CiAgICAgCiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0
dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiAr
IHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICBnZXQgdmFySXNMVmFsdWUoKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcwppbmRleCBmMGYwMzlmNTQ2Mi4uZmY3OGE1ZTU5OWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5q
cworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRnVuY3Rpb24uanMKQEAg
LTQzLDMgKzQzLDE0IEBAIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBl
QXJndW1lbnRzLCBhcmd1bWVudExpc3QpCiAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGZ1bmMu
dW5pbnN0YW50aWF0ZWRSZXR1cm5UeXBlLCByZXN1bHQpOwogfQogCitmdW5jdGlvbiBjYWxsSW5s
aW5lZEZ1bmN0aW9uKHByb2dyYW0sIGlubGluZWRGdW5jdGlvbiwgYXJndW1lbnRMaXN0KQorewor
ICAgIGxldCBhcmd1bWVudFR5cGVzID0gYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1
bWVudC50eXBlKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubGluZWRGdW5jdGlvbi5wYXJh
bWV0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGxldCB0eXBlID0gYXJndW1lbnRUeXBlc1tp
XS5pbnN0YW50aWF0ZWRUeXBlOworICAgICAgICB0eXBlLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRC
dWlsZGVyKCkpOworICAgICAgICBpbmxpbmVkRnVuY3Rpb24ucGFyYW1ldGVyc1tpXS5lUHRyLmNv
cHlGcm9tKGFyZ3VtZW50TGlzdFtpXS5lUHRyLCB0eXBlLnNpemUpOworICAgIH0KKyAgICBsZXQg
cmVzdWx0ID0gbmV3IEV2YWx1YXRvcihwcm9ncmFtKS5ydW5GdW5jKGlubGluZWRGdW5jdGlvbik7
CisgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGlubGluZWRGdW5jdGlvbi51bmluc3RhbnRpYXRl
ZFJldHVyblR5cGUsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjNlNjczNjA4ZjExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzCkBAIC0wLDAg
KzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgTEhTUmVmZXJlbmNlVHlwZXNMb3dlcmVyIGV4dGVuZHMgUmV3
cml0ZXIgeworfQorCitjbGFzcyBSZW1vdmVJbmxpbmVkTm9kZXMgZXh0ZW5kcyBSZXdyaXRlciB7
CisgICAgY29uc3RydWN0b3IoZnVuY3Rpb25MaWtlQmxvY2spCisgICAgeworICAgICAgICBzdXBl
cigpOworICAgICAgICB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jayA9IGZ1bmN0aW9uTGlrZUJsb2Nr
OworICAgIH0KKworICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZS5wdHIudmlzaXQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKChub2RlLm5hbWUuc3RhcnRz
V2l0aCgib3BlcmF0b3IuIikgJiYgIW5vZGUubmFtZS5lbmRzV2l0aCgiPSIpKSB8fCAobm9kZS5u
YW1lID09ICJvcGVyYXRvciZbXSIpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXJndW1lbnRM
aXN0WzBdLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKwor
ICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbGFzdElu
ZGV4ID0gbm9kZS5saXN0Lmxlbmd0aCAtIDE7CisgICAgICAgIGxldCBsaXN0ID0gW107CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFzdEluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBub2RlLmxpc3RbaV0udmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHJl
c3VsdCBmcm9tICIgKyBleHByZXNzaW9uKTsKKyAgICAgICAgICAgIGxpc3QucHVzaChyZXN1bHQp
OworICAgICAgICB9CisgICAgICAgIGxldCByZXN1bHQgPSBub2RlLmxpc3RbbGFzdEluZGV4XS52
aXNpdCh0aGlzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk51bGwgcmVzdWx0IGZyb20gIiArIGV4cHJlc3Npb24pOworICAgICAgICBsaXN0LnB1
c2gocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIGxpc3QpOworICAgIH0KKworICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jazsKKyAgICB9Cit9CisK
K2NsYXNzIEN1c3RvbUxIU1Jld3JpdGVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIF9maW5kSW5u
ZXJGdW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgLy8gKihhLCBmb28oKSkg
PSBiYXIgLi4uIHJldHVybiBiYXogPT4gKmJheiA9IGJhcgorICAgICAgICAvLyAqKGEsIChiLCAq
Zm9vKCkpKSA9IGJhciAuLi4gKGEsIChiLCBmb28oKSkpCisgICAgICAgIGxldCBvcGVyYXRpb25z
ID0gW107CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnB0cjsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobm9k
ZSBpbnN0YW5jZW9mIENhbGxFeHByZXNzaW9uKSAmJiAoKG5vZGUubmFtZS5zdGFydHNXaXRoKCJv
cGVyYXRvci4iKSAmJiAhbm9kZS5uYW1lLmVuZHNXaXRoKCI9IikpIHx8IChub2RlLm5hbWUgPT0g
Im9wZXJhdG9yJltdIikpKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKG5vZGUp
OworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmFyZ3VtZW50TGlzdFswXTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgSWRlbnRpdHlFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUudGFyZ2V0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb21tYUV4cHJlc3Npb24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5saXN0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmxpc3Rbbm9kZS5s
aXN0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTGlrZUJsb2NrKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB7ZnVuY3Rpb25MaWtlQmxvY2s6IG5vZGUsIG9wZXJhdGlvbnM6IG9wZXJhdGlvbnN9Owor
ICAgIH0KKyAgICAKKyAgICBfaW5saW5lTm9kZXMob3JpZ2luYWxBc3NpZ25tZW50LCBmdW5jdGlv
bkxpa2VCbG9jaywgb3BlcmF0aW9ucykKKyAgICB7CisgICAgICAgIGNsYXNzIFJld3JpdGVTaW5n
bGVGdW5jdGlvbkxpa2VCbG9jayBleHRlbmRzIFJld3JpdGVyIHsKKyAgICAgICAgICAgIGNvbnN0
cnVjdG9yKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBlcigpOworICAgICAg
ICAgICAgICAgIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudCA9IG9yaWdpbmFsQXNzaWdubWVudDsK
KyAgICAgICAgICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3V0ZXJGdW5jdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisgICAgICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBOb2RlLnZpc2l0KHRoaXMuX29yaWdpbmFsQXNz
aWdubWVudC50eXBlLCB0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRo
aXMpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQucmV0dXJuRVB0ciA9IG5vZGUucmV0dXJuRVB0cjsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlz
aXRSZXR1cm4obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZXQgcHRyID0g
bm9kZS52YWx1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gb3BlcmF0aW9ucy5zaXpl
KCkgLSAxOyBpID49IDA7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3IERlcmVmZXJlbmNlRXhw
cmVzc2lvbihvcGVyYXRpb24ub3JpZ2luLCBwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Tm9kZS50eXBlID0gTm9kZS52aXNpdChvcGVyYXRpb24udHlwZSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdOb2RlLmFkZHJlc3NTcGFjZSA9IG9wZXJhdGlvbi5hZGRyZXNz
U3BhY2U7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENh
bGxFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJndW1lbnRMaXN0
ID0gW3B0cl07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IG9w
ZXJhdGlvbi5hcmd1bWVudExpc3QubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRMaXN0LnB1c2goTm9kZS52aXNpdChvcGVyYXRpb24uYXJndW1lbnRMaXN0
W2pdLCB0aGlzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXcgQ2FsbEV4
cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLm9yaWdpbiwg
b3BlcmF0aW9uLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnR5
cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdOb2RlID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKG9wZXJh
dGlvbiwgbmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgcHRyID0gbmV3Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV0
IGFzc2lnbm1lbnQgPSBuZXcgQXNzaWdubWVudCh0aGlzLl9vcmlnaW5hbEFzc2lnbm1lbnQub3Jp
Z2luLCBwdHIsIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudC5yaHMpOworICAgICAgICAgICAgICAg
IGFzc2lnbm1lbnQudHlwZSA9IE5vZGUudmlzaXQodGhpcy5fb3JpZ2luYWxBc3NpZ25tZW50LnR5
cGUsIHRoaXMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2lu
LCBhc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZnVuY3Rpb25MaWtlQmxvY2sudmlzaXQobmV3IFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9j
aygpKTsKKyAgICB9CisKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkgeworICAgICAgICAvLyAq
YSgpID0gKCpiKCkgPSBjKQorICAgICAgICBub2RlID0gc3VwZXIudmlzaXRBc3NpZ25tZW50KG5v
ZGUpOworICAgICAgICBsZXQgZnVuY3Rpb25MaWtlQmxvY2sgPSB0aGlzLl9maW5kSW5uZXJGdW5j
dGlvbkxpa2VCbG9jayhub2RlLmxocyk7CisgICAgICAgIGlmICghZnVuY3Rpb25MaWtlQmxvY2sp
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgbGV0IG5ld0Z1bmN0aW9uTGlrZUJs
b2NrID0gdGhpcy5faW5saW5lTm9kZXMobm9kZSwgZnVuY3Rpb25MaWtlQmxvY2suZnVuY3Rpb25M
aWtlQmxvY2ssIGZ1bmN0aW9uTGlrZUJsb2NrLm9wZXJhdGlvbnMpOworICAgICAgICByZXR1cm4g
bm9kZS5saHMudmlzaXQobmV3IFJlbW92ZUlubGluZWROb2RlcyhuZXdGdW5jdGlvbkxpa2VCbG9j
aykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0xvZ2ljYWxNb2RlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNhbE1v
ZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEzMTI1NTMwNmY1
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNh
bE1vZGUuanMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsb3dlclRvTG9naWNhbE1v
ZGUocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzdWx0ID0gW107CisgICAgZm9yIChsZXQgZnVuY3Rp
b25zIG9mIHByb2dyYW0uZnVuY3Rpb25zKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVu
Y3Rpb25zWzFdKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmMuc2hhZGVyVHlwZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9n
cmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKGZ1bmMsIFtdKTsKKyAgICAgICAgICAgIF9p
bmxpbmVGdW5jdGlvbihwcm9ncmFtLCBpbmxpbmVkU2hhZGVyLCBuZXcgVmlzaXRpbmdTZXQoZnVu
YykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNo
YWRlci52aXNpdChuZXcgQ3VzdG9tUkhTUmV3cml0ZXIobmV3IFJIU1JlZmVyZW5jZVR5cGVzTG93
ZXJlcigpKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNoYWRlci52aXNp
dChuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0g
aW5saW5lZFNoYWRlci52aXNpdChuZXcgUG9pbnRlclJlbW92ZXIoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlubGluZWRTaGFkZXIpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGxvd2VyVG9Mb2dpY2FsTW9kZUZv
clRlc3RpbmcocHJvZ3JhbSwgZnVuY3Rpb25OYW1lKQoreworICAgIGxldCByZXN1bHQgPSBbXTsK
KyAgICBsZXQgZnVuYyA9IHByb2dyYW0uZnVuY3Rpb25zLmdldChmdW5jdGlvbk5hbWUpWzBdOwor
CisgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5p
cXVlKGZ1bmMsIFtdKTsKKyAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgaW5saW5lZFNoYWRl
ciwgbmV3IFZpc2l0aW5nU2V0KGZ1bmMpKTsKKyAgICAKKyAgICBpbmxpbmVkU2hhZGVyLnJld3Jp
dGUobmV3IEN1c3RvbVJIU1Jld3JpdGVyKG5ldyBSSFNSZWZlcmVuY2VUeXBlc0xvd2VyZXIoKSkp
OworICAgIGlubGluZWRTaGFkZXIucmV3cml0ZShuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7Cisg
ICAgaW5saW5lZFNoYWRlci5yZXdyaXRlKG5ldyBQb2ludGVyUmVtb3ZlcigpKTsKKyAgICAgICAg
ICAgIAorICAgIHJldHVybiBpbmxpbmVkU2hhZGVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUG9pbnRlclJlbW92ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZjRmZmQ4NWJlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpAQCAtMCwwICsxLDIxNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmljdCI7
CisKK2NsYXNzIFBvaW50ZXJSZW1vdmVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX21hcCA9IG5ldyBN
YXAoKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBBcnJheVJlZnMuCisgICAgfQorCisg
ICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1
bHQgPSBzdXBlci52aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgdGhpcy5fbWFw
LnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5vZGUudGFyZ2V0KSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgIHsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSk7
CisgICAgICAgIGlmIChyZXN1bHQubFZhbHVlKQorICAgICAgICAgICAgdGhpcy5fbWFwLnNldChu
b2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbWFw
LnNldChub2RlLCBub2RlLmxWYWx1ZSk7CisgICAgfQorCisgICAgdmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUs
IHJlc3VsdC5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXREZXJlZmVyZW5jZUV4cHJlc3Np
b24obm9kZSk7CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9tYXAuZ2V0KG5vZGUucHRyKTsK
KyAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
V0xvZ2ljYWxFcnJvcigiQ2Fubm90IHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHdoaWNoIHZhbHVlIHdl
IGFyZSBkZXJlZmVyZW5jaW5nLiIpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRDb21tYUV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCBsaXN0ID0gW107CisgICAgICAgIGZvciAo
bGV0IGV4cHJlc3Npb24gb2Ygbm9kZS5saXN0KSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
ZXhwcmVzc2lvbi52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gdW5kZWZp
bmVkKQorICAgICAgICAgICAgICAgIGxpc3QucHVzaChyZXN1bHQpOworICAgICAgICB9CisgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBsaXN0KTsK
KyAgICAgICAgaWYgKG5vZGUubGlzdC5sZW5ndGggPiAwKQorICAgICAgICAgICAgdGhpcy5fbWFw
LnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5vZGUubGlzdFtub2RlLmxpc3QubGVuZ3RoIC0gMV0p
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRCbG9jayhu
b2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBCbG9jayhub2RlLm9yaWdpbik7
CisgICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnN0YXRlbWVudHMpIHsKKyAgICAg
ICAgICAgIGxldCBuZXdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmlzaXQodGhpcyk7CisgICAgICAg
ICAgICBpZiAobmV3U3RhdGVtZW50ICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKG5ld1N0YXRlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgIHsKKyAgICAgICAgbGV0
IHR5cGUgPSBub2RlLnR5cGU7CisgICAgICAgIHdoaWxlICh0eXBlIGluc3RhbmNlb2YgVHlwZVJl
ZikKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnR5cGU7CisgICAgICAgIGlmICgodHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpIHx8ICh0eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkgeworICAg
ICAgICAgICAgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMu
X21hcC5zZXQobm9kZSwgdGhpcy5fbWFwLmdldChub2RlLmluaXRpYWxpemVyKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0VmFyaWFi
bGVEZWNsKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKKyAg
ICB7CisgICAgICAgIGNsYXNzIFBvaW50ZXJGaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAg
ICAgICAgIHZpc2l0UHRyVHlwZShub2RlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdM
b2dpY2FsRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gYSBwb2ludGVyIGluIGxvZ2ljYWwgbW9kZS4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsZXQgdHlwZSA9IG5vZGUudHlw
ZTsKKyAgICAgICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmKQorICAgICAgICAgICAg
dHlwZSA9IHR5cGUudHlwZTsKKyAgICAgICAgdHlwZS52aXNpdChuZXcgUG9pbnRlckZpbmRlcigp
KTsKKyAgICAgICAgc3VwZXIudmlzaXRBc3NpZ25tZW50KG5vZGUpOworICAgIH0KKworICAgIHZp
c2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52
aXNpdFZhcmlhYmxlUmVmKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMu
X21hcC5nZXQobm9kZS52YXJpYWJsZSkpOworICAgICAgICBsZXQgdHlwZSA9IG5vZGUudmFyaWFi
bGUudHlwZTsKKyAgICAgICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmKQorICAgICAg
ICAgICAgdHlwZSA9IHR5cGUudHlwZTsKKyAgICAgICAgaWYgKCh0eXBlIGluc3RhbmNlb2YgUHRy
VHlwZSkgfHwgKHR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpc2l0Q29udmVydFB0
clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
c3VwZXIudmlzaXRDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSk7CisgICAgICAg
IHRoaXMuX21hcC5zZXQobm9kZSwgcmVzdWx0LmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBhcmd1bWVudExp
c3QgPSBbXTsKKyAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKG5vZGUucGFyYW1ldGVyc1tpXS50eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0KHRoaXMpOworICAgICAgICAgICAg
ICAgIHRoaXMuX21hcC5zZXQobm9kZS5wYXJhbWV0ZXJzW2ldLCB0aGlzLl9tYXAuZ2V0KG5vZGUu
YXJndW1lbnRMaXN0W2ldKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGFyZ3VtZW50TGlzdC5wdXNoKG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0KHRoaXMpKTsKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2gobm9kZS5wYXJhbWV0ZXJzW2ldLnZpc2l0KHRo
aXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxldCBuZXdCb2R5ID0g
bm9kZS5ib2R5LnZpc2l0KHRoaXMpOworCisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUgaW5z
dGFuY2VvZiBQdHJUeXBlKSB7CisgICAgICAgICAgICBsZXQgcmV0dXJuRXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGNsYXNzIEZpbmRSZXR1cm4gZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgICAg
ICAgICB2aXNpdFJldHVybihub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5F
eHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dpY2FsRXJy
b3IoIk11bHRpcGxlIHJldHVybiB2YWx1ZXMgZm91bmQgaW4gbG9naWNhbCBtb2RlIHByb2dyYW0u
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybkV4cHJlc3Npb24gPSBub2RlOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9k
ZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld0Jv
ZHkudmlzaXQobmV3IEZpbmRSZXR1cm4oKSk7CisgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG5v
ZGUsIHRoaXMuX21hcC5nZXQocmV0dXJuRXhwcmVzc2lvbi52YWx1ZSkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAorICAg
ICAgICAgICAgbm9kZS5vcmlnaW4sCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJu
VHlwZSwgdGhpcyksCisgICAgICAgICAgICBhcmd1bWVudExpc3QsCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLAorICAgICAgICAgICAgbmV3Qm9keSk7CisgICAgICAgIHJlc3VsdC5yZXR1cm5FUHRy
ID0gbm9kZS5yZXR1cm5FUHRyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZ1bmMu
aXNGaWVsZENvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICBsZXQgbWFwID0gbmV3IE1hcCgpOwor
ICAgICAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLmZ1bmMucmV0dXJuVHlwZS50eXBlOwor
ICAgICAgICAgICAgbGV0IGZpZWxkcyA9IEFycmF5LmZyb20oc3RydWN0VHlwZS5maWVsZHMpOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgIGxldCBmaWVsZFR5cGUgPSBmaWVsZHNbaV0udHlwZTsK
KyAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFtpXS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBtYXAuc2V0KGZpZWxkc1tpXS5uYW1lLCB0aGlzLl9wb2ludGVyTWFwLmdldChu
b2RlLmFyZ3VtZW50TGlzdFtpXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5f
bWFwLnNldChub2RlLCBtYXApOworICAgICAgICAgICAgLy8gRklYTUU6IEVtaXQgYSBuZXcgQ2Fs
bEV4cHJlc3Npb24gd2l0aCB0aGUgcG9pbnRlciBhcmd1bWVudHMgcmVtb3ZlZC4KKyAgICAgICAg
fSBlbHNlIGlmIChub2RlLmZ1bmMubmFtZS5zdGFydHNXaXRoKCJvcGVyYXRvci4iKSAmJiAhbm9k
ZS5mdW5jLm5hbWUuZW5kc1dpdGgoIj0iKSAmJiAobm9kZS5mdW5jLnJldHVyblR5cGUgaW5zdGFu
Y2VvZiBQdHJUeXBlKSkgeworICAgICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IG5vZGUuZnVuYy5u
YW1lLnN1YnN0cmluZygib3BlcmF0b3IuIi5sZW5ndGgpOworICAgICAgICAgICAgbGV0IHJlc3Vs
dCA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICByZXN1bHQg
PSB0aGlzLl9tYXAuZ2V0KHJlc3VsdC5hcmd1bWVudExpc3RbMF0pLmdldChmaWVsZE5hbWUpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdMb2dpY2FsRXJyb3IoIkNhbm5vdCBmaW5kIGZpZWxkIHBvaW50ZXIgdmFsdWUuIik7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgaW5kZXggZXhwcmVzc2lvbnMgd2l0aCBjb25zdGV4cHIgaW5kaWNlcy4KKyAgICAg
ICAgLy8gRklYTUU6IEhhbmRsZSBzbGljZXMuCisgICAgICAgIHJldHVybiBzdXBlci52aXNpdENh
bGxFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKworICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IDApCisgICAg
ICAgICAgICB0aHJvdyBuZXcgV0xvZ2ljYWxFcnJvcigiU3RydWN0cyBzaG91bGQgbm90IGhhdmUg
dHlwZSBwYXJhbWV0ZXJzIHdoZW4gcGVyZm9ybWluZyBMb2dpY2FsIE1vZGUgcmV3cml0aW5nISIp
OworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUobm9kZS5vcmlnaW4sIG5vZGUu
bmFtZSwgbm9kZS50eXBlUGFyYW1ldGVycyk7CisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIG5v
ZGUuZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhKGZpZWxkLnR5cGUgaW5zdGFuY2VvZiBQdHJUeXBl
KSAmJiAhKGZpZWxkLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hZGQoZmllbGQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JIU0xvZ2ljYWxNb2RlSW5s
aW5lci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JIU0xvZ2ljYWxNb2RlSW5s
aW5lci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDVhOWRlOTFh
ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SSFNM
b2dpY2FsTW9kZUlubGluZXIuanMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworInVzZSBzdHJpY3QiOworCisvLyBkb1ByZXAoInRo
cmVhZCBpbnQqIGZvbyh0aHJlYWQgaW50KiB4KSB7IHJldHVybiB4OyB9IHZvaWQgYmFyKCkgeyBp
bnQgeDsgaW50IHkgPSAqZm9vKCZ4KTsgfSIpCisvLyBkb1ByZXAoInN0cnVjdCBGb28geyBpbnQg
eDsgaW50IHk7IH0gRm9vIGZvbygpIHsgcmV0dXJuIEZvbygzLCA0KTsgfSB2b2lkIGJhcigpIHsg
aW50IHggPSBmb28oKS54OyB9IikKKy8vIGRvUHJlcCgidGhyZWFkIGludFtdIGZvbyh0aHJlYWQg
aW50W10geCkgeyByZXR1cm4geDsgfSB2b2lkIGJhcigpIHsgaW50WzFdIHg7IGludCB5ID0gZm9v
KEB4KVswXTsgfSIpCisKK2NsYXNzIFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9jayBleHRl
bmRzIFJld3JpdGVyIHsKKyAgICBjb25zdHJ1Y3RvcihtYXApCisgICAgeworICAgICAgICBzdXBl
cihtYXApOworICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgfQorCisg
ICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X291dGVyRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbm9kZS52aXNpdChuZXcgUmV3cml0
ZXIoKSk7CisgICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSB0cnVlOworICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAorICAgICAgICAgICAgbm9kZS5vcmlnaW4s
CisgICAgICAgICAgICBOb2RlLnZpc2l0KHRoaXMuX3JldHVyblR5cGUobm9kZSksIHRoaXMpLAor
ICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZp
c2l0KHRoaXMpKSwKKyAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+
IHBhcmFtZXRlci52aXNpdCh0aGlzKSksCisgICAgICAgICAgICBub2RlLmJvZHkudmlzaXQodGhp
cykpOworICAgICAgICByZXN1bHQucmV0dXJuRVB0ciA9IG5vZGUucmV0dXJuRVB0cjsKKyAgICAg
ICAgdGhpcy5fb3V0ZXJGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KK30KKworY2xhc3MgSW5saW5lRGVyZWZlcmVuY2UgZXh0ZW5kcyBSZXdyaXRlU2luZ2xl
RnVuY3Rpb25MaWtlQmxvY2sgeworICAgIGNvbnN0cnVjdG9yKG1hcCwgZGVyZWZlcmVuY2UpCisg
ICAgeworICAgICAgICBzdXBlcihtYXApOworICAgICAgICB0aGlzLl9kZXJlZmVyZW5jZSA9IGRl
cmVmZXJlbmNlOworICAgIH0KKyAgICAKKyAgICBfcmV0dXJuVHlwZShub2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5vZGUucmV0dXJuVHlwZS5lbGVtZW50VHlwZTsKKyAgICB9CisKKyAgICB2
aXNpdFJldHVybihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld0RlcmVmZXJlbmNlID0gbmV3
IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLl9kZXJlZmVyZW5jZS5vcmlnaW4sIE5vZGUudmlz
aXQobm9kZS52YWx1ZSwgdGhpcykpOworICAgICAgICBuZXdEZXJlZmVyZW5jZS50eXBlID0gTm9k
ZS52aXNpdCh0aGlzLl9kZXJlZmVyZW5jZS50eXBlLCB0aGlzKTsKKyAgICAgICAgbmV3RGVyZWZl
cmVuY2UuYWRkcmVzc1NwYWNlID0gdGhpcy5fZGVyZWZlcmVuY2UuYWRkcmVzc1NwYWNlOworICAg
ICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbmV3RGVyZWZlcmVuY2UpOworICAg
IH0KK30KKworY2xhc3MgSW5saW5lR2V0dGVyIGV4dGVuZHMgUmV3cml0ZVNpbmdsZUZ1bmN0aW9u
TGlrZUJsb2NrIHsKKyAgICBjb25zdHJ1Y3RvcihtYXAsIGdldHRlciwgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHN1cGVyKG1hcCk7CisgICAgICAgIHRoaXMuX2dldHRlciA9IGdldHRlcjsKKyAgICAg
ICAgdGhpcy5fdHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIF9yZXR1cm5UeXBlKG5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICB9CisKKyAgICB2aXNpdFJl
dHVybihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld0dldHRlciA9IG5ldyBDYWxsRXhwcmVz
c2lvbigKKyAgICAgICAgICAgIHRoaXMuX2dldHRlci5vcmlnaW4sIHRoaXMuX2dldHRlci5uYW1l
LAorICAgICAgICAgICAgdGhpcy5fZ2V0dGVyLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVu
dCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpLAorICAgICAgICAgICAgW05vZGUudmlzaXQo
bm9kZS52YWx1ZSwgdGhpcyldKTsKKyAgICAgICAgbmV3R2V0dGVyID0gdGhpcy5wcm9jZXNzRGVy
aXZlZENhbGxEYXRhKHRoaXMuX2dldHRlciwgbmV3R2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG5l
dyBSZXR1cm4obm9kZS5vcmlnaW4sIG5ld0dldHRlcik7CisgICAgfQorfQorCitjbGFzcyBJbmxp
bmVTdWJzY3JpcHQgZXh0ZW5kcyBSZXdyaXRlU2luZ2xlRnVuY3Rpb25MaWtlQmxvY2sgeworICAg
IGNvbnN0cnVjdG9yKG1hcCwgc3Vic2NyaXB0KQorICAgIHsKKyAgICAgICAgc3VwZXIobWFwKTsK
KyAgICAgICAgdGhpcy5fc3Vic2NyaXB0ID0gc3Vic2NyaXB0OworICAgIH0KKyAgICAKKyAgICBf
cmV0dXJuVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUucmV0dXJuVHlwZS5l
bGVtZW50VHlwZTsKKyAgICB9CisKKyAgICB2aXNpdFJldHVybihub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IG5ld1N1YnNjcmlwdCA9IG5ldyBDYWxsRXhwcmVzc2lvbigKKyAgICAgICAgICAgIHRo
aXMuX3N1YnNjcmlwdC5vcmlnaW4sIHRoaXMuX3N1YnNjcmlwdC5uYW1lLAorICAgICAgICAgICAg
dGhpcy5fc3Vic2NyaXB0LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJn
dW1lbnQudmlzaXQodGhpcykpLAorICAgICAgICAgICAgW05vZGUudmlzaXQobm9kZS52YWx1ZSwg
dGhpcyksIE5vZGUudmlzaXQodGhpcy5fc3Vic2NyaXB0LmFyZ3VtZW50TGlzdFsxXSwgdGhpcyld
KTsKKyAgICAgICAgbmV3U3Vic2NyaXB0ID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKHRo
aXMuX3N1YnNjcmlwdCwgbmV3U3Vic2NyaXB0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4o
bm9kZS5vcmlnaW4sIG5ld1N1YnNjcmlwdCk7CisgICAgfQorfQorCitjbGFzcyBSSFNSZWZlcmVu
Y2VUeXBlc0xvd2VyZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgX2ZpbmRJbm5lckZ1bmN0aW9u
TGlrZUJsb2NrKG5vZGUpCisgICAgeworICAgICAgICBsZXQgZGVlcGVzdENvbW1hOworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAg
IHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElkZW50
aXR5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnRhcmdldDsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChu
b2RlIGluc3RhbmNlb2YgQ29tbWFFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUubGlzdC5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICBkZWVwZXN0Q29tbWEgPSBub2RlOworICAgICAgICAgICAgICAg
IG5vZGUgPSBub2RlLmxpc3Rbbm9kZS5saXN0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5j
ZW9mIEZ1bmN0aW9uTGlrZUJsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtkZWVwZXN0
Q29tbWEsIGZ1bmN0aW9uTGlrZUJsb2NrOiBub2RlfTsKKyAgICB9CisgICAgCisgICAgX2lubGlu
ZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHJlc3VsdCwgaW5uZXJWYWx1ZSwgc3Vic3RpdHV0
aW9uKQorICAgIHsKKyAgICAgICAgbGV0IGlubmVyRnVuY3Rpb25MaWtlQmxvY2sgPSB0aGlzLl9m
aW5kSW5uZXJGdW5jdGlvbkxpa2VCbG9jayhpbm5lclZhbHVlKHJlc3VsdCkpOworICAgIAorICAg
ICAgICBpZiAoIWlubmVyRnVuY3Rpb25MaWtlQmxvY2spCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgICAgIGxldCBuZXdGdW5jdGlvbiA9IGlubmVyRnVuY3Rpb25MaWtlQmxvY2su
ZnVuY3Rpb25MaWtlQmxvY2sudmlzaXQoc3Vic3RpdHV0aW9uKGlubmVyRnVuY3Rpb25MaWtlQmxv
Y2suZnVuY3Rpb25MaWtlQmxvY2spKTsKKyAgICAgICAgaWYgKGlubmVyRnVuY3Rpb25MaWtlQmxv
Y2suZGVlcGVzdENvbW1hKSB7CisgICAgICAgICAgICBpbm5lckZ1bmN0aW9uTGlrZUJsb2NrLmRl
ZXBlc3RDb21tYS5saXN0W2lubmVyRnVuY3Rpb25MaWtlQmxvY2suZGVlcGVzdENvbW1hLmxpc3Qu
bGVuZ3RoIC0gMV0gPSBuZXdGdW5jdGlvbjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQucHRy
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXdGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2
aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2lubGluZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHN1cGVyLnZpc2l0RGVyZWZlcmVu
Y2VFeHByZXNzaW9uKG5vZGUpLCByZXN1bHQgPT4gcmVzdWx0LnB0ciwgZnVuY3Rpb25MaWtlQmxv
Y2sgPT4gbmV3IElubGluZURlcmVmZXJlbmNlKHRoaXMubWFwLCBub2RlKSk7CisgICAgfQorCisg
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUubmFt
ZS5zdGFydHNXaXRoKCJvcGVyYXRvci4iKSAmJiAhbm9kZS5uYW1lLmVuZHNXaXRoKCI9IikpIHsK
KyAgICAgICAgICAgIC8vIFVzZXItYXV0aG9yZWQgZnVuY3Rpb25zIHdpbGwgaGF2ZSBiZWVuIHRy
YW5zbGF0ZWQgdG8gRnVuY3Rpb25MaWtlQmxvY2tzLCBzbworICAgICAgICAgICAgLy8gdGhpcyB3
aWxsIG9ubHkgY2F0Y2ggbmF0aXZlIGZpZWxkIGdldHRlcnMuCisgICAgICAgICAgICBsZXQgZmll
bGROYW1lID0gbm9kZS5uYW1lLnN1YnN0cmluZygib3BlcmF0b3IuIi5sZW5ndGgpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lubGluZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHN1cGVy
LnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSksIHJlc3VsdCA9PiByZXN1bHQuYXJndW1lbnRMaXN0
WzBdLCBmdW5jdGlvbkxpa2VCbG9jayA9PiBuZXcgSW5saW5lR2V0dGVyKHRoaXMubWFwLCBub2Rl
LCBmdW5jdGlvbkxpa2VCbG9jay5yZXR1cm5UeXBlLmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkudHlw
ZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ImW10i
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJs
b2NrKHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSksIHJlc3VsdCA9PiByZXN1bHQuYXJn
dW1lbnRMaXN0WzBdLCBmdW5jdGlvbkxpa2VCbG9jayA9PiBuZXcgSW5saW5lU3Vic2NyaXB0KHRo
aXMubWFwLCBub2RlKSk7CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSk7CisgICAgfQorfQorCitjbGFzcyBDdXN0b21SSFNSZXdyaXRlciBleHRlbmRzIFJl
d3JpdGVyIHsKKyAgICBjb25zdHJ1Y3Rvcihpbm5lclJld3JpdGVyKQorICAgIHsKKyAgICAgICAg
c3VwZXIoaW5uZXJSZXdyaXRlci5tYXApOworICAgICAgICB0aGlzLl9jdXJyZW50RGVwdGggPSAw
OworICAgICAgICB0aGlzLl9tYXhEZXB0aCA9IDA7CisgICAgICAgIHRoaXMuX2lubmVyUmV3cml0
ZXIgPSBpbm5lclJld3JpdGVyOworICAgIH0KKworICAgIHZpc2l0QXNzaWdubWVudChub2RlKSB7
CisgICAgICAgICsrdGhpcy5fY3VycmVudERlcHRoOworICAgICAgICB0aGlzLl9tYXhEZXB0aCA9
IE1hdGgubWF4KHRoaXMuX2N1cnJlbnREZXB0aCwgdGhpcy5fbWF4RGVwdGgpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRBc3NpZ25tZW50KG5vZGUpOworICAgICAgICBpZiAodGhp
cy5fbWF4RGVwdGggPT0gdGhpcy5fY3VycmVudERlcHRoKSB7CisgICAgICAgICAgICAvLyBJJ20g
dGhlIGlubmVybW9zdCBBc3NpZ25tZW50LgorICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFzc2ln
bm1lbnQobm9kZS5vcmlnaW4sIHJlc3VsdC5saHMsIG5vZGUucmhzLnZpc2l0KHRoaXMuX2lubmVy
UmV3cml0ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5
cGUsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIC0tdGhpcy5fY3VycmVudERlcHRoOworICAg
ICAgICBpZiAodGhpcy5fY3VycmVudERlcHRoID09IDApCisgICAgICAgICAgICB0aGlzLl9tYXhE
ZXB0aCA9IDA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRWYXJp
YWJsZURlY2wobm9kZSkgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlRGVjbCgK
KyAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCisgICAgICAgICAgICBub2RlLnR5
cGUudmlzaXQodGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIs
IHRoaXMuX2lubmVyUmV3cml0ZXIpKTsKKyAgICAgICAgdGhpcy5fbWFwTm9kZShub2RlLCByZXN1
bHQpOworICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9SZXdyaXRlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpz
CmluZGV4IDY0NmQwNmJiNzZlLi4wYjU0ZmEwYTBmMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmV3cml0ZXIuanMKQEAgLTI4LDkgKzI4LDE3IEBACiAvLyBub3cgd2UgYXJlIGhh
Y2tpc2hseSBwcmV2ZW50aW5nIHRoaXMgYnkgd3JhcHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRo
YXQncyBwcm9iYWJseSB3cm9uZy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzYyMDgKIGNsYXNzIFJld3JpdGVyIHsKLSAgICBjb25zdHJ1Y3RvcigpCisgICAg
Y29uc3RydWN0b3IobWFwcGluZykKICAgICB7Ci0gICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcg
TWFwKCk7CisgICAgICAgIGlmIChtYXBwaW5nKQorICAgICAgICAgICAgdGhpcy5fbWFwcGluZyA9
IG1hcHBpbmc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcg
TWFwKCk7CisgICAgfQorICAgIAorICAgIGdldCBtYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX21hcHBpbmc7CiAgICAgfQogICAgIAogICAgIF9tYXBOb2RlKG9sZEl0ZW0sIG5ld0l0
ZW0pCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1s
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAppbmRleCBkMTczZjdl
NzI1MS4uNmVjMmYzODkxOGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1NQSVJWLmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYu
aHRtbApAQCAtODQsMTEgKzg0LDEzIEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iSW50TGl0ZXJh
bC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9IkxhdGVDaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTGV4ZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTG9naWNhbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJMb2dpY2FsTW9kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxO
b3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgpAQCAtMTA2LDYgKzEwOCw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iT3JpZ2luS2luZC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlBvaW50ZXJSZW1vdmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3BlcnR5UmVzb2x2
ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4K
QEAgLTExNSw2ICsxMTgsNyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0Rl
Y2wuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJSSFNMb2dpY2FsTW9kZUlubGluZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlJlY3Vy
c2l2ZVR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KQEAgLTE1NCw2ICsxNTgsNyBAQCB0ZCB7CiAg
ICAgPHNjcmlwdCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlzaXRpbmdT
ZXQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXTG9naWNhbEVycm9yLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iV1N5bnRheEVycm9yLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iV1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IldU
eXBlRXJyb3IuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sCmluZGV4IDMyMGZiYTk5ZDU1Li4xYjEyYjFiMWU0OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbApAQCAtNzgsMTEgKzc4LDEzIEBACiA8c2NyaXB0IHNyYz0iSW50
TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkludHJpbnNpY3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGF0
ZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxleGVyLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMaXRl
cmFsVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxvZ2ljYWxFeHByZXNz
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJMb2dpY2FsTW9kZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9v
cENoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4cHJlc3Np
b24uanMiPjwvc2NyaXB0PgpAQCAtMTAwLDYgKzEwMiw3IEBACiA8c2NyaXB0IHNyYz0iT3JpZ2lu
S2luZC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVy
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlBvaW50ZXJSZW1vdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcmVwYXJl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KQEAgLTEwOSw2ICsxMTIsNyBA
QAogPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlByb3RvY29sUmVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQdHJUeXBlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSSFNMb2dpY2FsTW9kZUlubGluZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlJlY3Vyc2l2ZVR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KQEAgLTE0NCw2ICsxNDgsNyBAQAog
PHNjcmlwdCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmFy
aWFibGVSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJXTG9naWNhbEVycm9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldUcmFwRXJyb3Iu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMiPjwvc2NyaXB0PgpAQCAt
MTU1LDcgKzE2MCw3IEBACiA8c2NyaXB0PgogZnVuY3Rpb24gZG9UZXN0SW5Ccm93c2VyKCkKIHsK
LSAgICB2YXIgdGVzdGVyID0gZG9UZXN0KC8uKi8pOworICAgIHZhciB0ZXN0ZXIgPSBkb1Rlc3Qo
L2xvZ2ljYWxNb2RlTXVsdGlwbGVSZXR1cm5SZWFkLyk7CiAgICAgdmFyIGxhc3RUaW1lOwogICAg
IGZ1bmN0aW9uIG5leHQoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmpz
CmluZGV4IDE1OWZhMDBlMmRhLi44Mjc0YzcyNGJlNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UZXN0LmpzCkBAIC02NTcxLDYgKzY1NzEsNDcgQEAgdGVzdHMuYW5kUmV0dXJuZWRBcnJh
eVJlZiA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbXSksIDM1NCk7CiB9CiAKK3Rlc3RzLmxvZ2ljYWxNb2RlTXVsdGlw
bGVSZXR1cm5SZWFkID0gZnVuY3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAg
ICAgICB0aHJlYWQgaW50KiBmb28odGhyZWFkIGludCogeCwgdGhyZWFkIGludCogeSwgaW50IHBy
ZWRpY2F0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSA9PSAwKQorICAg
ICAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0K
KyAgICAgICAgdGhyZWFkIGludCoqIGZvbzIodGhyZWFkIGludCoqIHgsIHRocmVhZCBpbnQqKiB5
LCBpbnQgcHJlZGljYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlID09
IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICByZXR1cm4geTsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgYmFyKGludCBwcmVkaWNhdGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCB4ID0gNzsKKyAgICAgICAgICAgIGludCB5ID0gODsKKyAgICAgICAgICAgIGlu
dCB6ID0gKmZvbygmeCwgJnksIHByZWRpY2F0ZSk7CisgICAgICAgICAgICByZXR1cm4gejsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgYmFyMihpbnQgcHJlZGljYXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgeCA9IDc7CisgICAgICAgICAgICBpbnQgeSA9IDg7CisgICAgICAgICAgICB0
aHJlYWQgaW50KiBweCA9ICZ4OworICAgICAgICAgICAgdGhyZWFkIGludCogcHkgPSAmeTsKKyAg
ICAgICAgICAgIGludCB6ID0gKipmb28yKCZweCwgJnB5LCBwcmVkaWNhdGUpOworICAgICAgICAg
ICAgcmV0dXJuIHo7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICAvL2NoZWNrSW50KHByb2dyYW0s
IGNhbGxJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbG93ZXJUb0xvZ2ljYWxNb2RlRm9yVGVzdGlu
Zyhwcm9ncmFtLCAiYmFyIiksIFttYWtlSW50KHByb2dyYW0sIDApXSksIDcpOworICAgIC8vY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbElubGluZWRGdW5jdGlvbihwcm9ncmFtLCBsb3dlclRvTG9naWNh
bE1vZGVGb3JUZXN0aW5nKHByb2dyYW0sICJiYXIiKSwgW21ha2VJbnQocHJvZ3JhbSwgMSldKSwg
OCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbElubGluZWRGdW5jdGlvbihwcm9ncmFtLCBs
b3dlclRvTG9naWNhbE1vZGVGb3JUZXN0aW5nKHByb2dyYW0sICJiYXIyIiksIFttYWtlSW50KHBy
b2dyYW0sIDApXSksIDcpOworICAgIC8vY2hlY2tJbnQocHJvZ3JhbSwgY2FsbElubGluZWRGdW5j
dGlvbihwcm9ncmFtLCBsb3dlclRvTG9naWNhbE1vZGVGb3JUZXN0aW5nKHByb2dyYW0sICJiYXIy
IiksIFttYWtlSW50KHByb2dyYW0sIDEpXSksIDgpOworfQorCiBva1RvVGVzdCA9IHRydWU7CiAK
IGxldCB0ZXN0RmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV0xvZ2ljYWxFcnJvci5qcyBi
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dMb2dpY2FsRXJyb3IuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI4NWY4NTgyMzA3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV0xvZ2ljYWxFcnJvci5qcwpAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2NsYXNzIFdMb2dpY2FsRXJyb3IgZXh0ZW5kcyBFcnJvciB7Cisg
ICAgY29uc3RydWN0b3Iob3JpZ2luU3RyaW5nLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIoIlByb2dyYW0gZG9lcyBub3QgY29uZm9ybSB0byBsb2dpY2FsIG1vZGUgcnVsZXMgYXQgIiAr
IG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5vcmlnaW5TdHJp
bmcgPSBvcmlnaW5TdHJpbmc7CisgICAgICAgIHRoaXMuc3ludGF4RXJyb3JNZXNzYWdlID0gbWVz
c2FnZTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL2luZGV4Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1s
CmluZGV4IDNhN2U5NDhiZTY3Li44YzAwM2RlOWE2ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9pbmRleC5odG1sCkBAIC03OCwxMSArNzgsMTMgQEAKIDxzY3JpcHQgc3JjPSJJbnRM
aXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbnRMaXRlcmFsVHlwZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMYXRl
Q2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGV4ZXIuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxpdGVy
YWxUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9naWNhbEV4cHJlc3Np
b24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxvZ2ljYWxNb2RlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb29w
Q2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVzc2lv
bi5qcyI+PC9zY3JpcHQ+CkBAIC0xMDAsNiArMTAyLDcgQEAKIDxzY3JpcHQgc3JjPSJPcmlnaW5L
aW5kLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iUG9pbnRlclJlbW92ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByZXBhcmUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0PgpAQCAtMTA5LDYgKzExMiw3IEBA
CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iUHJvdG9jb2xSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtMTQ0LDYgKzE0OCw3IEBACiA8
c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWYXJp
YWJsZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IldMb2dpY2FsRXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IldTeW50YXhFcnJvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1RyYXBFcnJvci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1R5cGVFcnJvci5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>325450</attachid>
            <date>2017-10-31 09:28:38 -0700</date>
            <delta_ts>2017-10-31 09:34:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>39880</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwppbmRleCAzMGEwYjA5OTY1NS4uMDM1NDhi
M2NhMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTEwMSwxMSArMTAx
LDEzIEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJh
bC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMi
KTsKK2xvYWQoIkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgiTGF0ZUNoZWNrZXIu
anMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJM
aXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKIGxvYWQoIkxvZ2ljYWxFeHByZXNzaW9uLmpzIik7Cits
b2FkKCJMb2dpY2FsTW9kZS5qcyIpOwogbG9hZCgiTG9naWNhbE5vdC5qcyIpOwogbG9hZCgiTG9v
cENoZWNrZXIuanMiKTsKIGxvYWQoIk1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiKTsKQEAgLTEy
Myw2ICsxMjUsNyBAQCBsb2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiT3JpZ2luS2luZC5qcyIp
OwogbG9hZCgiT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyIpOwogbG9hZCgiUGFyc2UuanMi
KTsKK2xvYWQoIlBvaW50ZXJSZW1vdmVyLmpzIik7CiBsb2FkKCJQcmVwYXJlLmpzIik7CiBsb2Fk
KCJQcm9ncmFtLmpzIik7CiBsb2FkKCJQcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3Zl
ZC5qcyIpOwpAQCAtMTMyLDYgKzEzNSw3IEBAIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9h
ZCgiUHJvdG9jb2xGdW5jRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQo
IlB0clR5cGUuanMiKTsKK2xvYWQoIlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgi
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5q
cyIpOwogbG9hZCgiUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiKTsKQEAgLTE2Nyw2ICsxNzEsNyBA
QCBsb2FkKCJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpzIik7CiBsb2FkKCJWYXJpYWJsZURlY2wu
anMiKTsKIGxvYWQoIlZhcmlhYmxlUmVmLmpzIik7CiBsb2FkKCJWaXNpdGluZ1NldC5qcyIpOwor
bG9hZCgiV0xvZ2ljYWxFcnJvci5qcyIpOwogbG9hZCgiV1N5bnRheEVycm9yLmpzIik7CiBsb2Fk
KCJXVHJhcEVycm9yLmpzIik7CiBsb2FkKCJXVHlwZUVycm9yLmpzIik7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCmluZGV4IDQwZjVi
ZDMxY2MzLi5mMTQzNzE1ZDY1YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgQW5vbnlt
b3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CiAgICAgCiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0
dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiAr
IHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICBnZXQgdmFySXNMVmFsdWUoKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcwppbmRleCBmMGYwMzlmNTQ2Mi4uZmY3OGE1ZTU5OWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5q
cworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRnVuY3Rpb24uanMKQEAg
LTQzLDMgKzQzLDE0IEBAIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBl
QXJndW1lbnRzLCBhcmd1bWVudExpc3QpCiAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGZ1bmMu
dW5pbnN0YW50aWF0ZWRSZXR1cm5UeXBlLCByZXN1bHQpOwogfQogCitmdW5jdGlvbiBjYWxsSW5s
aW5lZEZ1bmN0aW9uKHByb2dyYW0sIGlubGluZWRGdW5jdGlvbiwgYXJndW1lbnRMaXN0KQorewor
ICAgIGxldCBhcmd1bWVudFR5cGVzID0gYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1
bWVudC50eXBlKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubGluZWRGdW5jdGlvbi5wYXJh
bWV0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGxldCB0eXBlID0gYXJndW1lbnRUeXBlc1tp
XS5pbnN0YW50aWF0ZWRUeXBlOworICAgICAgICB0eXBlLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRC
dWlsZGVyKCkpOworICAgICAgICBpbmxpbmVkRnVuY3Rpb24ucGFyYW1ldGVyc1tpXS5lUHRyLmNv
cHlGcm9tKGFyZ3VtZW50TGlzdFtpXS5lUHRyLCB0eXBlLnNpemUpOworICAgIH0KKyAgICBsZXQg
cmVzdWx0ID0gbmV3IEV2YWx1YXRvcihwcm9ncmFtKS5ydW5GdW5jKGlubGluZWRGdW5jdGlvbik7
CisgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGlubGluZWRGdW5jdGlvbi51bmluc3RhbnRpYXRl
ZFJldHVyblR5cGUsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjNlNjczNjA4ZjExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzCkBAIC0wLDAg
KzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgTEhTUmVmZXJlbmNlVHlwZXNMb3dlcmVyIGV4dGVuZHMgUmV3
cml0ZXIgeworfQorCitjbGFzcyBSZW1vdmVJbmxpbmVkTm9kZXMgZXh0ZW5kcyBSZXdyaXRlciB7
CisgICAgY29uc3RydWN0b3IoZnVuY3Rpb25MaWtlQmxvY2spCisgICAgeworICAgICAgICBzdXBl
cigpOworICAgICAgICB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jayA9IGZ1bmN0aW9uTGlrZUJsb2Nr
OworICAgIH0KKworICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZS5wdHIudmlzaXQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKChub2RlLm5hbWUuc3RhcnRz
V2l0aCgib3BlcmF0b3IuIikgJiYgIW5vZGUubmFtZS5lbmRzV2l0aCgiPSIpKSB8fCAobm9kZS5u
YW1lID09ICJvcGVyYXRvciZbXSIpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXJndW1lbnRM
aXN0WzBdLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKwor
ICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbGFzdElu
ZGV4ID0gbm9kZS5saXN0Lmxlbmd0aCAtIDE7CisgICAgICAgIGxldCBsaXN0ID0gW107CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFzdEluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBub2RlLmxpc3RbaV0udmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHJl
c3VsdCBmcm9tICIgKyBleHByZXNzaW9uKTsKKyAgICAgICAgICAgIGxpc3QucHVzaChyZXN1bHQp
OworICAgICAgICB9CisgICAgICAgIGxldCByZXN1bHQgPSBub2RlLmxpc3RbbGFzdEluZGV4XS52
aXNpdCh0aGlzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk51bGwgcmVzdWx0IGZyb20gIiArIGV4cHJlc3Npb24pOworICAgICAgICBsaXN0LnB1
c2gocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIGxpc3QpOworICAgIH0KKworICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jazsKKyAgICB9Cit9CisK
K2NsYXNzIEN1c3RvbUxIU1Jld3JpdGVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIF9maW5kSW5u
ZXJGdW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgLy8gKihhLCBmb28oKSkg
PSBiYXIgLi4uIHJldHVybiBiYXogPT4gKmJheiA9IGJhcgorICAgICAgICAvLyAqKGEsIChiLCAq
Zm9vKCkpKSA9IGJhciAuLi4gKGEsIChiLCBmb28oKSkpCisgICAgICAgIGxldCBvcGVyYXRpb25z
ID0gW107CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnB0cjsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobm9k
ZSBpbnN0YW5jZW9mIENhbGxFeHByZXNzaW9uKSAmJiAoKG5vZGUubmFtZS5zdGFydHNXaXRoKCJv
cGVyYXRvci4iKSAmJiAhbm9kZS5uYW1lLmVuZHNXaXRoKCI9IikpIHx8IChub2RlLm5hbWUgPT0g
Im9wZXJhdG9yJltdIikpKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKG5vZGUp
OworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmFyZ3VtZW50TGlzdFswXTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgSWRlbnRpdHlFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUudGFyZ2V0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb21tYUV4cHJlc3Npb24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5saXN0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmxpc3Rbbm9kZS5s
aXN0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTGlrZUJsb2NrKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB7ZnVuY3Rpb25MaWtlQmxvY2s6IG5vZGUsIG9wZXJhdGlvbnM6IG9wZXJhdGlvbnN9Owor
ICAgIH0KKyAgICAKKyAgICBfaW5saW5lTm9kZXMob3JpZ2luYWxBc3NpZ25tZW50LCBmdW5jdGlv
bkxpa2VCbG9jaywgb3BlcmF0aW9ucykKKyAgICB7CisgICAgICAgIGNsYXNzIFJld3JpdGVTaW5n
bGVGdW5jdGlvbkxpa2VCbG9jayBleHRlbmRzIFJld3JpdGVyIHsKKyAgICAgICAgICAgIGNvbnN0
cnVjdG9yKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBlcigpOworICAgICAg
ICAgICAgICAgIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudCA9IG9yaWdpbmFsQXNzaWdubWVudDsK
KyAgICAgICAgICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3V0ZXJGdW5jdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisgICAgICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBOb2RlLnZpc2l0KHRoaXMuX29yaWdpbmFsQXNz
aWdubWVudC50eXBlLCB0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRo
aXMpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQucmV0dXJuRVB0ciA9IG5vZGUucmV0dXJuRVB0cjsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlz
aXRSZXR1cm4obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZXQgcHRyID0g
bm9kZS52YWx1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gb3BlcmF0aW9ucy5zaXpl
KCkgLSAxOyBpID49IDA7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3IERlcmVmZXJlbmNlRXhw
cmVzc2lvbihvcGVyYXRpb24ub3JpZ2luLCBwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Tm9kZS50eXBlID0gTm9kZS52aXNpdChvcGVyYXRpb24udHlwZSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdOb2RlLmFkZHJlc3NTcGFjZSA9IG9wZXJhdGlvbi5hZGRyZXNz
U3BhY2U7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENh
bGxFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJndW1lbnRMaXN0
ID0gW3B0cl07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IG9w
ZXJhdGlvbi5hcmd1bWVudExpc3QubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRMaXN0LnB1c2goTm9kZS52aXNpdChvcGVyYXRpb24uYXJndW1lbnRMaXN0
W2pdLCB0aGlzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXcgQ2FsbEV4
cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLm9yaWdpbiwg
b3BlcmF0aW9uLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnR5
cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdOb2RlID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKG9wZXJh
dGlvbiwgbmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgcHRyID0gbmV3Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV0
IGFzc2lnbm1lbnQgPSBuZXcgQXNzaWdubWVudCh0aGlzLl9vcmlnaW5hbEFzc2lnbm1lbnQub3Jp
Z2luLCBwdHIsIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudC5yaHMpOworICAgICAgICAgICAgICAg
IGFzc2lnbm1lbnQudHlwZSA9IE5vZGUudmlzaXQodGhpcy5fb3JpZ2luYWxBc3NpZ25tZW50LnR5
cGUsIHRoaXMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2lu
LCBhc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZnVuY3Rpb25MaWtlQmxvY2sudmlzaXQobmV3IFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9j
aygpKTsKKyAgICB9CisKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkgeworICAgICAgICAvLyAq
YSgpID0gKCpiKCkgPSBjKQorICAgICAgICBub2RlID0gc3VwZXIudmlzaXRBc3NpZ25tZW50KG5v
ZGUpOworICAgICAgICBsZXQgZnVuY3Rpb25MaWtlQmxvY2sgPSB0aGlzLl9maW5kSW5uZXJGdW5j
dGlvbkxpa2VCbG9jayhub2RlLmxocyk7CisgICAgICAgIGlmICghZnVuY3Rpb25MaWtlQmxvY2sp
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgbGV0IG5ld0Z1bmN0aW9uTGlrZUJs
b2NrID0gdGhpcy5faW5saW5lTm9kZXMobm9kZSwgZnVuY3Rpb25MaWtlQmxvY2suZnVuY3Rpb25M
aWtlQmxvY2ssIGZ1bmN0aW9uTGlrZUJsb2NrLm9wZXJhdGlvbnMpOworICAgICAgICByZXR1cm4g
bm9kZS5saHMudmlzaXQobmV3IFJlbW92ZUlubGluZWROb2RlcyhuZXdGdW5jdGlvbkxpa2VCbG9j
aykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0xvZ2ljYWxNb2RlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNhbE1v
ZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEzMTI1NTMwNmY1
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNh
bE1vZGUuanMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsb3dlclRvTG9naWNhbE1v
ZGUocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzdWx0ID0gW107CisgICAgZm9yIChsZXQgZnVuY3Rp
b25zIG9mIHByb2dyYW0uZnVuY3Rpb25zKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVu
Y3Rpb25zWzFdKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmMuc2hhZGVyVHlwZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9n
cmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKGZ1bmMsIFtdKTsKKyAgICAgICAgICAgIF9p
bmxpbmVGdW5jdGlvbihwcm9ncmFtLCBpbmxpbmVkU2hhZGVyLCBuZXcgVmlzaXRpbmdTZXQoZnVu
YykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNo
YWRlci52aXNpdChuZXcgQ3VzdG9tUkhTUmV3cml0ZXIobmV3IFJIU1JlZmVyZW5jZVR5cGVzTG93
ZXJlcigpKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNoYWRlci52aXNp
dChuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0g
aW5saW5lZFNoYWRlci52aXNpdChuZXcgUG9pbnRlclJlbW92ZXIoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlubGluZWRTaGFkZXIpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGxvd2VyVG9Mb2dpY2FsTW9kZUZv
clRlc3RpbmcocHJvZ3JhbSwgZnVuY3Rpb25OYW1lKQoreworICAgIGxldCByZXN1bHQgPSBbXTsK
KyAgICBsZXQgZnVuYyA9IHByb2dyYW0uZnVuY3Rpb25zLmdldChmdW5jdGlvbk5hbWUpWzBdOwor
CisgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5p
cXVlKGZ1bmMsIFtdKTsKKyAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgaW5saW5lZFNoYWRl
ciwgbmV3IFZpc2l0aW5nU2V0KGZ1bmMpKTsKKyAgICAKKyAgICBpbmxpbmVkU2hhZGVyLnJld3Jp
dGUobmV3IEN1c3RvbVJIU1Jld3JpdGVyKG5ldyBSSFNSZWZlcmVuY2VUeXBlc0xvd2VyZXIoKSkp
OworICAgIGlubGluZWRTaGFkZXIucmV3cml0ZShuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7Cisg
ICAgaW5saW5lZFNoYWRlci5yZXdyaXRlKG5ldyBQb2ludGVyUmVtb3ZlcigpKTsKKyAgICAgICAg
ICAgIAorICAgIHJldHVybiBpbmxpbmVkU2hhZGVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUG9pbnRlclJlbW92ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYTkzMDQ0MTA3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpAQCAtMCwwICsxLDIxNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmljdCI7
CisKK2NsYXNzIFBvaW50ZXJSZW1vdmVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX21hcCA9IG5ldyBN
YXAoKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBBcnJheVJlZnMuCisgICAgfQorCisg
ICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1
bHQgPSBzdXBlci52aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgdGhpcy5fbWFw
LnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5vZGUudGFyZ2V0KSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgIHsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSk7
CisgICAgICAgIGlmIChyZXN1bHQubFZhbHVlKQorICAgICAgICAgICAgdGhpcy5fbWFwLnNldChu
b2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbWFw
LnNldChub2RlLCBub2RlLmxWYWx1ZSk7CisgICAgfQorCisgICAgdmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUs
IHJlc3VsdC5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0RGVyZWZl
cmVuY2VFeHByZXNzaW9uKG5vZGUpOworICAgICAgICByZXN1bHQgPSB0aGlzLl9tYXAuZ2V0KHJl
c3VsdC5wdHIpOworICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkKKyAgICAgICAgICAg
IHJlc3VsdCA9IHRoaXMuX21hcC5nZXQobm9kZS5wdHIpOworICAgICAgICBpZiAocmVzdWx0ID09
IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXTG9naWNhbEVycm9yKCJDYW5ub3Qg
c3RhdGljYWxseSBkZXRlcm1pbmUgd2hpY2ggdmFsdWUgd2UgYXJlIGRlcmVmZXJlbmNpbmcuIik7
CisgICAgICAgIHRoaXMuX21hcC5zZXQobm9kZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB2aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgbGV0IGxpc3QgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgZXhwcmVzc2lvbiBvZiBub2Rl
Lmxpc3QpIHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBleHByZXNzaW9uLnZpc2l0KHRoaXMp
OworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAg
bGlzdC5wdXNoKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09
IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQ29tbWFF
eHByZXNzaW9uKG5vZGUub3JpZ2luLCBsaXN0KTsKKyAgICAgICAgdGhpcy5fbWFwLnNldChub2Rl
LCB0aGlzLl9tYXAuZ2V0KG5vZGUubGlzdFtub2RlLmxpc3QubGVuZ3RoIC0gMV0pKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRCbG9jayhub2RlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBCbG9jayhub2RlLm9yaWdpbik7CisgICAgICAg
IGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnN0YXRlbWVudHMpIHsKKyAgICAgICAgICAgIGxl
dCBuZXdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgICAgICBpZiAo
bmV3U3RhdGVtZW50ICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5l
d1N0YXRlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBu
b2RlLnR5cGU7CisgICAgICAgIHdoaWxlICh0eXBlIGluc3RhbmNlb2YgVHlwZVJlZikKKyAgICAg
ICAgICAgIHR5cGUgPSB0eXBlLnR5cGU7CisgICAgICAgIGlmICgodHlwZSBpbnN0YW5jZW9mIFB0
clR5cGUpIHx8ICh0eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkgeworICAgICAgICAgICAg
bm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQo
bm9kZSwgdGhpcy5fbWFwLmdldChub2RlLmluaXRpYWxpemVyKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0VmFyaWFibGVEZWNsKG5v
ZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKKyAgICB7CisgICAg
ICAgIGNsYXNzIFBvaW50ZXJGaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgICAgIHZp
c2l0UHRyVHlwZShub2RlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dpY2FsRXJy
b3IoIkNhbm5vdCBhc3NpZ24gdG8gYSBwb2ludGVyIGluIGxvZ2ljYWwgbW9kZS4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsZXQgdHlwZSA9IG5vZGUudHlwZTsKKyAgICAg
ICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmKQorICAgICAgICAgICAgdHlwZSA9IHR5
cGUudHlwZTsKKyAgICAgICAgdHlwZS52aXNpdChuZXcgUG9pbnRlckZpbmRlcigpKTsKKyAgICAg
ICAgc3VwZXIudmlzaXRBc3NpZ25tZW50KG5vZGUpOworICAgIH0KKworICAgIHZpc2l0VmFyaWFi
bGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdFZhcmlh
YmxlUmVmKG5vZGUpOworICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMuX21hcC5nZXQo
bm9kZS52YXJpYWJsZSkpOworICAgICAgICBsZXQgdHlwZSA9IG5vZGUudmFyaWFibGUudHlwZTsK
KyAgICAgICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmKQorICAgICAgICAgICAgdHlw
ZSA9IHR5cGUudHlwZTsKKyAgICAgICAgaWYgKCh0eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgfHwg
KHR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpc2l0Q29udmVydFB0clRvQXJyYXlS
ZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlz
aXRDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIHRoaXMuX21h
cC5zZXQobm9kZSwgcmVzdWx0LmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY3Rp
b25MaWtlQmxvY2sobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBhcmd1bWVudExpc3QgPSBbXTsK
KyAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGUu
cGFyYW1ldGVyc1tpXS50eXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgeworICAgICAgICAgICAgICAg
IG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgICAgIHRoaXMu
X21hcC5zZXQobm9kZS5wYXJhbWV0ZXJzW2ldLCB0aGlzLl9tYXAuZ2V0KG5vZGUuYXJndW1lbnRM
aXN0W2ldKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50
TGlzdC5wdXNoKG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLnB1c2gobm9kZS5wYXJhbWV0ZXJzW2ldLnZpc2l0KHRoaXMpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxldCBuZXdCb2R5ID0gbm9kZS5ib2R5
LnZpc2l0KHRoaXMpOworCisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUgaW5zdGFuY2VvZiBQ
dHJUeXBlKSB7CisgICAgICAgICAgICBsZXQgcmV0dXJuRXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IGNsYXNzIEZpbmRSZXR1cm4gZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgICAgICAgICB2aXNp
dFJldHVybihub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5FeHByZXNzaW9u
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dpY2FsRXJyb3IoIk11bHRp
cGxlIHJldHVybiB2YWx1ZXMgZm91bmQgaW4gbG9naWNhbCBtb2RlIHByb2dyYW0uIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybkV4cHJlc3Npb24gPSBub2RlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkgeworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld0JvZHkudmlzaXQo
bmV3IEZpbmRSZXR1cm4oKSk7CisgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMu
X21hcC5nZXQocmV0dXJuRXhwcmVzc2lvbi52YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAorICAgICAgICAgICAg
bm9kZS5vcmlnaW4sCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhp
cyksCisgICAgICAgICAgICBhcmd1bWVudExpc3QsCisgICAgICAgICAgICBwYXJhbWV0ZXJzLAor
ICAgICAgICAgICAgbmV3Qm9keSk7CisgICAgICAgIHJlc3VsdC5yZXR1cm5FUHRyID0gbm9kZS5y
ZXR1cm5FUHRyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpc2l0Q2Fs
bEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZ1bmMuaXNGaWVsZENv
bnN0cnVjdG9yKSB7CisgICAgICAgICAgICBsZXQgbWFwID0gbmV3IE1hcCgpOworICAgICAgICAg
ICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLmZ1bmMucmV0dXJuVHlwZS50eXBlOworICAgICAgICAg
ICAgbGV0IGZpZWxkcyA9IEFycmF5LmZyb20oc3RydWN0VHlwZS5maWVsZHMpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGxldCBmaWVsZFR5cGUgPSBmaWVsZHNbaV0udHlwZTsKKyAgICAgICAg
ICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFtpXS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtYXAuc2V0KGZpZWxkc1tpXS5uYW1lLCB0aGlzLl9wb2ludGVyTWFwLmdldChub2RlLmFyZ3Vt
ZW50TGlzdFtpXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fbWFwLnNldChu
b2RlLCBtYXApOworICAgICAgICAgICAgLy8gRklYTUU6IEVtaXQgYSBuZXcgQ2FsbEV4cHJlc3Np
b24gd2l0aCB0aGUgcG9pbnRlciBhcmd1bWVudHMgcmVtb3ZlZC4KKyAgICAgICAgfSBlbHNlIGlm
IChub2RlLmZ1bmMubmFtZS5zdGFydHNXaXRoKCJvcGVyYXRvci4iKSAmJiAhbm9kZS5mdW5jLm5h
bWUuZW5kc1dpdGgoIj0iKSAmJiAobm9kZS5mdW5jLnJldHVyblR5cGUgaW5zdGFuY2VvZiBQdHJU
eXBlKSkgeworICAgICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IG5vZGUuZnVuYy5uYW1lLnN1YnN0
cmluZygib3BlcmF0b3IuIi5sZW5ndGgpOworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVy
LnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICByZXN1bHQgPSB0aGlzLl9t
YXAuZ2V0KHJlc3VsdC5hcmd1bWVudExpc3RbMF0pLmdldChmaWVsZE5hbWUpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdM
b2dpY2FsRXJyb3IoIkNhbm5vdCBmaW5kIGZpZWxkIHBvaW50ZXIgdmFsdWUuIik7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
aW5kZXggZXhwcmVzc2lvbnMgd2l0aCBjb25zdGV4cHIgaW5kaWNlcy4KKyAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSBzbGljZXMuCisgICAgICAgIHJldHVybiBzdXBlci52aXNpdENhbGxFeHByZXNz
aW9uKG5vZGUpOworICAgIH0KKworICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IDApCisgICAgICAgICAgICB0
aHJvdyBuZXcgV0xvZ2ljYWxFcnJvcigiU3RydWN0cyBzaG91bGQgbm90IGhhdmUgdHlwZSBwYXJh
bWV0ZXJzIHdoZW4gcGVyZm9ybWluZyBMb2dpY2FsIE1vZGUgcmV3cml0aW5nISIpOworICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9k
ZS50eXBlUGFyYW1ldGVycyk7CisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIG5vZGUuZmllbGRz
LmZpbHRlcihmaWVsZCA9PiAhKGZpZWxkLnR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSAmJiAhKGZp
ZWxkLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSkKKyAgICAgICAgICAgIHJlc3VsdC5h
ZGQoZmllbGQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyBi
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JIU0xvZ2ljYWxNb2RlSW5saW5lci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDVhOWRlOTFhZGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SSFNMb2dpY2FsTW9k
ZUlubGluZXIuanMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworInVzZSBzdHJpY3QiOworCisvLyBkb1ByZXAoInRocmVhZCBpbnQq
IGZvbyh0aHJlYWQgaW50KiB4KSB7IHJldHVybiB4OyB9IHZvaWQgYmFyKCkgeyBpbnQgeDsgaW50
IHkgPSAqZm9vKCZ4KTsgfSIpCisvLyBkb1ByZXAoInN0cnVjdCBGb28geyBpbnQgeDsgaW50IHk7
IH0gRm9vIGZvbygpIHsgcmV0dXJuIEZvbygzLCA0KTsgfSB2b2lkIGJhcigpIHsgaW50IHggPSBm
b28oKS54OyB9IikKKy8vIGRvUHJlcCgidGhyZWFkIGludFtdIGZvbyh0aHJlYWQgaW50W10geCkg
eyByZXR1cm4geDsgfSB2b2lkIGJhcigpIHsgaW50WzFdIHg7IGludCB5ID0gZm9vKEB4KVswXTsg
fSIpCisKK2NsYXNzIFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9jayBleHRlbmRzIFJld3Jp
dGVyIHsKKyAgICBjb25zdHJ1Y3RvcihtYXApCisgICAgeworICAgICAgICBzdXBlcihtYXApOwor
ICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgfQorCisgICAgdmlzaXRG
dW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX291dGVyRnVu
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbm9kZS52aXNpdChuZXcgUmV3cml0ZXIoKSk7Cisg
ICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSB0cnVlOworICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAorICAgICAgICAgICAgbm9kZS5vcmlnaW4sCisgICAgICAg
ICAgICBOb2RlLnZpc2l0KHRoaXMuX3JldHVyblR5cGUobm9kZSksIHRoaXMpLAorICAgICAgICAg
ICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMp
KSwKKyAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRl
ci52aXNpdCh0aGlzKSksCisgICAgICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcykpOworICAg
ICAgICByZXN1bHQucmV0dXJuRVB0ciA9IG5vZGUucmV0dXJuRVB0cjsKKyAgICAgICAgdGhpcy5f
b3V0ZXJGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30K
KworY2xhc3MgSW5saW5lRGVyZWZlcmVuY2UgZXh0ZW5kcyBSZXdyaXRlU2luZ2xlRnVuY3Rpb25M
aWtlQmxvY2sgeworICAgIGNvbnN0cnVjdG9yKG1hcCwgZGVyZWZlcmVuY2UpCisgICAgeworICAg
ICAgICBzdXBlcihtYXApOworICAgICAgICB0aGlzLl9kZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNl
OworICAgIH0KKyAgICAKKyAgICBfcmV0dXJuVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5vZGUucmV0dXJuVHlwZS5lbGVtZW50VHlwZTsKKyAgICB9CisKKyAgICB2aXNpdFJldHVy
bihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld0RlcmVmZXJlbmNlID0gbmV3IERlcmVmZXJl
bmNlRXhwcmVzc2lvbih0aGlzLl9kZXJlZmVyZW5jZS5vcmlnaW4sIE5vZGUudmlzaXQobm9kZS52
YWx1ZSwgdGhpcykpOworICAgICAgICBuZXdEZXJlZmVyZW5jZS50eXBlID0gTm9kZS52aXNpdCh0
aGlzLl9kZXJlZmVyZW5jZS50eXBlLCB0aGlzKTsKKyAgICAgICAgbmV3RGVyZWZlcmVuY2UuYWRk
cmVzc1NwYWNlID0gdGhpcy5fZGVyZWZlcmVuY2UuYWRkcmVzc1NwYWNlOworICAgICAgICByZXR1
cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbmV3RGVyZWZlcmVuY2UpOworICAgIH0KK30KKwor
Y2xhc3MgSW5saW5lR2V0dGVyIGV4dGVuZHMgUmV3cml0ZVNpbmdsZUZ1bmN0aW9uTGlrZUJsb2Nr
IHsKKyAgICBjb25zdHJ1Y3RvcihtYXAsIGdldHRlciwgdHlwZSkKKyAgICB7CisgICAgICAgIHN1
cGVyKG1hcCk7CisgICAgICAgIHRoaXMuX2dldHRlciA9IGdldHRlcjsKKyAgICAgICAgdGhpcy5f
dHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIF9yZXR1cm5UeXBlKG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICB9CisKKyAgICB2aXNpdFJldHVybihub2Rl
KQorICAgIHsKKyAgICAgICAgbGV0IG5ld0dldHRlciA9IG5ldyBDYWxsRXhwcmVzc2lvbigKKyAg
ICAgICAgICAgIHRoaXMuX2dldHRlci5vcmlnaW4sIHRoaXMuX2dldHRlci5uYW1lLAorICAgICAg
ICAgICAgdGhpcy5fZ2V0dGVyLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBl
QXJndW1lbnQudmlzaXQodGhpcykpLAorICAgICAgICAgICAgW05vZGUudmlzaXQobm9kZS52YWx1
ZSwgdGhpcyldKTsKKyAgICAgICAgbmV3R2V0dGVyID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxE
YXRhKHRoaXMuX2dldHRlciwgbmV3R2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4o
bm9kZS5vcmlnaW4sIG5ld0dldHRlcik7CisgICAgfQorfQorCitjbGFzcyBJbmxpbmVTdWJzY3Jp
cHQgZXh0ZW5kcyBSZXdyaXRlU2luZ2xlRnVuY3Rpb25MaWtlQmxvY2sgeworICAgIGNvbnN0cnVj
dG9yKG1hcCwgc3Vic2NyaXB0KQorICAgIHsKKyAgICAgICAgc3VwZXIobWFwKTsKKyAgICAgICAg
dGhpcy5fc3Vic2NyaXB0ID0gc3Vic2NyaXB0OworICAgIH0KKyAgICAKKyAgICBfcmV0dXJuVHlw
ZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUucmV0dXJuVHlwZS5lbGVtZW50VHlw
ZTsKKyAgICB9CisKKyAgICB2aXNpdFJldHVybihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5l
d1N1YnNjcmlwdCA9IG5ldyBDYWxsRXhwcmVzc2lvbigKKyAgICAgICAgICAgIHRoaXMuX3N1YnNj
cmlwdC5vcmlnaW4sIHRoaXMuX3N1YnNjcmlwdC5uYW1lLAorICAgICAgICAgICAgdGhpcy5fc3Vi
c2NyaXB0LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlz
aXQodGhpcykpLAorICAgICAgICAgICAgW05vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyksIE5v
ZGUudmlzaXQodGhpcy5fc3Vic2NyaXB0LmFyZ3VtZW50TGlzdFsxXSwgdGhpcyldKTsKKyAgICAg
ICAgbmV3U3Vic2NyaXB0ID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKHRoaXMuX3N1YnNj
cmlwdCwgbmV3U3Vic2NyaXB0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmln
aW4sIG5ld1N1YnNjcmlwdCk7CisgICAgfQorfQorCitjbGFzcyBSSFNSZWZlcmVuY2VUeXBlc0xv
d2VyZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgX2ZpbmRJbm5lckZ1bmN0aW9uTGlrZUJsb2Nr
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgZGVlcGVzdENvbW1hOworICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIElkZW50aXR5RXhwcmVz
c2lvbikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnRhcmdldDsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlIGluc3Rh
bmNlb2YgQ29tbWFFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdC5s
ZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICBkZWVwZXN0Q29tbWEgPSBub2RlOworICAgICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLmxpc3Rbbm9kZS5saXN0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEZ1bmN0
aW9uTGlrZUJsb2NrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtkZWVwZXN0Q29tbWEsIGZ1
bmN0aW9uTGlrZUJsb2NrOiBub2RlfTsKKyAgICB9CisgICAgCisgICAgX2lubGluZVZhbHVlSW50
b0Z1bmN0aW9uTGlrZUJsb2NrKHJlc3VsdCwgaW5uZXJWYWx1ZSwgc3Vic3RpdHV0aW9uKQorICAg
IHsKKyAgICAgICAgbGV0IGlubmVyRnVuY3Rpb25MaWtlQmxvY2sgPSB0aGlzLl9maW5kSW5uZXJG
dW5jdGlvbkxpa2VCbG9jayhpbm5lclZhbHVlKHJlc3VsdCkpOworICAgIAorICAgICAgICBpZiAo
IWlubmVyRnVuY3Rpb25MaWtlQmxvY2spCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisg
ICAgICAgIGxldCBuZXdGdW5jdGlvbiA9IGlubmVyRnVuY3Rpb25MaWtlQmxvY2suZnVuY3Rpb25M
aWtlQmxvY2sudmlzaXQoc3Vic3RpdHV0aW9uKGlubmVyRnVuY3Rpb25MaWtlQmxvY2suZnVuY3Rp
b25MaWtlQmxvY2spKTsKKyAgICAgICAgaWYgKGlubmVyRnVuY3Rpb25MaWtlQmxvY2suZGVlcGVz
dENvbW1hKSB7CisgICAgICAgICAgICBpbm5lckZ1bmN0aW9uTGlrZUJsb2NrLmRlZXBlc3RDb21t
YS5saXN0W2lubmVyRnVuY3Rpb25MaWtlQmxvY2suZGVlcGVzdENvbW1hLmxpc3QubGVuZ3RoIC0g
MV0gPSBuZXdGdW5jdGlvbjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQucHRyOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBuZXdGdW5jdGlvbjsKKyAgICB9CisKKyAgICB2aXNpdERlcmVm
ZXJlbmNlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lubGlu
ZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHN1cGVyLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNz
aW9uKG5vZGUpLCByZXN1bHQgPT4gcmVzdWx0LnB0ciwgZnVuY3Rpb25MaWtlQmxvY2sgPT4gbmV3
IElubGluZURlcmVmZXJlbmNlKHRoaXMubWFwLCBub2RlKSk7CisgICAgfQorCisgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUubmFtZS5zdGFydHNX
aXRoKCJvcGVyYXRvci4iKSAmJiAhbm9kZS5uYW1lLmVuZHNXaXRoKCI9IikpIHsKKyAgICAgICAg
ICAgIC8vIFVzZXItYXV0aG9yZWQgZnVuY3Rpb25zIHdpbGwgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQg
dG8gRnVuY3Rpb25MaWtlQmxvY2tzLCBzbworICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG9ubHkg
Y2F0Y2ggbmF0aXZlIGZpZWxkIGdldHRlcnMuCisgICAgICAgICAgICBsZXQgZmllbGROYW1lID0g
bm9kZS5uYW1lLnN1YnN0cmluZygib3BlcmF0b3IuIi5sZW5ndGgpOworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2lubGluZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHN1cGVyLnZpc2l0Q2Fs
bEV4cHJlc3Npb24obm9kZSksIHJlc3VsdCA9PiByZXN1bHQuYXJndW1lbnRMaXN0WzBdLCBmdW5j
dGlvbkxpa2VCbG9jayA9PiBuZXcgSW5saW5lR2V0dGVyKHRoaXMubWFwLCBub2RlLCBmdW5jdGlv
bkxpa2VCbG9jay5yZXR1cm5UeXBlLmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkudHlwZSkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ImW10iKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2lubGluZVZhbHVlSW50b0Z1bmN0aW9uTGlrZUJsb2NrKHN1cGVy
LnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSksIHJlc3VsdCA9PiByZXN1bHQuYXJndW1lbnRMaXN0
WzBdLCBmdW5jdGlvbkxpa2VCbG9jayA9PiBuZXcgSW5saW5lU3Vic2NyaXB0KHRoaXMubWFwLCBu
b2RlKSk7CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7
CisgICAgfQorfQorCitjbGFzcyBDdXN0b21SSFNSZXdyaXRlciBleHRlbmRzIFJld3JpdGVyIHsK
KyAgICBjb25zdHJ1Y3Rvcihpbm5lclJld3JpdGVyKQorICAgIHsKKyAgICAgICAgc3VwZXIoaW5u
ZXJSZXdyaXRlci5tYXApOworICAgICAgICB0aGlzLl9jdXJyZW50RGVwdGggPSAwOworICAgICAg
ICB0aGlzLl9tYXhEZXB0aCA9IDA7CisgICAgICAgIHRoaXMuX2lubmVyUmV3cml0ZXIgPSBpbm5l
clJld3JpdGVyOworICAgIH0KKworICAgIHZpc2l0QXNzaWdubWVudChub2RlKSB7CisgICAgICAg
ICsrdGhpcy5fY3VycmVudERlcHRoOworICAgICAgICB0aGlzLl9tYXhEZXB0aCA9IE1hdGgubWF4
KHRoaXMuX2N1cnJlbnREZXB0aCwgdGhpcy5fbWF4RGVwdGgpOworICAgICAgICBsZXQgcmVzdWx0
ID0gc3VwZXIudmlzaXRBc3NpZ25tZW50KG5vZGUpOworICAgICAgICBpZiAodGhpcy5fbWF4RGVw
dGggPT0gdGhpcy5fY3VycmVudERlcHRoKSB7CisgICAgICAgICAgICAvLyBJJ20gdGhlIGlubmVy
bW9zdCBBc3NpZ25tZW50LgorICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFzc2lnbm1lbnQobm9k
ZS5vcmlnaW4sIHJlc3VsdC5saHMsIG5vZGUucmhzLnZpc2l0KHRoaXMuX2lubmVyUmV3cml0ZXIp
KTsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMp
OworICAgICAgICB9CisgICAgICAgIC0tdGhpcy5fY3VycmVudERlcHRoOworICAgICAgICBpZiAo
dGhpcy5fY3VycmVudERlcHRoID09IDApCisgICAgICAgICAgICB0aGlzLl9tYXhEZXB0aCA9IDA7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRWYXJpYWJsZURlY2wo
bm9kZSkgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlRGVjbCgKKyAgICAgICAg
ICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCisgICAgICAgICAgICBub2RlLnR5cGUudmlzaXQo
dGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMuX2lu
bmVyUmV3cml0ZXIpKTsKKyAgICAgICAgdGhpcy5fbWFwTm9kZShub2RlLCByZXN1bHQpOworICAg
ICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRl
ci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCmluZGV4IDY0
NmQwNmJiNzZlLi4wYjU0ZmEwYTBmMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmV3cml0ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMKQEAgLTI4LDkgKzI4LDE3IEBACiAvLyBub3cgd2UgYXJlIGhhY2tpc2hseSBw
cmV2ZW50aW5nIHRoaXMgYnkgd3JhcHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRoYXQncyBwcm9i
YWJseSB3cm9uZy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzYyMDgKIGNsYXNzIFJld3JpdGVyIHsKLSAgICBjb25zdHJ1Y3RvcigpCisgICAgY29uc3RydWN0
b3IobWFwcGluZykKICAgICB7Ci0gICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcgTWFwKCk7Cisg
ICAgICAgIGlmIChtYXBwaW5nKQorICAgICAgICAgICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcgTWFwKCk7Cisg
ICAgfQorICAgIAorICAgIGdldCBtYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21h
cHBpbmc7CiAgICAgfQogICAgIAogICAgIF9tYXBOb2RlKG9sZEl0ZW0sIG5ld0l0ZW0pCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAppbmRleCBkMTczZjdlNzI1MS4uNmVj
MmYzODkxOGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJW
Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAt
ODQsMTEgKzg0LDEzIEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ikxh
dGVDaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTGV4ZXIuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTG9naWNhbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMb2dp
Y2FsTW9kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxOb3QuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgpAQCAtMTA2
LDYgKzEwOCw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iT3JpZ2luS2luZC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlBvaW50ZXJSZW1vdmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJlcGFy
ZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3BlcnR5UmVzb2x2ZXIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KQEAgLTExNSw2
ICsxMTgsNyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSSFNM
b2dpY2FsTW9kZUlubGluZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUmVjdXJz
aW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmpzIj48L3NjcmlwdD4KQEAgLTE1NCw2ICsxNTgsNyBAQCB0ZCB7CiAgICAgPHNjcmlw
dCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZhcmlh
YmxlUmVmLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXTG9naWNhbEVycm9yLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iV1N5bnRheEVycm9yLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iV1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IldUeXBlRXJyb3Iu
anMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCmluZGV4
IDMyMGZiYTk5ZDU1Li4xYjEyYjFiMWU0OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuaHRtbApAQCAtNzgsMTEgKzc4LDEzIEBACiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkludHJpbnNpY3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxIU0xv
Z2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGF0ZUNoZWNrZXIu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxleGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMaXRlcmFsVHlwZUNo
ZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxvZ2ljYWxFeHByZXNzaW9uLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJMb2dpY2FsTW9kZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9vcENoZWNrZXIu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiPjwv
c2NyaXB0PgpAQCAtMTAwLDYgKzEwMiw3IEBACiA8c2NyaXB0IHNyYz0iT3JpZ2luS2luZC5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlBv
aW50ZXJSZW1vdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KQEAgLTEwOSw2ICsxMTIsNyBAQAogPHNjcmlw
dCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3Rv
Y29sUmVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQdHJUeXBlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJSSFNMb2dpY2FsTW9kZUlubGluZXIuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KQEAgLTE0NCw2ICsxNDgsNyBAQAogPHNjcmlwdCBz
cmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmFyaWFibGVSZWYu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJXTG9naWNhbEVycm9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJXU3lu
dGF4RXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldUcmFwRXJyb3IuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMiPjwvc2NyaXB0PgpAQCAtMTU1LDcgKzE2
MCw3IEBACiA8c2NyaXB0PgogZnVuY3Rpb24gZG9UZXN0SW5Ccm93c2VyKCkKIHsKLSAgICB2YXIg
dGVzdGVyID0gZG9UZXN0KC8uKi8pOworICAgIHZhciB0ZXN0ZXIgPSBkb1Rlc3QoL2xvZ2ljYWxN
b2RlTXVsdGlwbGVSZXR1cm5SZWFkLyk7CiAgICAgdmFyIGxhc3RUaW1lOwogICAgIGZ1bmN0aW9u
IG5leHQoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCmluZGV4IDE1
OWZhMDBlMmRhLi4xZWQwODE5MTRlZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzCkBAIC02NTcxLDYgKzY1NzEsNDcgQEAgdGVzdHMuYW5kUmV0dXJuZWRBcnJheVJlZiA9IGZ1
bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbXSksIDM1NCk7CiB9CiAKK3Rlc3RzLmxvZ2ljYWxNb2RlTXVsdGlwbGVSZXR1cm5S
ZWFkID0gZnVuY3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
c3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICB0aHJl
YWQgaW50KiBmb28odGhyZWFkIGludCogeCwgdGhyZWFkIGludCogeSwgaW50IHByZWRpY2F0ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSA9PSAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiB4OworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAgICAg
dGhyZWFkIGludCoqIGZvbzIodGhyZWFkIGludCoqIHgsIHRocmVhZCBpbnQqKiB5LCBpbnQgcHJl
ZGljYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlID09IDApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgYmFyKGludCBwcmVkaWNhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCB4ID0gNzsKKyAgICAgICAgICAgIGludCB5ID0gODsKKyAgICAgICAgICAgIGludCB6ID0gKmZv
bygmeCwgJnksIHByZWRpY2F0ZSk7CisgICAgICAgICAgICByZXR1cm4gejsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgYmFyMihpbnQgcHJlZGljYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgeCA9IDc7CisgICAgICAgICAgICBpbnQgeSA9IDg7CisgICAgICAgICAgICB0aHJlYWQgaW50
KiBweCA9ICZ4OworICAgICAgICAgICAgdGhyZWFkIGludCogcHkgPSAmeTsKKyAgICAgICAgICAg
IGludCB6ID0gKipmb28yKCZweCwgJnB5LCBwcmVkaWNhdGUpOworICAgICAgICAgICAgcmV0dXJu
IHo7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsSW5saW5l
ZEZ1bmN0aW9uKHByb2dyYW0sIGxvd2VyVG9Mb2dpY2FsTW9kZUZvclRlc3RpbmcocHJvZ3JhbSwg
ImJhciIpLCBbbWFrZUludChwcm9ncmFtLCAwKV0pLCA3KTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsSW5saW5lZEZ1bmN0aW9uKHByb2dyYW0sIGxvd2VyVG9Mb2dpY2FsTW9kZUZvclRlc3Rp
bmcocHJvZ3JhbSwgImJhciIpLCBbbWFrZUludChwcm9ncmFtLCAxKV0pLCA4KTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsSW5saW5lZEZ1bmN0aW9uKHByb2dyYW0sIGxvd2VyVG9Mb2dpY2Fs
TW9kZUZvclRlc3RpbmcocHJvZ3JhbSwgImJhcjIiKSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwg
Nyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbElubGluZWRGdW5jdGlvbihwcm9ncmFtLCBs
b3dlclRvTG9naWNhbE1vZGVGb3JUZXN0aW5nKHByb2dyYW0sICJiYXIyIiksIFttYWtlSW50KHBy
b2dyYW0sIDEpXSksIDgpOworfQorCiBva1RvVGVzdCA9IHRydWU7CiAKIGxldCB0ZXN0RmlsdGVy
ID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV0xvZ2ljYWxFcnJvci5qcyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1dMb2dpY2FsRXJyb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjI4NWY4NTgyMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvV0xvZ2ljYWxFcnJvci5qcwpAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7
CisKK2NsYXNzIFdMb2dpY2FsRXJyb3IgZXh0ZW5kcyBFcnJvciB7CisgICAgY29uc3RydWN0b3Io
b3JpZ2luU3RyaW5nLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc3VwZXIoIlByb2dyYW0gZG9l
cyBub3QgY29uZm9ybSB0byBsb2dpY2FsIG1vZGUgcnVsZXMgYXQgIiArIG9yaWdpblN0cmluZyAr
ICI6ICIgKyBtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5vcmlnaW5TdHJpbmcgPSBvcmlnaW5TdHJp
bmc7CisgICAgICAgIHRoaXMuc3ludGF4RXJyb3JNZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCmluZGV4IDNhN2U5NDhi
ZTY3Li44YzAwM2RlOWE2ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5o
dG1sCkBAIC03OCwxMSArNzgsMTMgQEAKIDxzY3JpcHQgc3JjPSJJbnRMaXRlcmFsLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJJbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTEhTTG9naWNhbE1v
ZGVJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMYXRlQ2hlY2tlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGV4ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ikxl
eGVyVG9rZW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxpdGVyYWxUeXBlQ2hlY2tlci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9naWNhbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IkxvZ2ljYWxNb2RlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJM
b2dpY2FsTm90LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+
CkBAIC0xMDAsNiArMTAyLDcgQEAKIDxzY3JpcHQgc3JjPSJPcmlnaW5LaW5kLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUG9pbnRlclJl
bW92ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlByb2dyYW0uanMiPjwvc2NyaXB0PgpAQCAtMTA5LDYgKzExMiw3IEBACiA8c2NyaXB0IHNyYz0i
UHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xSZWYu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVj
dXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVjdXJzaXZlVHlwZUNo
ZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtMTQ0LDYgKzE0OCw3IEBACiA8c2NyaXB0IHNyYz0iVmFy
aWFibGVEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWYXJpYWJsZVJlZi5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IldMb2dpY2FsRXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IldTeW50YXhFcnJv
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iV1R5cGVFcnJvci5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325452</attachid>
            <date>2017-10-31 09:34:06 -0700</date>
            <delta_ts>2017-10-31 09:34:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>40746</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwppbmRleCAzMGEwYjA5OTY1NS4uMDM1NDhi
M2NhMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKQEAgLTEwMSwxMSArMTAx
LDEzIEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJh
bC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMi
KTsKK2xvYWQoIkxIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgiTGF0ZUNoZWNrZXIu
anMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJM
aXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKIGxvYWQoIkxvZ2ljYWxFeHByZXNzaW9uLmpzIik7Cits
b2FkKCJMb2dpY2FsTW9kZS5qcyIpOwogbG9hZCgiTG9naWNhbE5vdC5qcyIpOwogbG9hZCgiTG9v
cENoZWNrZXIuanMiKTsKIGxvYWQoIk1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiKTsKQEAgLTEy
Myw2ICsxMjUsNyBAQCBsb2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiT3JpZ2luS2luZC5qcyIp
OwogbG9hZCgiT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyIpOwogbG9hZCgiUGFyc2UuanMi
KTsKK2xvYWQoIlBvaW50ZXJSZW1vdmVyLmpzIik7CiBsb2FkKCJQcmVwYXJlLmpzIik7CiBsb2Fk
KCJQcm9ncmFtLmpzIik7CiBsb2FkKCJQcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3Zl
ZC5qcyIpOwpAQCAtMTMyLDYgKzEzNSw3IEBAIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9h
ZCgiUHJvdG9jb2xGdW5jRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQo
IlB0clR5cGUuanMiKTsKK2xvYWQoIlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyIpOwogbG9hZCgi
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5q
cyIpOwogbG9hZCgiUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiKTsKQEAgLTE2Nyw2ICsxNzEsNyBA
QCBsb2FkKCJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpzIik7CiBsb2FkKCJWYXJpYWJsZURlY2wu
anMiKTsKIGxvYWQoIlZhcmlhYmxlUmVmLmpzIik7CiBsb2FkKCJWaXNpdGluZ1NldC5qcyIpOwor
bG9hZCgiV0xvZ2ljYWxFcnJvci5qcyIpOwogbG9hZCgiV1N5bnRheEVycm9yLmpzIik7CiBsb2Fk
KCJXVHJhcEVycm9yLmpzIik7CiBsb2FkKCJXVHlwZUVycm9yLmpzIik7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcyBiL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCmluZGV4IDQwZjVi
ZDMxY2MzLi5mMTQzNzE1ZDY1YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgQW5vbnlt
b3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CiAgICAgCiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0
dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiAr
IHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICBnZXQgdmFySXNMVmFsdWUoKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5qcwppbmRleCBmMGYwMzlmNTQ2Mi4uZmY3OGE1ZTU5OWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxGdW5jdGlvbi5q
cworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRnVuY3Rpb24uanMKQEAg
LTQzLDMgKzQzLDE0IEBAIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBl
QXJndW1lbnRzLCBhcmd1bWVudExpc3QpCiAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGZ1bmMu
dW5pbnN0YW50aWF0ZWRSZXR1cm5UeXBlLCByZXN1bHQpOwogfQogCitmdW5jdGlvbiBjYWxsSW5s
aW5lZEZ1bmN0aW9uKHByb2dyYW0sIGlubGluZWRGdW5jdGlvbiwgYXJndW1lbnRMaXN0KQorewor
ICAgIGxldCBhcmd1bWVudFR5cGVzID0gYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1
bWVudC50eXBlKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubGluZWRGdW5jdGlvbi5wYXJh
bWV0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGxldCB0eXBlID0gYXJndW1lbnRUeXBlc1tp
XS5pbnN0YW50aWF0ZWRUeXBlOworICAgICAgICB0eXBlLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRC
dWlsZGVyKCkpOworICAgICAgICBpbmxpbmVkRnVuY3Rpb24ucGFyYW1ldGVyc1tpXS5lUHRyLmNv
cHlGcm9tKGFyZ3VtZW50TGlzdFtpXS5lUHRyLCB0eXBlLnNpemUpOworICAgIH0KKyAgICBsZXQg
cmVzdWx0ID0gbmV3IEV2YWx1YXRvcihwcm9ncmFtKS5ydW5GdW5jKGlubGluZWRGdW5jdGlvbik7
CisgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKGlubGluZWRGdW5jdGlvbi51bmluc3RhbnRpYXRl
ZFJldHVyblR5cGUsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MSFNMb2dpY2FsTW9kZUlubGluZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjNlNjczNjA4ZjExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzCkBAIC0wLDAg
KzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgTEhTUmVmZXJlbmNlVHlwZXNMb3dlcmVyIGV4dGVuZHMgUmV3
cml0ZXIgeworfQorCitjbGFzcyBSZW1vdmVJbmxpbmVkTm9kZXMgZXh0ZW5kcyBSZXdyaXRlciB7
CisgICAgY29uc3RydWN0b3IoZnVuY3Rpb25MaWtlQmxvY2spCisgICAgeworICAgICAgICBzdXBl
cigpOworICAgICAgICB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jayA9IGZ1bmN0aW9uTGlrZUJsb2Nr
OworICAgIH0KKworICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZS5wdHIudmlzaXQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKChub2RlLm5hbWUuc3RhcnRz
V2l0aCgib3BlcmF0b3IuIikgJiYgIW5vZGUubmFtZS5lbmRzV2l0aCgiPSIpKSB8fCAobm9kZS5u
YW1lID09ICJvcGVyYXRvciZbXSIpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXJndW1lbnRM
aXN0WzBdLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKwor
ICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbGFzdElu
ZGV4ID0gbm9kZS5saXN0Lmxlbmd0aCAtIDE7CisgICAgICAgIGxldCBsaXN0ID0gW107CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFzdEluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBub2RlLmxpc3RbaV0udmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHJl
c3VsdCBmcm9tICIgKyBleHByZXNzaW9uKTsKKyAgICAgICAgICAgIGxpc3QucHVzaChyZXN1bHQp
OworICAgICAgICB9CisgICAgICAgIGxldCByZXN1bHQgPSBub2RlLmxpc3RbbGFzdEluZGV4XS52
aXNpdCh0aGlzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk51bGwgcmVzdWx0IGZyb20gIiArIGV4cHJlc3Npb24pOworICAgICAgICBsaXN0LnB1
c2gocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIGxpc3QpOworICAgIH0KKworICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkxpa2VCbG9jazsKKyAgICB9Cit9CisK
K2NsYXNzIEN1c3RvbUxIU1Jld3JpdGVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIF9maW5kSW5u
ZXJGdW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgLy8gKihhLCBmb28oKSkg
PSBiYXIgLi4uIHJldHVybiBiYXogPT4gKmJheiA9IGJhcgorICAgICAgICAvLyAqKGEsIChiLCAq
Zm9vKCkpKSA9IGJhciAuLi4gKGEsIChiLCBmb28oKSkpCisgICAgICAgIGxldCBvcGVyYXRpb25z
ID0gW107CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnB0cjsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobm9k
ZSBpbnN0YW5jZW9mIENhbGxFeHByZXNzaW9uKSAmJiAoKG5vZGUubmFtZS5zdGFydHNXaXRoKCJv
cGVyYXRvci4iKSAmJiAhbm9kZS5uYW1lLmVuZHNXaXRoKCI9IikpIHx8IChub2RlLm5hbWUgPT0g
Im9wZXJhdG9yJltdIikpKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKG5vZGUp
OworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmFyZ3VtZW50TGlzdFswXTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlIGlu
c3RhbmNlb2YgSWRlbnRpdHlFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUudGFyZ2V0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb21tYUV4cHJlc3Npb24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5saXN0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmxpc3Rbbm9kZS5s
aXN0Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTGlrZUJsb2NrKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB7ZnVuY3Rpb25MaWtlQmxvY2s6IG5vZGUsIG9wZXJhdGlvbnM6IG9wZXJhdGlvbnN9Owor
ICAgIH0KKyAgICAKKyAgICBfaW5saW5lTm9kZXMob3JpZ2luYWxBc3NpZ25tZW50LCBmdW5jdGlv
bkxpa2VCbG9jaywgb3BlcmF0aW9ucykKKyAgICB7CisgICAgICAgIGNsYXNzIFJld3JpdGVTaW5n
bGVGdW5jdGlvbkxpa2VCbG9jayBleHRlbmRzIFJld3JpdGVyIHsKKyAgICAgICAgICAgIGNvbnN0
cnVjdG9yKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBlcigpOworICAgICAg
ICAgICAgICAgIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudCA9IG9yaWdpbmFsQXNzaWdubWVudDsK
KyAgICAgICAgICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3V0ZXJGdW5jdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICAg
ICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisgICAgICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBOb2RlLnZpc2l0KHRoaXMuX29yaWdpbmFsQXNz
aWdubWVudC50eXBlLCB0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRo
aXMpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQucmV0dXJuRVB0ciA9IG5vZGUucmV0dXJuRVB0cjsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlz
aXRSZXR1cm4obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZXQgcHRyID0g
bm9kZS52YWx1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gb3BlcmF0aW9ucy5zaXpl
KCkgLSAxOyBpID49IDA7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9u
ID0gb3BlcmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVyZWZlcmVuY2VFeHByZXNzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3IERlcmVmZXJlbmNlRXhw
cmVzc2lvbihvcGVyYXRpb24ub3JpZ2luLCBwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Tm9kZS50eXBlID0gTm9kZS52aXNpdChvcGVyYXRpb24udHlwZSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdOb2RlLmFkZHJlc3NTcGFjZSA9IG9wZXJhdGlvbi5hZGRyZXNz
U3BhY2U7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENh
bGxFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJndW1lbnRMaXN0
ID0gW3B0cl07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IG9w
ZXJhdGlvbi5hcmd1bWVudExpc3QubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRMaXN0LnB1c2goTm9kZS52aXNpdChvcGVyYXRpb24uYXJndW1lbnRMaXN0
W2pdLCB0aGlzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXcgQ2FsbEV4
cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLm9yaWdpbiwg
b3BlcmF0aW9uLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnR5
cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdOb2RlID0gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKG9wZXJh
dGlvbiwgbmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgcHRyID0gbmV3Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV0
IGFzc2lnbm1lbnQgPSBuZXcgQXNzaWdubWVudCh0aGlzLl9vcmlnaW5hbEFzc2lnbm1lbnQub3Jp
Z2luLCBwdHIsIHRoaXMuX29yaWdpbmFsQXNzaWdubWVudC5yaHMpOworICAgICAgICAgICAgICAg
IGFzc2lnbm1lbnQudHlwZSA9IE5vZGUudmlzaXQodGhpcy5fb3JpZ2luYWxBc3NpZ25tZW50LnR5
cGUsIHRoaXMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2lu
LCBhc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZnVuY3Rpb25MaWtlQmxvY2sudmlzaXQobmV3IFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9j
aygpKTsKKyAgICB9CisKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkgeworICAgICAgICAvLyAq
YSgpID0gKCpiKCkgPSBjKQorICAgICAgICBub2RlID0gc3VwZXIudmlzaXRBc3NpZ25tZW50KG5v
ZGUpOworICAgICAgICBsZXQgZnVuY3Rpb25MaWtlQmxvY2sgPSB0aGlzLl9maW5kSW5uZXJGdW5j
dGlvbkxpa2VCbG9jayhub2RlLmxocyk7CisgICAgICAgIGlmICghZnVuY3Rpb25MaWtlQmxvY2sp
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgbGV0IG5ld0Z1bmN0aW9uTGlrZUJs
b2NrID0gdGhpcy5faW5saW5lTm9kZXMobm9kZSwgZnVuY3Rpb25MaWtlQmxvY2suZnVuY3Rpb25M
aWtlQmxvY2ssIGZ1bmN0aW9uTGlrZUJsb2NrLm9wZXJhdGlvbnMpOworICAgICAgICByZXR1cm4g
bm9kZS5saHMudmlzaXQobmV3IFJlbW92ZUlubGluZWROb2RlcyhuZXdGdW5jdGlvbkxpa2VCbG9j
aykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0xvZ2ljYWxNb2RlLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNhbE1v
ZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5YTYwMTUxNzA5
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTG9naWNh
bE1vZGUuanMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsb3dlclRvTG9naWNhbE1v
ZGUocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzdWx0ID0gW107CisgICAgZm9yIChsZXQgZnVuY3Rp
b25zIG9mIHByb2dyYW0uZnVuY3Rpb25zKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVu
Y3Rpb25zWzFdKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmMuc2hhZGVyVHlwZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9n
cmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKGZ1bmMsIFtdKTsKKyAgICAgICAgICAgIF9p
bmxpbmVGdW5jdGlvbihwcm9ncmFtLCBpbmxpbmVkU2hhZGVyLCBuZXcgVmlzaXRpbmdTZXQoZnVu
YykpOworCisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyLnZpc2l0KG5ldyBMb2dpY2FsTW9kZUFy
cmF5VHlwZUNoZWNrZXIoKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNo
YWRlci52aXNpdChuZXcgQ3VzdG9tUkhTUmV3cml0ZXIobmV3IFJIU1JlZmVyZW5jZVR5cGVzTG93
ZXJlcigpKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0gaW5saW5lZFNoYWRlci52aXNp
dChuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7CisgICAgICAgICAgICBpbmxpbmVkU2hhZGVyID0g
aW5saW5lZFNoYWRlci52aXNpdChuZXcgUG9pbnRlclJlbW92ZXIoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlubGluZWRTaGFkZXIpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGxvd2VyVG9Mb2dpY2FsTW9kZUZv
clRlc3RpbmcocHJvZ3JhbSwgZnVuY3Rpb25OYW1lKQoreworICAgIGxldCByZXN1bHQgPSBbXTsK
KyAgICBsZXQgZnVuYyA9IHByb2dyYW0uZnVuY3Rpb25zLmdldChmdW5jdGlvbk5hbWUpWzBdOwor
CisgICAgbGV0IGlubGluZWRTaGFkZXIgPSBwcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5p
cXVlKGZ1bmMsIFtdKTsKKyAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgaW5saW5lZFNoYWRl
ciwgbmV3IFZpc2l0aW5nU2V0KGZ1bmMpKTsKKworICAgIGlubGluZWRTaGFkZXIudmlzaXQobmV3
IExvZ2ljYWxNb2RlQXJyYXlUeXBlQ2hlY2tlcigpKTsKKyAgICBpbmxpbmVkU2hhZGVyLnJld3Jp
dGUobmV3IEN1c3RvbVJIU1Jld3JpdGVyKG5ldyBSSFNSZWZlcmVuY2VUeXBlc0xvd2VyZXIoKSkp
OworICAgIGlubGluZWRTaGFkZXIucmV3cml0ZShuZXcgQ3VzdG9tTEhTUmV3cml0ZXIoKSk7Cisg
ICAgaW5saW5lZFNoYWRlci5yZXdyaXRlKG5ldyBQb2ludGVyUmVtb3ZlcigpKTsKKyAgICAgICAg
ICAgIAorICAgIHJldHVybiBpbmxpbmVkU2hhZGVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUG9pbnRlclJlbW92ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNjc2MzViODQ3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qb2ludGVyUmVtb3Zlci5qcwpAQCAtMCwwICsxLDI0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmljdCI7
CisKK2NsYXNzIExvZ2ljYWxNb2RlQXJyYXlUeXBlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Igewor
ICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCkKKyAgICAgICAgdGhpcy5f
aW5zaWRlQXJyYXlUeXBlQ291bnRlciA9IDA7CisgICAgfQorICAgIAorICAgIHZpc2l0QXJyYXlU
eXBlKG5vZGUpCisgICAgeworICAgICAgICArK3RoaXMuX2luc2lkZUFycmF5VHlwZTsKKyAgICAg
ICAgc3VwZXIudmlzaXRBcnJheVR5cGUobm9kZSk7CisgICAgICAgIC0tdGhpcy5faW5zaWRlQXJy
YXlUeXBlOworICAgIH0KKworICAgIHZpc2l0UHRyVHlwZShub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2luc2lkZUFycmF5VHlwZUNvdW50ZXIgPiAwKQorICAgICAgICAgICAgdGhyb3cg
bmV3IFdMb2dpY2FsRXJyb3IoIlBvaW50ZXIgdHlwZXMgY2Fubm90IG9jY3VyIGluc2lkZSBBcnJh
eXMuIik7CisgICAgfQorCisgICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9pbnNpZGVBcnJheVR5cGVDb3VudGVyID4gMCkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBXTG9naWNhbEVycm9yKCJQb2ludGVyIHR5cGVzIGNhbm5vdCBvY2N1ciBpbnNpZGUg
QXJyYXlzLiIpOworICAgICAgICArK3RoaXMuX2luc2lkZUFycmF5VHlwZTsKKyAgICAgICAgc3Vw
ZXIudmlzaXRBcnJheVR5cGUobm9kZSk7CisgICAgICAgIC0tdGhpcy5faW5zaWRlQXJyYXlUeXBl
OworICAgIH0KK30KKworY2xhc3MgUG9pbnRlclJlbW92ZXIgZXh0ZW5kcyBSZXdyaXRlciB7Cisg
ICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5f
bWFwID0gbmV3IE1hcCgpOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IEFycmF5UmVmcy4K
KyAgICB9CisKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpOworICAgICAg
ICB0aGlzLl9tYXAuc2V0KG5vZGUsIHRoaXMuX21hcC5nZXQobm9kZS50YXJnZXQpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5v
ZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVz
c2lvbihub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5sVmFsdWUpCisgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KG5vZGUsIHJlc3VsdC5sVmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLl9tYXAuc2V0KG5vZGUsIG5vZGUubFZhbHVlKTsKKyAgICB9CisKKyAgICB2aXNpdE1h
a2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBz
dXBlci52aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIHRoaXMuX21h
cC5zZXQobm9kZSwgcmVzdWx0LmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RGVyZWZl
cmVuY2VFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIu
dmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIHJlc3VsdCA9IHRoaXMu
X21hcC5nZXQocmVzdWx0LnB0cik7CisgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKQor
ICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fbWFwLmdldChub2RlLnB0cik7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdMb2dpY2FsRXJy
b3IoIkNhbm5vdCBzdGF0aWNhbGx5IGRldGVybWluZSB3aGljaCB2YWx1ZSB3ZSBhcmUgZGVyZWZl
cmVuY2luZy4iKTsKKyAgICAgICAgdGhpcy5fbWFwLnNldChub2RlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUp
CisgICAgeworICAgICAgICBsZXQgbGlzdCA9IFtdOworICAgICAgICBmb3IgKGxldCBleHByZXNz
aW9uIG9mIG5vZGUubGlzdCkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGV4cHJlc3Npb24u
dmlzaXQodGhpcyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHVuZGVmaW5lZCkKKyAgICAg
ICAgICAgICAgICBsaXN0LnB1c2gocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGlz
dC5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIGxpc3QpOworICAgICAgICB0aGlzLl9t
YXAuc2V0KG5vZGUsIHRoaXMuX21hcC5nZXQobm9kZS5saXN0W25vZGUubGlzdC5sZW5ndGggLSAx
XSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEJsb2Nr
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEJsb2NrKG5vZGUub3JpZ2lu
KTsKKyAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUuc3RhdGVtZW50cykgeworICAg
ICAgICAgICAgbGV0IG5ld1N0YXRlbWVudCA9IHN0YXRlbWVudC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgICAgIGlmIChuZXdTdGF0ZW1lbnQgIT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQobmV3U3RhdGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCisgICAgeworICAgICAgICBs
ZXQgdHlwZSA9IG5vZGUudHlwZTsKKyAgICAgICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBl
UmVmKQorICAgICAgICAgICAgdHlwZSA9IHR5cGUudHlwZTsKKyAgICAgICAgaWYgKCh0eXBlIGlu
c3RhbmNlb2YgUHRyVHlwZSkgfHwgKHR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7Cisg
ICAgICAgICAgICBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgdGhp
cy5fbWFwLnNldChub2RlLCB0aGlzLl9tYXAuZ2V0KG5vZGUuaW5pdGlhbGl6ZXIpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRWYXJp
YWJsZURlY2wobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0QXNzaWdubWVudChub2RlKQor
ICAgIHsKKyAgICAgICAgY2xhc3MgUG9pbnRlckZpbmRlciBleHRlbmRzIFZpc2l0b3IgeworICAg
ICAgICAgICAgdmlzaXRQdHJUeXBlKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
V0xvZ2ljYWxFcnJvcigiQ2Fubm90IGFzc2lnbiB0byBhIHBvaW50ZXIgaW4gbG9naWNhbCBtb2Rl
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxldCB0eXBlID0gbm9kZS50
eXBlOworICAgICAgICB3aGlsZSAodHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpCisgICAgICAgICAg
ICB0eXBlID0gdHlwZS50eXBlOworICAgICAgICB0eXBlLnZpc2l0KG5ldyBQb2ludGVyRmluZGVy
KCkpOworICAgICAgICBzdXBlci52aXNpdEFzc2lnbm1lbnQobm9kZSk7CisgICAgfQorCisgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVy
LnZpc2l0VmFyaWFibGVSZWYobm9kZSk7CisgICAgICAgIHRoaXMuX21hcC5zZXQobm9kZSwgdGhp
cy5fbWFwLmdldChub2RlLnZhcmlhYmxlKSk7CisgICAgICAgIGxldCB0eXBlID0gbm9kZS52YXJp
YWJsZS50eXBlOworICAgICAgICB3aGlsZSAodHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpCisgICAg
ICAgICAgICB0eXBlID0gdHlwZS50eXBlOworICAgICAgICBpZiAoKHR5cGUgaW5zdGFuY2VvZiBQ
dHJUeXBlKSB8fCAodHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdmlzaXRDb252ZXJ0
UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBzdXBlci52aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKTsKKyAgICAg
ICAgdGhpcy5fbWFwLnNldChub2RlLCByZXN1bHQubFZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
dmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFyZ3VtZW50
TGlzdCA9IFtdOworICAgICAgICBsZXQgcGFyYW1ldGVycyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5wYXJhbWV0ZXJzW2ldLnR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcyk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbWFwLnNldChub2RlLnBhcmFtZXRlcnNbaV0sIHRoaXMuX21hcC5nZXQobm9k
ZS5hcmd1bWVudExpc3RbaV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXJndW1lbnRMaXN0LnB1c2gobm9kZS5hcmd1bWVudExpc3RbaV0udmlzaXQodGhpcykpOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHVzaChub2RlLnBhcmFtZXRlcnNbaV0udmlzaXQo
dGhpcykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGV0IG5ld0JvZHkg
PSBub2RlLmJvZHkudmlzaXQodGhpcyk7CisKKyAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSBp
bnN0YW5jZW9mIFB0clR5cGUpIHsKKyAgICAgICAgICAgIGxldCByZXR1cm5FeHByZXNzaW9uOwor
ICAgICAgICAgICAgY2xhc3MgRmluZFJldHVybiBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICAg
ICAgICAgIHZpc2l0UmV0dXJuKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVy
bkV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV0xvZ2ljYWxF
cnJvcigiTXVsdGlwbGUgcmV0dXJuIHZhbHVlcyBmb3VuZCBpbiBsb2dpY2FsIG1vZGUgcHJvZ3Jh
bS4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuRXhwcmVzc2lvbiA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhu
b2RlKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3
Qm9keS52aXNpdChuZXcgRmluZFJldHVybigpKTsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQo
bm9kZSwgdGhpcy5fbWFwLmdldChyZXR1cm5FeHByZXNzaW9uLnZhbHVlKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisg
ICAgICAgICAgICBub2RlLm9yaWdpbiwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1
cm5UeXBlLCB0aGlzKSwKKyAgICAgICAgICAgIGFyZ3VtZW50TGlzdCwKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMsCisgICAgICAgICAgICBuZXdCb2R5KTsKKyAgICAgICAgcmVzdWx0LnJldHVybkVQ
dHIgPSBub2RlLnJldHVybkVQdHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZnVu
Yy5pc0ZpZWxkQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIGxldCBtYXAgPSBuZXcgTWFwKCk7
CisgICAgICAgICAgICBsZXQgc3RydWN0VHlwZSA9IG5vZGUuZnVuYy5yZXR1cm5UeXBlLnR5cGU7
CisgICAgICAgICAgICBsZXQgZmllbGRzID0gQXJyYXkuZnJvbShzdHJ1Y3RUeXBlLmZpZWxkcyk7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbGV0IGZpZWxkVHlwZSA9IGZpZWxkc1tpXS50eXBl
OworICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0W2ldLnZpc2l0KHRoaXMpOworICAg
ICAgICAgICAgICAgIG1hcC5zZXQoZmllbGRzW2ldLm5hbWUsIHRoaXMuX3BvaW50ZXJNYXAuZ2V0
KG5vZGUuYXJndW1lbnRMaXN0W2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KG5vZGUsIG1hcCk7CisgICAgICAgICAgICAvLyBGSVhNRTogRW1pdCBhIG5ldyBD
YWxsRXhwcmVzc2lvbiB3aXRoIHRoZSBwb2ludGVyIGFyZ3VtZW50cyByZW1vdmVkLgorICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUuZnVuYy5uYW1lLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiIpICYmICFu
b2RlLmZ1bmMubmFtZS5lbmRzV2l0aCgiPSIpICYmIChub2RlLmZ1bmMucmV0dXJuVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpKSB7CisgICAgICAgICAgICBsZXQgZmllbGROYW1lID0gbm9kZS5mdW5j
Lm5hbWUuc3Vic3RyaW5nKCJvcGVyYXRvci4iLmxlbmd0aCk7CisgICAgICAgICAgICBsZXQgcmVz
dWx0ID0gc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHRoaXMuX21hcC5nZXQocmVzdWx0LmFyZ3VtZW50TGlzdFswXSkuZ2V0KGZpZWxkTmFtZSk7
CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV0xvZ2ljYWxFcnJvcigiQ2Fubm90IGZpbmQgZmllbGQgcG9pbnRlciB2YWx1ZS4i
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSBpbmRleCBleHByZXNzaW9ucyB3aXRoIGNvbnN0ZXhwciBpbmRpY2VzLgorICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIHNsaWNlcy4KKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0
Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgfQorCisgICAgdmlzaXRTdHJ1Y3RUeXBlKG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gMCkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBXTG9naWNhbEVycm9yKCJTdHJ1Y3RzIHNob3VsZCBub3QgaGF2
ZSB0eXBlIHBhcmFtZXRlcnMgd2hlbiBwZXJmb3JtaW5nIExvZ2ljYWwgTW9kZSByZXdyaXRpbmch
Iik7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZShub2RlLm9yaWdpbiwgbm9k
ZS5uYW1lLCBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKKyAgICAgICAgZm9yIChsZXQgZmllbGQgb2Yg
bm9kZS5maWVsZHMuZmlsdGVyKGZpZWxkID0+ICEoZmllbGQudHlwZSBpbnN0YW5jZW9mIFB0clR5
cGUpICYmICEoZmllbGQudHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpKQorICAgICAgICAg
ICAgcmVzdWx0LmFkZChmaWVsZCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUkhTTG9naWNhbE1vZGVJ
bmxpbmVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUkhTTG9naWNhbE1vZGVJ
bmxpbmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNWE5ZGU5
MWFkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JI
U0xvZ2ljYWxNb2RlSW5saW5lci5qcwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisidXNlIHN0cmljdCI7CisKKy8vIGRvUHJlcCgi
dGhyZWFkIGludCogZm9vKHRocmVhZCBpbnQqIHgpIHsgcmV0dXJuIHg7IH0gdm9pZCBiYXIoKSB7
IGludCB4OyBpbnQgeSA9ICpmb28oJngpOyB9IikKKy8vIGRvUHJlcCgic3RydWN0IEZvbyB7IGlu
dCB4OyBpbnQgeTsgfSBGb28gZm9vKCkgeyByZXR1cm4gRm9vKDMsIDQpOyB9IHZvaWQgYmFyKCkg
eyBpbnQgeCA9IGZvbygpLng7IH0iKQorLy8gZG9QcmVwKCJ0aHJlYWQgaW50W10gZm9vKHRocmVh
ZCBpbnRbXSB4KSB7IHJldHVybiB4OyB9IHZvaWQgYmFyKCkgeyBpbnRbMV0geDsgaW50IHkgPSBm
b28oQHgpWzBdOyB9IikKKworY2xhc3MgUmV3cml0ZVNpbmdsZUZ1bmN0aW9uTGlrZUJsb2NrIGV4
dGVuZHMgUmV3cml0ZXIgeworICAgIGNvbnN0cnVjdG9yKG1hcCkKKyAgICB7CisgICAgICAgIHN1
cGVyKG1hcCk7CisgICAgICAgIHRoaXMuX291dGVyRnVuY3Rpb24gPSBmYWxzZTsKKyAgICB9CisK
KyAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fb3V0ZXJGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KG5ldyBSZXdy
aXRlcigpKTsKKyAgICAgICAgdGhpcy5fb3V0ZXJGdW5jdGlvbiA9IHRydWU7CisgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCisgICAgICAgICAgICBub2RlLm9yaWdp
biwKKyAgICAgICAgICAgIE5vZGUudmlzaXQodGhpcy5fcmV0dXJuVHlwZShub2RlKSwgdGhpcyks
CisgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQu
dmlzaXQodGhpcykpLAorICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIg
PT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKKyAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0
aGlzKSk7CisgICAgICAgIHJlc3VsdC5yZXR1cm5FUHRyID0gbm9kZS5yZXR1cm5FUHRyOworICAg
ICAgICB0aGlzLl9vdXRlckZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorfQorCitjbGFzcyBJbmxpbmVEZXJlZmVyZW5jZSBleHRlbmRzIFJld3JpdGVTaW5n
bGVGdW5jdGlvbkxpa2VCbG9jayB7CisgICAgY29uc3RydWN0b3IobWFwLCBkZXJlZmVyZW5jZSkK
KyAgICB7CisgICAgICAgIHN1cGVyKG1hcCk7CisgICAgICAgIHRoaXMuX2RlcmVmZXJlbmNlID0g
ZGVyZWZlcmVuY2U7CisgICAgfQorICAgIAorICAgIF9yZXR1cm5UeXBlKG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZS5yZXR1cm5UeXBlLmVsZW1lbnRUeXBlOworICAgIH0KKworICAg
IHZpc2l0UmV0dXJuKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3RGVyZWZlcmVuY2UgPSBu
ZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMuX2RlcmVmZXJlbmNlLm9yaWdpbiwgTm9kZS52
aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CisgICAgICAgIG5ld0RlcmVmZXJlbmNlLnR5cGUgPSBO
b2RlLnZpc2l0KHRoaXMuX2RlcmVmZXJlbmNlLnR5cGUsIHRoaXMpOworICAgICAgICBuZXdEZXJl
ZmVyZW5jZS5hZGRyZXNzU3BhY2UgPSB0aGlzLl9kZXJlZmVyZW5jZS5hZGRyZXNzU3BhY2U7Cisg
ICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBuZXdEZXJlZmVyZW5jZSk7Cisg
ICAgfQorfQorCitjbGFzcyBJbmxpbmVHZXR0ZXIgZXh0ZW5kcyBSZXdyaXRlU2luZ2xlRnVuY3Rp
b25MaWtlQmxvY2sgeworICAgIGNvbnN0cnVjdG9yKG1hcCwgZ2V0dGVyLCB0eXBlKQorICAgIHsK
KyAgICAgICAgc3VwZXIobWFwKTsKKyAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyOworICAg
ICAgICB0aGlzLl90eXBlID0gdHlwZTsKKyAgICB9CisgICAgCisgICAgX3JldHVyblR5cGUobm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgIH0KKworICAgIHZpc2l0
UmV0dXJuKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3R2V0dGVyID0gbmV3IENhbGxFeHBy
ZXNzaW9uKAorICAgICAgICAgICAgdGhpcy5fZ2V0dGVyLm9yaWdpbiwgdGhpcy5fZ2V0dGVyLm5h
bWUsCisgICAgICAgICAgICB0aGlzLl9nZXR0ZXIudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3Vt
ZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSksCisgICAgICAgICAgICBbTm9kZS52aXNp
dChub2RlLnZhbHVlLCB0aGlzKV0pOworICAgICAgICBuZXdHZXR0ZXIgPSB0aGlzLnByb2Nlc3NE
ZXJpdmVkQ2FsbERhdGEodGhpcy5fZ2V0dGVyLCBuZXdHZXR0ZXIpOworICAgICAgICByZXR1cm4g
bmV3IFJldHVybihub2RlLm9yaWdpbiwgbmV3R2V0dGVyKTsKKyAgICB9Cit9CisKK2NsYXNzIElu
bGluZVN1YnNjcmlwdCBleHRlbmRzIFJld3JpdGVTaW5nbGVGdW5jdGlvbkxpa2VCbG9jayB7Cisg
ICAgY29uc3RydWN0b3IobWFwLCBzdWJzY3JpcHQpCisgICAgeworICAgICAgICBzdXBlcihtYXAp
OworICAgICAgICB0aGlzLl9zdWJzY3JpcHQgPSBzdWJzY3JpcHQ7CisgICAgfQorICAgIAorICAg
IF9yZXR1cm5UeXBlKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS5yZXR1cm5UeXBl
LmVsZW1lbnRUeXBlOworICAgIH0KKworICAgIHZpc2l0UmV0dXJuKG5vZGUpCisgICAgeworICAg
ICAgICBsZXQgbmV3U3Vic2NyaXB0ID0gbmV3IENhbGxFeHByZXNzaW9uKAorICAgICAgICAgICAg
dGhpcy5fc3Vic2NyaXB0Lm9yaWdpbiwgdGhpcy5fc3Vic2NyaXB0Lm5hbWUsCisgICAgICAgICAg
ICB0aGlzLl9zdWJzY3JpcHQudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVB
cmd1bWVudC52aXNpdCh0aGlzKSksCisgICAgICAgICAgICBbTm9kZS52aXNpdChub2RlLnZhbHVl
LCB0aGlzKSwgTm9kZS52aXNpdCh0aGlzLl9zdWJzY3JpcHQuYXJndW1lbnRMaXN0WzFdLCB0aGlz
KV0pOworICAgICAgICBuZXdTdWJzY3JpcHQgPSB0aGlzLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEo
dGhpcy5fc3Vic2NyaXB0LCBuZXdTdWJzY3JpcHQpOworICAgICAgICByZXR1cm4gbmV3IFJldHVy
bihub2RlLm9yaWdpbiwgbmV3U3Vic2NyaXB0KTsKKyAgICB9Cit9CisKK2NsYXNzIFJIU1JlZmVy
ZW5jZVR5cGVzTG93ZXJlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICBfZmluZElubmVyRnVuY3Rp
b25MaWtlQmxvY2sobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBkZWVwZXN0Q29tbWE7CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSWRl
bnRpdHlFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUudGFyZ2V0Owor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG5vZGUgaW5zdGFuY2VvZiBDb21tYUV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5saXN0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZp
bmVkOworICAgICAgICAgICAgICAgIGRlZXBlc3RDb21tYSA9IG5vZGU7CisgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUubGlzdFtub2RlLmxpc3QubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShub2RlIGluc3Rh
bmNlb2YgRnVuY3Rpb25MaWtlQmxvY2spKQorICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmlu
ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2RlZXBl
c3RDb21tYSwgZnVuY3Rpb25MaWtlQmxvY2s6IG5vZGV9OworICAgIH0KKyAgICAKKyAgICBfaW5s
aW5lVmFsdWVJbnRvRnVuY3Rpb25MaWtlQmxvY2socmVzdWx0LCBpbm5lclZhbHVlLCBzdWJzdGl0
dXRpb24pCisgICAgeworICAgICAgICBsZXQgaW5uZXJGdW5jdGlvbkxpa2VCbG9jayA9IHRoaXMu
X2ZpbmRJbm5lckZ1bmN0aW9uTGlrZUJsb2NrKGlubmVyVmFsdWUocmVzdWx0KSk7CisgICAgCisg
ICAgICAgIGlmICghaW5uZXJGdW5jdGlvbkxpa2VCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyAgICAgICAgbGV0IG5ld0Z1bmN0aW9uID0gaW5uZXJGdW5jdGlvbkxpa2VCbG9j
ay5mdW5jdGlvbkxpa2VCbG9jay52aXNpdChzdWJzdGl0dXRpb24oaW5uZXJGdW5jdGlvbkxpa2VC
bG9jay5mdW5jdGlvbkxpa2VCbG9jaykpOworICAgICAgICBpZiAoaW5uZXJGdW5jdGlvbkxpa2VC
bG9jay5kZWVwZXN0Q29tbWEpIHsKKyAgICAgICAgICAgIGlubmVyRnVuY3Rpb25MaWtlQmxvY2su
ZGVlcGVzdENvbW1hLmxpc3RbaW5uZXJGdW5jdGlvbkxpa2VCbG9jay5kZWVwZXN0Q29tbWEubGlz
dC5sZW5ndGggLSAxXSA9IG5ld0Z1bmN0aW9uOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5w
dHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld0Z1bmN0aW9uOworICAgIH0KKworICAg
IHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5faW5saW5lVmFsdWVJbnRvRnVuY3Rpb25MaWtlQmxvY2soc3VwZXIudmlzaXREZXJlZmVy
ZW5jZUV4cHJlc3Npb24obm9kZSksIHJlc3VsdCA9PiByZXN1bHQucHRyLCBmdW5jdGlvbkxpa2VC
bG9jayA9PiBuZXcgSW5saW5lRGVyZWZlcmVuY2UodGhpcy5tYXAsIG5vZGUpKTsKKyAgICB9CisK
KyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5u
YW1lLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiIpICYmICFub2RlLm5hbWUuZW5kc1dpdGgoIj0iKSkg
eworICAgICAgICAgICAgLy8gVXNlci1hdXRob3JlZCBmdW5jdGlvbnMgd2lsbCBoYXZlIGJlZW4g
dHJhbnNsYXRlZCB0byBGdW5jdGlvbkxpa2VCbG9ja3MsIHNvCisgICAgICAgICAgICAvLyB0aGlz
IHdpbGwgb25seSBjYXRjaCBuYXRpdmUgZmllbGQgZ2V0dGVycy4KKyAgICAgICAgICAgIGxldCBm
aWVsZE5hbWUgPSBub2RlLm5hbWUuc3Vic3RyaW5nKCJvcGVyYXRvci4iLmxlbmd0aCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lVmFsdWVJbnRvRnVuY3Rpb25MaWtlQmxvY2soc3Vw
ZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKSwgcmVzdWx0ID0+IHJlc3VsdC5hcmd1bWVudExp
c3RbMF0sIGZ1bmN0aW9uTGlrZUJsb2NrID0+IG5ldyBJbmxpbmVHZXR0ZXIodGhpcy5tYXAsIG5v
ZGUsIGZ1bmN0aW9uTGlrZUJsb2NrLnJldHVyblR5cGUuZmllbGRCeU5hbWUoZmllbGROYW1lKS50
eXBlKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZb
XSIpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lVmFsdWVJbnRvRnVuY3Rpb25MaWtl
QmxvY2soc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKSwgcmVzdWx0ID0+IHJlc3VsdC5h
cmd1bWVudExpc3RbMF0sIGZ1bmN0aW9uTGlrZUJsb2NrID0+IG5ldyBJbmxpbmVTdWJzY3JpcHQo
dGhpcy5tYXAsIG5vZGUpKTsKKworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9Cit9CisKK2NsYXNzIEN1c3RvbVJIU1Jld3JpdGVyIGV4dGVuZHMg
UmV3cml0ZXIgeworICAgIGNvbnN0cnVjdG9yKGlubmVyUmV3cml0ZXIpCisgICAgeworICAgICAg
ICBzdXBlcihpbm5lclJld3JpdGVyLm1hcCk7CisgICAgICAgIHRoaXMuX2N1cnJlbnREZXB0aCA9
IDA7CisgICAgICAgIHRoaXMuX21heERlcHRoID0gMDsKKyAgICAgICAgdGhpcy5faW5uZXJSZXdy
aXRlciA9IGlubmVyUmV3cml0ZXI7CisgICAgfQorCisgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUp
IHsKKyAgICAgICAgKyt0aGlzLl9jdXJyZW50RGVwdGg7CisgICAgICAgIHRoaXMuX21heERlcHRo
ID0gTWF0aC5tYXgodGhpcy5fY3VycmVudERlcHRoLCB0aGlzLl9tYXhEZXB0aCk7CisgICAgICAg
IGxldCByZXN1bHQgPSBzdXBlci52aXNpdEFzc2lnbm1lbnQobm9kZSk7CisgICAgICAgIGlmICh0
aGlzLl9tYXhEZXB0aCA9PSB0aGlzLl9jdXJyZW50RGVwdGgpIHsKKyAgICAgICAgICAgIC8vIEkn
bSB0aGUgaW5uZXJtb3N0IEFzc2lnbm1lbnQuCisgICAgICAgICAgICByZXN1bHQgPSBuZXcgQXNz
aWdubWVudChub2RlLm9yaWdpbiwgcmVzdWx0Lmxocywgbm9kZS5yaHMudmlzaXQodGhpcy5faW5u
ZXJSZXdyaXRlcikpOworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgLS10aGlzLl9jdXJyZW50RGVwdGg7Cisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50RGVwdGggPT0gMCkKKyAgICAgICAgICAgIHRoaXMuX21h
eERlcHRoID0gMDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXNpdFZh
cmlhYmxlRGVjbChub2RlKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFyaWFibGVEZWNs
KAorICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKKyAgICAgICAgICAgIG5vZGUu
dHlwZS52aXNpdCh0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXpl
ciwgdGhpcy5faW5uZXJSZXdyaXRlcikpOworICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJl
c3VsdCk7CisgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Jld3JpdGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIu
anMKaW5kZXggNjQ2ZDA2YmI3NmUuLjBiNTRmYTBhMGYwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwpAQCAtMjgsOSArMjgsMTcgQEAKIC8vIG5vdyB3ZSBhcmUg
aGFja2lzaGx5IHByZXZlbnRpbmcgdGhpcyBieSB3cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJlZi4g
VGhhdCdzIHByb2JhYmx5IHdyb25nLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NjIwOAogY2xhc3MgUmV3cml0ZXIgewotICAgIGNvbnN0cnVjdG9yKCkKKyAg
ICBjb25zdHJ1Y3RvcihtYXBwaW5nKQogICAgIHsKLSAgICAgICAgdGhpcy5fbWFwcGluZyA9IG5l
dyBNYXAoKTsKKyAgICAgICAgaWYgKG1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9tYXBwaW5n
ID0gbWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbWFwcGluZyA9IG5l
dyBNYXAoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IG1hcCgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fbWFwcGluZzsKICAgICB9CiAgICAgCiAgICAgX21hcE5vZGUob2xkSXRlbSwgbmV3
SXRlbSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0
bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IGQxNzNm
N2U3MjUxLi42ZWMyZjM4OTE4YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU1BJUlYuaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElS
Vi5odG1sCkBAIC04NCwxMSArODQsMTMgQEAgdGQgewogICAgIDxzY3JpcHQgc3JjPSJJbnRMaXRl
cmFsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTGF0ZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJMZXhl
ci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJMaXRlcmFsVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJMb2dpY2FsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkxvZ2ljYWxNb2RlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTG9naWNh
bE5vdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ikxvb3BDaGVja2VyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3Jp
cHQ+CkBAIC0xMDYsNiArMTA4LDcgQEAgdGQgewogICAgIDxzY3JpcHQgc3JjPSJPcmlnaW5LaW5k
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVy
ZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iUG9pbnRlclJlbW92ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNv
bHZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0
PgpAQCAtMTE1LDYgKzExOCw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2xGdW5j
RGVjbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sUmVmLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHRyVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJSZWN1cnNpb25DaGVja2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUmVj
dXJzaXZlVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtMTU0LDYgKzE1OCw3IEBAIHRkIHsK
ICAgICA8c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaXNpdGlu
Z1NldC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldMb2dpY2FsRXJyb3IuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJXVHJhcEVycm9yLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
V1R5cGVFcnJvci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
Lmh0bWwKaW5kZXggMzIwZmJhOTlkNTUuLjFiMTJiMWIxZTQ4IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCkBAIC03OCwxMSArNzgsMTMgQEAKIDxzY3JpcHQgc3JjPSJJ
bnRMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbnRMaXRlcmFsVHlwZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iTEhTTG9naWNhbE1vZGVJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJM
YXRlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGV4ZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ikxp
dGVyYWxUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTG9naWNhbEV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxvZ2ljYWxNb2RlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJM
b29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+CkBAIC0xMDAsNiArMTAyLDcgQEAKIDxzY3JpcHQgc3JjPSJPcmln
aW5LaW5kLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iUG9pbnRlclJlbW92ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByZXBh
cmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0PgpAQCAtMTA5LDYgKzExMiw3
IEBACiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iUHJvdG9jb2xSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlJIU0xvZ2ljYWxNb2RlSW5saW5lci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtMTQ0LDYgKzE0OCw3IEBA
CiA8c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJW
YXJpYWJsZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IldMb2dpY2FsRXJyb3IuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IldTeW50YXhFcnJvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1RyYXBFcnJv
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iV1R5cGVFcnJvci5qcyI+PC9zY3JpcHQ+CkBA
IC0xNTUsNyArMTYwLDcgQEAKIDxzY3JpcHQ+CiBmdW5jdGlvbiBkb1Rlc3RJbkJyb3dzZXIoKQog
ewotICAgIHZhciB0ZXN0ZXIgPSBkb1Rlc3QoLy4qLyk7CisgICAgdmFyIHRlc3RlciA9IGRvVGVz
dCgvbG9naWNhbE1vZGVNdWx0aXBsZVJldHVyblJlYWQvKTsKICAgICB2YXIgbGFzdFRpbWU7CiAg
ICAgZnVuY3Rpb24gbmV4dCgpCiAgICAgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anMKaW5kZXggMTU5ZmEwMGUyZGEuLjFlZDA4MTkxNGVlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanMKQEAgLTY1NzEsNiArNjU3MSw0NyBAQCB0ZXN0cy5hbmRSZXR1cm5lZEFy
cmF5UmVmID0gZnVuY3Rpb24oKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgMzU0KTsKIH0KIAordGVzdHMubG9naWNhbE1vZGVNdWx0
aXBsZVJldHVyblJlYWQgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9Cisg
ICAgICAgIHRocmVhZCBpbnQqIGZvbyh0aHJlYWQgaW50KiB4LCB0aHJlYWQgaW50KiB5LCBpbnQg
cHJlZGljYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlID09IDApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAg
fQorICAgICAgICB0aHJlYWQgaW50KiogZm9vMih0aHJlYWQgaW50KiogeCwgdGhyZWFkIGludCoq
IHksIGludCBwcmVkaWNhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUg
PT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgICAgIHJldHVybiB5Owor
ICAgICAgICB9CisgICAgICAgIGludCBiYXIoaW50IHByZWRpY2F0ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IHggPSA3OworICAgICAgICAgICAgaW50IHkgPSA4OworICAgICAgICAgICAg
aW50IHogPSAqZm9vKCZ4LCAmeSwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIHJldHVybiB6Owor
ICAgICAgICB9CisgICAgICAgIGludCBiYXIyKGludCBwcmVkaWNhdGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCB4ID0gNzsKKyAgICAgICAgICAgIGludCB5ID0gODsKKyAgICAgICAgICAg
IHRocmVhZCBpbnQqIHB4ID0gJng7CisgICAgICAgICAgICB0aHJlYWQgaW50KiBweSA9ICZ5Owor
ICAgICAgICAgICAgaW50IHogPSAqKmZvbzIoJnB4LCAmcHksIHByZWRpY2F0ZSk7CisgICAgICAg
ICAgICByZXR1cm4gejsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbG93ZXJUb0xvZ2ljYWxNb2RlRm9yVGVzdGlu
Zyhwcm9ncmFtLCAiYmFyIiksIFttYWtlSW50KHByb2dyYW0sIDApXSksIDcpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbG93ZXJUb0xvZ2ljYWxN
b2RlRm9yVGVzdGluZyhwcm9ncmFtLCAiYmFyIiksIFttYWtlSW50KHByb2dyYW0sIDEpXSksIDgp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbG93
ZXJUb0xvZ2ljYWxNb2RlRm9yVGVzdGluZyhwcm9ncmFtLCAiYmFyMiIpLCBbbWFrZUludChwcm9n
cmFtLCAwKV0pLCA3KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsSW5saW5lZEZ1bmN0aW9u
KHByb2dyYW0sIGxvd2VyVG9Mb2dpY2FsTW9kZUZvclRlc3RpbmcocHJvZ3JhbSwgImJhcjIiKSwg
W21ha2VJbnQocHJvZ3JhbSwgMSldKSwgOCk7Cit9CisKIG9rVG9UZXN0ID0gdHJ1ZTsKIAogbGV0
IHRlc3RGaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XTG9naWNhbEVycm9yLmpzIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV0xvZ2ljYWxFcnJvci5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjg1Zjg1ODIzMDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XTG9naWNhbEVycm9yLmpzCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgV0xvZ2ljYWxFcnJvciBleHRlbmRzIEVycm9yIHsKKyAgICBj
b25zdHJ1Y3RvcihvcmlnaW5TdHJpbmcsIG1lc3NhZ2UpCisgICAgeworICAgICAgICBzdXBlcigi
UHJvZ3JhbSBkb2VzIG5vdCBjb25mb3JtIHRvIGxvZ2ljYWwgbW9kZSBydWxlcyBhdCAiICsgb3Jp
Z2luU3RyaW5nICsgIjogIiArIG1lc3NhZ2UpOworICAgICAgICB0aGlzLm9yaWdpblN0cmluZyA9
IG9yaWdpblN0cmluZzsKKyAgICAgICAgdGhpcy5zeW50YXhFcnJvck1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
aW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKaW5k
ZXggM2E3ZTk0OGJlNjcuLjhjMDAzZGU5YTZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL2luZGV4Lmh0bWwKQEAgLTc4LDExICs3OCwxMyBAQAogPHNjcmlwdCBzcmM9IkludExpdGVy
YWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJM
SFNMb2dpY2FsTW9kZUlubGluZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxhdGVDaGVj
a2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMZXhlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iTGV4ZXJUb2tlbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5
cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb2dpY2FsRXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTG9naWNhbE1vZGUuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkxvZ2ljYWxOb3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ikxvb3BDaGVj
a2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJNYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpz
Ij48L3NjcmlwdD4KQEAgLTEwMCw2ICsxMDIsNyBAQAogPHNjcmlwdCBzcmM9Ik9yaWdpbktpbmQu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJQb2ludGVyUmVtb3Zlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CkBAIC0xMDksNiArMTEyLDcgQEAKIDxz
Y3JpcHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQ
cm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHRyVHlwZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iUkhTTG9naWNhbE1vZGVJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJSZWN1cnNpb25DaGVja2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZWN1
cnNpdmVUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CkBAIC0xNDQsNiArMTQ4LDcgQEAKIDxzY3Jp
cHQgc3JjPSJWYXJpYWJsZURlY2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZhcmlhYmxl
UmVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWaXNpdGluZ1NldC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iV0xvZ2ljYWxFcnJvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
V1N5bnRheEVycm9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJXVHJhcEVycm9yLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJXVHlwZUVycm9yLmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>