<?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>130376</bug_id>
          
          <creation_ts>2014-03-17 18:00:34 -0700</creation_ts>
          <short_desc>[WK2] Pass ranges over IPC in a cross-platform manner</short_desc>
          <delta_ts>2014-03-18 11:14:25 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>991485</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-17 18:00:34 -0700</bug_when>
    <thetext>Ranges are passed as a pair of uint64_t numbers over IPC, and we pass NSNotFound as is. This is unfortunate in many ways:

1. Code that is otherwise cross-platform becomes Objective-C only because of NSNotFound.

2. We sometimes get NSNotFound confused with WTF::notFound, which has a different numeric value. All cross-platform code like TextIterator::getLocationAndLengthFromRange uses notFound, but we never convert it to NSNotFound when returning over API boundary.

3. Argument lists get longer than they need to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991486</commentid>
    <comment_count>1</comment_count>
      <attachid>226991</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-17 18:03:45 -0700</bug_when>
    <thetext>Created attachment 226991
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991489</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-17 18:05:38 -0700</bug_when>
    <thetext>Attachment 226991 did not pass style-queue:


ERROR: Source/WebKit2/Shared/EditingRange.h:64:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991700</commentid>
    <comment_count>3</comment_count>
      <attachid>226991</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-18 09:55:06 -0700</bug_when>
    <thetext>Comment on attachment 226991
proposed patch

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

&gt; Source/WebKit2/Shared/EditingRange.h:67
&gt; +        if (location != NSNotFound)
&gt; +            return NSMakeRange(location, length);
&gt; +        else
&gt; +            return NSMakeRange(NSNotFound, 0);

if (location == notFound)
            return NSMakeRange(NSNotFound, 0);
        return NSMakeRange(location, length);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991754</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-18 11:14:25 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r165823&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226991</attachid>
            <date>2014-03-17 18:03:45 -0700</date>
            <delta_ts>2014-03-18 10:40:02 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>EditingRange.txt</filename>
            <type>text/plain</type>
            <size>52014</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTc4MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE0LTAzLTE3ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIFBhc3MgcmFuZ2Vz
