<?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>145811</bug_id>
          
          <creation_ts>2015-06-09 12:37:33 -0700</creation_ts>
          <short_desc>JavaScript bindings are unnecessarily checking for impossible empty JSValue arguments</short_desc>
          <delta_ts>2015-06-09 14:18:59 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145815</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1100750</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 12:37:33 -0700</bug_when>
    <thetext>JavaScript bindings are unnecessarily checking for impossible empty JSValue arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100755</commentid>
    <comment_count>1</comment_count>
      <attachid>254592</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 12:47:38 -0700</bug_when>
    <thetext>Created attachment 254592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100756</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 12:48:28 -0700</bug_when>
    <thetext>Brady, this is fixing the isEmpty issue I spotted in the patch you were working on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100758</commentid>
    <comment_count>3</comment_count>
      <attachid>254592</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-09 12:54:48 -0700</bug_when>
    <thetext>Comment on attachment 254592
Patch

Nice cleanup. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100759</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 12:55:33 -0700</bug_when>
    <thetext>Committed r185373: &lt;http://trac.webkit.org/changeset/185373&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100783</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-09 14:17:13 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 145815</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100786</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 14:18:59 -0700</bug_when>
    <thetext>Committed r185377: &lt;http://trac.webkit.org/changeset/185377&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254592</attachid>
            <date>2015-06-09 12:47:38 -0700</date>
            <delta_ts>2015-06-09 12:54:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145811-20150609124710.patch</filename>
            <type>text/plain</type>
            <size>92742</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgxNzMyNDE0ZTYzMTQ0
