<?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>163861</bug_id>
          
          <creation_ts>2016-10-22 19:40:24 -0700</creation_ts>
          <short_desc>[WebIDL] Add IDLType based toJS conversion</short_desc>
          <delta_ts>2016-10-23 22:04:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243464</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-22 19:40:24 -0700</bug_when>
    <thetext>[WebIDL] Add IDLType based toJS conversion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243469</commentid>
    <comment_count>1</comment_count>
      <attachid>292528</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-22 20:01:32 -0700</bug_when>
    <thetext>Created attachment 292528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243486</commentid>
    <comment_count>2</comment_count>
      <attachid>292538</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-22 22:23:56 -0700</bug_when>
    <thetext>Created attachment 292538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243559</commentid>
    <comment_count>3</comment_count>
      <attachid>292538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-23 15:38:37 -0700</bug_when>
    <thetext>Comment on attachment 292538
Patch

This is great. I really could have used it in the patch I am working on to make CheckSecurityForNode turn values into null as part of the conversion process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243610</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-23 22:04:52 -0700</bug_when>
    <thetext>Committed r207737: &lt;http://trac.webkit.org/changeset/207737&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292528</attachid>
            <date>2016-10-22 20:01:32 -0700</date>
            <delta_ts>2016-10-22 22:23:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163861-20161022195751.patch</filename>
            <type>text/plain</type>
            <size>131291</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAxNi0xMC0yMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtXZWJJRExdIEFkZCBJRExUeXBlIGJh
