<?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>225576</bug_id>
          
          <creation_ts>2021-05-08 23:38:45 -0700</creation_ts>
          <short_desc>IPC testing API should have the ability to send and receive shared memory</short_desc>
          <delta_ts>2021-05-09 13:42:44 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225537</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758299</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-08 23:38:45 -0700</bug_when>
    <thetext>In order to support DisplayList fuzzing, we need the ability to create &amp; receive shared memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758300</commentid>
    <comment_count>1</comment_count>
      <attachid>428113</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-09 00:05:05 -0700</bug_when>
    <thetext>Created attachment 428113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758338</commentid>
    <comment_count>2</comment_count>
      <attachid>428113</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-05-09 10:55:55 -0700</bug_when>
    <thetext>Comment on attachment 428113
Patch

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

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:108
&gt; +    size_t size() { return m_sharedMemory-&gt;size(); }

Nit - we can make this method const

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:136
&gt; +    RefPtr&lt;SharedMemory&gt; m_sharedMemory;

Nit - I think this can be a `Ref&lt;SharedMemory&gt; m_sharedMemory;`?

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:376
&gt; +    return unwrap(JSValueToObject(context, value, 0));

Nit - use nullptr instead of 0?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:294
&gt; +TEST(IPCTestingAPI, CanSendSemaphpre)

Nit - CanSendSemaphore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758340</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-09 11:08:53 -0700</bug_when>
    <thetext>Thank you for the review!