YjYxOTcyOGUxNTMwNGI0MDk2NzM2NWJmNi4uMzQ2MzUyODZiNTdiNDQ1YTcxZDcyZDM4OTBiOTc5
YjNlN2ZhNjMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE1LTA2LTA5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0IGJpbmRpbmdz
IGFyZSB1bm5lY2Vzc2FyaWx5IGNoZWNraW5nIGZvciBpbXBvc3NpYmxlIGVtcHR5IEpTVmFsdWUg
YXJndW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBdCBzb21lIHBvaW50LCBzb21lb25lIHdobyBkaWRuJ3QgdW5kZXJzdGFuZCBKU1ZhbHVlIHZl
cnkgd2VsbCBhZGRlZCBjaGVja3MgZm9yCisgICAgICAgIGlzRW1wdHkgKGFuZCB0aGUgZnVuY3Rp
b24gaXNFbXB0eSBpdHNlbGYpIGluIEphdmFTY3JpcHQgYmluZGluZ3MuIEJ1dCB0aGUgZW5naW5l
CisgICAgICAgIG5ldmVyIHdvdWxkIHBhc3MgYW4gZW1wdHkgSlNWYWx1ZSB0byBhIGJpbmRpbmc7
IHRoYXQncyB1c2VkIG9ubHkgaW5zaWRlIHRoZQorICAgICAgICBlbmdpbmUgaXRzZWxmLiBJIHRo
aW5rIHRoaXMgd2FzIGRvbmUgYnkgc29tZSBHb29nbGUgVjggZXhwZXJ0cyBhIHdoaWxlIGJhY2ss
IHNvCisgICAgICAgIGl0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcgdGhleSBkaWRuJ3QgdW5k
ZXJzdGFuZCB0aGlzLiBCdXQgd2UgZG9uJ3Qgd2FudCB0bworICAgICAgICBrZWVwIGFsbCB0aGF0
IHVubmVlZGVkIGNvZGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNrOjpzZXRLaW5kKTogUmVtb3Zl
ZCB0aGUgaXNFbXB0eSBjbGF1c2UgaGVyZS4gSSBwcmVzdW1lIHRoaXMKKyAgICAgICAgd2FzIGNv
cGllZCBhbmQgcGFzdGVkIGZyb20gc2NyaXB0LWdlbmVyYXRlZCBiaW5kaW5ncy4gV2hpbGUgSSB3
YXMgYXQgaXQsIEkgdXNlZCBhCisgICAgICAgIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IGNvZGUg
cGF0aCB0aGF0IGF2b2lkcyBkb2luZyBhIHJlZi9kZXJlZiBvbiB0aGUgc3RyaW5nIGJ5CisgICAg
ICAgIHVzaW5nIGF1dG8mLiBUaGF0J3MgdHJpY2tpZXIgdG8gZG8gY29ycmVjdGx5IGZvciBmdW5j
dGlvbnMgd2l0aCBtb3JlIHRoYW4gb25lCisgICAgICAgIGFyZ3VtZW50LCBzbyBJIGRpZG4ndCBk
byBpdCBpbiB0aGUgYmluZGluZ3MgZ2VuZXJhdG9yIHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkpT
QXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1RleHRUcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1RleHRUcmFjazo6c2V0
S2luZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2s6OnNldExhbmd1YWdl
KTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFjazo6c2V0S2luZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SlNWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZSk6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKTogVXNlICI9IiBzeW50YXggaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciBz
dHlsZSBzeW50YXggZm9yCisgICAgICAgIHRoZSBhcmd1bWVudCBwcm9jZXNzaW5nLiBJIHRoaW5r
IHRoaXMgaXMgbW9yZSByZWFkYWJsZS4KKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KTogRm9yIHRoZSBlbnVtIGNvZGUgcGF0aCwgZGlkIHRoZSBtb3JlIGVmZmljaWVudCBhdXRvJgor
ICAgICAgICBpZGlvbSB0byBhdm9pZCByZWYvZGVyZWYgb24gYSBzdHJpbmcuIEZvciB0aGUgdG9F
eGlzdGluZ0F0b21pY1N0cmluZyBwYXRoLAorICAgICAgICByZXN0cnVjdHVyZWQgc28gd2UgZG9u
J3QgaGF2ZSB0byBjaGVjayB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgc29tZXRoaW5nIGlzIGF0
b21pYy4KKyAgICAgICAgTGF0ZXIgd2UgY291bGQgYWxzbyBhdm9pZCB0aGUgcmVmL2RlcmVmOyBh
ZGRlZCBhIEZJWE1FIGFib3V0IHRoYXQuCisgICAgICAgIChHZXROYXRpdmVUeXBlKTogVXNlIFN0
cmluZywgbm90IGNvbnN0IFN0cmluZywgZm9yIGxvY2FsIHZhcmlhYmxlcy4gU3VyZSwgdGhlCisg
ICAgICAgIHN0cmluZyBpcyBjb25zdCwgYnV0IHNvIGlzIGV2ZXJ5IG90aGVyIGxvY2FsIHZhcmlh
YmxlIHR5cGUgd2UgdXNlISBObyBuZWVkIHRvIGJlCisgICAgICAgIHdvcmR5IGFib3V0IGl0Lgor
ICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKTogUmVtb3ZlZCB0aGUgdW5lZWRlZCBjYWxscyB0byBp
c0VtcHR5LiBTaW5jZSB0aGUgY2FsbCBzaXRlcyBubworICAgICAgICBsb25nZXIgdXNlIGNvbnN0
cnVjdGlvbiBzeW50YXgsIHVzZWQgaW5pdGlhbGl6ZXIgc3ludGF4IHN0eWxlIGZvciBhIGNvdXBs
ZSBjbGFzc2VzCisgICAgICAgIHRoYXQgYXJlIGNvbnN0cnVjdGVkIHdpdGggbXVsdGlwbGUgYXJn
dW1lbnRzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHA6IFVwZGF0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDogRGl0dG8uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6IERpdHRvLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
bmRldGVybWluaXN0aWMuY3BwOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOiBEaXR0by4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcDogRGl0dG8uCisKIDIwMTUtMDYtMDkgIENzYWJhIE9zenRyb2dvbsOh
YyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdW51c2VkIHByaXZhdGUgZmllbGQg
d2FybmluZyBpbiBHcmFwaGljc0xheWVyVXBkYXRlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAppbmRleCBhM2FhYmE2NDQ0Njg2ZTg0
NDU2Y2U1YmNiZWMzOGQzOTJkNWUyNTJmLi40NDAwNTc5ZTM2NDk3NzE3NzZjNjVkNmE0NmY1ZDgz
YjJlYTg2Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9U
cmFja0N1c3RvbS5jcHAKQEAgLTQzLDEwICs0MywxMCBAQCB2b2lkIEpTQXVkaW9UcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB2b2lkIEpTQXVkaW9U
cmFjazo6c2V0S2luZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKLSAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbCgp
LnNldEtpbmQobmF0aXZlVmFsdWUpOworICAgIGltcGwoKS5zZXRLaW5kKHN0cmluZyk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwpAQCAt
NTYsMTAgKzU2LDEwIEBAIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBhdXRvJiBzdHJpbmcgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbCgpLnNldExhbmd1YWdlKG5hdGl2ZVZh
bHVlKTsKKyAgICBpbXBsKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKaW5kZXggYmI5NmMyMDFlMGQw
NTNjMTRkZmYyOWIyMDNlOWMwM2YxYzY5Mzg2OS4uMTg4NWM1NzdlNTI1OGFlM2RlNWQyZDJkMmFk
ZmNiMzA5MzkxZmY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4
dFRyYWNrQ3VzdG9tLmNwcApAQCAtNDMsMjkgKzQzLDI3IEBAIHZvaWQgSlNUZXh0VHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiB2b2lkIEpTVGV4
dFRyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBjb25zdCBT
dHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaW1wbCgpLnNldEtpbmQobmF0aXZlVmFsdWUpOworICAgIGlt
cGwoKS5zZXRLaW5kKHN0cmluZyk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIHJldHVybjsKICNlbmRpZgogfQogCiB2b2lkIEpT
VGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAg
Y29uc3QgU3RyaW5nJiBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgYXV0byYgc3RyaW5nID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGltcGwoKS5zZXRMYW5ndWFnZShuYXRpdmVWYWx1
ZSk7CisgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIHJldHVybjsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3Vz
dG9tLmNwcAppbmRleCBlN2JjYmEyMTVlNGY0YTg0ZWU4ODQxY2NiMzI3ODk4YzZjODllOTkzLi45
NDg2Nzg4YTY2YjI0MjEzNzdkYWM1MTA2YjZiZjU1MjY3NjI3ZjAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKQEAgLTQyLDI5ICs0
MiwyNyBAQCB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAKIHZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKLSAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbCgp
LnNldEtpbmQobmF0aXZlVmFsdWUpOworICAgIGltcGwoKS5zZXRLaW5kKHN0cmluZyk7CiAjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAg
IHJldHVybjsKICNlbmRpZgogfQogCiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIGNvbnN0IFN0cmluZyYgbmF0aXZlVmFsdWUo
dmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOworICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpbXBsKCkuc2V0TGFuZ3VhZ2UobmF0aXZlVmFsdWUpOworICAgIGltcGwoKS5zZXRMYW5ndWFn
ZShzdHJpbmcpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSAgICByZXR1cm47CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA4NDRmNjMwNzFh
MmUxZTg2MDg1MGNjZDczYWRlZDhlYmZhY2MzMWRiLi5jMTRkZWRhOWJmZWYxMzBkNmRjNzllNWE0
Y2Q3MmMyYzFjOTI2Yjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMjYzOCw3ICsyNjM4LDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRpdmVU
eXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUpIC4gIiBuYXRpdmVWYWx1ZSgi
IC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkgLiAi
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXRO
YXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUpIC4gIiBuYXRpdmVW
YWx1ZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUi
LCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25h
bCJ9KSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwogCkBAIC0zMjk0LDkgKzMy
OTQsMTEgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIAogICAgICAgICAgICAgbXkgJGFyZ1Zh
bHVlID0gImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKLSAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBjb25zdCBTdHJpbmcgJHtuYW1lfSgke2FyZ1ZhbHVlfS5pc0VtcHR5
KCkgPyBTdHJpbmcoKSA6ICR7YXJnVmFsdWV9LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAvLyBLZWVwIHBvaW50
ZXIgdG8gdGhlIEpTU3RyaW5nIGluIGEgbG9jYWwgc28gd2UgZG9uJ3QgbmVlZCB0byByZWYgdGhl
IFN0cmluZy5cbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8q
ICR7bmFtZX1TdHJpbmcgPSAke2FyZ1ZhbHVlfS50b1N0cmluZyhleGVjKTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mICRuYW1lID0gJHtuYW1lfVN0cmluZy0+dmFs
dWUoZXhlYyk7XG4iKTsKIAogICAgICAgICAgICAgbXkgQGVudW1WYWx1ZXMgPSAkY29kZUdlbmVy
YXRvci0+VmFsaWRFbnVtVmFsdWVzKCRhcmdUeXBlKTsKICAgICAgICAgICAgIG15IEBlbnVtQ2hl
Y2tzID0gKCk7CkBAIC0zMzI4LDEyICszMzMwLDEyIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjawogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlJlcXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmcifSkgewotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8QXRvbWljU3RyaW5nSW1w
bD4gZXhpc3RpbmdfJG5hbWUgPSBleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc0VtcHR5KCkg
PyBudWxscHRyIDogZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkudG9TdHJpbmcoZXhlYyktPnRv
RXhpc3RpbmdBdG9taWNTdHJpbmcoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKCFleGlzdGluZ18kbmFtZSlcbiIpOworICAgICAgICAgICAg
ICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBp
ZiB3ZSBhZGRlZCBhbiBBdG9taWNTdHJpbmcoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYpIGNv
bnN0cnVjdG9yIGFuZCByZW1vdmVkIHRoZSBjYWxsIHRvIGdldCgpIGhlcmUuCisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEF0b21pY1N0cmluZyAkbmFtZSA9IGV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpLnRvU3RyaW5nKGV4ZWMpLT50b0V4aXN0aW5nQXRvbWljU3Ry
aW5nKGV4ZWMpLmdldCgpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICgkbmFtZS5pc051bGwoKSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgY29uc3QgQXRvbWlj
U3RyaW5nICRuYW1lKCpleGlzdGluZ18kbmFtZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICIgLiBHZXROYXRpdmVU
eXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUoIiAuIEpTVmFsdWVUb05hdGl2
ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwgJiYgJGRlZmF1bHRBdHRyaWJ1dGUgJiYgJGRlZmF1bHRB
dHRyaWJ1dGUgZXEgIk51bGxTdHJpbmciID8gImFyZ3VtZW50T3JOdWxsKGV4ZWMsICRhcmdzSW5k
ZXgpIiA6ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIsICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkgLiAiKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21T
aWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFy
YW1ldGVyLCAkb3B0aW9uYWwgJiYgJGRlZmF1bHRBdHRyaWJ1dGUgJiYgJGRlZmF1bHRBdHRyaWJ1
dGUgZXEgIk51bGxTdHJpbmciID8gImFyZ3VtZW50T3JOdWxsKGV4ZWMsICRhcmdzSW5kZXgpIiA6
ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIsICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkgLiAiO1xuIik7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICMgSWYgYSBwYXJhbWV0ZXIgaXMgImFuIGluZGV4IiBhbmQgaXQncyBu
ZWdhdGl2ZSBpdCBzaG91bGQgdGhyb3cgYW4gSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uLgpAQCAt
MzY3Miw3ICszNjc0LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlCiAKIG15ICVu
YXRpdmVUeXBlID0gKAogICAgICJDb21wYXJlSG93IiA9PiAiUmFuZ2U6OkNvbXBhcmVIb3ciLAot
ICAgICJET01TdHJpbmciID0+ICJjb25zdCBTdHJpbmciLAorICAgICJET01TdHJpbmciID0+ICJT
dHJpbmciLAogICAgICJOb2RlRmlsdGVyIiA9PiAiUmVmUHRyPE5vZGVGaWx0ZXI+IiwKICAgICAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9PiAiUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4i
LAogICAgICJEYXRlIiA9PiAiZG91YmxlIiwKQEAgLTM3MTEsNyArMzcxMyw3IEBAIHN1YiBHZXRO
YXRpdmVUeXBlCiAgICAgcmV0dXJuICJWZWN0b3I8IiAuIEdldE5hdGl2ZVZlY3RvcklubmVyVHlw
ZSgkYXJyYXlPclNlcXVlbmNlVHlwZSkgLiAiPiIgaWYgJGFycmF5T3JTZXF1ZW5jZVR5cGU7CiAK
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIHJl
dHVybiAiY29uc3QgU3RyaW5nIjsKKyAgICAgICAgcmV0dXJuICJTdHJpbmciOwogICAgIH0KIAog
ICAgICMgRm9yIGFsbCBvdGhlciB0eXBlcywgdGhlIG5hdGl2ZSB0eXBlIGlzIGEgcG9pbnRlciB3
aXRoIHNhbWUgdHlwZSBuYW1lIGFzIHRoZSBJREwgdHlwZS4KQEAgLTM4MjMsMTQgKzM4MjUsMTQg
QEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5n
V2l0aE51bGxDaGVjayhleGVjLCAkdmFsdWUpIgogICAgICAgICB9CiAgICAgICAgIGlmICgkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQXRvbWljU3RyaW5nIn0pIHsKLSAgICAgICAg
ICAgIHJldHVybiAiJHZhbHVlLmlzRW1wdHkoKSA/IEF0b21pY1N0cmluZygpIDogJHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSI7CisgICAgICAgICAgICByZXR1cm4g
IiR2YWx1ZS50b1N0cmluZyhleGVjKS0+dG9BdG9taWNTdHJpbmcoZXhlYykiOwogICAgICAgICB9
CiAgICAgICAgICMgRklYTUU6IEFkZCB0aGUgY2FzZSBmb3IgJ2lmICgkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRVbmRlZmluZWRBcyJ9IGFuZCAkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRVbmRlZmluZWRBcyJ9IGVxICJOdWxsU3RyaW5nIikpJy4K
LSAgICAgICAgcmV0dXJuICIkdmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiAkdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKKyAgICAgICAgcmV0dXJuICIkdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgImFueSIp
IHsKLSAgICAgICAgcmV0dXJuICJleGVjLT52bSgpLCAkdmFsdWUiOworICAgICAgICByZXR1cm4g
InsgZXhlYy0+dm0oKSwgJHZhbHVlIH0iOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiTm9k
ZUZpbHRlciIpIHsKQEAgLTM4NDUsNyArMzg0Nyw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAog
ICAgIGlmICgkdHlwZSBlcSAiRGljdGlvbmFyeSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIkRpY3Rpb25hcnkuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAiZXhlYywg
JHZhbHVlIjsKKyAgICAgICAgcmV0dXJuICJ7IGV4ZWMsICR2YWx1ZSB9IjsKICAgICB9CiAKICAg
ICBpZiAoJHR5cGUgZXEgIkRPTVN0cmluZ0xpc3QiICkgewpAQCAtMzg3Myw3ICszODc1LDcgQEAg
c3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNF
bnVtVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICIkdmFsdWUuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiAkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKKyAgICAgICAgcmV0
dXJuICIkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKICAgICB9CiAKICAgICAj
IERlZmF1bHQsIGFzc3VtZSBhdXRvZ2VuZXJhdGVkIHR5cGUgY29udmVyc2lvbiByb3V0aW5lcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBkNGUzNjI5ZGNmNmEyODcyMGZi
N2IxNzFjZjk0ZmQ5MzMyNzBjMGUwLi4zNWU4YWQzNjk4NDk2ZGJjYzQxZWI5ZjYyMTNmYjkyOWZj
ODhhZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjE0LDcgKzIx
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotICAgIE5vZGUqIG5leHRDaGlsZChKU05vZGU6OnRvV3JhcHBlZChl
eGVjLT5hcmd1bWVudCgwKSkpOworICAgIE5vZGUqIG5leHRDaGlsZCA9IEpTTm9kZTo6dG9XcmFw
cGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwuZXhjaXRpbmdGdW5jdGlvbihuZXh0Q2hpbGQpOwpAQCAtMjMxLDcgKzIzMSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShFCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmluZyBtZXNzYWdlKGV4ZWMtPmFyZ3VtZW50KDApLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmNwcAppbmRleCAyNGUyNmEzMzRjYWFkMWM4Y2EwMDQyNDc5ZTEzOGIwZDA5YWUyNTEy
Li5iMGFkOWRjNmJkYWUzMDRiMDgwMTc4MjdkYjZiOTY3NmZlZWViNjY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTIwNSw3ICsyMDUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rp
b25Bbm90aGVyRnVuYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBjb25zdCBTdHJpbmcgc3RyKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAg
ICBTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbm90aGVyRnVu
Y3Rpb24oc3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGIzMWFmZjAxY2JiMDdl
OWVlM2RhZTJmOTJkN2VjYTU3OThmOTFlNGQuLjVkMTRjNGMwY2NhNjMyNDQ1YjRhZDMxMGE1MTgx
OGU4OWM0Mzg5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMjQzLDcgKzI0Myw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGVGdW5jdGlvbkl0ZW0oRXhlY1N0YXRlKiBlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGludCBpbmRleCh0b1VJbnQzMihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGludCBpbmRleCA9IHRvVUludDMyKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoaW5kZXggPCAw
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yOTUsNyArMjk1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChFeGUKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIEV2ZW50KiBldnQoSlNFdmVudDo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDAp
KSk7CisgICAgRXZlbnQqIGV2dCA9IEpTRXZlbnQ6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgw
KSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQm9vbGVhbihpbXBsLmRpc3BhdGNoRXZlbnQoZXZ0LCBlYykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAppbmRleCBiNGExNzczMGI1MzYxMTkxMTZmNGY5NTJhMDlkN2QwZjRkYjExYzIzLi5jYzAz
Y2I4YWEyY2JiZjNjNGRhMzczMDQ0NDZmMzYxMjk1ZDVjY2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcApAQCAtMjcyLDEwICsyNzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJmYWMKICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvbnN0IFN0cmluZyBzdHIxKGV4ZWMtPmFy
Z3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyMSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGNvbnN0IFN0cmluZyBzdHIyKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHko
KSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3RyMiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QKIHsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwotICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2
YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGljQXR0cihu
YXRpdmVWYWx1ZSk7CkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBs
LnNldEltcGxlbWVudHNTdHIyKG5hdGl2ZVZhbHVlKTsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lk
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgTm9kZSogbmF0aXZlVmFsdWUoSlNOb2RlOjp0
b1dyYXBwZWQodmFsdWUpKTsKKyAgICBOb2RlKiBuYXRpdmVWYWx1ZSA9IEpTTm9kZTo6dG9XcmFw
cGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbXBsZW1lbnRzTm9kZShuYXRpdmVWYWx1ZSk7CkBA
IC03MzQsNyArNzM0LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamUKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGJhc2VPYmplY3QpOwotICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5
KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAg
U3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdGF0aWNBdHRyKG5hdGl2ZVZh
bHVlKTsKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgY29uc3QgU3RyaW5nIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRlc3RTdXBwbGVt
ZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0cjIoJmltcGwsIG5hdGl2ZVZhbHVlKTsKQEAgLTc5Miw3
ICs3OTIsNyBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgTm9kZSogbmF0aXZl
VmFsdWUoSlNOb2RlOjp0b1dyYXBwZWQodmFsdWUpKTsKKyAgICBOb2RlKiBuYXRpdmVWYWx1ZSA9
IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c2V0U3Vw
cGxlbWVudGFsTm9kZSgmaW1wbCwgbmF0aXZlVmFsdWUpOwpAQCAtODM1LDEwICs4MzUsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvbkltcGxlbWVudHNNZXRob2QyKEUKICAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcgc3Ry
QXJnKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyQXJnID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnKEpTVGVzdE9iajo6dG9X
cmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDEpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLmltcGxlbWVudHNNZXRob2QyKHNjcmlwdENv
bnRleHQsIHN0ckFyZywgb2JqQXJnLCBlYykpKTsKQEAgLTkwMSwxMCArOTAxLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2QyCiAgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nIHN0ckFyZyhl
eGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyhKU1Rlc3RPYmo6OnRvV3JhcHBl
ZChleGVjLT5hcmd1bWVudCgxKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9k
MigmaW1wbCwgc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDYyZjg0MzIzNGJlMTFlYzUxMDI2MTc0ZjMy
ZjNiYmZmYTdlZjFmMDguLmZmN2FlNDE3ODY1YWE0ZDhhNjlmMmUyZGY3OTE0NGQxNzZmODZkNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyOCwxMyArMTI4LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBjb25zdCBTdHJpbmcgc3RyMShleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBT
dHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CisgICAgU3RyaW5nIHN0cjEgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJp
bmcgc3RyMihleGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIHN0cjIg
PSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcgc3RyMyhhcmd1bWVudE9y
TnVsbChleGVjLCAyKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGFyZ3VtZW50T3JOdWxsKGV4ZWMs
IDIpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIHN0cjMgPSBhcmd1
bWVudE9yTnVsbChleGVjLCAyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+
IG9iamVjdCA9IFRlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKCpj
YXN0ZWRUaGlzLT5kb2N1bWVudCgpLCBzdHIxLCBzdHIyLCBzdHIzLCBlYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKaW5kZXggN2U5NDZmNWEyODljNmUwYWRlYzllNTMwYTkz
ZDVjNjc0ZGFlZjQwMi4uY2ZmN2M3NjZiMGI5MTNmNThhM2FhM2FiOGQ1MWYxOWNkMmU0OGQ0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vbmRldGVybWluaXN0aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMzc4LDcgKzM3OCw3IEBA
IHZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmF0aXZlVmFs
dWUodmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
cihuYXRpdmVWYWx1ZSk7CkBAIC0zOTgsNyArMzk4LDcgQEAgdm9pZCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U08KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBT
dHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBp
bXBsLnNldE5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKG5hdGl2ZVZhbHVlKTsKQEAgLTQx
OCw3ICs0MTgsNyBAQCB2b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4ZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgY29uc3QgU3Ry
aW5nIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIobmF0aXZlVmFsdWUpOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZv
aWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY29uc3QgU3RyaW5nIG5h
dGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1NldHRl
ckV4Y2VwdGlvbkF0dHIobmF0aXZlVmFsdWUsIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMjE5ZjM1ZjEw
ZmQzZTc3ZDQ3NjViNTFiMDZiMWJiODI4Y2JjMGZlZC4uMGU4YTNkZWEyZWM5MGYzMzU1YTlkZWMy
ZmJiYjQ1Zjc1M2E3MWY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTE4OTQsNyArMTg5NCw3IEBAIHZvaWQg
c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VPYmplCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKLSAgICBjb25z
dCBTdHJpbmcgbmF0aXZlVmFsdWUodmFsdWUuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgVGVzdE9iajo6c2V0U3RhdGlj
U3RyaW5nQXR0cihuYXRpdmVWYWx1ZSk7CkBAIC0xOTI3LDcgKzE5MjcsNyBAQCB2b2lkIHNldEpT
VGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmF0aXZlVmFsdWUodmFsdWUuaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwor
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKG5hdGl2ZVZhbHVlICE9ICIiICYmIG5hdGl2ZVZhbHVlICE9ICJFbnVtVmFs
dWUxIiAmJiBuYXRpdmVWYWx1ZSAhPSAiRW51bVZhbHVlMiIgJiYgbmF0aXZlVmFsdWUgIT0gIkVu
dW1WYWx1ZTMiKQpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpCeXRlQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgaW50OF90IG5hdGl2ZVZhbHVlKHRvSW50OChleGVjLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbikpOworICAgIGludDhfdCBuYXRpdmVWYWx1ZSA9IHRvSW50OChleGVjLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Qnl0ZUF0dHIobmF0aXZlVmFsdWUpOwpA
QCAtMTk2OSw3ICsxOTY5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVp
bnQ4X3QgbmF0aXZlVmFsdWUodG9VSW50OChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikp
OworICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQ4KGV4ZWMsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRPY3RldEF0dHIobmF0aXZlVmFsdWUpOwpAQCAtMTk4
OSw3ICsxOTg5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludDE2X3Qg
bmF0aXZlVmFsdWUodG9JbnQxNihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAg
IGludDE2X3QgbmF0aXZlVmFsdWUgPSB0b0ludDE2KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIobmF0aXZlVmFsdWUpOwpAQCAtMjAwOSw3ICsy
MDA5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVpbnQxNl90IG5hdGl2
ZVZhbHVlKHRvVUludDE2KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgdWlu
dDE2X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQxNihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGltcGwuc2V0VW5zaWduZWRTaG9ydEF0dHIobmF0aXZlVmFsdWUpOwpAQCAtMjAy
OSw3ICsyMDI5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2
ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQg
bmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRMb25nQXR0cihuYXRpdmVWYWx1ZSk7CkBAIC0yMDQ5LDcgKzIwNDksNyBAQCB2
b2lkIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgbG9uZyBsb25nIG5hdGl2ZVZhbHVlKHRv
SW50NjQoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBsb25nIGxvbmcgbmF0
aXZlVmFsdWUgPSB0b0ludDY0KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbC5zZXRMb25nTG9uZ0F0dHIobmF0aXZlVmFsdWUpOwpAQCAtMjA2OSw3ICsyMDY5LDcgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBFbmMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRp
dmVWYWx1ZSh0b1VJbnQ2NChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVWYWx1ZSA9IHRvVUludDY0KGV4ZWMsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihuYXRpdmVW
YWx1ZSk7CkBAIC0yMDg5LDcgKzIwODksNyBAQCB2b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdQogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgY29uc3QgU3RyaW5nIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0
U3RyaW5nQXR0cihuYXRpdmVWYWx1ZSk7CkBAIC0yMTA5LDcgKzIxMDksNyBAQCB2b2lkIHNldEpT
VGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUoSlNUZXN0T2JqOjp0
b1dyYXBwZWQodmFsdWUpKTsKKyAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRUZXN0T2JqQXR0cihuYXRpdmVWYWx1ZSk7
CkBAIC0yMTI5LDcgKzIxMjksNyBAQCB2b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
VGVzdE9iaiogbmF0aXZlVmFsdWUoSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpKTsKKyAgICBU
ZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbC5zZXRYTUxPYmpBdHRyKG5hdGl2ZVZhbHVlKTsKQEAgLTIxNDksNyArMjE0OSw3IEBAIHZv
aWQgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBib29sIG5hdGl2ZVZhbHVlKHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7CisgICAgYm9vbCBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRDcmVhdGUobmF0aXZlVmFsdWUpOwpAQCAtMjE2OSw3ICsyMTY5
LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY28KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYXRp
dmVWYWx1ZSh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOworICAgIFN0
cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKQEAgLTIx
ODksNyArMjE4OSw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0
aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGlu
dCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkaW50ZWdyYWxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwpAQCAtMjIwOSw3ICsyMjA5LDcgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2IKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVuc2lnbmVkIG5hdGl2ZVZhbHVlKHRv
VUludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgdW5zaWduZWQgbmF0
aXZlVmFsdWUgPSB0b1VJbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwpAQCAtMjIyOSw3
ICsyMjI5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmMKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGJvb2wgbmF0aXZl
VmFsdWUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBib29sIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9Cb29sZWFuKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKQEAg
LTIyNDksNyArMjI0OSw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBjb25z
dCBTdHJpbmcgbmF0aXZlVmFsdWUodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFs
dWUpKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVj
ayhleGVjLCB2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCBuYXRpdmVWYWx1
ZSk7CkBAIC0yMjY5LDcgKzIyNjksNyBAQCB2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jbwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgY29uc3QgU3RyaW5nIG5hdGl2ZVZhbHVlKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4
ZWMsIHZhbHVlKSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhO
dWxsQ2hlY2soZXhlYywgdmFsdWUpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0
dHIsIG5hdGl2ZVZhbHVlKTsKQEAgLTIyODksNyArMjI4OSw3IEBAIHZvaWQgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbikpOworICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIG5hdGl2ZVZh
bHVlKTsKQEAgLTIzMDksNyArMjMwOSw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBib29sIG5hdGl2ZVZhbHVlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgYm9vbCBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRCb29sZWFu
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0
ciwgbmF0aXZlVmFsdWUpOwpAQCAtMjMyOSw3ICsyMzI5LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFVSTEF0dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CkBAIC0yMzQ5LDcgKzIzNDksNyBAQCB2b2lkIHNl
dEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKUwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbmF0aXZlVmFs
dWUodG9GbG9hdDMyQXJyYXkodmFsdWUpKTsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBuYXRp
dmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRUeXBlZEFycmF5
QXR0cihuYXRpdmVWYWx1ZS5nZXQoKSk7CkBAIC0yMzY5LDcgKzIzNjksNyBAQCB2b2lkIHNldEpT
VGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VPYmplY3QsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhl
YywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKQEAgLTIzOTAsNyArMjM5MCw3IEBAIHZvaWQgc2V0SlNU
ZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZU9iamVjdCwKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihl
eGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGludCBuYXRpdmVWYWx1ZSA9IHRv
SW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7CkBAIC0yNDExLDcgKzI0MTEsNyBA
QCB2b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgY29uc3QgU3RyaW5nIG5hdGl2ZVZh
bHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24obmF0aXZlVmFsdWUpOwpAQCAtMjQzMiw3ICsyNDMyLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2IKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTdHJpbmcgbmF0aXZlVmFsdWUodmFsdWUu
aXNFbXB0eSgpID8gU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuYXRpdmVW
YWx1ZSwgZWMpOwpAQCAtMjQ4MSw3ICsyNDgxLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKGV4
ZWMsIG5hdGl2ZVZhbHVlKTsKQEAgLTI1MDEsNyArMjUwMSw3IEBAIHZvaWQgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlKEpTVGVzdE9iajo6dG9XcmFwcGVk
KHZhbHVlKSk7CisgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBl
ZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CkBAIC0yNTI0LDcgKzI1MjQsNyBAQCB2b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlTwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUoSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpKTsK
KyAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZXhlYywgbmF0aXZl
VmFsdWUpOwpAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2IKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwotICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlKEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKSk7
CisgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBA
IC0yNTY3LDcgKzI1NjcsNyBAQCB2b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgVGVz
dE9iaiogbmF0aXZlVmFsdWUoSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpKTsKKyAgICBUZXN0
T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0
byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTI1OTAsNyAr
MjU5MCw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBUZXN0T2JqKiBuYXRp
dmVWYWx1ZShKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSkpOworICAgIFRlc3RPYmoqIG5hdGl2
ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvKiBzY3JpcHRD
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpAQCAtMjYxMyw3ICsyNjEzLDcgQEAg
dm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZShFeGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlKEpT
VGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKSk7CisgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBK
U1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0yNjM2LDcgKzI2MzYsNyBAQCB2b2lkIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iagogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUoSlNUZXN0T2JqOjp0
b1dyYXBwZWQodmFsdWUpKTsKKyAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlKG5hdGl2ZVZhbHVlKTsKQEAgLTI2NTcsNyArMjY1Nyw3IEBAIHZvaWQg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVj
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50
MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldENvbmRpdGlv
bmFsQXR0cjEobmF0aXZlVmFsdWUpOwpAQCAtMjY3OSw3ICsyNjc5LDcgQEAgdm9pZCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEVuY29kZWQKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVj
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRy
MihuYXRpdmVWYWx1ZSk7CkBAIC0yNzAxLDcgKzI3MDEsNyBAQCB2b2lkIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pKTsKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKG5hdGl2
ZVZhbHVlKTsKQEAgLTI3NjcsNyArMjc2Nyw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqQW55QXR0cmli
dXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBuYXRpdmVWYWx1ZShleGVjLT52bSgpLCB2
YWx1ZSk7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUgPSB7IGV4ZWMt
PnZtKCksIHZhbHVlIH07CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QW55QXR0cmlidXRlKG5hdGl2ZVZhbHVlKTsK
QEAgLTI3ODcsNyArMjc4Nyw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBT
VkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1ZShKU1NWR1BvaW50Ojp0b1dy
YXBwZWQodmFsdWUpKTsKKyAgICBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVW
YWx1ZSA9IEpTU1ZHUG9pbnQ6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0TXV0YWJs
ZVBvaW50KG5hdGl2ZVZhbHVlKTsKQEAgLTI4MDcsNyArMjgwNyw3IEBAIHZvaWQgc2V0SlNUZXN0
T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVW
YWx1ZShKU1NWR1BvaW50Ojp0b1dyYXBwZWQodmFsdWUpKTsKKyAgICBTVkdQcm9wZXJ0eVRlYXJP
ZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1ZSA9IEpTU1ZHUG9pbnQ6OnRvV3JhcHBlZCh2YWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwuc2V0SW1tdXRhYmxlUG9pbnQobmF0aXZlVmFsdWUpOwpAQCAtMjgyNyw3ICsy
ODI3LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1
ZSh0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2
ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwuc2V0Qmx1ZWJlcnJ5KG5hdGl2ZVZhbHVlKTsKQEAgLTI4NDcsNyArMjg0Nyw3IEBAIHZvaWQg
c2V0SlNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBmbG9hdCBuYXRpdmVWYWx1ZSh2YWx1ZS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICBmbG9hdCBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvRmxvYXQoZXhlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwuc2V0U3RyaWN0RmxvYXQobmF0aXZlVmFsdWUpOwpAQCAtMjg2Nyw3ICsyODY3
LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpJZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSh0
b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2ZVZh
bHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwu
c2V0SWQobmF0aXZlVmFsdWUpOwpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgdm9pZCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlT2IKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0TnVsbGFibGVMb25nU2V0dGFi
bGVBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwpAQCAtMjkyNCw3ICsyOTI0LDcgQEAgdm9pZCBzZXRK
U1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY28KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSh0b0ludDMyKGV4ZWMsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihl
eGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJp
bmdWYWx1ZShuYXRpdmVWYWx1ZSk7CkBAIC0yOTQ0LDcgKzI5NDQsNyBAQCB2b2lkIHNldEpTVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGJhc2VPYgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgY29uc3QgU3RyaW5nIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1w
dHkoKSA/IFN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAg
ICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmIChuYXRpdmVWYWx1ZSAhPSAiIiAmJiBuYXRpdmVWYWx1ZSAhPSAiT3B0aW9uYWxW
YWx1ZTEiICYmIG5hdGl2ZVZhbHVlICE9ICJPcHRpb25hbFZhbHVlMiIgJiYgbmF0aXZlVmFsdWUg
IT0gIk9wdGlvbmFsVmFsdWUzIikKQEAgLTI5ODAsMTMgKzI5ODAsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRo
QXJncyhFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlm
IChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgaW50IGxvbmdBcmcodG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbikpOworICAgIGludCBsb25nQXJnID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0
cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiog
b2JqQXJnKEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgVGVz
dE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52b2lkTWV0aG9kV2l0aEFy
Z3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpOwpAQCAtMzAxNSwxMyArMzAxNSwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1l
dGhvZFdpdGhBcmdzKEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBpbnQ4X3QgYnl0ZUFyZyh0b0ludDgoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQ4X3QgYnl0ZUFyZyA9IHRvSW50OChleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgVGVzdE9iaiogb2JqQXJnKEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIp
KSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJn
dW1lbnQoMikpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhieXRlQXJnLCBzdHJBcmcs
IG9iakFyZykpOwpAQCAtMzA1MCwxMyArMzA1MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyhFeGVj
UwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICB1aW50OF90
IG9jdGV0QXJnKHRvVUludDgoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pKTsKKyAgICB1aW50OF90IG9jdGV0QXJnID0gdG9VSW50OChleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0
cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiog
b2JqQXJnKEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgVGVz
dE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLm9jdGV0TWV0aG9kV2l0aEFyZ3Mob2N0ZXRBcmcsIHN0ckFyZywgb2JqQXJnKSk7
CkBAIC0zMDg1LDEzICszMDg1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBsb25nQXJnKHRvSW50
MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQg
bG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nIHN0
ckFyZyhleGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIHN0ckFyZyA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyhKU1Rlc3RPYmo6OnRv
V3JhcHBlZChleGVjLT5hcmd1bWVudCgyKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVz
dE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTWV0aG9k
V2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpKTsKQEAgLTMxMjAsMTMgKzMxMjAsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcodG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbikpOworICAgIGludCBsb25nQXJnID0gdG9JbnQzMihleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEp
LmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgVGVzdE9iaiogb2JqQXJnKEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50
KDIpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+
YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLm9iak1ldGhvZFdpdGhBcmdzKGxvbmdBcmcsIHN0ckFyZywgb2JqQXJnKSkpOwpA
QCAtMzE0Myw3ICszMTQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhFeGUKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxTY3JpcHRQ
cm9maWxlPj4gc2VxdWVuY2VBcmcoKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwg
SlNTY3JpcHRQcm9maWxlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpTU2NyaXB0UHJvZmls
ZTo6dG9XcmFwcGVkKSkpOworICAgIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4+IHNlcXVl
bmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgSlNTY3JpcHRQcm9m
aWxlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpTU2NyaXB0UHJvZmlsZTo6dG9XcmFwcGVk
KSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZyk7CkBAIC0zMTYwLDcgKzMxNjAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJu
aW5nU2VxdWVuY2UoRQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBpbnQgbG9uZ0FyZyh0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKSk7CisgICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShsb25nQXJnKSk7CkBAIC0zMTc3
LDkgKzMxNzcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nIGVudW1BcmcoZXhlYy0+
YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIC8vIEtlZXAgcG9pbnRlciB0byB0aGUgSlNT
dHJpbmcgaW4gYSBsb2NhbCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlZiB0aGUgU3RyaW5nLgorICAg
IGF1dG8qIGVudW1BcmdTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGF1dG8mIGVudW1BcmcgPSBlbnVt
QXJnU3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBpZiAoZW51bUFyZyAhPSAiIiAmJiBlbnVtQXJn
ICE9ICJFbnVtVmFsdWUxIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUyIiAmJiBlbnVtQXJnICE9
ICJFbnVtVmFsdWUzIikKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoKmV4ZWMsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEVudW1BcmciLCAi
XCJcIiwgXCJFbnVtVmFsdWUxXCIsIFwiRW51bVZhbHVlMlwiLCBcIkVudW1WYWx1ZTNcIiIpOwog
ICAgIGltcGwubWV0aG9kV2l0aEVudW1BcmcoZW51bUFyZyk7CkBAIC0zMTk3LDEwICszMTk5LDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzCiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKKyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9i
aiogb2JqQXJnKEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDEpKSk7CisgICAg
VGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkp
OwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwpA
QCAtMzIxOSw3ICszMjIxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZEFyZyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShzZXJpYWxpemVkQXJnKTsKQEAgLTMyMzYsMTAg
KzMyMzgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QoRXhlY1N0YXRlKgogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBEaWN0aW9uYXJ5IG9vKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKyAgICBEaWN0aW9uYXJ5IG9vID0geyBleGVjLCBleGVjLT5hcmd1bWVudCgwKSB9
OwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgRGljdGlvbmFyeSBvb28oZXhl
YywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIERpY3Rpb25hcnkgb29vID0geyBleGVjLCBleGVj
LT5hcmd1bWVudCgxKSB9OwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5vcHRpb25zT2JqZWN0KG9vLCBvb28pOwpAQCAtMzQ2Miw3ICszNDY0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEFyZyhFeGUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAKLSAgICBpbnQgb3B0KHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQgb3B0ID0gdG9JbnQzMihleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwpAQCAtMzQ3OSw3
ICszNDgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IG5vbk9wdCh0b0ludDMyKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG5vbk9wdCA9IHRvSW50
MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTM0ODksNyArMzQ5MSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogCi0gICAgaW50IG9wdCh0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEp
LCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG9wdCA9IHRvSW50MzIoZXhlYywgZXhlYy0+
YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhu
b25PcHQsIG9wdCk7CkBAIC0zNTA2LDcgKzM1MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbm9u
T3B0KHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsK
KyAgICBpbnQgbm9uT3B0ID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMzUxNiw3
ICszNTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQgb3B0MSh0b0ludDMy
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IG9w
dDEgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsK
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMikg
ewpAQCAtMzUyNCw3ICszNTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQg
b3B0Mih0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKSk7
CisgICAgaW50IG9wdDIgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0
Mik7CkBAIC0zNTQ2LDcgKzM1NDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKAogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGNv
bnN0IFN0cmluZyBzdHIoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmlu
ZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZyhzdHIpOwpAQCAtMzU2MSw3ICszNTYzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0kKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQiKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBzdHIoZXhlYy0+YXJn
dW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKHN0cik7
CkBAIC0zNTc2LDcgKzM1NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSQogICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc051bGxTdHJpbmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBzdHIoYXJndW1lbnRPck51bGwoZXhlYywg
MCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBhcmd1bWVudE9yTnVsbChleGVjLCAwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBzdHIgPSBhcmd1bWVudE9yTnVsbChl
eGVjLCAwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmlu
ZyhzdHIpOwpAQCAtMzYxMCw3ICszNjEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0EKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IG5vbkNhbGxi
YWNrKHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsK
KyAgICBpbnQgbm9uQ2FsbGJhY2sgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKQpAQCAtMzcxNiwxMCArMzcxOCwxMCBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcoSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhl
Yy0+YXJndW1lbnQoMCkpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0
cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsK
KyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVy
bG9hZGVkTWV0aG9kKG9iakFyZywgc3RyQXJnKTsKQEAgLTM3MzYsNyArMzczOCw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDIoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIFRlc3RPYmoqIG9iakFyZyhKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1
bWVudCgwKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4
ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC0z
NzQ2LDcgKzM3NDgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKAogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGludCBsb25nQXJn
KHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pKTsKKyAg
ICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVy
bG9hZGVkTWV0aG9kKG9iakFyZywgbG9uZ0FyZyk7CkBAIC0zNzYzLDcgKzM3NjUsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QzKAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHko
KSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKKyAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5vdmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CkBAIC0zNzgwLDcgKzM3ODIsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q0KAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBpbnQgbG9uZ0FyZyh0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKSk7CisgICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsKQEAgLTM4MTQsNyArMzgx
Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0QXJnKHRvRE9N
U3RyaW5nTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBsaXN0QXJnID0gdG9ET01TdHJpbmdMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZChsaXN0QXJnKTsKQEAgLTM4MzEsNyArMzgzMyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDcoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGFycmF5QXJnKHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1
bWVudCgwKSkpOworICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxT
dHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChhcnJheUFyZyk7CkBAIC0zODQ4LDcg
KzM4NTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KAogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcoSlNUZXN0T2JqOjp0b1dy
YXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RP
Ymo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnKTsKQEAgLTM4NjUsNyAr
Mzg2Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnKHRvTmF0aXZl
QXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFZlY3RvcjxTdHJp
bmc+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZChhcnJheUFyZyk7CkBAIC0zODgyLDcgKzM4ODQsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBW
ZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnKHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBhcnJheUFyZyA9IHRvTmF0
aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChhcnJheUFyZyk7
CkBAIC0zODk5LDcgKzM5MDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcgc3RyQXJn
KGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyQXJnID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CkBA
IC0zOTUzLDcgKzM5NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbAogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgaW50IGFyZyh0b0ludDMy
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAgaW50IGFy
ZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKQEAgLTM5NzIsNyAr
Mzk3NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kCiB7CiAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgYXJnKHRv
SW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBp
bnQgYXJnID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9h
ZGVkTWV0aG9kMShhcmcpOwpAQCAtMzk4Niw3ICszOTg4LDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QKIHsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmluZyB0eXBlKGV4ZWMtPmFyZ3VtZW50KDApLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgdHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKHR5cGUpOwpAQCAtNDA1NCw3ICs0MDU2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhVbnNpZ25lZExvbmdTZXEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiB1bnNpZ25lZExvbmdTZXF1ZW5jZSh0b05h
dGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gdW5zaWduZWRMb25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVk
PihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSh1bnNpZ25lZExvbmdT
ZXF1ZW5jZSk7CkBAIC00MDcyLDcgKzQwNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihFeGVjUwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVz
KHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFZl
Y3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
c3RyaW5nQXJyYXlGdW5jdGlvbih2YWx1ZXMsIGVjKSk7CkBAIC00MDkyLDcgKzQwOTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9t
U3RyaW5nTGlzdEZ1bmN0aW9uKEV4ZQogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlcyh0b0RPTVN0cmluZ0xpc3QoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkpKTsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdmFsdWVzID0gdG9E
T01TdHJpbmdMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5kb21TdHJpbmdMaXN0RnVuY3Rpb24o
dmFsdWVzLCBlYykpKTsKQEAgLTQxMTEsMTAgKzQxMTMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0
TnVsbGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJ
S0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVj
dG9yPHVuc2lnbmVkPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVj
LT5hcmd1bWVudCgwKSkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcgPSB0b05hdGl2
ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IG51bGxhYmxlQXJyYXlBcmco
dG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpKTsKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IG51bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVk
PihleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZShhcnJheUFy
ZywgbnVsbGFibGVBcnJheUFyZyk7CkBAIC00MTMxLDEwICs0MTMzLDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5k
V2l0aG91dE51bGxhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0g
dG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFy
cmF5QXJnKHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7
CisgICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1
bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2Uy
KGFycmF5QXJnLCBudWxsYWJsZUFycmF5QXJnKTsKQEAgLTQxNjgsNyArNDE3MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0
MShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIFRlc3ROb2RlKiB2YWx1ZShKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJn
dW1lbnQoMCkpKTsKKyAgICBUZXN0Tm9kZSogdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQo
ZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5jb252ZXJ0MSh2YWx1ZSk7CkBAIC00MTg1LDcgKzQxODcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoRXhlY1N0
YXRlKiBleGVjKQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAg
ICBUZXN0Tm9kZSogdmFsdWUoSlNUZXN0Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDAp
KSk7CisgICAgVGVzdE5vZGUqIHZhbHVlID0gSlNUZXN0Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29u
dmVydDIodmFsdWUpOwpAQCAtNDIwMiw3ICs0MjA0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VM
WShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVGVzdE5v
ZGUqIHZhbHVlKEpTVGVzdE5vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSkpOworICAg
IFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgw
KSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbnZlcnQ0KHZh
bHVlKTsKQEAgLTQyMTksNyArNDIyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFRlc3ROb2RlKiB2YWx1
ZShKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpKTsKKyAgICBUZXN0Tm9k
ZSogdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NSh2YWx1ZSk7CkBA
IC00MjczLDEzICs0Mjc1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbihFeGVjU3RhdGUqCiAgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTdHJpbmcgc3RyKGV4ZWMtPmFyZ3VtZW50
KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgZmxvYXQgYShleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICBmbG9h
dCBhID0gZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKTsKICAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGludCBiKHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMiks
IE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQgYiA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpKSk7
CkBAIC00MzAxLDEwICs0MzAzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbldpdGhTZXF1ZW5jCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8o
KSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpleGVjLCAwLCAib2Jq
QXJnIiwgIlRlc3RPYmoiLCAic3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2UiLCAiVGVzdE9iaiIp
OwotICAgIFRlc3RPYmoqIG9iakFyZyhKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMt
PmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gYSh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVu
dCgxKSkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gYSA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5zdHJpY3RGdW5jdGlvbldpdGhTZXF1ZW5jZShvYmpBcmcs
IGEsIGVjKSkpOwpAQCAtNDMyNiwxMCArNDMyOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rpb25XaXRoQXJyYXko
RQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMoSlNUZXN0
T2JqOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqZXhl
YywgMCwgIm9iakFyZyIsICJUZXN0T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aEFycmF5IiwgIlRl
c3RPYmoiKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcoSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+
YXJndW1lbnQoMCkpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBl
ZChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBWZWN0b3I8aW50PiBhcnJheSh0b05hdGl2ZUFycmF5PGludD4oZXhlYywgZXhlYy0+YXJndW1l
bnQoMSkpKTsKKyAgICBWZWN0b3I8aW50PiBhcnJheSA9IHRvTmF0aXZlQXJyYXk8aW50PihleGVj
LCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwuc3RyaWN0RnVuY3Rpb25XaXRoQXJyYXkob2JqQXJnLCBhcnJheSwg
ZWMpKSk7CkBAIC00MzQ4LDcgKzQzNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoRXhlYwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcg
aGVhZChleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIGhlYWQgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWlsID0gdG9OYXRpdmVB
cmd1bWVudHM8U3RyaW5nPihleGVjLCAxKTsKQEAgLTQzNjgsNyArNDM3MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0Rv
dWJsZU1ldGhvZChFeGVjCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIGRvdWJsZSBoZWFkKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKKyAg
ICBkb3VibGUgaGVhZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpOwogICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGRvdWJsZT4gdGFpbCA9IHRvTmF0
aXZlQXJndW1lbnRzPGRvdWJsZT4oZXhlYywgMSk7CkBAIC00Mzg4LDcgKzQzOTAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNOb2RlTWV0aG9kKEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBOb2RlKiBoZWFkKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDAp
KSk7CisgICAgTm9kZSogaGVhZCA9IEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxOb2RlKj4gdGFp
bDsKQEAgLTQ0MTEsMTAgKzQ0MTMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGZsb2F0IGEoZXhlYy0+YXJndW1l
bnQoMCkudG9GbG9hdChleGVjKSk7CisgICAgZmxvYXQgYSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
RmxvYXQoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbnQgYih0
b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKSk7CisgICAg
aW50IGIgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW55KGEsIGIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGUyZmEy
MTIwYWEwOGZhODYxNTFhODA1MzUxYTM0ODViNTRhZTA3MTkuLjM2MDNmNWY1MWFmNjQ2ZWViNTk5
YWI4ZTYxZTkxNDg2YWQ5YTIzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEoK
ICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEFycmF5QnVmZmVyKiBh
cnJheUJ1ZmZlcih0b0FycmF5QnVmZmVyKGV4ZWMtPmFyZ3VtZW50KDApKSk7CisgICAgQXJyYXlC
dWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSk7CiAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUo
YXJyYXlCdWZmZXIpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcodG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1l
bnQoMCkpKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcgPSB0
b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVj
dCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXJWaWV3KTsK
QEAgLTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SgogICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgQmxvYiogYmxvYihKU0Jsb2I6OnRvV3JhcHBl
ZChleGVjLT5hcmd1bWVudCgwKSkpOworICAgIEJsb2IqIGJsb2IgPSBKU0Jsb2I6OnRvV3JhcHBl
ZChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYmxvYik7CkBAIC0xMzAsNyArMTMwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdEoKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIGNvbnN0IFN0cmluZyBzdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwor
ICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpjcmVhdGUoc3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggYzJmZTBjMDZmZmY0MzlmNzc3MzBjYjE1
YmZiMTg3MTA2NTY4MTY2Zi4uNDY1ZGVjMjU1M2M4NjI3ZDY2OTA0NjJiMzM4YjAyZTU2MTAyNGNj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhcwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIDAsIDApKTsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAwLCAwKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRWYWx1ZShuYXRpdmVW
YWx1ZSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWMKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG5hdGl2ZVZhbHVlKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAwLCAwKSk7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShleGVjLCB2YWx1ZSwgMCwgMCk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUobmF0aXZl
VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggMjlkMDEzYzlmNjJlYmEzN2JmYjg2NzFk
YTM2YWIyYmVlMWMxYjZkZS4uM2Y1ZDBkOWEyYmQ3MTFkYzg5MjYwNWJhNTRlZjEwOTFkYjE1YWNm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0xNDksNyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rl
c3RUeXBlZGVmcygKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcgaGVs
bG8oZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIFN0cmluZyBoZWxsbyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNGdW5jdGlv
bigpKQpAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExv
bmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlVmFsdWUodG9VSW50NjQoZXhlYywgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlVmFsdWUgPSB0
b1VJbnQ2NChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0VW5z
aWduZWRMb25nTG9uZ0F0dHIobmF0aXZlVmFsdWUpOwpAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQg
c2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCoKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG5hdGl2ZVZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAw
LCAwKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgMCwgMCk7CiAgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlt
cGwuc2V0SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKG5hdGl2ZVZhbHVlKTsKQEAgLTQy
NSw3ICs0MjUsNyBAQCB2b2lkIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iagogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2
ZVZhbHVlKHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pKTsKKyAgICBpbnQg
bmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSk7CkBAIC00NDYs
NyArNDQ2LDcgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmoKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBp
bnQgbmF0aXZlVmFsdWUodG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbikpOwor
ICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBl
Yyk7CkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGIKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IGNvbnN0IFN0cmluZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKQEAgLTQ4OCw3ICs0ODgsNyBA
QCB2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvbnN0IFN0cmlu
ZyBuYXRpdmVWYWx1ZSh2YWx1ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7CkBAIC01MTYsNyArNTE2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVu
YyhFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8aW50PiB4KHRvTmF0aXZlQXJyYXk8aW50Pihl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFZlY3RvcjxpbnQ+IHggPSB0b05hdGl2ZUFy
cmF5PGludD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5mdW5jKHgpOwpAQCAtNTMzLDEzICs1MzMsMTMgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0
U2hhZG93KEV4ZWNTdGF0ZSoKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0gICAgZmxvYXQgd2lkdGgoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSk7Cisg
ICAgZmxvYXQgd2lkdGggPSBleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpOwogICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZmxvYXQgaGVpZ2h0KGV4ZWMtPmFyZ3VtZW50
KDEpLnRvRmxvYXQoZXhlYykpOworICAgIGZsb2F0IGhlaWdodCA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvRmxvYXQoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBmbG9h
dCBibHVyKGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYykpOworICAgIGZsb2F0IGJsdXIg
PSBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKQEAgLTU0OSw3ICs1NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKgog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAot
ICAgIGNvbnN0IFN0cmluZyBjb2xvcihleGVjLT5hcmd1bWVudCgzKS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDMpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Cisg
ICAgU3RyaW5nIGNvbG9yID0gZXhlYy0+YXJndW1lbnQoMykudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3Vu
dCA8PSA0KSB7CkBAIC01NTcsNyArNTU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSoKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAg
ICBmbG9hdCBhbHBoYShleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKTsKKyAgICBmbG9h
dCBhbHBoYSA9IGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyk7CiAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNldFNoYWRvdyh3aWR0aCwgaGVpZ2h0LCBibHVy
LCBjb2xvciwgYWxwaGEpOwpAQCAtNTc0LDcgKzU3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5j
ZUFyCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3Rv
cjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2VxdWVuY2VBcmcoKHRvUmVmUHRyTmF0
aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4o
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XcmFw
cGVkKSkpOworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2VxdWVu
Y2VBcmcgPSAodG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpTU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp0b1dyYXBwZWQpKTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VB
cmcoc2VxdWVuY2VBcmcpKTsKQEAgLTU5MSw3ICs1OTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZUFycmF5QXJn
KEV4ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8
U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm51bGxhYmxlQXJyYXlBcmcoYXJyYXlBcmcpOwpAQCAtNjU4LDcg
KzY1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oCiAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxTdHJpbmc+
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0g
dG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKHZh
bHVlcywgZWMpKTsKQEAgLTY3OCw3ICs2NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uMgog
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVz
KHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOworICAgIFZl
Y3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
c3RyaW5nQXJyYXlGdW5jdGlvbjIodmFsdWVzLCBlYykpOwpAQCAtNjk3LDcgKzY5Nyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkNhbGxXaXRoU2VxdWVuY2VUaGF0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIFZlY3RvcjxSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0Pj4gc2VxdWVuY2VBcmco
KHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50VGFyZ2V0LCBKU1Rlc3RFdmVudFRhcmdldD4o
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZKU1Rlc3RFdmVudFRhcmdldDo6dG9XcmFwcGVkKSkp
OworICAgIFZlY3RvcjxSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0Pj4gc2VxdWVuY2VBcmcgPSAodG9S
ZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0PihleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgJkpTVGVzdEV2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQpKTsKICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29s
ZWFuKGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoc2VxdWVuY2VBcmcp
KTsK
</data>
<flag name="review"
          id="279577"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>