c2VkIHRvSlMgY29udmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyB0b0pTPElETFR5cGU+KCkgZnVuY3Rpb25zIHRvIGJlIHRoZSBuZXcg
d2F5IG9mIGNvbnZlcnRpbmcKKyAgICAgICAgZnJvbSBpbXBsZW1lbnRhdGlvbiB0eXBlcyB0byBK
UyB0eXBlcy4gVGhlc2UgYXJlIGltcGxlbWVudGVkIHZpYQorICAgICAgICBhIHNpbWlsYXIgbWVj
aGFuaXNtIHRvIHRoZSBjb252ZXJ0PElETD4oKSBmdW5jdGlvbnMsIHRob3VnaCBzcGVjaWFsaXph
dGlvbnMKKyAgICAgICAgb2YgYSBKU0NvbnZlcnRlciBzdHJ1Y3QgKHJhdGhlciB0aGFuIHRoZSBD
b252ZXJ0ZXIgc3RydWN0cykuIFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIHN1cHBvcnQgYXJi
aXRyYXJpbHkgY29tcGxleCBhZ2dyZWdhdGUgdHlwZXMgZWFzaWx5IChlLmcuIHNlcXVlbmNlPChO
b2RlIG9yIERPTVN0cmluZz8pPikuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b3Bvc2l0aW9uLmlkbDoKKyAgICAgICAgKiBkb20vRXZlbnQuaWRsOgorICAgICAgICBBZGQgdHlw
ZWRlZiBmb3IgRE9NVGltZVN0YW1wLiBFdmVudHVhbGx5LCBvdXIgSURMUGFyc2VyIHNob3VsZCBk
byB0aGlzIGZvciB1cywgYnV0CisgICAgICAgIGZvciBub3cgaXQgYWxsb3dzIHVzIHRvIHNpbXBs
aWZ5IHRoZSB0eXBlIHN5c3RlbS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNWYWx1ZVRyYWl0czo6YXJyYXlKU1ZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8U3RyaW5nPjo6YXJyYXlKU1Zh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8ZG91YmxlPjo6
YXJyYXlKU1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8
ZmxvYXQ+OjphcnJheUpTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6anNBcnJh
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpqc0Zyb3plbkFycmF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz46Om5hdGl2ZVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPHVuc2lnbmVk
Pjo6bmF0aXZlVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVU
cmFpdHM8ZmxvYXQ+OjpuYXRpdmVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpO
YXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjp0b051bGxhYmxlSlNOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlNCb29sZWFuKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOdW1iZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9KU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBtYW55IG5v
dy11bm5lZWRlZCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIEFkZCA1
IHByaW1hcnkgdG9KUyBmdW5jdGlvbnMgd2hpY2ggdGFrZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZv
bGxvd2luZworICAgICAgICBhcmd1bWVudHM6IEV4ZWNTdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qs
IFRocm93U2NvcGUuICBBbGwgdGFrZSB0aGUgdmFsdWUgCisgICAgICAgIHRvIGJlIGNvbnZlcnRl
ZCBhcyB3ZWxsLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIHRocm93U2NvcGUgb25lcywgd2hl
cmUKKyAgICAgICAgdGhleSB0YWtlIHRoZSB2YWx1ZSBpbiBhbiBFeGNlcHRpb25Pcjw+LgorCisg
ICAgICAgIFRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEpTQ29udmVydGVy
IHNwZWNpYWxpemF0aW9ucywgYXZvaWRpbmcKKyAgICAgICAgdGhlIG5lZWQgZm9yIGVhY2ggb25l
IHRvIGltcGxlbWVudCB0aGVpciBjb252ZXJzaW9uIHVwIHRvIDMgdGltZXMgKG9uZSBmb3IganVz
dAorICAgICAgICB0aGUgdmFsdWUsIG9uZSBmb3IgdGhlIHZhbHVlIGFuZCB0aGUgRXhlY1N0YXRl
LCBhbmQgb25lIGZvciB0aGUgdmFsdWUsIHRoZSBFeGVjU3RhdGUKKyAgICAgICAgYW5kIHRoZSBn
bG9iYWwgb2JqZWN0KSwgZWFjaCBKU0NvbnZlcnRlciBpbnN0ZWFkIHNwZWNpZmllcyB3aGV0aGVy
IGl0J3MgY29udmVydGVyCisgICAgICAgIG5lZWRzIGFuIEV4ZWNTdGF0ZSBvciBnbG9iYWwgb2Jq
ZWN0IHZpYSBhIHN0YXRpYyBjb25zdGV4cHIuIFdlIHRoZW4gdXNlIHRoZSAKKyAgICAgICAgSlND
b252ZXJ0ZXJPdmVybG9hZGVyIHRlbXBsYXRlLCB0byBjYWxsIHRoZSBjb3JyZWN0IGZ1bmN0aW9u
LiBUaGlzIGNhbiBwcm9iYWJseSBiZQorICAgICAgICBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLCBi
eSBpbmZlcnJpbmcgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbmVlZGVkIHZpYSBTRklOQUUsIGJ1
dAorICAgICAgICB0aGlzIHNlZW1lZCBsaWtlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgZmlyc3Qg
Y3V0LgorCisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj46OmNv
bnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMQm9vbGVhbj46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETEJ5dGU+Ojpjb252ZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETE9jdGV0Pjo6Y29udmVydCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExTaG9ydD46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NvbnZlcnRlcjxJRExMb25nTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+Pjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj46OmNvbnZlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+Pjo6Y29udmVydCk6
CisgICAgICAgIFRoZXJlIGlzIHNsaWdodGx5IG1vcmUgZHVwbGljYXRpb24gdGhhbiBJIHdvdWxk
IGhhdmUgbGlrZWQsIGZvciBpbnN0YW5jZSB3ZSBoYXZlIGEKKyAgICAgICAgc3BlY2lhbGl6YXRp
b24gZm9yIGVhY2ggbnVtZXJpYyB0eXBlLCBldmVuIHRob3VnaCB0aGV5IGFyZSBhbGwgdGhlIHNh
bWUsIGJ1dCB0aGF0IGlzCisgICAgICAgIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBpbXByb3ZlZCBn
b2luZyBmb3J3YXJkLgorCisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+Ojpjb252ZXJ0KQorICAgICAgICBGaXggdGhlIG5vcm1hbCBJRExVbmlvbiBjb252ZXJ0ZXIg
dG8gd29yayB3aXRoIGJvb2xlYW4gdHlwZXMuIFRoaXMgd2FzIGNhdWdodCBieSB0aGUKKyAgICAg
ICAgdGVzdCBjYXNlIEkgYWRkZWQgdmlhIFR5cGVDb252ZXJzaW9ucy5pZGwuCisgICAgICAgIAor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OnNldFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFUcmFuc2Zlcjo6dHlwZXMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU01lZGlhU3RyZWFtVHJhY2s6OmdldENhcGFiaWxpdGllcyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdMZW5ndGhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OnZhbHVl
KToKKyAgICAgICAgU3dpdGNoIHRvIHVzZSBuZXcgdG9KUzw+IGZ1bmN0aW9ucy4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoQWRkU3Ry
aW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCk6CisgICAgICAgIEZpeCBzdHJpbmdpZmllciBmdW5j
dGlvbiBzaWduYXR1cmUgdG8gY29udGFpbiBhbiBpZGxUeXBlLgorCisgICAgICAgIChHZW5lcmF0
ZUVudW1lcmF0aW9uc0hlYWRlckNvbnRlbnQpOgorICAgICAgICBSZW1vdmUgbm93IHVubmVjZXNz
YXJ5IEpTVmFsdWVUcmFpdHMgc3BlY2lhbGl6YXRpb25zLgorCisgICAgICAgIChKU1ZhbHVlVG9O
YXRpdmVJc0hhbmRsZWRCeURPTUNvbnZlcnQpOgorICAgICAgICBSZW5hbWVkIGZyb20gSXNIYW5k
bGVkQnlET01Db252ZXJ0LCBzaW5jZSB0aGF0IG5hbWUgaXMgbm93IGFtYmlndW91cy4KKworICAg
ICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZSBvZiBJ
c0hhbmRsZWRCeURPTUNvbnZlcnQuCisKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZUlzSGFuZGxl
ZEJ5RE9NQ29udmVydCk6CisgICAgICAgIFByZWRpY2F0ZSBndWFyZGluZyB3aGF0IHR5cGVzIGN1
cnJlbnRseSB3b3JrIHdpdGggdGhlIG5ldyBjb252ZXJzaW9uIHN5c3RlbS4KKworICAgICAgICAo
TmF0aXZlVG9KU1ZhbHVlRE9NQ29udmVydE5lZWRzU3RhdGUpOgorICAgICAgICBQcmVkaWNhdGUg
Zm9yIGRldGVybWluaW5nIGlmIHRoZSBFeGVjU3RhdGUgaXMgbmVlZGVkIGluIHRoZSBjb252ZXJz
aW9uIGZ1bmN0aW9uLgorCisgICAgICAgIChOYXRpdmVUb0pTVmFsdWVET01Db252ZXJ0TmVlZHNH
bG9iYWxPYmplY3QpOgorICAgICAgICBQcmVkaWNhdGUgZm9yIGRldGVybWluaW5nIGlmIHRoZSBn
bG9iYWwgb2JqZWN0IGlzIG5lZWRlZCBpbiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbi4KKworICAg
ICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgTW92ZSB0aGluZ3MgYXJvdW5kIGEgbGl0
dGxlIGJpdCBhbmQgc3RhcnQgY29udmVydGluZyB1c2UgdGhlIG5ldyB0b0pTPD4gd2hlbiBwb3Nz
aWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAg
ICAocGFyc2VBdHRyaWJ1dGVPck9wZXJhdGlvblJlc3QpOgorICAgICAgICBGaXggYSBtaXNzaW5n
IHBsYWNlIHdoZXJlIHdlcmUgbm90IHNldHRpbmcgdGhlIGlkbFR5cGUuCisgCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6CisgICAgICAgIFVwZGF0ZSB0ZXN0IHJl
c3VsdHMuCisKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6VHlwZUNvbnZlcnNpb25zOjp0ZXN0VW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6
VHlwZUNvbnZlcnNpb25zOjpzZXRUZXN0VW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwZUNv
bnZlcnNpb25zOjp0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U2VxdWVuY2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBlQ29udmVyc2lvbnM6OnR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlV
bmlvblZhbHVlKToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5pZGw6CisgICAg
ICAgIEFkZCBhIHRlc3RVbmlvbiBhdHRyaWJ1dGUsIG5vdyB0aGF0IHdlIGNhbiByZXR1cm4gdW5p
b25zIHRvIEpTLgorCiAyMDE2LTEwLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3ZlIEhUTUwgY2FudmFzIGFuZCB0cmFja3MgZnJvbSBFeGNlcHRpb25Db2Rl
IHRvIEV4Y2VwdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9wb3NpdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIHR5cGVkZWYKKy8vIGh0dHBzOi8v
aGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI0RPTVRpbWVTdGFtcAordHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgRE9NVGltZVN0YW1wOworCiBbCiAgICAgTm9JbnRlcmZhY2VPYmplY3QsCiAgICAg
Q29uZGl0aW9uYWw9R0VPTE9DQVRJT04sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw4ICsyMjMsNiBA
QCBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKCiBTdHJpbmcgdmFsdWVU
b1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUpOwogU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBKU0M6OkpTVmFsdWUgdG9OdWxsYWJsZUpTTnVtYmVyKE9wdGlvbmFsPFQ+KTsgLy8gbnVsbCBp
ZiB0aGUgb3B0aW9uYWwgaXMgbnVsbAotCiBpbnQzMl90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpK
U1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwogCiAvLyBUaGUgZm9sbG93aW5n
IGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBhcyBwZXIgdGhlIFdlYklETCBz
cGVjaWZpY2F0aW9uLgpAQCAtMjgzLDEwICsyODEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBK
U0M6OkpTVmFsdWUgdG9KU0l0CiAKIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpF
eGVjU3RhdGUmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
PiopOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpT
VmFsdWUganNGcm96ZW5BcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYpOwotCiBKU0M6OkpTVmFsdWUganNQYWly
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdFR5cGUsIHR5cGVuYW1lIFNlY29uZFR5
cGU+IEpTQzo6SlNWYWx1ZSBqc1BhaXIoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCosIGNvbnN0IEZpcnN0VHlwZSYsIGNvbnN0IFNlY29uZFR5cGUmKTsKIApAQCAtMzI5LDggKzMy
Myw2IEBAIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZygKIAogdGVtcGxh
dGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBu
b25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKLQogCiBlbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKIApA
QCAtNDEzLDE1ICs0MDUsMTAgQEAgc3RydWN0IEJpbmRpbmdDYWxsZXIgewogLy8gRXhjZXB0aW9u
T3IgaGFuZGxpbmcuCiB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1ZhbHVlIHRvSlNBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJik7Ci1KU0M6OkpTVmFsdWUg
dG9KU0Jvb2xlYW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxib29sPiYmKTsKIEpTQzo6SlNWYWx1ZSB0b0pTRGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPGRvdWJsZT4mJik7CiBKU0M6OkpTVmFsdWUgdG9KU051
bGxhYmxlRGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PE9wdGlvbmFsPGRvdWJsZT4+JiYpOwogSlNDOjpKU1ZhbHVlIHRvSlNOdWxsYWJsZVN0cmluZyhK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFN0cmluZz4mJik7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0
aW9uT3I8VD4mJiB2YWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9K
U051bWJlcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOdWxsYWJs
ZU51bWJlcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpOwotSlNDOjpKU1ZhbHVlIHRvSlNTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxTdHJpbmc+JiYpOwogCiAvLyBJbmxpbmUgZnVuY3Rp
b25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KIApAQCAtNzIxLDcxICs3MDgsNiBAQCBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChKU0M6CiAgICAgcmV0dXJuIGNyZWF0ZUl0
ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTVmFsdWVUcmFpdHMgewotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIodmFsdWUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFN0cmluZz4gewotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxkb3VibGU+IHsKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgZG91YmxlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRz
PGZsb2F0PiB7Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IGZsb2F0JiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgdW5zaWduZWQgbG9uZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
bGlzdDsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgIGxpc3QuYXBw
ZW5kKEpTVmFsdWVUcmFpdHM8VD46OmFycmF5SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGVs
ZW1lbnQpKTsKLSAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBudWxscHRyLCBn
bG9iYWxPYmplY3QsIGxpc3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IGlubGluZSBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5PiogdmVjdG9yKQotewotICAgIGlmICghdmVjdG9yKQotICAgICAgICByZXR1
cm4gSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCwg
MCk7Ci0gICAgcmV0dXJuIGpzQXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCAqdmVjdG9yKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFs
dWUganNGcm96ZW5BcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQot
ewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgbGlzdDsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpIHsKLSAgICAgICAgbGlz
dC5hcHBlbmQoSlNWYWx1ZVRyYWl0czxUPjo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgZWxlbWVudCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpT
VmFsdWUoKSk7Ci0gICAgfQotICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheShl
eGVjLCBudWxscHRyLCBnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1
Y3RvckZyZWV6ZShleGVjLCBhcnJheSk7Ci19Ci0KIGlubGluZSBKU0M6OkpTVmFsdWUganNQYWly
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlMSwgSlNDOjpKU1ZhbHVlIHZhbHVlMikKIHsKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04MTcsNDYgKzczOSw2IEBAIGlubGluZSBSZWZQ
dHI8SlNDOjpVaW50MzJBcnJheT4gdG9VaW50MzIKIGlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvRmxvYXQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2YWx1ZSk7IH0KIGlubGluZSBS
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvRmxvYXQ2NEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2
YWx1ZSk7IH0KIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8U3RyaW5nPiB7
Ci0gICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgU3RyaW5nJiBpbmRleGVkVmFsdWUpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvV1RG
U3RyaW5nKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czx1bnNpZ25lZD4gewot
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUsIHVuc2lnbmVkJiBpbmRleGVkVmFsdWUpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvVUlu
dDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD4gewotICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUsIGZsb2F0JiBpbmRleGVkVmFsdWUpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMp
OwotICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewotICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpz
VmFsdWUsIGRvdWJsZSYgaW5kZXhlZFZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0g
PSBleGVjLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b051bWJlcigmZXhlYyk7Ci0gICAg
ICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgfQotfTsKLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVB
cnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CkBAIC04OTcsMTEgKzc3OSw2IEBAIHRlbXBsYXRlPEpT
Qzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3QKICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjpl
bmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1
bmN0aW9uKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9OdWxsYWJsZUpTTnVtYmVyKE9wdGlvbmFsPFQ+IG9wdGlvbmFsTnVtYmVyKQotewotICAgIHJl
dHVybiBvcHRpb25hbE51bWJlciA/IEpTQzo6anNOdW1iZXIob3B0aW9uYWxOdW1iZXIudmFsdWUo
KSkgOiBKU0M6OmpzTnVsbCgpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CiAgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpCkBAIC05MzEsMjQgKzgwOCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6
OkpTVmFsdWUKICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTQXJyYXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
bk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVl
LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJl
dHVybiBqc0FycmF5KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNCb29sZWFuKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjxib29s
PiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsK
LSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxl
YXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4g
SlNDOjpqc0Jvb2xlYW4odmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCiB7CiAgICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewpAQCAtOTY3LDIyICs4MjYsNCBAQCBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOdWxsYWJsZVN0cmluZyhKCiAgICAgcmV0dXJuIGpzU3Ry
aW5nT3JOdWxsKCZzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOdW1iZXIoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxTdHJpbmc+JiYgdmFsdWUpCi17Ci0gICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hl
KCZzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQu
aAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxMiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9u
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVID0gVD4gdXNpbmcgRW5hYmxlSWZJbnRlZ3JhbFR5cGUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0lETEludGVnZXI8VD46OnZhbHVlLCB0eXBlbmFtZSBDb252
ZXJ0ZXI8VT46OlJldHVyblR5cGU+Ojp0eXBlOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSA9IFQ+IHVzaW5nIEVuYWJsZUlmTm90SW50ZWdyYWxUeXBlID0gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8IUlzSURMSW50ZWdlcjxUPjo6dmFsdWUsIHR5cGVuYW1lIENvbnZlcnRlcjxVPjo6
UmV0dXJuVHlwZT46OnR5cGU7Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVuYWJsZUlmTm90SW50
ZWdyYWxUeXBlPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0v
LyBTcGVjaWFsaXphdGlvbiBmb3IgaW50ZWdlciB0eXBlcywgYWxsb3dpbmcgcGFzc2luZyBvZiBh
IGNvbnZlcnNpb24gZmxhZy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVuYWJsZUlmSW50ZWdyYWxU
eXBlPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiA9IE5vcm1hbENvbnZlcnNpb24pOwogCiAvLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KQEAgLTQ5
LDggKzQ3LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4gcGFyc2VFbgogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlcygpOwogCi0vLyBUaGlzIGlzIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgdGhpbmdzIGRlY2xhcmVkIGFib3ZlIGJlZ2luczoKLQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEVuYWJsZUlmTm90SW50ZWdyYWxUeXBlPFQ+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwpAQCAtNjEsMTEgKzU3LDkxIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZkludGUKICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworCisvLyBDb252ZXJzaW9uIGZyb20g
SW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xv
YmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVl
LCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyIDogRGVmYXVs
dENvbnZlcnRlcjxUPiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxV
PiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsK
KyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxl
YXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVy
biB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7CiB9OwogCiAvLyBNQVJLOiAtCkBA
IC05NCw2ICsxNzAsMzUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RAogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdDsKKworICAgIC8vIEZJWE1FOiBUaGVzZSBvbmx5IHdvcmsgaWYgSW1w
bGVtZW50YXRpb25UeXBlIGlzIGFuIE9wdGlvbmFsLiBXZSBzaG91bGQgZ2VuZXJhbGl6ZQorICAg
IC8vIHRoaXMgc28gaXQgY2FuIHdvcmsgZm9yIHR5cGVzIHRoYXQgZG9uJ3QgdXNlIE9wdGlvbmFs
IHRvIHJlcHJlc2VudCBudWxsbmVzcywgbGlrZQorICAgIC8vIFN0cmluZyBhbmQgaW50ZXJmYWNl
IHR5cGVzLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBJbXBsZW1lbnRh
dGlvblR5cGUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQodmFsdWUudmFsdWUoKSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUudmFsdWUoKSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS52YWx1ZSgpKTsK
KyAgICB9Cit9OworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBCb29sZWFuIHR5cGUKIApAQCAtMTA0
LDYgKzIwOSwxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gCiAg
ICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKwogLy8gQXJyYXlCdWZmZXIgc3VwcG9y
dC4KIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
OwpAQCAtMTM0LDYgKzI0OSwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElECiAgICAgfQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmV4
ZWMsICZnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKHZhbHVlKSk7CisgICAgfQorfTsKKwogLy8g
VHlwZWQgYXJyYXlzIHN1cHBvcnQuCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVj
dCBJRExJbnRlcmZhY2U8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IDogSURM
VHlwZTxSZWY8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+PiB7CkBAIC0xNjUs
NiArMjkxLDE2IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGUKICAg
ICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorfTsKKwogLy8gTUFSSzogLQogLy8gTUFSSzogSW50ZWdl
ciB0eXBlcwogCkBAIC0xODMsNiArMzE5LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCeXRlPiA6IEQKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3Rl
dD4gewogICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gTm9ybWFsQ29udmVyc2lvbikKICAgICB7CkBAIC0xOTgsNiArMzQ2LDE4IEBAIHRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiAKICAgICB9CiB9OwogCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CiAgICAgc3RhdGljIGludDE2X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBOb3JtYWxDb252ZXJzaW9uKQogICAg
IHsKQEAgLTIxMyw2ICszNzMsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNo
b3J0PiA6IAogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNo
b3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnNpZ25lZFNob3J0PiB7CiAgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gTm9ybWFsQ29udmVyc2lvbikKICAgICB7CkBAIC0yMjgsNiAr
NDAwLDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFMKICAgICB9
CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsK
ICAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IE5vcm1hbENvbnZlcnNpb24pCiAgICAgewpAQCAtMjQzLDYgKzQyNywxOCBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBECiAgICAgfQogfTsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewogICAgIHN0YXRpYyB1aW50MzJf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IE5vcm1hbENvbnZlcnNp
b24pCiAgICAgewpAQCAtMjU4LDYgKzQ1NCwxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5zaWduZWRMCiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CiAgICAgc3RhdGljIGludDY0X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBOb3JtYWxDb252ZXJzaW9uKQogICAgIHsK
QEAgLTI3Niw2ICs0ODQsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdM
b25nPgogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdM
b25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiB7CiAgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gTm9ybWFsQ29udmVyc2lvbikKICAgICB7CkBA
IC0yOTQsNiArNTE0LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZEwKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwogCkBAIC0zMDks
NiArNTQxLDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiAKICAg
ICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7CiAgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMzE2LDYgKzU2MCwxOCBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljCiAgICAgfQogfTsKIAordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CiAg
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQogICAgIHsKQEAgLTMyOCw2ICs1ODQsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERvdWJsZT4gOgogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3Vi
bGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CiAgICAgc3RhdGljIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQog
ICAgIHsKQEAgLTMzNSw2ICs2MDMsMjQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpYwogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJl
c3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKwogLy8g
TUFSSzogLQogLy8gTUFSSzogU3RyaW5nIHR5cGVzCiAKQEAgLTM0NSw2ICs2MzEsMTYgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZwogICAgIH0KIH07CiAKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CiAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKQEAgLTM1
Miw2ICs2NDgsMTYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZwog
ICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBBcnJheS1s
aWtlIHR5cGVzCiAKQEAgLTQwNiw2ICs3MTIsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRAogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisg
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwg
Jmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEZyb3plbkFycmF5PFQ+PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6QXJyYXlDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CiAKQEAgLTQxNSw2ICs3MzUsMjEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRAogICAgIH0KIH07CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpT
Qzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwor
ICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkp
OworICAgIH0KK307CisKIC8vIE1BUks6IC0KIC8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQogCkBA
IC00MzcsNiArNzcyLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SUQKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
JmV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OwogCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBVbmlvbiB0
eXBlCkBAIC00ODAsOSArODI0LDcgQEAgbmFtZXNwYWNlIERldGFpbCB7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KIHVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBl
bmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KLXN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4KLXsKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbmlvbjxULi4uPj4gewogICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKICAg
ICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwogICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CkBAIC01NDgsMTQg
Kzg5MCwxNiBAQCBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1CiAgICAg
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46
OnR5cGU6OnR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SW1wbGVtZW50YXRpb25UeXBl
Pjo6V3JhcHBlckNsYXNzOworICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBX
VEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAg
ICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVu
YW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFz
czsKIAogICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKGNhc3RlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7
CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAtNjE4
LDcgKzk2Miw3IEBAIHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXUKICAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxp
c3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKICAgICAg
ICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgYm9vbCwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDE0LiBJ
ZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgpAQCAtNjQwLDcgKzk4NCw3IEBAIHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXUKIAogICAgICAgICAvLyAxNy4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byBib29sZWFuLgogICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBib29sLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xl
YW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwogCiAg
ICAgICAgIC8vIDE4LiBUaHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CkBAIC02NDgsNiArOTkyLDM0IEBAIHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IDogRGVmYXUKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0g
SURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBl
TGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5k
OjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZh
bHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0
aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50Lmlu
ZGV4KCk7CisKKyAgICAgICAgT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAg
ICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAg
ICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVj
bHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKwogLy8gTUFSSzogLQogLy8g
TUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3Bw
CShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5n
TWFwLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgpAQCAtNDMsNyArNDQsNyBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpn
ZXRPd25Qcm9wZXJ0eVNsb3RECiAgICAgYm9vbCBuYW1lSXNWYWxpZDsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGl0ZW0gPSB3cmFwcGVkKCkuaXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpLCBuYW1lSXNWYWxpZCk7CiAgICAgaWYgKG5hbWVJc1ZhbGlkKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGl0ZW0pKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdG9KUzxJRExET01TdHJpbmc+
KCpleGVjLCBpdGVtKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Niw3ICs1NTYs
NyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAgICAgICAgIHJl
dHVybiBqc051bWJlcigwKTsKIAogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
SW50MzIoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9KU051bWJlcihzdGF0ZSwgc2NvcGUsIHdyYXBw
ZWQoKS5zZXRUaW1lb3V0KFdURk1vdmUoYWN0aW9uKSwgZGVsYXkpKTsKKyAgICByZXR1cm4gdG9K
UzxJRExMb25nPihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5zZXRUaW1lb3V0KFdURk1vdmUoYWN0
aW9uKSwgZGVsYXkpKTsKIH0KIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhl
Y1N0YXRlJiBzdGF0ZSkKQEAgLTU3NCw3ICs1NzQsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpz
ZXRJbnRlcnZhbChFeGVjU3RhCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAogICAgIGlu
dCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICByZXR1cm4g
dG9KU051bWJlcihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5zZXRJbnRlcnZhbChXVEZNb3ZlKGFj
dGlvbiksIGRlbGF5KSk7CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oc3RhdGUsIHNjb3BlLCB3
cmFwcGVkKCkuc2V0SW50ZXJ2YWwoV1RGTW92ZShhY3Rpb24pLCBkZWxheSkpOwogfQogCiBET01X
aW5kb3cqIEpTRE9NV2luZG93Ojp0b1dyYXBwZWQoSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRy
YW5zZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRGF0YVRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVl
IEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzID0gd3JhcHBlZCgpLnR5cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVz
LmlzRW1wdHkoKSA/IGpzTnVsbCgpIDoganNBcnJheSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCB0
eXBlcyk7CisgICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDogdG9KUzxJRExT
ZXF1ZW5jZTxJRExET01TdHJpbmc+PihzdGF0ZSwgKmdsb2JhbE9iamVjdCgpLCB0eXBlcyk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbVRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbVRyYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTQzo6SlNWYWx1
ZSBKU01lZGlhU3RyZWFtVHJhY2s6OmdldENhcGEKICAgICAgICAgICAgICAgICBmYWNpbmdNb2Rl
cy5hcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNpbmdNb2RlKG1vZGUpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZmFjaW5nTW9kZSIpLCBqc0FycmF5KCZzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGZhY2luZ01vZGVzKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJmYWNpbmdNb2RlIiksIHRvSlM8SURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPj4oc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgZmFjaW5nTW9k
ZXMpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KICAgICBpZiAoY2FwYWJpbGl0aWVz
LT5zdXBwb3J0c1ZvbHVtZSgpKQogICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInZvbHVtZSIpLCBjYXBhYmlsaXR5VmFs
dWUoY2FwYWJpbGl0aWVzLT52b2x1bWUoKSwgc3RhdGUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwpAQCAtMTUwLDEyICsxNTAsMTIgQEAgSlNDOjpKU1ZhbHVlIEpTTWVkaWFTdHJlYW1UcmFjazo6
Z2V0Q2FwYQogICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInNhbXBsZVNpemUiKSwgY2FwYWJpbGl0eVZhbHVlKGNhcGFi
aWxpdGllcy0+c2FtcGxlU2l6ZSgpLCBzdGF0ZSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgaWYgKGNhcGFiaWxpdGllcy0+c3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKCkpIHsKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gY2FuY2VsbGF0aW9uOwotICAgICAgICBjYW5jZWxsYXRpb24ucmVz
ZXJ2ZUNhcGFjaXR5KDIpOworICAgICAgICBjYW5jZWxsYXRpb24ucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKIAotICAgICAgICBjYW5jZWxsYXRpb24uYXBwZW5kKCJ0cnVlIik7Ci0gICAgICAg
IGNhbmNlbGxhdGlvbi5hcHBlbmQoY2FwYWJpbGl0aWVzLT5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0g
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZFdy
aXRlID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgIGNhbmNlbGxhdGlvbi51bmNoZWNrZWRB
cHBlbmQoInRydWUiKTsKKyAgICAgICAgY2FuY2VsbGF0aW9uLnVuY2hlY2tlZEFwcGVuZChjYXBh
YmlsaXRpZXMtPmVjaG9DYW5jZWxsYXRpb24oKSA9PSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uOjpSZWFkV3JpdGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
IAotICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVjaG9DYW5jZWxsYXRpb24iKSwganNBcnJheSgmc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBjYW5jZWxsYXRpb24pLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImVjaG9DYW5jZWxsYXRpb24iKSwgdG9KUzxJRExTZXF1ZW5jZTxJ
RExET01TdHJpbmc+PihzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBjYW5jZWxs
YXRpb24pLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KICAgICBpZiAoY2FwYWJpbGl0
aWVzLT5zdXBwb3J0c0RldmljZUlkKCkpCiAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGV2aWNlSWQiKSwganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBjYXBhYmlsaXRpZXMtPmRldmljZUlkKCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlv
bkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHZvaWQgSlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKGNvbnN0IFZlY3QKICAg
ICBKU1ZhbHVlIGpzT2JzZXJ2ZXIgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JzZXJ2ZXIp
OwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc0Fy
cmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgbXV0YXRpb25zKSk7CisgICAgYXJncy5hcHBlbmQodG9K
UzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8TXV0YXRpb25SZWNvcmQ+Pj4oKmV4ZWMsICpnbG9i
YWxPYmplY3QsIG11dGF0aW9ucykpOwogICAgIGFyZ3MuYXBwZW5kKGpzT2JzZXJ2ZXIpOwogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERh
dGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3Ro
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBA
CiAjaW5jbHVkZSAiSlNTVkdMZW5ndGguaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNp
bmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5LmgiCiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgpAQCAtMzYsNyArMzYsNyBAQCBKU1ZhbHVl
IEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUmIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0
dXJuIHRvSlNOdW1iZXIoc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkucHJvcGVydHlSZWZlcmVuY2Uo
KS52YWx1ZUZvckJpbmRpbmdzKFNWR0xlbmd0aENvbnRleHQgeyB3cmFwcGVkKCkuY29udGV4dEVs
ZW1lbnQoKSB9KSk7CisgICAgcmV0dXJuIHRvSlM8SURMVW5yZXN0cmljdGVkRmxvYXQ+KHN0YXRl
LCBzY29wZSwgd3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCkudmFsdWVGb3JCaW5kaW5ncyhT
VkdMZW5ndGhDb250ZXh0IHsgd3JhcHBlZCgpLmNvbnRleHRFbGVtZW50KCkgfSkpOwogfQogCiB2
b2lkIEpTU1ZHTGVuZ3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcx
LDE0IEBAIHN1YiBBZGRTdHJpbmdpZmllck9wZXJhdGlvbklmTmVlZGVkCiAgICAgICAgICRzdHJp
bmdpZmllci0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRl
TGlzdCk7CiAgICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0dXJlLT5uYW1lKCJ0b1N0cmluZyIp
OwogICAgICAgICBkaWUgInN0cmluZ2lmaWVyIGNhbiBvbmx5IGJlIHVzZWQgb24gYXR0cmlidXRl
cyBvZiBTdHJpbmcgdHlwZXMiIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0
dXJlLT50eXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgIAorICAgICAg
ICAjIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgSURMUGFyc2VyJ3MgY2xvbmVUeXBlLgorICAgICAg
ICBteSAkdHlwZSA9IGRvbVR5cGUtPm5ldygpOworICAgICAgICAkdHlwZS0+bmFtZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPnR5cGUpOworCisgICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0dXJl
LT5pZGxUeXBlKCR0eXBlKTsKKyAgICAgICAgJHN0cmluZ2lmaWVyLT5zaWduYXR1cmUtPnR5cGUo
JHR5cGUtPm5hbWUpOworCiAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9LCAk
c3RyaW5naWZpZXIpOwogICAgICAgICBsYXN0OwogICAgIH0KQEAgLTk2OCwxMCArOTc1LDYgQEAg
c3ViIEdlbmVyYXRlRW51bWVyYXRpb25zSGVhZGVyQ29udGVudAogCiAgICAgICAgICRyZXN1bHQg
Lj0gIkpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgJGNs
YXNzTmFtZSk7XG5cbiI7CiAKLSAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNWYWx1ZVRyYWl0czwkY2xhc3NOYW1lPiB7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICIgICAg
c3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiwgJGNsYXNzTmFtZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfVxuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAifTtcblxu
IjsKLQogICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IE9wdGlvbmFsPCRjbGFzc05hbWU+
IHBhcnNlRW51bWVyYXRpb248JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpO1xuIjsKICAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiAkY2xhc3NOYW1lIGNvbnZl
cnRFbnVtZXJhdGlvbjwkY2xhc3NOYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
XG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKTtcblxuIjsKQEAgLTQ5MzIsNyArNDkzNSw2
IEBAIHN1YiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZQogbXkgJW5hdGl2ZVR5cGUgPSAoCiAg
ICAgIkRPTVN0cmluZyIgPT4gIlN0cmluZyIsCiAgICAgIlVTVlN0cmluZyIgPT4gIlN0cmluZyIs
Ci0gICAgIkRPTVRpbWVTdGFtcCIgPT4gIkRPTVRpbWVTdGFtcCIsCiAgICAgIkRhdGUiID0+ICJk
b3VibGUiLAogICAgICJEaWN0aW9uYXJ5IiA9PiAiRGljdGlvbmFyeSIsCiAgICAgIkV2ZW50TGlz
dGVuZXIiID0+ICJSZWZQdHI8RXZlbnRMaXN0ZW5lcj4iLApAQCAtNTE2Miw3ICs1MTY0LDcgQEAg
c3ViIEdldEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbgogICAgIHJldHVybiAiTm9ybWFs
Q29udmVyc2lvbiI7CiB9CiAKLXN1YiBJc0hhbmRsZWRCeURPTUNvbnZlcnQKK3N1YiBKU1ZhbHVl
VG9OYXRpdmVJc0hhbmRsZWRCeURPTUNvbnZlcnQKIHsKICAgICBteSAkaWRsVHlwZSA9IHNoaWZ0
OwogCkBAIC01MTkxLDcgKzUxOTMsNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgJHN0YXRl
UmVmZXJlbmNlID0gIipzdGF0ZSIgdW5sZXNzICRzdGF0ZVJlZmVyZW5jZTsKICAgICAkdGhpc09i
amVjdFJlZmVyZW5jZSA9ICIqY2FzdGVkVGhpcyIgdW5sZXNzICR0aGlzT2JqZWN0UmVmZXJlbmNl
OwogCi0gICAgaWYgKElzSGFuZGxlZEJ5RE9NQ29udmVydCgkaWRsVHlwZSkpIHsKKyAgICBpZiAo
SlNWYWx1ZVRvTmF0aXZlSXNIYW5kbGVkQnlET01Db252ZXJ0KCRpZGxUeXBlKSkgewogICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0LmgiKTsKICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXNGb3JJRExUeXBlKCRpZGxUeXBlLCAkY29uZGl0aW9uYWwpOwogCkBAIC01MjQ1LDYg
KzUyNDcsNDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIHJldHVybiAoIkpTJHt0eXBlfTo6
dG9XcmFwcGVkKCR2YWx1ZSkiLCAwKTsKIH0KIAorc3ViIE5hdGl2ZVRvSlNWYWx1ZUlzSGFuZGxl
ZEJ5RE9NQ29udmVydAoreworICAgIG15ICgkaWRsVHlwZSkgPSBAXzsKKworICAgIHJldHVybiAw
IGlmICRpZGxUeXBlLT5pc051bGxhYmxlICYmICgkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBl
KCRpZGxUeXBlLT5uYW1lKSB8fCAkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkaWRsVHlwZS0+
bmFtZSkpOworICAgIAorICAgIHJldHVybiAxIGlmICRpZGxUeXBlLT5uYW1lIGVxICJhbnkiOwor
ICAgIHJldHVybiAxIGlmICRpZGxUeXBlLT5uYW1lIGVxICJib29sZWFuIjsKKyAgICByZXR1cm4g
MSBpZiAkY29kZUdlbmVyYXRvci0+SXNJbnRlZ2VyVHlwZSgkaWRsVHlwZS0+bmFtZSk7CisgICAg
cmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPklzRmxvYXRpbmdQb2ludFR5cGUoJGlkbFR5cGUt
Pm5hbWUpOworICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGlk
bFR5cGUtPm5hbWUpOworICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBl
KCRpZGxUeXBlLT5uYW1lKTsKKyAgICByZXR1cm4gMSBpZiAkaWRsVHlwZS0+aXNVbmlvbjsKKyAg
ICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBl
KCRpZGxUeXBlLT5uYW1lKTsKKworICAgIHJldHVybiAwOworfQorCitzdWIgTmF0aXZlVG9KU1Zh
bHVlRE9NQ29udmVydE5lZWRzU3RhdGUKK3sKKyAgICBteSAoJGlkbFR5cGUpID0gQF87CisgICAg
CisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2hlY2sgaWYgYWxsIHRoZSBzdWIt
b2JqZWN0cyBvZiB0aGUgdW5pb24gbmVlZCB0aGUgc3RhdGUuCisgICAgcmV0dXJuIDEgaWYgJGlk
bFR5cGUtPmlzVW5pb247CisgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPklzU2VxdWVu
Y2VPckZyb3plbkFycmF5VHlwZSgkaWRsVHlwZS0+bmFtZSk7CisgICAgcmV0dXJuIDEgaWYgJGNv
ZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkaWRsVHlwZS0+bmFtZSk7CisgICAgcmV0dXJuIDEg
aWYgJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJGlkbFR5cGUtPm5hbWUpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3N1YiBOYXRpdmVUb0pTVmFsdWVET01Db252ZXJ0TmVlZHNHbG9iYWxPYmpl
Y3QKK3sKKyAgICBteSAoJGlkbFR5cGUpID0gQF87CisgICAgCisgICAgIyBGSVhNRTogVGhpcyBz
aG91bGQgYWN0dWFsbHkgY2hlY2sgaWYgYWxsIHRoZSBzdWItb2JqZWN0cyBvZiB0aGUgdW5pb24g
bmVlZCB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICByZXR1cm4gMSBpZiAkaWRsVHlwZS0+aXNVbmlv
bjsKKyAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJy
YXlUeXBlKCRpZGxUeXBlLT5uYW1lKTsKKworICAgIHJldHVybiAwOworfQorCiBzdWIgTmF0aXZl
VG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzCiB7CiAgICAgbXkgKCRzaWduYXR1cmUsICRpbkZ1bmN0
aW9uQ2FsbCwgJGludGVyZmFjZSwgJHZhbHVlLCAkdGhpc1ZhbHVlKSA9IEBfOwpAQCAtNTI3NCw1
OSArNTMxOCw1MCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkY29uZGl0aW9uYWwg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH07CiAgICAgbXkg
JHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOworICAgIG15ICRpZGxUeXBlID0gJHNpZ25hdHVyZS0+
aWRsVHlwZTsKICAgICBteSAkaXNOdWxsYWJsZSA9ICRzaWduYXR1cmUtPmlzTnVsbGFibGU7CiAg
ICAgbXkgJG1heVRocm93RXhjZXB0aW9uID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57R2V0dGVyTWF5VGhyb3dFeGNlcHRpb259IHx8ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e01heVRocm93RXhjZXB0aW9ufTsKIAotICAgIHJldHVybiAidG9KU0Jvb2xlYW4oJHN0
YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiIg
JiYgJG1heVRocm93RXhjZXB0aW9uOwotICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSkiIGlm
ICR0eXBlIGVxICJib29sZWFuIjsKKyAgICAjIFdlIGNvdWxkIGluc3RlYWQgb3ZlcmxvYWQgYSBm
dW5jdGlvbiB0byB3b3JrIHdpdGggb3B0aW9uYWwgYXMgd2VsbCBhcyBub24tb3B0aW9uYWwgbnVt
YmVycywgYnV0IHRoaXMKKyAgICAjIGlzIHNsaWdodGx5IGJldHRlciBiZWNhdXNlIGl0IGd1YXJh
bnRlZXMgd2Ugd2lsbCBmYWlsIHRvIGNvbXBpbGUgaWYgdGhlIElETCBmaWxlIGRvZXNuJ3QgbWF0
Y2ggdGhlIEMrKy4KKyAgICBpZiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVm
bGVjdH0gYW5kICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVk
IHNob3J0IikpIHsKKyAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJp
YnV0ZS9nZXRJbnRlZ3JhbEF0dHJpYnV0ZS9nOworICAgICAgICAkdmFsdWUgPSAic3RkOjptYXgo
MCwgJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7CisgICAgICAg
IG15ICRyZXR1cm5UeXBlID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVt
ZW50YXRpb25SZXR1cm5UeXBlfTsKKyAgICAgICAgaWYgKGRlZmluZWQgJHJldHVyblR5cGUgYW5k
ICgkcmV0dXJuVHlwZSBlcSAiSURCS2V5UGF0aCIgb3IgJHJldHVyblR5cGUgZXEgIklEQktleSIp
KSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSURCQmluZGluZ1V0aWxpdGllcy5o
IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIHJldHVybiAidG9KUygkc3RhdGVSZWZlcmVu
Y2UsICokZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChOYXRpdmVUb0pTVmFsdWVJc0hhbmRsZWRCeURPTUNvbnZlcnQoJGlkbFR5cGUpKSB7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIpOworICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlc0ZvcklETFR5cGUoJGlkbFR5cGUsICRjb25kaXRpb25hbCk7CisKKyAgICAgICAg
bXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCRpbnRlcmZhY2UsICRpZGxUeXBlKTsKKworICAgICAg
ICBteSBAY29udmVyc2lvbkFyZ3VtZW50cyA9ICgpOworICAgICAgICBwdXNoKEBjb252ZXJzaW9u
QXJndW1lbnRzLCAiJHN0YXRlUmVmZXJlbmNlIikgaWYgTmF0aXZlVG9KU1ZhbHVlRE9NQ29udmVy
dE5lZWRzU3RhdGUoJGlkbFR5cGUpIHx8ICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICAgICAgcHVz
aChAY29udmVyc2lvbkFyZ3VtZW50cywgIiokZ2xvYmFsT2JqZWN0IikgaWYgTmF0aXZlVG9KU1Zh
bHVlRE9NQ29udmVydE5lZWRzR2xvYmFsT2JqZWN0KCRpZGxUeXBlKTsKKyAgICAgICAgcHVzaChA
Y29udmVyc2lvbkFyZ3VtZW50cywgInRocm93U2NvcGUiKSBpZiAkbWF5VGhyb3dFeGNlcHRpb247
CisgICAgICAgIHB1c2goQGNvbnZlcnNpb25Bcmd1bWVudHMsICIkdmFsdWUiKTsKKworICAgICAg
ICByZXR1cm4gInRvSlM8JElETFR5cGU+KCIgLiBqb2luKCIsICIsIEBjb252ZXJzaW9uQXJndW1l
bnRzKSAuICIpIjsKKyAgICB9CisKICAgICByZXR1cm4gInRvSlNOdWxsYWJsZURhdGUoJHN0YXRl
UmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJGlz
TnVsbGFibGUgJiYgJG1heVRocm93RXhjZXB0aW9uOwogICAgIHJldHVybiAianNEYXRlT3JOdWxs
KCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAmJiAkaXNOdWxsYWJs
ZTsKICAgICByZXR1cm4gInRvSlNEYXRlKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZh
bHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKICAgICByZXR1
cm4gImpzRGF0ZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0ZSI7CiAK
LSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTnVtZXJpY1R5cGUoJHR5cGUpIG9yICR0eXBlIGVx
ICJET01UaW1lU3RhbXAiKSB7Ci0gICAgICAgICMgV2UgY291bGQgaW5zdGVhZCBvdmVybG9hZCBh
IGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBvcHRpb25hbCBhcyB3ZWxsIGFzIG5vbi1vcHRpb25hbCBu
dW1iZXJzLCBidXQgdGhpcwotICAgICAgICAjIGlzIHNsaWdodGx5IGJldHRlciBiZWNhdXNlIGl0
IGd1YXJhbnRlZXMgd2Ugd2lsbCBmYWlsIHRvIGNvbXBpbGUgaWYgdGhlIElETCBmaWxlIGRvZXNu
J3QgbWF0Y2ggdGhlIEMrKy4KLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e1JlZmxlY3R9IGFuZCAoJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVx
ICJ1bnNpZ25lZCBzaG9ydCIpKSB7Ci0gICAgICAgICAgICAkdmFsdWUgPX4gcy9nZXRVbnNpZ25l
ZEludGVncmFsQXR0cmlidXRlL2dldEludGVncmFsQXR0cmlidXRlL2c7Ci0gICAgICAgICAgICAk
dmFsdWUgPSAic3RkOjptYXgoMCwgJHZhbHVlKSI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICJ0b0pTTnVsbGFibGVOdW1iZXIoJHN0YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUp
IiBpZiAkaXNOdWxsYWJsZSAmJiAkbWF5VGhyb3dFeGNlcHRpb247Ci0gICAgICAgIHJldHVybiAi
dG9OdWxsYWJsZUpTTnVtYmVyKCR2YWx1ZSkiIGlmICRpc051bGxhYmxlOwotICAgICAgICByZXR1
cm4gInRvSlNOdW1iZXIoJHN0YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAk
bWF5VGhyb3dFeGNlcHRpb247Ci0gICAgICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSI7Ci0g
ICAgfQotCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKSkgewotICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9u
YWwpOwotICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKCRzdGF0ZVBvaW50ZXIsICR2
YWx1ZSkiOwotICAgIH0KLQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0
eXBlKSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVVJMLmgiLCAkY29uZGl0aW9uYWwp
OwogICAgICAgICByZXR1cm4gInRvSlNOdWxsYWJsZVN0cmluZygkc3RhdGVSZWZlcmVuY2UsIHRo
cm93U2NvcGUsICR2YWx1ZSkiIGlmICRpc051bGxhYmxlICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsK
ICAgICAgICAgcmV0dXJuICJqc1N0cmluZ09yTnVsbCgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBp
ZiAkaXNOdWxsYWJsZTsKLSAgICAgICAgcmV0dXJuICJ0b0pTU3RyaW5nKCRzdGF0ZVJlZmVyZW5j
ZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJG1heVRocm93RXhjZXB0aW9uOwotICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwot
ICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKCRzdGF0ZVBvaW50ZXIsICR2YWx1ZSki
OwotICAgIH0KLQotICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJy
YXlUeXBlKCR0eXBlKSkgewotICAgICAgICBteSAkaW5uZXJUeXBlID0gJGNvZGVHZW5lcmF0b3It
PkdldFNlcXVlbmNlT3JGcm96ZW5BcnJheUlubmVyVHlwZSgkdHlwZSk7Ci0gICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKUyR7aW5uZXJUeXBlfS5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkY29kZUdl
bmVyYXRvci0+SXNSZWZQdHJUeXBlKCRpbm5lclR5cGUpOwotICAgICAgICBteSAkaXNTZXF1ZW5j
ZSA9ICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlVHlwZSgkdHlwZSk7Ci0gICAgICAgIHJldHVy
biAidG9KU0FycmF5KCRzdGF0ZVJlZmVyZW5jZSwgKiRnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
ICR2YWx1ZSkiIGlmICRpc1NlcXVlbmNlICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAgICAgICAg
cmV0dXJuICJqc0FycmF5KCRzdGF0ZVBvaW50ZXIsICRnbG9iYWxPYmplY3QsICR2YWx1ZSkiIGlm
ICRpc1NlcXVlbmNlOwotICAgICAgICByZXR1cm4gImpzRnJvemVuQXJyYXkoJHN0YXRlUG9pbnRl
ciwgJGdsb2JhbE9iamVjdCwgJHZhbHVlKSI7OwotICAgIH0KLQotICAgIGlmICgkdHlwZSBlcSAi
YW55IikgewotICAgICAgICBteSAkcmV0dXJuVHlwZSA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0ltcGxlbWVudGF0aW9uUmV0dXJuVHlwZX07Ci0gICAgICAgIGlmIChkZWZpbmVk
ICRyZXR1cm5UeXBlIGFuZCAoJHJldHVyblR5cGUgZXEgIklEQktleVBhdGgiIG9yICRyZXR1cm5U
eXBlIGVxICJJREJLZXkiKSkgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIklEQkJp
bmRpbmdVdGlsaXRpZXMuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgICAgICByZXR1cm4gInRv
SlMoJHN0YXRlUmVmZXJlbmNlLCAqJGdsb2JhbE9iamVjdCwgJHZhbHVlKSI7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuICR2YWx1ZTsKKyAgICAgICAgYXNzZXJ0KCJVbmhhbmRsZWQgc3RyaW5n
IHR5cGUiKTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2Vy
LnBtCShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTI4Myw2ICsxMjgzLDcgQEAgc3ViIHBh
cnNlQXR0cmlidXRlT3JPcGVyYXRpb25SZXN0CiAgICAgICAgIG15ICRyZXR1cm5UeXBlID0gJHNl
bGYtPnBhcnNlUmV0dXJuVHlwZSgpOwogICAgICAgICBteSAkaW50ZXJmYWNlID0gJHNlbGYtPnBh
cnNlT3BlcmF0aW9uUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKICAgICAgICAgaWYgKGRl
ZmluZWQgKCRpbnRlcmZhY2UpKSB7CisgICAgICAgICAgICAkaW50ZXJmYWNlLT5zaWduYXR1cmUt
PmlkbFR5cGUoJHJldHVyblR5cGUpOwogICAgICAgICAgICAgJGludGVyZmFjZS0+c2lnbmF0dXJl
LT50eXBlKCRyZXR1cm5UeXBlLT5uYW1lKTsKICAgICAgICAgICAgICRpbnRlcmZhY2UtPnNpZ25h
dHVyZS0+aXNOdWxsYWJsZSgkcmV0dXJuVHlwZS0+aXNOdWxsYWJsZSk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAyMDc3MjApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNO
b2RlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE2NCw3ICsxNjUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0QWN0aXZlRE9NT2JqCiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLmZyYW1lKCksIFRo
cm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZXhjaXRpbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExMb25nPihpbXBsLmV4Y2l0aW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFj
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMCBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmgiCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwpAQCAtMTU4LDcgKzE1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc0EKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01T
dHJpbmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucygpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0xNzQsNyArMTczLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zUgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0
dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSw5IEBACiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQu
aCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0xNTAsNyArMTQ5LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC52YWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC52YWx1ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yMTcsNyArMjE2LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC52YWx1ZSgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwudmFsdWUo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEzICsyNSwxMiBAQAogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCiAKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVk
ZSAiSlNET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKLSNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3Rv
dHlwZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTQ3LDcgKzE0Niw3IEBAIGJvb2wg
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFNlcmlhbGkKICAgICBFeGVjU3RhdGUqIHN0YXRl
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoc3J6UGFyYW0gPyBzcnpQYXJhbS0+ZGVz
ZXJpYWxpemUoKnN0YXRlLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpKTsKLSAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgc3RyQXJnKSk7CisgICAgYXJn
cy5hcHBlbmQodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RyQXJnKSk7CiAKICAgICBOYWtl
ZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CiAgICAgbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0
VmFsdWVQYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CkBAIC0xODcsNyArMTg2LDcgQEAgYm9v
bCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbgogCiAgICAgRXhlY1N0YXRlKiBz
dGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKGpzQm9vbGVhbihib29sUGFyYW0p
KTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETEJvb2xlYW4+KGJvb2xQYXJhbSkpOwogCiAgICAg
TmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAgIG1fZGF0YS0+
aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoQm9vbGVhbiIpLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CkBAIC0yMDcsNyArMjA2LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwotICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxvbmdQYXJhbSkpOworICAgIGFyZ3MuYXBw
ZW5kKHRvSlM8SURMTG9uZz4obG9uZ1BhcmFtKSk7CiAgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0
ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgdGVzdE5vZGVQYXJhbSkpOwogCiAgICAgTmFrZWRQ
dHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFja0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxMyArMjQsMTIgQEAKIAogI2luY2x1ZGUgIkpTVGVzdENhbGxi
YWNrRnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpT
RE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
Ci0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTExMyw3
ICsxMTIsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0CiAgICAg
RXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHNyelBhcmFt
ID8gc3J6UGFyYW0tPmRlc2VyaWFsaXplKCpzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSkg
OiBqc051bGwoKSk7Ci0gICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHN0
ckFyZykpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0ckFy
ZykpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTUsNyArMTU0LDcgQEAgYm9vbCBKU1Rlc3RD
YWxsYmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdAogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKGpzQm9vbGVhbihib29sUGFyYW0pKTsKKyAgICBh
cmdzLmFwcGVuZCh0b0pTPElETEJvb2xlYW4+KGJvb2xQYXJhbSkpOwogCiAgICAgTmFrZWRQdHI8
SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0xNzYsNyArMTc1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxs
YmFja1JlcQogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3Mu
YXBwZW5kKGpzTnVtYmVyKGxvbmdQYXJhbSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMTG9u
Zz4obG9uZ1BhcmFtKSk7CiAgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5nbG9i
YWxPYmplY3QoKSwgdGVzdE5vZGVQYXJhbSkpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+IHJldHVybmVkRXhjZXB0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw5ICsyNCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJV
UkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
QEAgLTIwNSw3ICsyMDMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25z
dHJ1CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHIxKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHIxKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIyMSw3ICsyMTksNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsLmF0dHIyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+
KHN0YXRlLCBpbXBsLmF0dHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzOCw3
ICsyMzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHIzKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHIzKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyMDc3
MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOCBAQAogCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUg
IlVSTC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTQ5LDcgKzE0OCw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW0KICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwubmFtZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDc3MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDkgQEAKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQpAQCAtMTk5LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3QKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwucmVndWxhckF0dHJpYnV0
ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1w
bC5yZWd1bGFyQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIxNSw3
ICsyMTMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwu
cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yMzIsNyArMjMwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQ29u
ZGl0aW9uYWxBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1MSw3ICsyNDksNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dC5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtNDAsOCArNDEsNiBAQAogI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRl
ICJKU1Rlc3RPYmouaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTU3Ry
aW5nLmg+CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTQyMSw3ICs0MjAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9u
bHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RJbnRlcmZhY2U6OmltcGxlbWVu
dHNTdGF0aWNSZWFkT25seUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExv
bmc+KFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDM5LDcgKzQzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY0F0
dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIFRl
c3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTQ1OCw3ICs0NTcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlSW1wCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmltcGxlbWVudHNT
dHIxKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBp
bXBsLmltcGxlbWVudHNTdHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3Nyw3
ICs0NzYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wCiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIyKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmltcGxlbWVudHNT
dHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUzMSw3ICs1MzAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6
c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExMb25nPihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0
aWNSZWFkT25seUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTQ5LDcgKzU0
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG8KIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTU2OCw3ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcGwpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RyMShpbXBsKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTg3LDcgKzU4
Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXAKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjIoaW1wbCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+
KHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAy
MDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCwxMSBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNE
T01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTE4
OSw3ICsxODgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5hbWUoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubmFtZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3Bw
CShyZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEw
ICsyNCw5IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJVUkwuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKQEAgLTE3MSw3ICsxNzAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pCiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAgIGludDMy
X3QgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGlj
UmVhZG9ubHlBdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDxpbnQzMl90Pj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihtZW1vaXplZFJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xNzksMTMgKzE3OCwxMyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pCiAgICAgICAgIGludDMyX3Qg
bWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBj
dXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChp
bnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPGludDMyX3Q+KG1lbW9pemVkUmVzdWx0KSkgewotICAg
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7CisgICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obWVtb2l6ZWRSZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlB
dHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIwNyw3ICsyMDYsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pCiAgICAgaWYgKGN1cnNvci5pc0Nh
cHR1cmluZygpKSB7CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCk7CiAgICAgICAgIGN1cnNv
ci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQo
KS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjE1LDEzICsyMTQsMTMgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaQogICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJz
b3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1
dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRS
ZXN1bHQpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4o
c3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
bm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQzLDcgKzI0Miw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmkKICAgICBpZiAoY3Vyc29yLmlzQ2Fw
dHVyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC53
cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsKICAgICAgICAgY3Vyc29y
LmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgp
LnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yNTEsMTMgKzI1MCwxMyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pCiAgICAgICAgIFN0cmluZyBtZW1v
aXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNv
ci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0
ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJl
c3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5u
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yODAsNyArMjc5LDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaQogICAgIGlmIChjdXJzb3IuaXNDYXB0
dXJpbmcoKSkgewogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKS5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYyk7CiAgICAgICAg
IGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFt
ZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIGVjKTsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIG1lbW9pemVkUmVz
dWx0KTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI4OSwxNCArMjg4LDE0IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmkKICAgICAgICAgU3RyaW5nIG1lbW9p
emVkUmVzdWx0OwogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29y
LmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQg
JiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVz
dWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRl
LCB0aHJvd1Njb3BlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTsKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5ub25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOwogICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzE5
LDcgKzMxOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmkKICAg
ICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVz
dWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlv
bkF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0
cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXpl
ZFJlc3VsdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC0zMjcsMTMgKzMyNiwxMyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01S
ZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFz
ZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1v
aXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0
cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1w
bC5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC00NjMsMTggKzQ2MiwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAg
IGJvb2wgbWVtb2l6ZWRSZXN1bHQgPSBpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rp
b24oKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PGJvb2w+
PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAg
ICByZXN1bHQgPSBqc0Jvb2xlYW4obWVtb2l6ZWRSZXN1bHQpOworICAgICAgICByZXN1bHQgPSB0
b0pTPElETEJvb2xlYW4+KG1lbW9pemVkUmVzdWx0KTsKICAgICB9IGVsc2UgaWYgKGN1cnNvci5p
c1JlcGxheWluZygpKSB7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBj
dXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGJvb2wg
bWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPGJv
b2w+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKG1l
bW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVhbj4obWVt
b2l6ZWRSZXN1bHQpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9v
bGVhbihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CisgICAgICAgICAg
ICByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGltcGwubm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdG
dW5jdGlvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGltcGwu
bm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbigpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9K
UzxJRExCb29sZWFuPihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CiAj
ZWxzZQotICAgIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJn
RnVuY3Rpb24oKSk7CisgICAgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihpbXBsLm5vbmRldGVy
bWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CiAjZW5kaWYKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjA3NzIwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3NDUsNyArMTc0NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWFkT25seUwKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwucmVhZE9ubHlMb25nQXR0
cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzYxLDcgKzE3NjEsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTCiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTc5Miw3ICsxNzkyLDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxvbmdBdHRyKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxvbmdBdHRy
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MDcsNyArMTgwNyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBUZXN0T2JqOjpz
dGF0aWNTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4NTYsNyAr
MTg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckcKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZW51bUF0dHIoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oc3RhdGUsIGlt
cGwuZW51bUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTg3Miw3ICsxODcy
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyRwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwuYnl0ZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJ5dGU+
KGltcGwuYnl0ZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTg4OCw3ICsx
ODg4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cgogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwub2N0ZXRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExP
Y3RldD4oaW1wbC5vY3RldEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTkw
NCw3ICsxOTA0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cgog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcGwuc2hvcnRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExTaG9ydD4oaW1wbC5zaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTkyMCw3ICsxOTIwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1w
ZWRTaAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xhbXBlZFNob3J0QXR0cigpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMU2hvcnQ+KGltcGwuY2xhbXBlZFNob3J0QXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTM2LDcgKzE5MzYsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRW5mb3JjZVJhCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5lbmZvcmNlUmFuZ2VT
aG9ydEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNob3J0PihpbXBsLmVu
Zm9yY2VSYW5nZVNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTUy
LDcgKzE5NTIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMVW5zaWduZWRTaG9ydD4oaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTY4LDcgKzE5NjgsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5sb25nQXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTg0LDcgKzE5ODQsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTG9u
Z0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmdMb25nPihpbXBsLmxv
bmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMDAwLDcgKzIwMDAs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMCiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMVW5zaWduZWRMb25nTG9uZz4oaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMDE2LDcgKzIwMTYsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsLnN0cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIGltcGwuc3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0yMDMyLDcgKzIwMzIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2
c3RyaW5nCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwu
dXN2c3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMDk2LDcgKzIw
OTYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFiCiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjExMiw3ICsyMTEyLDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dAogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yMTI4LDcgKzIxMjgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExVU1ZTdHJpbmc+KHN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIxNDQsNyArMjE0NCw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnQKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuaW1wbGVtZW50YXRpb25FbnVtQXR0cigpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+Pihz
dGF0ZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTIxNzYsNyArMjE3Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDcmVhdGVHZXQKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMQm9vbGVhbj4oaW1wbC5pc0NyZWF0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yMTkyLDcgKzIxOTIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWRzdHJpbmdhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJp
bmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTIyMDgsNyArMjIwOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWQKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnN0
cmluZ2F0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVTVlN0cmluZz4o
c3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVzdnN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMjIyNCw3ICsyMjI0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMjI0MCw3ICsyMjQwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0
ckF0dHIpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZz4oc3Rk
OjptYXgoMCwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yMjU2LDcgKzIyNTYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihpbXBsLmhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFu
YXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjcyLDcgKzIyNzIsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERP
TVN0cmluZz4oc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjg4
LDcgKzIyODgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0yMzA0LDcgKzIzMDQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50U3RyaW5nQXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMjMyMCw3ICsyMzIwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuaGFzQXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRCb29sZWFuQXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVh
bj4oaW1wbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTIzNTIsNyArMjM1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWQKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZ2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuZ2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjM2OSw3ICsyMzY5LDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRBdAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQwMyw3ICsyNDAzLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlNOdW1iZXIo
c3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbigpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGlt
cGwuYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yNDIwLDcgKzI0MjAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRp
b24oZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5hdHRyaWJ1
dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNDM3LDcg
KzI0MzcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlCiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5hdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRp
b24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQ1Myw3ICsyNDUzLDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
YXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMTG9uZz4oaW1wbC5hdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9u
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI0NzAsNyArMjQ3MCw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHQKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dT
Y29wZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNDg3LDcgKzI0ODcsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1
NDUsNyArMjU0NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXAK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZShzdGF0ZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1NjEsNyArMjU2MSw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFcKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRlKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwud2l0aENhbGxXaXRoQW5kU2V0
dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoc3RhdGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yNzExLDcgKzI3MTEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMjczMCw3ICsyNzMwLDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRy
MigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5jb25kaXRpb25h
bEF0dHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3NDksNyArMjc0OSw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb24KICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLmNvbmRpdGlvbmFsQXR0cjMoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExv
bmc+KGltcGwuY29uZGl0aW9uYWxBdHRyMygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yODIwLDcgKzI4MjAsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVk
QXR0CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0
cmlidXRlMS5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2Fj
aGVkQXR0cmlidXRlMSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGltcGwu
Y2FjaGVkQXR0cmlidXRlMSgpKTsKICAgICB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMS5z
ZXQoc3RhdGUudm0oKSwgJnRoaXNPYmplY3QsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTI4MzksNyArMjgzOSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHQKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNo
ZWRBdHRyaWJ1dGUyLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1w
bC5jYWNoZWRBdHRyaWJ1dGUyKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEFueT4o
aW1wbC5jYWNoZWRBdHRyaWJ1dGUyKCkpOwogICAgIHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1
dGUyLnNldChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMjg1Niw3ICsyODU2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakFueUF0dHJpYgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55QXR0cmlidXRlKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETEFueT4oaW1wbC5hbnlBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmF3YmVycgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYmx1ZWJlcnJ5KCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmJsdWViZXJyeSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yOTM1LDcgKzI5MzUsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqRGVzY3JpcHRpCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlvbigpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5kZXNjcmlwdGlvbigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yOTUxLDcgKzI5NTEsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5pZCgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5pZCgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yOTY3LDcgKzI5NjcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSGFzaEdldHRlCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmhh
c2goKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGlt
cGwuaGFzaCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yOTgzLDcgKzI5ODMsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFiCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMTG9uZz4oaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0yOTk5LDcgKzI5OTksNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVECiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVEb3VibGVB
dHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETFVu
cmVzdHJpY3RlZERvdWJsZT4+KGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzAxNSw3ICszMDE1LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51
bGxhYmxlTG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVs
bGFibGU8SURMTG9uZz4+KGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTMwMzEsNyArMzAzMSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUIKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5udWxsYWJsZUJvb2xlYW5B
dHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETEJv
b2xlYW4+PihpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0zMDYzLDcgKzMwNjMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVMCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxh
YmxlPElETExvbmc+PihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMxMTIsNyArMzExMiw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVMKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxh
YmxlU3RyaW5nVmFsdWUoZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFi
bGU8SURMTG9uZz4+KGltcGwubnVsbGFibGVTdHJpbmdWYWx1ZShlYykpOwogICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtMzEyOSw3ICszMTI5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJp
YnV0ZQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuYXR0cmli
dXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMxNDUsNyArMzE0NSw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPj4o
c3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMzIwOSw3ICszMjA5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ2lmaQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5z
dHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNW
U3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC00ODIzLDcgKzQ4MjMsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYnl0ZU1ldGhvZCgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNDg0OCw3ICs0ODQ4LDcg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGF1dG8gb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0Iiwg
ImJ5dGVNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGJ5dGVBcmcpLCBXVEZNb3Zl
KHN0ckFyZyksICpvYmpBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQnl0ZT4o
aW1wbC5ieXRlTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShieXRlQXJnKSwgV1RGTW92ZShzdHJBcmcp
LCAqb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBA
IC00ODY0LDcgKzQ4NjQsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0ZXRNZXRob2QoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNDg4OSw3ICs0ODg5LDcgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5M
SUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9jdGV0TWV0aG9k
V2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5vY3RldE1ldGhvZFdpdGhBcmdzKFdURk1vdmUob2N0ZXRBcmcpLCBXVEZNb3ZlKHN0ckFyZyks
ICpvYmpBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMT2N0ZXQ+KGltcGwub2N0
ZXRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKG9jdGV0QXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2Jq
QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC00OTA1
LDcgKzQ5MDUsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcGwubG9uZ01ldGhvZCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIApAQCAtNDkzMCw3ICs0OTMwLDcgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dy
YXBwZWQoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9i
akFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgImxvbmdNZXRob2RXaXRoQXJncyIs
ICJUZXN0T2JqIik7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdNZXRo
b2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kV2l0aEFy
Z3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC00OTg3LDcgKzQ5ODcsNyBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwudW5mb3JnZWFibGVNZXRob2QoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExv
bmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCkBAIC01MzA4LDcgKzUzMDgsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlNOdW1iZXIoKnN0YXRlLCB0aHJvd1Njb3Bl
LCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExMb25nPigqc3RhdGUsIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0
aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCkBAIC01MzkwLDcgKzUzOTAsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBhcmd1bWVudCA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnBy
aXZhdGVNZXRob2QoV1RGTW92ZShhcmd1bWVudCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3Vt
ZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNTQx
MCw3ICs1NDEwLDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJndW1lbnQgPSBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlTWV0aG9k
KFdURk1vdmUoYXJndW1lbnQpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oKnN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVNZXRob2QoV1RGTW92ZShhcmd1bWVu
dCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTY0MDgs
NyArNjQwOCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5jb25k
aXRpb25hbE1ldGhvZDEoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCkBAIC03MTcxLDcgKzcxNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9iakNvCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gYXJnID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJnKSkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExMb25nPihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3Zl
KGFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTcz
MTYsNyArNzMxNiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSwgZWMp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
KnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5j
dGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBA
IC04MDgwLDcgKzgwODAsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmli
dXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwg
aW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDMwICsxMDgsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVAogfTsKIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0
YXRlKiwgVGVzdE9iajo6RW51bVR5cGUpOwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJh
aXRzPFRlc3RPYmo6OkVudW1UeXBlPiB7Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5
SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9i
ajo6RW51bVR5cGUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1
ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+IHBhcnNl
RW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKIHRlbXBsYXRlPD4gVGVzdE9iajo6RW51bVR5cGUgY29udmVydEVudW1lcmF0aW9uPFRl
c3RPYmo6OkVudW1UeXBlPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0
ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5
cGU+KCk7CiAKIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRl
KiwgVGVzdE9iajo6T3B0aW9uYWwpOwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRz
PFRlc3RPYmo6Ok9wdGlvbmFsPiB7Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6
T3B0aW9uYWwgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7
IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6T3B0aW9uYWw+IHBhcnNlRW51
bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKIHRlbXBsYXRlPD4gVGVzdE9iajo6T3B0aW9uYWwgY29udmVydEVudW1lcmF0aW9uPFRlc3RP
Ymo6Ok9wdGlvbmFsPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+
IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+
KCk7CiAKIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwg
QWx0ZXJuYXRlRW51bU5hbWUpOwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPEFs
dGVybmF0ZUVudW1OYW1lPiB7Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgQWx0ZXJuYXRlRW51
bU5hbWUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0K
LX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJuYXRlRW51bU5hbWU+IHBhcnNlRW51bWVy
YXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
IHRlbXBsYXRlPD4gQWx0ZXJuYXRlRW51bU5hbWUgY29udmVydEVudW1lcmF0aW9uPEFsdGVybmF0
ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8QWx0ZXJuYXRlRW51bU5hbWU+KCk7
CkBAIC0xNDAsMTAgKzEyOCw2IEBAIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVt
ZXJhdGkKIAogSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUq
LCBUZXN0T2JqOjpFbnVtQSk7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVz
dE9iajo6RW51bUE+IHsKLSAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQSB2
YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQog
dGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtQT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBU
ZXN0T2JqOjpFbnVtQSBjb252ZXJ0RW51bWVyYXRpb248VGVzdE9iajo6RW51bUE+KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQT4oKTsKQEAgLTE1NCwxMCArMTM4LDYgQEAg
dGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aQogCiBKU0M6OkpTU3RyaW5n
KiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1CKTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQj4gewotICAgIHN0
YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1CIHZhbHVlKSB7IHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3RPYmo6OkVudW1CPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1CPihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1CIGNvbnZlcnRF
bnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtQj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RP
Ymo6OkVudW1CPigpOwpAQCAtMTY4LDEwICsxNDgsNiBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpCiAKIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpT
Qzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUMpOwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OkVudW1DPiB7Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFy
cmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dE9iajo6RW51bUMgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1
ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlRW51
bWVyYXRpb248VGVzdE9iajo6RW51bUM+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
IHRlbXBsYXRlPD4gVGVzdE9iajo6RW51bUMgY29udmVydEVudW1lcmF0aW9uPFRlc3RPYmo6OkVu
dW1DPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCk7CkBAIC0xODAs
MzAgKzE1NiwxOCBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpCiAK
IEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9i
ajo6S2luZCk7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2lu
ZD4gewotICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OktpbmQgdmFsdWUpIHsgcmV0
dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4g
T3B0aW9uYWw8VGVzdE9iajo6S2luZD4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpLaW5kPihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6OktpbmQg
Y29udmVydEVudW1lcmF0aW9uPFRlc3RPYmo6OktpbmQ+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czxUZXN0T2JqOjpLaW5kPigpOwogCiBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShK
U0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OlNpemUpOwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OlNpemU+IHsKLSAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJy
YXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
T2JqOjpTaXplIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUp
OyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlNpemU+IHBhcnNlRW51bWVy
YXRpb248VGVzdE9iajo6U2l6ZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVt
cGxhdGU8PiBUZXN0T2JqOjpTaXplIGNvbnZlcnRFbnVtZXJhdGlvbjxUZXN0T2JqOjpTaXplPihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6U2l6ZT4oKTsKIAogSlNDOjpKU1N0cmlu
ZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpDb25maWRlbmNl
KTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpDb25maWRlbmNl
PiB7Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6Q29uZmlkZW5jZSB2YWx1ZSkg
eyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVtcGxh
dGU8PiBPcHRpb25hbDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RP
Ymo6OkNvbmZpZGVuY2U+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRl
PD4gVGVzdE9iajo6Q29uZmlkZW5jZSBjb252ZXJ0RW51bWVyYXRpb248VGVzdE9iajo6Q29uZmlk
ZW5jZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkNvbmZpZGVuY2U+KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyMDc3MjApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDcgQEAKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNUZXN0
Tm9kZS5oIgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIApAQCAtMTYy
LDcgKzE2MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW8KICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuZmly
c3RTdHJpbmdBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTc4LDcg
KzE3Niw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW8KICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLnNlY29uZExvbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmc+KGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yMTAsNyArMjA4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpbwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnJlc3RyaWN0
ZWREb3VibGU+KGltcGwuZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIyNiw3ICsyMjQsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5maWZ0aExvbmdBdHRy
aWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuZmlmdGhM
b25nQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShy
ZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1
ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yMDAsNyArMjAxLDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTYwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXko
JnN0YXRlLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8TWVzc2FnZVBvcnQ+
Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24g
MjA3NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDkgQEAKICNpbmNsdWRl
ICJKU1Rlc3RTdWJPYmouaCIKICNpbmNsdWRlICJTVkdQb2ludC5oIgogI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCkBAIC0yMzgs
NyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaQogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjg1LDcgKzI4Myw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHIKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4o
aW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzAyLDcg
KzMwMCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHIKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMxOSw3ICszMTcsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0VHlwZWRlZnNTdHJpCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwu
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzM2LDcgKzMzNCw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmkKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTQ5LDcgKzU0Nyw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5t
ZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4oaW1wbC5tZXRob2RXaXRoU2VxdWVu
Y2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKQEAgLTY4OCw3ICs2ODYsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2
YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlv
bihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNl
cXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNzExLDcgKzcwOSw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Fy
cmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5j
ZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKFdURk1vdmUodmFsdWVzKSwg
ZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTczMyw3ICs3MzEsNyBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURM
SW50ZXJmYWNlPFRlc3RFdmVudFRhcmdldD4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmNhbGxXaXRoU2Vx
dWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRS
ZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjA3
NzIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmli
dXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOCBAQAogCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlVS
TC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTQ5LDcgKzE0OCw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmwKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCShyZXZpc2lvbiAyMDc3MjApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCwx
MCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAorLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIHR5cGVkZWYKKy8vIGh0dHBz
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI0RPTVRpbWVTdGFtcAordHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgRE9NVGltZVN0YW1wOworCiBbCiAgICAgQ29uc3RydWN0b3IoRE9NU3RyaW5n
IHR5cGUsIG9wdGlvbmFsIEV2ZW50SW5pdCBldmVudEluaXREaWN0KSwKICAgICBDdXN0b21Ub0pT
T2JqZWN0LApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oCShy
ZXZpc2lvbiAyMDc3MjApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMTMgQEAgcHVibGljOgogICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7CiAgICAgfTsKIAorICAgIHVzaW5nIERpY3Rpb25hcnlVbmlvbiA9
IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBWZWN0b3I8U3RyaW5nPiwgT3RoZXJEaWN0aW9uYXJ5PjsK
KwogICAgIHN0cnVjdCBEaWN0aW9uYXJ5IHsKICAgICAgICAgaW50IGxvbmdWYWx1ZTsKICAgICAg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZXF1ZW5jZVZh
bHVlOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxOb2RlPiwgVmVjdG9yPFN0cmluZz4sIE90aGVy
RGljdGlvbmFyeT4gdW5pb25WYWx1ZTsKKyAgICAgICAgRGljdGlvbmFyeVVuaW9uIHVuaW9uVmFs
dWU7CiAgICAgfTsKIAogICAgIGxvbmcgdGVzdExvbmcoKSB7IHJldHVybiBtX2xvbmc7IH0KQEAg
LTk4LDYgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB0ZXN0VVNWU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gbV91c3ZzdHJpbmc7IH0KICAgICB2b2lkIHNldFRlc3RVU1ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB1c3ZzdHJpbmcpIHsgbV91c3ZzdHJpbmcgPSB1c3ZzdHJpbmc7IH0K
IAorICAgIHVzaW5nIFRlc3RVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0
cjxOb2RlPiwgVmVjdG9yPGludD4+OworICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVuaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV91bmlvbjsgfQorICAgIHZvaWQgc2V0VGVzdFVuaW9uKGNvbnN0IFRl
c3RVbmlvbiYgdmFsdWUpIHsgbV91bmlvbiA9IHZhbHVlOyB9CisKICAgICB2b2lkIHNldFR5cGVD
b252ZXJzaW9uc0RpY3Rpb25hcnkoRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKICAgICB7CiAgICAg
ICAgIG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeUxvbmdWYWx1ZSA9IGRpY3Rpb25hcnkubG9u
Z1ZhbHVlOwpAQCAtMTA4LDcgKzExNCw4IEBAIHB1YmxpYzoKIAogICAgIGludCB0eXBlQ29udmVy
c2lvbnNEaWN0aW9uYXJ5TG9uZ1ZhbHVlKCkgeyByZXR1cm4gbV90eXBlQ29udmVyc2lvbnNEaWN0
aW9uYXJ5TG9uZ1ZhbHVlOyB9CiAgICAgU3RyaW5nIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlT
dHJpbmdWYWx1ZSgpIHsgcmV0dXJuIG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVN0cmluZ1Zh
bHVlOyB9Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVNlcXVl
bmNlVmFsdWUoKSB7IHJldHVybiBtX3R5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlTZXF1ZW5jZVZh
bHVlOyB9CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25h
cnlTZXF1ZW5jZVZhbHVlKCkgeyByZXR1cm4gbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U2Vx
dWVuY2VWYWx1ZTsgfQorICAgIGNvbnN0IERpY3Rpb25hcnlVbmlvbiYgdHlwZUNvbnZlcnNpb25z
RGljdGlvbmFyeVVuaW9uVmFsdWUoKSB7IHJldHVybiBtX3R5cGVDb252ZXJzaW9uc0RpY3Rpb25h
cnlVbmlvblZhbHVlOyB9CiAgICAgVW5pb25UeXBlIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlV
bmlvblR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV90eXBlQ29u
dmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25WYWx1ZSwKQEAgLTEzMywxMSArMTQwLDEyIEBAIHByaXZh
dGU6CiAgICAgdWludDE2X3QgbV9VbnNpZ25lZFNob3J0IHsgMCB9OwogICAgIFN0cmluZyBtX3N0
cmluZzsKICAgICBTdHJpbmcgbV91c3ZzdHJpbmc7CisgICAgVGVzdFVuaW9uIG1fdW5pb247CiAg
ICAgCiAgICAgaW50IG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeUxvbmdWYWx1ZSB7IDAgfTsK
ICAgICBTdHJpbmcgbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U3RyaW5nVmFsdWU7CiAgICAg
VmVjdG9yPFN0cmluZz4gbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U2VxdWVuY2VWYWx1ZTsK
LSAgICBWYXJpYW50PFJlZlB0cjxOb2RlPiwgVmVjdG9yPFN0cmluZz4sIE90aGVyRGljdGlvbmFy
eT4gbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25WYWx1ZTsKKyAgICBEaWN0aW9uYXJ5
VW5pb24gbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25WYWx1ZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZl
cnNpb25zLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252
ZXJzaW9ucy5pZGwJKHJldmlzaW9uIDIwNzcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
VHlwZUNvbnZlcnNpb25zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDE0IEBAIGVu
dW0gVW5pb25UeXBlIHsgIm5vZGUiLCAic2VxdWVuY2UiLCAiZGkKIAogICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgdGVzdFN0cmluZzsKICAgICBhdHRyaWJ1dGUgVVNWU3RyaW5nIHRlc3RVU1ZTdHJp
bmc7CisKKyAgICBhdHRyaWJ1dGUgKERPTVN0cmluZyBvciBsb25nIG9yIGJvb2xlYW4gb3IgTm9k
ZSBvciBzZXF1ZW5jZTxsb25nPikgdGVzdFVuaW9uOwogICAgIAogICAgIHZvaWQgc2V0VHlwZUNv
bnZlcnNpb25zRGljdGlvbmFyeShUeXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5IGQpOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlMb25nVmFsdWU7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlQ29udmVyc2lvbnNEaWN0aW9u
YXJ5U3RyaW5nVmFsdWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNlPERPTVN0cmlu
Zz4gdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVNlcXVlbmNlVmFsdWU7Ci0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIFVuaW9uVHlwZSB0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25UeXBlOyAK
KyAgICByZWFkb25seSBhdHRyaWJ1dGUgVW5pb25UeXBlIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25h
cnlVbmlvblR5cGU7CiB9OwogCiBkaWN0aW9uYXJ5IFR5cGVDb252ZXJzaW9uc090aGVyRGljdGlv
bmFyeSB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc3MjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0xMC0yMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtXZWJJRExdIEFkZCBJRExUeXBlIGJhc2Vk
IHRvSlMgY29udmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBqcy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICoganMvZG9tL3dlYmlkbC10eXBlLW1hcHBpbmcuaHRtbDoKKwogMjAxNi0xMC0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBIVE1MIGNhbnZhcyBh
bmQgdHJhY2tzIGZyb20gRXhjZXB0aW9uQ29kZSB0byBFeGNlcHRpb24KSW5kZXg6IExheW91dFRl
c3RzL2pzL2RvbS93ZWJpZGwtdHlwZS1tYXBwaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDIwNzcyMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS93ZWJpZGwtdHlwZS1tYXBwaW5n
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA1OSw2ICsxMDU5LDM2IEBAIGNvbnZl
cnRlci50ZXN0VVNWU3RyaW5nID0gdW5kZWZpbmVkCiBjb252ZXJ0ZXIudGVzdFN0cmluZyA9IHVu
ZGVmaW5lZAogUEFTUyBjb252ZXJ0ZXIudGVzdFVTVlN0cmluZyBpcyAidW5kZWZpbmVkIgogUEFT
UyBjb252ZXJ0ZXIudGVzdFN0cmluZyBpcyAidW5kZWZpbmVkIgorY29udmVydGVyLnRlc3RVbmlv
biA9ICdoZWxsbycKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnaGVsbG8nCitQQVNTIHR5
cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzICdzdHJpbmcnCitjb252ZXJ0ZXIudGVzdFVuaW9u
ID0gMQorUEFTUyBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzIDEKK1BBU1MgdHlwZW9mIGNvbnZlcnRl
ci50ZXN0VW5pb24gaXMgJ251bWJlcicKK2NvbnZlcnRlci50ZXN0VW5pb24gPSBmYWxzZQorUEFT
UyBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzIGZhbHNlCitQQVNTIHR5cGVvZiBjb252ZXJ0ZXIudGVz
dFVuaW9uIGlzICdib29sZWFuJworY29udmVydGVyLnRlc3RVbmlvbiA9IGRvY3VtZW50CitQQVNT
IGNvbnZlcnRlci50ZXN0VW5pb24gaXMgZG9jdW1lbnQKK1BBU1MgdHlwZW9mIGNvbnZlcnRlci50
ZXN0VW5pb24gaXMgJ29iamVjdCcKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyBhbiBpbnN0
YW5jZSBvZiBEb2N1bWVudAorY29udmVydGVyLnRlc3RVbmlvbiA9IFsxLCAyXQorUEFTUyBjb252
ZXJ0ZXIudGVzdFVuaW9uIGlzIFsxLCAyXQorUEFTUyB0eXBlb2YgY29udmVydGVyLnRlc3RVbmlv
biBpcyAnb2JqZWN0JworUEFTUyBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzIGFuIGluc3RhbmNlIG9m
IEFycmF5Citjb252ZXJ0ZXIudGVzdFVuaW9uID0gbnVsbAorUEFTUyBjb252ZXJ0ZXIudGVzdFVu
aW9uIGlzICdudWxsJworUEFTUyB0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnc3RyaW5n
JworY29udmVydGVyLnRlc3RVbmlvbiA9IHVuZGVmaW5lZAorUEFTUyBjb252ZXJ0ZXIudGVzdFVu
aW9uIGlzICd1bmRlZmluZWQnCitQQVNTIHR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzICdz
dHJpbmcnCitjb252ZXJ0ZXIudGVzdFVuaW9uID0gd2luZG93CitQQVNTIHR5cGVvZiBjb252ZXJ0
ZXIudGVzdFVuaW9uIGlzICdzdHJpbmcnCitQQVNTIGNvbnZlcnRlci50ZXN0VW5pb24gaXMgJ1tv
YmplY3QgV2luZG93XScKK2NvbnZlcnRlci50ZXN0VW5pb24gPSB7IH0KK1BBU1MgdHlwZW9mIGNv
bnZlcnRlci50ZXN0VW5pb24gaXMgJ3N0cmluZycKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBp
cyAnW29iamVjdCBPYmplY3RdJworUEFTUyBjb252ZXJ0ZXIudGVzdFVuaW9uID0geyB0b1N0cmlu
ZzogZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKCk7IH0gfSB0aHJldyBleGNlcHRpb24gRXJyb3Iu
CiBjb252ZXJ0ZXIuc2V0VHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeSh7IGxvbmdWYWx1ZTogMSB9
KQogUEFTUyBjb252ZXJ0ZXIudHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeUxvbmdWYWx1ZSBpcyAx
CiBjb252ZXJ0ZXIuc2V0VHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeSh7IHN0cmluZ1ZhbHVlOiAn
aGVsbG8nIH0pCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS93ZWJpZGwtdHlwZS1tYXBwaW5n
Lmh0bWwJKHJldmlzaW9uIDIwNzcyMCkKKysrIExheW91dFRlc3RzL2pzL2RvbS93ZWJpZGwtdHlw
ZS1tYXBwaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgZnVuY3Rpb24g
dGVzdE5vbk51bWVyaWNUb051bWVyaWNFbmZvcmNlUgogICAgIGNvbnZlcnQoYXR0cmlidXRlLCAi
bnVsbCIsICIwIik7CiAgICAgY29udmVydFRocm93cyhhdHRyaWJ1dGUsICJ1bmRlZmluZWQiKTsK
IH0KLQorLy8gCiB0eXBlID0gInRlc3RMb25nIjsKIHZlcmlmeUF0dHJpYnV0ZSh0eXBlKTsKIGNv
bnZlcnQodHlwZSwgIjAiKTsKQEAgLTU4Niw2ICs1ODYsMzcgQEAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJjb252ZXJ0ZXIudGVzdFN0cgogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiY29udmVy
dGVyLnRlc3RTdHJpbmciLCB2YWx1ZSk7CiB9KTsKIAorZXZhbEFuZExvZygiY29udmVydGVyLnRl
c3RVbmlvbiA9ICdoZWxsbyciKTsKK3Nob3VsZEJlKCJjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIido
ZWxsbyciKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIsICInc3RyaW5n
JyIpOworZXZhbEFuZExvZygiY29udmVydGVyLnRlc3RVbmlvbiA9IDEiKTsKK3Nob3VsZEJlKCJj
b252ZXJ0ZXIudGVzdFVuaW9uIiwgIjEiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRl
c3RVbmlvbiIsICInbnVtYmVyJyIpOworZXZhbEFuZExvZygiY29udmVydGVyLnRlc3RVbmlvbiA9
IGZhbHNlIik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RVbmlvbiIsICJmYWxzZSIpOworc2hv
dWxkQmUoInR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIidib29sZWFuJyIpOworZXZhbEFu
ZExvZygiY29udmVydGVyLnRlc3RVbmlvbiA9IGRvY3VtZW50Iik7CitzaG91bGRCZSgiY29udmVy
dGVyLnRlc3RVbmlvbiIsICJkb2N1bWVudCIpOworc2hvdWxkQmUoInR5cGVvZiBjb252ZXJ0ZXIu
dGVzdFVuaW9uIiwgIidvYmplY3QnIik7CitzaG91bGRCZVR5cGUoImNvbnZlcnRlci50ZXN0VW5p
b24iLCAiRG9jdW1lbnQiKTsKK2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0VW5pb24gPSBbMSwg
Ml0iKTsKK3Nob3VsZEJlKCJjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIlsxLCAyXSIpOworc2hvdWxk
QmUoInR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIidvYmplY3QnIik7CitzaG91bGRCZVR5
cGUoImNvbnZlcnRlci50ZXN0VW5pb24iLCAiQXJyYXkiKTsKK2V2YWxBbmRMb2coImNvbnZlcnRl
ci50ZXN0VW5pb24gPSBudWxsIik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RVbmlvbiIsICIn
bnVsbCciKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIsICInc3RyaW5n
JyIpOworZXZhbEFuZExvZygiY29udmVydGVyLnRlc3RVbmlvbiA9IHVuZGVmaW5lZCIpOworc2hv
dWxkQmUoImNvbnZlcnRlci50ZXN0VW5pb24iLCAiJ3VuZGVmaW5lZCciKTsKK3Nob3VsZEJlKCJ0
eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIsICInc3RyaW5nJyIpOworZXZhbEFuZExvZygiY29u
dmVydGVyLnRlc3RVbmlvbiA9IHdpbmRvdyIpOworc2hvdWxkQmUoInR5cGVvZiBjb252ZXJ0ZXIu
dGVzdFVuaW9uIiwgIidzdHJpbmcnIik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RVbmlvbiIs
ICInW29iamVjdCBXaW5kb3ddJyIpOworZXZhbEFuZExvZygiY29udmVydGVyLnRlc3RVbmlvbiA9
IHsgfSIpOworc2hvdWxkQmUoInR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIidzdHJpbmcn
Iik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RVbmlvbiIsICInW29iamVjdCBPYmplY3RdJyIp
Oworc2hvdWxkVGhyb3coImNvbnZlcnRlci50ZXN0VW5pb24gPSB7IHRvU3RyaW5nOiBmdW5jdGlv
bigpIHsgdGhyb3cgRXJyb3IoKTsgfSB9Iik7CisKIGV2YWxBbmRMb2coImNvbnZlcnRlci5zZXRU
eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5KHsgbG9uZ1ZhbHVlOiAxIH0pIik7CiBzaG91bGRCZSgi
Y29udmVydGVyLnR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlMb25nVmFsdWUiLCAiMSIpOwogZXZh
bEFuZExvZygiY29udmVydGVyLnNldFR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnkoeyBzdHJpbmdW
YWx1ZTogJ2hlbGxvJyB9KSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292538</attachid>
            <date>2016-10-22 22:23:56 -0700</date>
            <delta_ts>2016-10-23 15:38:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163861-20161022222014.patch</filename>
            <type>text/plain</type>
            <size>133710</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBAQAorMjAxNi0xMC0yMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtXZWJJRExdIEFkZCBJRExUeXBlIGJh