(In reply to Wenson Hsieh from comment #2)
&gt; Comment on attachment 428113 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428113&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:108
&gt; &gt; +    size_t size() { return m_sharedMemory-&gt;size(); }
&gt; 
&gt; Nit - we can make this method const

Done.
 
&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:136
&gt; &gt; +    RefPtr&lt;SharedMemory&gt; m_sharedMemory;
&gt; 
&gt; Nit - I think this can be a `Ref&lt;SharedMemory&gt; m_sharedMemory;`?

Yeah, it really should be but SharedMemory::allocate returns RefPtr :( I guess I&apos;m gonna just dereference RefPtr there.

&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:376
&gt; &gt; +    return unwrap(JSValueToObject(context, value, 0));
&gt; 
&gt; Nit - use nullptr instead of 0?

Fixed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:294
&gt; &gt; +TEST(IPCTestingAPI, CanSendSemaphpre)
&gt; 
&gt; Nit - CanSendSemaphore

Oh oops, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758343</commentid>
    <comment_count>4</comment_count>
      <attachid>428130</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-09 11:21:26 -0700</bug_when>
    <thetext>Created attachment 428130
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758354</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-09 11:57:29 -0700</bug_when>
    <thetext>Committed r277250 (237519@main): &lt;https://commits.webkit.org/237519@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428130.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758355</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-09 11:58:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/77717870&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428113</attachid>
            <date>2021-05-09 00:05:05 -0700</date>
            <delta_ts>2021-05-09 11:21:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225576-20210509000504.patch</filename>
            <type>text/plain</type>
            <size>41364</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA2ZGFlMjIyMjA4MGY0ODVm
OWJiZTEwNGQxODA0ZjNiNzhmZGNlYzMuLmIwNmJlOGQ4MzA4YWU2MGQ1YTYwODcxODZjYjc3ZjA0
MmVhZWQ0NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjEtMDUtMDggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3Vs
ZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlbmQgYW5kIHJlY2VpdmUgc2hhcmVkIG1lbW9yeQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NTc2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHRoZSBjYXBhYmlsaXR5IHRvIHNlbmQgJiByZWNlaXZlIHNoYXJlZCBtZW1vcnkgZm9yIElQ
QyB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICAgICBJdCBhZGRzIElQQy5jcmVhdGVTaGFyZWRNZW1v
cnkgd2hpY2ggY3JlYXRlcyBhIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5ld2x5
CisgICAgICAgIGFsbG9jYXRlZCBJUEMtc2hhcmFibGUgbWVtb3J5LiBJdCBoYXMgcmVhZEJ5dGVz
IGFuZCB3cml0ZUJ5dGVzIG1ldGhvZHMuIEJvdGggdGFrZXMgb2Zmc2V0CisgICAgICAgIGFuZCB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgLyB3cml0ZS4gcmVhZEJ5dGVzIHdpbGwgcmV0dXJu
IGEgbmV3IEFycmF5QnVmZmVyIGFuZAorICAgICAgICB3cml0ZUJ5dGVzIHRha2VzIGFuIEFycmF5
QnVmZmVyIG9yIGEgdHlwZWQgYXJyYXkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCisgICAgICAg
IElQQy5zZW5kTWVzc2FnZSBhbmQgSVBDLnNlbmRTeW5jTWVzc2FnZSBub3cgc3VwcHJ0cyBlbmNv
ZGluZyB0aGlzIFNoYXJlZE1lbW9yeSBKYXZhU2NyaXB0CisgICAgICAgIG9iamVjdC4gSXQgc3Vw
cG9ydHMgdGhlIHR5cGUgc3BlY2lmaWMgYXJndW1lbnRzIG9mICJwcm90ZWN0aW9uIiBhbmQgImRh
dGFTaXplIiBpbiBhZGRpdGlvbgorICAgICAgICB0byB0aGUgcmVndWxhciAidmFsdWUiIHByb3Bl
cnR5IGZvciB0aGUgU2hhcmVkTWVtb3J5IG9iamVjdC4KKworICAgICAgICBUaGlzIHBhdGNoIGFs
c28gYWRkcyB0aGUgc3VwcG9ydCBmb3Igc2VuZGluZyBTZW1hcGhvcmUgb2JqZWN0IG92ZXIgSVBD
IGNyZWF0ZWQgdmlhCisgICAgICAgIElQQy5jcmVhdGVTZW1hcGhvcmUsIHdoaWNoIHdhcyBzdXBw
b3NlZCB0byBiZSBhZGRlZCBpbiByMjc3MTk5LgorCisgICAgICAgIEZpbmFsbHksIHRoaXMgcGF0
Y2ggYWxzbyBleHBvc2VzIHRoZSBWTSBwYWdlIHNpemUgdmlhIElQQy52bVBhZ2VTaXplIHRvIGZh
Y2lsaXRhdGUKKyAgICAgICAgdGhlIGFsbG9jYXRpb24gb2YgYSBzaGFyYWJsZSBtZW1vcnkgb2Yg
YW4gaW50ZXJlc3Rpbmcgc2l6ZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKworICAgICAgICBUZXN0
czogVGVzdFdlYktpdEFQSS5JUENUZXN0aW5nQVBJLkNhblJlY2VpdmVTaGFyZWRNZW1vcnkKKyAg
ICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5DcmVhdGVTaGFyZWRN
ZW1vcnkKKyAgICAgICAgICAgICAgIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5TZW5k
U2VtYXBocHJlCisgICAgICAgICAgICAgICBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkuQ2Fu
U2VuZFNoYXJlZE1lbW9yeQorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKTogVXNlIHVpbnQzMl90IGlu
c3RlYWQKKyAgICAgICAgb2Ygc2l6ZV90IHNpbmNlIHRoZSBsYXR0ZXIgZGVwZW5kcyBvbiB0aGUg
c3BlY2lmaWMgYXJjaGl0ZWN0dXJlIChlLmcuIDMyLWJpdCB2cyA2NC1iaXQpLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1h
cGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaDogQWRkZWQgYSBzcGVjaWFsaXphdGlvbiBmb3Ig
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQ
Q1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1Nl
bWFwaG9yZTo6ZW5jb2RlIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OkpTU2hhcmVkTWVtb3J5KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OnNpemUpOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OkpTU2hhcmVkTWVtb3J5KTogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmNvbnZlcnRUb1VpbnQ2NCk6IE1v
dmVkIHVwIGhlcmUuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU2VtYXBo
b3JlOjpzaWduYWwpOiBGaXhlZCBhIHR5cG8uCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdB
UEk6OkpTSVBDU2VtYXBob3JlOjp3YWl0Rm9yKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OmNyZWF0ZUpTV3JhcHBl
cik6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU1NoYXJlZE1lbW9y
eTo6d3JhcHBlckNsYXNzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OkpTU2hhcmVkTWVtb3J5Ojp1bndyYXApOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OnRvV3JhcHBlZCk6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJUENUZXN0aW5nQVBJOjpKU1NoYXJlZE1lbW9yeTo6aW5pdGlhbGl6ZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU1NoYXJlZE1lbW9yeTo6ZmluYWxpemUp
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6
OnN0YXRpY0Z1bmN0aW9ucyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpKU1NoYXJlZE1lbW9yeTo6cmVhZEJ5dGVzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OmFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZik6IEV4dHJhY3RlZCBvdXQg
b2YgZW5jb2RlVHlwZWRBcnJheS4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNT
aGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNJUEM6OnN0YXRpY0Z1bmN0aW9ucyk6IEFkZGVkIElQQy5jcmVhdGVTaGFyZWRN
ZW1vcnkuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjpzdGF0aWNWYWx1
ZXMpOiBBZGRlZCBJUEMudm1QYWdlU2l6ZS4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQ
STo6ZW5jb2RlVHlwZWRBcnJheSk6IAorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpn
ZXRPYmplY3RJZGVudGlmaWVyRnJvbVByb3BlcnR5KTogTm93IHVzZXMgY29udmVydFRvVWludDY0
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVTaGFyZWRNZW1vcnkpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlU2VtYXBob3JlKTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZUFyZ3VtZW50KTog
QWRkZWQgdGhlIHN1cHBvcnQgZm9yIGVuY29kaW5nIFNoYXJlZE1lbW9yeSBhbmQKKyAgICAgICAg
U2VtYXBob3JlLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6Y3JlYXRl
U2hhcmVkTWVtb3J5KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpT
SVBDOjp2bVBhZ2VTaXplKTogQWRkZWQuCisgICAgICAgIChJUEM6OmpzVmFsdWVGb3JEZWNvZGVk
QXJndW1lbnRWYWx1ZSk6IEFkZGVkLiBDcmVhdGVzIGEgbmV3bHkgYWRkZWQgU2hhcmVkTWVtb3J5
IEphdmFTY3JpcHQKKyAgICAgICAgb2JqZWN0IGZvciBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZS4g
SXQgYWxzbyBleHBvc2VzIGRhdGFTaXplIGFuZCBwcm90ZWN0aW9uIHZhbHVlLgorICAgICAgICBU
aGlzIGRlY29kZXIgZGV0ZWN0cyB3aGV0aGVyIHRoZSBzaGFyZWQgbWVtb3J5IGlzIHdyaXRhYmxl
IG9yIG5vdCBieSBhdHRlbXB0aW5nIHRvIG1hcCBpdAorICAgICAgICBhcyBQcm90ZWN0aW9uOjpS
ZWFkV3JpdGUgYW5kIGZhbGxpbmcgYmFjayB0byBQcm90ZWN0aW9uOjpSZWFkT25seSBpZiB0aGUg
Zm9ybWVyIGZhaWxzLgorCiAyMDIxLTA1LTA3ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFtpT1NdIFtHUFVdIFNpbGVuY2Ugd2FybmluZyBhYm91dCBjb20u
YXBwbGUuYXVkaW8uQXVkaW9Db21wb25lbnRSZWdpc3RyYXIgaW4gdGhlIFdlYkNvbnRlbnQgcHJv
Y2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IDVjMDEzNjllYWMzNDc1YzQ1ODI5OTlh
OGQ1ZjdiMWJlMWFmMzliY2MuLmM1MjMxNjBlZjkyZGJlZDA4Y2I1ZTI4MGY4MGQ0ZjA3NWRhM2Y0
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTMzMiw3ICszMzIsNyBAQCBPcHRpb25h
bDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRl
U2hhcmVkTWVtb3J5Rm9yRwogICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdU
Rk1vdmUoaGFuZGxlKSwgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPyBtX2dldEltYWdlRGF0
YVNoYXJlZE1lbW9yeS0+c2l6ZSgpIDogMCB9OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0
ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMzQ4
LDcgKzM0OCw3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0
SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YShzaXpl
X3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo
b3JlRm9yR2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDc0OGM0YTJkMzQ1ODNhN2VhOWRiYTcxODI0
MDQyYjFiYjI0ZWY4ZWUuLjRlNDg5ZjRlNDgwNTQzNTJjNmUxODE4OGJlYzljZWZlOWI0ODFmY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMTIzLDkgKzEyMyw5IEBAIHByaXZhdGU6CiAgICAg
Ly8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCB3YWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nl
c3NXYWtldXBNZXNzYWdlQXJndW1lbnRzJik7Ci0gICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CiAgICAgdm9pZCBz
ZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6
OlNlbWFwaG9yZSYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4m
Jik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURh
dGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CiAgICAgdm9p
ZCBkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7CiAgICAgdm9pZCBnZXREYXRhVVJM
Rm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwog
ICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGFlMjMzN2NjNzQ1MzA3NmNm
NjZiNmRjYTMzMDMxYTc3ODZmYjdhMGMuLjkwNjRjODIyN2UwODY1MWM4NTQ1OTUwYzM5YjE3NTg2
Mjk1NjdhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0y
NSw5ICsyNSw5IEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBD
cmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5
RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVu
dHMgYXJndW1lbnRzKQotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXpl
X3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUp
IFN5bmNocm9ub3VzCisgICAgVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHVpbnQz
Ml90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxl
KSBTeW5jaHJvbm91cwogICAgIFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSgpIC0+IChJUEM6OlNl
bWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCi0gICAgVXBkYXRlU2hhcmVkTWVtb3J5QW5k
U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBT
eW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwogICAgIERl
c3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1
ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50
OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFn
ZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaAppbmRleCBlN2JhYzYzNDQ2NWQ3Y2Q4OWM1N2M2YWM4
NDFiZjA2ZTdjYzZkY2FlLi44YzIzMTc3MzA1MWQ0NGIyZGI4YmUwY2M5M2YwM2I1ZWYwNGIyODcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0FycmF5Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC02Niw2ICs2Nyw3IEBA
IHRlbXBsYXRlPD4gSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgVVJMCiB0ZW1wbGF0ZTw+IEpTQzo6SlNWYWx1ZSBqc1ZhbHVl
Rm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiYpOwogCiB0ZW1wbGF0ZTw+IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9y
RGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIElQQzo6U2VtYXBob3Jl
JiYpOwordGVtcGxhdGU8PiBKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
JiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYXJp
dGhtZXRpYzxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiBKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCA1NjFj
YTZmMTQxNGY1OGUwMjcyOGUwZDJhNGIyNjMwMGVkMDMyMDQ2Li45ZWZhNTM3MzVkOTUwMjAwNDdi
MTcxZTlhNjY4OWZiMjI0YWIyNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtNjcsOSArNjcsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgSlNPYmplY3RSZWYgY3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZik7Ci0K
ICAgICBzdGF0aWMgSlNJUENTZW1hcGhvcmUqIHRvV3JhcHBlZChKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYpOwogCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdCB7
IG1fc2VtYXBob3JlLmVuY29kZShlbmNvZGVyKTsgfQogICAgIElQQzo6U2VtYXBob3JlIGV4Y2hh
bmdlKElQQzo6U2VtYXBob3JlJiYgc2VtYXBob3JlID0geyB9KQogICAgIHsKICAgICAgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zZW1hcGhvcmUsIFdURk1vdmUoc2VtYXBob3JlKSk7CkBAIC05
Myw2ICs5Myw0OSBAQCBwcml2YXRlOgogICAgIElQQzo6U2VtYXBob3JlIG1fc2VtYXBob3JlOwog
fTsKIAorY2xhc3MgSlNTaGFyZWRNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxKU1NoYXJlZE1l
bW9yeT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SlNTaGFyZWRNZW1vcnk+IGNyZWF0ZShz
aXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTU2hhcmVk
TWVtb3J5KHNpemUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPEpTU2hhcmVkTWVtb3J5PiBj
cmVhdGUoUmVmPFNoYXJlZE1lbW9yeT4mJiBzaGFyZWRNZW1vcnkpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBKU1NoYXJlZE1lbW9yeShXVEZNb3ZlKHNoYXJlZE1lbW9yeSkp
KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5LT5z
aXplKCk7IH0KKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBjcmVhdGVIYW5kbGUoU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uKTsKKworICAgIEpTT2JqZWN0UmVmIGNyZWF0ZUpTV3JhcHBlcihKU0Nv
bnRleHRSZWYpOworICAgIHN0YXRpYyBKU1NoYXJlZE1lbW9yeSogdG9XcmFwcGVkKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CisKK3ByaXZhdGU6CisgICAgSlNTaGFyZWRNZW1vcnkoc2l6ZV90
IHNpemUpCisgICAgICAgIDogbV9zaGFyZWRNZW1vcnkoU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShz
aXplKSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKyAg
ICB9CisKKyAgICBKU1NoYXJlZE1lbW9yeShSZWY8U2hhcmVkTWVtb3J5PiYmIHNoYXJlZE1lbW9y
eSkKKyAgICAgICAgOiBtX3NoYXJlZE1lbW9yeShXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHN0
YXRpYyBKU1NoYXJlZE1lbW9yeSogdW53cmFwKEpTT2JqZWN0UmVmKTsKKyAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAgIHN0YXRpYyB2b2lk
IGZpbmFsaXplKEpTT2JqZWN0UmVmKTsKKworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0
aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJlYWRCeXRl
cyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiB3cml0ZUJ5dGVzKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7Cit9OworCiBj
bGFzcyBKU0lQQzsKIAogY2xhc3MgSlNNZXNzYWdlTGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgSVBD
OjpDb25uZWN0aW9uOjpNZXNzYWdlT2JzZXJ2ZXIgewpAQCAtMTQ1LDcgKzE4OCw5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwog
CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlU2VtYXBob3JlKEpTQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAg
IHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVNoYXJlZE1lbW9yeShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAorICAg
IHN0YXRpYyBKU1ZhbHVlUmVmIHZtUGFnZVNpemUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
SlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAgICAgc3RhdGljIEpTVmFsdWVS
ZWYgdmlzaXRlZExpbmtTdG9yZUlEKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5n
UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdlYlBh
Z2VQcm94eUlEKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHNlc3Npb25JRChKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
QEAgLTE2Niw2ICsyMTEsMTkgQEAgc3RhdGljIEpTVmFsdWVSZWYgY3JlYXRlVHlwZUVycm9yKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0dXJuIHRv
UmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksIG1lc3NhZ2UpKTsKIH0KIAor
c3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBjb252ZXJ0VG9VaW50NjQoSlNDOjpKU1ZhbHVlIGpz
VmFsdWUpCit7CisgICAgaWYgKGpzVmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUg
dmFsdWUgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CisgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdHJ1
bmModmFsdWUpICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBpZiAoanNWYWx1ZS5pc0JpZ0ludCgpKQor
ICAgICAgICByZXR1cm4gSlNDOjpKU0JpZ0ludDo6dG9CaWdVSW50NjQoanNWYWx1ZSk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwogSlNPYmplY3RSZWYgSlNJUENTZW1hcGhvcmU6OmNy
ZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOwpAQCAtMjI5LDEzICsyODcsMTMgQEAgSlNWYWx1ZVJlZiBK
U0lQQ1NlbWFwaG9yZTo6c2lnbmFsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYKIHsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwog
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICBhdXRv
IGlzSVBDU2VtYXBob3JlID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVj
dCkpOwotICAgIGlmICghaXNJUENTZW1hcGhvcmUpIHsKKyAgICBhdXRvIGpzSVBDU2VtYXBob3Jl
ID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOworICAgIGlmICgh
anNJUENTZW1hcGhvcmUpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihj
b250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICBpc0lQQ1NlbWFwaG9yZS0+bV9zZW1hcGhvcmUu
c2lnbmFsKCk7CisgICAganNJUENTZW1hcGhvcmUtPm1fc2VtYXBob3JlLnNpZ25hbCgpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtMjQ0LDggKzMw
Miw4IEBAIEpTVmFsdWVSZWYgSlNJUENTZW1hcGhvcmU6OndhaXRGb3IoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlCiB7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gdG9KUyhjb250ZXh0KTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVj
dC0+dm0oKSk7Ci0gICAgYXV0byBpc0lQQ1NlbWFwaG9yZSA9IG1ha2VSZWZQdHIodG9XcmFwcGVk
KGNvbnRleHQsIHRoaXNPYmplY3QpKTsKLSAgICBpZiAoIWlzSVBDU2VtYXBob3JlKSB7CisgICAg
YXV0byBqc0lQQ1NlbWFwaG9yZSA9IG1ha2VSZWZQdHIodG9XcmFwcGVkKGNvbnRleHQsIHRoaXNP
YmplY3QpKTsKKyAgICBpZiAoIWpzSVBDU2VtYXBob3JlKSB7CiAgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQpAQCAtMjY3LDExICszMjUs
MjE0IEBAIEpTVmFsdWVSZWYgSlNJUENTZW1hcGhvcmU6OndhaXRGb3IoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IGlzSVBDU2Vt
YXBob3JlLT5tX3NlbWFwaG9yZS53YWl0Rm9yKHRpbWVvdXQpOworICAgIGF1dG8gcmVzdWx0ID0g
anNJUENTZW1hcGhvcmUtPm1fc2VtYXBob3JlLndhaXRGb3IodGltZW91dCk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHJlc3VsdCk7CiB9CiAKK1NoYXJlZE1lbW9y
eTo6SGFuZGxlIEpTU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwor
ICAgIG1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBwcm90ZWN0aW9uKTsKKyAg
ICByZXR1cm4gaGFuZGxlOworfQorCitKU09iamVjdFJlZiBKU1NoYXJlZE1lbW9yeTo6Y3JlYXRl
SlNXcmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgIEpTT2JqZWN0UmVmIHdyYXBwZXJPYmplY3QgPSBKU09iamVj
dE1ha2UodG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KSwgd3JhcHBlckNsYXNzKCksIHRoaXMpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9
CisKK0pTQ2xhc3NSZWYgSlNTaGFyZWRNZW1vcnk6OndyYXBwZXJDbGFzcygpCit7CisgICAgc3Rh
dGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpzQ2xhc3MpIHsKKyAgICAgICAgSlND
bGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAg
ICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJTaGFyZWRNZW1vcnkiOworICAgICAgICBkZWZp
bml0aW9uLnBhcmVudENsYXNzID0gbnVsbHB0cjsKKyAgICAgICAgZGVmaW5pdGlvbi5zdGF0aWNW
YWx1ZXMgPSBudWxscHRyOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHN0
YXRpY0Z1bmN0aW9ucygpOworICAgICAgICBkZWZpbml0aW9uLmluaXRpYWxpemUgPSBpbml0aWFs
aXplOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0gZmluYWxpemU7CisgICAgICAgIGpz
Q2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGpz
Q2xhc3M7Cit9CisKK2lubGluZSBKU1NoYXJlZE1lbW9yeSogSlNTaGFyZWRNZW1vcnk6OnVud3Jh
cChKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU2hhcmVk
TWVtb3J5Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworfQorCitKU1NoYXJlZE1lbW9y
eSogSlNTaGFyZWRNZW1vcnk6OnRvV3JhcHBlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwgIXZhbHVlIHx8ICFKU1ZhbHVlSXNP
YmplY3RPZkNsYXNzKGNvbnRleHQsIHZhbHVlLCB3cmFwcGVyQ2xhc3MoKSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiB1bndyYXAoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IHZhbHVlLCAwKSk7Cit9CisKK3ZvaWQgSlNTaGFyZWRNZW1vcnk6OmluaXRpYWxpemUoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdW53cmFwKG9iamVjdCktPnJlZigp
OworfQorCit2b2lkIEpTU2hhcmVkTWVtb3J5OjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
Cit7CisgICAgdW53cmFwKG9iamVjdCktPmRlcmVmKCk7Cit9CisKK2NvbnN0IEpTU3RhdGljRnVu
Y3Rpb24qIEpTU2hhcmVkTWVtb3J5OjpzdGF0aWNGdW5jdGlvbnMoKQoreworICAgIHN0YXRpYyBj
b25zdCBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0geworICAgICAgICB7ICJyZWFkQnl0
ZXMiLCByZWFkQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAid3JpdGVCeXRlcyIsIHdyaXRlQnl0
ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfSwKKyAgICAgICAgeyAwLCAwLCAwIH0KKyAgICB9OworICAgIHJldHVybiBmdW5j
dGlvbnM7Cit9CisKK0pTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OnJlYWRCeXRlcyhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1NoYXJlZE1lbW9yeSA9IG1ha2VSZWZQdHIodG9X
cmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzU2hhcmVkTWVtb3J5KSB7
CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5
cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgfQorCisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IGpzU2hh
cmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOworCisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCkg
eworICAgICAgICBhdXRvIG9mZnNldFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudHNbMF0pKTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIGZpcnN0
IGFyZ3VtZW50IG11c3QgYmUgYSBieXRlIG9mZnNldCB0byByZWFkIl9zKTsKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoKm9mZnNldFZhbHVlID4gbGVuZ3RoKQorICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3Ro
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSAqb2Zmc2V0VmFsdWU7CisgICAg
ICAgIGxlbmd0aCAtPSBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAx
KSB7CisgICAgICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9i
YWxPYmplY3QsIGFyZ3VtZW50c1sxXSkpOworICAgICAgICBpZiAoIWxlbmd0aFZhbHVlKSB7Cisg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vj
b25kIGFyZ3VtZW50IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIl9zKTsKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKmxlbmd0aFZhbHVlIDwgbGVuZ3RoKQorICAgICAgICAgICAgbGVuZ3Ro
ID0gKmxlbmd0aFZhbHVlOworICAgIH0KKworICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBKU0M6OkFy
cmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGpzU2hhcmVkTWVtb3J5LT5t
X3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBKU0M6OkpTQXJy
YXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFy
aW5nTW9kZSgpKSkKKyAgICAgICAganNBcnJheUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICBpZiAoIWpz
QXJyYXlCdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250
ZXh0LCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgYXJyYXkgYnVmZmVyIGZvciB0aGUgcmVhZCBieXRl
cyJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7Cit9CisKK3N0cnVjdCBBcnJh
eUJ1ZmZlckRhdGEgeworICAgIHZvaWQqIGJ1ZmZlciB7IG51bGxwdHIgfTsKKyAgICBzaXplX3Qg
bGVuZ3RoIHsgMCB9OworfTsKKworc3RhdGljIEFycmF5QnVmZmVyRGF0YSBhcnJheUJ1ZmZlckRh
dGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVHlwZWRBcnJheVR5cGUgdHlw
ZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRp
b24pOworICAgIGlmICghb2JqZWN0UmVmKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdm9p
ZCogYnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAodHlwZSA9PSBrSlNUeXBlZEFycmF5VHlwZUFy
cmF5QnVmZmVyKQorICAgICAgICBidWZmZXIgPSBKU09iamVjdEdldEFycmF5QnVmZmVyQnl0ZXNQ
dHIoY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOworICAgIGVsc2UKKyAgICAgICAgYnVm
ZmVyID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZXNQdHIoY29udGV4dCwgb2JqZWN0UmVmLCBl
eGNlcHRpb24pOworCisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBzaXplX3QgbGVuZ3RoOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJyYXlUeXBlQXJyYXlC
dWZmZXIpCisgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3Ro
KGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIGxlbmd0
aCA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVMZW5ndGgoY29udGV4dCwgb2JqZWN0UmVmLCBl
eGNlcHRpb24pOworCisgICAgcmV0dXJuIHsgYnVmZmVyLCBsZW5ndGggfTsKK30KKworSlNWYWx1
ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgYXV0byBqc1NoYXJlZE1lbW9yeSA9IG1ha2VSZWZQdHIodG9XcmFwcGVkKGNvbnRleHQsIHRo
aXNPYmplY3QpKTsKKyAgICBpZiAoIWpzU2hhcmVkTWVtb3J5KSB7CisgICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0byB0
eXBlID0gYXJndW1lbnRDb3VudCA/IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikgOiBrSlNUeXBlZEFycmF5VHlwZU5vbmU7CisgICAgaWYg
KHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGFy
cmF5IGJ1ZmZlciBvciBhIHR5cGVkIGFycmF5Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gZGF0YSA9IGFycmF5QnVm
ZmVyRGF0YUZyb21WYWx1ZVJlZihjb250ZXh0LCB0eXBlLCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisgICAgaWYgKCFkYXRhLmJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJDb3VsZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIHNp
emVfdCBvZmZzZXQgPSAwOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKyAgICBz
aXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+
c2l6ZSgpOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMSkgeworICAgICAgICBhdXRvIG9mZnNl
dFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0p
KTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEg
Ynl0ZSBvZmZzZXQgdG8gd3JpdGUiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqb2Zmc2V0VmFsdWUg
Pj0gc2hhcmVkTWVtb3J5U2l6ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiT2Zmc2V0IGlzIHRvbyBiaWciX3MpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIG9m
ZnNldCA9ICpvZmZzZXRWYWx1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDIp
IHsKKyAgICAgICAgYXV0byBsZW5ndGhWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0b0pTKGdsb2Jh
bE9iamVjdCwgYXJndW1lbnRzWzJdKSk7CisgICAgICAgIGlmICghbGVuZ3RoVmFsdWUpIHsKKyAg
ICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSB0aGly
ZCBhcmd1bWVudCBtdXN0IGJlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUiX3MpOworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9
CisgICAgICAgIGlmICgqbGVuZ3RoVmFsdWUgPj0gc2hhcmVkTWVtb3J5U2l6ZSAtIG9mZnNldCB8
fCAqbGVuZ3RoVmFsdWUgPiBsZW5ndGgpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgaXMgdG9v
IGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gKmxlbmd0aFZhbHVlOworICAgIH0KKwor
ICAgIG1lbWNweShzdGF0aWNfY2FzdDx1aW50OF90Kj4oanNTaGFyZWRNZW1vcnktPm1fc2hhcmVk
TWVtb3J5LT5kYXRhKCkpICsgb2Zmc2V0LCBkYXRhLmJ1ZmZlciwgbGVuZ3RoKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogSlNDbGFzc1JlZiBKU0lQ
Qzo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOwpAQCAt
MzE4LDYgKzU3OSw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDOjpzdGF0aWNGdW5j
dGlvbnMoKQogICAgICAgICB7ICJzZW5kTWVzc2FnZSIsIHNlbmRNZXNzYWdlLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAg
ICAgICAgIHsgInNlbmRTeW5jTWVzc2FnZSIsIHNlbmRTeW5jTWVzc2FnZSwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAg
ICAgICB7ICJjcmVhdGVTZW1hcGhvcmUiLCBjcmVhdGVTZW1hcGhvcmUsIGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAg
ICAgeyAiY3JlYXRlU2hhcmVkTWVtb3J5IiwgY3JlYXRlU2hhcmVkTWVtb3J5LCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAg
ICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gZnVuY3Rpb25zOwpAQCAtMzI2
LDYgKzU4OCw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDOjpzdGF0aWNGdW5jdGlv
bnMoKQogY29uc3QgSlNTdGF0aWNWYWx1ZSogSlNJUEM6OnN0YXRpY1ZhbHVlcygpCiB7CiAgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUgdmFsdWVzW10gPSB7CisgICAgICAgIHsgInZtUGFn
ZVNpemUiLCB2bVBhZ2VTaXplLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgInZpc2l0ZWRMaW5rU3Rv
cmVJRCIsIHZpc2l0ZWRMaW5rU3RvcmVJRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJmcmFtZUlE
IiwgZnJhbWVJRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJwYWdlSUQiLCBwYWdlSUQsIDAsIGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfSwKQEAgLTMzNywxOSArNjAwLDYgQEAgY29uc3QgSlNTdGF0aWNWYWx1ZSogSlNJUEM6OnN0
YXRpY1ZhbHVlcygpCiAgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHVp
bnQ2NF90PiBjb252ZXJ0VG9VaW50NjQoSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCi17Ci0gICAgaWYg
KGpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFz
TnVtYmVyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdHJ1bmModmFsdWUpICE9IHZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIH0KLSAgICBpZiAoanNWYWx1ZS5pc0JpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlND
OjpKU0JpZ0ludDo6dG9CaWdVSW50NjQoanNWYWx1ZSk7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQogc3RhdGljIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IHByb2Nlc3NUYXJnZXRGcm9t
QXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZh
bHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKQEAgLTQzOSwyNyArNjg5LDExIEBA
IHN0YXRpYyBib29sIGVuY29kZVR5cGVkQXJyYXkoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1CiB7CiAgICAgQVNTRVJUKHR5cGUgIT0ga0pTVHlwZWRB
cnJheVR5cGVOb25lKTsKIAotICAgIGF1dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwotICAgIGlmICghb2JqZWN0UmVmKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2b2lkKiBidWZmZXI7Ci0gICAgaWYgKHR5cGUgPT0ga0pT
VHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZlcikKLSAgICAgICAgYnVmZmVyID0gSlNPYmplY3RHZXRB
cnJheUJ1ZmZlckJ5dGVzUHRyKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKLSAgICBl
bHNlCi0gICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVzUHRyKGNvbnRl
eHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemU7Ci0gICAgaWYgKHR5cGUgPT0ga0pT
VHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZlcikKLSAgICAgICAgYnVmZmVyU2l6ZSA9IEpTT2JqZWN0
R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsK
LSAgICBlbHNlCi0gICAgICAgIGJ1ZmZlclNpemUgPSBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRl
TGVuZ3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIWJ1ZmZlclNp
emUpCisgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQs
IHR5cGUsIHZhbHVlUmVmLCBleGNlcHRpb24pOworICAgIGlmICghZGF0YS5idWZmZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDEpOwor
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgsIDEpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC01MTcsMTEgKzc1MSwxMCBAQCBPcHRpb25hbDxPYmplY3RJZGVudGlmaWVyPE9i
amVjdElkZW50aWZpZXJUeXBlPj4gZ2V0T2JqZWN0SWRlbnRpZmllckZyb21Qcm9wZXJ0eQogICAg
IGF1dG8ganNQcm9wZXJ0eVZhbHVlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSkp
OwogICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICBpZiAoanNQcm9wZXJ0eVZhbHVlLmlzQmlnSW50KCkpIAotICAgICAgICByZXR1cm4g
bWFrZU9iamVjdElkZW50aWZpZXI8T2JqZWN0SWRlbnRpZmllclR5cGU+KEpTQzo6SlNCaWdJbnQ6
OnRvQmlnVUludDY0KGpzUHJvcGVydHlWYWx1ZSkpOwotICAgIGlmIChqc1Byb3BlcnR5VmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RJZGVudGlmaWVyPE9iamVjdElk
ZW50aWZpZXJUeXBlPihqc1Byb3BlcnR5VmFsdWUuYXNOdW1iZXIoKSk7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZlcnRUb1VpbnQ2NChqc1Byb3BlcnR5
VmFsdWUpOworICAgIGlmICghbnVtYmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiBtYWtlT2JqZWN0SWRlbnRpZmllcjxPYmplY3RJZGVudGlmaWVyVHlwZT4oKm51
bWJlcik7CiB9CiAKIHN0YXRpYyBib29sIGVuY29kZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRDcmVh
dGlvblBhcmFtZXRlcnMoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0LCBKU0M6OkNhdGNoU2NvcGUm
IHNjb3BlKQpAQCAtNTUzLDYgKzc4Niw1MyBAQCBzdGF0aWMgYm9vbCBlbmNvZGVSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKElQQzo6RW5jb2RlciYgZW5jb2RlcgogfQog
I2VuZGlmCiAKK3N0YXRpYyBib29sIGVuY29kZVNoYXJlZE1lbW9yeShJUEM6OkVuY29kZXImIGVu
Y29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCog
anNPYmplY3QsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUpCit7CisgICAgYXV0byBqc1NoYXJlZE1l
bW9yeVZhbHVlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksICJ2YWx1ZSJfcykpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8ganNTaGFyZWRN
ZW1vcnkgPSBtYWtlUmVmUHRyKEpTU2hhcmVkTWVtb3J5Ojp0b1dyYXBwZWQodG9SZWYoZ2xvYmFs
T2JqZWN0KSwgdG9SZWYoanNTaGFyZWRNZW1vcnlWYWx1ZSkpKTsKKyAgICBpZiAoIWpzU2hhcmVk
TWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCBkYXRhU2l6ZSA9
IGpzU2hhcmVkTWVtb3J5LT5zaXplKCk7CisKKyAgICBhdXRvIGpzRGF0YVNpemVWYWx1ZSA9IGpz
T2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xv
YmFsT2JqZWN0LT52bSgpLCAiZGF0YVNpemUiX3MpKTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWpzRGF0YVNpemVWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CisgICAgICAgIGlmIChhdXRvIGRhdGFTaXplVmFsdWUgPSBjb252ZXJ0VG9V
aW50NjQoanNEYXRhU2l6ZVZhbHVlKSkKKyAgICAgICAgICAgIGRhdGFTaXplID0gKmRhdGFTaXpl
VmFsdWU7CisgICAgfQorCisgICAgYXV0byBqc1Byb3RlY3Rpb25WYWx1ZSA9IGpzT2JqZWN0LT5n
ZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0
LT52bSgpLCAicHJvdGVjdGlvbiJfcykpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChqc1Byb3RlY3Rpb25WYWx1ZS5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBwcm90ZWN0aW9uVmFsdWUgPSBq
c1Byb3RlY3Rpb25WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcHJvdGVjdGlv
biA9IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdyaXRlOworICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0aW9uVmFsdWUsICJyZWFkb25seSIpKQorICAg
ICAgICBwcm90ZWN0aW9uID0gU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seTsKKyAg
ICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0aW9uVmFsdWUs
ICJyZWFkd3JpdGUiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW5jb2RlciA8PCBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IGpzU2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUocHJv
dGVjdGlvbiksIGRhdGFTaXplIH07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IGVuY29kZVNlbWFwaG9yZShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIEpTQzo6Q2F0Y2hTY29wZSYg
c2NvcGUpCit7CisgICAgYXV0byBqc0lQQ1NlbWFwaG9yZSA9IG1ha2VSZWZQdHIoSlNJUENTZW1h
cGhvcmU6OnRvV3JhcHBlZCh0b1JlZihnbG9iYWxPYmplY3QpLCB0b1JlZihqc1ZhbHVlKSkpOwor
ICAgIGlmICghanNJUENTZW1hcGhvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGpz
SVBDU2VtYXBob3JlLT5lbmNvZGUoZW5jb2Rlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0
YXRpYyBib29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2RlciYsIEpTSVBDJiwgSlNDb250ZXh0
UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiBzdHJ1Y3QgVmVjdG9y
RW5jb2RlSGVscGVyIHsKQEAgLTY3NSw2ICs5NTUsMTQgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJn
dW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBj
b24KICAgICB9CiAjZW5kaWYKIAorICAgIGlmICh0eXBlID09ICJTaGFyZWRNZW1vcnkiKSB7Cisg
ICAgICAgIGlmICghZW5jb2RlU2hhcmVkTWVtb3J5KGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNP
YmplY3QsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgU2hhcmVkTWVtb3J5Il9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBpZiAodHlwZSA9PSAiRnJhbWVJbmZvRGF0YSIpIHsKICAgICAgICAgYXV0byB3ZWJG
cmFtZSA9IG1ha2VSZWZQdHIoanNJUEMud2ViRnJhbWUoKSk7CiAgICAgICAgIGlmICghd2ViRnJh
bWUpIHsKQEAgLTY4OSw2ICs5NzcsMTQgQEAgc3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAgICBp
ZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICh0
eXBlID09ICJTZW1hcGhvcmUiKSB7CisgICAgICAgIGlmICghZW5jb2RlU2VtYXBob3JlKGVuY29k
ZXIsIGdsb2JhbE9iamVjdCwganNWYWx1ZSwgc2NvcGUpKSB7CisgICAgICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY29udmVydCBTZW1hcGhv
cmUiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKwogICAgIGlmICh0eXBlID09ICJWZWN0b3IiKSB7CiAgICAgICAg
IGlmICghanNWYWx1ZS5pc09iamVjdCgpIHx8ICFqc1ZhbHVlLmluaGVyaXRzPEpTQzo6SlNBcnJh
eT4odm0pKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRl
eHQsICJWZWN0b3IgdmFsdWUgbXVzdCBiZSBhbiBhcnJheSJfcyk7CkBAIC05NjUsNiArMTI2MSwz
NiBAQCBKU1ZhbHVlUmVmIEpTSVBDOjpjcmVhdGVTZW1hcGhvcmUoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZgogICAgIHJldHVybiBKU0lQQ1NlbWFwaG9yZTo6
Y3JlYXRlKCktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0KTsKIH0KIAorSlNWYWx1ZVJlZiBKU0lQ
Qzo6Y3JlYXRlU2hhcmVkTWVtb3J5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIXRv
V3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSkgeworICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBhdXRvIHNpemUgPSBhcmd1
bWVudENvdW50ID8gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNb
MF0pKSA6IE9wdGlvbmFsPHVpbnQ2NF90PiB7IH07CisgICAgaWYgKCFzaXplKSB7CisgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk11c3Qgc3BlY2lmeSB0aGUg
c2l6ZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gSlNTaGFyZWRNZW1vcnk6OmNyZWF0ZSgqc2l6ZSktPmNyZWF0
ZUpTV3JhcHBlcihjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6dm1QYWdlU2l6ZShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGpzSVBDID0gbWFrZVJlZlB0cih0
b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOworICAgIGlmICghanNJUEMpIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHBhZ2VTaXplKCkpOworfQorCiBK
U1ZhbHVlUmVmIEpTSVBDOjp2aXNpdGVkTGlua1N0b3JlSUQoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7CiAgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4dCwgdGhpc09iamVjdCwgZXhjZXB0
aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgewpAQCAtMTIzOSw2ICsxNTY1LDQwIEBAIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBJCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAordGVtcGxhdGU8PiBKU0M6
OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYmIHZhbHVl
KQoreworICAgIHVzaW5nIFNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OworICAg
IHVzaW5nIFByb3RlY3Rpb24gPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjsKKwor
ICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNvbnN0cnVjdEVt
cHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0eXBl
Il9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sICJTaGFyZWRNZW1vcnkiKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworCisgICAgYXV0byBw
cm90ZWN0aW9uID0gUHJvdGVjdGlvbjo6UmVhZFdyaXRlOworICAgIGF1dG8gc2hhcmVkTWVtb3J5
ID0gU2hhcmVkTWVtb3J5OjptYXAodmFsdWUuaGFuZGxlLCBwcm90ZWN0aW9uKTsKKyAgICBpZiAo
IXNoYXJlZE1lbW9yeSkgeworICAgICAgICBwcm90ZWN0aW9uID0gUHJvdGVjdGlvbjo6UmVhZE9u
bHk7CisgICAgICAgIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKHZhbHVlLmhhbmRs
ZSwgcHJvdGVjdGlvbik7CisgICAgICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICAgICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZSgpOworICAgIH0KKworICAgIGF1dG8ganNWYWx1ZSA9IHRvSlMo
Z2xvYmFsT2JqZWN0LCBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpjcmVh
dGUoc2hhcmVkTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpLT5jcmVhdGVKU1dyYXBwZXIodG9SZWYo
Z2xvYmFsT2JqZWN0KSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIGpzVmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkYXRhU2l6ZSJfcyksIEpTQzo6
SlNWYWx1ZSh2YWx1ZS5kYXRhU2l6ZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTQzo6SlNWYWx1ZSgpKTsKKworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJwcm90ZWN0aW9uIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxT
dHJpbmcodm0sIHByb3RlY3Rpb24gPT0gUHJvdGVjdGlvbjo6UmVhZFdyaXRlID8gIlJlYWRXcml0
ZSIgOiAiUmVhZE9ubHkiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBD
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDZmNTQ0OTBkYjc4YzQ0NTA3ODUxYTA5Mjk0MWM5ZDVkNTk1OGI2Y2YuLjMxMmY4OGUy
Njg2ZTZiYTFjNTAzYTc4NjdhMGQzOGIxMjk3NzdkODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMS0wNS0wOCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBJUEMgdGVzdGluZyBB
UEkgc2hvdWxkIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2VuZCBhbmQgcmVjZWl2ZSBzaGFyZWQgbWVt
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCB0ZXN0cyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIHNoYXJlZCBtZW1vcnkgaW4gdGhlIElQ
QyB0ZXN0aW5nIEFQSS4KKyAgICAgICAgQWxzbyBhZGRlZCBhIHRlc3QgdG8gc2VuZCBzZW1hcGhv
cmUsIHdoaWNoIHdhcyBtaXNzaW5nIGluIHIyNzcxOTkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06CisgICAgICAgIChJUENUZXN0
aW5nQVBJLkNhblJlY2VpdmVTaGFyZWRNZW1vcnkpOiBBZGRlZC4KKyAgICAgICAgKElQQ1Rlc3Rp
bmdBUEkuQ2FuQ3JlYXRlU2hhcmVkTWVtb3J5KTogQWRkZWQuCisgICAgICAgIChJUENUZXN0aW5n
QVBJLkNhblNlbmRTZW1hcGhwcmUpOiBBZGRlZCBhZnRlciByMjc3MTk5LgorICAgICAgICAoSVBD
VGVzdGluZ0FQSS5DYW5TZW5kU2hhcmVkTWVtb3J5KTogQWRkZWQuCisKIDIwMjEtMDUtMDcgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQb3J0IEZpbGVTeXN0ZW06
OnBhdGhHZXRGaWxlTmFtZSgpICYgRmlsZXN5c3RlbTo6ZGlyZWN0b3J5TmFtZSgpIHRvIHN0ZDo6
ZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JUENUZXN0aW5nQVBJLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JUENUZXN0aW5nQVBJLm1tCmluZGV4IDljNzA5NDdjMGEyYzg5ZjdkOWEyMWJkYWNlNTdj
N2Y4MDc1Nzg0OWEuLmQxYmU5OWE4Y2E4YjJiZmMzZDY1YWUzODJiNzNhY2FiNDg3NTU2YzkgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGlu
Z0FQSS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rl
c3RpbmdBUEkubW0KQEAgLTIzMCw2ICsyMzAsMzIgQEAgVEVTVChJUENUZXN0aW5nQVBJLCBDYW5S
ZWNlaXZlSVBDU2VtYXBob3JlKQogCiAgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRG
OFN0cmluZ10sICIxOlNlbWFwaG9yZTpmYWxzZSIpOwogfQorCitURVNUKElQQ1Rlc3RpbmdBUEks
IENhblJlY2VpdmVTaGFyZWRNZW1vcnkpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gY3JlYXRlV2Vi
Vmlld1dpdGhJUENUZXN0aW5nQVBJKCk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgYXV0byogaHRtbCA9IEBSIkhUTUwoPCFE
T0NUWVBFIGh0bWw+Cis8c2NyaXB0PgorSVBDLnNlbmRNZXNzYWdlKCdHUFUnLCAwLCBJUEMubWVz
c2FnZXMuR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc19DcmVhdGVSZW5kZXJpbmdCYWNrZW5kLm5h
bWUsCisgICAgW3t0eXBlOiAnUmVtb3RlUmVuZGVyaW5nQmFja2VuZENyZWF0aW9uUGFyYW1ldGVy
cycsICdpZGVudGlmaWVyJzogMTIzLCBzZW1hcGhvcmU6IElQQy5jcmVhdGVTZW1hcGhvcmUoKSwg
J3BhZ2VQcm94eUlEJzogSVBDLndlYlBhZ2VQcm94eUlELCAncGFnZUlEJzogSVBDLnBhZ2VJRH1d
KTsKK2NvbnN0IHJlc3VsdCA9IElQQy5zZW5kU3luY01lc3NhZ2UoJ0dQVScsIDEyMywgSVBDLm1l
c3NhZ2VzLlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRfVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1h
Z2VEYXRhLm5hbWUsIDEwMCwgW3t0eXBlOiAndWludDMyX3QnLCB2YWx1ZTogOH1dKTsKK2FsZXJ0
KHJlc3VsdC5hcmd1bWVudHMubGVuZ3RoKTsKKzwvc2NyaXB0PilIVE1MIjsKKworICAgIGRvbmUg
PSBmYWxzZTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6aHRtbF07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9FUShb
YWxlcnRNZXNzYWdlIGludFZhbHVlXSwgMSk7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJmaXJzdFJlcGx5ID0gcmVzdWx0LmFyZ3VtZW50
c1swXTsgZmlyc3RSZXBseS50eXBlIl0uVVRGOFN0cmluZywgIlNoYXJlZE1lbW9yeSIpOworICAg
IEVYUEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmly
c3RSZXBseS5wcm90ZWN0aW9uIl0uVVRGOFN0cmluZywgIlJlYWRPbmx5Iik7CisgICAgRVhQRUNU
X1NUUkVRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJBcnJheS5mcm9t
KG5ldyBVaW50OEFycmF5KGZpcnN0UmVwbHkudmFsdWUucmVhZEJ5dGVzKDAsIDgpKSkudG9TdHJp
bmcoKSJdLlVURjhTdHJpbmcsICIwLDAsMCwwLDAsMCwwLDAiKTsKKworfQogI2VuZGlmCiAKIFRF
U1QoSVBDVGVzdGluZ0FQSSwgQ2FuQ3JlYXRlSVBDU2VtYXBob3JlKQpAQCAtMjQ2LDYgKzI3Miw4
MyBAQCBURVNUKElQQ1Rlc3RpbmdBUEksIENhbkNyZWF0ZUlQQ1NlbWFwaG9yZSkKICAgICBFWFBF
Q1RfRkFMU0UoW2FsZXJ0TWVzc2FnZSBib29sVmFsdWVdKTsKIH0KIAorVEVTVChJUENUZXN0aW5n
QVBJLCBDYW5DcmVhdGVTaGFyZWRNZW1vcnkpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gY3JlYXRl
V2ViVmlld1dpdGhJUENUZXN0aW5nQVBJKCk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNl
dFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxzY3Jp
cHQ+Y29uc3Qgc2hhcmVkTWVtb3J5ID0gSVBDLmNyZWF0ZVNoYXJlZE1lbW9yeSg4KTsgYWxlcnQo
c2hhcmVkTWVtb3J5LnRvU3RyaW5nKCkpOzwvc2NyaXB0PiJdOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4
U3RyaW5nXSwgIltvYmplY3QgU2hhcmVkTWVtb3J5XSIpOworICAgIEVYUEVDVF9FUShbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAibmV3IEludDhBcnJheShzaGFyZWRNZW1v
cnkucmVhZEJ5dGVzKDApKVswXSJdLmludFZhbHVlLCAwKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNoYXJlZE1lbW9yeS53cml0ZUJ5dGVz
KG5ldyBJbnQ4QXJyYXkoWzEsIDIsIDQsIDgsIDE2LCAzMl0pKSJdLmludFZhbHVlLCAwKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIkFy
cmF5LmZyb20obmV3IEludDhBcnJheShzaGFyZWRNZW1vcnkucmVhZEJ5dGVzKDEsIDMpKSkudG9T
dHJpbmcoKSJdLlVURjhTdHJpbmcsICIyLDQsOCIpOworICAgIEVYUEVDVF9FUShbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAic2hhcmVkTWVtb3J5LndyaXRlQnl0ZXMobmV3
IEludDhBcnJheShbMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNl0pLCAyLCAzKSJdLmludFZh
bHVlLCAwKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIkFycmF5LmZyb20obmV3IEludDhBcnJheShzaGFyZWRNZW1vcnkucmVhZEJ5dGVz
KCkpKS50b1N0cmluZygpIl0uVVRGOFN0cmluZywgIjEsMiwxMDEsMTAyLDEwMywzMiwwLDAiKTsK
K30KKworVEVTVChJUENUZXN0aW5nQVBJLCBDYW5TZW5kU2VtYXBocHJlKQoreworICAgIGF1dG8g
d2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdXaXRoSVBDVGVzdGluZ0FQSSgpOworCisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGF1dG8q
IGh0bWwgPSBAUiJIVE1MKDwhRE9DVFlQRSBodG1sPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qg
YXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dDsKK2NvbnN0IGRlc3RpbmF0aW9uID0gYXVk
aW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTsKK2NvbnN0IHNlbWFwaG9y
ZSA9IElQQy5jcmVhdGVTZW1hcGhvcmUoKTsKK2NvbnN0IHJlc3VsdCA9IElQQy5zZW5kU3luY01l
c3NhZ2UoJ0dQVScsIDAsIElQQy5tZXNzYWdlcy5SZW1vdGVBdWRpb0Rlc3RpbmF0aW9uTWFuYWdl
cl9DcmVhdGVBdWRpb0Rlc3RpbmF0aW9uLm5hbWUsIDEwMCwKKyAgICBbe3R5cGU6ICdTdHJpbmcn
LCB2YWx1ZTogJ3NvbWUgZGV2aWNlJ30sCisgICAge3R5cGU6ICd1aW50MzJfdCcsIHZhbHVlOiBk
ZXN0aW5hdGlvbi5udW1iZXJPZklucHV0c30sCisgICAge3R5cGU6ICd1aW50MzJfdCcsIHZhbHVl
OiBkZXN0aW5hdGlvbi5jaGFubmVsQ291bnR9LAorICAgIHt0eXBlOiAnZmxvYXQnLCB2YWx1ZTog
YXVkaW9Db250ZXh0LnNhbXBsZVJhdGV9LCB7dHlwZTogJ2Zsb2F0JywgdmFsdWU6IGF1ZGlvQ29u
dGV4dC5zYW1wbGVSYXRlfSwKKyAgICB7dHlwZTogJ1NlbWFwaG9yZScsIHZhbHVlOiBzZW1hcGhv
cmV9XSk7CithbGVydChyZXN1bHQuYXJndW1lbnRzWzBdLnR5cGUpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+KUhUTUwiOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzpodG1sXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworCisgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICJ1aW50
NjRfdCIpOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCitURVNUKElQQ1Rlc3RpbmdBUEksIENh
blNlbmRTaGFyZWRNZW1vcnkpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld1dp
dGhJUENUZXN0aW5nQVBJKCk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0lQQ1Rl
c3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgYXV0byogaHRtbCA9IEBSIkhUTUwoPCFET0NUWVBF
IGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFyZWRNZW1vcnkgPSBJUEMuY3JlYXRl
U2hhcmVkTWVtb3J5KDgpOworc2hhcmVkTWVtb3J5LndyaXRlQnl0ZXMobmV3IFVpbnQ4QXJyYXko
QXJyYXkuZnJvbSgnaGVsbG8nKS5tYXAoKGNoYXIpID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpKTsK
K2NvbnN0IHJlc3VsdCA9IElQQy5zZW5kU3luY01lc3NhZ2UoJ1VJJywgMCwgSVBDLm1lc3NhZ2Vz
LldlYlBhc3RlYm9hcmRQcm94eV9TZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZS5uYW1lLCAxMDAs
IFsKKyAgICB7dHlwZTogJ1N0cmluZycsIHZhbHVlOiAnQXBwbGUgQ0ZQYXN0ZWJvYXJkIGdlbmVy
YWwnfSwge3R5cGU6ICdTdHJpbmcnLCB2YWx1ZTogJ3RleHQvcGxhaW4nfSwKKyAgICB7dHlwZTog
J1NoYXJlZE1lbW9yeScsIHZhbHVlOiBzaGFyZWRNZW1vcnksIHByb3RlY3Rpb246ICdSZWFkT25s
eSd9LCB7dHlwZTogJ2Jvb2wnLCB2YWx1ZTogMX0sIHt0eXBlOiAndWludDY0X3QnLCB2YWx1ZTog
SVBDLnBhZ2VJRH1dKTsKK2FsZXJ0KHJlc3VsdC5hcmd1bWVudHMubGVuZ3RoICsgJzonICsgSlNP
Ti5zdHJpbmdpZnkocmVzdWx0LmFyZ3VtZW50c1swXSkpOworPC9zY3JpcHQ+Cis8L2JvZHk+KUhU
TUwiOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzpodG1sXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICIxOntcInR5cGVc
IjpcImludDY0X3RcIixcInZhbHVlXCI6MH0iKTsKK30KKyNlbmRpZgorCiBURVNUKElQQ1Rlc3Rp
bmdBUEksIERlY29kZXNSZXBseUFyZ3VtZW50c0ZvclByb21wdCkKIHsKICAgICBhdXRvIHdlYlZp
ZXcgPSBjcmVhdGVXZWJWaWV3V2l0aElQQ1Rlc3RpbmdBUEkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428130</attachid>
            <date>2021-05-09 11:21:26 -0700</date>
            <delta_ts>2021-05-09 13:42:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225576-20210509112126.patch</filename>
            <type>text/plain</type>
            <size>41725</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA2ZGFlMjIyMjA4MGY0ODVm
OWJiZTEwNGQxODA0ZjNiNzhmZGNlYzMuLjA5NDNkZTI4YTc0ZmYyNzA0NTI0ZTEzNTVmZDY5YjY1
YjcwNTAyYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjEtMDUtMDggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3Vs
ZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlbmQgYW5kIHJlY2VpdmUgc2hhcmVkIG1lbW9yeQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NTc2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyB0aGUgY2FwYWJpbGl0eSB0byBzZW5kICYgcmVjZWl2ZSBzaGFyZWQgbWVtb3J5IGZvciBJUEMg
dGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgICAgSXQgYWRkcyBJUEMuY3JlYXRlU2hhcmVkTWVtb3J5
IHdoaWNoIGNyZWF0ZXMgYSBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRpbmcgYSBuZXdseQor
ICAgICAgICBhbGxvY2F0ZWQgSVBDLXNoYXJhYmxlIG1lbW9yeS4gSXQgaGFzIHJlYWRCeXRlcyBh
bmQgd3JpdGVCeXRlcyBtZXRob2RzLiBCb3RoIHRha2VzIG9mZnNldAorICAgICAgICBhbmQgdGhl
IG51bWJlciBvZiBieXRlcyB0byByZWFkIC8gd3JpdGUuIHJlYWRCeXRlcyB3aWxsIHJldHVybiBh
IG5ldyBBcnJheUJ1ZmZlciBhbmQKKyAgICAgICAgd3JpdGVCeXRlcyB0YWtlcyBhbiBBcnJheUJ1
ZmZlciBvciBhIHR5cGVkIGFycmF5IGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworICAgICAgICBJ
UEMuc2VuZE1lc3NhZ2UgYW5kIElQQy5zZW5kU3luY01lc3NhZ2Ugbm93IHN1cHBydHMgZW5jb2Rp
bmcgdGhpcyBTaGFyZWRNZW1vcnkgSmF2YVNjcmlwdAorICAgICAgICBvYmplY3QuIEl0IHN1cHBv
cnRzIHRoZSB0eXBlIHNwZWNpZmljIGFyZ3VtZW50cyBvZiAicHJvdGVjdGlvbiIgYW5kICJkYXRh
U2l6ZSIgaW4gYWRkaXRpb24KKyAgICAgICAgdG8gdGhlIHJlZ3VsYXIgInZhbHVlIiBwcm9wZXJ0
eSBmb3IgdGhlIFNoYXJlZE1lbW9yeSBvYmplY3QuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgdGhlIHN1cHBvcnQgZm9yIHNlbmRpbmcgU2VtYXBob3JlIG9iamVjdCBvdmVyIElQQyBj
cmVhdGVkIHZpYQorICAgICAgICBJUEMuY3JlYXRlU2VtYXBob3JlLCB3aGljaCB3YXMgc3VwcG9z
ZWQgdG8gYmUgYWRkZWQgaW4gcjI3NzE5OS4KKworICAgICAgICBGaW5hbGx5LCB0aGlzIHBhdGNo
IGFsc28gZXhwb3NlcyB0aGUgVk0gcGFnZSBzaXplIHZpYSBJUEMudm1QYWdlU2l6ZSB0byBmYWNp
bGl0YXRlCisgICAgICAgIHRoZSBhbGxvY2F0aW9uIG9mIGEgc2hhcmFibGUgbWVtb3J5IG9mIGFu
IGludGVyZXN0aW5nIHNpemUgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisKKyAgICAgICAgVGVzdHM6
IFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5SZWNlaXZlU2hhcmVkTWVtb3J5CisgICAg
ICAgICAgICAgICBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkuQ2FuQ3JlYXRlU2hhcmVkTWVt
b3J5CisgICAgICAgICAgICAgICBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkuQ2FuU2VuZFNl
bWFwaHByZQorICAgICAgICAgICAgICAgVGVzdFdlYktpdEFQSS5JUENUZXN0aW5nQVBJLkNhblNl
bmRTaGFyZWRNZW1vcnkKKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6IFVzZSB1aW50MzJfdCBpbnN0
ZWFkCisgICAgICAgIG9mIHNpemVfdCBzaW5jZSB0aGUgbGF0dGVyIGRlcGVuZHMgb24gdGhlIHNw
ZWNpZmljIGFyY2hpdGVjdHVyZSAoZS5nLiAzMi1iaXQgdnMgNjQtYml0KS4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBo
b3JlRm9yR2V0SW1hZ2VEYXRhKTogRGl0dG8uCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOiBEaXR0by4KKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmg6IEFkZGVkIGEgc3BlY2lhbGl6YXRpb24gZm9yIFNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTZW1h
cGhvcmU6OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU1NoYXJlZE1lbW9yeSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU1NoYXJlZE1lbW9yeTo6Y3JlYXRlKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQ
Q1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpzaXplKTogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OklQQ1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpKU1NoYXJlZE1lbW9yeSk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpjb252ZXJ0VG9VaW50NjQpOiBNb3Zl
ZCB1cCBoZXJlLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1NlbWFwaG9y
ZTo6c2lnbmFsKTogRml4ZWQgYSB0eXBvLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJ
OjpKU0lQQ1NlbWFwaG9yZTo6d2FpdEZvcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjpKU1NoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKTogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5OjpjcmVhdGVKU1dyYXBwZXIp
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6
OndyYXBwZXJDbGFzcyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpK
U1NoYXJlZE1lbW9yeTo6dW53cmFwKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OkpTU2hhcmVkTWVtb3J5Ojp0b1dyYXBwZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OmluaXRpYWxpemUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNTaGFyZWRNZW1vcnk6OmZpbmFsaXplKTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTU2hhcmVkTWVtb3J5Ojpz
dGF0aWNGdW5jdGlvbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6
SlNTaGFyZWRNZW1vcnk6OnJlYWRCeXRlcyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENU
ZXN0aW5nQVBJOjphcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYpOiBFeHRyYWN0ZWQgb3V0IG9m
IGVuY29kZVR5cGVkQXJyYXkuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTU2hh
cmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3Rp
bmdBUEk6OkpTSVBDOjpzdGF0aWNGdW5jdGlvbnMpOiBBZGRlZCBJUEMuY3JlYXRlU2hhcmVkTWVt
b3J5LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6c3RhdGljVmFsdWVz
KTogQWRkZWQgSVBDLnZtUGFnZVNpemUuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OmVuY29kZVR5cGVkQXJyYXkpOiAKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6Z2V0
T2JqZWN0SWRlbnRpZmllckZyb21Qcm9wZXJ0eSk6IE5vdyB1c2VzIGNvbnZlcnRUb1VpbnQ2NC4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6ZW5jb2RlU2hhcmVkTWVtb3J5KTogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmVuY29kZVNlbWFwaG9yZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjplbmNvZGVBcmd1bWVudCk6IEFk
ZGVkIHRoZSBzdXBwb3J0IGZvciBlbmNvZGluZyBTaGFyZWRNZW1vcnkgYW5kCisgICAgICAgIFNl
bWFwaG9yZS4KKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OmNyZWF0ZVNo
YXJlZE1lbW9yeSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQ
Qzo6dm1QYWdlU2l6ZSk6IEFkZGVkLgorICAgICAgICAoSVBDOjpqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50VmFsdWUpOiBBZGRlZC4gQ3JlYXRlcyBhIG5ld2x5IGFkZGVkIFNoYXJlZE1lbW9yeSBK
YXZhU2NyaXB0CisgICAgICAgIG9iamVjdCBmb3IgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUuIEl0
IGFsc28gZXhwb3NlcyBkYXRhU2l6ZSBhbmQgcHJvdGVjdGlvbiB2YWx1ZS4KKyAgICAgICAgVGhp
cyBkZWNvZGVyIGRldGVjdHMgd2hldGhlciB0aGUgc2hhcmVkIG1lbW9yeSBpcyB3cml0YWJsZSBv
ciBub3QgYnkgYXR0ZW1wdGluZyB0byBtYXAgaXQKKyAgICAgICAgYXMgUHJvdGVjdGlvbjo6UmVh
ZFdyaXRlIGFuZCBmYWxsaW5nIGJhY2sgdG8gUHJvdGVjdGlvbjo6UmVhZE9ubHkgaWYgdGhlIGZv
cm1lciBmYWlscy4KKwogMjAyMS0wNS0wNyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbaU9TXSBbR1BVXSBTaWxlbmNlIHdhcm5pbmcgYWJvdXQgY29tLmFw
cGxlLmF1ZGlvLkF1ZGlvQ29tcG9uZW50UmVnaXN0cmFyIGluIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCA1YzAxMzY5ZWFjMzQ3NWM0NTgyOTk5YThk
NWY3YjFiZTFhZjM5YmNjLi5jNTIzMTYwZWY5MmRiZWQwOGNiNWUyODBmODBkNGYwNzVkYTNmNDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0zMzIsNyArMzMyLDcgQEAgT3B0aW9uYWw8
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNo
YXJlZE1lbW9yeUZvckcKICAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZN
b3ZlKGhhbmRsZSksIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID8gbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnktPnNpemUoKSA6IDAgfTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVT
aGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTM0OCw3
ICszNDgsNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldElt
YWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbgogICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoc2l6ZV90
IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA3NDhjNGEyZDM0NTgzYTdlYTlkYmE3MTgyNDA0
MmIxYmIyNGVmOGVlLi40ZTQ4OWY0ZTQ4MDU0MzUyYzZlMTgxODhiZWM5Y2VmZTliNDgxZmNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTEyMyw5ICsxMjMsOSBAQCBwcml2YXRlOgogICAgIC8v
IE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Us
IFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNz
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwotICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0SW1hZ2VEYXRhKHNpemVfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAgIHZvaWQgc2Vt
YXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpT
ZW1hcGhvcmUmKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVG
b3JHZXRJbWFnZURhdGEoc2l6ZV90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYp
OworICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRh
KHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwogICAgIHZvaWQg
ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZv
ckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAg
ICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCBhZTIzMzdjYzc0NTMwNzZjZjY2
YjZkY2EzMzAzMWE3Nzg2ZmI3YTBjLi45MDY0YzgyMjdlMDg2NTFjODU0NTk1MGMzOWIxNzU4NjI5
NTY3YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMjUs
OSArMjUsOSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgQ3Jl
YXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJDb3Jl
OjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBXYWtlVXBBbmRBcHBseURp
c3BsYXlMaXN0KHN0cnVjdCBXZWJLaXQ6OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRz
IGFyZ3VtZW50cykKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90
IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBT
eW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJf
dCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkg
U3luY2hyb25vdXMKICAgICBTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNl
bWFwaG9yZUZvckdldEltYWdlRGF0YShzaXplX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3lu
Y2hyb25vdXMKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURh
dGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKICAgICBEZXN0
cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhf
dCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VC
dWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
IC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgKaW5kZXggZTdiYWM2MzQ0NjVkN2NkODljNTdjNmFjODQx
YmYwNmU3Y2M2ZGNhZS4uOGMyMzE3NzMwNTFkNDRiMmRiOGJlMGNjOTNmMDNiNWVmMDRiMjg3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJIYW5kbGVNZXNzYWdlLmgi
CisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNB
cnJheS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZmZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgpAQCAtNjYsNiArNjcsNyBAQCB0
ZW1wbGF0ZTw+IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlND
OjpKU0dsb2JhbE9iamVjdCosIFVSTAogdGVtcGxhdGU8PiBKU0M6OkpTVmFsdWUganNWYWx1ZUZv
ckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYmKTsKIAogdGVtcGxhdGU8PiBKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRl
Y29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBJUEM6OlNlbWFwaG9yZSYm
KTsKK3RlbXBsYXRlPD4gSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYm
KTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2FyaXRo
bWV0aWM8VD46OnZhbHVlPiogPSBudWxscHRyPgogSlNDOjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggNTYxY2E2
ZjE0MTRmNThlMDI3MjhlMGQyYTRiMjYzMDBlZDAzMjA0Ni4uZTU3MDdiMmI1YWVlN2M2NzVmYjE2
MDA4ZjM4MTA1OWFiZTQ0ZmVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKQEAgLTY3LDkgKzY3LDkgQEAgcHVibGljOgogICAg
IH0KIAogICAgIEpTT2JqZWN0UmVmIGNyZWF0ZUpTV3JhcHBlcihKU0NvbnRleHRSZWYpOwotCiAg
ICAgc3RhdGljIEpTSVBDU2VtYXBob3JlKiB0b1dyYXBwZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVl
UmVmKTsKIAorICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QgeyBt
X3NlbWFwaG9yZS5lbmNvZGUoZW5jb2Rlcik7IH0KICAgICBJUEM6OlNlbWFwaG9yZSBleGNoYW5n
ZShJUEM6OlNlbWFwaG9yZSYmIHNlbWFwaG9yZSA9IHsgfSkKICAgICB7CiAgICAgICAgIHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG1fc2VtYXBob3JlLCBXVEZNb3ZlKHNlbWFwaG9yZSkpOwpAQCAtOTMs
NiArOTMsNDcgQEAgcHJpdmF0ZToKICAgICBJUEM6OlNlbWFwaG9yZSBtX3NlbWFwaG9yZTsKIH07
CiAKK2NsYXNzIEpTU2hhcmVkTWVtb3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SlNTaGFyZWRNZW1v
cnk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEpTU2hhcmVkTWVtb3J5PiBjcmVhdGUoc2l6
ZV90IHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBKU1NoYXJlZE1l
bW9yeShzaXplKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxKU1NoYXJlZE1lbW9yeT4gY3Jl
YXRlKFJlZjxTaGFyZWRNZW1vcnk+JiYgc2hhcmVkTWVtb3J5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSlNTaGFyZWRNZW1vcnkoV1RGTW92ZShzaGFyZWRNZW1vcnkpKSk7
CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpOyB9CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgY3JlYXRlSGFuZGxlKFNoYXJl
ZE1lbW9yeTo6UHJvdGVjdGlvbik7CisKKyAgICBKU09iamVjdFJlZiBjcmVhdGVKU1dyYXBwZXIo
SlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMgSlNTaGFyZWRNZW1vcnkqIHRvV3JhcHBlZChKU0Nv
bnRleHRSZWYsIEpTVmFsdWVSZWYpOworCitwcml2YXRlOgorICAgIEpTU2hhcmVkTWVtb3J5KHNp
emVfdCBzaXplKQorICAgICAgICA6IG1fc2hhcmVkTWVtb3J5KCpTaGFyZWRNZW1vcnk6OmFsbG9j
YXRlKHNpemUpKQorICAgIHsgfQorCisgICAgSlNTaGFyZWRNZW1vcnkoUmVmPFNoYXJlZE1lbW9y
eT4mJiBzaGFyZWRNZW1vcnkpCisgICAgICAgIDogbV9zaGFyZWRNZW1vcnkoV1RGTW92ZShzaGFy
ZWRNZW1vcnkpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKTsKKyAgICBzdGF0aWMgSlNTaGFyZWRNZW1vcnkqIHVud3JhcChKU09iamVjdFJlZik7
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsK
KyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZik7CisKKyAgICBzdGF0aWMgY29u
c3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CisKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiByZWFkQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd3Jp
dGVCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKTsKKworICAgIFJlZjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVt
b3J5OworfTsKKwogY2xhc3MgSlNJUEM7CiAKIGNsYXNzIEpTTWVzc2FnZUxpc3RlbmVyIGZpbmFs
IDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6TWVzc2FnZU9ic2VydmVyIHsKQEAgLTE0NSw3ICsx
ODYsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHNlbmRTeW5jTWVzc2FnZShK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKTsKIAogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVNlbWFwaG9yZShKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVTaGFyZWRNZW1vcnkoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7CiAKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiB2bVBhZ2VTaXplKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0
YXRpYyBKU1ZhbHVlUmVmIHZpc2l0ZWRMaW5rU3RvcmVJRChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKICAgICBzdGF0aWMgSlNW
YWx1ZVJlZiB3ZWJQYWdlUHJveHlJRChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmlu
Z1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBzZXNz
aW9uSUQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbik7CkBAIC0xNjYsNiArMjA5LDE5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0
ZVR5cGVFcnJvcihKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ICAgIHJldHVybiB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCBtZXNz
YWdlKSk7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gY29udmVydFRvVWludDY0KEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKQoreworICAgIGlmIChqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAodmFs
dWUgPCAwIHx8IHRydW5jKHZhbHVlKSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgaWYgKGpzVmFsdWUu
aXNCaWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNCaWdJbnQ6OnRvQmlnVUludDY0KGpz
VmFsdWUpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKIEpTT2JqZWN0UmVmIEpTSVBD
U2VtYXBob3JlOjpjcmVhdGVKU1dyYXBwZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKQEAgLTIwMiw3ICsyNTgsNyBAQCBK
U0lQQ1NlbWFwaG9yZSogSlNJUENTZW1hcGhvcmU6OnRvV3JhcHBlZChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZQogewogICAgIGlmICghY29udGV4dCB8fCAhdmFsdWUgfHwg
IUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgdmFsdWUsIHdyYXBwZXJDbGFzcygpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHVud3JhcChKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdmFsdWUsIDApKTsKKyAgICByZXR1cm4gdW53cmFwKEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCiB2b2lkIEpTSVBDU2VtYXBob3JlOjpp
bml0aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0KQpAQCAtMjI5LDEzICsy
ODUsMTMgQEAgSlNWYWx1ZVJlZiBKU0lQQ1NlbWFwaG9yZTo6c2lnbmFsKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYKIHsKICAgICBhdXRvKiBnbG9iYWxPYmpl
Y3QgPSB0b0pTKGNvbnRleHQpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKLSAgICBhdXRvIGlzSVBDU2VtYXBob3JlID0gbWFrZVJlZlB0cih0b1dyYXBw
ZWQoY29udGV4dCwgdGhpc09iamVjdCkpOwotICAgIGlmICghaXNJUENTZW1hcGhvcmUpIHsKKyAg
ICBhdXRvIGpzSVBDU2VtYXBob3JlID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhp
c09iamVjdCkpOworICAgIGlmICghanNJUENTZW1hcGhvcmUpIHsKICAgICAgICAgKmV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICBpc0lQQ1Nl
bWFwaG9yZS0+bV9zZW1hcGhvcmUuc2lnbmFsKCk7CisgICAganNJUENTZW1hcGhvcmUtPm1fc2Vt
YXBob3JlLnNpZ25hbCgpOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQpAQCAtMjQ0LDggKzMwMCw4IEBAIEpTVmFsdWVSZWYgSlNJUENTZW1hcGhvcmU6Ondh
aXRGb3IoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlCiB7CiAg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKICAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgYXV0byBpc0lQQ1NlbWFwaG9yZSA9
IG1ha2VSZWZQdHIodG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKLSAgICBpZiAoIWlz
SVBDU2VtYXBob3JlKSB7CisgICAgYXV0byBqc0lQQ1NlbWFwaG9yZSA9IG1ha2VSZWZQdHIodG9X
cmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzSVBDU2VtYXBob3JlKSB7
CiAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5
cGUiX3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAg
ICAgfQpAQCAtMjY3LDExICszMjMsMjE0IEBAIEpTVmFsdWVSZWYgSlNJUENTZW1hcGhvcmU6Ondh
aXRGb3IoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICBh
dXRvIHJlc3VsdCA9IGlzSVBDU2VtYXBob3JlLT5tX3NlbWFwaG9yZS53YWl0Rm9yKHRpbWVvdXQp
OworICAgIGF1dG8gcmVzdWx0ID0ganNJUENTZW1hcGhvcmUtPm1fc2VtYXBob3JlLndhaXRGb3Io
dGltZW91dCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHJlc3Vs
dCk7CiB9CiAKK1NoYXJlZE1lbW9yeTo6SGFuZGxlIEpTU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5k
bGUoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOworICAgIG1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFu
ZGxlLCBwcm90ZWN0aW9uKTsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCitKU09iamVjdFJlZiBK
U1NoYXJlZE1lbW9yeTo6Y3JlYXRlSlNXcmFwcGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQorewor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTT2JqZWN0UmVmIHdy
YXBwZXJPYmplY3QgPSBKU09iamVjdE1ha2UodG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KSwgd3Jh
cHBlckNsYXNzKCksIHRoaXMpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0
dXJuIHdyYXBwZXJPYmplY3Q7Cit9CisKK0pTQ2xhc3NSZWYgSlNTaGFyZWRNZW1vcnk6OndyYXBw
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpz
Q2xhc3MpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJTaGFyZWRN
ZW1vcnkiOworICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gbnVsbHB0cjsKKyAgICAg
ICAgZGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBudWxscHRyOworICAgICAgICBkZWZpbml0aW9u
LnN0YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9ucygpOworICAgICAgICBkZWZpbml0aW9u
LmluaXRpYWxpemUgPSBpbml0aWFsaXplOworICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXplID0g
ZmluYWxpemU7CisgICAgICAgIGpzQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsK
KyAgICB9CisgICAgcmV0dXJuIGpzQ2xhc3M7Cit9CisKK2lubGluZSBKU1NoYXJlZE1lbW9yeSog
SlNTaGFyZWRNZW1vcnk6OnVud3JhcChKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTU2hhcmVkTWVtb3J5Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkp
OworfQorCitKU1NoYXJlZE1lbW9yeSogSlNTaGFyZWRNZW1vcnk6OnRvV3JhcHBlZChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwg
IXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIHZhbHVlLCB3cmFwcGVy
Q2xhc3MoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB1bndyYXAoSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCAwKSk7Cit9CisKK3ZvaWQgSlNTaGFyZWRNZW1v
cnk6OmluaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAg
dW53cmFwKG9iamVjdCktPnJlZigpOworfQorCit2b2lkIEpTU2hhcmVkTWVtb3J5OjpmaW5hbGl6
ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgdW53cmFwKG9iamVjdCktPmRlcmVmKCk7Cit9
CisKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTU2hhcmVkTWVtb3J5OjpzdGF0aWNGdW5jdGlv
bnMoKQoreworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0g
eworICAgICAgICB7ICJyZWFkQnl0ZXMiLCByZWFkQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAi
d3JpdGVCeXRlcyIsIHdyaXRlQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAwLCAwLCAwIH0KKyAg
ICB9OworICAgIHJldHVybiBmdW5jdGlvbnM7Cit9CisKK0pTVmFsdWVSZWYgSlNTaGFyZWRNZW1v
cnk6OnJlYWRCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1NoYXJlZE1l
bW9yeSA9IG1ha2VSZWZQdHIodG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBp
ZiAoIWpzU2hhcmVkTWVtb3J5KSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAg
c2l6ZV90IGxlbmd0aCA9IGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOwor
CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCkgeworICAgICAgICBhdXRvIG9mZnNldFZhbHVlID0gY29udmVy
dFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0pKTsKKyAgICAgICAgaWYg
KCFvZmZzZXRWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBieXRlIG9mZnNldCB0byBy
ZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKm9mZnNldFZhbHVlID4gbGVuZ3RoKQorICAgICAg
ICAgICAgb2Zmc2V0ID0gbGVuZ3RoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvZmZzZXQg
PSAqb2Zmc2V0VmFsdWU7CisgICAgICAgIGxlbmd0aCAtPSBvZmZzZXQ7CisgICAgfQorCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBjb252
ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSkpOworICAgICAgICBp
ZiAoIWxlbmd0aFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgdGhlIG51bWJlciBvZiBi
eXRlcyB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmxlbmd0aFZhbHVlIDwgbGVuZ3Ro
KQorICAgICAgICAgICAgbGVuZ3RoID0gKmxlbmd0aFZhbHVlOworICAgIH0KKworICAgIGF1dG8g
YXJyYXlCdWZmZXIgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGpzU2hhcmVkTWVtb3J5LT5tX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICBKU0M6OkpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBudWxscHRyOwor
ICAgIGlmIChhdXRvKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0
dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKSkKKyAgICAgICAganNBcnJheUJ1ZmZlciA9
IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlC
dWZmZXIpKTsKKyAgICBpZiAoIWpzQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgYXJyYXkgYnVm
ZmVyIGZvciB0aGUgcmVhZCBieXRlcyJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZl
cik7Cit9CisKK3N0cnVjdCBBcnJheUJ1ZmZlckRhdGEgeworICAgIHZvaWQqIGJ1ZmZlciB7IG51
bGxwdHIgfTsKKyAgICBzaXplX3QgbGVuZ3RoIHsgMCB9OworfTsKKworc3RhdGljIEFycmF5QnVm
ZmVyRGF0YSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVHlwZWRBcnJheVR5cGUgdHlwZSwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGF1dG8gb2JqZWN0UmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOworICAgIGlmICghb2JqZWN0UmVmKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgdm9pZCogYnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAodHlwZSA9
PSBrSlNUeXBlZEFycmF5VHlwZUFycmF5QnVmZmVyKQorICAgICAgICBidWZmZXIgPSBKU09iamVj
dEdldEFycmF5QnVmZmVyQnl0ZXNQdHIoY29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgYnVmZmVyID0gSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZXNQdHIo
Y29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOworCisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGlmICh0eXBlID09IGtK
U1R5cGVkQXJyYXlUeXBlQXJyYXlCdWZmZXIpCisgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0
QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKKyAg
ICBlbHNlCisgICAgICAgIGxlbmd0aCA9IEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVMZW5ndGgo
Y29udGV4dCwgb2JqZWN0UmVmLCBleGNlcHRpb24pOworCisgICAgcmV0dXJuIHsgYnVmZmVyLCBs
ZW5ndGggfTsKK30KKworSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgYXV0byBqc1NoYXJlZE1lbW9yeSA9IG1ha2VSZWZQdHIo
dG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWpzU2hhcmVkTWVtb3J5
KSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25n
IHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgfQorCisgICAgYXV0byB0eXBlID0gYXJndW1lbnRDb3VudCA/IEpTVmFsdWVHZXRUeXBl
ZEFycmF5VHlwZShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikgOiBrSlNUeXBlZEFy
cmF5VHlwZU5vbmU7CisgICAgaWYgKHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKSB7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBmaXJzdCBh
cmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciBvciBhIHR5cGVkIGFycmF5Il9zKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAg
IGF1dG8gZGF0YSA9IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihjb250ZXh0LCB0eXBlLCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkYXRhLmJ1ZmZlcikgeworICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJDb3VsZCBub3QgcmVhZCB0
aGUgYnVmZmVyIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAgIHNpemVfdCBsZW5ndGgg
PSBkYXRhLmxlbmd0aDsKKyAgICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6ZSA9IGpzU2hhcmVkTWVt
b3J5LT5tX3NoYXJlZE1lbW9yeS0+c2l6ZSgpOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMSkg
eworICAgICAgICBhdXRvIG9mZnNldFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFs
T2JqZWN0LCBhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHNlY29u
ZCBhcmd1bWVudCBtdXN0IGJlIGEgYnl0ZSBvZmZzZXQgdG8gd3JpdGUiX3MpOworICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAg
ICAgIGlmICgqb2Zmc2V0VmFsdWUgPj0gc2hhcmVkTWVtb3J5U2l6ZSkgeworICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiT2Zmc2V0IGlzIHRvbyBiaWci
X3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgICAgICB9CisgICAgICAgIG9mZnNldCA9ICpvZmZzZXRWYWx1ZTsKKyAgICB9CisKKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA+IDIpIHsKKyAgICAgICAgYXV0byBsZW5ndGhWYWx1ZSA9IGNvbnZl
cnRUb1VpbnQ2NCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdKSk7CisgICAgICAgIGlm
ICghbGVuZ3RoVmFsdWUpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIlRoZSB0aGlyZCBhcmd1bWVudCBtdXN0IGJlIHRoZSBudW1iZXIgb2YgYnl0
ZXMgdG8gd3JpdGUiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqbGVuZ3RoVmFsdWUgPj0gc2hhcmVk
TWVtb3J5U2l6ZSAtIG9mZnNldCB8fCAqbGVuZ3RoVmFsdWUgPiBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBudW1iZXIgb2Yg
Ynl0ZXMgdG8gd3JpdGUgaXMgdG9vIGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gKmxl
bmd0aFZhbHVlOworICAgIH0KKworICAgIG1lbWNweShzdGF0aWNfY2FzdDx1aW50OF90Kj4oanNT
aGFyZWRNZW1vcnktPm1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpICsgb2Zmc2V0LCBkYXRhLmJ1ZmZl
ciwgbGVuZ3RoKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKwogSlNDbGFzc1JlZiBKU0lQQzo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0aWMgSlND
bGFzc1JlZiBqc0NsYXNzOwpAQCAtMzE4LDYgKzU3Nyw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rp
b24qIEpTSVBDOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJzZW5kTWVzc2FnZSIsIHNl
bmRNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgInNlbmRTeW5jTWVzc2FnZSIsIHNlbmRTeW5j
TWVzc2FnZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJjcmVhdGVTZW1hcGhvcmUiLCBjcmVhdGVTZW1h
cGhvcmUsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAiY3JlYXRlU2hhcmVkTWVtb3J5IiwgY3JlYXRlU2hh
cmVkTWVtb3J5LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1
cm4gZnVuY3Rpb25zOwpAQCAtMzI2LDYgKzU4Niw3IEBAIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IEpTSVBDOjpzdGF0aWNGdW5jdGlvbnMoKQogY29uc3QgSlNTdGF0aWNWYWx1ZSogSlNJUEM6OnN0
YXRpY1ZhbHVlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUgdmFsdWVzW10g
PSB7CisgICAgICAgIHsgInZtUGFnZVNpemUiLCB2bVBhZ2VTaXplLCAwLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAg
ICAgIHsgInZpc2l0ZWRMaW5rU3RvcmVJRCIsIHZpc2l0ZWRMaW5rU3RvcmVJRCwgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9
LAogICAgICAgICB7ICJmcmFtZUlEIiwgZnJhbWVJRCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7ICJw
YWdlSUQiLCBwYWdlSUQsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKQEAgLTMzNywxOSArNTk4LDYgQEAgY29uc3QgSlNT
dGF0aWNWYWx1ZSogSlNJUEM6OnN0YXRpY1ZhbHVlcygpCiAgICAgcmV0dXJuIHZhbHVlczsKIH0K
IAotc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiBjb252ZXJ0VG9VaW50NjQoSlNDOjpKU1ZhbHVl
IGpzVmFsdWUpCi17Ci0gICAgaWYgKGpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwg
dHJ1bmModmFsdWUpICE9IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICBpZiAoanNWYWx1ZS5pc0JpZ0ludCgp
KQotICAgICAgICByZXR1cm4gSlNDOjpKU0JpZ0ludDo6dG9CaWdVSW50NjQoanNWYWx1ZSk7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQogc3RhdGljIFJlZlB0cjxJUEM6OkNvbm5lY3Rp
b24+IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsK
QEAgLTQzOSwyNyArNjg3LDExIEBAIHN0YXRpYyBib29sIGVuY29kZVR5cGVkQXJyYXkoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1CiB7CiAgICAgQVNT
RVJUKHR5cGUgIT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKTsKIAotICAgIGF1dG8gb2JqZWN0UmVm
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlUmVmLCBleGNlcHRpb24pOwotICAgIGlm
ICghb2JqZWN0UmVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2b2lkKiBidWZmZXI7
Ci0gICAgaWYgKHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZlcikKLSAgICAgICAg
YnVmZmVyID0gSlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKGNvbnRleHQsIG9iamVjdFJl
ZiwgZXhjZXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1ZmZlciA9IEpTT2JqZWN0R2V0VHlw
ZWRBcnJheUJ5dGVzUHRyKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9uKTsKLSAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemU7
Ci0gICAgaWYgKHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVBcnJheUJ1ZmZlcikKLSAgICAgICAg
YnVmZmVyU2l6ZSA9IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGNvbnRleHQsIG9i
amVjdFJlZiwgZXhjZXB0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1ZmZlclNpemUgPSBKU09i
amVjdEdldFR5cGVkQXJyYXlCeXRlTGVuZ3RoKGNvbnRleHQsIG9iamVjdFJlZiwgZXhjZXB0aW9u
KTsKLSAgICBpZiAoIWJ1ZmZlclNpemUpCisgICAgYXV0byBkYXRhID0gYXJyYXlCdWZmZXJEYXRh
RnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIHZhbHVlUmVmLCBleGNlcHRpb24pOworICAgIGlm
ICghZGF0YS5idWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVuY29kZXIuZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZl
ciksIGJ1ZmZlclNpemUsIDEpOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnVmZmVyKSwgZGF0YS5sZW5ndGgs
IDEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MTcsMTEgKzc0OSwxMCBAQCBPcHRpb25h
bDxPYmplY3RJZGVudGlmaWVyPE9iamVjdElkZW50aWZpZXJUeXBlPj4gZ2V0T2JqZWN0SWRlbnRp
ZmllckZyb21Qcm9wZXJ0eQogICAgIGF1dG8ganNQcm9wZXJ0eVZhbHVlID0ganNPYmplY3QtPmdl
dChnbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3Qt
PnZtKCksIHByb3BlcnR5TmFtZSkpOwogICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAoanNQcm9wZXJ0eVZhbHVlLmlzQmlnSW50
KCkpIAotICAgICAgICByZXR1cm4gbWFrZU9iamVjdElkZW50aWZpZXI8T2JqZWN0SWRlbnRpZmll
clR5cGU+KEpTQzo6SlNCaWdJbnQ6OnRvQmlnVUludDY0KGpzUHJvcGVydHlWYWx1ZSkpOwotICAg
IGlmIChqc1Byb3BlcnR5VmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VPYmpl
Y3RJZGVudGlmaWVyPE9iamVjdElkZW50aWZpZXJUeXBlPihqc1Byb3BlcnR5VmFsdWUuYXNOdW1i
ZXIoKSk7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZl
cnRUb1VpbnQ2NChqc1Byb3BlcnR5VmFsdWUpOworICAgIGlmICghbnVtYmVyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBtYWtlT2JqZWN0SWRlbnRpZmllcjxPYmpl
Y3RJZGVudGlmaWVyVHlwZT4oKm51bWJlcik7CiB9CiAKIHN0YXRpYyBib29sIGVuY29kZVJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRDcmVhdGlvblBhcmFtZXRlcnMoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQpAQCAtNTUzLDYgKzc4NCw1MyBAQCBzdGF0aWMg
Ym9vbCBlbmNvZGVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kQ3JlYXRpb25QYXJhbWV0ZXJzKElQQzo6
RW5jb2RlciYgZW5jb2RlcgogfQogI2VuZGlmCiAKK3N0YXRpYyBib29sIGVuY29kZVNoYXJlZE1l
bW9yeShJUEM6OkVuY29kZXImIGVuY29kZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU09iamVjdCoganNPYmplY3QsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUpCit7
CisgICAgYXV0byBqc1NoYXJlZE1lbW9yeVZhbHVlID0ganNPYmplY3QtPmdldChnbG9iYWxPYmpl
Y3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksICJ2YWx1
ZSJfcykpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8ganNTaGFyZWRNZW1vcnkgPSBtYWtlUmVmUHRyKEpTU2hhcmVkTWVtb3J5Ojp0
b1dyYXBwZWQodG9SZWYoZ2xvYmFsT2JqZWN0KSwgdG9SZWYoanNTaGFyZWRNZW1vcnlWYWx1ZSkp
KTsKKyAgICBpZiAoIWpzU2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB1aW50MzJfdCBkYXRhU2l6ZSA9IGpzU2hhcmVkTWVtb3J5LT5zaXplKCk7CisKKyAgICBhdXRv
IGpzRGF0YVNpemVWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCAiZGF0YVNpemUiX3MpKTsKKyAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWpzRGF0YVNpemVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGlmIChhdXRvIGRhdGFT
aXplVmFsdWUgPSBjb252ZXJ0VG9VaW50NjQoanNEYXRhU2l6ZVZhbHVlKSkKKyAgICAgICAgICAg
IGRhdGFTaXplID0gKmRhdGFTaXplVmFsdWU7CisgICAgfQorCisgICAgYXV0byBqc1Byb3RlY3Rp
b25WYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCAicHJvdGVjdGlvbiJfcykpOworICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChqc1Byb3Rl
Y3Rpb25WYWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0
byBwcm90ZWN0aW9uVmFsdWUgPSBqc1Byb3RlY3Rpb25WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8gcHJvdGVjdGlvbiA9IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZFdy
aXRlOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0aW9uVmFs
dWUsICJyZWFkb25seSIpKQorICAgICAgICBwcm90ZWN0aW9uID0gU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seTsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShwcm90ZWN0aW9uVmFsdWUsICJyZWFkd3JpdGUiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZW5jb2RlciA8PCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IGpzU2hhcmVkTWVt
b3J5LT5jcmVhdGVIYW5kbGUocHJvdGVjdGlvbiksIGRhdGFTaXplIH07CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZVNlbWFwaG9yZShJUEM6OkVuY29kZXImIGVuY29k
ZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUsIEpTQzo6Q2F0Y2hTY29wZSYgc2NvcGUpCit7CisgICAgYXV0byBqc0lQQ1NlbWFwaG9yZSA9
IG1ha2VSZWZQdHIoSlNJUENTZW1hcGhvcmU6OnRvV3JhcHBlZCh0b1JlZihnbG9iYWxPYmplY3Qp
LCB0b1JlZihqc1ZhbHVlKSkpOworICAgIGlmICghanNJUENTZW1hcGhvcmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGpzSVBDU2VtYXBob3JlLT5lbmNvZGUoZW5jb2Rlcik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIGVuY29kZUFyZ3VtZW50KElQQzo6RW5jb2Rl
ciYsIEpTSVBDJiwgSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOwogCiBzdHJ1Y3QgVmVjdG9yRW5jb2RlSGVscGVyIHsKQEAgLTY3NSw2ICs5NTMsMTQgQEAg
c3RhdGljIGJvb2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYg
anNJUEMsIEpTQ29udGV4dFJlZiBjb24KICAgICB9CiAjZW5kaWYKIAorICAgIGlmICh0eXBlID09
ICJTaGFyZWRNZW1vcnkiKSB7CisgICAgICAgIGlmICghZW5jb2RlU2hhcmVkTWVtb3J5KGVuY29k
ZXIsIGdsb2JhbE9iamVjdCwganNPYmplY3QsIHNjb3BlKSkgeworICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNvbnZlcnQgU2hhcmVk
TWVtb3J5Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBpZiAodHlwZSA9PSAiRnJhbWVJbmZvRGF0YSIp
IHsKICAgICAgICAgYXV0byB3ZWJGcmFtZSA9IG1ha2VSZWZQdHIoanNJUEMud2ViRnJhbWUoKSk7
CiAgICAgICAgIGlmICghd2ViRnJhbWUpIHsKQEAgLTY4OSw2ICs5NzUsMTQgQEAgc3RhdGljIGJv
b2wgZW5jb2RlQXJndW1lbnQoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBKU0lQQyYganNJUEMsIEpT
Q29udGV4dFJlZiBjb24KICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGlmICh0eXBlID09ICJTZW1hcGhvcmUiKSB7CisgICAgICAgIGlmICgh
ZW5jb2RlU2VtYXBob3JlKGVuY29kZXIsIGdsb2JhbE9iamVjdCwganNWYWx1ZSwgc2NvcGUpKSB7
CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWls
ZWQgdG8gY29udmVydCBTZW1hcGhvcmUiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGlmICh0eXBlID09
ICJWZWN0b3IiKSB7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc09iamVjdCgpIHx8ICFqc1ZhbHVl
LmluaGVyaXRzPEpTQzo6SlNBcnJheT4odm0pKSB7CiAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJWZWN0b3IgdmFsdWUgbXVzdCBiZSBhbiBhcnJheSJf
cyk7CkBAIC05NjUsNiArMTI1OSwzNiBAQCBKU1ZhbHVlUmVmIEpTSVBDOjpjcmVhdGVTZW1hcGhv
cmUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZgogICAgIHJl
dHVybiBKU0lQQ1NlbWFwaG9yZTo6Y3JlYXRlKCktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0KTsK
IH0KIAorSlNWYWx1ZVJlZiBKU0lQQzo6Y3JlYXRlU2hhcmVkTWVtb3J5KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBpZiAoIXRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSkgeworICAg
ICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9z
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0K
KworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisK
KyAgICBhdXRvIHNpemUgPSBhcmd1bWVudENvdW50ID8gY29udmVydFRvVWludDY0KHRvSlMoZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHNbMF0pKSA6IE9wdGlvbmFsPHVpbnQ2NF90PiB7IH07CisgICAg
aWYgKCFzaXplKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4
dCwgIk11c3Qgc3BlY2lmeSB0aGUgc2l6ZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTaGFyZWRNZW1vcnk6
OmNyZWF0ZSgqc2l6ZSktPmNyZWF0ZUpTV3JhcHBlcihjb250ZXh0KTsKK30KKworSlNWYWx1ZVJl
ZiBKU0lQQzo6dm1QYWdlU2l6ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBhdXRv
IGpzSVBDID0gbWFrZVJlZlB0cih0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCkpOworICAg
IGlmICghanNJUEMpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250
ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQs
IHBhZ2VTaXplKCkpOworfQorCiBKU1ZhbHVlUmVmIEpTSVBDOjp2aXNpdGVkTGlua1N0b3JlSUQo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgcmV0dXJuIHJldHJpZXZlSUQoY29udGV4
dCwgdGhpc09iamVjdCwgZXhjZXB0aW9uLCBbXShKU0lQQyYgd3JhcHBlZCkgewpAQCAtMTIzOSw2
ICsxNTYzLDQwIEBAIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJCiAgICAgcmV0dXJuIG9iamVjdDsK
IH0KIAordGVtcGxhdGU8PiBKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSYmIHZhbHVlKQoreworICAgIHVzaW5nIFNoYXJlZE1lbW9yeSA9IFdlYktp
dDo6U2hhcmVkTWVtb3J5OworICAgIHVzaW5nIFByb3RlY3Rpb24gPSBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjsKKworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBvYmpl
Y3QgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlND
OjpKU1ZhbHVlKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJ0eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sICJT
aGFyZWRNZW1vcnkiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1Zh
bHVlKCkpOworCisgICAgYXV0byBwcm90ZWN0aW9uID0gUHJvdGVjdGlvbjo6UmVhZFdyaXRlOwor
ICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAodmFsdWUuaGFuZGxlLCBw
cm90ZWN0aW9uKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeSkgeworICAgICAgICBwcm90ZWN0aW9u
ID0gUHJvdGVjdGlvbjo6UmVhZE9ubHk7CisgICAgICAgIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1l
bW9yeTo6bWFwKHZhbHVlLmhhbmRsZSwgcHJvdGVjdGlvbik7CisgICAgICAgIGlmICghc2hhcmVk
TWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZSgpOworICAgIH0KKworICAg
IGF1dG8ganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6
OkpTU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpLT5j
cmVhdGVKU1dyYXBwZXIodG9SZWYoZ2xvYmFsT2JqZWN0KSkpOworICAgIG9iamVjdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIGpzVmFs
dWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKwor
ICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJkYXRhU2l6ZSJfcyksIEpTQzo6SlNWYWx1ZSh2YWx1ZS5kYXRhU2l6ZSkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKworICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwcm90ZWN0aW9uIl9z
KSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sIHByb3RlY3Rpb24gPT0gUHJvdGVjdGlvbjo6
UmVhZFdyaXRlID8gIlJlYWRXcml0ZSIgOiAiUmVhZE9ubHkiKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSVBDCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDZmNTQ0OTBkYjc4YzQ0NTA3ODUxYTA5Mjk0MWM5
ZDVkNTk1OGI2Y2YuLmU2ODBkNTE0ZDllNzVkMDcwNDA5NzkwNjBkNjQ1ZDNhYmFiNGU2MmIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOSBAQAorMjAyMS0wNS0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBJUEMgdGVzdGluZyBBUEkgc2hvdWxkIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2VuZCBh
bmQgcmVjZWl2ZSBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjU1NzYKKworICAgICAgICBSZXZpZXdlZCBieSBXZW5zb24gSHNp
ZWguCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBzaGFy
ZWQgbWVtb3J5IGluIHRoZSBJUEMgdGVzdGluZyBBUEkuCisgICAgICAgIEFsc28gYWRkZWQgYSB0
ZXN0IHRvIHNlbmQgc2VtYXBob3JlLCB3aGljaCB3YXMgbWlzc2luZyBpbiByMjc3MTk5LgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1t
OgorICAgICAgICAoSVBDVGVzdGluZ0FQSS5DYW5SZWNlaXZlU2hhcmVkTWVtb3J5KTogQWRkZWQu
CisgICAgICAgIChJUENUZXN0aW5nQVBJLkNhbkNyZWF0ZVNoYXJlZE1lbW9yeSk6IEFkZGVkLgor
ICAgICAgICAoSVBDVGVzdGluZ0FQSS5DYW5TZW5kU2VtYXBocHJlKTogQWRkZWQgYWZ0ZXIgcjI3
NzE5OS4KKyAgICAgICAgKElQQ1Rlc3RpbmdBUEkuQ2FuU2VuZFNoYXJlZE1lbW9yeSk6IEFkZGVk
LgorCiAyMDIxLTA1LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgUG9ydCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUoKSAmIEZpbGVzeXN0ZW06OmRpcmVj
dG9yeU5hbWUoKSB0byBzdGQ6OmZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQppbmRleCA5YzcwOTQ3YzBh
MmM4OWY3ZDlhMjFiZGFjZTU3YzdmODA3NTc4NDlhLi5mNWNiOTRkNjA4YmI3OWRjNDkxOGE4Yzlh
MmQ2MTQyMzA1ZjRiNzVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCkBAIC0yMzAsNiArMjMwLDMyIEBAIFRFU1Qo
SVBDVGVzdGluZ0FQSSwgQ2FuUmVjZWl2ZUlQQ1NlbWFwaG9yZSkKIAogICAgIEVYUEVDVF9TVFJF
UShbYWxlcnRNZXNzYWdlIFVURjhTdHJpbmddLCAiMTpTZW1hcGhvcmU6ZmFsc2UiKTsKIH0KKwor
VEVTVChJUENUZXN0aW5nQVBJLCBDYW5SZWNlaXZlU2hhcmVkTWVtb3J5KQoreworICAgIGF1dG8g
d2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdXaXRoSVBDVGVzdGluZ0FQSSgpOworCisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGF1dG8q
IGh0bWwgPSBAUiJIVE1MKDwhRE9DVFlQRSBodG1sPgorPHNjcmlwdD4KK0lQQy5zZW5kTWVzc2Fn
ZSgnR1BVJywgMCwgSVBDLm1lc3NhZ2VzLkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NfQ3JlYXRl
UmVuZGVyaW5nQmFja2VuZC5uYW1lLAorICAgIFt7dHlwZTogJ1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRDcmVhdGlvblBhcmFtZXRlcnMnLCAnaWRlbnRpZmllcic6IDEyMywgc2VtYXBob3JlOiBJUEMu
Y3JlYXRlU2VtYXBob3JlKCksICdwYWdlUHJveHlJRCc6IElQQy53ZWJQYWdlUHJveHlJRCwgJ3Bh
Z2VJRCc6IElQQy5wYWdlSUR9XSk7Citjb25zdCByZXN1bHQgPSBJUEMuc2VuZFN5bmNNZXNzYWdl
KCdHUFUnLCAxMjMsIElQQy5tZXNzYWdlcy5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kX1VwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldEltYWdlRGF0YS5uYW1lLCAxMDAsIFt7dHlwZTogJ3VpbnQzMl90Jywg
dmFsdWU6IDh9XSk7CithbGVydChyZXN1bHQuYXJndW1lbnRzLmxlbmd0aCk7Cis8L3NjcmlwdD4p
SFRNTCI7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRIVE1MU3RyaW5nOmh0bWxdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CisKKyAgICBFWFBFQ1RfRVEoW2FsZXJ0TWVzc2FnZSBpbnRWYWx1ZV0sIDEpOworICAgIEVYUEVD
VF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZmlyc3RSZXBs
eSA9IHJlc3VsdC5hcmd1bWVudHNbMF07IGZpcnN0UmVwbHkudHlwZSJdLlVURjhTdHJpbmcsICJT
aGFyZWRNZW1vcnkiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAImZpcnN0UmVwbHkucHJvdGVjdGlvbiJdLlVURjhTdHJpbmcsICJSZWFk
T25seSIpOworICAgIEVYUEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShmaXJzdFJlcGx5LnZhbHVlLnJlYWRC
eXRlcygwLCA4KSkpLnRvU3RyaW5nKCkiXS5VVEY4U3RyaW5nLCAiMCwwLDAsMCwwLDAsMCwwIik7
CisKK30KICNlbmRpZgogCiBURVNUKElQQ1Rlc3RpbmdBUEksIENhbkNyZWF0ZUlQQ1NlbWFwaG9y
ZSkKQEAgLTI0Niw2ICsyNzIsODMgQEAgVEVTVChJUENUZXN0aW5nQVBJLCBDYW5DcmVhdGVJUENT
ZW1hcGhvcmUpCiAgICAgRVhQRUNUX0ZBTFNFKFthbGVydE1lc3NhZ2UgYm9vbFZhbHVlXSk7CiB9
CiAKK1RFU1QoSVBDVGVzdGluZ0FQSSwgQ2FuQ3JlYXRlU2hhcmVkTWVtb3J5KQoreworICAgIGF1
dG8gd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdXaXRoSVBDVGVzdGluZ0FQSSgpOworCisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8
IURPQ1RZUEUgaHRtbD48c2NyaXB0PmNvbnN0IHNoYXJlZE1lbW9yeSA9IElQQy5jcmVhdGVTaGFy
ZWRNZW1vcnkoOCk7IGFsZXJ0KHNoYXJlZE1lbW9yeS50b1N0cmluZygpKTs8L3NjcmlwdD4iXTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1NUUkVR
KFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICJbb2JqZWN0IFNoYXJlZE1lbW9yeV0iKTsKKyAg
ICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm5ldyBJ
bnQ4QXJyYXkoc2hhcmVkTWVtb3J5LnJlYWRCeXRlcygwKSlbMF0iXS5pbnRWYWx1ZSwgMCk7Cisg
ICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzaGFy
ZWRNZW1vcnkud3JpdGVCeXRlcyhuZXcgSW50OEFycmF5KFsxLCAyLCA0LCA4LCAxNiwgMzJdKSki
XS5pbnRWYWx1ZSwgMCk7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJBcnJheS5mcm9tKG5ldyBJbnQ4QXJyYXkoc2hhcmVkTWVtb3J5LnJl
YWRCeXRlcygxLCAzKSkpLnRvU3RyaW5nKCkiXS5VVEY4U3RyaW5nLCAiMiw0LDgiKTsKKyAgICBF
WFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInNoYXJlZE1l
bW9yeS53cml0ZUJ5dGVzKG5ldyBJbnQ4QXJyYXkoWzEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAx
MDZdKSwgMiwgMykiXS5pbnRWYWx1ZSwgMCk7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJBcnJheS5mcm9tKG5ldyBJbnQ4QXJyYXkoc2hh
cmVkTWVtb3J5LnJlYWRCeXRlcygpKSkudG9TdHJpbmcoKSJdLlVURjhTdHJpbmcsICIxLDIsMTAx
LDEwMiwxMDMsMzIsMCwwIik7Cit9CisKK1RFU1QoSVBDVGVzdGluZ0FQSSwgQ2FuU2VuZFNlbWFw
aG9yZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBjcmVhdGVXZWJWaWV3V2l0aElQQ1Rlc3RpbmdB
UEkoKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbSVBDVGVzdGluZ0FQSURlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisKKyAgICBhdXRvKiBodG1sID0gQFIiSFRNTCg8IURPQ1RZUEUgaHRtbD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IGF1ZGlvQ29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQ7Citjb25z
dCBkZXN0aW5hdGlvbiA9IGF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9u
KCk7Citjb25zdCBzZW1hcGhvcmUgPSBJUEMuY3JlYXRlU2VtYXBob3JlKCk7Citjb25zdCByZXN1
bHQgPSBJUEMuc2VuZFN5bmNNZXNzYWdlKCdHUFUnLCAwLCBJUEMubWVzc2FnZXMuUmVtb3RlQXVk
aW9EZXN0aW5hdGlvbk1hbmFnZXJfQ3JlYXRlQXVkaW9EZXN0aW5hdGlvbi5uYW1lLCAxMDAsCisg
ICAgW3t0eXBlOiAnU3RyaW5nJywgdmFsdWU6ICdzb21lIGRldmljZSd9LAorICAgIHt0eXBlOiAn
dWludDMyX3QnLCB2YWx1ZTogZGVzdGluYXRpb24ubnVtYmVyT2ZJbnB1dHN9LAorICAgIHt0eXBl
OiAndWludDMyX3QnLCB2YWx1ZTogZGVzdGluYXRpb24uY2hhbm5lbENvdW50fSwKKyAgICB7dHlw
ZTogJ2Zsb2F0JywgdmFsdWU6IGF1ZGlvQ29udGV4dC5zYW1wbGVSYXRlfSwge3R5cGU6ICdmbG9h
dCcsIHZhbHVlOiBhdWRpb0NvbnRleHQuc2FtcGxlUmF0ZX0sCisgICAge3R5cGU6ICdTZW1hcGhv
cmUnLCB2YWx1ZTogc2VtYXBob3JlfV0pOworYWxlcnQocmVzdWx0LmFyZ3VtZW50c1swXS50eXBl
KTsKKzwvc2NyaXB0PgorPC9ib2R5PilIVE1MIjsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6aHRtbF07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9TVFJFUShbYWxlcnRNZXNzYWdl
IFVURjhTdHJpbmddLCAidWludDY0X3QiKTsKK30KKworI2lmIFBMQVRGT1JNKENPQ09BKQorVEVT
VChJUENUZXN0aW5nQVBJLCBDYW5TZW5kU2hhcmVkTWVtb3J5KQoreworICAgIGF1dG8gd2ViVmll
dyA9IGNyZWF0ZVdlYlZpZXdXaXRoSVBDVGVzdGluZ0FQSSgpOworCisgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tJUENUZXN0aW5nQVBJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBb
d2ViVmlldyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGF1dG8qIGh0bWwg
PSBAUiJIVE1MKDwhRE9DVFlQRSBodG1sPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhcmVk
TWVtb3J5ID0gSVBDLmNyZWF0ZVNoYXJlZE1lbW9yeSg4KTsKK3NoYXJlZE1lbW9yeS53cml0ZUJ5
dGVzKG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oJ2hlbGxvJykubWFwKChjaGFyKSA9PiBjaGFy
LmNoYXJDb2RlQXQoMCkpKSk7Citjb25zdCByZXN1bHQgPSBJUEMuc2VuZFN5bmNNZXNzYWdlKCdV
SScsIDAsIElQQy5tZXNzYWdlcy5XZWJQYXN0ZWJvYXJkUHJveHlfU2V0UGFzdGVib2FyZEJ1ZmZl
ckZvclR5cGUubmFtZSwgMTAwLCBbCisgICAge3R5cGU6ICdTdHJpbmcnLCB2YWx1ZTogJ0FwcGxl
IENGUGFzdGVib2FyZCBnZW5lcmFsJ30sIHt0eXBlOiAnU3RyaW5nJywgdmFsdWU6ICd0ZXh0L3Bs
YWluJ30sCisgICAge3R5cGU6ICdTaGFyZWRNZW1vcnknLCB2YWx1ZTogc2hhcmVkTWVtb3J5LCBw
cm90ZWN0aW9uOiAnUmVhZE9ubHknfSwge3R5cGU6ICdib29sJywgdmFsdWU6IDF9LCB7dHlwZTog
J3VpbnQ2NF90JywgdmFsdWU6IElQQy5wYWdlSUR9XSk7CithbGVydChyZXN1bHQuYXJndW1lbnRz
Lmxlbmd0aCArICc6JyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdC5hcmd1bWVudHNbMF0pKTsKKzwv
c2NyaXB0PgorPC9ib2R5PilIVE1MIjsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6aHRtbF07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9TVFJFUShbYWxlcnRNZXNzYWdlIFVURjhT
dHJpbmddLCAiMTp7XCJ0eXBlXCI6XCJpbnQ2NF90XCIsXCJ2YWx1ZVwiOjB9Iik7Cit9CisjZW5k
aWYKKwogVEVTVChJUENUZXN0aW5nQVBJLCBEZWNvZGVzUmVwbHlBcmd1bWVudHNGb3JQcm9tcHQp
CiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld1dpdGhJUENUZXN0aW5nQVBJKCk7
Cg==
</data>
<flag name="commit-queue"
          id="448964"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>