<?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>45508</bug_id>
          
          <creation_ts>2010-09-09 18:00:15 -0700</creation_ts>
          <short_desc>Move functions from Frame to SelectionController as planned</short_desc>
          <delta_ts>2012-05-30 00:50:58 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>276892</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 18:00:15 -0700</bug_when>
    <thetext>Move functions from Frame to SelectionController as planned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276912</commentid>
    <comment_count>1</comment_count>
      <attachid>67130</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 18:23:32 -0700</bug_when>
    <thetext>Created attachment 67130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276970</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 20:09:01 -0700</bug_when>
    <thetext>Attachment 67130 did not build on chromium:
Build output: http://queues.webkit.org/results/3974365</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276997</commentid>
    <comment_count>3</comment_count>
      <attachid>67130</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-09 21:27:33 -0700</bug_when>
    <thetext>Comment on attachment 67130
Patch

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

Please try not to break the chromium build when landing.  Thanks!

&gt; WebKit/chromium/src/WebFrameImpl.cpp:1716
&gt; +        return IntRect(frame()-&gt;selection()-&gt;selectionBounds(false));
Not just selection()-&gt;bounds(false) ?

&gt; WebKit/mac/WebView/WebHTMLView.mm:6052
&gt; +        coreFrame-&gt;selection()-&gt;selectionTextRects(list, SelectionController::RespectTransforms);
selection()-&gt;selectionTextRects =&gt; selection()-&gt;textRects ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277195</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-10 08:13:17 -0700</bug_when>
    <thetext>Sure, we could rename these functions now that they are on the SelectionController, but I think it’s probably best to do that in a separate pass.

I’ll think about doing it now, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277271</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-10 10:03:20 -0700</bug_when>
    <thetext>ok.  I just noticed you renamed granularity, which seemed like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277274</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-10 10:13:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I just noticed you renamed granularity, which seemed like a good idea.

That case was different; believe it or not I didn’t rename things. Frame::selectionGranularity() was a function with the body &quot;return selection()-&gt;granularity()&quot;, and I chose to delete that rather than moving it to SelectionController.

One problem with renaming is that SelectionController is accessed with a call named selection() yet represents more than just the selection; the broader concept of selection control. So in some cases we might need to keep selection in the names of selection controller functions.

But despite that it does seem likely we can remove the word selection from virtually all SelectionController function names. Just not sure if I should do it now as part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277460</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-10 15:07:09 -0700</bug_when>
    <thetext>Committed r67238: &lt;http://trac.webkit.org/changeset/67238&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636980</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 00:50:58 -0700</bug_when>
    <thetext>*** Bug 23431 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67130</attachid>
            <date>2010-09-09 18:23:32 -0700</date>
            <delta_ts>2010-09-09 21:27:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45508-20100909182330.patch</filename>
            <type>text/plain</type>
            <size>84633</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzEzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA5LTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IGZ1bmN0aW9ucyBmcm9tIEZyYW1lIHRvIFNlbGVjdGlvbkNvbnRyb2xsZXIgYXMgcGxhbm5lZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1MDgKKwor