IG92ZXIgSVBDIGluIGEgY3Jvc3MtcGxhdGZvcm0gbWFubmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzNzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhbiBFZGl0aW5nUmFuZ2UgY2xhc3Mg
Zm9yIElQQywgd2hpY2ggYXV0b21hdGljYWxseSBjb252ZXJ0cyB0byBhbmQgZnJvbQorICAgICAg
ICBOU1Jhbmdlcywga25vd2luZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5vdEZvdW5kIGFuZCBO
U05vdEZvdW5kLgorCisgICAgICAgIE1hbnVhbGx5IGFwcGxpZWQgdGhlIHNhbWUgZml4IHRvIGNo
YXJhY3RlckluZGV4Rm9yUG9pbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2Fn
ZXMucHk6CisgICAgICAgIChzdHJ1Y3Rfb3JfY2xhc3MpOgorICAgICAgICAqIFNoYXJlZC9FZGl0
aW5nUmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkVkaXRpbmdSYW5nZTo6RWRpdGlu
Z1JhbmdlKToKKyAgICAgICAgKFdlYktpdDo6RWRpdGluZ1JhbmdlOjppc1ZhbGlkKToKKyAgICAg
ICAgKFdlYktpdDo6RWRpdGluZ1JhbmdlOjpvcGVyYXRvciBOU1JhbmdlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBpbnNlcnRUZXh0
OnJlcGxhY2VtZW50UmFuZ2U6XSk6CisgICAgICAgICgtW1dLVmlldyBzZWxlY3RlZFJhbmdlXSk6
CisgICAgICAgICgtW1dLVmlldyBoYXNNYXJrZWRUZXh0XSk6CisgICAgICAgICgtW1dLVmlldyBz
ZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6cmVwbGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAg
KC1bV0tWaWV3IG1hcmtlZFJhbmdlXSk6CisgICAgICAgICgtW1dLVmlldyBhdHRyaWJ1dGVkU3Vi
c3RyaW5nRm9yUHJvcG9zZWRSYW5nZTphY3R1YWxSYW5nZTpdKToKKyAgICAgICAgKC1bV0tWaWV3
IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6XSk6CisgICAgICAgICgtW1dLVmlldyBmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZTphY3R1YWxSYW5nZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3Rl
ZFJhbmdlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGluc2VydFRleHQ6XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2Vy
dERpY3RhdGVkVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFya2Vk
UmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdG
cm9tUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpnZXRNYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Z2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0
QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOgorICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJhbmdlRnJvbUVkaXRpbmdSYW5n
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0VGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydFRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNl
bGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRBdHRyaWJ1dGVkU3Vi
c3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlKToKKwogMjAxNC0wMy0xNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGRyZXNzIHNvbWUgc3R5bGUgbml0cy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDE2NTc2MSkK
KysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2luZyBj
b3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIGRlZiBzdHJ1Y3Rfb3JfY2xhc3MobmFtZXNwYWNlLCB0
eXBlKToKICAgICAgICAgJ1dlYktpdDo6RGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JywKICAgICAgICAgJ1dlYktpdDo6RGljdGlvbmFyeVBvcHVwSW5mbycsCiAgICAgICAgICdXZWJL
aXQ6OkRyYXdpbmdBcmVhSW5mbycsCisgICAgICAgICdXZWJLaXQ6OkVkaXRpbmdSYW5nZScsCiAg
ICAgICAgICdXZWJLaXQ6OkVkaXRvclN0YXRlJywKICAgICAgICAgJ1dlYktpdDo6SW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24nLAogICAgICAgICAnV2ViS2l0OjpOYXZpZ2F0aW9uQWN0
aW9uRGF0YScsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdGluZ1JhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRpbmdSYW5nZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRpbmdSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVkaXRpbmdSYW5nZV9o
CisjZGVmaW5lIEVkaXRpbmdSYW5nZV9oCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBF
ZGl0aW5nUmFuZ2UgeworICAgIEVkaXRpbmdSYW5nZSgpCisgICAgICAgIDogbG9jYXRpb24obm90
Rm91bmQpCisgICAgICAgICwgbGVuZ3RoKDApCisgICAgeworICAgIH0KKworICAgIEVkaXRpbmdS
YW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQorICAgICAgICA6IGxvY2F0
aW9uKGxvY2F0aW9uKQorICAgICAgICAsIGxlbmd0aChsZW5ndGgpCisgICAgeworICAgIH0KKwor
ICAgIC8vIChub3RGb3VuZCwgMCkgaXMgbm90YWJseSB2YWxpZC4KKyAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiArIGxlbmd0aCA+PSBsb2NhdGlvbjsgfQorCisjaWYg
ZGVmaW5lZChfX09CSkNfXykKKyAgICBFZGl0aW5nUmFuZ2UoTlNSYW5nZSByYW5nZSkKKyAgICB7
CisgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CisgICAgICAgICAg
ICBsb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uOworICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2Uu
bGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9jYXRpb24gPSBub3RGb3Vu
ZDsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvcGVy
YXRvciBOU1JhbmdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChsb2NhdGlvbiAhPSBOU05v
dEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCBsb2NhdGlvbjsKKyAgICB1aW50
NjRfdCBsZW5ndGg7Cit9OworCit9CisKK25hbWVzcGFjZSBJUEMgewordGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkVkaXRpbmdSYW5nZT4gOiBTaW1wbGVBcmd1bWVudENv
ZGVyPFdlYktpdDo6RWRpdGluZ1JhbmdlPiB7IH07Cit9CisKKyNlbmRpZiAvLyBFZGl0aW5nUmFu
Z2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRpbmdS
YW5nZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2NTc2MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2
MCw3IEBAIGNsYXNzIFdlYldoZWVsRXZlbnQ7CiBzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZzsKIHN0
cnVjdCBDb2xvclNwYWNlRGF0YTsKIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvOworc3RydWN0
IEVkaXRpbmdSYW5nZTsKIHN0cnVjdCBFZGl0b3JTdGF0ZTsKIHN0cnVjdCBQbGF0Zm9ybVBvcHVw
TWVudURhdGE7CiBzdHJ1Y3QgUHJpbnRJbmZvOwpAQCAtNTI1LDE2ICs1MjYsMTYgQEAgcHVibGlj
OgogICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKICAgICB2b2lkIHNldE1haW5G
cmFtZUlzU2Nyb2xsYWJsZShib29sKTsKIAotICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVy
bGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25MZW5ndGgs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZUxlbmd0aCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZl
Y3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRp
dGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVu
dFJhbmdlKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwogICAgIHZvaWQgY2FuY2Vs
Q29tcG9zaXRpb24oKTsKLSAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VM
ZW5ndGgpOwotICAgIGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
TGVuZ3RoLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKLSAgICB2b2lkIGdldE1hcmtlZFJhbmdlKHVpbnQ2NF90
JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7Ci0gICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdl
KHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7Ci0gICAgdm9pZCBnZXRBdHRy
aWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IHJhbmdlU3RhcnQsIHVpbnQ2NF90IHJh
bmdlTGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJik7CisgICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKTsKKyAg
ICBib29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRp
bmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgdm9pZCBnZXRN
YXJrZWRSYW5nZShFZGl0aW5nUmFuZ2UmKTsKKyAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2UoRWRp
dGluZ1JhbmdlJik7CisgICAgdm9pZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNv
bnN0IEVkaXRpbmdSYW5nZSYsIEF0dHJpYnV0ZWRTdHJpbmcmKTsKICAgICB1aW50NjRfdCBjaGFy
YWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50KTsKLSAgICBXZWJDb3Jl
OjpJbnRSZWN0IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCk7
CisgICAgV2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBF
ZGl0aW5nUmFuZ2UmKTsKICAgICBib29sIGV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAKICAgICB2b2lkIHNlbmRDb21wbGV4
VGV4dElucHV0VG9QbHVnaW4odWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE2NTc2MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiQ29sb3JTcGFj
ZURhdGEuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkVkaXRpbmdSYW5n
ZS5oIgogI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIK
ICNpbXBvcnQgIkZpbmRJbmRpY2F0b3JXaW5kb3cuaCIKQEAgLTEyODksOSArMTI5MCw5IEBAIC0g
KHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW4KICAgICBldmVudFRleHQucmVw
bGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsgLy8gc2FtZSB0aGluZyBp
cyBkb25lIGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKICAgICBib29sIGV2ZW50SGFuZGxl
ZDsKICAgICBpZiAoIWRpY3RhdGlvbkFsdGVybmF0aXZlcy5pc0VtcHR5KCkpCi0gICAgICAgIGV2
ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+aW5zZXJ0RGljdGF0ZWRUZXh0KGV2ZW50VGV4dCwg
cmVwbGFjZW1lbnRSYW5nZS5sb2NhdGlvbiwgcmVwbGFjZW1lbnRSYW5nZS5sZW5ndGgsIGRpY3Rh
dGlvbkFsdGVybmF0aXZlcyk7CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5fcGFnZS0+
aW5zZXJ0RGljdGF0ZWRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZSwgZGljdGF0aW9u
QWx0ZXJuYXRpdmVzKTsKICAgICBlbHNlCi0gICAgICAgIGV2ZW50SGFuZGxlZCA9IF9kYXRhLT5f
cGFnZS0+aW5zZXJ0VGV4dChldmVudFRleHQsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIHJl
cGxhY2VtZW50UmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gX2RhdGEtPl9w
YWdlLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgcmVwbGFjZW1lbnRSYW5nZSk7CiAKICAgICBpZiAo
cGFyYW1ldGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNp
ZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKQEAgLTE0ODAsMTEgKzE0ODEsMTAgQEAgLSAoTlNS
YW5nZSlzZWxlY3RlZFJhbmdlCiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29t
bWFuZHNdOwogCi0gICAgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgdWludDY0X3Qgc2Vs
ZWN0aW9uTGVuZ3RoOwotICAgIF9kYXRhLT5fcGFnZS0+Z2V0U2VsZWN0ZWRSYW5nZShzZWxlY3Rp
b25TdGFydCwgc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICBFZGl0aW5nUmFuZ2Ugc2VsZWN0ZWRSYW5n
ZTsKKyAgICBfZGF0YS0+X3BhZ2UtPmdldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZSk7CiAK
LSAgICBOU1JhbmdlIHJlc3VsdCA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rp
b25MZW5ndGgpOworICAgIE5TUmFuZ2UgcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZTsKICAgICBpZiAo
cmVzdWx0LmxvY2F0aW9uID09IE5TTm90Rm91bmQpCiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJz
ZWxlY3RlZFJhbmdlIC0+IChOU05vdEZvdW5kLCAldSkiLCByZXN1bHQubGVuZ3RoKTsKICAgICBl
bHNlCkBAIC0xNTA2LDEwICsxNTA2LDkgQEAgLSAoQk9PTCloYXNNYXJrZWRUZXh0CiAgICAgICAg
ICAgICByZXN1bHQgPSBfZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb247
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB1aW50NjRfdCBsb2NhdGlvbjsKLSAg
ICAgICAgdWludDY0X3QgbGVuZ3RoOwotICAgICAgICBfZGF0YS0+X3BhZ2UtPmdldE1hcmtlZFJh
bmdlKGxvY2F0aW9uLCBsZW5ndGgpOwotICAgICAgICByZXN1bHQgPSBsb2NhdGlvbiAhPSBOU05v
dEZvdW5kOworICAgICAgICBFZGl0aW5nUmFuZ2UgbWFya2VkUmFuZ2U7CisgICAgICAgIF9kYXRh
LT5fcGFnZS0+Z2V0TWFya2VkUmFuZ2UobWFya2VkUmFuZ2UpOworICAgICAgICByZXN1bHQgPSBt
YXJrZWRSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZDsKICAgICB9CiAKICAgICBMT0coVGV4dElu
cHV0LCAiaGFzTWFya2VkVGV4dCAtPiAldSIsIHJlc3VsdCk7CkBAIC0xNTc1LDE0ICsxNTc0LDE0
IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXQKICAgICB9CiB9CiAK
LS0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Up
bmV3U2VsUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCist
ICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5l
d1NlbGVjdGVkUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdl
CiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAgQk9P
TCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRl
ZFN0cmluZyBjbGFzc11dOwogICAgIEFTU0VSVChpc0F0dHJpYnV0ZWRTdHJpbmcgfHwgW3N0cmlu
ZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKIAotICAgIExPRyhUZXh0SW5wdXQs
ICJzZXRNYXJrZWRUZXh0OlwiJUBcIiBzZWxlY3RlZFJhbmdlOigldSwgJXUpIiwgaXNBdHRyaWJ1
dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nLCBuZXdTZWxSYW5nZS5sb2NhdGlv
biwgbmV3U2VsUmFuZ2UubGVuZ3RoKTsKKyAgICBMT0coVGV4dElucHV0LCAic2V0TWFya2VkVGV4
dDpcIiVAXCIgc2VsZWN0ZWRSYW5nZTooJXUsICV1KSIsIGlzQXR0cmlidXRlZFN0cmluZyA/IFtz
dHJpbmcgc3RyaW5nXSA6IHN0cmluZywgbmV3U2VsZWN0ZWRSYW5nZS5sb2NhdGlvbiwgbmV3U2Vs
ZWN0ZWRSYW5nZS5sZW5ndGgpOwogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRl
cnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgogICAg
IFdLVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfZGF0YS0+
X2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CkBAIC0xNjA4LDI1ICsxNjA3LDI5IEBAIC0g
KHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGUKICAgICAgICAgQVNTRVJUKCFf
ZGF0YS0+X3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pOwogICAgICAgICBbc2Vs
ZiBfbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbl07CiAgICAgICAg
IGlmIChbdGV4dCBsZW5ndGhdID09IDEgJiYgW1t0ZXh0IGRlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10gY2hhcmFjdGVyQXRJbmRleDowXSA8IDB4ODApIHsKLSAgICAgICAgICAg
IF9kYXRhLT5fcGFnZS0+aW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlLmxvY2F0aW9u
LCByZXBsYWNlbWVudFJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICBfZGF0YS0+X3BhZ2UtPmlu
c2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgTlNCZWVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBfZGF0YS0+X3Bh
Z2UtPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIG5ld1NlbFJhbmdlLmxvY2F0aW9u
LCBuZXdTZWxSYW5nZS5sZW5ndGgsIHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24sIHJlcGxhY2Vt
ZW50UmFuZ2UubGVuZ3RoKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnNldENvbXBvc2l0aW9uKHRleHQs
IHVuZGVybGluZXMsIG5ld1NlbGVjdGVkUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpOwogfQogCiAt
IChOU1JhbmdlKW1hcmtlZFJhbmdlCiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNz
Q29tbWFuZHNdOwogCi0gICAgdWludDY0X3QgbG9jYXRpb247Ci0gICAgdWludDY0X3QgbGVuZ3Ro
OwotICAgIF9kYXRhLT5fcGFnZS0+Z2V0TWFya2VkUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7Cisg
ICAgRWRpdGluZ1JhbmdlIG1hcmtlZFJhbmdlOworICAgIF9kYXRhLT5fcGFnZS0+Z2V0TWFya2Vk
UmFuZ2UobWFya2VkUmFuZ2UpOwogCi0gICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+
ICgldSwgJXUpIiwgbG9jYXRpb24sIGxlbmd0aCk7Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKGxv
Y2F0aW9uLCBsZW5ndGgpOworICAgIE5TUmFuZ2UgcmVzdWx0ID0gbWFya2VkUmFuZ2U7CisgICAg
aWYgKHJlc3VsdC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQorICAgICAgICBMT0coVGV4dElucHV0
LCAibWFya2VkUmFuZ2UgLT4gKE5TTm90Rm91bmQsICV1KSIsIHJlc3VsdC5sZW5ndGgpOworICAg
IGVsc2UKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwg
cmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3Nl
ZFJhbmdlOihOU1JhbmdlKW5zUmFuZ2UgYWN0dWFsUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKWFjdHVh
bFJhbmdlCkBAIC0xNjQyLDcgKzE2NDUsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRy
aWJ1dGVkU3Vic3RyCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBBdHRyaWJ1dGVkU3RyaW5n
IHJlc3VsdDsKLSAgICBfZGF0YS0+X3BhZ2UtPmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFu
Z2UobnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgsIHJlc3VsdCk7CisgICAgX2RhdGEt
Pl9wYWdlLT5nZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKG5zUmFuZ2UsIHJlc3VsdCk7
CiAKICAgICBpZiAoYWN0dWFsUmFuZ2UpIHsKICAgICAgICAgKmFjdHVhbFJhbmdlID0gbnNSYW5n
ZTsKQEAgLTE2NjcsNiArMTY3MCw4IEBAIC0gKE5TVUludGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQ
b2ludDooTlMKICAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBmcm9t
VmlldzpuaWxdOyAgLy8gdGhlIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSBtYWluIGZyYW1lCiAg
ICAgCiAgICAgdWludDY0X3QgcmVzdWx0ID0gX2RhdGEtPl9wYWdlLT5jaGFyYWN0ZXJJbmRleEZv
clBvaW50KEludFBvaW50KHRoZVBvaW50KSk7CisgICAgaWYgKHJlc3VsdCA9PSBub3RGb3VuZCkK
KyAgICAgICAgcmVzdWx0ID0gTlNOb3RGb3VuZDsKICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFj
dGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiAldSIsIHRoZVBvaW50LngsIHRoZVBvaW50Lnks
IHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2ODEsNyArMTY4Niw3IEBAIC0g
KE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlMKICAgICBpZiAoKHRoZVJhbmdl
LmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoIDwgdGhlUmFuZ2UubG9jYXRpb24pICYmICh0aGVS
YW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCAhPSAwKSkKICAgICAgICAgdGhlUmFuZ2Uu
bGVuZ3RoID0gMDsKICAgICAKLSAgICBOU1JlY3QgcmVzdWx0UmVjdCA9IF9kYXRhLT5fcGFnZS0+
Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxl
bmd0aCk7CisgICAgTlNSZWN0IHJlc3VsdFJlY3QgPSBfZGF0YS0+X3BhZ2UtPmZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKHRoZVJhbmdlKTsKICAgICByZXN1bHRSZWN0ID0gW3NlbGYgY29udmVy
dFJlY3Q6cmVzdWx0UmVjdCB0b1ZpZXc6bmlsXTsKICAgICByZXN1bHRSZWN0ID0gW3NlbGYud2lu
ZG93IGNvbnZlcnRSZWN0VG9TY3JlZW46cmVzdWx0UmVjdF07CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCShyZXZpc2lvbiAxNjU3NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw3ICsxNDA5
LDcgQEAgLSAodm9pZClzZXRNYXJrZWRUZXh0U3R5bGU6KE5TRGljdGlvbmFyeQogLSAodm9pZClz
ZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKW1hcmtlZFRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSlzZWxlY3RlZFJhbmdlCiB7CiAgICAgX21hcmtlZFRleHQgPSBtYXJrZWRUZXh0OwotICAgIF9w
YWdlLT5zZXRDb21wb3NpdGlvbihtYXJrZWRUZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmU+KCksIHNlbGVjdGVkUmFuZ2UubG9jYXRpb24sIHNlbGVjdGVkUmFuZ2UubGVu
Z3RoLCAwLCAwKTsKKyAgICBfcGFnZS0+c2V0Q29tcG9zaXRpb24obWFya2VkVGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPigpLCBzZWxlY3RlZFJhbmdlLCBFZGl0aW5n
UmFuZ2UoKSk7CiB9CiAKIC0gKHZvaWQpdW5tYXJrVGV4dApAQCAtMTUwNiw3ICsxNTA2LDcgQEAg
LSAodm9pZClkZWxldGVCYWNrd2FyZAogLy8gSW5zZXJ0cyB0aGUgZ2l2ZW4gc3RyaW5nLCByZXBs
YWNpbmcgYW55IHNlbGVjdGVkIG9yIG1hcmtlZCB0ZXh0LgogLSAodm9pZClpbnNlcnRUZXh0OihO
U1N0cmluZyAqKWFTdHJpbmdWYWx1ZQogewotICAgIF9wYWdlLT5pbnNlcnRUZXh0KGFTdHJpbmdW
YWx1ZSwgTlNOb3RGb3VuZCwgMCk7CisgICAgX3BhZ2UtPmluc2VydFRleHQoYVN0cmluZ1ZhbHVl
LCBFZGl0aW5nUmFuZ2UoKSk7CiB9CiAKIC0gKEJPT0wpaGFzVGV4dApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDE2
NTc2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMiArOTgsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6Ondp
bmRvd0FuZFZpZXdGcmFtZXNDaAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21w
b3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWlu
dDY0X3Qgc2VsZWN0aW9uTGVuZ3RoLCB1aW50NjRfdCwgdWludDY0X3QpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5n
ZSwgY29uc3QgRWRpdGluZ1JhbmdlJikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBv
c2l0aW9uKHRleHQsIHVuZGVybGluZSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkxlbmd0aCks
IG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29t
cG9zaXRpb24odGV4dCwgdW5kZXJsaW5lLCBzZWxlY3Rpb25SYW5nZSksIG1fcGFnZUlEKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xMjAsMzIgKzEy
MCwzMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2VsQ29tcG9zaXRpb24oKQogCiB9CiAKLWJv
b2wgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3Qg
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoKQor
Ym9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBF
ZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpJbnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1l
bnRSYW5nZUxlbmd0aCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6SW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlKSwgbV9wYWdlSUQpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRU
ZXh0KGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKQorYm9vbCBXZWJQYWdlUHJveHk6Omluc2Vy
dERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBFZGl0aW5nUmFuZ2UmLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYsIHVpbnQ2NF90JikKK3ZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYXJrZWRSYW5nZShFZGl0aW5nUmFuZ2UmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2NF90JiwgdWludDY0
X3QmKQordm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0QXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCwgdWludDY0X3QsIEF0dHJpYnV0ZWRT
dHJpbmcmKQordm9pZCBXZWJQYWdlUHJveHk6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFu
Z2UoY29uc3QgRWRpdGluZ1JhbmdlJiwgQXR0cmlidXRlZFN0cmluZyYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KQEAgLTE1Niw3ICsxNTYsNyBAQCB1aW50NjRfdCBXZWJQYWdlUHJveHk6
OmNoYXJhY3RlckluZGV4Rm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUludFJlY3QgV2ViUGFnZVBy
b3h5OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCwgdWludDY0X3QpCitJbnRS
ZWN0IFdlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoY29uc3QgRWRpdGlu
Z1JhbmdlJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBJbnRSZWN0KCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbQkocmV2aXNpb24gMTY1NzYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBv
cnQgIkNvbG9yU3BhY2VEYXRhLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0
ICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCisjaW1wb3J0ICJFZGl0aW5nUmFuZ2UuaCIKICNpbXBv
cnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAj
aW1wb3J0ICJQYWdlQ2xpZW50LmgiCkBAIC0xNTEsNyArMTUyLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNldE1haW5GcmFtZUlzU2Nyb2xsYQogICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRNYWluRnJhbWVJc1Njcm9sbGFibGUoaXNTY3JvbGxhYmxlKSwgbV9wYWdlSUQp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0
ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNl
bGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25MZW5ndGgsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUxlbmd0aCkKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21w
b3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rp
b25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKQogewogICAgIGlm
ICghaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMsIHdlIHNob3VsZCBjYWxs
IC1kaXNjYXJkTWFya2VkVGV4dCBvbiBpbnB1dCBjb250ZXh0IHRvIG5vdGlmeSB0aGUgaW5wdXQg
bWV0aG9kLgpAQCAtMTU5LDcgKzE2MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3Np
dGlvbihjb25zdCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3MoKS5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkxlbmd0aCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCBy
ZXBsYWNlbWVudFJhbmdlTGVuZ3RoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9u
OjpSZXBseShtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2Vs
ZWN0aW9uUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpLCBNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29t
cG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oKQpAQCAtMTc4LDIzICsxNzksMjMgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKCkKICAgICBwcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbENvbXBvc2l0aW9uKCksIE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7
CiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
TGVuZ3RoKQorYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsK
LSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHQodGV4
dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6Okluc2VydFRleHQ6OlJlcGx5KGhhbmRsZWQsIG1fZWRpdG9yU3RhdGUpLCBt
X3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNl
cnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0
VGV4dDo6UmVwbHkoaGFuZGxlZCwgbV9lZGl0b3JTdGF0ZSksIG1fcGFnZUlEKTsKICAgICBtX3Rl
bXBvcmFyaWx5Q2xvc2VkQ29tcG9zaXRpb24gPSBmYWxzZTsKIAogICAgIHJldHVybiBoYW5kbGVk
OwogfQogCi1ib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNl
bWVudFJhbmdlTGVuZ3RoLCBjb25zdCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzV2l0aFJhbmdlKQorYm9vbCBXZWJQYWdlUHJveHk6Omluc2Vy
dERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVw
bGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRp
Y3RhdGlvbkFsdGVybmF0aXZlc1dpdGhSYW5nZSkKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKICAgICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzV2l0aFJhbmdlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGluc2VydFRleHQodGV4
dCwgcmVwbGFjZW1lbnRSYW5nZSk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMDksNDMgKzIxMCw0MyBAQCBib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0
RGljdGF0ZWRUZXh0KGNvCiAgICAgfQogCiAgICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBpbnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUxlbmd0aCk7CisgICAgICAgIHJldHVybiBpbnNlcnRU
ZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UpOwogCiAgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsK
LSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydERpY3RhdGVk
VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VMZW5ndGgs
IGRpY3RhdGlvbkFsdGVybmF0aXZlcyksIE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnREaWN0YXRl
ZFRleHQ6OlJlcGx5KGhhbmRsZWQsIG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgcHJv
Y2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnREaWN0YXRlZFRleHQodGV4
dCwgcmVwbGFjZW1lbnRSYW5nZSwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKSwgTWVzc2FnZXM6Oldl
YlBhZ2U6Okluc2VydERpY3RhdGVkVGV4dDo6UmVwbHkoaGFuZGxlZCwgbV9lZGl0b3JTdGF0ZSks
IG1fcGFnZUlEKTsKICAgICByZXR1cm4gaGFuZGxlZDsKICNlbHNlCi0gICAgcmV0dXJuIGluc2Vy
dFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlTGVuZ3Ro
KTsKKyAgICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlKTsKICNlbmRp
ZgogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0
aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQordm9pZCBXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdl
KEVkaXRpbmdSYW5nZSYgcmVzdWx0KQogewotICAgIGxvY2F0aW9uID0gTlNOb3RGb3VuZDsKLSAg
ICBsZW5ndGggPSAwOworICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZSgpOwogCiAgICAgaWYgKCFp
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2UoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldE1h
cmtlZFJhbmdlOjpSZXBseShsb2NhdGlvbiwgbGVuZ3RoKSwgbV9wYWdlSUQpOworICAgIHByb2Nl
c3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2UoKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6OkdldE1hcmtlZFJhbmdlOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCk7Cisg
ICAgTUVTU0FHRV9DSEVDSyhyZXN1bHQuaXNWYWxpZCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmdldFNlbGVjdGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3Ro
KQordm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJiByZXN1
bHQpCiB7Ci0gICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwotICAgIGxlbmd0aCA9IDA7CisgICAg
cmVzdWx0ID0gRWRpdGluZ1JhbmdlKCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRT
ZWxlY3RlZFJhbmdlKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3RlZFJhbmdlOjpSZXBs
eShsb2NhdGlvbiwgbGVuZ3RoKSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRSYW5nZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6
R2V0U2VsZWN0ZWRSYW5nZTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQpOworICAgIE1FU1NBR0Vf
Q0hFQ0socmVzdWx0LmlzVmFsaWQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRBdHRy
aWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90IHJhbmdlU3RhcnQsIHVpbnQ2NF90IHJh
bmdlTGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdl
LCBBdHRyaWJ1dGVkU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okdl
dEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UocmFuZ2VTdGFydCwgcmFuZ2VMZW5ndGgpLCBN
ZXNzYWdlczo6V2ViUGFnZTo6R2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTo6UmVwbHko
cmVzdWx0KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShyYW5nZSksIE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOjpSZXBseShyZXN1bHQpLCBt
X3BhZ2VJRCk7CiB9CiAKIHVpbnQ2NF90IFdlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQ
b2ludChjb25zdCBJbnRQb2ludCBwb2ludCkKQEAgLTI1OCwxMyArMjU5LDEzIEBAIHVpbnQ2NF90
IFdlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3IKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1JbnRSZWN0IFdlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0
X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkKK0ludFJlY3QgV2ViUGFnZVByb3h5OjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlKQogewogICAg
IGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgSW50UmVj
dCByZXN1bHRSZWN0OwotICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6
Rmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UobG9jYXRpb24sIGxlbmd0aCksIE1lc3NhZ2VzOjpX
ZWJQYWdlOjpGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTo6UmVwbHkocmVzdWx0UmVjdCksIG1f
cGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKHJhbmdlKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlOjpSZXBseShyZXN1bHRSZWN0KSwgbV9wYWdlSUQpOwogICAgIHJl
dHVybiByZXN1bHRSZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjU3NjEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE0NjAsNiArMTQ2MCw3IEBACiAJCUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJT
ZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5j
cHAgKi87IH07CiAJCUQzQjk0ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1l
bnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0
ODQ1MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKIAkJREY1
OEM2MzYxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERjU4QzYzNTEzNzFBQ0Ew
MDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLzsgfTsKKwkJRTEwNUZFNTQx
OEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNUZFNTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRp
bmdSYW5nZS5oICovOyB9OwogCQlFMTFEMzVBRTE2QjYzRDFCMDA2RDIzRDcgLyogY29tLmFwcGxl
LldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5z
YiAqLzsgfTsKIAkJRTEzM0ZEOEExNDIzREQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTMzRkQ4OTE0MjNE
RDdGMDBGQzdCRkIgLyogV2ViS2l0LmljbnMgKi87IH07CiAJCUUxMzgzM0VDMTg5QzMzQzgwMDFF
MjM1MCAvKiBMb2NhbFN0b3JhZ2VEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM4MzNFQjE4OUMzM0M4MDAxRTIzNTAgLyogTG9jYWxTdG9y
YWdlRGV0YWlscy5oICovOyB9OwpAQCAtMzMyMiw2ICszMzIzLDcgQEAKIAkJRDNCOTQ4NDUxMUZG
NEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREY1OEM2MzExMzcxQUM1ODAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlV2ViV2hlZWxFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0Mg
LyogTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1JhbmdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMzNGRDg5MTQyM0REN0YwMEZDN0JGQiAvKiBXZWJLaXQu
aWNucyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGlt
YWdlLmljbnM7IG5hbWUgPSBXZWJLaXQuaWNuczsgcGF0aCA9IFJlc291cmNlcy9XZWJLaXQuaWNu
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzODMzRUIxODlDMzNDODAwMUUyMzUw
IC8qIExvY2FsU3RvcmFnZURldGFpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9jYWxTdG9yYWdlRGV0YWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTRBOTU0NzE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzk5NCw2ICszOTk2LDcgQEAKIAkJCQlCQ0U4MUQ5NzEzMUFFMDIxMDAyNDE5MTAgLyogRGlj
dGlvbmFyeVBvcHVwSW5mby5oICovLAogCQkJCUM1MTczODgwMTJERjhGNEYwMEVFM0Y0NyAvKiBE
cmFnQ29udHJvbGxlckFjdGlvbi5oICovLAogCQkJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAv
KiBEcmF3aW5nQXJlYUluZm8uaCAqLywKKwkJCQlFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyog
RWRpdGluZ1JhbmdlLmggKi8sCiAJCQkJOENGRUNFOTMxNDkwRjE0MDAwMkFBQTMyIC8qIEVkaXRv
clN0YXRlLmNwcCAqLywKIAkJCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3Rh
dGUuaCAqLywKIAkJCQlCQ0U4MUQ4QTEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uY3BwICov
LApAQCAtNjU2Nyw2ICs2NTcwLDcgQEAKIAkJCQk1MTVFNzcyODE4M0RENkY2MDAwNzIwM0YgLyog
QXN5bmNSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U4MUQ4RDEzMTlGN0VGMDAyNDE5
MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQkMzREZDMTg5OUY1MUMwMDRG
MDYyNiAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEwNUZF
NTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzc5QTg3MzYxOEJCRkE0MzAwNTg4QUYyIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJ
bmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDJGMTJEQkI5QjYwMDJENzhE
RSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CShyZXZpc2lvbiAxNjU3NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJE
cmFnQ29udHJvbGxlckFjdGlvbi5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgogI2lu
Y2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKQEAgLTQzMzYsMTMgKzQzMzcsMTggQEAgdm9pZCBXZWJQ
YWdlOjpnZXRCeXRlY29kZVByb2ZpbGUodWludDY0XwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U3RyaW5nQ2FsbGJhY2socmVzdWx0LCBjYWxsYmFja0lEKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRnJvbUVkaXRpbmdMb2NhdGlvbkFuZExlbmd0aChG
cmFtZSYgZnJhbWUsIHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpCitQYXNzUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBXZWJQYWdlOjpyYW5nZUZyb21FZGl0aW5nUmFuZ2UoV2ViQ29y
ZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlKQogeworICAgIEFTU0VS
VChyYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCk7CisKICAgICAvLyBTYW5pdGl6ZSB0aGUgaW5w
dXQsIGJlY2F1c2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCB0YWtl
cyBzaWduZWQgaW50ZWdlcnMuCi0gICAgaWYgKGxvY2F0aW9uID4gSU5UX01BWCkKKyAgICBpZiAo
cmFuZ2UubG9jYXRpb24gPiBJTlRfTUFYKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobGVu
Z3RoID4gSU5UX01BWCB8fCBsb2NhdGlvbiArIGxlbmd0aCA+IElOVF9NQVgpCi0gICAgICAgIGxl
bmd0aCA9IElOVF9NQVggLSBsb2NhdGlvbjsKKyAgICBpbnQgbGVuZ3RoOworICAgIGlmIChyYW5n
ZS5sZW5ndGggPD0gSU5UX01BWCAmJiByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCA8PSBJ
TlRfTUFYKQorICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KHJhbmdlLmxlbmd0aCk7
CisgICAgZWxzZQorICAgICAgICBsZW5ndGggPSBJTlRfTUFYIC0gcmFuZ2UubG9jYXRpb247CiAK
ICAgICAvLyBPdXIgY3JpdGljYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBvbmx5IGNhbGxl
ZCBieSBpbnB1dCBtZXRob2RzIHRoYXQKICAgICAvLyBjb25jZW50cmF0ZSBvbiBhIGdpdmVuIGFy
ZWEgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uLgpAQCAtNDM1MCw3ICs0MzU2LDggQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGcm9tRWRpdAogICAgIC8vIGRpcmVjdGx5IGluIHRo
ZSBkb2N1bWVudCBET00sIHNvIHNlcmlhbGl6YXRpb24gaXMgcHJvYmxlbWF0aWMuIE91ciBzb2x1
dGlvbiBpcwogICAgIC8vIHRvIHVzZSB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9mIHRoZSBz
ZWxlY3Rpb24gc3RhcnQgYXMgdGhlIHBvc2l0aW9uYWwgYmFzZS4KICAgICAvLyBUaGF0IGZpdHMg
d2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCi0gICAgcmV0dXJuIFRleHRJ
dGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZnJhbWUuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCksIGxvY2F0aW9uLCBsZW5ndGgpOwor
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGZyYW1l
LnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCBzdGF0
aWNfY2FzdDxpbnQ+KHJhbmdlLmxvY2F0aW9uKSwgbGVuZ3RoKTsKIH0KIAorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAkocmV2aXNpb24gMTY1NzY3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIGNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBXZWJXaGVlbEV2ZW50Owogc3RydWN0
IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOwogc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmc7CitzdHJ1
Y3QgRWRpdGluZ1JhbmdlOwogc3RydWN0IEVkaXRvclN0YXRlOwogc3RydWN0IEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uOwogc3RydWN0IFByaW50SW5mbzsKQEAgLTQ1NSw4ICs0NTYs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW5jQXBwbHlBdXRvY29ycmVjdGlvbihjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBib29sJiBjb3JyZWN0
aW9uQXBwbGllZCk7CiAgICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KHVpbnQ2
NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZ2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmlu
ZyYgYmVmb3JlVGV4dCwgU3RyaW5nJiBtYXJrZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwg
U3RyaW5nJiBhZnRlclRleHQsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7
Ci0gICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoKTsKLSAgICB2
b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNv
bXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwg
dWludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOworICAgIHZv
aWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29t
cG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0
aW9uUmFuZ2UpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7CiAgICAgdm9pZCBnZXRQ
b3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKICAgICB2b2lkIHJlcXVlc3RQb3NpdGlvbkluZm9ybWF0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CkBAIC01MzgsMTUgKzUzOSwxNSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7
CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50
UmFuZ2VMZW5ndGgsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7Ci0gICAg
dm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQs
IHVpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUp
OworICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdS
YW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0
YXRlKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFu
Z2UsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24o
RWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKICNlbmRpZgotICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2Uo
dWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKLSAgICB2b2lkIGdldFNlbGVj
dGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKTsKLSAgICB2b2lk
IGdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgcmFuZ2VTdGFydCwgdWlu
dDY0X3QgcmFuZ2VMZW5ndGgsIEF0dHJpYnV0ZWRTdHJpbmcmKTsKKyAgICB2b2lkIGdldE1hcmtl
ZFJhbmdlKEVkaXRpbmdSYW5nZSYpOworICAgIHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZShFZGl0aW5n
UmFuZ2UmKTsKKyAgICB2b2lkIGdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoY29uc3Qg
RWRpdGluZ1JhbmdlJiwgQXR0cmlidXRlZFN0cmluZyYpOwogICAgIHZvaWQgY2hhcmFjdGVySW5k
ZXhGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIHJlc3Vs
dCk7Ci0gICAgdm9pZCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlv
biwgdWludDY0X3QgbGVuZ3RoLCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHRSZWN0KTsKKyAgICB2
b2lkIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0IEVkaXRpbmdSYW5nZSYsIFdlYkNv
cmU6OkludFJlY3QmIHJlc3VsdFJlY3QpOwogICAgIHZvaWQgZXhlY3V0ZUtleXByZXNzQ29tbWFu
ZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBib29sJiBoYW5kbGVk
LCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwogICAgIHZvaWQgcmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFdURjo6U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgYm9vbCYgcmVzdWx0KTsK
ICAgICB2b2lkIGdldFN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoV1RGOjpTdHJpbmcmIHN0
cmluZ1ZhbHVlKTsKQEAgLTU1NCw3ICs1NTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG91bGRE
ZWxheVdpbmRvd09yZGVyaW5nRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9v
bCYgcmVzdWx0KTsKICAgICB2b2lkIGFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwg
Y29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50JiwgYm9vbCYgcmVzdWx0KTsKICAgICBib29sIHBl
cmZvcm1Ob25FZGl0aW5nQmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3Jl
OjpLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VMZW5ndGgsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBib29sJiBoYW5kbGVkLCBFZGl0
b3JTdGF0ZSYgbmV3U3RhdGUpOworICAgIHZvaWQgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IGNvbXBvc2l0aW9uU3RyaW5nKTsKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V2ViQ29yZTo6Q29t
cG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBjdXJzb3JQb3NpdGlvbik7
CkBAIC05MjcsNyArOTI4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgUGx1Z2luVmlldyogZm9j
dXNlZFBsdWdpblZpZXdGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSYpOwogICAgIHN0YXRpYyBQbHVn
aW5WaWV3KiBwbHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKIAotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRnJvbUVkaXRpbmdMb2NhdGlvbkFuZExlbmd0aChX
ZWJDb3JlOjpGcmFtZSYsIHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZyb21FZGl0aW5nUmFuZ2Uo
V2ViQ29yZTo6RnJhbWUmLCBjb25zdCBFZGl0aW5nUmFuZ2UmKTsKIAogICAgIHZvaWQgcmVwb3J0
VXNlZEZlYXR1cmVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjU3NjkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJl
Y2VpdmVyIHsKICAgICBTeW5jQXBwbHlBdXRvY29ycmVjdGlvbihTdHJpbmcgY29ycmVjdGlvbiwg
U3RyaW5nIG9yaWdpbmFsVGV4dCkgLT4gKGJvb2wgYXV0b2NvcnJlY3Rpb25BcHBsaWVkKQogICAg
IFJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBH
ZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoKSAtPiAoU3RyaW5nIGJlZm9yZUNvbnRleHQsIFN0cmlu
ZyBtYXJrZWRUZXh0LCBTdHJpbmcgc2VsZWN0ZWRUZXh0LCBTdHJpbmcgYWZ0ZXJDb250ZXh0LCB1
aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKSAKLSAgICBJbnNlcnRUZXh0KFN0cmlu
ZyB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VMZW5ndGgpCi0gICAgU2V0Q29tcG9zaXRpb24oU3RyaW5nIHRleHQsIFZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCkKKyAgICBJbnNlcnRUZXh0KFN0cmlu
ZyB0ZXh0LCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlKQorICAgIFNldENv
bXBvc2l0aW9uKFN0cmluZyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHVuZGVybGluZXMsIFdlYktpdDo6RWRpdGluZ1JhbmdlIHNlbGVjdGlvblJhbmdlKQogICAg
IENvbmZpcm1Db21wb3NpdGlvbigpCiAgICAgR2V0UG9zaXRpb25JbmZvcm1hdGlvbihXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCkgLT4gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24gaW5mb3JtYXRpb24pCiAgICAgUmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQpCkBAIC0yOTIsMTkgKzI5MiwxOSBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgICMgVGV4dCBpbnB1dC4KICAgICBDYW5jZWxDb21w
b3NpdGlvbigpIC0+IChXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQotICAgIEdldE1hcmtl
ZFJhbmdlKCkgLT4gKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpCi0gICAgR2V0
U2VsZWN0ZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQot
ICAgIEdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgcmFuZ2VTdGFydCwg
dWludDY0X3QgcmFuZ2VMZW5ndGgpIC0+IChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgcmVzdWx0
KQorICAgIEdldE1hcmtlZFJhbmdlKCkgLT4gKFdlYktpdDo6RWRpdGluZ1JhbmdlIHJhbmdlKQor
ICAgIEdldFNlbGVjdGVkUmFuZ2UoKSAtPiAoV2ViS2l0OjpFZGl0aW5nUmFuZ2UgcmFuZ2UpCisg
ICAgR2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShXZWJLaXQ6OkVkaXRpbmdSYW5nZSBy
YW5nZSkgLT4gKFdlYktpdDo6QXR0cmlidXRlZFN0cmluZyByZXN1bHQpCiAgICAgQ2hhcmFjdGVy
SW5kZXhGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkgLT4gKHVpbnQ2NF90IHJlc3Vs
dCkKLSAgICBGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWlu
dDY0X3QgbGVuZ3RoKSAtPiAoV2ViQ29yZTo6SW50UmVjdCByZXN1bHRSZWN0KQorICAgIEZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKFdlYktpdDo6RWRpdGluZ1JhbmdlIHJhbmdlKSAtPiAoV2Vi
Q29yZTo6SW50UmVjdCByZXN1bHRSZWN0KQogICAgIEV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpIC0+IChib29sIGhh
bmRsZWQsIFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAgICAgU2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0V2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVz
dWx0KQogICAgIEFjY2VwdHNGaXJzdE1vdXNlKGludCBldmVudE51bWJlciwgV2ViS2l0OjpXZWJN
b3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCi0gICAgSW5zZXJ0RGljdGF0ZWRUZXh0
KFN0cmluZyB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VMZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6OkVkaXRv
clN0YXRlIG5ld1N0YXRlKQorICAgIEluc2VydERpY3RhdGVkVGV4dChTdHJpbmcgdGV4dCwgV2Vi
S2l0OjpFZGl0aW5nUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSwgVmVjdG9yPFdlYkNvcmU6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpIC0+IChib29sIGhhbmRsZWQs
IFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMp
Ci0gICAgSW5zZXJ0VGV4dChTdHJpbmcgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoKSAtPiAoYm9vbCBoYW5kbGVkLCBX
ZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQotICAgIFNldENvbXBvc2l0aW9uKFN0cmluZyB0
ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVp
bnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25MZW5ndGgsIHVpbnQ2NF90
IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUxlbmd0aCkg
LT4gKFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCisgICAgSW5zZXJ0VGV4dChTdHJpbmcg
dGV4dCwgV2ViS2l0OjpFZGl0aW5nUmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSkgLT4gKGJvb2wgaGFu
ZGxlZCwgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBTZXRDb21wb3NpdGlvbihT
dHJpbmcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxp
bmVzLCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSBzZWxlY3Rpb25SYW5nZSwgV2ViS2l0OjpFZGl0aW5n
UmFuZ2UgcmVwbGFjZW1lbnRSYW5nZSkgLT4gKFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUp
CiAgICAgQ29uZmlybUNvbXBvc2l0aW9uKCkgLT4gKFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3U3Rh
dGUpCiAjZW5kaWYKICAgICBTZXRNaW5pbXVtTGF5b3V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIG1p
bmltdW1MYXlvdXRTaXplKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTY1NzY3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJFZGl0aW5nUmFuZ2UuaCIK
ICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCiAjaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbi5oIgogI2ltcG9ydCAiUGx1Z2luVmlldy5oIgpAQCAtMTY2LDEyICsxNjcsMTIg
QEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1ZwogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMs
IHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpCit2b2lk
IFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNv
cmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2Um
IHNlbGVjdGlvblJhbmdlKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBpZiAoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgZnJhbWUuZWRpdG9y
KCkuc2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVj
dGlvblN0YXJ0ICsgc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuc2V0
Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uUmFuZ2UubG9jYXRpb24sIHNl
bGVjdGlvblJhbmdlLmxvY2F0aW9uICsgc2VsZWN0aW9uUmFuZ2UubGVuZ3RoKTsKIH0KIAogdm9p
ZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oKQpAQCAtMTg1LDEyICsxODYsMTIgQEAgdm9p
ZCBXZWJQYWdlOjpjYW5jZWxDb21wb3NpdGlvbihFZGl0b3JTdAogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVp
bnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUxl
bmd0aCkKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpCiB7CiAgICAgRnJhbWUmIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAg
ICAKLSAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmFuZ2VGcm9tRWRpdGluZ0xvY2F0
aW9uQW5kTGVuZ3RoKGZyYW1lLCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFu
Z2VMZW5ndGgpOworICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBu
b3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5n
ZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKTsKICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCiAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogICAgIH0KQEAgLTIwMywyMiArMjA0LDIyIEBAIHZvaWQgV2Vi
UGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHQKICAgICAgICAgZnJhbWUuZWRpdG9yKCku
Y29uZmlybUNvbXBvc2l0aW9uKHRleHQpOwogfQogCi12b2lkIFdlYlBhZ2U6Omluc2VydERpY3Rh
dGVkVGV4dChjb25zdCBTdHJpbmcmLCB1aW50NjRfdCwgdWludDY0X3QsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mLCBib29sJiwgRWRpdG9yU3RhdGUmKQordm9p
ZCBXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgRWRpdGlu
Z1JhbmdlJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiYsIGJv
b2wmLCBFZGl0b3JTdGF0ZSYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBX
ZWJQYWdlOjpnZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYsIHVpbnQ2NF90JikKK3ZvaWQgV2ViUGFn
ZTo6Z2V0TWFya2VkUmFuZ2UoRWRpdGluZ1JhbmdlJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2UodWludDY0X3QmLCB1aW50NjRf
dCYpCit2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJz
dHJpbmdGcm9tUmFuZ2UodWludDY0X3QsIHVpbnQ2NF90LCBBdHRyaWJ1dGVkU3RyaW5nJikKK3Zv
aWQgV2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5n
UmFuZ2UmLCBBdHRyaWJ1dGVkU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtMjI4LDcgKzIyOSw3IEBAIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChJ
bnQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90LCB1aW50NjRfdCwgV2ViQ29yZTo6SW50UmVjdCYpCit2
b2lkIFdlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0IEVkaXRpbmdSYW5n
ZSYsIFdlYkNvcmU6OkludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCShyZXZpc2lvbiAxNjU3NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2ltcG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5o
IgorI2ltcG9ydCAiRWRpdGluZ1JhbmdlLmgiCiAjaW1wb3J0ICJFZGl0b3JTdGF0ZS5oIgogI2lt
cG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUGFnZUJhbm5lci5oIgpAQCAtMjQ1LDE4
ICsyNDYsMTggQEAgdm9pZCBXZWJQYWdlOjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1ZwogICAg
IH0KIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQs
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCwgdWludDY0X3QgcmVwbGFjZW1lbnRS
YW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoLCBFZGl0b3JTdGF0ZSYg
bmV3U3RhdGUpCit2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4
dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50RWRp
dGluZ1JhbmdlLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZTsKLSAgICAgICAgaWYgKHJlcGxh
Y2VtZW50UmFuZ2VTdGFydCAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICByZXBsYWNlbWVu
dFJhbmdlID0gcmFuZ2VGcm9tRWRpdGluZ0xvY2F0aW9uQW5kTGVuZ3RoKGZyYW1lLCByZXBsYWNl
bWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VMZW5ndGgpOworICAgICAgICBpZiAocmVw
bGFjZW1lbnRFZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAg
IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2Vt
ZW50RWRpdGluZ1JhbmdlKTsKICAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21w
b3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uU3RhcnQg
KyBzZWxlY3Rpb25MZW5ndGgpOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21wb3NpdGlv
bih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5nZS5sb2NhdGlvbiwgc2VsZWN0aW9uUmFu
Z2UubG9jYXRpb24gKyBzZWxlY3Rpb25SYW5nZS5sZW5ndGgpOwogICAgIH0KIAogICAgIG5ld1N0
YXRlID0gZWRpdG9yU3RhdGUoKTsKQEAgLTI3NiwxMiArMjc3LDEyIEBAIHZvaWQgV2ViUGFnZTo6
Y2FuY2VsQ29tcG9zaXRpb24oRWRpdG9yU3QKICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUxlbmd0
aCwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQordm9pZCBXZWJQYWdlOjpp
bnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNl
bWVudEVkaXRpbmdSYW5nZSwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQog
ewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CiAKLSAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0YXJ0ICE9IE5TTm90Rm91
bmQpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmFuZ2VGcm9t
RWRpdGluZ0xvY2F0aW9uQW5kTGVuZ3RoKGZyYW1lLCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJl
cGxhY2VtZW50UmFuZ2VMZW5ndGgpOworICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5s
b2NhdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50
UmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1Jh
bmdlKTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCiAgICAgICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdl
LmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIH0KQEAgLTI5OCwxMiArMjk5LDEy
IEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHQKICAgICBuZXdTdGF0
ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0RGljdGF0ZWRUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50
NjRfdCByZXBsYWNlbWVudFJhbmdlTGVuZ3RoLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYgaGFu
ZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQordm9pZCBXZWJQYWdlOjppbnNlcnREaWN0YXRl
ZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50
RWRpdGluZ1JhbmdlLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmU+
JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3Rh
dGUmIG5ld1N0YXRlKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKLSAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0
YXJ0ICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlID0gcmFuZ2VGcm9tRWRpdGluZ0xvY2F0aW9uQW5kTGVuZ3RoKGZyYW1lLCByZXBsYWNlbWVu
dFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VMZW5ndGgpOworICAgIGlmIChyZXBsYWNlbWVu
dEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxh
Y2VtZW50RWRpdGluZ1JhbmdlKTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCiAgICAg
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihy
ZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIH0KQEAg
LTMxMywzOSArMzE0LDMzIEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0
IFMKICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Z2V0
TWFya2VkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQordm9pZCBX
ZWJQYWdlOjpnZXRNYXJrZWRSYW5nZShFZGl0aW5nUmFuZ2UmIHJlc3VsdCkKIHsKICAgICBGcmFt
ZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKTsKICAgICBzaXplX3QgbG9jYXRpb25TaXplOwogICAgIHNpemVfdCBsZW5ndGhTaXpl
OwotICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb25TaXplLCBsZW5ndGhTaXplKSkgewotICAgICAg
ICBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhdGlvblNpemUpOwotICAgICAg
ICBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoU2l6ZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwotICAgICAgICBsZW5ndGggPSAwOwot
ICAgIH0KKyAgICBpZiAocmFuZ2UgJiYgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVu
dEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksIGxvY2F0aW9uU2l6ZSwgbGVuZ3RoU2l6ZSkpCisgICAg
ICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYXRpb25T
aXplKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aFNpemUpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2UodWludDY0X3QmIGxvY2F0aW9uLCB1aW50NjRfdCYgbGVuZ3RoKQordm9pZCBXZWJQ
YWdlOjpnZXRTZWxlY3RlZFJhbmdlKEVkaXRpbmdSYW5nZSYgcmVzdWx0KQogewogICAgIEZyYW1l
JiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAKICAgICBzaXplX3QgbG9jYXRpb25TaXplOwogICAgIHNpemVfdCBsZW5ndGhTaXplOwogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3Ro
RnJvbVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50
RWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb25TaXplLCBsZW5ndGhTaXplKSkgewotICAg
ICAgICBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhdGlvblNpemUpOwotICAg
ICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoU2l6ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbG9jYXRpb24gPSBOU05vdEZvdW5kOwotICAgICAgICBsZW5ndGggPSAw
OwotICAgIH0KKyAgICBpZiAocmFuZ2UgJiYgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExl
bmd0aEZyb21SYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1
bWVudEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksIGxvY2F0aW9uU2l6ZSwgbGVuZ3RoU2l6ZSkpCisg
ICAgICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYXRp
b25TaXplKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aFNpemUpKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6OmdldEF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgcmFuZ2VTdGFydCwgdWludDY0X3Qg
cmFuZ2VMZW5ndGgsIEF0dHJpYnV0ZWRTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZTo6Z2V0
QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdS
YW5nZSwgQXR0cmlidXRlZFN0cmluZyYgcmVzdWx0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKQEAgLTM1Myw3
ICszNDgsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tCiAgICAg
aWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkg
fHwgc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nTG9jYXRpb25BbmRMZW5ndGgo
ZnJhbWUsIHJhbmdlU3RhcnQsIHJhbmdlTGVuZ3RoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gcmFuZ2VGcm9tRWRpdGluZ1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2UpOwogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzYzLDE2ICszNTgsMTYgQEAgdm9pZCBXZWJQ
YWdlOjpnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbQogICAgIC8vIFtXZWJIVE1MQ29udmVydGVy
IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0gaW5zaXN0cyBvbiBpbnNlcnRpbmcg
YSB0cmFpbGluZyAKICAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3
aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1
NTE+CiAgICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50
IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCi0gICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5n
IGxlbmd0aF0gPiByYW5nZUxlbmd0aCkgewotICAgICAgICBBU1NFUlQoW2F0dHJpYnV0ZWRTdHJp
bmcgbGVuZ3RoXSA9PSByYW5nZUxlbmd0aCArIDEpOwotICAgICAgICBBU1NFUlQoW1thdHRyaWJ1
dGVkU3RyaW5nIHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpyYW5nZUxlbmd0aF0gPT0gJ1xuJyB8
fCBbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnJhbmdlTGVuZ3Ro
XSA9PSAnICcpOwotICAgICAgICByZXN1bHQuc3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCByYW5nZUxlbmd0aCldOwor
ICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdID4gZWRpdGluZ1JhbmdlLmxlbmd0aCkg
eworICAgICAgICBBU1NFUlQoW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSA9PSBlZGl0aW5nUmFu
Z2UubGVuZ3RoICsgMSk7CisgICAgICAgIEFTU0VSVChbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5n
XSBjaGFyYWN0ZXJBdEluZGV4OmVkaXRpbmdSYW5nZS5sZW5ndGhdID09ICdcbicgfHwgW1thdHRy
aWJ1dGVkU3RyaW5nIHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDplZGl0aW5nUmFuZ2UubGVuZ3Ro
XSA9PSAnICcpOworICAgICAgICByZXN1bHQuc3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFuZ2UubGVu
Z3RoKV07CiAgICAgfQogfQogCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQo
SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiBpbmRleCkKIHsKLSAgICBpbmRleCA9IE5TTm90Rm91
bmQ7CisgICAgaW5kZXggPSBub3RGb3VuZDsKIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChw
b2ludCk7CiAgICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8g
cmVzdWx0LmlubmVyTm9kZUZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKQEAgLTM4NywxMyArMzgyLDEzIEBAIHZvaWQgV2ViUGFnZTo6Y2hh
cmFjdGVySW5kZXhGb3JQb2ludChJbnQKICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obG9jYXRpb24pOwogfQogICAgIAotdm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBXZWJDb3JlOjpJ
bnRSZWN0JiByZXN1bHRSZWN0KQordm9pZCBXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgV2ViQ29yZTo6SW50UmVjdCYg
cmVzdWx0UmVjdCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIHJlc3VsdFJlY3Quc2V0TG9jYXRpb24oSW50
UG9pbnQoMCwgMCkpOwogICAgIHJlc3VsdFJlY3Quc2V0U2l6ZShJbnRTaXplKDAsIDApKTsKICAg
ICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VGcm9tRWRpdGluZ0xvY2F0aW9uQW5k
TGVuZ3RoKGZyYW1lLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gcmFuZ2VGcm9tRWRpdGluZ1JhbmdlKGZyYW1lLCBlZGl0aW5nUmFuZ2UpOwogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAK
</data>
<flag name="review"
          id="251221"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>