c2VkIHRvSlMgY29udmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzODYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyB0b0pTPElETFR5cGU+KCkgZnVuY3Rpb25zIHRvIGJlIHRoZSBuZXcg
d2F5IG9mIGNvbnZlcnRpbmcKKyAgICAgICAgZnJvbSBpbXBsZW1lbnRhdGlvbiB0eXBlcyB0byBK
UyB0eXBlcy4gVGhlc2UgYXJlIGltcGxlbWVudGVkIHZpYQorICAgICAgICBhIHNpbWlsYXIgbWVj
aGFuaXNtIHRvIHRoZSBjb252ZXJ0PElETD4oKSBmdW5jdGlvbnMsIHRob3VnaCBzcGVjaWFsaXph
dGlvbnMKKyAgICAgICAgb2YgYSBKU0NvbnZlcnRlciBzdHJ1Y3QgKHJhdGhlciB0aGFuIHRoZSBD
b252ZXJ0ZXIgc3RydWN0cykuIFRoaXMgYWxsb3dzCisgICAgICAgIHVzIHRvIHN1cHBvcnQgYXJi
aXRyYXJpbHkgY29tcGxleCBhZ2dyZWdhdGUgdHlwZXMgZWFzaWx5IChlLmcuIHNlcXVlbmNlPChO
b2RlIG9yIERPTVN0cmluZz8pPikuCisKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b3Bvc2l0aW9uLmlkbDoKKyAgICAgICAgKiBkb20vRXZlbnQuaWRsOgorICAgICAgICBBZGQgdHlw
ZWRlZiBmb3IgRE9NVGltZVN0YW1wLiBFdmVudHVhbGx5LCBvdXIgSURMUGFyc2VyIHNob3VsZCBk
byB0aGlzIGZvciB1cywgYnV0CisgICAgICAgIGZvciBub3cgaXQgYWxsb3dzIHVzIHRvIHNpbXBs
aWZ5IHRoZSB0eXBlIHN5c3RlbS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNWYWx1ZVRyYWl0czo6YXJyYXlKU1ZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8U3RyaW5nPjo6YXJyYXlKU1Zh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8ZG91YmxlPjo6
YXJyYXlKU1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8
ZmxvYXQ+OjphcnJheUpTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6anNBcnJh
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpqc0Zyb3plbkFycmF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz46Om5hdGl2ZVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPHVuc2lnbmVk
Pjo6bmF0aXZlVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVU
cmFpdHM8ZmxvYXQ+OjpuYXRpdmVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpO
YXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjp0b051bGxhYmxlSlNOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlNCb29sZWFuKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOdW1iZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9KU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBtYW55IG5v
dy11bm5lZWRlZCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIEFkZCA1
IHByaW1hcnkgdG9KUyBmdW5jdGlvbnMgd2hpY2ggdGFrZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZv
bGxvd2luZworICAgICAgICBhcmd1bWVudHM6IEV4ZWNTdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qs
IFRocm93U2NvcGUuICBBbGwgdGFrZSB0aGUgdmFsdWUgCisgICAgICAgIHRvIGJlIGNvbnZlcnRl
ZCBhcyB3ZWxsLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIHRocm93U2NvcGUgb25lcywgd2hl
cmUKKyAgICAgICAgdGhleSB0YWtlIHRoZSB2YWx1ZSBpbiBhbiBFeGNlcHRpb25Pcjw+LgorCisg
ICAgICAgIFRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEpTQ29udmVydGVy
IHNwZWNpYWxpemF0aW9ucywgYXZvaWRpbmcKKyAgICAgICAgdGhlIG5lZWQgZm9yIGVhY2ggb25l
IHRvIGltcGxlbWVudCB0aGVpciBjb252ZXJzaW9uIHVwIHRvIDMgdGltZXMgKG9uZSBmb3IganVz
dAorICAgICAgICB0aGUgdmFsdWUsIG9uZSBmb3IgdGhlIHZhbHVlIGFuZCB0aGUgRXhlY1N0YXRl
LCBhbmQgb25lIGZvciB0aGUgdmFsdWUsIHRoZSBFeGVjU3RhdGUKKyAgICAgICAgYW5kIHRoZSBn
bG9iYWwgb2JqZWN0KSwgZWFjaCBKU0NvbnZlcnRlciBpbnN0ZWFkIHNwZWNpZmllcyB3aGV0aGVy
IGl0J3MgY29udmVydGVyCisgICAgICAgIG5lZWRzIGFuIEV4ZWNTdGF0ZSBvciBnbG9iYWwgb2Jq
ZWN0IHZpYSBhIHN0YXRpYyBjb25zdGV4cHIuIFdlIHRoZW4gdXNlIHRoZSAKKyAgICAgICAgSlND
b252ZXJ0ZXJPdmVybG9hZGVyIHRlbXBsYXRlLCB0byBjYWxsIHRoZSBjb3JyZWN0IGZ1bmN0aW9u
LiBUaGlzIGNhbiBwcm9iYWJseSBiZQorICAgICAgICBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLCBi
eSBpbmZlcnJpbmcgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbmVlZGVkIHZpYSBTRklOQUUsIGJ1
dAorICAgICAgICB0aGlzIHNlZW1lZCBsaWtlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgZmlyc3Qg
Y3V0LgorCisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj46OmNv
bnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMQm9vbGVhbj46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExBbnk+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETEJ5dGU+Ojpjb252ZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETE9jdGV0Pjo6Y29udmVydCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExTaG9ydD46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NvbnZlcnRlcjxJRExMb25nTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+Pjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj46OmNvbnZlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+Pjo6Y29udmVydCk6
CisgICAgICAgIFRoZXJlIGlzIHNsaWdodGx5IG1vcmUgZHVwbGljYXRpb24gdGhhbiBJIHdvdWxk
IGhhdmUgbGlrZWQsIGZvciBpbnN0YW5jZSB3ZSBoYXZlIGEKKyAgICAgICAgc3BlY2lhbGl6YXRp
b24gZm9yIGVhY2ggbnVtZXJpYyB0eXBlLCBldmVuIHRob3VnaCB0aGV5IGFyZSBhbGwgdGhlIHNh
bWUsIGJ1dCB0aGF0IGlzCisgICAgICAgIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBpbXByb3ZlZCBn
b2luZyBmb3J3YXJkLgorCisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+Ojpjb252ZXJ0KQorICAgICAgICBGaXggdGhlIG5vcm1hbCBJRExVbmlvbiBjb252ZXJ0ZXIg
dG8gd29yayB3aXRoIGJvb2xlYW4gdHlwZXMuIFRoaXMgd2FzIGNhdWdodCBieSB0aGUKKyAgICAg
ICAgdGVzdCBjYXNlIEkgYWRkZWQgdmlhIFR5cGVDb252ZXJzaW9ucy5pZGwuCisgICAgICAgIAor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OnNldFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFUcmFuc2Zlcjo6dHlwZXMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU01lZGlhU3RyZWFtVHJhY2s6OmdldENhcGFiaWxpdGllcyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdMZW5ndGhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OnZhbHVl
KToKKyAgICAgICAgU3dpdGNoIHRvIHVzZSBuZXcgdG9KUzw+IGZ1bmN0aW9ucy4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoQWRkU3Ry
aW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCk6CisgICAgICAgIEZpeCBzdHJpbmdpZmllciBmdW5j
dGlvbiBzaWduYXR1cmUgdG8gY29udGFpbiBhbiBpZGxUeXBlLgorCisgICAgICAgIChHZW5lcmF0
ZUVudW1lcmF0aW9uc0hlYWRlckNvbnRlbnQpOgorICAgICAgICBSZW1vdmUgbm93IHVubmVjZXNz
YXJ5IEpTVmFsdWVUcmFpdHMgc3BlY2lhbGl6YXRpb25zLgorCisgICAgICAgIChKU1ZhbHVlVG9O
YXRpdmVJc0hhbmRsZWRCeURPTUNvbnZlcnQpOgorICAgICAgICBSZW5hbWVkIGZyb20gSXNIYW5k
bGVkQnlET01Db252ZXJ0LCBzaW5jZSB0aGF0IG5hbWUgaXMgbm93IGFtYmlndW91cy4KKworICAg
ICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZSBvZiBJ
c0hhbmRsZWRCeURPTUNvbnZlcnQuCisKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZUlzSGFuZGxl
ZEJ5RE9NQ29udmVydCk6CisgICAgICAgIFByZWRpY2F0ZSBndWFyZGluZyB3aGF0IHR5cGVzIGN1
cnJlbnRseSB3b3JrIHdpdGggdGhlIG5ldyBjb252ZXJzaW9uIHN5c3RlbS4KKworICAgICAgICAo
TmF0aXZlVG9KU1ZhbHVlRE9NQ29udmVydE5lZWRzU3RhdGUpOgorICAgICAgICBQcmVkaWNhdGUg
Zm9yIGRldGVybWluaW5nIGlmIHRoZSBFeGVjU3RhdGUgaXMgbmVlZGVkIGluIHRoZSBjb252ZXJz
aW9uIGZ1bmN0aW9uLgorCisgICAgICAgIChOYXRpdmVUb0pTVmFsdWVET01Db252ZXJ0TmVlZHNH
bG9iYWxPYmplY3QpOgorICAgICAgICBQcmVkaWNhdGUgZm9yIGRldGVybWluaW5nIGlmIHRoZSBn
bG9iYWwgb2JqZWN0IGlzIG5lZWRlZCBpbiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbi4KKworICAg
ICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgTW92ZSB0aGluZ3MgYXJvdW5kIGEgbGl0
dGxlIGJpdCBhbmQgc3RhcnQgY29udmVydGluZyB1c2UgdGhlIG5ldyB0b0pTPD4gd2hlbiBwb3Nz
aWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAg
ICAocGFyc2VBdHRyaWJ1dGVPck9wZXJhdGlvblJlc3QpOgorICAgICAgICBGaXggYSBtaXNzaW5n
IHBsYWNlIHdoZXJlIHdlcmUgbm90IHNldHRpbmcgdGhlIGlkbFR5cGUuCisgCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6CisgICAgICAgIFVwZGF0ZSB0ZXN0IHJl
c3VsdHMuCisKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6VHlwZUNvbnZlcnNpb25zOjp0ZXN0VW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6
VHlwZUNvbnZlcnNpb25zOjpzZXRUZXN0VW5pb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwZUNv
bnZlcnNpb25zOjp0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U2VxdWVuY2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBlQ29udmVyc2lvbnM6OnR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlV
bmlvblZhbHVlKToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5pZGw6CisgICAg
ICAgIEFkZCBhIHRlc3RVbmlvbiBhdHRyaWJ1dGUsIG5vdyB0aGF0IHdlIGNhbiByZXR1cm4gdW5p
b25zIHRvIEpTLgorCiAyMDE2LTEwLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dlYiBJRExdIFR3byB0eXBlcyBhcmUgZGlzdGluZ3Vpc2hhYmxlIGZvciBv
dmVybG9hZCByZXNvbHV0aW9uIGlmIGF0IG1vc3Qgb25lIG9mIHRoZSB0d28gaW5jbHVkZXMgYSBu
dWxsYWJsZSB0eXBlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b3Bvc2l0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xv
Y2F0aW9uL0dlb3Bvc2l0aW9uLmlkbAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDYgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgYW4gaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgdHlwZWRlZgorLy8gaHR0cHM6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jRE9NVGltZVN0YW1wCit0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBET01UaW1lU3RhbXA7CisKIFsKICAgICBOb0ludGVyZmFjZU9iamVjdCwKICAgICBD
b25kaXRpb25hbD1HRU9MT0NBVElPTiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDIwNzcyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNiBAQAogICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUKIF0gaW50ZXJmYWNlIFNRTFJlc3VsdFNldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNR
TFJlc3VsdFNldFJvd0xpc3Qgcm93czsKLSAgICBbR2V0dGVyTWF5VGhyb3dFeGNlcHRpb25dIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIGluc2VydElkOworICAgIFtHZXR0ZXJNYXlUaHJvd0V4Y2Vw
dGlvbl0gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbG9uZyBpbnNlcnRJZDsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgbG9uZyByb3dzQWZmZWN0ZWQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMs
OCArMjIzLDYgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoSgogU3Ry
aW5nIHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvTnVsbGFibGVKU051bWJlcihPcHRpb25hbDxUPik7
IC8vIG51bGwgaWYgdGhlIG9wdGlvbmFsIGlzIG51bGwKLQogaW50MzJfdCBmaW5pdGVJbnQzMlZh
bHVlKEpTQzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKIAogLy8gVGhl
IGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRo
ZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KQEAgLTI4MywxMCArMjgxLDYgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdAogCiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
RW5kKEpTQzo6RXhlY1N0YXRlJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gSlNDOjpKU1ZhbHVlIGpzQXJyYXko
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4qKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gSlNDOjpKU1ZhbHVlIGpzRnJvemVuQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mKTsKLQogSlNDOjpKU1Zh
bHVlIGpzUGFpcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3RUeXBlLCB0eXBlbmFt
ZSBTZWNvbmRUeXBlPiBKU0M6OkpTVmFsdWUganNQYWlyKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBGaXJzdFR5cGUmLCBjb25zdCBTZWNvbmRUeXBlJik7CiAKQEAg
LTMyOSw4ICszMjMsNiBAQCBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmco
CiAKIHRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM7Ci0KIAogZW51bSBjbGFzcyBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNz
ZXJ0IH07CiAKQEAgLTQxMywxNSArNDA1LDEwIEBAIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKIC8v
IEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwotSlND
OjpKU1ZhbHVlIHRvSlNCb29sZWFuKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8Ym9vbD4mJik7CiBKU0M6OkpTVmFsdWUgdG9KU0RhdGUoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjxkb3VibGU+JiYpOwogSlNDOjpKU1Zh
bHVlIHRvSlNOdWxsYWJsZURhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxPcHRpb25hbDxkb3VibGU+PiYmKTsKIEpTQzo6SlNWYWx1ZSB0b0pTTnVsbGFi
bGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxT
dHJpbmc+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpK
U1ZhbHVlIHRvSlNOdW1iZXIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxUPiYmIHZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTTnVsbGFibGVOdW1iZXIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxUPiYmIHZhbHVlKTsKLUpTQzo6SlNWYWx1ZSB0b0pTU3RyaW5nKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8U3RyaW5nPiYmKTsKIAogLy8gSW5s
aW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCiAKQEAgLTcyMSw3MSArNzA4
LDYgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOgogICAgIHJldHVy
biBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwg
dHJ1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzIHsK
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxTdHJp
bmc+IHsKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8ZG91YmxlPiB7Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IGRvdWJsZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNW
YWx1ZVRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBmbG9hdCYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czx1bnNpZ25lZCBsb25nPiB7Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IHVuc2lnbmVkIGxvbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLXsKLSAgICBKU0M6Ok1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAg
ICBsaXN0LmFwcGVuZChKU1ZhbHVlVHJhaXRzPFQ+OjphcnJheUpTVmFsdWUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywg
bnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4qIHZlY3RvcikKLXsKLSAgICBpZiAoIXZlY3RvcikKLSAg
ICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBnbG9i
YWxPYmplY3QsIDApOwotICAgIHJldHVybiBqc0FycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgKnZl
Y3Rvcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4g
SlNDOjpKU1ZhbHVlIGpzRnJvemVuQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKSB7Ci0g
ICAgICAgIGxpc3QuYXBwZW5kKEpTVmFsdWVUcmFpdHM8VD46OmFycmF5SlNWYWx1ZShleGVjLCBn
bG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3Ry
dWN0QXJyYXkoZXhlYywgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXJyYXkpOwotfQotCiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzUGFpcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZTEsIEpTQzo6SlNWYWx1ZSB2YWx1ZTIpCiB7CiAg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtODE3LDQ2ICs3MzksNiBAQCBp
bmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyCiBpbmxpbmUgUmVmUHRyPEpT
Qzo6RmxvYXQzMkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odmFsdWUpOyB9
CiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRBcnJheShKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0
QWRhcHRvcj4odmFsdWUpOyB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRz
PFN0cmluZz4gewotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIFN0cmluZyYgaW5kZXhlZFZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgaW5kZXhlZFZhbHVlID0ganNW
YWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9u
KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5z
aWduZWQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCB1bnNpZ25lZCYgaW5kZXhlZFZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgaW5kZXhlZFZhbHVlID0ganNW
YWx1ZS50b1VJbnQzMigmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+
IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b0Zs
b2F0KCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+IHsKLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlLCBkb3VibGUmIGluZGV4ZWRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gZXhlYy52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9OdW1iZXIoJmV4
ZWMpOwotICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwotICAgIH0KLX07Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVD4gaW5saW5lIFZlY3RvcjxSZWY8VD4+IHRv
UmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwpAQCAtODk3LDExICs3NzksNiBAQCB0
ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0CiAgICAgcmV0dXJuIEpTQzo6
SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgp
LCBuYXRpdmVGdW5jdGlvbikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvTnVsbGFibGVKU051bWJlcihPcHRpb25hbDxUPiBvcHRpb25hbE51bWJlcikK
LXsKLSAgICByZXR1cm4gb3B0aW9uYWxOdW1iZXIgPyBKU0M6OmpzTnVtYmVyKG9wdGlvbmFsTnVt
YmVyLnZhbHVlKCkpIDogSlNDOjpqc051bGwoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQogewogICAgIGlmICh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKQpAQCAtOTMxLDI0ICs4MDgsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlCiAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0FycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAg
IH0KLSAgICByZXR1cm4ganNBcnJheSgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTQm9vbGVhbihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uT3I8Ym9vbD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0K
LQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQog
ewogICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKQEAgLTk2NywyMiAr
ODI2LDQgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTnVsbGFibGVTdHJpbmcoSgogICAgIHJl
dHVybiBqc1N0cmluZ09yTnVsbCgmc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTnVtYmVy
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8U3RyaW5nPiYmIHZhbHVlKQot
ewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0LmgJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBs
ZW1lbnRhdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA9IFQ+IHVzaW5nIEVuYWJsZUlmSW50ZWdyYWxU
eXBlID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNJRExJbnRlZ2VyPFQ+Ojp2YWx1ZSwgdHlw
ZW5hbWUgQ29udmVydGVyPFU+OjpSZXR1cm5UeXBlPjo6dHlwZTsKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUgPSBUPiB1c2luZyBFbmFibGVJZk5vdEludGVncmFsVHlwZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFJc0lETEludGVnZXI8VD46OnZhbHVlLCB0eXBlbmFtZSBDb252
ZXJ0ZXI8VT46OlJldHVyblR5cGU+Ojp0eXBlOwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmFi
bGVJZk5vdEludGVncmFsVHlwZTxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLQotLy8gU3BlY2lhbGl6YXRpb24gZm9yIGludGVnZXIgdHlwZXMsIGFsbG93aW5nIHBh
c3Npbmcgb2YgYSBjb252ZXJzaW9uIGZsYWcuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmFibGVJ
ZkludGVncmFsVHlwZTxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gPSBOb3JtYWxDb252ZXJzaW9uKTsKIAogLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNp
b24uCkBAIC00OSw4ICs0Nyw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBh
cnNlRW4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKIAotLy8gVGhpcyBpcyB3aGVyZSB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIHRoaW5ncyBkZWNsYXJlZCBhYm92ZSBiZWdpbnM6Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZk5vdEludGVncmFsVHlwZTxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKQEAgLTYxLDExICs1Nyw5NSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRW5hYmxlSWZJbnRlCiAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworLy8gQ29udmVy
c2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0
aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlciA6IERlZmF1bHRDb252ZXJ0ZXI8VD4gewordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUp
Cit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4o
c3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VM
WSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0
YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKIH07CiAKIC8vIE1BUks6IC0KQEAgLTk0LDYgKzE3
NCwzNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElECiAgICAgfQog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxl
PFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0OworCisgICAgLy8gRklYTUU6IFRoZXNlIG9ubHkgd29yayBpZiBJbXBsZW1lbnRhdGlv
blR5cGUgaXMgYW4gT3B0aW9uYWwuIFdlIHNob3VsZCBnZW5lcmFsaXplCisgICAgLy8gdGhpcyBz
byBpdCBjYW4gd29yayBmb3IgdHlwZXMgdGhhdCBkb24ndCB1c2UgT3B0aW9uYWwgdG8gcmVwcmVz
ZW50IG51bGxuZXNzLCBsaWtlCisgICAgLy8gU3RyaW5nIGFuZCBpbnRlcmZhY2UgdHlwZXMuCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydCh2YWx1
ZS52YWx1ZSgpKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZS52YWx1
ZSgpKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVt
ZW50YXRpb25UeXBlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK307
CisKIC8vIE1BUks6IC0KIC8vIE1BUks6IEJvb2xlYW4gdHlwZQogCkBAIC0xMDQsNiArMjEzLDE2
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiAKICAgICB9CiB9Owog
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29s
ZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCiAvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgogdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+
IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CkBAIC0xMzQs
NiArMjUzLDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SUQKICAg
ICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmZXhlYywgJmdsb2Jh
bE9iamVjdCwgV1RGOjpnZXRQdHIodmFsdWUpKTsKKyAgICB9Cit9OworCiAvLyBUeXBlZCBhcnJh
eXMgc3VwcG9ydC4KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IElETEludGVy
ZmFjZTxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gOiBJRExUeXBlPFJlZjxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4+IHsKQEAgLTE2NSw2ICsyOTUsMTYg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZQogICAgIH0KIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9Cit9OworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCiAK
QEAgLTE4Myw2ICszMjMsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+
IDogRAogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CiAgICAg
c3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBO
b3JtYWxDb252ZXJzaW9uKQogICAgIHsKQEAgLTE5OCw2ICszNTAsMTggQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IAogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKICAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IE5vcm1hbENvbnZlcnNpb24pCiAgICAgewpAQCAtMjEz
LDYgKzM3NywxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogCiAg
ICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hv
cnQ+IHsKICAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBOb3JtYWxDb252ZXJzaW9uKQogICAgIHsKQEAgLTIyOCw2ICs0MDQsMTggQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkUwogICAgIH0KIH07CiAKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewogICAgIHN0YXRp
YyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gTm9ybWFs
Q29udmVyc2lvbikKICAgICB7CkBAIC0yNDMsNiArNDMxLDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nPiA6IEQKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CiAgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gTm9ybWFsQ29udmVyc2lvbikKICAgICB7
CkBAIC0yNTgsNiArNDU4LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNp
Z25lZEwKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwog
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTG9uZ0xvbmc+IHsKICAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IE5vcm1hbENvbnZlcnNpb24pCiAgICAgewpAQCAtMjc2LDYg
KzQ4OCwxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+CiAgICAg
fQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKICAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBOb3JtYWxDb252ZXJzaW9uKQogICAgIHsKQEAgLTI5NCw2ICs1
MTgsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTAogICAgIH0K
IH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIC8vIE1B
Uks6IC0KIC8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCiAKQEAgLTMwOSw2ICs1NDUsMTgg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IAogICAgIH0KIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKICAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0zMTYsNiArNTY0LDE4IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWMKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKICAgICBzdGF0aWMg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CiAgICAgewpAQCAtMzI4LDYgKzU4OCwxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRG91YmxlPiA6CiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKIHRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKICAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewpAQCAt
MzM1LDYgKzYwNywyNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
CiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
KworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCiAvLyBNQVJLOiAtCiAv
LyBNQVJLOiBTdHJpbmcgdHlwZXMKIApAQCAtMzQ1LDYgKzYzNSwxNiBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nCiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
IHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVU1ZTdHJpbmc+IHsKICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMzUyLDYgKzY1Miwx
NiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nCiAgICAgfQogfTsK
IAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKIC8vIE1BUks6IC0KIC8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMK
IApAQCAtNDA2LDYgKzcxNiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElECiAgICAgfQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAg
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpBcnJheUNv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKIApAQCAtNDE1LDYgKzczOSwyMSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElECiAgICAgfQogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQor
fTsKKwogLy8gTUFSSzogLQogLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCiAKQEAgLTQzNyw2ICs3
NzYsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRAogICAgIH0K
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMs
IHZhbHVlKTsKKyAgICB9Cit9OwogCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBVbmlvbiB0eXBlCkBA
IC00ODAsOSArODI4LDcgQEAgbmFtZXNwYWNlIERldGFpbCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0LCBib29sIGNvbmRpdGlvbj4KIHVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBE
ZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4KLXN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4KLXsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gewogICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKICAgICB1c2lu
ZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwogICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CkBAIC01NDgsMTQgKzg5NCwx
NiBAQCBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1CiAgICAgICAgICAg
ICAgICAgaWYgKHJldHVyblZhbHVlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0g
dHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6
OnR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SW1wbGVtZW50YXRpb25UeXBlPjo6V3Jh
cHBlckNsYXNzOworICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAg
ICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5
cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKIAog
ICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSBSZXR1cm5UeXBlKGNhc3RlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5W
YWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CiAgICAg
ICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAtNjE4LDcgKzk2
Niw3IEBAIHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXUKICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0
ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKICAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgYm9vbCwgaGFzQm9vbGVhblR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDE0LiBJZiBWIGlz
IGEgTnVtYmVyIHZhbHVlLCB0aGVuOgpAQCAtNjQwLDcgKzk4OCw3IEBAIHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXUKIAogICAgICAgICAvLyAxNy4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byBib29sZWFuLgogICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBib29sLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwogCiAgICAgICAg
IC8vIDE4LiBUaHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CkBAIC02NDgsNiArOTk2LDM0IEBAIHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IDogRGVmYXUKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5p
b248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsK
KyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJk
aWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlw
ZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7
CisKKyAgICAgICAgT3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAg
YnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAg
ICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUo
dHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKwogLy8gTUFSSzogLQogLy8gTUFSSzog
U3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZp
c2lvbiAyMDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01h
cEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTWFwLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgpAQCAtNDMsNyArNDQsNyBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpnZXRPd25Q
cm9wZXJ0eVNsb3RECiAgICAgYm9vbCBuYW1lSXNWYWxpZDsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGl0ZW0gPSB3cmFwcGVkKCkuaXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBuYW1lSXNWYWxpZCk7CiAgICAgaWYgKG5hbWVJc1ZhbGlkKSB7Ci0gICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpcywgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGl0ZW0pKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdG9KUzxJRExET01TdHJpbmc+KCpleGVj
LCBpdGVtKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Niw3ICs1NTYsNyBAQCBK
U1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBq
c051bWJlcigwKTsKIAogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIo
JnN0YXRlKTsKLSAgICByZXR1cm4gdG9KU051bWJlcihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5z
ZXRUaW1lb3V0KFdURk1vdmUoYWN0aW9uKSwgZGVsYXkpKTsKKyAgICByZXR1cm4gdG9KUzxJRExM
b25nPihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5zZXRUaW1lb3V0KFdURk1vdmUoYWN0aW9uKSwg
ZGVsYXkpKTsKIH0KIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRl
JiBzdGF0ZSkKQEAgLTU3NCw3ICs1NzQsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRJbnRl
cnZhbChFeGVjU3RhCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAogICAgIGludCBkZWxh
eSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9KU051
bWJlcihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5zZXRJbnRlcnZhbChXVEZNb3ZlKGFjdGlvbiks
IGRlbGF5KSk7CisgICAgcmV0dXJuIHRvSlM8SURMTG9uZz4oc3RhdGUsIHNjb3BlLCB3cmFwcGVk
KCkuc2V0SW50ZXJ2YWwoV1RGTW92ZShhY3Rpb24pLCBkZWxheSkpOwogfQogCiBET01XaW5kb3cq
IEpTRE9NV2luZG93Ojp0b1dyYXBwZWQoSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVy
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkpTRGF0YVRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIEpTRGF0
YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxT
dHJpbmc+IHR5cGVzID0gd3JhcHBlZCgpLnR5cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzLmlzRW1w
dHkoKSA/IGpzTnVsbCgpIDoganNBcnJheSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCB0eXBlcyk7
CisgICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDogdG9KUzxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+PihzdGF0ZSwgKmdsb2JhbE9iamVjdCgpLCB0eXBlcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbVRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA3NzI1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbVRyYWNrQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTQzo6SlNWYWx1ZSBKU01l
ZGlhU3RyZWFtVHJhY2s6OmdldENhcGEKICAgICAgICAgICAgICAgICBmYWNpbmdNb2Rlcy5hcHBl
bmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNpbmdNb2RlKG1vZGUpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiZmFjaW5nTW9kZSIpLCBqc0FycmF5KCZzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGZhY2luZ01vZGVzKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJmYWNpbmdNb2RlIiksIHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4oc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgZmFjaW5nTW9kZXMpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KICAgICBpZiAoY2FwYWJpbGl0aWVzLT5zdXBw
b3J0c1ZvbHVtZSgpKQogICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInZvbHVtZSIpLCBjYXBhYmlsaXR5VmFsdWUoY2Fw
YWJpbGl0aWVzLT52b2x1bWUoKSwgc3RhdGUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwpAQCAt
MTUwLDEyICsxNTAsMTIgQEAgSlNDOjpKU1ZhbHVlIEpTTWVkaWFTdHJlYW1UcmFjazo6Z2V0Q2Fw
YQogICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInNhbXBsZVNpemUiKSwgY2FwYWJpbGl0eVZhbHVlKGNhcGFiaWxpdGll
cy0+c2FtcGxlU2l6ZSgpLCBzdGF0ZSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgaWYg
KGNhcGFiaWxpdGllcy0+c3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKCkpIHsKICAgICAgICAgVmVj
dG9yPFN0cmluZz4gY2FuY2VsbGF0aW9uOwotICAgICAgICBjYW5jZWxsYXRpb24ucmVzZXJ2ZUNh
cGFjaXR5KDIpOworICAgICAgICBjYW5jZWxsYXRpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgy
KTsKIAotICAgICAgICBjYW5jZWxsYXRpb24uYXBwZW5kKCJ0cnVlIik7Ci0gICAgICAgIGNhbmNl
bGxhdGlvbi5hcHBlbmQoY2FwYWJpbGl0aWVzLT5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0gUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZFdyaXRlID8g
InRydWUiIDogImZhbHNlIik7CisgICAgICAgIGNhbmNlbGxhdGlvbi51bmNoZWNrZWRBcHBlbmQo
InRydWUiKTsKKyAgICAgICAgY2FuY2VsbGF0aW9uLnVuY2hlY2tlZEFwcGVuZChjYXBhYmlsaXRp
ZXMtPmVjaG9DYW5jZWxsYXRpb24oKSA9PSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
OjpFY2hvQ2FuY2VsbGF0aW9uOjpSZWFkV3JpdGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIAotICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImVjaG9DYW5jZWxsYXRpb24iKSwganNBcnJheSgmc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBjYW5jZWxsYXRpb24pLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImVjaG9DYW5jZWxsYXRpb24iKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+PihzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBjYW5jZWxsYXRpb24p
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KICAgICBpZiAoY2FwYWJpbGl0aWVzLT5z
dXBwb3J0c0RldmljZUlkKCkpCiAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGV2aWNlSWQiKSwganNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCBjYXBhYmlsaXRpZXMtPmRldmljZUlkKCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0
aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAyMDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4
Miw3IEBAIHZvaWQgSlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKGNvbnN0IFZlY3QKICAgICBKU1Zh
bHVlIGpzT2JzZXJ2ZXIgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JzZXJ2ZXIpOwogCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc0FycmF5KGV4
ZWMsIGdsb2JhbE9iamVjdCwgbXV0YXRpb25zKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExT
ZXF1ZW5jZTxJRExJbnRlcmZhY2U8TXV0YXRpb25SZWNvcmQ+Pj4oKmV4ZWMsICpnbG9iYWxPYmpl
Y3QsIG11dGF0aW9ucykpOwogICAgIGFyZ3MuYXBwZW5kKGpzT2JzZXJ2ZXIpOwogCiAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5j
bHVkZSAiSlNTVkdMZW5ndGguaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRl
ICJTVkdBbmltYXRlZFByb3BlcnR5LmgiCiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgpAQCAtMzYsNyArMzYsNyBAQCBKU1ZhbHVlIEpTU1ZH
TGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUmIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIHRv
SlNOdW1iZXIoc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkucHJvcGVydHlSZWZlcmVuY2UoKS52YWx1
ZUZvckJpbmRpbmdzKFNWR0xlbmd0aENvbnRleHQgeyB3cmFwcGVkKCkuY29udGV4dEVsZW1lbnQo
KSB9KSk7CisgICAgcmV0dXJuIHRvSlM8SURMVW5yZXN0cmljdGVkRmxvYXQ+KHN0YXRlLCBzY29w
ZSwgd3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCkudmFsdWVGb3JCaW5kaW5ncyhTVkdMZW5n
dGhDb250ZXh0IHsgd3JhcHBlZCgpLmNvbnRleHRFbGVtZW50KCkgfSkpOwogfQogCiB2b2lkIEpT
U1ZHTGVuZ3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDE0IEBA
IHN1YiBBZGRTdHJpbmdpZmllck9wZXJhdGlvbklmTmVlZGVkCiAgICAgICAgICRzdHJpbmdpZmll
ci0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
CiAgICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0dXJlLT5uYW1lKCJ0b1N0cmluZyIpOwogICAg
ICAgICBkaWUgInN0cmluZ2lmaWVyIGNhbiBvbmx5IGJlIHVzZWQgb24gYXR0cmlidXRlcyBvZiBT
dHJpbmcgdHlwZXMiIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0dXJlLT50
eXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICAjIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2UgSURMUGFyc2VyJ3MgY2xvbmVUeXBlLgorICAgICAgICBteSAk
dHlwZSA9IGRvbVR5cGUtPm5ldygpOworICAgICAgICAkdHlwZS0+bmFtZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUpOworCisgICAgICAgICRzdHJpbmdpZmllci0+c2lnbmF0dXJlLT5pZGxU
eXBlKCR0eXBlKTsKKyAgICAgICAgJHN0cmluZ2lmaWVyLT5zaWduYXR1cmUtPnR5cGUoJHR5cGUt
Pm5hbWUpOworCiAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9LCAkc3RyaW5n
aWZpZXIpOwogICAgICAgICBsYXN0OwogICAgIH0KQEAgLTg3Nyw5ICs4ODQsOCBAQCBzdWIgR2Vu
ZXJhdGVFbnVtZXJhdGlvbnNJbXBsZW1lbnRhdGlvbkNvCiAgICAgICAgIG15ICRjb25kaXRpb25h
bFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRlbnVt
ZXJhdGlvbik7CiAgICAgICAgICRyZXN1bHQgLj0gIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxu
XG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgICAgICAjIFRha2UgYW4gRXhlY1N0YXRl
KiBpbnN0ZWFkIG9mIGFuIEV4ZWNTdGF0ZSYgdG8gbWF0Y2ggdGhlIGpzU3RyaW5nV2l0aENhY2hl
IGZyb20gSlNTdHJpbmcuaC4KICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGlu
c3RlYWQgb2YgRXhlY1N0YXRlKi4KLSAgICAgICAgJHJlc3VsdCAuPSAiSlNTdHJpbmcqIGpzU3Ry
aW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1
ZSlcbiI7CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gSlNTdHJpbmcqIGNvbnZlcnRF
bnVtZXJhdGlvblRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgJGNsYXNzTmFtZSBlbnVtZXJhdGlvblZh
bHVlKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsKICAgICAgICAgIyBGSVhNRTogTWln
aHQgYmUgbmljZSB0byBtYWtlIHRoaXMgZ2xvYmFsIGJlICJjb25zdCIsIGJ1dCBOZXZlckRlc3Ry
b3llZCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGF0LgogICAgICAgICAjIEZJWE1FOiBN
aWdodCBiZSBuaWNlIHRvIG1ha2UgdGhlIGVudGlyZSBhcnJheSBiZSBOZXZlckRlc3Ryb3llZCBp
bnN0ZWFkIG9mIGVhY2ggdmFsdWUsIGJ1dCBub3Qgc3VyZSB3aGF0IHRoZSBzeW50YXggZm9yIHRo
YXQgaXMuCkBAIC04OTksNyArOTA1LDcgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25zSW1wbGVt
ZW50YXRpb25DbwogICAgICAgICAgICAgJGluZGV4Kys7CiAgICAgICAgIH0KICAgICAgICAgJHJl
c3VsdCAuPSAiICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUp
IDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTtcbiI7Ci0gICAgICAgICRyZXN1bHQgLj0gIiAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAgcmV0
dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4o
ZW51bWVyYXRpb25WYWx1ZSldKTtcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gIn1cblxuIjsKIAog
ICAgICAgICAjIEZJWE1FOiBDaGFuZ2UgdG8gdGFrZSBWTSYgaW5zdGVhZCBvZiBFeGVjU3RhdGUm
LgpAQCAtOTY2LDExICs5NzIsNyBAQCBzdWIgR2VuZXJhdGVFbnVtZXJhdGlvbnNIZWFkZXJDb250
ZW50CiAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRlbnVtZXJhdGlvbik7CiAgICAgICAgICRyZXN1bHQgLj0g
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAot
ICAgICAgICAkcmVzdWx0IC49ICJKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6
OkV4ZWNTdGF0ZSosICRjbGFzc05hbWUpO1xuXG4iOwotCi0gICAgICAgICRyZXN1bHQgLj0gInRl
bXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8JGNsYXNzTmFtZT4ge1xuIjsKLSAgICAgICAg
JHJlc3VsdCAuPSAiICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosICRjbGFzc05hbWUgdmFsdWUpIHsg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH1cbiI7Ci0gICAgICAgICRy
ZXN1bHQgLj0gIn07XG5cbiI7CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gSlNDOjpK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsICRjbGFzc05h
bWUpO1xuXG4iOwogCiAgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gT3B0aW9uYWw8JGNs
YXNzTmFtZT4gcGFyc2VFbnVtZXJhdGlvbjwkY2xhc3NOYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICRjbGFzc05h
bWUgY29udmVydEVudW1lcmF0aW9uPCRjbGFzc05hbWU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTtcbiI7CkBAIC00OTMyLDcgKzQ5MzQsNiBAQCBzdWIgR2V0TmF0aXZlVHlwZUZyb21T
aWduYXR1cmUKIG15ICVuYXRpdmVUeXBlID0gKAogICAgICJET01TdHJpbmciID0+ICJTdHJpbmci
LAogICAgICJVU1ZTdHJpbmciID0+ICJTdHJpbmciLAotICAgICJET01UaW1lU3RhbXAiID0+ICJE
T01UaW1lU3RhbXAiLAogICAgICJEYXRlIiA9PiAiZG91YmxlIiwKICAgICAiRGljdGlvbmFyeSIg
PT4gIkRpY3Rpb25hcnkiLAogICAgICJFdmVudExpc3RlbmVyIiA9PiAiUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IiwKQEAgLTUxNjIsNyArNTE2Myw3IEBAIHN1YiBHZXRJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24KICAgICByZXR1cm4gIk5vcm1hbENvbnZlcnNpb24iOwogfQogCi1zdWIgSXNI
YW5kbGVkQnlET01Db252ZXJ0CitzdWIgSlNWYWx1ZVRvTmF0aXZlSXNIYW5kbGVkQnlET01Db252
ZXJ0CiB7CiAgICAgbXkgJGlkbFR5cGUgPSBzaGlmdDsKIApAQCAtNTE5MSw3ICs1MTkyLDcgQEAg
c3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICRzdGF0ZVJlZmVyZW5jZSA9ICIqc3RhdGUiIHVubGVz
cyAkc3RhdGVSZWZlcmVuY2U7CiAgICAgJHRoaXNPYmplY3RSZWZlcmVuY2UgPSAiKmNhc3RlZFRo
aXMiIHVubGVzcyAkdGhpc09iamVjdFJlZmVyZW5jZTsKIAotICAgIGlmIChJc0hhbmRsZWRCeURP
TUNvbnZlcnQoJGlkbFR5cGUpKSB7CisgICAgaWYgKEpTVmFsdWVUb05hdGl2ZUlzSGFuZGxlZEJ5
RE9NQ29udmVydCgkaWRsVHlwZSkpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9N
Q29udmVydC5oIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlwZSgkaWRsVHlw
ZSwgJGNvbmRpdGlvbmFsKTsKIApAQCAtNTI0NSw2ICs1MjQ2LDQ4IEBAIHN1YiBKU1ZhbHVlVG9O
YXRpdmUKICAgICByZXR1cm4gKCJKUyR7dHlwZX06OnRvV3JhcHBlZCgkdmFsdWUpIiwgMCk7CiB9
CiAKK3N1YiBOYXRpdmVUb0pTVmFsdWVJc0hhbmRsZWRCeURPTUNvbnZlcnQKK3sKKyAgICBteSAo
JGlkbFR5cGUpID0gQF87CisKKyAgICByZXR1cm4gMCBpZiAkaWRsVHlwZS0+aXNOdWxsYWJsZSAm
JiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkaWRsVHlwZS0+bmFtZSkgfHwgJGNvZGVH
ZW5lcmF0b3ItPklzRW51bVR5cGUoJGlkbFR5cGUtPm5hbWUpKTsKKyAgICAKKyAgICByZXR1cm4g
MSBpZiAkaWRsVHlwZS0+bmFtZSBlcSAiYW55IjsKKyAgICByZXR1cm4gMSBpZiAkaWRsVHlwZS0+
bmFtZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPklzSW50
ZWdlclR5cGUoJGlkbFR5cGUtPm5hbWUpOworICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc0Zsb2F0aW5nUG9pbnRUeXBlKCRpZGxUeXBlLT5uYW1lKTsKKyAgICByZXR1cm4gMSBpZiAk
Y29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRpZGxUeXBlLT5uYW1lKTsKKyAgICByZXR1cm4g
MSBpZiAkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkaWRsVHlwZS0+bmFtZSk7CisgICAgcmV0
dXJuIDEgaWYgJGlkbFR5cGUtPmlzVW5pb247CisgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0
b3ItPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkaWRsVHlwZS0+bmFtZSk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworc3ViIE5hdGl2ZVRvSlNWYWx1ZURPTUNvbnZlcnROZWVkc1N0YXRlCit7
CisgICAgbXkgKCRpZGxUeXBlKSA9IEBfOworICAgIAorICAgICMgRklYTUU6IFRoaXMgc2hvdWxk
IGFjdHVhbGx5IGNoZWNrIGlmIGFsbCB0aGUgc3ViLW9iamVjdHMgb2YgdGhlIHVuaW9uIG5lZWQg
dGhlIHN0YXRlLgorICAgIHJldHVybiAxIGlmICRpZGxUeXBlLT5pc1VuaW9uOworICAgIHJldHVy
biAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJGlkbFR5
cGUtPm5hbWUpOworICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUo
JGlkbFR5cGUtPm5hbWUpOworICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0VudW1U
eXBlKCRpZGxUeXBlLT5uYW1lKTsKKworICAgIHJldHVybiAwOworfQorCitzdWIgTmF0aXZlVG9K
U1ZhbHVlRE9NQ29udmVydE5lZWRzR2xvYmFsT2JqZWN0Cit7CisgICAgbXkgKCRpZGxUeXBlKSA9
IEBfOworICAgIAorICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGFjdHVhbGx5IGNoZWNrIGlmIGFs
bCB0aGUgc3ViLW9iamVjdHMgb2YgdGhlIHVuaW9uIG5lZWQgdGhlIGdsb2JhbCBvYmplY3QuCisg
ICAgcmV0dXJuIDEgaWYgJGlkbFR5cGUtPmlzVW5pb247CisgICAgcmV0dXJuIDEgaWYgJGNvZGVH
ZW5lcmF0b3ItPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkaWRsVHlwZS0+bmFtZSk7CisK
KyAgICByZXR1cm4gMDsKK30KKwogc3ViIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUmVmZXJlbmNlcwog
ewogICAgIG15ICgkc2lnbmF0dXJlLCAkaW5GdW5jdGlvbkNhbGwsICRpbnRlcmZhY2UsICR2YWx1
ZSwgJHRoaXNWYWx1ZSkgPSBAXzsKQEAgLTUyNzQsNTkgKzUzMTcsNTAgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogCiAgICAgbXkgJGNvbmRpdGlvbmFsID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q29uZGl0aW9uYWx9OwogICAgIG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsK
KyAgICBteSAkaWRsVHlwZSA9ICRzaWduYXR1cmUtPmlkbFR5cGU7CiAgICAgbXkgJGlzTnVsbGFi
bGUgPSAkc2lnbmF0dXJlLT5pc051bGxhYmxlOwogICAgIG15ICRtYXlUaHJvd0V4Y2VwdGlvbiA9
ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0dldHRlck1heVRocm93RXhjZXB0aW9u
fSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4Y2VwdGlvbn07
CiAKLSAgICByZXR1cm4gInRvSlNCb29sZWFuKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwg
JHZhbHVlKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iICYmICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAg
ICByZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAg
IyBXZSBjb3VsZCBpbnN0ZWFkIG92ZXJsb2FkIGEgZnVuY3Rpb24gdG8gd29yayB3aXRoIG9wdGlv
bmFsIGFzIHdlbGwgYXMgbm9uLW9wdGlvbmFsIG51bWJlcnMsIGJ1dCB0aGlzCisgICAgIyBpcyBz
bGlnaHRseSBiZXR0ZXIgYmVjYXVzZSBpdCBndWFyYW50ZWVzIHdlIHdpbGwgZmFpbCB0byBjb21w
aWxlIGlmIHRoZSBJREwgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBDKysuCisgICAgaWYgKCRzaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlZmxlY3R9IGFuZCAoJHR5cGUgZXEgInVuc2ln
bmVkIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpKSB7CisgICAgICAgICR2YWx1
ZSA9fiBzL2dldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUvZ2V0SW50ZWdyYWxBdHRyaWJ1dGUv
ZzsKKyAgICAgICAgJHZhbHVlID0gInN0ZDo6bWF4KDAsICR2YWx1ZSkiOworICAgIH0KKworICAg
IGlmICgkdHlwZSBlcSAiYW55IikgeworICAgICAgICBteSAkcmV0dXJuVHlwZSA9ICRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGF0aW9uUmV0dXJuVHlwZX07CisgICAg
ICAgIGlmIChkZWZpbmVkICRyZXR1cm5UeXBlIGFuZCAoJHJldHVyblR5cGUgZXEgIklEQktleVBh
dGgiIG9yICRyZXR1cm5UeXBlIGVxICJJREJLZXkiKSkgeworICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAg
ICAgICByZXR1cm4gInRvSlMoJHN0YXRlUmVmZXJlbmNlLCAqJGdsb2JhbE9iamVjdCwgJHZhbHVl
KSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoTmF0aXZlVG9KU1ZhbHVlSXNIYW5kbGVk
QnlET01Db252ZXJ0KCRpZGxUeXBlKSkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNE
T01Db252ZXJ0LmgiKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXNGb3JJRExUeXBlKCRpZGxU
eXBlLCAkY29uZGl0aW9uYWwpOworCisgICAgICAgIG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgk
aW50ZXJmYWNlLCAkaWRsVHlwZSk7CisKKyAgICAgICAgbXkgQGNvbnZlcnNpb25Bcmd1bWVudHMg
PSAoKTsKKyAgICAgICAgcHVzaChAY29udmVyc2lvbkFyZ3VtZW50cywgIiRzdGF0ZVJlZmVyZW5j
ZSIpIGlmIE5hdGl2ZVRvSlNWYWx1ZURPTUNvbnZlcnROZWVkc1N0YXRlKCRpZGxUeXBlKSB8fCAk
bWF5VGhyb3dFeGNlcHRpb247CisgICAgICAgIHB1c2goQGNvbnZlcnNpb25Bcmd1bWVudHMsICIq
JGdsb2JhbE9iamVjdCIpIGlmIE5hdGl2ZVRvSlNWYWx1ZURPTUNvbnZlcnROZWVkc0dsb2JhbE9i
amVjdCgkaWRsVHlwZSk7CisgICAgICAgIHB1c2goQGNvbnZlcnNpb25Bcmd1bWVudHMsICJ0aHJv
d1Njb3BlIikgaWYgJG1heVRocm93RXhjZXB0aW9uOworICAgICAgICBwdXNoKEBjb252ZXJzaW9u
QXJndW1lbnRzLCAiJHZhbHVlIik7CisKKyAgICAgICAgcmV0dXJuICJ0b0pTPCRJRExUeXBlPigi
IC4gam9pbigiLCAiLCBAY29udmVyc2lvbkFyZ3VtZW50cykgLiAiKSI7CisgICAgfQorCiAgICAg
cmV0dXJuICJ0b0pTTnVsbGFibGVEYXRlKCRzdGF0ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZh
bHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiICYmICRpc051bGxhYmxlICYmICRtYXlUaHJvd0V4Y2Vw
dGlvbjsKICAgICByZXR1cm4gImpzRGF0ZU9yTnVsbCgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIiBp
ZiAkdHlwZSBlcSAiRGF0ZSIgJiYgJGlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJ0b0pTRGF0ZSgk
c3RhdGVSZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIiAm
JiAkbWF5VGhyb3dFeGNlcHRpb247CiAgICAgcmV0dXJuICJqc0RhdGUoJHN0YXRlUG9pbnRlciwg
JHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c051bWVyaWNUeXBlKCR0eXBlKSBvciAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIikgewotICAgICAg
ICAjIFdlIGNvdWxkIGluc3RlYWQgb3ZlcmxvYWQgYSBmdW5jdGlvbiB0byB3b3JrIHdpdGggb3B0
aW9uYWwgYXMgd2VsbCBhcyBub24tb3B0aW9uYWwgbnVtYmVycywgYnV0IHRoaXMKLSAgICAgICAg
IyBpcyBzbGlnaHRseSBiZXR0ZXIgYmVjYXVzZSBpdCBndWFyYW50ZWVzIHdlIHdpbGwgZmFpbCB0
byBjb21waWxlIGlmIHRoZSBJREwgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBDKysuCi0gICAgICAg
IGlmICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZWZsZWN0fSBhbmQgKCR0eXBl
IGVxICJ1bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiKSkgewotICAg
ICAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZS9nZXRJbnRl
Z3JhbEF0dHJpYnV0ZS9nOwotICAgICAgICAgICAgJHZhbHVlID0gInN0ZDo6bWF4KDAsICR2YWx1
ZSkiOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAidG9KU051bGxhYmxlTnVtYmVyKCRzdGF0
ZVJlZmVyZW5jZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJGlzTnVsbGFibGUgJiYgJG1heVRo
cm93RXhjZXB0aW9uOwotICAgICAgICByZXR1cm4gInRvTnVsbGFibGVKU051bWJlcigkdmFsdWUp
IiBpZiAkaXNOdWxsYWJsZTsKLSAgICAgICAgcmV0dXJuICJ0b0pTTnVtYmVyKCRzdGF0ZVJlZmVy
ZW5jZSwgdGhyb3dTY29wZSwgJHZhbHVlKSIgaWYgJG1heVRocm93RXhjZXB0aW9uOwotICAgICAg
ICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiOwotICAgIH0KLQotICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNFbnVtVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxy
dW50aW1lL0pTU3RyaW5nLmg+IiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJqc1N0
cmluZ1dpdGhDYWNoZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIjsKLSAgICB9Ci0KICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIlVSTC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICJ0b0pTTnVs
bGFibGVTdHJpbmcoJHN0YXRlUmVmZXJlbmNlLCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkaXNO
dWxsYWJsZSAmJiAkbWF5VGhyb3dFeGNlcHRpb247CiAgICAgICAgIHJldHVybiAianNTdHJpbmdP
ck51bGwoJHN0YXRlUG9pbnRlciwgJHZhbHVlKSIgaWYgJGlzTnVsbGFibGU7Ci0gICAgICAgIHJl
dHVybiAidG9KU1N0cmluZygkc3RhdGVSZWZlcmVuY2UsIHRocm93U2NvcGUsICR2YWx1ZSkiIGlm
ICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1l
L0pTU3RyaW5nLmg+IiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dp
dGhDYWNoZSgkc3RhdGVQb2ludGVyLCAkdmFsdWUpIjsKLSAgICB9Ci0KLSAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzU2VxdWVuY2VPckZyb3plbkFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAg
bXkgJGlubmVyVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTZXF1ZW5jZU9yRnJvemVuQXJyYXlJ
bm5lclR5cGUoJHR5cGUpOwotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMke2lubmVyVHlw
ZX0uaCIsICRjb25kaXRpb25hbCkgaWYgJGNvZGVHZW5lcmF0b3ItPklzUmVmUHRyVHlwZSgkaW5u
ZXJUeXBlKTsKLSAgICAgICAgbXkgJGlzU2VxdWVuY2UgPSAkY29kZUdlbmVyYXRvci0+SXNTZXF1
ZW5jZVR5cGUoJHR5cGUpOwotICAgICAgICByZXR1cm4gInRvSlNBcnJheSgkc3RhdGVSZWZlcmVu
Y2UsICokZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAkdmFsdWUpIiBpZiAkaXNTZXF1ZW5jZSAm
JiAkbWF5VGhyb3dFeGNlcHRpb247Ci0gICAgICAgIHJldHVybiAianNBcnJheSgkc3RhdGVQb2lu
dGVyLCAkZ2xvYmFsT2JqZWN0LCAkdmFsdWUpIiBpZiAkaXNTZXF1ZW5jZTsKLSAgICAgICAgcmV0
dXJuICJqc0Zyb3plbkFycmF5KCRzdGF0ZVBvaW50ZXIsICRnbG9iYWxPYmplY3QsICR2YWx1ZSki
OzsKLSAgICB9Ci0KLSAgICBpZiAoJHR5cGUgZXEgImFueSIpIHsKLSAgICAgICAgbXkgJHJldHVy
blR5cGUgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRhdGlvblJl
dHVyblR5cGV9OwotICAgICAgICBpZiAoZGVmaW5lZCAkcmV0dXJuVHlwZSBhbmQgKCRyZXR1cm5U
eXBlIGVxICJJREJLZXlQYXRoIiBvciAkcmV0dXJuVHlwZSBlcSAiSURCS2V5IikpIHsKLSAgICAg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJJREJCaW5kaW5nVXRpbGl0aWVzLmgiLCAkY29uZGl0
aW9uYWwpOwotICAgICAgICAgICAgcmV0dXJuICJ0b0pTKCRzdGF0ZVJlZmVyZW5jZSwgKiRnbG9i
YWxPYmplY3QsICR2YWx1ZSkiOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAkdmFsdWU7Cisg
ICAgICAgIGFzc2VydCgiVW5oYW5kbGVkIHN0cmluZyB0eXBlIik7CiAgICAgfQogCiAgICAgaWYg
KCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQkocmV2aXNpb24gMjA3NzI1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTEyODMsNiArMTI4Myw3IEBAIHN1YiBwYXJzZUF0dHJpYnV0ZU9yT3BlcmF0aW9uUmVz
dAogICAgICAgICBteSAkcmV0dXJuVHlwZSA9ICRzZWxmLT5wYXJzZVJldHVyblR5cGUoKTsKICAg
ICAgICAgbXkgJGludGVyZmFjZSA9ICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7CiAgICAgICAgIGlmIChkZWZpbmVkICgkaW50ZXJmYWNlKSkgeworICAg
ICAgICAgICAgJGludGVyZmFjZS0+c2lnbmF0dXJlLT5pZGxUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICAgICAgICAgICRpbnRlcmZhY2UtPnNpZ25hdHVyZS0+dHlwZSgkcmV0dXJuVHlwZS0+bmFtZSk7
CiAgICAgICAgICAgICAkaW50ZXJmYWNlLT5zaWduYXR1cmUtPmlzTnVsbGFibGUoJHJldHVyblR5
cGUtPmlzTnVsbGFibGUpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xNjQs
NyArMTY1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iagogICAg
IGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCB0
aGlzT2JqZWN0LndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0cigp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5leGNpdGluZ0F0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSAr
MjYsMTAgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oIgotI2luY2x1ZGUg
IlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTE1OCw3ICsxNTcs
NyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBCiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucygpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTc0LDcg
KzE3Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1IKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNB
dHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGlt
cGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNw
cAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMCArMjUsOSBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
VVJMLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwpAQCAtMTUwLDcgKzE0OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1MKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwudmFsdWUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwu
dmFsdWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjE3LDcgKzIxNiw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIGltcGwudmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLnZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAy
MDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTIgQEAKICNpbmNsdWRl
ICJKU1Rlc3RDYWxsYmFjay5oIgogCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgogI2lu
Y2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKQEAgLTE0Nyw3ICsxNDYsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhTZXJpYWxpCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3Mu
YXBwZW5kKHNyelBhcmFtID8gc3J6UGFyYW0tPmRlc2VyaWFsaXplKCpzdGF0ZSwgbV9kYXRhLT5n
bG9iYWxPYmplY3QoKSkgOiBqc051bGwoKSk7Ci0gICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIHN0ckFyZykpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHN0ckFyZykpOwogCiAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IHJldHVy
bmVkRXhjZXB0aW9uOwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFj
a0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCAiY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0iKSwgcmV0dXJuZWRFeGNl
cHRpb24pOwpAQCAtMTg3LDcgKzE4Niw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aEJvb2xlYW4KIAogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBh
cmdzLmFwcGVuZChqc0Jvb2xlYW4oYm9vbFBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJ
RExCb29sZWFuPihib29sUGFyYW0pKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBy
ZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhz
dGF0ZSwgImNhbGxiYWNrV2l0aEJvb2xlYW4iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwpAQCAtMjA3
LDcgKzIwNiw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAog
ICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc051
bWJlcihsb25nUGFyYW0pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETExvbmc+KGxvbmdQYXJh
bSkpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCks
IHRlc3ROb2RlUGFyYW0pKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5l
ZEV4Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0
LDEyIEBACiAKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgiCiAKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJKU1Rlc3ROb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMTMsNyArMTEyLDcgQEAgYm9vbCBKU1Rlc3RDYWxs
YmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdAogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKICAgICBhcmdzLmFwcGVuZChzcnpQYXJhbSA/IHNyelBhcmFtLT5kZXNlcmlhbGl6ZSgq
c3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkpIDoganNOdWxsKCkpOwotICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBzdHJBcmcpKTsKKyAgICBhcmdzLmFwcGVuZCh0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBzdHJBcmcpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6
RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTU1LDcgKzE1NCw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tX
aXQKIAogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVu
ZChqc0Jvb2xlYW4oYm9vbFBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExCb29sZWFu
Pihib29sUGFyYW0pKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4
Y2VwdGlvbjsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc2LDcgKzE3NSw3IEBAIGJv
b2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tSZXEKIAogICAgIEV4ZWNTdGF0ZSog
c3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc051bWJlcihsb25nUGFyYW0p
KTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTPElETExvbmc+KGxvbmdQYXJhbSkpOwogICAgIGFyZ3Mu
YXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIHRlc3ROb2RlUGFyYW0p
KTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNzcyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsNyBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0yMDUsNyArMjAzLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydQogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KCZzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9N
U3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yMjEsNyArMjE5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyMigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyMigpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzgsNyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
aW1wbC5hdHRyMygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgaW1wbC5hdHRyMygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDkgKzIzLDggQEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnZlcnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKQEAgLTE0OSw3ICsxNDgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXhjZXB0aW9uTmFtCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5h
bWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGlt
cGwubmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDExICsyNiw5IEBACiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
LSNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKQEAgLTE5OSw3ICsxOTcsNyBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwucmVndWxhckF0dHJpYnV0ZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMTUsNyArMjEzLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
aW1wbC5wdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjMyLDcgKzIzMCw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3QKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0yNTEsNyArMjQ5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNzcyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgi
CiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KQEAgLTQwLDggKzQxLDYgQEAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikgfHwgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCi0jaW5jbHVkZSAi
VVJMLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CkBAIC00MjEsNyArNDIwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0bwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihUZXN0SW50ZXJmYWNlOjppbXBsZW1l
bnRzU3RhdGljUmVhZE9ubHlBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQz
OSw3ICs0MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIFRl
c3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3Rh
dGljQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NTgsNyArNDU3LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcAogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NzcsNyArNDc2LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
aW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9N
U3RyaW5nPihzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC01MzEsNyArNTMwLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0bwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5
QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTU0OSw3ICs1NDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RhdGljQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGlj
QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01NjgsNyArNTY3LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cAogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShp
bXBsKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIFdl
YkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTU4Nyw3ICs1ODYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBXZWJD
b3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMiArMjQsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKICNpbmNsdWRlICJK
U0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCi0jaW5j
bHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC0xODksNyArMTg4LDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC5uYW1lKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+
KHN0YXRlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0
aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsOSBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0Lmgi
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCkBAIC0xNzEsNyArMTcwLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaQogICAgIGlmIChjdXJzb3Iu
aXNDYXB0dXJpbmcoKSkgewogICAgICAgICBpbnQzMl90IG1lbW9pemVkUmVzdWx0ID0gdGhpc09i
amVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpOwogICAgICAgICBj
dXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8aW50MzJfdD4+KGJpbmRpbmdOYW1l
LmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0gICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIobWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTG9uZz4obWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIApAQCAtMTc5LDEzICsxNzgsMTMgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaQogICAgICAgICBpbnQzMl90IG1lbW9pemVkUmVzdWx0OwogICAgICAgICBN
ZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRE
T01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxp
bnQzMl90PihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIobWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETExvbmc+KG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm5vbmRldGVybWlu
aXN0aWNSZWFkb25seUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+
KGltcGwubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0yMDcsNyArMjA2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaQogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewogICAgICAgICBTdHJp
bmcgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGlj
V3JpdGVhYmxlQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTIxNSwxMyArMjE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmkKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBNZW1v
aXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJp
bmc+KG1lbW9pemVkUmVzdWx0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVB
dHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBp
bXBsLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTI0Myw3ICsyNDIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pCiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAgIFN0cmlu
ZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQs
IDApOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
bWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIApAQCAtMjUxLDEzICsyNTAsMTMgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaQogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9p
emVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJl
c3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmlu
Zz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGlt
cGwubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMjgwLDcgKzI3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmkKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKICAgICAgICAgU3RyaW5n
IG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0dl
dHRlckV4Y2VwdGlvbkF0dHIoZWMpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6
ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVk
UmVzdWx0LCBlYyk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkBAIC0yODksMTQgKzI4OCwxNCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6
ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVz
dWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5n
PihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAg
ICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQtPmV4Y2Vw
dGlvbkNvZGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAg
fQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLm5vbmRldGVybWlu
aXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlv
bkF0dHIoZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMxOSw3ICszMTgsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pCiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygp
KSB7CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
Lm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5h
cHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5z
dHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMzI3LDEzICszMjYsMTMgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaQogICAgICAgICBTdHJpbmcgbWVtb2l6
ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3Iu
ZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAm
JiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgbWVtb2l6ZWRSZXN1
bHQpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwubm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDYzLDE4ICs0NjIs
MTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIGlmIChj
dXJzb3IuaXNDYXB0dXJpbmcoKSkgewogICAgICAgICBib29sIG1lbW9pemVkUmVzdWx0ID0gaW1w
bC5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCk7CiAgICAgICAgIGN1cnNvci5hcHBl
bmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxib29sPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5n
KCksIG1lbW9pemVkUmVzdWx0LCAwKTsKLSAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKG1lbW9p
emVkUmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihtZW1vaXplZFJl
c3VsdCk7CiAgICAgfSBlbHNlIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewogICAgICAgICBN
ZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRE
T01SZXN1bHRCYXNlPigpOwogICAgICAgICBib29sIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBp
ZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxib29sPihtZW1vaXplZFJlc3VsdCkpIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAg
ICByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5ub25kZXRlcm1pbmlzdGlj
WmVyb0FyZ0Z1bmN0aW9uKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFu
PihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVu
Y3Rpb24oKSk7CisgICAgICAgIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVhbj4oaW1wbC5ub25kZXRl
cm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCkpOwogI2Vsc2UKLSAgICByZXN1bHQgPSBqc0Jvb2xl
YW4oaW1wbC5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCkpOworICAgIHJlc3VsdCA9
IHRvSlM8SURMQm9vbGVhbj4oaW1wbC5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCkp
OwogI2VuZGlmCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQ3LDcgKzE3
NDcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMCiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExMb25nPihpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMTc2Myw3ICsxNzYzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5UwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5yZWFkT25seVN0
cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTE3OTQsNyArMTc5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
U3RhdGkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1Jl
YWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6c3RhdGlj
UmVhZE9ubHlMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4o
VGVzdE9iajo6c3RhdGljUmVhZE9ubHlMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0xODA5LDcgKzE4MDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1
Y3RvclN0YXRpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0
aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
VGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRE9NU3RyaW5nPihzdGF0ZSwgVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODU4LDcgKzE4NTgsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRW51bUF0dHJHCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBp
bXBsLmVudW1BdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExFbnVtZXJhdGlv
bjxUZXN0T2JqOjpFbnVtVHlwZT4+KHN0YXRlLCBpbXBsLmVudW1BdHRyKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTE4NzQsNyArMTg3NCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpCeXRlQXR0ckcKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVBdHRyKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCeXRlPihpbXBsLmJ5dGVBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4OTAsNyArMTg5MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0QXR0cigpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMT2N0ZXQ+KGltcGwub2N0ZXRBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5MDYsNyArMTkwNiw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0
cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2hvcnQ+KGltcGwuc2hvcnRBdHRy
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5MjIsNyArMTkyMiw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2gKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNs
YW1wZWRTaG9ydEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNob3J0Pihp
bXBsLmNsYW1wZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTkz
OCw3ICsxOTM4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYQog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExTaG9ydD4oaW1wbC5lbmZvcmNlUmFuZ2VTaG9ydEF0dHIoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTk1NCw3ICsxOTU0LDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkUwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRT
aG9ydEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkU2hvcnQ+
KGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MTk3MCw3ICsxOTcwLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRy
RwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETExvbmc+KGltcGwubG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTk4Niw3ICsxOTg2LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdM
b25nQQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0xvbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nTG9uZz4oaW1wbC5sb25nTG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMjAwMiw3ICsyMDAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialVuc2lnbmVkTAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0
dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGlt
cGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MjAxOCw3ICsyMDE4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnN0cmluZ0F0
dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjAzNCw3ICsyMDM0LDcgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExVU1ZTdHJpbmc+KHN0YXRlLCBpbXBsLnVzdnN0cmluZ0F0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMjA5OCw3ICsyMDk4LDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuZm9yZ2VhYgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1w
bC51bmZvcmdlYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIGltcGwudW5mb3JnZWFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTIxMTQsNyArMjExNCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHQKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuc3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjEzMCw3ICsyMTMwLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0ZSwgaW1w
bC51c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yMTQ2LDcgKzIxNDYsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSW1wbGVtZW50CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmlt
cGxlbWVudGF0aW9uRW51bUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVu
dW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4oc3RhdGUsIGltcGwuaW1wbGVtZW50YXRpb25F
bnVtQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMTc4LDcgKzIxNzgsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFu
KGltcGwuaXNDcmVhdGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+
KGltcGwuaXNDcmVhdGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjE5NCw3ICsy
MTk0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5n
YXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjEwLDcgKzIyMTAsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdh
dHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIyMjYsNyArMjIyNiw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50
ZWdyYWxhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBs
LmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdy
YWxhdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIyNDIsNyArMjI0Miw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihzdGQ6Om1heCgwLCBpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmc+KHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0
ckF0dHIpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjI1OCw3ICsyMjU4LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihp
bXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMQm9vbGVhbj4oaW1wbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMjI3NCw3ICsyMjc0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmdldFVS
TEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjI5MCw3ICsyMjkwLDcgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1
cmxhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KHN0
YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVz
dnVybGF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjMwNiw3ICsyMzA2
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZAogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRT
dHJpbmdBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzMjIsNyArMjMy
Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWQKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
TG9uZz4oaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MjMzOCw3ICsyMzM4LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzQm9vbGVhbihpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFu
QXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzU0LDcgKzIzNTQsNyBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTIzNzEsNyArMjM3MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFi
bGVkQXQKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTI0MDUsNyArMjQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGUKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTTnVtYmVyKHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0
dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETExvbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNl
cHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQyMiw3ICsyNDIyLDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5h
dHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKGVjKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETExvbmc+KGltcGwuYXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlv
bihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjQzOSw3ICsyNDM5LDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZQogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cmlidXRlV2l0
aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4o
aW1wbC5hdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTI0NTUsNyArMjQ1NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGUKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lF
eGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuYXR0
cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yNDcyLDcgKzI0NzIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAg
IHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMjQ4OSw3ICsyNDg5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0F0dAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5zdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
RE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNTQ3LDcgKzI1NDcsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
TG9uZz4oaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yNTYzLDcgKzI1NjMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqV2l0aENhbGxXCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYWxsV2l0aEF0dHJpYnV0ZShzdGF0ZSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExMb25nPihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKHN0YXRl
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjcxMyw3ICsyNzEzLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbgogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29u
ZGl0aW9uYWxBdHRyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1w
bC5jb25kaXRpb25hbEF0dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3MzIs
NyArMjczMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb24KICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmc+KGltcGwuY29uZGl0aW9uYWxBdHRyMigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0yNzUxLDcgKzI3NTEsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIzKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmNvbmRpdGlvbmFsQXR0cjMo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjgyMiw3ICsyODIyLDcgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dAogICAgIGlmIChKU1ZhbHVlIGNhY2hl
ZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCiAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKSk7CiAgICAg
dGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0
LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yODQxLDcgKzI4NDEsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0CiAgICAgaWYgKEpTVmFsdWUg
Y2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAg
ICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMigpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGltcGwuY2FjaGVkQXR0cmlidXRlMigpKTsK
ICAgICB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUudm0oKSwgJnRoaXNP
YmplY3QsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NTgsNyArMjg1OCw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWIKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmFu
eUF0dHJpYnV0ZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGltcGwuYW55
QXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI5MjEsNyArMjkyMSw3
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnIKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmJsdWViZXJyeSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4o
aW1wbC5ibHVlYmVycnkoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjkzNyw3ICsy
OTM3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aQogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZGVzY3JpcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TExvbmc+KGltcGwuZGVzY3JpcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
Mjk1Myw3ICsyOTUzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVy
KAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TExvbmc+KGltcGwuaWQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjk2OSw3ICsy
OTY5LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZQogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW1wbC5oYXNoKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmhhc2goKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtMjk4NSw3ICsyOTg1LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialJlcGxhY2VhYgogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwucmVwbGFjZWFibGVB
dHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzAwMSw3ICszMDAxLDcg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRAogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFi
bGVKU051bWJlcihpbXBsLm51bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+PihpbXBsLm51
bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMw
MTcsNyArMzAxNyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUwK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihpbXBsLm51bGxh
YmxlTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMDMzLDcg
KzMwMzMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCCiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNCb29sZWFuKGltcGwubnVsbGFibGVCb29sZWFuQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExCb29sZWFuPj4oaW1wbC5udWxsYWJsZUJvb2xl
YW5BdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzA2NSw3ICszMDY1
LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTAogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVs
bGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExMb25nPj4oaW1wbC5udWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0z
MTE0LDcgKzMxMTQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVT
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZVN0cmluZ1ZhbHVlKGVjKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihpbXBsLm51bGxhYmxl
U3RyaW5nVmFsdWUoZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3Bl
LCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMxMzEsNyArMzEzMSw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIGltcGwuYXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0zMTQ3LDcgKzMxNDcsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQXR0cmlidXRlCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLmF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExF
bnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25hbD4+KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhS
ZXNlcnZlZEVudW1UeXBlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMyMTEsNyAr
MzIxMSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmkKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIGltcGwuc3RyaW5n
aWZpZXJBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDgyNSw3ICs0
ODI1LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmJ5dGVNZXRob2QoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TEJ5dGU+KGltcGwuYnl0ZU1ldGhvZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKQEAgLTQ4NTAsNyArNDg1MCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcp
KQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJieXRlTWV0aG9kV2l0aEFyZ3MiLCAiVGVz
dE9iaiIpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlTWV0aG9kV2l0
aEFyZ3MoV1RGTW92ZShieXRlQXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJ5dGU+KGltcGwuYnl0ZU1ldGhvZFdpdGhBcmdzKFdU
Rk1vdmUoYnl0ZUFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNDg2Niw3ICs0ODY2LDcgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9j
dGV0TWV0aG9kKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExPY3RldD4oaW1wbC5v
Y3RldE1ldGhvZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
QEAgLTQ4OTEsNyArNDg5MSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDIsICJvYmpB
cmciLCAiVGVzdE9iamVjdCIsICJvY3RldE1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0ZXRNZXRob2RXaXRoQXJncyhXVEZN
b3ZlKG9jdGV0QXJnKSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShv
Y3RldEFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNDkwNyw3ICs0OTA3LDcgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdNZXRo
b2QoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwubG9uZ01ldGhv
ZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTQ5MzIs
NyArNDkzMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDIsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJsb25nTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJn
KSwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETExvbmc+KGltcGwubG9uZ01ldGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1v
dmUoc3RyQXJnKSwgKm9iakFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIApAQCAtNDk4OSw3ICs0OTg5LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuZm9yZ2VhYmxlTWV0aG9kKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLnVuZm9yZ2VhYmxlTWV0aG9k
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNTMxMCw3
ICs1MzEwLDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTTnVtYmVyKCpzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9u
UmV0dXJuaW5nTG9uZygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oKnN0
YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNTM5Miw3ICs1
MzkyLDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJndW1lbnQgPSBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1l
bnQpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBp
bXBsLnByaXZhdGVNZXRob2QoV1RGTW92ZShhcmd1bWVudCkpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTU0MTIsNyArNTQxMiw3IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5wdWJsaWNB
bmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC02NDEwLDcgKzY0MTAsNyBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLmNvbmRpdGlvbmFsTWV0aG9kMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtNzI0Myw3ICs3MjQzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZN
b3ZlKGFyZykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oVGVzdE9iajo6
Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RGTW92ZShhcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC03Mzg4LDcgKzczODgsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJy
YXlGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykp
OwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtODE1Miw3ICs4MTUyLDcgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMVVNWU3RyaW5nPigqc3RhdGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CShyZXZpc2lvbiAyMDc3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwzMCArMTA4LDE4IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclQKIH07CiBKU0M6OkpTU3RyaW5n
KiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1UeXBlKTsK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtVHlwZT4gewot
ICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1UeXBlIHZhbHVlKSB7IHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1U
eXBlPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkVudW1UeXBlIGNvbnZlcnRFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpOwogCiBKU0M6OkpTU3RyaW5nKiBq
c1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6Ok9wdGlvbmFsKTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpPcHRpb25hbD4gewotICAg
IHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6Ok9wdGlvbmFsIHZhbHVlKSB7IHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlv
bmFsPFRlc3RPYmo6Ok9wdGlvbmFsPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFs
PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6Ok9w
dGlvbmFsIGNvbnZlcnRFbnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25hbD4oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpOwogCiBKU0M6OkpTU3RyaW5nKiBqc1N0
cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIEFsdGVybmF0ZUVudW1OYW1lKTsKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxBbHRlcm5hdGVFbnVtTmFtZT4gewotICAgIHN0
YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCosIEFsdGVybmF0ZUVudW1OYW1lIHZhbHVlKSB7IHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFs
PEFsdGVybmF0ZUVudW1OYW1lPiBwYXJzZUVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IEFsdGVybmF0ZUVudW1O
YW1lIGNvbnZlcnRFbnVtZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPEFsdGVybmF0ZUVudW1OYW1lPigpOwpAQCAtMTQwLDEwICsxMjgsNiBAQCB0ZW1w
bGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpCiAKIEpTQzo6SlNTdHJpbmcqIGpz
U3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUEpOwogCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1BPiB7Ci0gICAgc3RhdGlj
IEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6RW51bUEgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9i
ajo6RW51bUE+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUE+KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gVGVzdE9iajo6RW51bUEgY29udmVydEVudW1l
cmF0aW9uPFRlc3RPYmo6OkVudW1BPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0
ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUE+KCk7CkBAIC0xNTQsMTAgKzEzOCw2IEBAIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhw
ZWN0ZWRFbnVtZXJhdGkKIAogSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpF
eGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQik7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVU
cmFpdHM8VGVzdE9iajo6RW51bUI+IHsKLSAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlK
U1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2Jq
OjpFbnVtQiB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsg
fQotfTsKLQogdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQj4gcGFyc2VFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtQj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVt
cGxhdGU8PiBUZXN0T2JqOjpFbnVtQiBjb252ZXJ0RW51bWVyYXRpb248VGVzdE9iajo6RW51bUI+
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciog
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQj4oKTsKQEAgLTE2OCwxMCAr
MTQ4LDYgQEAgdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aQogCiBKU0M6
OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVu
dW1DKTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQz4g
ewotICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1DIHZhbHVlKSB7IHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1DPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1DPihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1D
IGNvbnZlcnRFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtQz4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPFRlc3RPYmo6OkVudW1DPigpOwpAQCAtMTgwLDMwICsxNTYsMTggQEAgdGVtcGxhdGU8PiBj
b25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aQogCiBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dp
dGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OktpbmQpOwogCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OktpbmQ+IHsKLSAgICBzdGF0aWMgSlNDOjpKU1N0
cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OktpbmQ+IHBh
cnNlRW51bWVyYXRpb248VGVzdE9iajo6S2luZD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwogdGVtcGxhdGU8PiBUZXN0T2JqOjpLaW5kIGNvbnZlcnRFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpLaW5kPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNvbnN0
IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4oKTsKIAogSlND
OjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpT
aXplKTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpTaXplPiB7
Ci0gICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6U2l6ZSB2YWx1ZSkgeyByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVtcGxhdGU8PiBPcHRp
b25hbDxUZXN0T2JqOjpTaXplPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OlNpemU+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gVGVzdE9iajo6U2l6ZSBjb252
ZXJ0RW51bWVyYXRpb248VGVzdE9iajo6U2l6ZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3RPYmo6OlNpemU+KCk7CiAKIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6
RXhlY1N0YXRlKiwgVGVzdE9iajo6Q29uZmlkZW5jZSk7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpT
VmFsdWVUcmFpdHM8VGVzdE9iajo6Q29uZmlkZW5jZT4gewotICAgIHN0YXRpYyBKU0M6OkpTU3Ry
aW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RPYmo6OkNvbmZpZGVuY2UgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6Q29u
ZmlkZW5jZT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpDb25maWRlbmNlPihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmZpZGVuY2UgY29u
dmVydEVudW1lcmF0aW9uPFRlc3RPYmo6OkNvbmZpZGVuY2U+KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uLmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw5ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpT
RE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKLSNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTE2Miw3ICsxNjAsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLmZpcnN0U3RyaW5nQXR0cmlidXRlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3OCw3ICsxNzYsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zZWNvbmRMb25nQXR0
cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLnNlY29u
ZExvbmdBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjEwLDcgKzIw
OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW8KICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihpbXBsLmZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0y
MjYsNyArMjI0LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpbwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcGwuZmlmdGhMb25nQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmZpZnRoTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMjAwLDcgKzIwMSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2MKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KCZzdGF0ZSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgaW1wbC5wb3J0cygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2Vx
dWVuY2U8SURMSW50ZXJmYWNlPE1lc3NhZ2VQb3J0Pj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgaW1wbC5wb3J0cygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDExICszMSw5IEBACiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVk
ZSAiU1ZHUG9pbnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNs
dWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIApAQCAtMjM4LDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2kKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkTG9u
Z0xvbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmdM
b25nPihpbXBsLnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTI4NSw3ICsyODMsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNBdHRyCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMwMiw3ICszMDAsNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0VHlwZWRlZnNBdHRyCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5h
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0z
MTksNyArMzE3LDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaQog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUs
IGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKICAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTMzNiw3ICszMzQsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJp
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTU0OSw3ICs1NDcsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBz
ZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKFdURk1v
dmUoc2VxdWVuY2VBcmcpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVk
TG9uZ0xvbmc+KGltcGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcp
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC02ODgsNyAr
Njg2LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gdmFsdWVzID0gY29udmVydDxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3Rh
dGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0
aW9uKFdURk1vdmUodmFsdWVzKSwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAg
LTcxMSw3ICs3MDksNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIoV1RGTW92ZSh2YWx1ZXMp
LCBlYykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1
ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKICAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkBAIC03MzMsNyArNzMxLDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VxdWVu
Y2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RXZlbnRUYXJnZXQ+
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShX
VEZNb3ZlKHNlcXVlbmNlQXJnKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29s
ZWFuPihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2Vx
dWVuY2VBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU2F0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDIwNzcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDkgKzIzLDggQEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKQEAgLTE0OSw3ICsxNDgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNh
dHRyaWJ1dGVSZWFkb25sCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsLnJlYWRv
bmx5KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBp
bXBsLnJlYWRvbmx5KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50LmlkbAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBpbXBsZW1lbnRh
dGlvbiBwcm92aWRlZCB0eXBlZGVmCisvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNET01UaW1lU3RhbXAKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIERPTVRpbWVTdGFtcDsK
KwogWwogICAgIENvbnN0cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBFdmVudEluaXQg
ZXZlbnRJbml0RGljdCksCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkocmV2aXNpb24gMjA3NzI1KQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
MTEgKzUwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwogICAgIH07
CiAKKyAgICB1c2luZyBEaWN0aW9uYXJ5VW5pb24gPSBWYXJpYW50PFJlZlB0cjxOb2RlPiwgVmVj
dG9yPFN0cmluZz4sIE90aGVyRGljdGlvbmFyeT47CisKICAgICBzdHJ1Y3QgRGljdGlvbmFyeSB7
CiAgICAgICAgIGludCBsb25nVmFsdWU7CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAgVmFyaWFudDxSZWZQ
dHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7Cisg
ICAgICAgIERpY3Rpb25hcnlVbmlvbiB1bmlvblZhbHVlOwogICAgIH07CiAKICAgICBsb25nIHRl
c3RMb25nKCkgeyByZXR1cm4gbV9sb25nOyB9CkBAIC05OCw2ICsxMDAsMTAgQEAgcHVibGljOgog
ICAgIGNvbnN0IFN0cmluZyYgdGVzdFVTVlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdXN2c3Ry
aW5nOyB9CiAgICAgdm9pZCBzZXRUZXN0VVNWU3RyaW5nKGNvbnN0IFN0cmluZyYgdXN2c3RyaW5n
KSB7IG1fdXN2c3RyaW5nID0gdXN2c3RyaW5nOyB9CiAKKyAgICB1c2luZyBUZXN0VW5pb24gPSBW
YXJpYW50PFN0cmluZywgaW50LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKKyAg
ICBjb25zdCBUZXN0VW5pb24mIHRlc3RVbmlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5pb247IH0K
KyAgICB2b2lkIHNldFRlc3RVbmlvbihjb25zdCBUZXN0VW5pb24mIHZhbHVlKSB7IG1fdW5pb24g
PSB2YWx1ZTsgfQorCiAgICAgdm9pZCBzZXRUeXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5KERpY3Rp
b25hcnkmIGRpY3Rpb25hcnkpCiAgICAgewogICAgICAgICBtX3R5cGVDb252ZXJzaW9uc0RpY3Rp
b25hcnlMb25nVmFsdWUgPSBkaWN0aW9uYXJ5LmxvbmdWYWx1ZTsKQEAgLTEwOCw3ICsxMTQsOCBA
QCBwdWJsaWM6CiAKICAgICBpbnQgdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeUxvbmdWYWx1ZSgp
IHsgcmV0dXJuIG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeUxvbmdWYWx1ZTsgfQogICAgIFN0
cmluZyB0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U3RyaW5nVmFsdWUoKSB7IHJldHVybiBtX3R5
cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlTdHJpbmdWYWx1ZTsgfQotICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlTZXF1ZW5jZVZhbHVlKCkgeyByZXR1cm4gbV90eXBl
Q29udmVyc2lvbnNEaWN0aW9uYXJ5U2VxdWVuY2VWYWx1ZTsgfQorICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiB0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5U2VxdWVuY2VWYWx1ZSgpIHsgcmV0dXJu
IG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVNlcXVlbmNlVmFsdWU7IH0KKyAgICBjb25zdCBE
aWN0aW9uYXJ5VW5pb24mIHR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnlVbmlvblZhbHVlKCkgeyBy
ZXR1cm4gbV90eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25WYWx1ZTsgfQogICAgIFVuaW9u
VHlwZSB0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25UeXBlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVVuaW9uVmFs
dWUsCkBAIC0xMzMsMTEgKzE0MCwxMiBAQCBwcml2YXRlOgogICAgIHVpbnQxNl90IG1fVW5zaWdu
ZWRTaG9ydCB7IDAgfTsKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgU3RyaW5nIG1fdXN2c3Ry
aW5nOworICAgIFRlc3RVbmlvbiBtX3VuaW9uOwogICAgIAogICAgIGludCBtX3R5cGVDb252ZXJz
aW9uc0RpY3Rpb25hcnlMb25nVmFsdWUgeyAwIH07CiAgICAgU3RyaW5nIG1fdHlwZUNvbnZlcnNp
b25zRGljdGlvbmFyeVN0cmluZ1ZhbHVlOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fdHlwZUNvbnZl
cnNpb25zRGljdGlvbmFyeVNlcXVlbmNlVmFsdWU7Ci0gICAgVmFyaWFudDxSZWZQdHI8Tm9kZT4s
IFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IG1fdHlwZUNvbnZlcnNpb25zRGljdGlv
bmFyeVVuaW9uVmFsdWU7CisgICAgRGljdGlvbmFyeVVuaW9uIG1fdHlwZUNvbnZlcnNpb25zRGlj
dGlvbmFyeVVuaW9uVmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaWRsCShyZXZpc2lvbiAyMDc3
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDEyICs1MiwxNCBAQCBlbnVtIFVuaW9uVHlwZSB7ICJub2RlIiwgInNl
cXVlbmNlIiwgImRpCiAKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRlc3RTdHJpbmc7CiAgICAg
YXR0cmlidXRlIFVTVlN0cmluZyB0ZXN0VVNWU3RyaW5nOworCisgICAgYXR0cmlidXRlIChET01T
dHJpbmcgb3IgbG9uZyBvciBib29sZWFuIG9yIE5vZGUgb3Igc2VxdWVuY2U8bG9uZz4pIHRlc3RV
bmlvbjsKICAgICAKICAgICB2b2lkIHNldFR5cGVDb252ZXJzaW9uc0RpY3Rpb25hcnkoVHlwZUNv
bnZlcnNpb25zRGljdGlvbmFyeSBkKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyB0eXBl
Q29udmVyc2lvbnNEaWN0aW9uYXJ5TG9uZ1ZhbHVlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeVN0cmluZ1ZhbHVlOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBzZXF1ZW5jZTxET01TdHJpbmc+IHR5cGVDb252ZXJzaW9uc0RpY3Rpb25h
cnlTZXF1ZW5jZVZhbHVlOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBVbmlvblR5cGUgdHlwZUNv
bnZlcnNpb25zRGljdGlvbmFyeVVuaW9uVHlwZTsgCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIFVu
aW9uVHlwZSB0eXBlQ29udmVyc2lvbnNEaWN0aW9uYXJ5VW5pb25UeXBlOwogfTsKIAogZGljdGlv
bmFyeSBUeXBlQ29udmVyc2lvbnNPdGhlckRpY3Rpb25hcnkgewpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA3NzI1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTYtMTAtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBbV2ViSURMXSBBZGQgSURMVHlwZSBiYXNlZCB0b0pTIGNvbnZlcnNpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvZG9tL3dlYmlkbC10
eXBlLW1hcHBpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL2RvbS93ZWJpZGwtdHlwZS1t
YXBwaW5nLmh0bWw6CisKIDIwMTYtMTAtMjIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBEeW5hbWljYWxseS1hZGRlZCBiYWNrZHJvcCBmaWx0ZXIgdG8gY2xpcC1w
YXRoJ2QgZWxlbWVudCB3aXRoIDNEIHRyYW5zZm9ybSByZW5kZXJzIGluY29ycmVjdGx5ICh3aXRo
b3V0IGNsaXApCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3dlYmlkbC10eXBl
LW1hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMDc3MjUpCisrKyBMYXlvdXRUZXN0cy9q
cy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEwNTksNiArMTA1OSwzNiBAQCBjb252ZXJ0ZXIudGVzdFVTVlN0cmluZyA9IHVuZGVmaW5lZAog
Y29udmVydGVyLnRlc3RTdHJpbmcgPSB1bmRlZmluZWQKIFBBU1MgY29udmVydGVyLnRlc3RVU1ZT
dHJpbmcgaXMgInVuZGVmaW5lZCIKIFBBU1MgY29udmVydGVyLnRlc3RTdHJpbmcgaXMgInVuZGVm
aW5lZCIKK2NvbnZlcnRlci50ZXN0VW5pb24gPSAnaGVsbG8nCitQQVNTIGNvbnZlcnRlci50ZXN0
VW5pb24gaXMgJ2hlbGxvJworUEFTUyB0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnc3Ry
aW5nJworY29udmVydGVyLnRlc3RVbmlvbiA9IDEKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBp
cyAxCitQQVNTIHR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzICdudW1iZXInCitjb252ZXJ0
ZXIudGVzdFVuaW9uID0gZmFsc2UKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyBmYWxzZQor
UEFTUyB0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnYm9vbGVhbicKK2NvbnZlcnRlci50
ZXN0VW5pb24gPSBkb2N1bWVudAorUEFTUyBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzIGRvY3VtZW50
CitQQVNTIHR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzICdvYmplY3QnCitQQVNTIGNvbnZl
cnRlci50ZXN0VW5pb24gaXMgYW4gaW5zdGFuY2Ugb2YgRG9jdW1lbnQKK2NvbnZlcnRlci50ZXN0
VW5pb24gPSBbMSwgMl0KK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyBbMSwgMl0KK1BBU1Mg
dHlwZW9mIGNvbnZlcnRlci50ZXN0VW5pb24gaXMgJ29iamVjdCcKK1BBU1MgY29udmVydGVyLnRl
c3RVbmlvbiBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorY29udmVydGVyLnRlc3RVbmlvbiA9IG51
bGwKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnbnVsbCcKK1BBU1MgdHlwZW9mIGNvbnZl
cnRlci50ZXN0VW5pb24gaXMgJ3N0cmluZycKK2NvbnZlcnRlci50ZXN0VW5pb24gPSB1bmRlZmlu
ZWQKK1BBU1MgY29udmVydGVyLnRlc3RVbmlvbiBpcyAndW5kZWZpbmVkJworUEFTUyB0eXBlb2Yg
Y29udmVydGVyLnRlc3RVbmlvbiBpcyAnc3RyaW5nJworY29udmVydGVyLnRlc3RVbmlvbiA9IHdp
bmRvdworUEFTUyB0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiBpcyAnc3RyaW5nJworUEFTUyBj
b252ZXJ0ZXIudGVzdFVuaW9uIGlzICdbb2JqZWN0IFdpbmRvd10nCitjb252ZXJ0ZXIudGVzdFVu
aW9uID0geyB9CitQQVNTIHR5cGVvZiBjb252ZXJ0ZXIudGVzdFVuaW9uIGlzICdzdHJpbmcnCitQ
QVNTIGNvbnZlcnRlci50ZXN0VW5pb24gaXMgJ1tvYmplY3QgT2JqZWN0XScKK1BBU1MgY29udmVy
dGVyLnRlc3RVbmlvbiA9IHsgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyB0aHJvdyBFcnJvcigpOyB9
IH0gdGhyZXcgZXhjZXB0aW9uIEVycm9yLgogY29udmVydGVyLnNldFR5cGVDb252ZXJzaW9uc0Rp
Y3Rpb25hcnkoeyBsb25nVmFsdWU6IDEgfSkKIFBBU1MgY29udmVydGVyLnR5cGVDb252ZXJzaW9u
c0RpY3Rpb25hcnlMb25nVmFsdWUgaXMgMQogY29udmVydGVyLnNldFR5cGVDb252ZXJzaW9uc0Rp
Y3Rpb25hcnkoeyBzdHJpbmdWYWx1ZTogJ2hlbGxvJyB9KQpJbmRleDogTGF5b3V0VGVzdHMvanMv
ZG9tL3dlYmlkbC10eXBlLW1hcHBpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy5odG1sCShyZXZpc2lvbiAyMDc3MjUpCisrKyBMYXlv
dXRUZXN0cy9qcy9kb20vd2ViaWRsLXR5cGUtbWFwcGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIGZ1bmN0aW9uIHRlc3ROb25OdW1lcmljVG9OdW1lcmljRW5mb3JjZVIK
ICAgICBjb252ZXJ0KGF0dHJpYnV0ZSwgIm51bGwiLCAiMCIpOwogICAgIGNvbnZlcnRUaHJvd3Mo
YXR0cmlidXRlLCAidW5kZWZpbmVkIik7CiB9Ci0KKy8vIAogdHlwZSA9ICJ0ZXN0TG9uZyI7CiB2
ZXJpZnlBdHRyaWJ1dGUodHlwZSk7CiBjb252ZXJ0KHR5cGUsICIwIik7CkBAIC01ODYsNiArNTg2
LDM3IEBAIHNob3VsZEJlRXF1YWxUb1N0cmluZygiY29udmVydGVyLnRlc3RTdHIKICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImNvbnZlcnRlci50ZXN0U3RyaW5nIiwgdmFsdWUpOwogfSk7CiAK
K2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0VW5pb24gPSAnaGVsbG8nIik7CitzaG91bGRCZSgi
Y29udmVydGVyLnRlc3RVbmlvbiIsICInaGVsbG8nIik7CitzaG91bGRCZSgidHlwZW9mIGNvbnZl
cnRlci50ZXN0VW5pb24iLCAiJ3N0cmluZyciKTsKK2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0
VW5pb24gPSAxIik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RVbmlvbiIsICIxIik7CitzaG91
bGRCZSgidHlwZW9mIGNvbnZlcnRlci50ZXN0VW5pb24iLCAiJ251bWJlciciKTsKK2V2YWxBbmRM
b2coImNvbnZlcnRlci50ZXN0VW5pb24gPSBmYWxzZSIpOworc2hvdWxkQmUoImNvbnZlcnRlci50
ZXN0VW5pb24iLCAiZmFsc2UiKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlv
biIsICInYm9vbGVhbiciKTsKK2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0VW5pb24gPSBkb2N1
bWVudCIpOworc2hvdWxkQmUoImNvbnZlcnRlci50ZXN0VW5pb24iLCAiZG9jdW1lbnQiKTsKK3No
b3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIsICInb2JqZWN0JyIpOworc2hvdWxk
QmVUeXBlKCJjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIkRvY3VtZW50Iik7CitldmFsQW5kTG9nKCJj
b252ZXJ0ZXIudGVzdFVuaW9uID0gWzEsIDJdIik7CitzaG91bGRCZSgiY29udmVydGVyLnRlc3RV
bmlvbiIsICJbMSwgMl0iKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIs
ICInb2JqZWN0JyIpOworc2hvdWxkQmVUeXBlKCJjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIkFycmF5
Iik7CitldmFsQW5kTG9nKCJjb252ZXJ0ZXIudGVzdFVuaW9uID0gbnVsbCIpOworc2hvdWxkQmUo
ImNvbnZlcnRlci50ZXN0VW5pb24iLCAiJ251bGwnIik7CitzaG91bGRCZSgidHlwZW9mIGNvbnZl
cnRlci50ZXN0VW5pb24iLCAiJ3N0cmluZyciKTsKK2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0
VW5pb24gPSB1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjb252ZXJ0ZXIudGVzdFVuaW9uIiwgIid1
bmRlZmluZWQnIik7CitzaG91bGRCZSgidHlwZW9mIGNvbnZlcnRlci50ZXN0VW5pb24iLCAiJ3N0
cmluZyciKTsKK2V2YWxBbmRMb2coImNvbnZlcnRlci50ZXN0VW5pb24gPSB3aW5kb3ciKTsKK3No
b3VsZEJlKCJ0eXBlb2YgY29udmVydGVyLnRlc3RVbmlvbiIsICInc3RyaW5nJyIpOworc2hvdWxk
QmUoImNvbnZlcnRlci50ZXN0VW5pb24iLCAiJ1tvYmplY3QgV2luZG93XSciKTsKK2V2YWxBbmRM
b2coImNvbnZlcnRlci50ZXN0VW5pb24gPSB7IH0iKTsKK3Nob3VsZEJlKCJ0eXBlb2YgY29udmVy
dGVyLnRlc3RVbmlvbiIsICInc3RyaW5nJyIpOworc2hvdWxkQmUoImNvbnZlcnRlci50ZXN0VW5p
b24iLCAiJ1tvYmplY3QgT2JqZWN0XSciKTsKK3Nob3VsZFRocm93KCJjb252ZXJ0ZXIudGVzdFVu
aW9uID0geyB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHRocm93IEVycm9yKCk7IH0gfSIpOworCiBl
dmFsQW5kTG9nKCJjb252ZXJ0ZXIuc2V0VHlwZUNvbnZlcnNpb25zRGljdGlvbmFyeSh7IGxvbmdW
YWx1ZTogMSB9KSIpOwogc2hvdWxkQmUoImNvbnZlcnRlci50eXBlQ29udmVyc2lvbnNEaWN0aW9u
YXJ5TG9uZ1ZhbHVlIiwgIjEiKTsKIGV2YWxBbmRMb2coImNvbnZlcnRlci5zZXRUeXBlQ29udmVy
c2lvbnNEaWN0aW9uYXJ5KHsgc3RyaW5nVmFsdWU6ICdoZWxsbycgfSkiKTsK
</data>
<flag name="review"
          id="315588"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>