ICAgICAgICBBbHNvIHJlbW92ZWQgRnJhbWU6OmRyYWdDYXJldENvbnRyb2xsZXIgc2luY2UgaXQg
anVzdCBjYWxsZWQgUGFnZTo6ZHJhZ0NhcmV0Q29udHJvbGxlci4KKworICAgICAgICAqIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6bW9kaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5UmVuZGVyZXJPZlNlbGVj
dGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjppc0ZyYW1lRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZERlbGV0ZVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3Rpb25C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0aW9u
VGV4dFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24pOgor
ICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICBNb3ZlZCBm
dW5jdGlvbnMgaGVyZSBmcm9tIEZyYW1lLgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6Cisg
ICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICBNb3ZlZCBmdW5jdGlvbnMgdG8gU2VsZWN0
aW9uQ29udHJvbGxlci4KKyAgICAgICAgUmVvcmdhbml6ZWQgaGVhZGVyIHRvIGJlIGVhc2llciB0
byByZWFkIGFuZCBhIGJpdCBtb3JlIGxvZ2ljYWwuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5p
bjogVXBkYXRlZC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICBDYWxsIFBhZ2U6OmRy
YWdDYXJldENvbnRyb2xsZXIgZGlyZWN0bHkuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAg
ICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVt
ZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRp
bmdTdHlsZUF0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblNtYXJ0Q29weU9yRGVsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZmluZFN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjppbnB1dCk6CisgICAgICAg
ICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAg
ICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAg
ICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0xvY0ZvclNl
bGVjdGlvbkRyYWcpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkT3JMaW5r
RnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAq
IHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKToKKyAgICAgICAgKiBwYWdlL21hYy9G
cmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25JbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZE1hYzo6d3JpdGVSYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKyAg
ICAgICAgQ2FsbCBmdW5jdGlvbnMgb24gc2VsZWN0aW9uKCkuCisKIDIwMTAtMDktMDkgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY3MTIyKQorKysgV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw2IEBAIF9fWk43V2ViQ29y
ZTE1RGF0YWJhc2VUcmFja2VyOXNldENsaWVudEUKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9s
bGVyMTBzZXRGb2N1c2VkRWIKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMTVzZXRGb2N1
c2VkRnJhbWVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUZyYW1lRUVFCiBfX1pON1dlYkNvcmUxNUZv
Y3VzQ29udHJvbGxlcjE1c2V0SW5pdGlhbEZvY3VzRU5TXzE0Rm9jdXNEaXJlY3Rpb25FUE5TXzEz
S2V5Ym9hcmRFdmVudEUKLV9fWk5LN1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE4Zm9jdXNlZE9y
TWFpbkZyYW1lRXYKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyOXNldEFjdGl2ZUViCiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyc2V0RmlsbENvbG9yRVJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NGNsaXBFUktOU185
RmxvYXRSZWN0RQpAQCAtNDIzLDcgKzQyMiw5IEBAIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1
ZXN0QmFzZTE5YWRkSFQKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTZzZXRVUkxF
UktOU180S1VSTEUKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjEwc2V0Rm9jdXNl
ZEViCiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMnNldFNlbGVjdGlvbkVSS05T
XzE2VmlzaWJsZVNlbGVjdGlvbkViYmJOUzBfMTlDdXJzb3JBbGlnbk9uU2Nyb2xsRU5TXzE1VGV4
dEdyYW51bGFyaXR5RU5TXzIwRGlyZWN0aW9uYWxpdHlQb2xpY3lFCitfX1pON1dlYkNvcmUxOVNl
bGVjdGlvbkNvbnRyb2xsZXIxNXJldmVhbFNlbGVjdGlvbkVSS05TXzE1U2Nyb2xsQWxpZ25tZW50
RWIKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE2c2V0U2VsZWN0ZWRSYW5nZUVQ
TlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgorX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9s
bGVyMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRy
b2xsZXI1Y2xlYXJFdgogX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyNm1vZGlmeUVO
UzBfMTFFQWx0ZXJhdGlvbkVOUzBfMTBFRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWIK
IF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjlzZWxlY3RBbGxFdgpAQCAtNTgwLDgg
KzU4MSw2IEBAIF9fWk43V2ViQ29yZTVDYWNoZTEzZ2V0U3RhdGlzdGljc0V2CiBfX1pON1dlYkNv
cmU1Q2FjaGUxM3NldENhcGFjaXRpZXNFampqCiBfX1pON1dlYkNvcmU1RnJhbWUxMGNyZWF0ZVZp
ZXdFUktOU183SW50U2l6ZUVSS05TXzVDb2xvckViUzNfYk5TXzEzU2Nyb2xsYmFyTW9kZUViUzdf
YgogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRnZXRFCi1fX1pO
N1dlYkNvcmU1RnJhbWUxNXJldmVhbFNlbGVjdGlvbkVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RWIK
LV9fWk43V2ViQ29yZTVGcmFtZTIwc2V0U2VsZWN0aW9uRnJvbU5vbmVFdgogX19aTjdXZWJDb3Jl
NUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2Vi
Q29yZTVGcmFtZTI1bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1l
bnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyOHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnRFUDdO
U0FycmF5UE5TXzdFbGVtZW50RVBtUGIKQEAgLTkzNCw2ICs5MzMsNyBAQCBfX1pOSzdXZWJDb3Jl
MTRSZW5kZXJMaXN0SXRlbTEwbWFya2VyVGV4CiBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUhhbmRs
ZTEwY29ubmVjdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjExZnJhbWVMb2Fk
ZXJFdgogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW41ZXF1YWxFUEtTMF8KK19fWk5LN1dl
YkNvcmUxNUZvY3VzQ29udHJvbGxlcjE4Zm9jdXNlZE9yTWFpbkZyYW1lRXYKIF9fWk5LN1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDE1cGxhdGZvcm1Db250ZXh0RXYKIF9fWk5LN1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDE2cGFpbnRpbmdEaXNhYmxlZEV2CiBfX1pOSzdXZWJDb3JlMTVQcm9ncmVz
c1RyYWNrZXIxN2VzdGltYXRlZFByb2dyZXNzRXYKQEAgLTk1Niw4ICs5NTYsMTEgQEAgX19aTks3
V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjI0bnVtYgogX19aTks3V2ViQ29yZTE5UmVzb3Vy
Y2VSZXF1ZXN0QmFzZTEwaHR0cE1ldGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVl
c3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlF
dgorX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjExY3VycmVudEZvcm1FdgorX19a
Tks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE1c2VsZWN0aW9uQm91bmRzRWIKIF9fWk5L
N1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxN2lzSW5QYXNzd29yZEZpZWxkRXYKIF9fWk5L
N1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxOGlzRm9jdXNlZEFuZEFjdGl2ZUV2CitfX1pO
SzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMThzZWxlY3Rpb25UZXh0UmVjdHNFUk4zV1RG
NlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRU5TMF8zMFNlbGVjdGlvblJlY3RSZXNwZWN0VHJh
bnNmb3Jtc0ViCiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTE0aHR0cFN0YXR1
c0NvZGVFdgogX19aTks3V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UxNGh0dHBTdGF0dXNU
ZXh0RXYKIF9fWk5LN1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMTVodHRwSGVhZGVyRmll
bGRFUEtjCkBAIC05ODgsMTUgKzk5MSwxMSBAQCBfX1pOSzdXZWJDb3JlNFBhZ2UxMHBsdWdpbkRh
dGFFdgogX19aTks3V2ViQ29yZTRQYWdlMTViYWNrRm9yd2FyZExpc3RFdgogX19aTks3V2ViQ29y
ZTRQYWdlMzRpbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlRXYKIF9fWk5LN1dlYkNv
cmU0UGFnZTlncm91cE5hbWVFdgotX19aTks3V2ViQ29yZTVGcmFtZTExY3VycmVudEZvcm1Fdgog
X19aTks3V2ViQ29yZTVGcmFtZTEzb3duZXJSZW5kZXJlckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1l
MTRzZWxlY3Rpb25JbWFnZUViCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVjb250ZW50UmVuZGVyZXJF
dgogX19aTks3V2ViQ29yZTVGcmFtZTE1bGF5ZXJUcmVlQXNUZXh0RXYKLV9fWk5LN1dlYkNvcmU1
RnJhbWUxNXNlbGVjdGlvbkJvdW5kc0ViCiBfX1pOSzdXZWJDb3JlNUZyYW1lMThkb2N1bWVudFR5
cGVTdHJpbmdFdgotX19aTks3V2ViQ29yZTVGcmFtZTE4c2VsZWN0aW9uVGV4dFJlY3RzRVJOM1dU
RjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUVOUzBfMzBTZWxlY3Rpb25SZWN0UmVzcGVjdFRy
YW5zZm9ybXNFYgotX19aTks3V2ViQ29yZTVGcmFtZTIwc2VsZWN0aW9uR3JhbnVsYXJpdHlFdgog
X19aTks3V2ViQ29yZTVGcmFtZThzZXR0aW5nc0V2CiBfX1pOSzdXZWJDb3JlNUZyYW1lOWRvbVdp
bmRvd0V2CiBfX1pOSzdXZWJDb3JlNVJhbmdlMTFzdGFydE9mZnNldEVSaQpJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gNjcxMjEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNjIsNyArMzI2Miw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewogICAg
ICAgICBmb3IgKE5vZGUqIG4gPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bm9kZVdpbGxC
ZVJlbW92ZWQobik7Ci0gICAgICAgICAgICBmcmFtZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5u
b2RlV2lsbEJlUmVtb3ZlZChuKTsKKyAgICAgICAgICAgIGZyYW1lLT5wYWdlKCktPmRyYWdDYXJl
dENvbnRyb2xsZXIoKS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC0zMjgxLDcgKzMyODEsNyBAQCB2b2lkIERvY3VtZW50Ojpub2RlV2lsbEJlUmVtb3ZlZChO
b2RlKiBuCiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewogICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm5vZGVXaWxsQmVSZW1vdmVkKG4pOwotICAgICAgICBmcmFt
ZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKKyAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChu
KTsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpJbmRleDogV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDY3MTIxKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNDcsOSArMTM0Nyw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJh
bmNlKGJvb2wKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIHRoZSBwcmV2aW91
cyBzZWxlY3Rpb24gaWYgdGhlcmUgaXMgb25lLgogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24odGhpcywgMCksIERPV05TVFJF
QU0pOwogICAgICAgICAKLSAgICAgICAgaWYgKGZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKSkgeworICAgICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkgewogICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKLSAgICAgICAgICAgIGZyYW1lLT5y
ZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFs
U2VsZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgIXJl
bmRlcmVyKCktPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbFJlY3RUb1Zpc2libGUoZ2V0UmVjdCgpKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0lu
cHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNw
cAkocmV2aXNpb24gNjcxMjIpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1
c0FwcGVhcmFuY2UKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50
KCk7CiAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBkb2N1
bWVudC0+ZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CiB9CiAKIHZvaWQgSW5wdXRFbGVt
ZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZShJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxl
bWVudCogZWxlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NzEyMSkKKysrIFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Miw3ICs0NzIsNyBAQCBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBCiAgICAgfQogCiAgICAgaWYg
KHNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSA9PSBJbmNsdWRlVHlwaW5nU3R5bGUpIHsKLSAgICAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlID0gcG9zLm5vZGUoKS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dHlwaW5nU3R5bGUoKTsKKyAgICAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlID0gcG9zLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgICAgIGlmICh0eXBpbmdTdHls
ZSkKICAgICAgICAgICAgIHN0eWxlLT5tZXJnZSh0eXBpbmdTdHlsZSk7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNjcx
MjIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxNCw3ICs3MTQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhl
IG5ldyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRl
bGV0ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21l
IGJhY2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBz
ZWUgCiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGRvY3VtZW50KCkt
PmZyYW1lKCktPnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCkpOworICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxl
KTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRl
KCkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2NzEyMikKKysrIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBFZGl0
b3I6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCiAgICAgCiBib29sIEVkaXRvcjo6Y2FuU21h
cnRDb3B5T3JEZWxldGUoKQogewotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCkgJiYgbV9mcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHko
KSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5z
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Z3JhbnVs
YXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKQpAQCAtNTUxLDcgKzU1MSw3IEBAIFdyaXRpbmdEaXJl
Y3Rpb24gRWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm8KICAgICB9CiAKICAgICBpZiAobV9mcmFtZS0+
c2VsZWN0aW9uKCktPmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHR5cGluZ1N0eWxlID0gbV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkgeworICAgICAg
ICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdW5pY29kZUJpZGkgPSB0eXBpbmdTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eVVuaWNvZGVCaWRpKTsKICAgICAgICAgICAgIGlmICh1bmljb2RlQmlkaSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVCh1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKQEAgLTEw
MTEsNyArMTAxMSw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEUK
ICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwgZmFs
c2UpOwogICAgICAgICAKICAgICBpZiAoIWNtZC0+cHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKLSAg
ICAgICAgbV9mcmFtZS0+c2V0VHlwaW5nU3R5bGUoMCk7CisgICAgICAgIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgCiAgICAgLy8gQ29tbWFuZCB3aWxsIGJl
IGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAg
ICAgaWYgKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpID09IGNtZCkKQEAgLTExMTYsNyArMTExNiw3
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXgKICAgICAgICAgICAg
IC8vIFJldmVhbCB0aGUgY3VycmVudCBzZWxlY3Rpb24gCiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnJldmVhbFNlbGVjdGlv
bihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAgICAgICAgICAgICAg
ICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVj
dGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVl
ZGVkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzMiw3ICsyMTMyLDcgQEAgdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgICAgICAvLyBGSVhNRSA0ODU5MTkw
OiBUaGlzIGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQg
b2YgYSBwYXJhZ3JhcGgKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hclBo
cmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3Ro
KTsKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAg
ICAgICAgZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIGZyYW1lKCktPnNlbGVj
dGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1h
ckRldGFpbCk7CiAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1t
YXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIxNDMsNyArMjE0Myw3IEBAIHZvaWQgRWRp
dG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm8KICAgICAgICAgCiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxp
bmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIG1pc3NwZWxsZWRXb3JkLmxl
bmd0aCgpKTsKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKLSAgICAg
ICAgZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlv
bigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAgICAg
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAgLTI0MzUsNyArMjQzNSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICAgICBpZiAoIWF1dG9j
b3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwogICAgICAgICBp
ZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewot
ICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKSkKKyAgICAgICAgICAgIGlmICghZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5n
ZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsK
ICAgICAgICAgfQpAQCAtMjcwOSw3ICsyNzA5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChkb1JlcGxhY2VtZW50ICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYm
IHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNl
bGVjdGlvblRvUmVwbGFjZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI4NzUsNyArMjg3NSw3IEBAIHZvaWQg
RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmcKICAgICBpZiAobV9pZ25vcmVDb21w
b3NpdGlvblNlbGVjdGlvbkNoYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mcmFtZS0+
cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7Cisg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlQ29tcG9z
aXRpb25TZWxlY3Rpb25DaGFuZ2UoYm9vbCBpZ25vcmUpCkBAIC0yOTUyLDcgKzI5NTIsNyBAQCB2
b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3Rl
cnMuCiAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICB9
CkBAIC0zMTI1LDcgKzMxMjUsNyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJD
b21tYW5kCiAgICAgLy8gVGhlIG9sZCBzZWxlY3Rpb24gY2FuIGJlIGludmFsaWQgaGVyZSBhbmQg
Y2FsbGluZyBzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29tZSBzdHJhbmdlIGNh
bGxzLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTcyOTMxNT4gU29tZSBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlIGNvbnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rpb25zIHRoYXQgYXJl
IG5vIGxvbmdlciB2YWxpZAogICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRp
b24gPSBuZXdTZWxlY3Rpb24gPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwot
ICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90
Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgY2xvc2VUeXBpbmcsIGNsZWFyVHlwaW5nU3R5bGUpOwog
ICAgICAgICAKICAgICAvLyBTb21lIGVkaXRpbmcgb3BlcmF0aW9ucyBjaGFuZ2UgdGhlIHNlbGVj
dGlvbiB2aXN1YWxseSB3aXRob3V0IGFmZmVjdGluZyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBE
T00uCkBAIC0zMTk2LDE4ICszMTk2LDE4IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3QKICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQog
Ci12b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24gKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit2b2lkIEVkaXRvcjo6Y29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpKSB7
Ci0gICAgICAgIG1fZnJhbWUtPmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11
dGFibGUoKTsKLSAgICBpZiAobV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkgewotICAgICAgICBtX2Zy
YW1lLT50eXBpbmdTdHlsZSgpLT5tZXJnZShtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgICAgICBt
dXRhYmxlU3R5bGUgPSBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpOworICAgIGlmIChtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSkgeworICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+dHlwaW5nU3R5bGUoKS0+bWVyZ2UobXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICAgICAgbXV0
YWJsZVN0eWxlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgfQog
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaTsKQEAgLTMyMzYsNyArMzIzNiw3IEBA
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1MKICAgICAgICAgYXBwbHlD
b21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYmxv
Y2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5p
bmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLT5zZXRUeXBpbmdTdHls
ZShtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBp
bmdTdHlsZShtdXRhYmxlU3R5bGUucmVsZWFzZSgpKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24+IEVkaXRvcjo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2Rl
KiYgbm9kZVRvUmVtb3ZlKSBjb25zdApAQCAtMzI2NCwxMCArMzI2NCwxMCBAQCBQYXNzUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxl
RWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBpZiAo
bV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICBzdHlsZUVsZW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKIAotICAgICAgICBzdHlsZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIG1fZnJhbWUtPnR5cGluZ1N0eWxlKCktPmNzc1Rl
eHQoKS5pbXBsKCksIGVjKTsKKyAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5
bGVBdHRyLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKS0+Y3NzVGV4dCgpLCBl
Yyk7CiAgICAgICAgIEFTU0VSVCghZWMpOwogCiAgICAgICAgIHN0eWxlRWxlbWVudC0+YXBwZW5k
Q2hpbGQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKSwgZWMp
OwpAQCAtMzM2OCwxMyArMzM2OCwxMyBAQCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNl
bGVjdGlvblN0CiAgICAgaWYgKCFwb3NpdGlvbi5ub2RlKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgaWYgKCFtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKQorICAgIGlmICghbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbi5ub2RlKCkt
PnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0gbV9mcmFt
ZS0+dHlwaW5nU3R5bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOworICAgIFN0
cmluZyBzdHlsZVRleHQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKS0+Y3Nz
VGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwogICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgc3R5bGVUZXh0LmltcGwoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwog
CkBAIC0zNDcxLDcgKzM0NzEsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSkpOwotICAgIG1fZnJhbWUtPnJldmVhbFNlbGVjdGlvbigpOworICAgIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNjcxMjIpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIs
NyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlKEZyYW1lKiBmcmFtZSwgCiAgICAgY2FzZSBD
b21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlOgogICAgICAgICAvLyBJZiB0aGUgY3VycmVu
dCBzZWxlY3Rpb24gaXMgYSBjYXJldCwgZGVsZXRlIHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVyLiBJ
RSBwZXJmb3JtcyBmb3J3YXJkRGVsZXRlLCBidXQgd2UgY3VycmVudGx5IHNpZGUgd2l0aCBGaXJl
Zm94LgogICAgICAgICAvLyBEb2Vzbid0IHNjcm9sbCB0byBtYWtlIHRoZSBzZWxlY3Rpb24gdmlz
aWJsZSwgb3IgbW9kaWZ5IHRoZSBraWxsIHJpbmcgKHRoaXMgdGltZSwgc2lkaW5nIHdpdGggSUUs
IG5vdCBGaXJlZm94KS4KLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChm
cmFtZS0+ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdy
YW51bGFyaXR5KTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFt
ZS0+ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0eSgpID09IFdvcmRH
cmFudWxhcml0eSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDY3MTIxKQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBJbnNl
cnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3
aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KICAgICAKLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT50eXBpbmdTdHls
ZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOwogICAgIAogICAgIGlm
ICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgIC8v
IEFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWssIHNvIHRo
YXQgaWYgdGhlIHNlbGVjdGlvbgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA2NzEyMSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIEluc2VydFRleHRD
b21tYW5kOjppbnB1dChjb25zdCBTdHJpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZvcmNlZEVu
ZGluZ1NlbGVjdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMg
YSB0eXBpbmcgc3R5bGUuCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0
eWxlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uPiBlbmRpbmdTdHlsZSA9IGVuZFBvc2l0aW9uLmNvbXB1dGVkU3R5bGUoKTsKICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0
aW9uOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjcxMjEpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAKICAgICAvLyBJbnNlcnQgdGhlIGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVs
dCBzdHlsZS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQzODI+IFJlbW92ZUZvcm1h
dCBkb2Vzbid0IGFsd2F5cyByZXNldCB0ZXh0IGFsaWdubWVudAotICAgIGZyYW1lLT5zZXRUeXBp
bmdTdHlsZShkZWZhdWx0U3R5bGUuZ2V0KCkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
VHlwaW5nU3R5bGUoZGVmYXVsdFN0eWxlLnJlbGVhc2UoKSk7CiAgICAgCiAgICAgaW5wdXRUZXh0
KHN0cmluZywgdHJ1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY3MTIxKQorKysgV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk4LDcgKzg5OCw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVk
PyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCiAgICAgLy8gYW55IHdvcmsgcGVyZm9ybWVkIGFm
dGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVzZXMgdGhlIHR5cGluZyBzdHlsZS4KICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPmNsZWFy
VHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhclR5cGluZ1N0
eWxlKCk7CiAgICAgCiAgICAgYm9vbCBoYW5kbGVkU3R5bGVTcGFucyA9IGhhbmRsZVN0eWxlU3Bh
bnNCZWZvcmVJbnNlcnRpb24oZnJhZ21lbnQsIGluc2VydGlvblBvcyk7CiAKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY3MTIyKQorKysgV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTM4LDcgKzM5LDggQEAKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVxdWVzdC5oIgpAQCAtNDYsOCArNDgsMTAgQEAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAi
U2VjdXJlVGV4dElucHV0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKQEAgLTEwNyw3ICsxMTEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vdmVUbyhjb25zdCBQCiAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFzZSwg
ZXh0ZW50LCBhZmZpbml0eSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQpOwogfQogCi12b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzLCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUsIGJvb2wgdXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBkaXJlY3Rpb25hbGl0eVBvbGljeSkKK3ZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSwgYm9vbCB1
c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5UG9saWN5KQog
ewogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIApAQCAtMTM0LDE1ICsxMzgsMTUg
QEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24oYwogICAgIC8vIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ2ND46IEluZmluaXRlIHJlY3Vy
c2lvbiBhdCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24KICAgICAvLyBpZiBkb2N1
bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29w
CiAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFt
ZSgpICE9IG1fZnJhbWUgJiYgZG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewotICAg
ICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzLCBjbG9z
ZVR5cGluZywgY2xlYXJUeXBpbmdTdHlsZSwgdXNlclRyaWdnZXJlZCk7CisgICAgICAgIGRvY3Vt
ZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHMsIGNsb3NlVHlwaW5nLCBz
aG91bGRDbGVhclR5cGluZ1N0eWxlLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBpZiAoY2xvc2VUeXBpbmcpCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6
OmNsb3NlVHlwaW5nKG1fZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKSk7CiAKLSAg
ICBpZiAoY2xlYXJUeXBpbmdTdHlsZSkKLSAgICAgICAgbV9mcmFtZS0+Y2xlYXJUeXBpbmdTdHls
ZSgpOworICAgIGlmIChzaG91bGRDbGVhclR5cGluZ1N0eWxlKQorICAgICAgICBjbGVhclR5cGlu
Z1N0eWxlKCk7CiAgICAgICAgIAogICAgIGlmIChtX3NlbGVjdGlvbiA9PSBzKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTQsNyArMTU4LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRT
ZWxlY3Rpb24oYwogICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUgPSB0cnVlOwogICAgIAogICAg
IGlmICghcy5pc05vbmUoKSkKLSAgICAgICAgbV9mcmFtZS0+c2V0Rm9jdXNlZE5vZGVJZk5lZWRl
ZCgpOworICAgICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CiAgICAgCiAgICAgdXBkYXRl
QXBwZWFyYW5jZSgpOwogCkBAIC0xNjIsNyArMTY2LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTZWxlY3Rpb24oYwogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZl
cnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bjsKICAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwotICAg
IG1fZnJhbWUtPm5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7
CisgICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKICAg
ICBtX2ZyYW1lLT5lZGl0b3IoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24sIGNsb3NlVHlwaW5nKTsKICAgICBpZiAodXNlclRyaWdnZXJlZCkgewogICAgICAgICBTY3Jv
bGxBbGlnbm1lbnQgYWxpZ25tZW50OwpAQCAtMTcyLDcgKzE3Niw3IEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxp
Z25tZW50ID0gKGFsaWduID09IEFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMpID8gU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZDsKIAotICAgICAgICBtX2ZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oYWxpZ25tZW50LCB0cnVl
KTsKKyAgICAgICAgcmV2ZWFsU2VsZWN0aW9uKGFsaWdubWVudCwgdHJ1ZSk7CiAgICAgfQogCiAg
ICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpOwpAQCAtMjg3LDggKzI5
MSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6d2lsbEJlTW9kaWZpZWQKIAogVGV4dERp
cmVjdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkK
IHsKLSAgICBOb2RlKiBuID0gbV9zZWxlY3Rpb24uZXh0ZW50KCkubm9kZSgpOwotICAgIE5vZGUq
IGVuY2xvc2luZ0Jsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKG4pOworICAgIE5vZGUqIGVuY2xv
c2luZ0Jsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKG1fc2VsZWN0aW9uLmV4dGVudCgpLm5vZGUo
KSk7CiAgICAgaWYgKCFlbmNsb3NpbmdCbG9ja05vZGUpCiAgICAgICAgIHJldHVybiBMVFI7CiAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVuY2xvc2luZ0Jsb2NrTm9kZS0+cmVuZGVyZXIo
KTsKQEAgLTYzOCw3ICs2NDEsNyBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShF
QWx0ZXJhCiAgICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZXRJc0RpcmVjdGlvbmFs
KG1faXNEaXJlY3Rpb25hbCk7CiAgICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5tb2Rp
ZnkoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGZhbHNlLCBzZXR0aW5ncyk7CiAKLSAg
ICAgICAgYm9vbCBjaGFuZ2UgPSBtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24odHJpYWxT
ZWxlY3Rpb25Db250cm9sbGVyLnNlbGVjdGlvbigpKTsKKyAgICAgICAgYm9vbCBjaGFuZ2UgPSBz
aG91bGRDaGFuZ2VTZWxlY3Rpb24odHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNlbGVjdGlvbigp
KTsKICAgICAgICAgaWYgKCFjaGFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQpAQCAtNzM0LDcgKzczNyw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVB
bHRlcmEKICAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldElzRGlyZWN0aW9uYWwo
bV9pc0RpcmVjdGlvbmFsKTsKICAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1vZGlm
eShhbHRlciwgdmVydGljYWxEaXN0YW5jZSwgZmFsc2UpOwogCi0gICAgICAgIGJvb2wgY2hhbmdl
ID0gbV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxl
ci5zZWxlY3Rpb24oKSk7CisgICAgICAgIGJvb2wgY2hhbmdlID0gc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlmICgh
Y2hhbmdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEyNDMsNyArMTI0
Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKIAogICAgIC8v
IEZvY3VzIG9uIHRoZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0
aGlzIGVsZW1lbnQgdG8gYWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
YmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7Ci0gICAgaWYgKHBhcmVudC0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKKyAgICBpZiAocGFyZW50LT5z
ZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKICAgICAg
ICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShwYXJlbnQpOwogICAg
ICAgICBwYXJlbnQtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAg
ICB9CkBAIC0xMjY5LDEwICsxMjcyLDEwIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2Vs
ZWN0QWxsKCkKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybjsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVu
dHNPZk5vZGUocm9vdCkpOwotICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKSkKKyAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlv
bikpCiAgICAgICAgIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIHNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+bm90aWZ5UmVu
ZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKKyAgICBub3RpZnlSZW5kZXJlck9mU2VsZWN0
aW9uQ2hhbmdlKHRydWUpOwogfQogCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY2xvc2VUeXBp
bmcpCkBAIC0xMzQ3LDExICsxMzUwLDExIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9j
dXNlZE9yQWN0aXYKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRh
dGUgcGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkpCi0g
ICAgICAgIHZpZXctPnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGVu
Y2xvc2luZ0ludFJlY3QobV9mcmFtZS0+c2VsZWN0aW9uQm91bmRzKCkpKTsKKyAgICAgICAgdmll
dy0+cmVwYWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoZW5jbG9zaW5nSW50
UmVjdChzZWxlY3Rpb25Cb3VuZHMoKSkpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUg
YWN0aXZlIGZyYW1lLgogICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQotICAgICAgICBtX2ZyYW1l
LT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgp
OwogICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKIAogICAgIC8vIFVwZGF0
ZSBmb3IgY2FwcyBsb2NrIHN0YXRlCkBAIC0xNTAyLDYgKzE1MDUsMjI3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWUKICNlbmRpZgogfQogCit2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6Om5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UoYm9vbCB1c2VyVHJp
Z2dlcmVkKQoreworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQo
KTsKKworICAgIGlmICghcm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcm9vdEVkaXRhYmxlRWxlbWVudCgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0b1JlbmRlclRl
eHRDb250cm9sKHJlbmRlcmVyKS0+c2VsZWN0aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkKTsKK30K
KworLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgdGVsbHMgd2hldGhlciBhIHBhcnRpY3VsYXIgbm9k
ZSBpcyBhbiBlbGVtZW50IHRoYXQgaGFzIGFuIGVudGlyZQorLy8gRnJhbWUgYW5kIEZyYW1lVmll
dywgYSA8ZnJhbWU+LCA8aWZyYW1lPiwgb3IgPG9iamVjdD4uCitzdGF0aWMgYm9vbCBpc0ZyYW1l
RWxlbWVudChjb25zdCBOb2RlKiBuKQoreworICAgIGlmICghbikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdl
dCgpOworICAgIHJldHVybiB3aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpOworfQorCit2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEZvY3VzZWROb2RlSWZOZWVkZWQoKQoreworICAg
IGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJv
b2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGlu
Z3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAoY2FyZXRCcm93c2luZykgewor
ICAgICAgICBpZiAoTm9kZSogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChiYXNlKCkp
KSB7CisgICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRG
b2N1c2VkTm9kZShhbmNob3IsIG1fZnJhbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKE5vZGUqIHRhcmdldCA9IHJvb3RFZGl0YWJsZUVsZW1lbnQo
KSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGFyZ2V0LT5yZW5kZXJlcigp
OworCisgICAgICAgIC8vIFdhbGsgdXAgdGhlIHJlbmRlciB0cmVlIHRvIHNlYXJjaCBmb3IgYSBu
b2RlIHRvIGZvY3VzLgorICAgICAgICAvLyBXYWxraW5nIHVwIHRoZSBET00gdHJlZSB3b3VsZG4n
dCB3b3JrIGZvciBzaGFkb3cgdHJlZXMsIGxpa2UgdGhvc2UgYmVoaW5kIHRoZSBlbmdpbmUtYmFz
ZWQgdGV4dCBmaWVsZHMuCisgICAgICAgIHdoaWxlIChyZW5kZXJlcikgeworICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJmcmFtZSB3aGVuIHNlbGVjdGlu
ZyBpbiBhIHBhcmVudCBmcmFtZSwKKyAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVF
bGVtZW50IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2Ug
dGhpcworICAgICAgICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0
aGUgc2FmZXN0IGZpeCBhdCB0aGlzIHRpbWUuCisgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRh
cmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Cisg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9j
dXNlZE5vZGUodGFyZ2V0LCBtX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSByZW5kZXJl
ci0+bm9kZSgpOworICAgICAgICB9CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldEZv
Y3VzZWROb2RlKDApOworICAgIH0KKworICAgIGlmIChjYXJldEJyb3dzaW5nKQorICAgICAgICBt
X2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSgwLCBtX2Zy
YW1lKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludERyYWdDYXJldChHcmFw
aGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
Y29uc3QKK3sKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKKyAgICBTZWxlY3Rpb25Db250cm9sbGVy
KiBkcmFnQ2FyZXRDb250cm9sbGVyID0gbV9mcmFtZS0+cGFnZSgpLT5kcmFnQ2FyZXRDb250cm9s
bGVyKCk7CisgICAgQVNTRVJUKGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLmlzQ2Fy
ZXQoKSk7CisgICAgaWYgKGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCku
bm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgIGRyYWdDYXJl
dENvbnRyb2xsZXItPnBhaW50Q2FyZXQocCwgdHgsIHR5LCBjbGlwUmVjdCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShwKTsKKyAgICBVTlVTRURfUEFSQU0odHgpOworICAgIFVOVVNFRF9QQVJB
TSh0eSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaXBSZWN0KTsKKyNlbmRpZgorfQorCitib29sIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigp
LT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOworfQorCitGbG9hdFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0aW9u
Qm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmll
dyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIEZyYW1lVmlldyogdmll
dyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxl
Y3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNvbnRlbnQpOworICAgIHJldHVybiBjbGlwVG9WaXNp
YmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNpYmxlQ29u
dGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OnNlbGVjdGlvblRleHRSZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIFNlbGVjdGlv
blJlY3RSZXNwZWN0VHJhbnNmb3JtcyByZXNwZWN0VHJhbnNmb3JtcywgYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOworCisgICAg
RmxvYXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgCisgICAgLy8gRklNWEU6IHdlIGFyZSBhcHBlbmRpbmcgZW1wdHkg
cmVjdHMgdG8gdGhlIGxpc3QgZm9yIHRob3NlIHRoYXQgZmFsbCBvdXRzaWRlIHZpc2libGVDb250
ZW50UmVjdC4KKyAgICAvLyBXZSBtYXkgbm90IHdhbnQgdG8gZG8gdGhhdC4KKyAgICBpZiAocmVz
cGVjdFRyYW5zZm9ybXMpIHsKKyAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAg
ICAgIHNlbGVjdGVkUmFuZ2UtPnRleHRRdWFkcyhxdWFkcywgdHJ1ZSk7CisKKyAgICAgICAgdW5z
aWduZWQgc2l6ZSA9IHF1YWRzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgSW50UmVjdCBjdXJyUmVjdCA9IHF1YWRzW2ld
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBpZiAoY2xpcFRvVmlzaWJsZUNv
bnRlbnQpCisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGludGVyc2VjdGlvbihjdXJyUmVj
dCwgdmlzaWJsZUNvbnRlbnRSZWN0KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmVjdHMuYXBwZW5kKGN1cnJSZWN0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiBpbnRSZWN0czsKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+dGV4
dFJlY3RzKGludFJlY3RzLCB0cnVlKTsKKworICAgICAgICB1bnNpZ25lZCBzaXplID0gaW50UmVj
dHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCisgICAgICAgICAgICAgICAg
cmVjdHMuYXBwZW5kKGludGVyc2VjdGlvbihpbnRSZWN0c1tpXSwgdmlzaWJsZUNvbnRlbnRSZWN0
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGludFJl
Y3RzW2ldKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gU2NhbnMgbG9naWNhbGx5IGZvcndh
cmQgZnJvbSAic3RhcnQiLCBpbmNsdWRpbmcgYW55IGNoaWxkIGZyYW1lcy4KK3N0YXRpYyBIVE1M
Rm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUqIHN0YXJ0KQoreworICAgIGZvciAoTm9kZSog
bm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOworICAgICAgICBpZiAobm9kZS0+
aXNIVE1MRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAg
ICAgICAgIE5vZGUqIGNoaWxkRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50
QmFzZSo+KG5vZGUpLT5jb250ZW50RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChIVE1MRm9y
bUVsZW1lbnQqIGZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2N1bWVudCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lUmVzdWx0OworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCisvLyBXZSBsb29rIGZvciBlaXRoZXIgdGhlIGZvcm0gY29udGFpbmluZyB0
aGUgY3VycmVudCBmb2N1cywgb3IgZm9yIG9uZSBpbW1lZGlhdGVseSBhZnRlciBpdAorSFRNTEZv
cm1FbGVtZW50KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjdXJyZW50Rm9ybSgpIGNvbnN0Cit7Cisg
ICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVy
KSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgorICAgIE5vZGUqIHN0YXJ0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICBpZiAoIXN0YXJ0KQorICAgICAg
ICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkubm9kZSgpOworCisgICAgLy8gVHJ5IHdhbGtpbmcgdXAg
dGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50LgorICAgIE5vZGUqIG5vZGU7Cisg
ICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmIChub2Rl
LT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsKKyAgICB9CisKKyAgICAvLyBUcnkg
d2Fsa2luZyBmb3J3YXJkIGluIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4K
KyAgICByZXR1cm4gc2NhbkZvckZvcm0oc3RhcnQpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwg
Ym9vbCByZXZlYWxFeHRlbnQpCit7CisgICAgSW50UmVjdCByZWN0OworCisgICAgc3dpdGNoIChz
ZWxlY3Rpb25UeXBlKCkpIHsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9u
OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVj
dGlvbjoKKyAgICAgICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAg
cmVjdCA9IHJldmVhbEV4dGVudCA/IFZpc2libGVQb3NpdGlvbihleHRlbnQoKSkuYWJzb2x1dGVD
YXJldEJvdW5kcygpIDogZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25Cb3VuZHMoZmFsc2UpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUG9zaXRpb24gc3RhcnQgPSB0aGlzLT5zdGFy
dCgpOworICAgIEFTU0VSVChzdGFydC5ub2RlKCkpOworICAgIGlmIChzdGFydC5ub2RlKCkgJiYg
c3RhcnQubm9kZSgpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
b25seSBoYW5kbGVzIHNjcm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIncyBsYXllciwgYnV0Cisg
ICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNlY3QgbW9yZSB0aGFuIGp1
c3QgdGhhdC4KKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80Nzk5ODk5Pi4KKyAgICAg
ICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5j
bG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUo
cmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxpZ25tZW50KTsKKyAgICAgICAgICAgIHVwZGF0ZUFw
cGVhcmFuY2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCit7CisgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRl
IHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVpdGhlciB0aGUKKyAg
ICAvLyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0
aGlzIGRvY3VtZW50KS4KKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBt
X2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmICghaXNO
b25lKCkgfHwgIShtX2ZyYW1lLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Npbmcp
KQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KQorICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgIGlmIChub2Rl
KQorICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihub2RlLCAw
KSwgRE9XTlNUUkVBTSkpOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNl
KTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb3Jt
YXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gNjcxMjEpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiwxMCBAQAogI2lmbmRlZiBTZWxlY3Rpb25Db250cm9sbGVyX2gKICNkZWZpbmUgU2Vs
ZWN0aW9uQ29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUg
IlNjcm9sbEJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaXNpYmxl
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0zNiw2ICszOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFz
cyBSZW5kZXJWaWV3OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0xNDksNiArMTUyLDI2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAKKyAgICBib29s
IHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Cisg
ICAgYm9vbCBzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNv
bnN0OworICAgIHZvaWQgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOworICAgIHZvaWQgbm90aWZ5
UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpOworCisgICAgdm9p
ZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworCisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHR5cGluZ1N0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CisgICAgdm9pZCBjbGVhclR5cGluZ1N0
eWxlKCk7CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKyAgICBlbnVtIFNlbGVjdGlvblJlY3RSZXNwZWN0VHJh
bnNmb3JtcyB7IFJlc3BlY3RUcmFuc2Zvcm1zID0gdHJ1ZSwgSWdub3JlVHJhbnNmb3JtcyA9IGZh
bHNlIH07CisgICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVjdD4mLCBT
ZWxlY3Rpb25SZWN0UmVzcGVjdFRyYW5zZm9ybXMgcmVzcGVjdFRyYW5zZm9ybXMsIGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKworICAgIEhUTUxGb3JtRWxlbWVudCog
Y3VycmVudEZvcm0oKSBjb25zdDsKKworICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFNj
cm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGJv
b2wgcmV2ZWFsRXh0ZW50ID0gZmFsc2UpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uRnJvbU5vbmUo
KTsKKwogcHJpdmF0ZToKICAgICBlbnVtIEVQb3NpdGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNF
LCBFWFRFTlQgfTsKIApAQCAtMTkzLDYgKzIxNiw4IEBAIHByaXZhdGU6CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBtX3NlbGVjdGlvbjsKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsK
IAorICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV90eXBpbmdTdHlsZTsK
KwogICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRCbGlua1RpbWVyOwogCiAg
ICAgSW50UmVjdCBtX2NhcmV0UmVjdDsgLy8gY2FyZXQgcmVjdCBpbiBjb29yZHMgbG9jYWwgdG8g
dGhlIHJlbmRlcmVyIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQKQEAgLTIwOSw2
ICsyMzQsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2FyZXRQYWludDsKIH07CiAKK2lubGlu
ZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogU2VsZWN0aW9uQ29udHJvbGxlcjo6dHlwaW5n
U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhclR5cGluZ1N0eWxlKCkKK3sKKyAg
ICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7Cit9CisKK2lubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlKQoreworICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKK30KKwogI2lmICEoUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspKQogaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCiB7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2NzEyMSkKKysrIFdlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDcgKzM1Niw3IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChjb25zdCBTdHIKIHZvaWQgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJv
b2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQogewogICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4g
Y29tbWFuZDsKLSAgICBpZiAoIWRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCkgJiYg
IW1fY29tbWFuZHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSAmJiAhbV9jb21tYW5kcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgRWRpdENvbW1hbmQqIGxhc3RDb21tYW5kID0gbV9jb21tYW5kcy5sYXN0KCkuZ2V0KCk7
CiAgICAgICAgIGlmIChsYXN0Q29tbWFuZC0+aXNJbnNlcnRUZXh0Q29tbWFuZCgpKQogICAgICAg
ICAgICAgY29tbWFuZCA9IHN0YXRpY19jYXN0PEluc2VydFRleHRDb21tYW5kKj4obGFzdENvbW1h
bmQpOwpAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChUZXgKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNOb25lKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1
bWVudCgpLT5mcmFtZSgpLT5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUp
KQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxl
dGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGtpbGxSaW5nKQpAQCAtNTc5LDcg
KzU3OSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLT5mcmFtZSgp
LT5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxl
Y3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlv
bigpLT5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIGlmIChraWxsUmluZykKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDY3MTIxKQorKysgV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcAogICAgIH0KIAogICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5yZXZlYWxT
ZWxlY3Rpb24oKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJl
dmVhbFNlbGVjdGlvbigpOwogfQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDY3MTIyKQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0
bGUoKSwgIiIpLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBhcHBseUNvbW1hbmQo
Y29tbWFuZCk7Ci0gICAgICAgICAgICBmcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
SWdub3JlU3BlbGxpbmc6CkluZGV4OiBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY3
MTIyKQorKysgV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU1LDcgKzQ1NSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHIKICAgICAgICAgICAgIC8vIE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0
IGRlbGV0ZSBvbiBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBidXQgb25seSB0
byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51
bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRv
cigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKLSAgICAgICAgICAgIGJvb2wgc21hcnRJ
bnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgp
ID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCk7CisgICAg
ICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUgJiYgaW5uZXJGcmFtZS0+c2Vs
ZWN0aW9uKCktPmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRhLT5j
YW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChNb3ZlU2VsZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LCBkcmFnQ2FyZXQuYmFzZSgpLCBzbWFydEluc2VydCwg
c21hcnREZWxldGUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpCkBA
IC02MzYsNyArNjM2LDcgQEAgc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29u
cwogCiBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvclNlbGVjdGlvbkRyYWcoRnJhbWUqIHNyYykK
IHsKLSAgICBJbnRSZWN0IGRyYWdnaW5nUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3JjLT5zZWxl
Y3Rpb25Cb3VuZHMoKSk7CisgICAgSW50UmVjdCBkcmFnZ2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHNyYy0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbkJvdW5kcygpKTsKICAgICBpbnQgeHBvcyA9
IGRyYWdnaW5nUmVjdC5yaWdodCgpOwogICAgIHhwb3MgPSBkcmFnZ2luZ1JlY3QueCgpIDwgeHBv
cyA/IGRyYWdnaW5nUmVjdC54KCkgOiB4cG9zOwogICAgIGludCB5cG9zID0gZHJhZ2dpbmdSZWN0
LmJvdHRvbSgpOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDY3MTIyKQorKysg
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw3ICsy
NjMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9tCiAgICAgICAg
ICAgICAgICAgbmV3U2VsZWN0aW9uLmFwcGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpOyAgICAgICAg
ICAgIAogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJp
dHksIE1ha2VOb25EaXJlY3Rpb25hbFNlbGVjdGlvbik7CiAgICAgfQogfQpAQCAtMjg4LDcgKzI4
OCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29yZE9yTGkKICAgICAgICAg
ICAgIG1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAg
aWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKSkKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uLCBncmFudWxhcml0eSwgTWFrZU5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uKTsKICAg
ICB9CiB9CkBAIC0zMzMsNyArMzMzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UHJlc3NFdmVudAogICAgICAgICBtX2JlZ2FuU2VsZWN0aW5nVGV4dCA9IHRydWU7CiAgICAgfQog
ICAgIAotICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJpdHksIE1ha2VOb25EaXJlY3Rpb25hbFNlbGVjdGlvbik7
CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5MSwxNiArMzkxLDE2IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRF
eHRlbnQocG9zKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25H
cmFudWxhcml0eSgpICE9IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgICAgICBncmFu
dWxhcml0eSA9IG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCk7Ci0gICAgICAgICAgICBu
ZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShtX2ZyYW1lLT5zZWxlY3Rpb25HcmFu
dWxhcml0eSgpKTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0
eSgpICE9IENoYXJhY3RlckdyYW51bGFyaXR5KSB7CisgICAgICAgICAgICBncmFudWxhcml0eSA9
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0eSgpOworICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9mcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51
bGFyaXR5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9iZWdhblNlbGVjdGluZ1RleHQgPSB0
cnVlOwogICAgIH0gZWxzZQogICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9u
KHZpc2libGVQb3MpOwogICAgIAotICAgIGlmIChtX2ZyYW1lLT5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJpdHksIE1ha2VOb25EaXJlY3Rp
b25hbFNlbGVjdGlvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMywxMiArNjMzLDEyIEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3UKICAgICB9CiAKICAgICBu
ZXdTZWxlY3Rpb24uc2V0RXh0ZW50KHRhcmdldFBvc2l0aW9uKTsKLSAgICBpZiAobV9mcmFtZS0+
c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSAhPSBDaGFyYWN0ZXJHcmFudWxhcml0eSkKLSAgICAgICAg
bmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9mcmFtZS0+c2VsZWN0aW9uR3Jh
bnVsYXJpdHkoKSk7CisgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0eSgp
ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQorICAgICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNp
bmdHcmFudWxhcml0eShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Z3JhbnVsYXJpdHkoKSk7CiAKLSAg
ICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpIHsKKyAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKSB7CiAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRJc0RpcmVjdGlvbmFs
KGZhbHNlKTsKLSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCksIE1ha2VOb25EaXJlY3Rp
b25hbFNlbGVjdGlvbik7CisgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Z3JhbnVsYXJpdHkoKSwgTWFr
ZU5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uKTsKICAgICB9CiB9CiAjZW5kaWYgLy8gRU5BQkxFKERS
QUdfU1VQUE9SVCkKQEAgLTcwMCwxMyArNzAwLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZVJlbGVhc2VFdmUKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBub2Rl
LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSk7CiAgICAg
ICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHBvcyk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZnJhbWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
KQorICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOwogCiAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgIH0K
IAotICAgIG1fZnJhbWUtPm5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7Cisg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2Uo
dHJ1ZSk7CiAKICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDY3MTIxKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzSW5Eb2N1CiAKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAgICAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihQb3NpdGlvbihub2RlLCAwKSwgUG9zaXRpb24obm9k
ZSwgMCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAoZnJhbWUtPnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQogCkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDY3MTIyKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg2LDE2ICsyODYsNiBAQCBTZXR0aW5ncyogRnJhbWU6OnNldHRpbmdzKCkgY29uc3QK
ICAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5ncygpIDogMDsKIH0KIAotVGV4dEdy
YW51bGFyaXR5IEZyYW1lOjpzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fc2VsZWN0aW9uQ29udHJvbGxlci5ncmFudWxhcml0eSgpOwotfQotCi1TZWxlY3Rpb25D
b250cm9sbGVyKiBGcmFtZTo6ZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwotfQotCiBzdGF0aWMgUmVndWxhckV4
cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvckxhYmVscyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFi
ZWxzKQogewogICAgIC8vIFJFVklFVy0gdmVyc2lvbiBvZiB0aGlzIGNhbGwgaW4gRnJhbWVNYWMu
bW0gY2FjaGVzIGJhc2VkIG9uIHRoZSBOU0FycmF5IHB0cnMgYmVpbmcKQEAgLTQ4Myw4NyArNDcz
LDYgQEAgU3RyaW5nIEZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KAogICAgIHJldHVy
biBtYXRjaExhYmVsc0FnYWluc3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
aWRBdHRyKSk7CiB9CiAKLXZvaWQgRnJhbWU6Om5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFu
Z2UoYm9vbCB1c2VyVHJpZ2dlcmVkKQotewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAw
OwotCi0gICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgaWYgKHNl
bGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgIHJlbmRlcmVyID0gc2Vs
ZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJl
bmRlcmVyKCk7Ci0KLSAgICAvLyBJZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4gYSB0ZXh0
ZmllbGQgb3IgdGV4dGFyZWEsIG5vdGlmeSB0aGUgcmVuZGVyZXIgdGhhdCB0aGUgc2VsZWN0aW9u
IGhhcyBjaGFuZ2VkCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHRDb250cm9s
KCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIpLT5zZWxlY3Rpb25DaGFu
Z2VkKHVzZXJUcmlnZ2VyZWQpOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCB0ZWxscyB3
aGV0aGVyIGEgcGFydGljdWxhciBub2RlIGlzIGFuIGVsZW1lbnQgdGhhdCBoYXMgYW4gZW50aXJl
Ci0vLyBGcmFtZSBhbmQgRnJhbWVWaWV3LCBhIDxmcmFtZT4sIDxpZnJhbWU+LCBvciA8b2JqZWN0
Pi4KLXN0YXRpYyBib29sIGlzRnJhbWVFbGVtZW50KGNvbnN0IE5vZGUgKm4pCi17Ci0gICAgaWYg
KCFuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9
IG4tPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgcmV0dXJuIHdpZGdldCAmJiB3aWRnZXQt
PmlzRnJhbWVWaWV3KCk7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldEZvY3VzZWROb2RlSWZOZWVkZWQo
KQotewotICAgIGlmIChzZWxlY3Rpb24oKS0+aXNOb25lKCkgfHwgIXNlbGVjdGlvbigpLT5pc0Zv
Y3VzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gc2V0
dGluZ3MoKSAmJiBzZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmIChj
YXJldEJyb3dzaW5nKSB7Ci0gICAgICAgIE5vZGUqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVs
ZW1lbnQoc2VsZWN0aW9uKCktPmJhc2UoKSk7Ci0gICAgICAgIGlmIChhbmNob3IpIHsKLSAgICAg
ICAgICAgIHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKGFuY2hvciwg
dGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2Rl
KiB0YXJnZXQgPSBzZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGlmICh0
YXJnZXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRhcmdldC0+cmVuZGVy
ZXIoKTsKLQotICAgICAgICAvLyBXYWxrIHVwIHRoZSByZW5kZXIgdHJlZSB0byBzZWFyY2ggZm9y
IGEgbm9kZSB0byBmb2N1cy4KLSAgICAgICAgLy8gV2Fsa2luZyB1cCB0aGUgRE9NIHRyZWUgd291
bGRuJ3Qgd29yayBmb3Igc2hhZG93IHRyZWVzLCBsaWtlIHRob3NlIGJlaGluZCB0aGUgZW5naW5l
LWJhc2VkIHRleHQgZmllbGRzLgotICAgICAgICB3aGlsZSAocmVuZGVyZXIpIHsKLSAgICAgICAg
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2V0IGZvY3VzIG9uIGEgc3ViZnJhbWUgd2hlbiBzZWxl
Y3RpbmcgaW4gYSBwYXJlbnQgZnJhbWUsCi0gICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFpc0Zy
YW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBt
YWtlIHRoaXMKLSAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVybSwgYnV0IHRoaXMg
aXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgotICAgICAgICAgICAgaWYgKHRhcmdldCAm
JiB0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkg
ewotICAgICAgICAgICAgICAgIHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRO
b2RlKHRhcmdldCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gcmVuZGVyZXItPm5vZGUo
KTsKLSAgICAgICAgfQotICAgICAgICBkb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAg
ICB9Ci0KLSAgICBpZiAoY2FyZXRCcm93c2luZykKLSAgICAgICAgcGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUoMCwgdGhpcyk7Ci19Ci0KLXZvaWQgRnJhbWU6OnBhaW50
RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KSBjb25zdAotewotI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX3BhZ2UtPmRyYWdDYXJldENv
bnRyb2xsZXIoKTsKLSAgICBBU1NFUlQoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0aW9uKCku
aXNDYXJldCgpKTsKLSAgICBpZiAoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3Rh
cnQoKS5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgPT0gdGhpcykKLSAgICAgICAgZHJhZ0Nh
cmV0Q29udHJvbGxlci0+cGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHApOwotICAgIFVOVVNFRF9QQVJBTSh0eCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHR5KTsKLSAgICBVTlVTRURfUEFSQU0oY2xpcFJlY3QpOwotI2VuZGlmCi19Ci0KIHZvaWQg
RnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRB
ZGp1c3RWaWV3U2l6ZSkKIHsKICAgICBtX2RvYy0+c2V0UHJpbnRpbmcocHJpbnRpbmcpOwpAQCAt
NjExLDExICs1MjAsNiBAQCB2b2lkIEZyYW1lOjppbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERP
CiAgICAgfQogfQogCi1ib29sIEZyYW1lOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAotewotICAgIHJldHVybiBlZGl0b3IoKS0+
Y2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKLX0KLQogYm9vbCBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAogewog
ICAgIGlmIChtX2VkaXRvci5jbGllbnRJc0VkaXRhYmxlKCkpCkBAIC02MjMsMTEgKzUyNyw2IEBA
IGJvb2wgRnJhbWU6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9kb2Mt
PmluRGVzaWduTW9kZSgpOwogfQogCi12b2lkIEZyYW1lOjpzZXRUeXBpbmdTdHlsZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCi17Ci0gICAgbV90eXBpbmdTdHlsZSA9IHN0eWxl
OwotfQotCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIEhhc2hTZXQ8RnJhbWUqPiYga2VlcEFsaXZl
U2V0KCkKIHsKQEAgLTcwNiwxMjMgKzYwNSw2IEBAIFJlbmRlclBhcnQqIEZyYW1lOjpvd25lclJl
bmRlcmVyKCkgY29uc3QKICAgICByZXR1cm4gdG9SZW5kZXJQYXJ0KG9iamVjdCk7CiB9CiAKLS8v
IHJldHVybnMgRmxvYXRSZWN0IGJlY2F1c2UgZ29pbmcgdGhyb3VnaCBJbnRSZWN0IHdvdWxkIHRy
dW5jYXRlIGFueSBmbG9hdHMKLUZsb2F0UmVjdCBGcmFtZTo6c2VsZWN0aW9uQm91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IGNv
bnRlbnRSZW5kZXJlcigpOwotICAgIEZyYW1lVmlldyogdmlldyA9IG1fdmlldy5nZXQoKTsKLSAg
ICBpZiAoIXJvb3QgfHwgIXZpZXcpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJs
ZUNvbnRlbnQpOwotICAgIHJldHVybiBjbGlwVG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlv
bihzZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25S
ZWN0OwotfQotCi12b2lkIEZyYW1lOjpzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBTZWxlY3Rpb25SZWN0UmVzcGVjdFRyYW5zZm9ybXMgcmVzcGVjdFRyYW5zZm9y
bXMsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmlldyog
cm9vdCA9IGNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV92
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAKLSAgICAvLyBGSU1YRTogd2UgYXJlIGFw
cGVuZGluZyBlbXB0eSByZWN0cyB0byB0aGUgbGlzdCBmb3IgdGhvc2UgdGhhdCBmYWxsIG91dHNp
ZGUgdmlzaWJsZUNvbnRlbnRSZWN0LgotICAgIC8vIFdlIG1heSBub3Qgd2FudCB0byBkbyB0aGF0
LgotICAgIGlmIChyZXNwZWN0VHJhbnNmb3JtcykgewotICAgICAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS0+dGV4dFF1YWRzKHF1YWRzLCB0cnVlKTsK
LQotICAgICAgICB1bnNpZ25lZCBzaXplID0gcXVhZHMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGN1cnJS
ZWN0ID0gcXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIGlmIChj
bGlwVG9WaXNpYmxlQ29udGVudCkKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoaW50ZXJz
ZWN0aW9uKGN1cnJSZWN0LCB2aXNpYmxlQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoY3VyclJlY3QpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IGludFJlY3RzOwotICAgICAgICBzZWxl
Y3RlZFJhbmdlLT50ZXh0UmVjdHMoaW50UmVjdHMsIHRydWUpOwotCi0gICAgICAgIHVuc2lnbmVk
IHNpemUgPSBpbnRSZWN0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKLSAg
ICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoaW50ZXJzZWN0aW9uKGludFJlY3RzW2ldLCB2aXNp
YmxlQ29udGVudFJlY3QpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWN0
cy5hcHBlbmQoaW50UmVjdHNbaV0pOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBTY2FucyBs
b2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVz
Ci1zdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpzY2FuRm9yRm9ybShOb2RlICpzdGFydCkKLXsKLSAg
ICBOb2RlICpuOwotICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG4pOwotICAgICAgICBlbHNlIGlm
IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihuKS0+Zm9ybSgpOwotICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKGZyYW1lVGFnKSB8fCBuLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgICAg
IE5vZGUgKmNoaWxkRG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihuKS0+
Y29udGVudERvY3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50ICpmcmFt
ZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZnJhbWVSZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFdl
IGxvb2sgZm9yIGVpdGhlciB0aGUgZm9ybSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZvY3VzLCBv
ciBmb3Igb25lIGltbWVkaWF0ZWx5IGFmdGVyIGl0Ci1IVE1MRm9ybUVsZW1lbnQgKkZyYW1lOjpj
dXJyZW50Rm9ybSgpIGNvbnN0Ci17Ci0gICAgLy8gc3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhl
IGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlz
Ci0gICAgTm9kZSAqc3RhcnQgPSBtX2RvYyA/IG1fZG9jLT5mb2N1c2VkTm9kZSgpIDogMDsKLSAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUo
KTsKLQotICAgIC8vIHRyeSB3YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0g
ZWxlbWVudAotICAgIE5vZGUgKm47Ci0gICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT5wYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obik7Ci0gICAgICAgIGVs
c2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1Db250cm9sRWxlbWVudCo+KG4pLT5mb3JtKCk7Ci0gICAgfQotCi0gICAgLy8gdHJ5IHdh
bGtpbmcgZm9yd2FyZCBpbiB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKLSAg
ICByZXR1cm4gc3RhcnQgPyBzY2FuRm9yRm9ybShzdGFydCkgOiAwOwotfQotCi12b2lkIEZyYW1l
OjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJvb2wg
cmV2ZWFsRXh0ZW50KQotewotICAgIEludFJlY3QgcmVjdDsKLQotICAgIHN3aXRjaCAoc2VsZWN0
aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewotICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9T
ZWxlY3Rpb246Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uOgotICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCktPmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5n
ZVNlbGVjdGlvbjoKLSAgICAgICAgcmVjdCA9IHJldmVhbEV4dGVudCA/IFZpc2libGVQb3NpdGlv
bihzZWxlY3Rpb24oKS0+ZXh0ZW50KCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6IGVuY2xvc2lu
Z0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzKGZhbHNlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCktPnN0YXJ0KCk7Ci0gICAgQVNTRVJU
KHN0YXJ0Lm5vZGUoKSk7Ci0gICAgaWYgKHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJl
bmRlcmVyKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBvbmx5IGhhbmRsZXMgc2Ny
b2xsaW5nIHRoZSBzdGFydENvbnRhaW5lcidzIGxheWVyLCBidXQKLSAgICAgICAgLy8gdGhlIHNl
bGVjdGlvbiByZWN0IGNvdWxkIGludGVyc2VjdCBtb3JlIHRoYW4ganVzdCB0aGF0LgotICAgICAg
ICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ3OTk4OTk+LgotICAgICAgICBpZiAoUmVuZGVyTGF5
ZXIqIGxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxp
Z25tZW50LCBhbGlnbm1lbnQpOwotICAgICAgICAgICAgc2VsZWN0aW9uKCktPnVwZGF0ZUFwcGVh
cmFuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogRnJhbWUqIEZyYW1lOjpmcmFtZUZvcldp
ZGdldChjb25zdCBXaWRnZXQqIHdpZGdldCkKIHsKICAgICBBU1NFUlRfQVJHKHdpZGdldCwgd2lk
Z2V0KTsKQEAgLTg1MywyMiArNjM1LDYgQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoKQogICAg
IGNsZWFyVGltZXJzKG1fdmlldy5nZXQoKSwgZG9jdW1lbnQoKSk7CiB9CiAKLXZvaWQgRnJhbWU6
OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKLXsKLSAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhl
IGJvZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQotICAgIC8v
IGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMg
ZG9jdW1lbnQpLgotICAgIERvY3VtZW50ICpkb2MgPSBkb2N1bWVudCgpOwotICAgIGJvb2wgY2Fy
ZXRCcm93c2luZyA9IHNldHRpbmdzKCkgJiYgc2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJs
ZWQoKTsKLSAgICBpZiAoIXNlbGVjdGlvbigpLT5pc05vbmUoKSB8fCAhKGlzQ29udGVudEVkaXRh
YmxlKCkgfHwgY2FyZXRCcm93c2luZykpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5v
ZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5o
YXNUYWdOYW1lKGJvZHlUYWcpKQotICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOwotICAgIGlmIChub2RlKQotICAgICAgICBzZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24oUG9zaXRpb24obm9kZSwgMCksIERPV05TVFJFQU0pKTsKLX0KLQogdm9p
ZCBGcmFtZTo6c2V0RE9NV2luZG93KERPTVdpbmRvdyogZG9tV2luZG93KQogewogICAgIGlmICht
X2RvbVdpbmRvdykgewpAQCAtOTc5LDExICs3NDUsNiBAQCBTdHJpbmcgRnJhbWU6OmRvY3VtZW50
VHlwZVN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29sIEZyYW1l
OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0
aW9uKSBjb25zdAotewotICAgIHJldHVybiBlZGl0b3IoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZm
aW5pdHkoKSwgZmFsc2UpOwotfQotCiBWaXNpYmxlUG9zaXRpb24gRnJhbWU6OnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQogewogICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KGZyYW1l
UG9pbnQsIHRydWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDY3MTIyKQorKysgV2ViQ29yZS9wYWdlL0Zy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMiBAQAogI2RlZmluZSBGcmFtZV9o
CiAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJF
ZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgogI2luY2x1ZGUgIlVzZXJTY3JpcHRUeXBl
cy5oIgogI2luY2x1ZGUgIlpvb21Nb2RlLmgiCiAKQEAgLTY3LDM4ICs2NSwzMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyUGFydDsKICAgICBjbGFzcyBUaWxlZEJhY2tp
bmdTdG9yZTsKIAotICAgIGNsYXNzIEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8RnJhbWU+Ci0j
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgICwgcHVibGljIFRpbGVkQmFj
a2luZ1N0b3JlQ2xpZW50CisjaWYgIUVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGNs
YXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50IHsgfTsKICNlbmRpZgotICAgIHsKKworICAgIGNs
YXNzIEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8RnJhbWU+LCBwdWJsaWMgVGlsZWRCYWNraW5n
U3RvcmVDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJh
bWU+IGNyZWF0ZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJDbGll
bnQqKTsKLSAgICAgICAgdm9pZCBzZXRWaWV3KFBhc3NSZWZQdHI8RnJhbWVWaWV3Pik7Ci0gICAg
ICAgIH5GcmFtZSgpOwogCiAgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICB2b2lkIHNldFZp
ZXcoUGFzc1JlZlB0cjxGcmFtZVZpZXc+KTsKKyAgICAgICAgdm9pZCBjcmVhdGVWaWV3KGNvbnN0
IEludFNpemUmLCBjb25zdCBDb2xvciYsIGJvb2wsIGNvbnN0IEludFNpemUmLCBib29sLAorICAg
ICAgICAgICAgU2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIGJvb2wgaG9yaXpvbnRhbExv
Y2sgPSBmYWxzZSwKKyAgICAgICAgICAgIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvLCBi
b29sIHZlcnRpY2FsTG9jayA9IGZhbHNlKTsKIAotICAgICAgICBQYWdlKiBwYWdlKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgZGV0YWNoRnJvbVBhZ2UoKTsKLSAgICAgICAgdm9pZCB0cmFuc2ZlckNo
aWxkRnJhbWVUb05ld0RvY3VtZW50KCk7Ci0KLSAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lckVsZW1lbnQoKSBjb25zdDsKKyAgICAgICAgfkZyYW1lKCk7CiAKKyAgICAgICAgdm9p
ZCBkZXRhY2hGcm9tUGFnZSgpOwogICAgICAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKICAgICAg
ICAgdm9pZCBkaXNjb25uZWN0T3duZXJFbGVtZW50KCk7CiAKKyAgICAgICAgUGFnZSogcGFnZSgp
IGNvbnN0OworICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNv
bnN0OworCiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgICAgICBGcmFt
ZVZpZXcqIHZpZXcoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldERPTVdpbmRvdyhET01XaW5k
b3cqKTsKLSAgICAgICAgdm9pZCBjbGVhckZvcm1lckRPTVdpbmRvdyhET01XaW5kb3cqKTsKLQot
ICAgICAgICAvLyBVbmxpa2UgbWFueSBvZiB0aGUgYWNjZXNzb3JzIGluIEZyYW1lLCBkb21XaW5k
b3coKSBhbHdheXMgY3JlYXRlcyBhIG5ldyBET01XaW5kb3cgaWYgbV9kb21XaW5kb3cgaXMgbnVs
bC4KLSAgICAgICAgLy8gQ2FsbGVycyB0aGF0IGRvbid0IG5lZWQgYSBuZXcgRE9NV2luZG93IHRv
IGJlIGNyZWF0ZWQgc2hvdWxkIHVzZSBleGlzdGluZ0RPTVdpbmRvdygpLgotICAgICAgICBET01X
aW5kb3cqIGRvbVdpbmRvdygpIGNvbnN0OwotICAgICAgICBET01XaW5kb3cqIGV4aXN0aW5nRE9N
V2luZG93KCkgeyByZXR1cm4gbV9kb21XaW5kb3cuZ2V0KCk7IH0KLQogICAgICAgICBFZGl0b3Iq
IGVkaXRvcigpIGNvbnN0OwogICAgICAgICBFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIGNv
bnN0OwogICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyKCkgY29uc3Q7CkBAIC0xMDgsMzEgKzEw
MCwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIq
IGFuaW1hdGlvbigpIGNvbnN0OwogICAgICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKTsK
IAotICAgICAgICBSZW5kZXJWaWV3KiBjb250ZW50UmVuZGVyZXIoKSBjb25zdDsgLy8gcm9vdCBy
ZW5kZXJlciBmb3IgdGhlIGRvY3VtZW50IGNvbnRhaW5lZCBpbiB0aGlzIGZyYW1lCi0gICAgICAg
IFJlbmRlclBhcnQqIG93bmVyUmVuZGVyZXIoKSBjb25zdDsgLy8gcmVuZGVyZXIgZm9yIHRoZSBl
bGVtZW50IHRoYXQgY29udGFpbnMgdGhpcyBmcmFtZQorICAgICAgICBSZW5kZXJWaWV3KiBjb250
ZW50UmVuZGVyZXIoKSBjb25zdDsgLy8gUm9vdCBvZiB0aGUgcmVuZGVyIHRyZWUgZm9yIHRoZSBk
b2N1bWVudCBjb250YWluZWQgaW4gdGhpcyBmcmFtZS4KKyAgICAgICAgUmVuZGVyUGFydCogb3du
ZXJSZW5kZXJlcigpIGNvbnN0OyAvLyBSZW5kZXJlciBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250
YWlucyB0aGlzIGZyYW1lLgorCisgICAgICAgIHZvaWQgdHJhbnNmZXJDaGlsZEZyYW1lVG9OZXdE
b2N1bWVudCgpOworCisgICAgLy8gPT09PT09PT0gQWxsIHB1YmxpYyBmdW5jdGlvbnMgYmVsb3cg
dGhpcyBwb2ludCBhcmUgY2FuZGlkYXRlcyB0byBtb3ZlIG91dCBvZiBGcmFtZSBpbnRvIGFub3Ro
ZXIgY2xhc3MuID09PT09PT09CiAKICAgICAgICAgYm9vbCBpc0Rpc2Nvbm5lY3RlZCgpIGNvbnN0
OwogICAgICAgICB2b2lkIHNldElzRGlzY29ubmVjdGVkKGJvb2wpOwogICAgICAgICBib29sIGV4
Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEV4Y2x1ZGVGcm9t
VGV4dFNlYXJjaChib29sKTsKIAotICAgICAgICB2b2lkIGNyZWF0ZVZpZXcoY29uc3QgSW50U2l6
ZSYsIGNvbnN0IENvbG9yJiwgYm9vbCwgY29uc3QgSW50U2l6ZSAmLCBib29sLAotICAgICAgICAg
ICAgICAgICAgICAgICAgU2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIGJvb2wgaG9yaXpv
bnRhbExvY2sgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhck1vZGUg
PSBTY3JvbGxiYXJBdXRvLCBib29sIHZlcnRpY2FsTG9jayA9IGZhbHNlKTsKLQogICAgICAgICB2
b2lkIGluamVjdFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKTsKICAgICAgICAg
CiAgICAgICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQq
LCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiwgVXNlclNjcmlwdEluamVjdGlvblRpbWUpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUoUGFnZSosIEhUTUxGcmFtZU93bmVyRWxlbWVudCos
IEZyYW1lTG9hZGVyQ2xpZW50Kik7Ci0KLSAgICAvLyA9PT0gdW5kZWNpZGVkLCB3b3VsZCBsaWtl
IHRvIGNvbnNpZGVyIG1vdmluZyB0byBhbm90aGVyIGNsYXNzCisgICAgICAgIC8vIFVubGlrZSBt
b3N0IGFjY2Vzc29ycyBpbiB0aGlzIGNsYXNzLCBkb21XaW5kb3coKSBhbHdheXMgY3JlYXRlcyBh
IG5ldyBET01XaW5kb3cgaWYgbV9kb21XaW5kb3cgaXMgbnVsbC4KKyAgICAgICAgLy8gQ2FsbGVy
cyB0aGF0IGRvbid0IG5lZWQgYSBuZXcgRE9NV2luZG93IHRvIGJlIGNyZWF0ZWQgc2hvdWxkIHVz
ZSBleGlzdGluZ0RPTVdpbmRvdygpLgorICAgICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNv
bnN0OworICAgICAgICBET01XaW5kb3cqIGV4aXN0aW5nRE9NV2luZG93KCkgeyByZXR1cm4gbV9k
b21XaW5kb3cuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRET01XaW5kb3coRE9NV2luZG93Kik7
CisgICAgICAgIHZvaWQgY2xlYXJGb3JtZXJET01XaW5kb3coRE9NV2luZG93Kik7CisgICAgICAg
IHZvaWQgY2xlYXJET01XaW5kb3coKTsKIAotICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEZy
YW1lKiBmcmFtZUZvcldpZGdldChjb25zdCBXaWRnZXQqKTsKIAogICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKQEAgLTE2Myw4MCArMTU0LDI1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgZG9jdW1lbnRUeXBlU3RyaW5nKCkg
Y29uc3Q7CiAKLSAgICAgICAgLy8gVGhpcyBtZXRob2QgLS0gYW5kIHRoZSBjb3JyZXNwb25kaW5n
IGxpc3Qgb2YgZm9ybWVyIERPTSB3aW5kb3dzIC0tCi0gICAgICAgIC8vIHNob3VsZCBtb3ZlIG9u
dG8gU2NyaXB0Q29udHJvbGxlcgotICAgICAgICB2b2lkIGNsZWFyRE9NV2luZG93KCk7Ci0KICAg
ICAgICAgU3RyaW5nIGRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5n
JiBzdHIpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudCgpID8g
ZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzdHIpIDogc3RyOwog
ICAgICAgICB9CiAKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEZyYW1lVmlldywgbm90IEZyYW1lLgotICAgICAgICBU
aWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3Rp
bGVkQmFja2luZ1N0b3JlLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0VGlsZWRCYWNraW5nU3Rv
cmVFbmFibGVkKGJvb2wpOwotI2VuZGlmCi0KICAgICAgICAgRHJhZ0ltYWdlUmVmIG5vZGVJbWFn
ZShOb2RlKik7CiAgICAgICAgIERyYWdJbWFnZVJlZiBkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKTsK
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgbGlmZVN1cHBvcnRUaW1lckZpcmVkKFRpbWVy
PEZyYW1lPiopOwotCi0gICAgLy8gPT09IHRvIGJlIG1vdmVkIGludG8gU2VsZWN0aW9uQ29udHJv
bGxlcgotCi0gICAgcHVibGljOgotICAgICAgICBUZXh0R3JhbnVsYXJpdHkgc2VsZWN0aW9uR3Jh
bnVsYXJpdHkoKSBjb25zdDsKLQotICAgICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICAgICAgdm9pZCBz
ZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAgICAgIHZvaWQgbm90aWZ5UmVuZGVyZXJPZlNl
bGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpOwotCi0gICAgICAgIHZvaWQgcGFpbnRE
cmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KSBjb25zdDsKLQogICAgICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29u
c3Q7IC8vIGlmIHRydWUsIGV2ZXJ5dGhpbmcgaW4gZnJhbWUgaXMgZWRpdGFibGUKIAotICAgICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUoKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRUeXBpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwotICAg
ICAgICB2b2lkIGNsZWFyVHlwaW5nU3R5bGUoKTsKLQotICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0
aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKLSAgICAg
ICAgZW51bSBTZWxlY3Rpb25SZWN0UmVzcGVjdFRyYW5zZm9ybXMgeyBSZXNwZWN0VHJhbnNmb3Jt
cyA9IHRydWUsIElnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSB9OwotICAgICAgICB2b2lkIHNlbGVj
dGlvblRleHRSZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYsIFNlbGVjdGlvblJlY3RSZXNwZWN0VHJh
bnNmb3JtcyByZXNwZWN0VHJhbnNmb3JtcywgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRy
dWUpIGNvbnN0OwotCi0gICAgICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25z
dDsKLQotICAgICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQm
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBib29sIHJldmVhbEV4dGVu
dCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotCi0gICAg
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIoKSBjb25zdDsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBv
aW50JiBmcmFtZVBvaW50KTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25z
dCBJbnRQb2ludCYgd2luZG93UG9pbnQpOwogCiAgICAgICAgIFN0cmluZyBzZWFyY2hGb3JMYWJl
bHNBYm92ZUNlbGwoUmVndWxhckV4cHJlc3Npb24qLCBIVE1MVGFibGVDZWxsRWxlbWVudCosIHNp
emVfdCogcmVzdWx0RGlzdGFuY2VGcm9tU3RhcnRPZkNlbGwpOwogICAgICAgICBTdHJpbmcgc2Vh
cmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBF
bGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxBYm92
ZSk7CiAgICAgICAgIFN0cmluZyBtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqKTsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwotICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2lu
dCk7Ci0KLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGluIEZyYW1lVmlldywgbm90IEZyYW1lLgotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgaW50ZXJmYWNlCi0gICAgICAgIHZp
cnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChj
b25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKLSAgICAgICAgdmlydHVhbCBJbnRS
ZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7Ci0gICAgICAgIHZpcnR1YWwgSW50
UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKE1BQykKIAotICAgIC8vID09PSB1bmRlY2lkZWQsIHdvdWxkIGxpa2UgdG8gY29uc2lkZXIg
bW92aW5nIHRvIGFub3RoZXIgY2xhc3MKLQotICAgIHB1YmxpYzoKICAgICAgICAgTlNTdHJpbmcq
IHNlYXJjaEZvck5TTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxsKTsKICAg
ICAgICAgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoTlNBcnJheSogbGFi
ZWxzLCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNl
bGxBYm92ZSk7CiAgICAgICAgIE5TU3RyaW5nKiBtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KE5T
QXJyYXkqIGxhYmVscywgRWxlbWVudCopOwpAQCAtMjUxLDcgKzE4NywxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNlbmRpZgogCisgICAgLy8gPT09PT09PT0KKwogICAgIHByaXZhdGU6Cisg
ICAgICAgIEZyYW1lKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNs
aWVudCopOworCisgICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFw
cGVyV29ybGQqLCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiwgVXNlclNjcmlwdEluamVjdGlvblRp
bWUpOworICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsK
KwogICAgICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgICAgIG11dGFibGUgRnJhbWVUcmVlIG1fdHJl
ZU5vZGU7CiAgICAgICAgIG11dGFibGUgRnJhbWVMb2FkZXIgbV9sb2FkZXI7CkBAIC0yNzEsOCAr
MjE0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIEV2ZW50SGFuZGxl
ciBtX2V2ZW50SGFuZGxlcjsKICAgICAgICAgbXV0YWJsZSBBbmltYXRpb25Db250cm9sbGVyIG1f
YW5pbWF0aW9uQ29udHJvbGxlcjsKIAotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7Ci0KICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1
cHBvcnRUaW1lcjsKIAogI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCkBAIC0yODMsNyAr
MjI0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzRGlzY29ubmVj
dGVkOwogICAgICAgICBib29sIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoOwogCi0jaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpICAgICAgICAKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19T
VE9SRSkKKyAgICAvLyBGSVhNRTogVGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUgYmVsb25ncyBpbiBG
cmFtZVZpZXcsIG5vdCBGcmFtZS4KKworICAgIHB1YmxpYzoKKyAgICAgICAgVGlsZWRCYWNraW5n
U3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlZEJhY2tpbmdT
dG9yZS5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChi
b29sKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
IGludGVyZmFjZQorICAgICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJl
Z2luKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRpbGVk
QmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7
CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgp
OworICAgICAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgp
OworCiAgICAgICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV90aWxlZEJhY2tpbmdTdG9y
ZTsKICNlbmRpZgogICAgIH07CkBAIC0zMzMsMTYgKzI4OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcmV0dXJuICZtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAgICAgfQogCi0gICAg
aW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBGcmFtZTo6dHlwaW5nU3R5bGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUuZ2V0KCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIHZvaWQgRnJhbWU6OmNsZWFyVHlwaW5nU3R5bGUoKQotICAgIHsKLSAgICAg
ICAgbV90eXBpbmdTdHlsZSA9IDA7Ci0gICAgfQotCiAgICAgaW5saW5lIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogRnJhbWU6Om93bmVyRWxlbWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9vd25lckVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDY3MTIy
KQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ3
LDcgKzM0Nyw3IEBAIE5TSW1hZ2UqIEZyYW1lOjpzZWxlY3Rpb25JbWFnZShib29sIGZvcmMKIHsK
ICAgICBtX3ZpZXctPnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHkg
fCAoZm9yY2VCbGFja1RleHQgPyBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQgOiAwKSk7CiAg
ICAgbV9kb2MtPnVwZGF0ZUxheW91dCgpOwotICAgIE5TSW1hZ2UqIHJlc3VsdCA9IGltYWdlRnJv
bVJlY3Qoc2VsZWN0aW9uQm91bmRzKCkpOworICAgIE5TSW1hZ2UqIHJlc3VsdCA9IGltYWdlRnJv
bVJlY3Qoc2VsZWN0aW9uKCktPnNlbGVjdGlvbkJvdW5kcygpKTsKICAgICBtX3ZpZXctPnNldFBh
aW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvck5vcm1hbCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDY3MTIxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzMsNyArMzczLDcgQEAgdm9pZCBDbGlwYm9hcmRNYWM6OndyaXRlUmFuZ2UoUmFuZ2UqIHJh
bgogewogICAgIEFTU0VSVChyYW5nZSk7CiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBQYXN0ZWJv
YXJkOjp3cml0ZVNlbGVjdGlvbihtX3Bhc3RlYm9hcmQuZ2V0KCksIHJhbmdlLCBmcmFtZS0+ZWRp
dG9yKCktPnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpICYmIGZyYW1lLT5zZWxlY3Rpb25HcmFu
dWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSwgZnJhbWUpOworICAgIFBhc3RlYm9hcmQ6Ondy
aXRlU2VsZWN0aW9uKG1fcGFzdGVib2FyZC5nZXQoKSwgcmFuZ2UsIGZyYW1lLT5lZGl0b3IoKS0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eSwgZnJhbWUpOwogfQogCiB2b2lkIENsaXBib2FyZE1h
Yzo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjcxMjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNDAsNyArMjE0MCw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogdm9pZCBSZW5kZXJCbG9jazo6cGFp
bnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSB0
eXBlKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IHR5cGUgPT0gQ3Vy
c29yQ2FyZXQgPyBmcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGZyYW1lKCktPmRyYWdDYXJldENvbnRy
b2xsZXIoKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSB0eXBlID09IEN1
cnNvckNhcmV0ID8gZnJhbWUoKS0+c2VsZWN0aW9uKCkgOiBmcmFtZSgpLT5wYWdlKCktPmRyYWdD
YXJldENvbnRyb2xsZXIoKTsKIAogICAgIC8vIFBhaW50IHRoZSBjYXJldCBpZiB0aGUgU2VsZWN0
aW9uQ29udHJvbGxlciBzYXlzIHNvIG9yIGlmIGNhcmV0IGJyb3dzaW5nIGlzIGVuYWJsZWQKICAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBmcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lKCktPnNl
dHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CkBAIC0yMTUzLDcgKzIxNTMsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgCiAgICAgICAgIGlmICh0eXBl
ID09IEN1cnNvckNhcmV0KQogICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnBhaW50
Q2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJbmZvLnJlY3QpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmcmFtZSgpLT5wYWludERyYWdDYXJldChwYWludEluZm8uY29u
dGV4dCwgdHgsIHR5LCBwYWludEluZm8ucmVjdCk7CisgICAgICAgICAgICBmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+cGFpbnREcmFnQ2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgcGFpbnRJ
bmZvLnJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzEzNCkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxMC0wOS0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5jdGlvbnMg
ZnJvbSBGcmFtZSB0byBTZWxlY3Rpb25Db250cm9sbGVyIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NTA4CisKKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxl
Y3Rpb25Cb3VuZHNSZWN0KToKKyAgICAgICAgQ2FsbCBmdW5jdGlvbnMgb24gc2VsZWN0aW9uKCku
CisKIDIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCShyZXZpc2lvbiA2NzEyMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxMyw3ICsxNzEzLDcgQEAgaW50IFdlYkZyYW1l
SW1wbDo6cGFnZU51bWJlckZvckVsZW1lbnRCeQogV2ViUmVjdCBXZWJGcmFtZUltcGw6OnNlbGVj
dGlvbkJvdW5kc1JlY3QoKSBjb25zdAogewogICAgIGlmIChoYXNTZWxlY3Rpb24oKSkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoZnJhbWUoKS0+c2VsZWN0aW9uQm91bmRzKGZhbHNlKSk7CisgICAg
ICAgIHJldHVybiBJbnRSZWN0KGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25Cb3VuZHMo
ZmFsc2UpKTsKIAogICAgIHJldHVybiBXZWJSZWN0KCk7CiB9CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjcx
MzQpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5
IEBACisyMDEwLTA5LTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGZ1bmN0aW9ucyBm
cm9tIEZyYW1lIHRvIFNlbGVjdGlvbkNvbnRyb2xsZXIgYXMgcGxhbm5lZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1MDgKKworICAgICAgICAqIFdl
YlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25HcmFudWxh
cml0eV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5R
dW90ZWRDb250ZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF90eXBpbmdTdHlsZV0pOgorICAg
ICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpzZWxlY3RSZXBs
YWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9u
IGN1cnJlbnRGb3JtXSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcganVtcFRvU2VsZWN0aW9uOl0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOl0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfY2FuU21hcnRDb3B5T3JEZWxldGVdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2xv
b2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxl
Y3Rpb25SZWN0XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGlvblRleHRSZWN0c10p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxlY3Rpb25JbWFnZVJlY3RdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgc2V0RWRpdGFibGU6XSk6
CisgICAgICAgIENhbGwgZnVuY3Rpb25zIG9uIHNlbGVjdGlvbigpLgorCiAyMDEwLTA5LTA5ICBK
b2huIFRoZXJyZWxsICA8anRoZXJyZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gNjcxMjIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcxNSw3ICs3MTUsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJy
ZW50U2VsCiAKIC0gKFRleHRHcmFudWxhcml0eSlfc2VsZWN0aW9uR3JhbnVsYXJpdHkKIHsKLSAg
ICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKTsKKyAg
ICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5KCk7
CiB9CiAKIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopcmFuZ2UKQEAgLTg1
OSw3ICs4NTksNyBAQCAtICh2b2lkKV9pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7
Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQpOwogfQogCiAtIChWaXNpYmxlUG9zaXRpb24pX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OihO
U1BvaW50KXBvaW50CkBAIC04OTUsOSArODk1LDkgQEAgLSAoRE9NUmFuZ2UgKilfY2hhcmFjdGVy
UmFuZ2VBdFBvaW50OihOUwogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5cGluZ1N0
eWxlCiB7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZy
YW1lLT50eXBpbmdTdHlsZSgpKQorICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT50eXBpbmdTdHls
ZSgpLT5jb3B5KCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCktPmNvcHkoKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQp
X3NldFR5cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9B
Y3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgLSAodm9p
ZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRAogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgY29yZShmcmFnbWVudCksIHNlbGVjdFJlcGxhY2Vt
ZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpKTsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsK
KyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKFNj
cm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CiB9CiAKIC0gKHZvaWQpX3JlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihC
T09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkocmV2aXNp
b24gNjcxMjIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyArMzIzLDcgQEAgLSAoRE9NRWxlbWVudCAqKWZvcm1G
b3JFbGVtZW50OihET01FbGVtZQogCiAtIChET01FbGVtZW50ICopY3VycmVudEZvcm0KIHsKLSAg
ICByZXR1cm4ga2l0KGNvcmUoW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSktPmN1cnJl
bnRGb3JtKCkpOworICAgIHJldHVybiBraXQoY29yZShbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2Vi
RnJhbWVdKS0+c2VsZWN0aW9uKCktPmN1cnJlbnRGb3JtKCkpOwogfQogCiAtIChOU0FycmF5ICop
Y29udHJvbHNJbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiA2NzEyMikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjY2NCw3ICsyNjY0LDcgQEAgLSAodm9pZClqdW1w
VG9TZWxlY3Rpb246KGlkKXNlbmRlcgogICAgIENPTU1BTkRfUFJPTE9HVUUKIAogICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1l
LT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7Cisg
ICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAogLSAoTlNDZWxsU3RhdGVWYWx1ZSlzZWxl
Y3Rpb25IYXNTdHlsZTooQ1NTU3R5bGVEZWNsYXJhdGlvbiopc3R5bGUKQEAgLTQxOTcsNyArNDE5
Nyw3IEBAIC0gKHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQKICAgICBDT01N
QU5EX1BST0xPR1VFCiAKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25DZW50ZXJBbHdheXMpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5y
ZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7CiB9CiAK
IC0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEYKQEAgLTUxNDUs
NyArNTE0NSw3IEBAIC0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCiAgICAgaWYgKCFbW3Nl
bGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCiAgICAgICAgIHJldHVybiBO
TzsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3Jk
R3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLT5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogLSAoTlNFdmVudCAq
KV9tb3VzZURvd25FdmVudApAQCAtNTM2MCw3ICs1MzYwLDcgQEAgLSAodm9pZClfbG9va1VwSW5E
aWN0aW9uYXJ5RnJvbU1lbnU6KGlkKQogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1
cm47CiAKLSAgICBOU1JlY3QgcmVjdCA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uQm91bmRzKCk7Cisg
ICAgTlNSZWN0IHJlY3QgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25Cb3VuZHMo
KTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIE5TRGljdGlvbmFyeSAqYXR0cmli
dXRlcyA9IFthdHRyU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLDEp
XTsKQEAgLTYwMzgsNyArNjAzOCw3IEBAIC0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0
TWFuYWdlcgogLSAoTlNSZWN0KXNlbGVjdGlvblJlY3QKIHsKICAgICBpZiAoW3NlbGYgX2hhc1Nl
bGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25C
b3VuZHMoKTsKKyAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb25Cb3VuZHMoKTsKICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIH0KIApAQCAtNjA0
OSw3ICs2MDQ5LDcgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblRleHRSZWN0cwogICAgIAogICAg
IFZlY3RvcjxGbG9hdFJlY3Q+IGxpc3Q7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvblRleHRSZWN0cyhs
aXN0LCBGcmFtZTo6UmVzcGVjdFRyYW5zZm9ybXMpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb25UZXh0UmVjdHMobGlzdCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6UmVz
cGVjdFRyYW5zZm9ybXMpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwogICAg
IE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07CkBAIC02MDc0LDcgKzYwNzQsNyBAQCAtIChO
U0ltYWdlICopc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxhY2tUCiAtIChOU1JlY3Qpc2VsZWN0aW9u
SW1hZ2VSZWN0CiB7CiAgICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1
cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRzKCk7CisgICAgICAgIHJldHVy
biBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uQm91bmRzKCk7CiAg
ICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiB9CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZp
c2lvbiA2NzEyMikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00NzY5LDcgKzQ3NjksNyBAQCAtICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcK
ICAgICAgICAgICAgICAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgV2ViVmlldyBpcyBtYWRl
IGVkaXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8gc29tZXRoaW5n
LgogICAgICAgICAgICAgICAgIGlmICghW3NlbGYgc2VsZWN0ZWRET01SYW5nZV0pCi0gICAgICAg
ICAgICAgICAgICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbWFpbkZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYktpdC93aW4vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzEz
NCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDktMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25zIGZy
b20gRnJhbWUgdG8gU2VsZWN0aW9uQ29udHJvbGxlciBhcyBwbGFubmVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTUwOAorCisgICAgICAgICogV2Vi
Vmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdl
YlZpZXc6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEpOgorICAgICAgICBDYWxsIGZ1bmN0
aW9ucyBvbiBzZWxlY3Rpb24oKS4KKwogMjAxMC0wOS0wOSAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRl
eDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiA2NzEyMikKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0MDEsNyArMzQwMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViVmlldzo6c2VsZWMKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGlmIChmcmFtZSkgewot
ICAgICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS0+c2VsZWN0aW9uQm91
bmRzKCkpOworICAgICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbkJvdW5kcygpKTsKICAgICAgICAgaXIgPSBmcmFtZS0+dmlldygp
LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGlyKTsKICAgICAgICAgaXIubW92ZSgtZnJhbWUt
PnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSwgLWZyYW1lLT52aWV3KCktPnNjcm9sbE9m
ZnNldCgpLmhlaWdodCgpKTsKICAgICAgICAgcmMtPmxlZnQgPSBpci54KCk7CkBAIC0zNTYxLDcg
KzM1NjEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmNlbnRlCiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBjb3JlRnJhbWUt
PnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKKyAg
ICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50
OjphbGlnbkNlbnRlckFsd2F5cyk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>
<flag name="review"
          id="56351"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="56374"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>