<?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>131353</bug_id>
          
          <creation_ts>2014-04-08 02:24:38 -0700</creation_ts>
          <short_desc>Unify and factor out page overlay implementations</short_desc>
          <delta_ts>2014-04-08 23:37:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>131425</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998508</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 02:24:38 -0700</bug_when>
    <thetext>There&apos;s no reason (as far as I can tell) to reimplement straightforward and platform-independent page overlay functionality in various places, and there&apos;s no reason for it to be scattered all over DrawingArea and WebPage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998514</commentid>
    <comment_count>1</comment_count>
      <attachid>228823</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 03:04:56 -0700</bug_when>
    <thetext>Created attachment 228823
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998516</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-08 03:05:35 -0700</bug_when>
    <thetext>Attachment 228823 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/WebPage/WebPage.h:45:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1222:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998722</commentid>
    <comment_count>3</comment_count>
      <attachid>228875</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 13:02:13 -0700</bug_when>
    <thetext>Created attachment 228875
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998736</commentid>
    <comment_count>4</comment_count>
      <attachid>228875</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-04-08 13:15:01 -0700</bug_when>
    <thetext>Comment on attachment 228875
patch

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

&gt; Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp:89
&gt; +    m_webPage-&gt;drawingArea()-&gt;scheduleCompositingLayerFlush();

It this necessary? I would have thought that the GraphicsLayer tree modifications were enough to trigger it.

&gt; Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp:114
&gt; +    m_webPage-&gt;drawingArea()-&gt;scheduleCompositingLayerFlush();

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp:128
&gt; +    m_webPage-&gt;drawingArea()-&gt;scheduleCompositingLayerFlush();

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998757</commentid>
    <comment_count>5</comment_count>
      <attachid>228875</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 13:32:59 -0700</bug_when>
    <thetext>Comment on attachment 228875
patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp:89
&gt;&gt; +    m_webPage-&gt;drawingArea()-&gt;scheduleCompositingLayerFlush();
&gt; 
&gt; It this necessary? I would have thought that the GraphicsLayer tree modifications were enough to trigger it.

I think it&apos;s not, if I implement notifyFlushRequired here (since all of these GraphicsLayers use this class as their client) and forward it along to the DrawingArea. That&apos;s much neater, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998767</commentid>
    <comment_count>6</comment_count>
      <attachid>228881</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 13:51:54 -0700</bug_when>
    <thetext>Created attachment 228881
found more code to delete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998771</commentid>
    <comment_count>7</comment_count>
      <attachid>228883</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 13:56:20 -0700</bug_when>
    <thetext>Created attachment 228883
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998775</commentid>
    <comment_count>8</comment_count>
      <attachid>228886</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 14:09:10 -0700</bug_when>
    <thetext>Created attachment 228886
rebasex2

still building post-rebase. need to test some  exposedrect-enabled apps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998861</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 16:12:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/166975</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998881</commentid>
    <comment_count>10</comment_count>
      <attachid>228912</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 16:37:55 -0700</bug_when>
    <thetext>Created attachment 228912
fix a tiny bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998883</commentid>
    <comment_count>11</comment_count>
      <attachid>228912</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-04-08 16:38:53 -0700</bug_when>
    <thetext>Comment on attachment 228912
fix a tiny bug

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

&gt; Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp:105
&gt; +    if (m_pageOverlays.size())

This should be

if (!m_pageOverlays.isEmpty())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998885</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-08 16:41:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/166978</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999111</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-04-08 23:32:56 -0700</bug_when>
    <thetext>New bug report to fix the Coordinated Graphics build and functionality -
https://bugs.webkit.org/show_bug.cgi?id=131425</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999114</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-04-08 23:37:45 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; New bug report to fix the Coordinated Graphics build and functionality -
&gt; https://bugs.webkit.org/show_bug.cgi?id=131425

It seems GTK (DrawingAreaImpl.cpp) needs similar fix too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228823</attachid>
            <date>2014-04-08 03:04:56 -0700</date>
            <delta_ts>2014-04-08 13:02:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>pageoverlay3.diff</filename>
            <type>text/plain</type>
            <size>61919</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBmYzc3MDdkLi5lNWFjMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MDcsNiArNTA3LDggQEAKIAkJMjlENTVERjIx
NjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1REYwMTYxQkY5RjEwMDMx
QTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTJEMTI1QzVFMTg1
N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQxMjVDNUYxODU3RUEwNTAwM0JB
M0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi87IH07CisJCTJEMTQwRUFGMThGMzdCRTAwMDVFNzVB
MCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTJEMTQwRUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLzsgfTsKIAkJMkQxQjVENUQxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMkQxQjVENUUxODU4NjlD
ODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QzE4NTg2OUM4MDA2QzY1
OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQyOEYzRTQx
ODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjhGM0UwMTg4NUNDQzEwMDRCOUVBRSAv
KiBXZWJDaHJvbWVDbGllbnRJT1MubW0gKi87IH07CkBAIC0yMzA4LDYgKzIzMTAsOCBAQAogCQky
OUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1N0VBMDUwMDNCQTND
QiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMTQwRUFEMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VP
dmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVE
NUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUMxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0
dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MzM2LDYgKzUzNDAsOCBAQAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAv
KiBQYWdlQmFubmVyLmggKi8sCiAJCQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VP
dmVybGF5LmNwcCAqLywKIAkJCQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuaCAqLywKKwkJCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCAqLywKKwkJCQkyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmggKi8sCiAJCQkJNTE5RUY1OEYxOEVGNzcyMTAwMDNCN0Y0IC8qIFRlbGVw
aG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKIAkJCQk1MTlFRjU5MDE4RUY3NzIx
MDAwM0I3RjQgLyogVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQky
RDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5j
cHAgKi8sCkBAIC02NzM1LDYgKzY3NDEsNyBAQAogCQkJCUJDRTgxRDhEMTMxOUY3RUYwMDI0MTkx
MCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCQzNERkMxODk5RjUxQzAwNEYw
NjI2IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTA1RkU1
NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQky
RDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE3NzUzRjExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzlBODczNjE4QkJGQTQzMDA1ODhBRjIgLyogX1dLQWN0
aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNkY0MkYx
MkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg0NzcsNiArODQ4NCw3IEBACiAJCQkJMUFGQTNBQzgxOEU2MUM2
MTAwM0NDQkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzAzMzdEQUUxMjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMDMyREJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4MDAz
MzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzREQxRkQx
MjVFNTlGMzAwNDUxNUU2IC8qIFdlYkZpbmRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFNDY5NTMxMjE0RTZDQjAwMEI5OEVCIC8qIFdlYkZvcm1DbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggOWQwN2MzZi4uNGM4ZGU5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtMzY0LDEyICszNjQsMTIgQEAgdm9p
ZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJl
ZiwgV0tCdW5kbGVQYWdlT3ZlcmwKIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJs
YXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBh
Z2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIHRydWUpOworICAgIHRvSW1wbChwYWdl
UmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFn
ZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBh
Z2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+dW5p
bnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgdHJ1ZSk7CisgICAgdG9J
bXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYp
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNl
dFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1h
Z2VSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDk3ZTg3OTguLjYx
MDNkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xMjE5LDcgKzEy
MTksOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRG
b3JOZXdQYWdlKCkKICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpLT5zZXRQcm9oaWJp
dHNTY3JvbGxpbmcoc2hvdWxkRGlzYWJsZVNjcm9sbGluZyk7CiAgICAgbV9mcmFtZS0+Y29yZUZy
YW1lKCktPnZpZXcoKS0+c2V0VmlzdWFsVXBkYXRlc0FsbG93ZWRCeUNsaWVudCghd2ViUGFnZS0+
c2hvdWxkRXh0ZW5kSW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpKTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpLT5zZXRFeHBvc2Vk
UmVjdCh3ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5leHBvc2VkUmVjdCgpKTsKKyAgICAvL21fZnJh
bWUtPmNvcmVGcmFtZSgpLT52aWV3KCktPnNldEV4cG9zZWRSZWN0KHdlYlBhZ2UtPmRyYXdpbmdB
cmVhKCktPmV4cG9zZWRSZWN0KCkpOworICAgIC8vIHdoeSBkb2VzIHRoaXMgY3Jhc2gKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKElPUykKICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpLT5z
ZXREZWxlZ2F0ZXNTY3JvbGxpbmcodHJ1ZSk7CkBAIC0xNTc2LDcgKzE1NzcsNyBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQogICAgIGlmICghd2Vi
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+ZGlk
Q2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55RnJhbWUoKTsKKyAgICB3ZWJQYWdlLT5kaWRDaGFuZ2VT
Y3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpOwogCiAgICAgaWYgKCFtX2ZyYW1lLT5pc01haW5GcmFt
ZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5kZXgg
YjQ3OTUzZS4uMGRjYjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtODMs
NyArODMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKICAgICBpZiAo
IW1faGlnaGxpZ2h0T3ZlcmxheSkgewogICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGhpZ2hs
aWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBtX2hpZ2hs
aWdodE92ZXJsYXkgPSBoaWdobGlnaHRPdmVybGF5LmdldCgpOwotICAgICAgICBtX3BhZ2UtPmlu
c3RhbGxQYWdlT3ZlcmxheShoaWdobGlnaHRPdmVybGF5LnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAg
ICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgp
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJs
YXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faGlnaGxpZ2h0
T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUhpZ2hsaWdodCgpCiB7CiAgICAgaWYgKG1faGlnaGxpZ2h0T3ZlcmxheSkKLSAgICAgICAg
bV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJsYXksIHRydWUpOwor
ICAgICAgICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXgg
ZTQxN2MyNi4uMTI0NjA5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmgKQEAgLTUwLDcgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHN0cnVjdCBDb2xvclNwYWNlRGF0YTsKIGNsYXNzIExheWVyVHJlZUhvc3Q7Ci1jbGFzcyBQYWdl
T3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
czsKIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlOwpAQCAtNzgsMTIgKzc3LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIExheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9h
dCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7
IH0KLQogICAgIHZpcnR1YWwgdm9pZCBzZXRQYWludGluZ0VuYWJsZWQoYm9vbCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUm
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKSB7IH0KQEAgLTEwMCw4ICs5Myw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpIHsg
fQotCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhj
b25zdCBXZWJDb3JlOjpGcmFtZVZpZXcqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVh
bCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7
IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBmNTY2MDAxLi5iMDZjNjkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAg
LTE1NiwxMiArMTU2LDEyIEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVy
UGFnZVNjcm9sbChib29sIGZvdW5kLCBjb25zdCBTdHJpbmcmIHN0cmluCiAKICAgICBpZiAoIXNo
b3VsZFNob3dPdmVybGF5KSB7CiAgICAgICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKLSAgICAg
ICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXks
IHRydWUpOworICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2Zp
bmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoIW1fZmluZFBhZ2VPdmVybGF5KSB7CiAgICAgICAgICAgICBSZWZQdHI8
UGFnZU92ZXJsYXk+IGZpbmRQYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7
CiAgICAgICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IGZpbmRQYWdlT3ZlcmxheS5nZXQoKTsK
LSAgICAgICAgICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGZpbmRQYWdlT3Zlcmxh
eS5yZWxlYXNlKCksIHRydWUpOworICAgICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92
ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKICAgICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNE
aXNwbGF5KCk7CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZp
bmRVSSgpCiB7CiAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOwogICAgIGlmIChtX2ZpbmRQYWdl
T3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQ
YWdlT3ZlcmxheSwgdHJ1ZSk7CisgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAg
ICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+
bWFpbkZyYW1lKCkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheS5jcHAKaW5kZXggMzViOTgyNS4uMTlkZWE1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC05MCw4
ICs5MCw4IEBAIHZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2UoV2ViUGFnZSogd2ViUGFnZSkKIHZv
aWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CiB7CiAgICAgaWYgKG1fd2ViUGFnZSkgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVh
KCktPnNldFBhZ2VPdmVybGF5T3BhY2l0eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAg
ICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
dGhpcywgZGlydHlSZWN0KTsKKyAgICAgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOworICAg
ICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KHRoaXMsIGRpcnR5UmVjdCk7CiAgICAgfQogfQogCkBAIC0xNzYsNyArMTc2LDcg
QEAgdm9pZCBQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKQogICAgIGZsb2F0
IGZhZGVBbmltYXRpb25WYWx1ZSA9IHNpbmUgKiBzaW5lOwogCiAgICAgbV9mcmFjdGlvbkZhZGVk
SW4gPSAobV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlSW5BbmltYXRpb24pID8gZmFkZUFuaW1h
dGlvblZhbHVlIDogMSAtIGZhZGVBbmltYXRpb25WYWx1ZTsKLSAgICBtX3dlYlBhZ2UtPmRyYXdp
bmdBcmVhKCktPnNldFBhZ2VPdmVybGF5T3BhY2l0eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7
CisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9w
YWNpdHkodGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOwogCiAgICAgaWYgKGFuaW1hdGlvblByb2dy
ZXNzID09IDEuMCkgewogICAgICAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7CkBAIC0x
ODYsMTQgKzE4NiwxNCBAQCB2b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJl
ZCgpCiAKICAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkgewogICAgICAgICAgICAgLy8gSWYgdGhp
cyB3YXMgYSBmYWRlIG91dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5
LgotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBmYWxz
ZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRoaXMsIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAog
dm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQogewotICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEo
KS0+Y2xlYXJQYWdlT3ZlcmxheSh0aGlzKTsKKyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLmNsZWFyUGFnZU92ZXJsYXkodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VP
dmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
aAppbmRleCAyOTVmMWU4Li42MWRiYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaApAQCAtNzksNiArNzksOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhcigpOwogCiAgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQorCisgICAgZW51bSBjbGFzcyBGYWRlTW9kZSB7IERvTm90RmFkZSwgRmFkZSB9Owog
ICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODY2
YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgor
CisjaW1wb3J0ICJEcmF3aW5nQXJlYS5oIgorI2ltcG9ydCAiUGFnZU92ZXJsYXkuaCIKKyNpbXBv
cnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbGVkQmFja2luZy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BhZ2VPdmVy
bGF5Q29udHJvbGxlcjo6UGFnZU92ZXJsYXlDb250cm9sbGVyKFdlYlBhZ2UqIHdlYlBhZ2UpCisg
ICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKK3sKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghbV9yb290TGF5ZXIpOworCisgICAgbV9y
b290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgp
LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9y
b290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIiKTsKKyNlbmRpZgorfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1v
ZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdExheWVyKTsKKworICAgIFJlZlB0cjxQYWdlT3Zlcmxh
eT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKG92ZXJsYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2VPdmVybGF5cy5hcHBl
bmQob3ZlcmxheSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZShtX3dlYlBhZ2UpOworCisgICAgaWYg
KGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkKKyAgICAgICAgb3Zlcmxh
eS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UtPmRyYXdpbmdB
cmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAg
ICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAg
dXBkYXRlU2V0dGluZ3NGb3JMYXllcihsYXllci5nZXQoKSk7CisgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKGxheWVyLmdldCgpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3Zl
cmxheS5nZXQoKSwgc3RkOjptb3ZlKGxheWVyKSk7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpKSB7CisgICAg
ICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdl
LT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnNldEZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyh0cnVlKTsK
KyAgICB9CisjZW5kaWYKKworICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RmFkZSkgeworICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0
cik7CisKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisKKyAgICBzaXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMu
ZmluZChvdmVybGF5KTsKKyAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKKyAg
ICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKKworI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkp
IHsKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KGZhbHNlKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgR3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllciA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldChvdmVybGF5KTsK
KyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3Jh
cGhpY3NMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBncmFwaGljc0xheWVyLT5zZXRTaXplKG1fd2Vi
UGFnZS0+c2l6ZSgpKTsKKyAgICB9CisgICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGRpcnR5UmVjdCk7CisgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5zY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBmbG9hdCBvcGFj
aXR5KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSBtX292ZXJsYXlHcmFw
aGljc0xheWVycy5nZXQob3ZlcmxheSk7CisgICAgaWYgKCFncmFwaGljc0xheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAg
IG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFn
ZU92ZXJsYXkqIG92ZXJsYXkpCit7CisgICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9
IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldChvdmVybGF5KTsKKyAgICBpZiAoIWdyYXBoaWNz
TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShJbnRTaXplKCkpOworICAg
IG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdTaXplKCkK
K3sKKyAgICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoIWdyYXBoaWNzTGF5ZXItPmRyYXdzQ29udGVudCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOworICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQ
cmVmZXJlbmNlcygpCit7CisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIo
Z3JhcGhpY3NMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpk
aWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAgbV9yb290TGF5ZXItPm5vdGVEZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgIGlu
dmFsaWRhdGVBbGxQYWdlT3ZlcmxheUxheWVycygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQoreworICAgIGZvciAoYXV0byYgZ3JhcGhp
Y3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlm
IChUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGdyYXBoaWNzTGF5ZXItPnRpbGVkQmFja2lu
ZygpKQorICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRFeHBvc2VkUmVjdChtX3dlYlBhZ2Ut
Pm1haW5GcmFtZVZpZXcoKS0+ZXhwb3NlZFJlY3QoKSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsQW55RnJhbWUoKQoreworICAgIGludmFsaWRhdGVB
bGxQYWdlT3ZlcmxheUxheWVycygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
aW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGdyYXBo
aWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAgICAgZ3Jh
cGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKEZsb2F0UmVjdCB2aXNpYmxlUmVjdCkKK3sK
KyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOworICAgIGxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdp
bmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKKyAgICBsYXllci0+c2V0
U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgbGF5ZXIt
PnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9
CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92
ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dL
VHlwZVJlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQoreworICAg
IGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VP
dmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoV0tUeXBlUmVm
IHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRl
LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHJl
dHVybiBudWxscHRyOworfQorCitXS0FycmF5UmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7
CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1f
cGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChXS0Fy
cmF5UmVmIHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFy
YW1ldGVyaXplZE5hbWVzKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50
Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQor
eworICAgIGZvciAoYXV0byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVu
ZCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0
KTsKKyAgICAgICAgaXQtPmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJ
bnRSZWN0KGNsaXBSZWN0KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjM3OTA1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMCwwICsx
LDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAorI2Rl
ZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIK
KyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJNb3VzZUV2ZW50OworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9s
bGVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAg
IFBhZ2VPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlKik7CisKKyAgICB2b2lkIGluaXRpYWxpemUo
KTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQ
YXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlKTsKKyAgICB2b2lk
IHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
KTsKKworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHko
UGFnZU92ZXJsYXkqLCBmbG9hdCk7CisgICAgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5Kik7CisKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBkaWRDaGFu
Z2VQcmVmZXJlbmNlcygpOworICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsK
KyAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CisgICAgdm9pZCBkaWRTY3JvbGxBbnlG
cmFtZSgpOworCisgICAgdm9pZCBmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKFdlYkNvcmU6OkZsb2F0
UmVjdCk7CisKKyAgICBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
OworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgQVBJIHR5cGVzIGhlcmUuCisgICAg
V0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0
cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKKyAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZvaWQgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCk7CisKKyAgICAv
LyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSkgb3Zl
cnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
IG92ZXJyaWRlIHsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcm9vdExheWVyOworICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4+IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzOworICAg
IFZlY3RvcjxSZWZQdHI8UGFnZU92ZXJsYXk+PiBtX3BhZ2VPdmVybGF5czsKKyAgICBXZWJQYWdl
KiBtX3dlYlBhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBh
Z2VPdmVybGF5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9s
bGVyLmNwcAppbmRleCA0MTY3MmMwLi44MWE2ZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxlcGhvbmVOdW1iZXJP
dmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBUZWxlcGhvbmVOdW1i
ZXJPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKICAgICAKICAgICBS
ZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOwog
ICAgIG1fdGVsZXBob25lTnVtYmVyT3ZlcmxheSA9IG92ZXJsYXkuZ2V0KCk7Ci0gICAgbV93ZWJQ
YWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIHRydWUpOworICAgIG1f
d2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkZhZGUpOwogICAgIG1fdGVsZXBob25lTnVtYmVyT3ZlcmxheS0+c2V0TmVl
ZHNEaXNwbGF5KCk7CiB9CiAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBUZWxlcGhvbmVOdW1iZXJP
dmVybGF5Q29udHJvbGxlcjo6ZGVzdHJveU92ZXJsYXkoKQogICAgIGlmICghbV90ZWxlcGhvbmVO
dW1iZXJPdmVybGF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnVuaW5zdGFs
bFBhZ2VPdmVybGF5KG1fdGVsZXBob25lTnVtYmVyT3ZlcmxheSwgZmFsc2UpOworICAgIG1fd2Vi
UGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV90ZWxlcGhvbmVOdW1iZXJPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZvaWQgVGVsZXBob25lTnVtYmVy
T3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwMjI2
OThmLi5iNmFiNzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIK
ICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKICNpbmNs
dWRlICJQYWdlQmFubmVyLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlBsdWdpblByb3h5LmgiCiAjaW5j
bHVkZSAiUGx1Z2luVmlldy5oIgpAQCAtMzA3LDYgKzMwNiw3IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
dWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogI2lmIEVOQUJMRShXRUJHTCkKICAgICAsIG1fc3lzdGVtV2ViR0xQb2xpY3koV2ViR0xB
bGxvd0NyZWF0aW9uKQogI2VuZGlmCisgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcih0aGlz
KQogewogICAgIEFTU0VSVChtX3BhZ2VJRCk7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBub24t
aWRlYWwgbG9jYXRpb24gZm9yIHRoaXMgU2V0dGluZyBhbmQKQEAgLTM0MCw2ICszNDAsNyBAQCBX
ZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIAogICAgIG1fZHJhd2luZ0FyZWEgPSBEcmF3aW5nQXJlYTo6
Y3JlYXRlKHRoaXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5n
RW5hYmxlZChmYWxzZSk7CisgICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgp
OwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5n
ID0gcGFyYW1ldGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6
OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTExMjEsNiArMTEyMiw4IEBAIHZv
aWQgV2ViUGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAg
ICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmli
dXRlc0NoYW5nZWQoKTsKICNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlk
Q2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAt
MTIwNiwxNSArMTIwOSw2IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgbV9tYWluRnJhbWUt
PmNvcmVGcmFtZSgpLT52aWV3KCktPnBhaW50KCZncmFwaGljc0NvbnRleHQsIHJlY3QpOwogfQog
Ci12b2lkIFdlYlBhZ2U6OmRyYXdQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXks
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIEFTU0VSVChwYWdlT3ZlcmxheSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBncmFwaGljc0NvbnRleHQuY2xp
cChyZWN0KTsKLSAgICBwYWdlT3ZlcmxheS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCByZWN0
KTsKLX0KLQogZG91YmxlIFdlYlBhZ2U6OnRleHRab29tRmFjdG9yKCkgY29uc3QKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCk7CkBAIC0xMzM3LDYgKzEzMzEs
OCBAQCB2b2lkIFdlYlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9y
KQogCiAgICAgaWYgKG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKSkKICAgICAgICAgbV9k
cmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdCgpLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKTsKKworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZENoYW5nZURldmljZVNjYWxl
RmFjdG9yKCk7CiB9CiAKIGZsb2F0IFdlYlBhZ2U6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QK
QEAgLTE0NTIsMzcgKzE0NDgsMTQgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBpbmpl
Y3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIG1l
c3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXko
UGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIGJvb2wgc2hvdWxkRmFkZUluKQor
dm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4g
cGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKIHsKLSAgICBSZWZQ
dHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsKLSAgICAKLSAgICBpZiAobV9w
YWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheS5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVybGF5LT5zZXRQYWdl
KHRoaXMpOwotCi0gICAgaWYgKHNob3VsZEZhZGVJbikKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRG
YWRlSW5BbmltYXRpb24oKTsKLQotICAgIG1fZHJhd2luZ0FyZWEtPmRpZEluc3RhbGxQYWdlT3Zl
cmxheShvdmVybGF5LmdldCgpKTsKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxs
UGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjp1
bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGJvb2wgc2hvdWxk
RmFkZU91dCkKK3ZvaWQgV2ViUGFnZTo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkq
IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCiB7Ci0gICAgc2l6
ZV90IGV4aXN0aW5nT3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChwYWdlT3Zlcmxh
eSk7Ci0gICAgaWYgKGV4aXN0aW5nT3ZlcmxheUluZGV4ID09IG5vdEZvdW5kKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkRmFkZU91dCkgewotICAgICAgICBwYWdlT3ZlcmxheS0+
c3RhcnRGYWRlT3V0QW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBw
YWdlT3ZlcmxheS0+c2V0UGFnZSgwKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUoZXhpc3Rp
bmdPdmVybGF5SW5kZXgpOwotCi0gICAgbV9kcmF3aW5nQXJlYS0+ZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkocGFnZU92ZXJsYXkpOworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLnVuaW5zdGFs
bFBhZ2VPdmVybGF5KHBhZ2VPdmVybGF5LCBmYWRlTW9kZSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
SU9TKQpAQCAtMTc2MSwxNCArMTczNCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlzLnNp
emUoKSkgewotICAgICAgICAvLyBMZXQgdGhlIHBhZ2Ugb3ZlcmxheSBoYW5kbGUgdGhlIGV2ZW50
LgotICAgICAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5kID0gbV9wYWdl
T3ZlcmxheXMucmVuZCgpOwotICAgICAgICBmb3IgKFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9p
dGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBpZiAoKGhhbmRsZWQgPSAoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFn
ZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CiAKICNpZiAh
UExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE3
OTQsMTQgKzE3NjAsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYgbW91c2VFdmVudCkKIAogdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50U3luY0ZvclRlc3Rp
bmcoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgYm9vbCYgaGFuZGxlZCkKIHsKLSAg
ICBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuc2l6ZSgpKSB7Ci0g
ICAgICAgIFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVy
bGF5cy5yZW5kKCk7Ci0gICAgICAgIGZvciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJh
dG9yIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGlmICgoaGFuZGxlZCA9ICgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlD
b250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CiAjaWYgIVBMQVRGT1JNKElP
UykKICAgICBpZiAoIWhhbmRsZWQgJiYgbV9oZWFkZXJCYW5uZXIpCiAgICAgICAgIGhhbmRsZWQg
PSBtX2hlYWRlckJhbm5lci0+bW91c2VFdmVudChtb3VzZUV2ZW50KTsKQEAgLTE4OTIsMzIgKzE4
NTEsNiBAQCB2b2lkIFdlYlBhZ2U6OmtleUV2ZW50U3luY0ZvclRlc3RpbmcoY29uc3QgV2ViS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCwgYm9vbAogICAgICAgICBoYW5kbGVkID0gcGVyZm9y
bURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGtleWJvYXJkRXZlbnQpOwogfQogCi1XS1R5cGVS
ZWYgV2ViUGFnZTo6cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdL
U3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKLXsKLSAgICBpZiAoIW1f
cGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUGFnZU92ZXJsYXlM
aXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAgICBm
b3IgKFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlz
LnJiZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV0tUeXBlUmVmIHZhbHVlID0g
KCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLCBwYXJhbWV0
ZXIpOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotICAgIHJldHVybiAwOwotfQotCi1XS0FycmF5UmVmIFdlYlBhZ2U6OnBhZ2VPdmVybGF5Q29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCi17
Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVybGF5cy5y
ZW5kKCk7Ci0gICAgZm9yIChQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBt
X3BhZ2VPdmVybGF5cy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdLQXJy
YXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJh
bWV0ZXJpemVkTmFtZXMpOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiB2b2lkIFdlYlBhZ2U6OnZhbGlkYXRl
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ewogICAgIGJvb2wgaXNFbmFibGVkID0gZmFsc2U7CkBAIC0yNzA1LDYgKzI2MzgsOCBAQCB2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0
b3JlKQogCiAgICAgaWYgKG1fZHJhd2luZ0FyZWEpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPnVw
ZGF0ZVByZWZlcmVuY2VzKHN0b3JlKTsKKworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRp
ZENoYW5nZVByZWZlcmVuY2VzKCk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ1Njcs
NCArNDUwMiw5IEBAIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyJiBXZWJQYWdlOjp0
ZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlcigpCiB9CiAjZW5kaWYKIAordm9pZCBXZWJQ
YWdlOjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpCit7CisgICAgbV9wYWdlT3Zl
cmxheUNvbnRyb2xsZXIuZGlkU2Nyb2xsQW55RnJhbWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRl
eCAyMDAwMzQ5Li44NWQ0ODBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiVGFwSGlnaGxpZ2h0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKQEAgLTE4NCw4ICsxODUsNiBAQCBjbGFzcyBXZWJUb3VjaEV2ZW50Owog
Y2xhc3MgVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKIAotdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gUGFnZU92ZXJsYXlMaXN0OwotCiBjbGFzcyBX
ZWJQYWdlIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxl
UGFnZT4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIElQQzo6TWVzc2FnZVNl
bmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGFnZT4gY3JlYXRlKHVp
bnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwpAQCAtMjEw
LDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJk
TGlzdCogYmFja0ZvcndhcmRMaXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQXJlYS5nZXQoKTsgfQorICAgIGNvbnN0IFBhZ2VPdmVy
bGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VP
dmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtMjQxLDcgKzI0
Miw2IEBAIHB1YmxpYzoKICAgICAvLyAtLSBDYWxsZWQgYnkgdGhlIERyYXdpbmdBcmVhLgogICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBnZW5lcmljaXplIHRoZXNlIGludG8gYSBEcmF3aW5nQXJlYSBj
bGllbnQgaW50ZXJmYWNlLiBXb3VsZCB0aGF0IGJlIGJlbmVmaWNpYWw/CiAgICAgdm9pZCBkcmF3
UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
Ci0gICAgdm9pZCBkcmF3UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBsYXlvdXRJZk5l
ZWRlZCgpOwogCiAgICAgLy8gLS0gQ2FsbGVkIGZyb20gV2ViQ29yZSBjbGllbnRzLgpAQCAtNDEw
LDEwICs0MTAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0
OwogICAgIGJvb2wgd2luZG93QW5kV2ViUGFnZUFyZUZvY3VzZWQoKSBjb25zdDsKLSAgICB2b2lk
IGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgYm9vbCBzaG91bGRG
YWRlSW4gPSBmYWxzZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSosIGJvb2wgc2hvdWxkRmFkZU91dCA9IGZhbHNlKTsKLSAgICBib29sIGhhc1BhZ2VPdmVybGF5
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyB9Ci0gICAgUGFnZU92ZXJs
YXlMaXN0JiBwYWdlT3ZlcmxheXMoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5czsgfQorICAgIHZv
aWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgdm9p
ZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJ
T1MpCiAgICAgdm9pZCBzZXRIZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4p
OwpAQCAtNzgxLDYgKzc3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVRlbGVwaG9uZU51
bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
OwogI2VuZGlmCiAKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCk7
CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKTsKIApAQCAtMTA4Niw3ICsxMDg2LDYgQEAgcHJpdmF0ZToKICAg
ICBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCBtX2xvZ0RpYWdub3N0
aWNNZXNzYWdlQ2xpZW50OwogCiAgICAgRmluZENvbnRyb2xsZXIgbV9maW5kQ29udHJvbGxlcjsK
LSAgICBQYWdlT3ZlcmxheUxpc3QgbV9wYWdlT3ZlcmxheXM7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgIFJlZlB0cjxXZWJJbnNwZWN0b3I+IG1faW5zcGVjdG9yOwpAQCAtMTE4Nyw2ICsx
MTg2LDggQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
CiAgICAgUmVmUHRyPFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyPiBtX3RlbGVwaG9u
ZU51bWJlck92ZXJsYXlDb250cm9sbGVyOwogI2VuZGlmCisKKyAgICBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAppbmRleCA0ODQ2NjZjLi5mMTg5
NWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJD
QVJlbW90ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC00
MCw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVMYXllclRyZWVD
b250ZXh0OwogCi1jbGFzcyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3
aW5nQXJlYSwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworY2xhc3MgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEgewogcHVibGljOgog
ICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UqLCBjb25zdCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB+UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEoKTsKQEAgLTYwLDExICs1OSw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxh
eShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiwgZmxvYXQpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlU3Rh
dGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKQEAgLTgzLDEyICs3Nyw2IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBvdmVycmlk
ZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29u
dGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1p
dENoYW5nZXNGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qgb3Zl
cnJpZGUgeyB9CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEwMSw5ICs4OSw3IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmco
KSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVDb250ZXh0PiBt
X3JlbW90ZUxheWVyVHJlZUNvbnRleHQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4+IG1fcGFnZU92ZXJsYXlMYXllcnM7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogCiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYS5tbQppbmRleCAyYjI3NWY0Li4zMjBkYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAgLTQ4LDYgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEo
V2ViUGFnZSogd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpCiAgICAg
OiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUsIHdlYlBhZ2UpCiAg
ICAgLCBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQoc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVMYXll
clRyZWVDb250ZXh0Pih3ZWJQYWdlKSkKKyAgICAsIG1fcm9vdExheWVyKEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCBudWxscHRyKSkKICAgICAsIG1fZXhwb3Nl
ZFJlY3QoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKICAgICAsIG1fc2Nyb2xsZWRFeHBvc2Vk
UmVjdChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQogICAgICwgbV9sYXllckZsdXNoVGltZXIo
dGhpcywgJlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpsYXllckZsdXNoVGltZXJGaXJlZCkK
QEAgLTg1LDcgKzg2LDEyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogCiB2b2lkIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290
TGF5ZXIpCiB7Ci0gICAgbV9yb290TGF5ZXIgPSByb290TGF5ZXIgPyB0b0dyYXBoaWNzTGF5ZXJD
QVJlbW90ZShyb290TGF5ZXIpLT5wbGF0Zm9ybUNBTGF5ZXIoKSA6IG51bGxwdHI7CisgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIgKj4gY2hpbGRyZW47CisgICAgaWYgKHJvb3RMYXllcikgeworICAg
ICAgICBjaGlsZHJlbi5hcHBlbmQocm9vdExheWVyKTsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5k
KG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkucm9vdExheWVyKCkpOworICAgIH0K
KyAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogfQogCiB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3
U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQb3NpdGlvbikKQEAgLTkzLDEyICs5OSw2IEBAIHZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNp
emUmIHZpZXdTaXplLCBjb25zdCBJCiAgICAgbV92aWV3U2l6ZSA9IHZpZXdTaXplOwogICAgIG1f
d2ViUGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJs
YXlBbmRMYXllciA6IG1fcGFnZU92ZXJsYXlMYXllcnMpIHsKLSAgICAgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBvdmVybGF5QW5kTGF5ZXIudmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBsYXllci0+c2V0U2l6ZSh2aWV3U2l6ZSk7
Ci0gICAgfQotCiAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIAogICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlR2VvbWV0
cnkoKSk7CkBAIC0xMTcsOTUgKzExNyw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKQogICAgIC8v
IGluIG9yZGVyIHRvIGJlIHNjcm9sbGVkIGJ5IHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KICAg
ICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQodHJ1ZSk7CiAgICAgc2V0dGluZ3Muc2V0Rml4ZWRQb3NpdGlvbkNyZWF0ZXNTdGFja2luZ0Nv
bnRleHQodHJ1ZSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1f
cGFnZU92ZXJsYXlMYXllcnMpIHsKLSAgICAgICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5zZXRB
Y2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsK
LSAgICAgICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGlu
Z3Muc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICAgICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5z
ZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOwotICAg
IH0KLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6ZGlkSW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NMYXllckNBUmVtb3RlPiBsYXllcihzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0FS
ZW1vdGUqPihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhp
cykucmVsZWFzZSgpKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGxheWVyLT5zZXROYW1lKCJwYWdl
IG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBsYXllci0+c2V0QWNjZWxlcmF0ZXNE
cmF3aW5nKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKCkpOwotICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXItPnNl
dFNob3dSZXBhaW50Q291bnRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2hv
d1JlcGFpbnRDb3VudGVyKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFwcGVuZFN1YmxheWVyKGxh
eWVyLT5wbGF0Zm9ybUNBTGF5ZXIoKSk7Ci0gICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5v
dXRPZlRyZWVMYXllcldhc0FkZGVkKGxheWVyLmdldCgpKTsKLQotICAgIG1fcGFnZU92ZXJsYXlM
YXllcnMuYWRkKHBhZ2VPdmVybGF5LCBzdGQ6Om1vdmUobGF5ZXIpKTsKLSAgICBzY2hlZHVsZUNv
bXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4gbGF5ZXIgPSBtX3Bh
Z2VPdmVybGF5TGF5ZXJzLnRha2UocGFnZU92ZXJsYXkpOwotICAgIEFTU0VSVChsYXllcik7Ci0K
LSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPm91dE9mVHJlZUxheWVyV2lsbEJlUmVtb3Zl
ZChsYXllci5nZXQoKSk7Ci0gICAgbGF5ZXItPnBsYXRmb3JtQ0FMYXllcigpLT5yZW1vdmVGcm9t
U3VwZXJsYXllcigpOwotCi0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rp
c3BsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZSogbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdl
dChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KHRydWUpOwotICAgICAgICBsYXllci0+c2V0U2l6ZShtX3ZpZXdTaXplKTsKLSAgICB9
Ci0KLSAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWE6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NMYXllckNBUmVtb3RlKiBsYXllciA9IG1fcGFn
ZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLSAgICAKLSAgICBpZiAoIWxheWVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0g
ICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJs
YXkpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdl
dChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBsYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBsYXllci0+c2V0U2l6ZShJbnRT
aXplKCkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewot
ICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9wYWdlT3ZlcmxheUxheWVy
cykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLnZhbHVlLmdldCgpID09IGdyYXBoaWNz
TGF5ZXIpIHsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KG92ZXJsYXlB
bmRMYXllci5rZXksIGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWZsb2F0IFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAog
I2lmIFBMQVRGT1JNKElPUykKQEAgLTI4MywxMyArMTk0LDkgQEAgdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpCiAjZW5kaWYKIAogICAg
IGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGxheWVyLT50aWxlZEJh
Y2tpbmcoKSkKLSAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0RXhwb3NlZFJlY3QobV9zY3Jv
bGxlZEV4cG9zZWRSZWN0KTsKLSAgICB9Ci0gICAgCiAgICAgZnJhbWVWaWV3LT5hZGp1c3RUaWxl
ZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQogCiBUaWxlZEJhY2tpbmcqIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdApAQCAtMzM4
LDEzICsyNDUsMTYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXll
cnMoKQogICAgIH0KIAogICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQt
PmZsdXNoT3V0T2ZUcmVlTGF5ZXJzKCk7CisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0
UG9pbnQoKSwgbV92aWV3U2l6ZSk7CisgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xs
ZWRFeHBvc2VkUmVjdCk7CisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5m
bHVzaFBhZ2VPdmVybGF5TGF5ZXJzKHZpc2libGVSZWN0KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5n
U3ViZnJhbWVzKCk7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKIAogICAgIC8vIEZJWE1FOiBtaW5pemUgdGhlc2UgdHJhbnNhY3Rpb25z
IGlmIG5vdGhpbmcgY2hhbmdlZC4KICAgICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiBsYXll
clRyYW5zYWN0aW9uOwotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVpbGRUcmFuc2Fj
dGlvbihsYXllclRyYW5zYWN0aW9uLCAqbV9yb290TGF5ZXIpOworICAgIG1fcmVtb3RlTGF5ZXJU
cmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXllclRyYW5zYWN0aW9uLCAqdG9HcmFwaGlj
c0xheWVyQ0FSZW1vdGUobV9yb290TGF5ZXIuZ2V0KCkpLT5wbGF0Zm9ybUNBTGF5ZXIoKSk7CiAg
ICAgbV93ZWJQYWdlLT53aWxsQ29tbWl0TGF5ZXJUcmVlKGxheWVyVHJhbnNhY3Rpb24pOwogCiAg
ICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiBzY3JvbGxpbmdUcmFuc2Fj
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaAppbmRleCAyMTlh
NThjLi43YjFlNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5o
CkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJM
YXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xh
eWVyRmx1c2hTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CkBAIC01MSw3ICs1MCw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwogCi1jbGFz
cyBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudCwgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNs
aWVudCB7CitjbGFzcyBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3
aW5nQXJlYSwgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2ViUGFnZSosIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKTsKICAgICB2aXJ0dWFsIH5UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYSgpOwpAQCAtNzEsMTEgKzcwLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheShQ
YWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5Kiwg
ZmxvYXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VP
dmVybGF5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNv
bnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgbWFp
bkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlk
ZTsKIApAQCAtODQsMTkgKzc4LDEwIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNBc3luY1Njcm9sbGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpIG92ZXJyaWRlOwot
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQWZ0ZXJFbnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3Np
dGlvbihzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29yZTo6RnJhbWVW
aWV3Kikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICAvLyBXZWJDb3JlOjpMYXll
ckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkgb3Zl
cnJpZGU7CiAKQEAgLTExOSwxNSArMTA0LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKik7CiAKLSAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoUGFnZU92ZXJsYXkqKTsKLSAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVy
KFBhZ2VPdmVybGF5Kik7CiAgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxl
ZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hv
d0xheWVyKTsKIAogICAgIHZvaWQgdXBkYXRlSW50cmluc2ljQ29udGVudFNpemVUaW1lckZpcmVk
KFdlYkNvcmU6OlRpbWVyPFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhPiopOwogICAgIHZv
aWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOwotICAgIAotICAgIHZvaWQgaW52YWxpZGF0
ZUFsbFBhZ2VPdmVybGF5cygpOwogCiAgICAgYm9vbCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW47
CiAgICAgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlciBtX2xheWVyRmx1c2hTY2hlZHVsZXI7
CkBAIC0xNDAsMTAgKzEyMSw2IEBAIHByaXZhdGU6CiAKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
bV9wZW5kaW5nUm9vdExheWVyOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBQYWdlT3ZlcmxheUxheWVy
TWFwOwotICAgIFBhZ2VPdmVybGF5TGF5ZXJNYXAgbV9wYWdlT3ZlcmxheUxheWVyczsKLSAgICBt
dXRhYmxlIEhhc2hNYXA8Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFJldGFpblB0cjxD
QUxheWVyPj4gbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzOwotCiAgICAgYm9vbCBtX2lzUGFp
bnRpbmdTdXNwZW5kZWQ7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9leHBvc2VkUmVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCmluZGV4IDhiMjUwZWUu
LmMzNzZlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpA
QCAtMTEwLDE3ICsxMTAsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpz
Y3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50UwogICAgIHVwZGF0ZVNj
cm9sbGVkRXhwb3NlZFJlY3QoKTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6aW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpCi17Ci0gICAgZm9yIChQYWdlT3Zlcmxh
eUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5k
ID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+dmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpCi17Ci0gICAg
aW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpOwotfQotCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyKQogewogICAgIENBTGF5ZXIgKnJvb3RMYXllciA9IGdyYXBoaWNzTGF5ZXIgPyBn
cmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWw7CkBAIC0xODUsNzEgKzE3NCw2IEBA
IHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCkKICAgICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuc2NoZWR1bGUoKTsKIH0KIAot
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXModHJ1ZSk7Ci0jZW5kaWYKLQotICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIocGFn
ZU92ZXJsYXkpOwotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaWRV
bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIocGFnZU92ZXJsYXkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVycy5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5j
aHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZhbHNlKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy5nZXQo
cGFnZU92ZXJsYXkpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNldFNpemUoZXhwYW5kZWRJbnRTaXplKEZsb2F0
U2l6ZShtX2hvc3RpbmdMYXllci5nZXQoKS5mcmFtZS5zaXplKSkpOwotICAgIH0KLQotICAgIGxh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMu
Z2V0KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGxheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmNs
ZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQotewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy5nZXQocGFnZU92ZXJsYXkpOwotCi0g
ICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7Ci0gICAgbGF5ZXItPnNldFNpemUoSW50U2l6ZSgpKTsKLSAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikK
IHsKICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRp
bmdzKCk7CkBAIC0yNjEsMTIgKzE4NSw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmCiAgICAg
fQogI2VuZGlmCiAKLSAgICBmb3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRBY2NlbGVyYXRl
c0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICAgICAg
aXQtPnZhbHVlLT5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycygp
KTsKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Muc2hv
d1JlcGFpbnRDb3VudGVyKCkpOwotICAgIH0KLQogICAgIC8vIEZpeGVkIHBvc2l0aW9uIGVsZW1l
bnRzIG5lZWQgdG8gYmUgY29tcG9zaXRlZCBhbmQgY3JlYXRlIHN0YWNraW5nIGNvbnRleHRzCiAg
ICAgLy8gaW4gb3JkZXIgdG8gYmUgc2Nyb2xsZWQgYnkgdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBXZSBhbHNvIHdhbnQgdG8ga2VlcAogICAgIC8vIFNldHRpbmdzOnNldEZpeGVkUG9zaXRpb25D
cmVhdGVzU3RhY2tpbmdDb250ZXh0KCkgZW5hYmxlZCBmb3IgaU9TLiBTZWUKQEAgLTM0NCwyOSAr
MjYyLDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlzcGF0Y2hBZnRl
ckVuc3VyaW5nVXBkYXRlZFNjcm9sbFBvc2l0aW9uKHMKICNlbmRpZgogfQogCi12b2lkIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUpCi17Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWE6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCi17Ci19
Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnBhaW50Q29udGVudHMoY29u
c3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGNs
aXBSZWN0KQotewotICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4o
KSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgPT0gZ3JhcGhpY3NMYXllcikgewotICAgICAgICAg
ICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoaXQtPmtleSwgZ3JhcGhpY3NDb250ZXh0LCBl
bmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotZmxvYXQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRldmlj
ZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgp
LT5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCiBib29sIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhOjpmbHVzaExheWVycygpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZVN0YXRlSXNG
cm96ZW4pOwpAQCAtMzgzLDExICsyNzgsNyBAQCBib29sIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhOjpmbHVzaExheWVycygpCiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBbbV9o
b3N0aW5nTGF5ZXIgZnJhbWVdOwogICAgIHZpc2libGVSZWN0LmludGVyc2VjdChtX3Njcm9sbGVk
RXhwb3NlZFJlY3QpOwotCi0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVyTWFwOjppdGVyYXRvciBp
dCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVy
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICBsYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
KHZpc2libGVSZWN0KTsKLSAgICB9CisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5mbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKHZpc2libGVSZWN0KTsKIAogICAgIGJvb2wgcmV0
dXJuVmFsdWUgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKQEAgLTQ0OSwxMyArMzQw
LDkgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRF
eHBvc2VkUmVjdCgpCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3QobV9z
Y3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX3Bh
Z2VPdmVybGF5TGF5ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZyA9IGxheWVyLT50aWxlZEJhY2tpbmcoKSkKLSAgICAgICAgICAgIHRpbGVkQmFj
a2luZy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICB9Ci0KICAg
ICBmcmFtZVZpZXctPmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CisKKyAgICBtX3dlYlBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAK
IHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0
IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJbnRTaXplJiBsYXllclBvc2l0aW9uKQpAQCAtNDgw
LDE3ICszNjcsOSBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29ucwogICAgICAgICBzaXplID0gY29u
dGVudFNpemU7CiAgICAgfQogCi0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxh
eWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KQotICAgICAgICAgICAgbGF5ZXItPnNldFNpemUodmlld1NpemUpOwotICAgIH0KLQogICAgIGlm
ICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKQogICAgICAgICBmbHVzaExheWVycygpOwogCi0g
ICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpOwotCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CiAKQEAgLTUx
Miw5ICszOTEsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29ucwogdm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiB7CiAgICAgbV93ZWJQYWdlLT5zZXREZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0KLSAgICBmb3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+bm90ZURldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiB9CiAKIHZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0
aW5nTW9kZSkKQEAgLTU2OSw3ICs0NDUsNyBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICpsYXllcikKICAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKIAotICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bGF5ZXIgPyBAWyBsYXll
ciBdIDogQFsgXV07CisgICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpsYXllciA/IEBb
IGxheWVyLCBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnJvb3RMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCkgXSA6IEBbIF1dOwogCiAgICAgYm9vbCBoYWRSb290TGF5ZXIgPSAhIW1f
cm9vdExheWVyOwogICAgIG1fcm9vdExheWVyID0gbGF5ZXI7CkBAIC01NzgsNzMgKzQ1NCwxMSBA
QCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcihDQUxheWVyICpsYXllcikKICAgICBpZiAoaGFkUm9vdExheWVyICE9ICEhbGF5ZXIpCiAg
ICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKGxheWVyID8gbV9ob3N0
aW5nTGF5ZXIuZ2V0KCkgOiAwKTsKIAotICAgIGZvciAoUGFnZU92ZXJsYXlMYXllck1hcDo6aXRl
cmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJs
YXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgW21faG9zdGluZ0xheWVy
IGFkZFN1YmxheWVyOml0LT52YWx1ZS0+cGxhdGZvcm1MYXllcigpXTsKLQogICAgIHVwZGF0ZURl
YnVnSW5mb0xheWVyKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93VGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3IoKSk7CiAKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogfQog
Ci12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpjcmVhdGVQYWdlT3ZlcmxheUxh
eWVyKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NMYXllcj4gbGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZh
Y3RvcnkoKSwgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGxheWVyLT5zZXROYW1lKCJwYWdl
IG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBsYXllci0+c2V0QWNjZWxlcmF0ZXNE
cmF3aW5nKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKCkpOwotICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXItPnNl
dFNob3dSZXBhaW50Q291bnRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2hv
d1JlcGFpbnRDb3VudGVyKCkpOwotCi0gICAgbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzLnNl
dChsYXllci5nZXQoKSwgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0KLSAgICBbQ0FUcmFuc2Fj
dGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsK
LQotICAgIFttX2hvc3RpbmdMYXllciBhZGRTdWJsYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigp
XTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXJzLmFkZChwYWdlT3ZlcmxheSwgc3RkOjptb3ZlKGxheWVyKSk7Ci19Ci0KLXZvaWQgVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4g
bGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLnRha2UocGFnZU92ZXJsYXkpOwotICAgIEFTU0VS
VChsYXllcik7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIFtsYXllci0+cGxhdGZvcm1MYXllcigp
IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0K
LSAgICBtX3BhZ2VPdmVybGF5UGxhdGZvcm1MYXllcnMucmVtb3ZlKGxheWVyLmdldCgpKTsKLX0K
LQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlkQ29tbWl0Q2hhbmdlc0Zv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKSBjb25zdAotewotICAgIFJldGFpblB0
cjxDQUxheWVyPiBvbGRQbGF0Zm9ybUxheWVyID0gbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJz
LmdldChsYXllcik7Ci0KLSAgICBpZiAoIW9sZFBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChvbGRQbGF0Zm9ybUxheWVyLmdldCgpID09IGxheWVyLT5wbGF0Zm9ybUxh
eWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotCi0gICAgW21faG9zdGlu
Z0xheWVyIGluc2VydFN1YmxheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCkgYWJvdmU6b2xkUGxh
dGZvcm1MYXllci5nZXQoKV07Ci0gICAgW29sZFBsYXRmb3JtTGF5ZXIgcmVtb3ZlRnJvbVN1cGVy
bGF5ZXJdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIG1fcGFnZU92ZXJs
YXlQbGF0Zm9ybUxheWVycy5zZXQobGF5ZXIsIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotfQot
CiBUaWxlZEJhY2tpbmcqIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVU
aWxlZEJhY2tpbmcoKSBjb25zdAogewogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KaW5kZXggMjZiMDE4ZS4uMDZmMDgyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQpAQCAtNzUsNyArNzUs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwogewotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlc05hbWVzKHRydWUpKTsKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiByZXN1
bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIApAQCAtMTcyLDcgKzE3Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAgICAgfQogICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyaWJ1dGVS
ZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilhdHRy
aWJ1dGUpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9w
YWdlLT5wYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRl
UmVmLmdldCgpLCBwYWdlT3ZlcmxheVBhcmFtZXRlci5nZXQoKSkpOworICAgIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlUmVmLmdldCgpLCBw
YWdlT3ZlcmxheVBhcmFtZXRlci5nZXQoKSkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228875</attachid>
            <date>2014-04-08 13:02:13 -0700</date>
            <delta_ts>2014-04-08 13:51:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pageoverlay4.diff</filename>
            <type>text/plain</type>
            <size>65021</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOTk2YzE1Li5mOTE1NjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUg
QEAKKzIwMTQtMDQtMDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVW5pZnkgYW5kIGZhY3RvciBvdXQgcGFnZSBvdmVybGF5IGltcGxlbWVudGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMzUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcg
YWxsIG9mIHRoZSBQYWdlT3ZlcmxheSBjb2RlIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGNyb3NzLXBs
YXRmb3JtCisgICAgICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciwgaW5jbHVkaW5nIGhpdC10ZXN0
aW5nIGNvZGUgZnJvbSBXZWJQYWdlIGFuZCBwYWludGluZworICAgICAgICBhbmQgbGF5ZXItdHJl
ZSBtYW5pcHVsYXRpb24gY29kZSBmcm9tIHRoZSBEcmF3aW5nQXJlYS4KKworICAgICAgICBUaGlz
IGFsc28gbWFrZXMgYWxsIFBhZ2VPdmVybGF5cyBhIHNpbmdsZSBHcmFwaGljc0xheWVyIHRyZWUg
d2hpY2ggY2FuIGJlCisgICAgICAgIGZsdXNoZWQgYW5kIHBsdWdnZWQgaW50byBhbnkgRHJhd2lu
Z0FyZWEgaW4gYSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgorICAgICAgICBXZSBubyBsb25nZXIg
aGF2ZSB0byB3YXRjaCBmb3IgaW5kaXZpZHVhbCBsYXllcnMgZmxpcHBpbmcgaW50by9vdXQgb2Yg
dGlsaW5nLAorICAgICAgICBiZWNhdXNlIHRoZXkncmUgaGlkZGVuIHVuZGVybmVhdGggdGhlIHJv
b3QgUGFnZU92ZXJsYXkgR3JhcGhpY3NMYXllci4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBiZWNh
dXNlIEdyYXBoaWNzTGF5ZXIgaXMgY3Jvc3MtcGxhdGZvcm0sIHdlIGNhbiBzaGFyZQorICAgICAg
ICBhbGwgb2YgdGhlIGZhaXJseSB0cml2aWFsIGJ1dCBvZnQtcmVwZWF0ZWQgb3ZlcmxheSBtYW5h
Z2VtZW50IGNvZGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
cm9vdExheWVyKToKKyAgICAgICAgQWRkIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tOgorICAgICAgICBSZW1vdmUgUGFnZU92ZXJsYXktcmVsYXRlZCBjb2Rl
IGZyb20gdGhlIERyYXdpbmdBcmVhcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMu
bW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6
XSk6CisgICAgICAgIFVzZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgRHJh
d2luZ0FyZWEvV2ViUGFnZSB0byBtYW5pcHVsYXRlIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZU92ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgUmVtb3ZlIFBhZ2VPdmVybGF5LXJlbGF0ZWQgY29kZSBmcm9t
IFdlYlBhZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXlX
aXRoQW5pbWF0aW9uKToKKyAgICAgICAgKFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5
V2l0aEFuaW1hdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JDbGllbnQ6
OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6aGlkZUhp
Z2hsaWdodCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFn
ZVNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpoaWRlRmluZFVJKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJv
bGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6VGVsZXBob25l
TnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmRlc3Ryb3lPdmVybGF5KToKKyAgICAgICAgTWFrZSB1
c2Ugb2YgdGhlIEZhZGVNb2RlIGVudW0uCisKIDIwMTQtMDQtMDcgIFRpbSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBXZWJLaXQyXSBXS1BERlZpZXcg
ZmFkZXMgaW4gdGlsZXMsIFBERnMgbG9hZCB2ZXJ5IGZsYXNoaWx5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmM3NzA3ZC4uZTVh
YzAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNTA3LDYgKzUwNyw4IEBACiAJCTI5RDU1REYyMTYxQkY5RjEwMDMxQTJFMyAv
KiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdy
b3VwUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkyRDEyNUM1RTE4NTdFQTA1MDAzQkEzQ0IgLyog
Vmlld0dlc3R1cmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyLmggKi87IH07CiAJCTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVy
TWFjLm1tICovOyB9OworCQkyRDE0MEVBRjE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
ICovOyB9OworCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0
MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IH07CiAJ
CTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQxQjVENUIxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTJEMUI1RDVFMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUMxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1lc3NhZ2VzLmggKi87IH07CiAJCTJEMjhGM0U0MTg4NUNDQzEwMDRCOUVBRSAv
KiBXZWJDaHJvbWVDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDI4RjNFMDE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xpZW50
SU9TLm1tICovOyB9OwpAQCAtMjMwOCw2ICsyMzEwLDggQEAKIAkJMjlENTVERjAxNjFCRjlGMTAw
MzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJl
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1RDE4NTdF
QTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyog
UGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5
NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVD
b250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFC
NUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJl
Q29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMzNiw2ICs1
MzQwLDggQEAKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICov
LAogCQkJCTFBOTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8sCiAJ
CQkJMUE5MEMyMzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8sCisJCQkJMkQx
NDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICov
LAogCQkJCTUxOUVGNThGMThFRjc3MjEwMDAzQjdGNCAvKiBUZWxlcGhvbmVOdW1iZXJPdmVybGF5
Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJNTE5RUY1OTAxOEVGNzcyMTAwMDNCN0Y0IC8qIFRlbGVw
aG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAw
MUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLApAQCAtNjczNSw2
ICs2NzQxLDcgQEAKIAkJCQlCQ0U4MUQ4RDEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQkMzREZDMTg5OUY1MUMwMDRGMDYyNiAvKiBXS05hdmlnYXRp
b25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4
IC8qIEVkaXRpbmdSYW5nZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQxNDBFQjAxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
Nzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5QTg3MzYxOEJCRkE0MzAwNTg4QUYyIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDJGMTJEQkI5QjYwMDJENzhERSAv
KiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC04NDc3LDYgKzg0ODQsNyBAQAogCQkJCTFBRkEzQUM4MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1Vz
ZXJDb250ZW50Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REFFMTI3QTI0
RkUwMDhGRjRGNCAvKiBXZWJFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRCQTEw
RjQzODBGMDA1OEMxNUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTJEMTQwRUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCNUUxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50
RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBM0REMUZEMTI1RTU5RjMwMDQ1MTVFNiAv
KiBXZWJGaW5kQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTQ2OTUzMTIxNEU2Q0Iw
MDBCOThFQiAvKiBXZWJGb3JtQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2UuY3BwCmluZGV4IDlkMDdjM2YuLjRjOGRlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHAKQEAgLTM2NCwxMiArMzY0LDEyIEBAIHZvaWQgV0tCdW5kbGVQYWdlVW5p
bnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92
ZXJsCiAKIHZvaWQgV0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbihX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3Zlcmxh
eVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwo
cGFnZU92ZXJsYXlSZWYpLCB0cnVlKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1h
dGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdl
T3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5
KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIHRydWUpOworICAgIHRvSW1wbChwYWdlUmVmKS0+dW5p
bnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWdlUmVmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA5N2U4Nzk4Li4yNjdmNjQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTU3Niw3ICsxNTc2LDcgQEAgdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCkKICAgICBpZiAoIXdlYlBh
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPmRpZENo
YW5nZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCk7CisgICAgd2ViUGFnZS0+ZGlkQ2hhbmdlU2Ny
b2xsT2Zmc2V0Rm9yQW55RnJhbWUoKTsKIAogICAgIGlmICghbV9mcmFtZS0+aXNNYWluRnJhbWUo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IGI0
Nzk1M2UuLjBkY2IxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiAgICAgaWYgKCFt
X2hpZ2hsaWdodE92ZXJsYXkpIHsKICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGln
aHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgbV9oaWdobGln
aHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5nZXQoKTsKLSAgICAgICAgbV9wYWdlLT5pbnN0
YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIHRydWUpOworICAgICAg
ICBtX3BhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShoaWdobGlnaHRPdmVybGF5LnJlbGVhc2UoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5
LT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2hpZ2hsaWdodE92
ZXJsYXktPnN0b3BGYWRlT3V0QW5pbWF0aW9uKCk7CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omhp
ZGVIaWdobGlnaHQoKQogewogICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1f
cGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9oaWdobGlnaHRPdmVybGF5LCB0cnVlKTsKKyAg
ICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGU0
MTdjMjYuLjEyNDYwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBz
dHJ1Y3QgQ29sb3JTcGFjZURhdGE7CiBjbGFzcyBMYXllclRyZWVIb3N0OwotY2xhc3MgUGFnZU92
ZXJsYXk7CiBjbGFzcyBXZWJQYWdlOwogc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM7
CiBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXNTdG9yZTsKQEAgLTc4LDEyICs3Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheSopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiwgZmxvYXQp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9
Ci0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFpbnRpbmdFbmFibGVkKGJvb2wpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJikgeyB9CkBAIC0xMDAsOCArOTMsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55RnJhbWUoKSB7IH0K
LQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29u
c3QgV2ViQ29yZTo6RnJhbWVWaWV3KikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgeyBy
ZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKaW5kZXggZjU2NjAwMS4uYjA2YzY5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0x
NTYsMTIgKzE1NiwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBh
Z2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3RyaW5nJiBzdHJpbgogCiAgICAgaWYgKCFzaG91
bGRTaG93T3ZlcmxheSkgewogICAgICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAgICAg
ICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCB0
cnVlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5k
UGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewogICAgICAgICAgICAgUmVmUHRyPFBh
Z2VPdmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOwog
ICAgICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBmaW5kUGFnZU92ZXJsYXkuZ2V0KCk7Ci0g
ICAgICAgICAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJsYXku
cmVsZWFzZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVy
bGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiAgICAgICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlz
cGxheSgpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5k
VUkoKQogewogICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92
ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFn
ZU92ZXJsYXksIHRydWUpOworICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5
KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogCiAgICAg
UGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3dlYlBhZ2UtPm1h
aW5GcmFtZSgpKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXkuY3BwCmluZGV4IDM1Yjk4MjUuLjE5ZGVhNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtOTAsOCAr
OTAsOCBAQCB2b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2UpCiB2b2lk
IFBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQog
ewogICAgIGlmIChtX3dlYlBhZ2UpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgp
LT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOwotICAgICAg
ICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KHRo
aXMsIGRpcnR5UmVjdCk7CisgICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KHRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKKyAgICAg
ICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRz
RGlzcGxheSh0aGlzLCBkaXJ0eVJlY3QpOwogICAgIH0KIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBA
IHZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKICAgICBmbG9hdCBm
YWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKIAogICAgIG1fZnJhY3Rpb25GYWRlZElu
ID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZhZGVBbmltYXRp
b25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7Ci0gICAgbV93ZWJQYWdlLT5kcmF3aW5n
QXJlYSgpLT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOwor
ICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFj
aXR5KHRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKIAogICAgIGlmIChhbmltYXRpb25Qcm9ncmVz
cyA9PSAxLjApIHsKICAgICAgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOwpAQCAtMTg2
LDE0ICsxODYsMTQgQEAgdm9pZCBQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQo
KQogCiAgICAgICAgIGlmICh3YXNGYWRpbmdPdXQpIHsKICAgICAgICAgICAgIC8vIElmIHRoaXMg
d2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4K
LSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgZmFsc2Up
OworICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZv
aWQgUGFnZU92ZXJsYXk6OmNsZWFyKCkKIHsKLSAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkt
PmNsZWFyUGFnZU92ZXJsYXkodGhpcyk7CisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5jbGVhclBhZ2VPdmVybGF5KHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmgK
aW5kZXggMjk1ZjFlOC4uNjFkYmE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmgKQEAgLTc5LDYgKzc5LDggQEAgcHVibGljOgogICAgIHZv
aWQgY2xlYXIoKTsKIAogICAgIENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQ7IH0KKworICAgIGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKICAg
ICAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBQYWdlT3ZlcmxheShDbGllbnQqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2NmFj
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKwor
I2ltcG9ydCAiRHJhd2luZ0FyZWEuaCIKKyNpbXBvcnQgIlBhZ2VPdmVybGF5LmgiCisjaW1wb3J0
ICJXZWJQYWdlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQorICAg
IDogbV93ZWJQYWdlKHdlYlBhZ2UpCit7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
Ojppbml0aWFsaXplKCkKK3sKKyAgICBBU1NFUlQoIW1fcm9vdExheWVyKTsKKworICAgIG1fcm9v
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9v
dExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIik7CisjZW5kaWYKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRy
PFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2Rl
KQoreworICAgIEFTU0VSVChtX3Jvb3RMYXllcik7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+
IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlu
cyhvdmVybGF5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5k
KG92ZXJsYXkpOworICAgIG92ZXJsYXktPnNldFBhZ2UobV93ZWJQYWdlKTsKKworICAgIGlmIChm
YWRlTW9kZSA9PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpCisgICAgICAgIG92ZXJsYXkt
PnN0YXJ0RmFkZUluQW5pbWF0aW9uKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NM
YXllcj4gbGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV93ZWJQYWdlLT5kcmF3aW5nQXJl
YSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIHVw
ZGF0ZVNldHRpbmdzRm9yTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChsYXllci5nZXQoKSk7CisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2V0KG92ZXJs
YXkuZ2V0KCksIHN0ZDo6bW92ZShsYXllcikpOworCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKSkgeworICAgICAg
ICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXModHJ1ZSk7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1
bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogb3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlIGZhZGVNb2RlKQoreworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpIHsKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlT3V0QW5pbWF0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdmVybGF5LT5zZXRQYWdlKG51bGxwdHIp
OworCisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVybGF5KS0+cmVtb3ZlRnJv
bVBhcmVudCgpOworCisgICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1fcGFnZU92ZXJsYXlzLmZp
bmQob3ZlcmxheSk7CisgICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBub3RGb3VuZCk7CisgICAg
bV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQorICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpKSB7
CisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldEZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhm
YWxzZSk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSogb3ZlcmxheSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQob3ZlcmxheSk7Cisg
ICAgaWYgKCFncmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWdyYXBo
aWNzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShtX3dlYlBh
Z2UtPnNpemUoKSk7CisgICAgfQorICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChkaXJ0eVJlY3QpOworICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSogb3ZlcmxheSwgZmxvYXQgb3BhY2l0
eSkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZ2V0KG92ZXJsYXkpOworICAgIGlmICghZ3JhcGhpY3NMYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICBt
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VP
dmVybGF5KiBvdmVybGF5KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSBt
X292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQob3ZlcmxheSk7CisgICAgaWYgKCFncmFwaGljc0xh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldFNpemUoSW50U2l6ZSgpKTsKKyAgICBt
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCit7
CisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBncmFwaGljc0xheWVyLT5zZXRTaXplKG1f
d2ViUGFnZS0+c2l6ZSgpKTsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlUHJl
ZmVyZW5jZXMoKQoreworICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnZhbHVlcygpKQorICAgICAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKGdy
YXBoaWNzTGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlk
Q2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIG1fcm9vdExheWVyLT5ub3RlRGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKyAgICBpbnZh
bGlkYXRlQWxsUGFnZU92ZXJsYXlMYXllcnMoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKK3sKKyAgICBmb3IgKGF1dG8mIGdyYXBoaWNz
TGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkgeworICAgICAgICBpZiAo
VGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBncmFwaGljc0xheWVyLT50aWxlZEJhY2tpbmco
KSkKKyAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0RXhwb3NlZFJlY3QobV93ZWJQYWdlLT5t
YWluRnJhbWVWaWV3KCktPmV4cG9zZWRSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEFueUZyYW1lKCkKK3sKKyAgICBpbnZhbGlkYXRlQWxs
UGFnZU92ZXJsYXlMYXllcnMoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omlu
dmFsaWRhdGVBbGxQYWdlT3ZlcmxheUxheWVycygpCit7CisgICAgZm9yIChhdXRvJiBncmFwaGlj
c0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIGdyYXBo
aWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3QpCit7Cisg
ICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQoreworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBsYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisgICAgbGF5ZXItPnNldFNo
b3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIGxheWVyLT5z
ZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOworfQor
Citib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQoreworICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVy
bGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXS1R5
cGVSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKK3sKKyAgICBp
ZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3Zl
cmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKFdLVHlwZVJlZiB2
YWx1ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwg
cGFyYW1ldGVyKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworV0tBcnJheVJlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQorewor
ICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3Bh
Z2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoV0tBcnJh
eVJlZiB2YWx1ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFt
ZXRlcml6ZWROYW1lcykpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENv
bnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sK
KyAgICBmb3IgKGF1dG8gaXQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQg
PSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgIT0gZ3JhcGhpY3NMYXllcikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihn
cmFwaGljc0NvbnRleHQpOworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7
CisgICAgICAgIGl0LT5rZXktPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50
UmVjdChjbGlwUmVjdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Zsb2F0IFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmYzNzkwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKQEAgLTAsMCArMSw4
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKKyNkZWZp
bmUgUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisj
aW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
TW91c2VFdmVudDsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSopOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7
CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFz
c1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7CisgICAgdm9pZCB1
bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7
CisKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBh
Z2VPdmVybGF5KiwgZmxvYXQpOworICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSopOworCisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdl
UHJlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7Cisg
ICAgdm9pZCBkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOworICAgIHZvaWQgZGlkU2Nyb2xsQW55RnJh
bWUoKTsKKworICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9hdFJl
Y3QpOworCisgICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0eXBlcyBoZXJlLgorICAgIFdL
VHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJp
YnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7CisgICAgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKKyAgICB2b2lkIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheUxheWVycygpOworCisgICAgLy8g
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBv
dmVycmlkZSB7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVyczsKKyAgICBW
ZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7CisgICAgV2ViUGFnZSog
bV93ZWJQYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdl
T3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxl
ci5jcHAKaW5kZXggNDE2NzJjMC4uODFhNmVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGVsZXBob25lTnVtYmVyT3Zl
cmxheUNvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgVGVsZXBob25lTnVtYmVy
T3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCiAgICAgCiAgICAgUmVm
UHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKICAg
ICBtX3RlbGVwaG9uZU51bWJlck92ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2ViUGFn
ZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCB0cnVlKTsKKyAgICBtX3dl
YlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpGYWRlKTsKICAgICBtX3RlbGVwaG9uZU51bWJlck92ZXJsYXktPnNldE5lZWRz
RGlzcGxheSgpOwogfQogCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgVGVsZXBob25lTnVtYmVyT3Zl
cmxheUNvbnRyb2xsZXI6OmRlc3Ryb3lPdmVybGF5KCkKICAgICBpZiAoIW1fdGVsZXBob25lTnVt
YmVyT3ZlcmxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT51bmluc3RhbGxQ
YWdlT3ZlcmxheShtX3RlbGVwaG9uZU51bWJlck92ZXJsYXksIGZhbHNlKTsKKyAgICBtX3dlYlBh
Z2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fdGVsZXBob25lTnVtYmVyT3ZlcmxheSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiB2b2lkIFRlbGVwaG9uZU51bWJlck92
ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDIyNjk4
Zi4uYjZhYjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCiAj
aW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiUGFnZUJhbm5lci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm94eS5oIgogI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKQEAgLTMwNyw2ICszMDYsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVp
bnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVy
cykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxs
b3dDcmVhdGlvbikKICNlbmRpZgorICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIodGhpcykK
IHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgbm9uLWlk
ZWFsIGxvY2F0aW9uIGZvciB0aGlzIFNldHRpbmcgYW5kCkBAIC0zNDAsNiArMzQwLDcgQEAgV2Vi
UGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiAKICAgICBtX2RyYXdpbmdBcmVhID0gRHJhd2luZ0FyZWE6OmNy
ZWF0ZSh0aGlzLCBwYXJhbWV0ZXJzKTsKICAgICBtX2RyYXdpbmdBcmVhLT5zZXRQYWludGluZ0Vu
YWJsZWQoZmFsc2UpOworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmluaXRpYWxpemUoKTsK
IAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgbV91c2VBc3luY1Njcm9sbGluZyA9
IHBhcmFtZXRlcnMuc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp0
aHJlYWRlZFNjcm9sbGluZ0VuYWJsZWRLZXkoKSk7CkBAIC0xMTIxLDYgKzExMjIsOCBAQCB2b2lk
IFdlYlBhZ2U6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpCiAgICAg
aWYgKHZpZXctPnVzZUZpeGVkTGF5b3V0KCkpCiAgICAgICAgIHNlbmRWaWV3cG9ydEF0dHJpYnV0
ZXNDaGFuZ2VkKCk7CiAjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZENo
YW5nZVZpZXdTaXplKCk7CiB9CiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKQEAgLTEy
MDYsMTUgKzEyMDksNiBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIG1fbWFpbkZyYW1lLT5j
b3JlRnJhbWUoKS0+dmlldygpLT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCByZWN0KTsKIH0KIAot
dm9pZCBXZWJQYWdlOjpkcmF3UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBBU1NFUlQocGFnZU92ZXJsYXkpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAo
cmVjdCk7Ci0gICAgcGFnZU92ZXJsYXktPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgcmVjdCk7
Ci19Ci0KIGRvdWJsZSBXZWJQYWdlOjp0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0CiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwpAQCAtMTMzNyw2ICsxMzMxLDgg
QEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikK
IAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAgIG1fZHJh
d2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZh
Y3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBA
IC0xNDUyLDM3ICsxNDQ4LDE0IEBAIHZvaWQgV2ViUGFnZTo6cG9zdEluamVjdGVkQnVuZGxlTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBJUEM6Ok1lc3NhZ2VECiAgICAgaW5qZWN0
ZWRCdW5kbGUtPmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKHRoaXMsIG1lc3NhZ2VOYW1lLCBtZXNz
YWdlQm9keS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zdGFsbFBhZ2VPdmVybGF5KFBh
c3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBib29sIHNob3VsZEZhZGVJbikKK3Zv
aWQgV2ViUGFnZTo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBh
Z2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCiB7Ci0gICAgUmVmUHRy
PFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0gICAgCi0gICAgaWYgKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkuZ2V0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7Ci0gICAgb3ZlcmxheS0+c2V0UGFnZSh0
aGlzKTsKLQotICAgIGlmIChzaG91bGRGYWRlSW4pCi0gICAgICAgIG92ZXJsYXktPnN0YXJ0RmFk
ZUluQW5pbWF0aW9uKCk7Ci0KLSAgICBtX2RyYXdpbmdBcmVhLT5kaWRJbnN0YWxsUGFnZU92ZXJs
YXkob3ZlcmxheS5nZXQoKSk7CisgICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5zdGFsbFBh
Z2VPdmVybGF5KHBhZ2VPdmVybGF5LCBmYWRlTW9kZSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6dW5p
bnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBib29sIHNob3VsZEZh
ZGVPdXQpCit2b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBw
YWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQogewotICAgIHNpemVf
dCBleGlzdGluZ092ZXJsYXlJbmRleCA9IG1fcGFnZU92ZXJsYXlzLmZpbmQocGFnZU92ZXJsYXkp
OwotICAgIGlmIChleGlzdGluZ092ZXJsYXlJbmRleCA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHNob3VsZEZhZGVPdXQpIHsKLSAgICAgICAgcGFnZU92ZXJsYXktPnN0
YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGFn
ZU92ZXJsYXktPnNldFBhZ2UoMCk7Ci0gICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKGV4aXN0aW5n
T3ZlcmxheUluZGV4KTsKLQotICAgIG1fZHJhd2luZ0FyZWEtPmRpZFVuaW5zdGFsbFBhZ2VPdmVy
bGF5KHBhZ2VPdmVybGF5KTsKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3RhbGxQ
YWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwogfQogCiAjaWYgIVBMQVRGT1JNKElP
UykKQEAgLTE3NjEsMTQgKzE3MzQsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmIChtX3BhZ2VPdmVybGF5cy5zaXpl
KCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSBwYWdlIG92ZXJsYXkgaGFuZGxlIHRoZSBldmVudC4K
LSAgICAgICAgUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU92
ZXJsYXlzLnJlbmQoKTsKLSAgICAgICAgZm9yIChQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRl
cmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgaWYgKChoYW5kbGVkID0gKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBib29sIGhhbmRsZWQgPSBtX3BhZ2VP
dmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwogCiAjaWYgIVBM
QVRGT1JNKElPUykKICAgICBpZiAoIWhhbmRsZWQgJiYgbV9oZWFkZXJCYW5uZXIpCkBAIC0xNzk0
LDE0ICsxNzYwLDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQpCiAKIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudFN5bmNGb3JUZXN0aW5n
KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGJvb2wmIGhhbmRsZWQpCiB7Ci0gICAg
aGFuZGxlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fcGFnZU92ZXJsYXlzLnNpemUoKSkgewotICAg
ICAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5kID0gbV9wYWdlT3Zlcmxh
eXMucmVuZCgpOwotICAgICAgICBmb3IgKFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRv
ciBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBpZiAoKGhhbmRsZWQgPSAoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwogI2lmICFQTEFURk9STShJT1Mp
CiAgICAgaWYgKCFoYW5kbGVkICYmIG1faGVhZGVyQmFubmVyKQogICAgICAgICBoYW5kbGVkID0g
bV9oZWFkZXJCYW5uZXItPm1vdXNlRXZlbnQobW91c2VFdmVudCk7CkBAIC0xODkyLDMyICsxODUx
LDYgQEAgdm9pZCBXZWJQYWdlOjprZXlFdmVudFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYktleWJv
YXJkRXZlbnQmIGtleWJvYXJkRXZlbnQsIGJvb2wKICAgICAgICAgaGFuZGxlZCA9IHBlcmZvcm1E
ZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChrZXlib2FyZEV2ZW50KTsKIH0KIAotV0tUeXBlUmVm
IFdlYlBhZ2U6OnBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0
cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3Bh
Z2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFBhZ2VPdmVybGF5TGlz
dDo6cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7Ci0gICAgZm9y
IChQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5cy5y
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdLVHlwZVJlZiB2YWx1ZSA9ICgq
aXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwgcGFyYW1ldGVy
KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0K
LSAgICByZXR1cm4gMDsKLX0KLQotV0tBcnJheVJlZiBXZWJQYWdlOjpwYWdlT3ZlcmxheUNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQotewot
ICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBQ
YWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVu
ZCgpOwotICAgIGZvciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbV9w
YWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXS0FycmF5
UmVmIHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFyYW1l
dGVyaXplZE5hbWVzKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBXZWJQYWdlOjp2YWxpZGF0ZUNv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsK
ICAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNlOwpAQCAtMjcwNSw2ICsyNjM4LDggQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9y
ZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51cGRh
dGVQcmVmZXJlbmNlcyhzdG9yZSk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRD
aGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00NTY3LDQg
KzQ1MDIsOSBAQCBUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlciYgV2ViUGFnZTo6dGVs
ZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIoKQogfQogI2VuZGlmCiAKK3ZvaWQgV2ViUGFn
ZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55RnJhbWUoKQoreworICAgIG1fcGFnZU92ZXJs
YXlDb250cm9sbGVyLmRpZFNjcm9sbEFueUZyYW1lKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
MjAwMDM0OS4uNTJmNTkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCkBAIC00MSwxMCArNDEsMTEgQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBh
Z2VSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiVGFwSGlnaGxpZ2h0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBsdWdp
bi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJUYXBIaWdobGlnaHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
V2ViVW5kb1N0ZXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51SXRlbS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaD4KQEAgLTE4NCw4ICsxODUsNiBA
QCBjbGFzcyBXZWJUb3VjaEV2ZW50OwogY2xhc3MgVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRy
b2xsZXI7CiAjZW5kaWYKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gUGFn
ZU92ZXJsYXlMaXN0OwotCiBjbGFzcyBXZWJQYWdlIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlUGFnZT4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViUGFnZT4gY3JlYXRlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyYpOwpAQCAtMjEwLDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCk7CiAgICAgRHJh
d2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQXJlYS5nZXQo
KTsgfQorICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9s
bGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KKyAgICBQYWdl
T3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fcGFn
ZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25z
dDsKICNlbmRpZgpAQCAtMjQxLDcgKzI0Miw2IEBAIHB1YmxpYzoKICAgICAvLyAtLSBDYWxsZWQg
YnkgdGhlIERyYXdpbmdBcmVhLgogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBnZW5lcmljaXplIHRo
ZXNlIGludG8gYSBEcmF3aW5nQXJlYSBjbGllbnQgaW50ZXJmYWNlLiBXb3VsZCB0aGF0IGJlIGJl
bmVmaWNpYWw/CiAgICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3UGFnZU92ZXJsYXkoUGFnZU92
ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAgICAgdm9pZCBsYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgLy8gLS0gQ2FsbGVkIGZyb20g
V2ViQ29yZSBjbGllbnRzLgpAQCAtNDEwLDEwICs0MTAsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0OwogICAgIGJvb2wgd2luZG93QW5kV2ViUGFnZUFyZUZv
Y3VzZWQoKSBjb25zdDsKLSAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBh
Z2VPdmVybGF5PiwgYm9vbCBzaG91bGRGYWRlSW4gPSBmYWxzZSk7Ci0gICAgdm9pZCB1bmluc3Rh
bGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIGJvb2wgc2hvdWxkRmFkZU91dCA9IGZhbHNlKTsK
LSAgICBib29sIGhhc1BhZ2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXMu
c2l6ZSgpOyB9Ci0gICAgUGFnZU92ZXJsYXlMaXN0JiBwYWdlT3ZlcmxheXMoKSB7IHJldHVybiBt
X3BhZ2VPdmVybGF5czsgfQorICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8
UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6RmFkZU1v
ZGU6OkRvTm90RmFkZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RG
YWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRIZWFkZXJQYWdlQmFubmVy
KFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtNzgxLDYgKzc3OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVyLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogI2VuZGlmCiAKKyAgICB2b2lkIGRpZENoYW5nZVNj
cm9sbE9mZnNldEZvckFueUZyYW1lKCk7CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRf
dCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApAQCAtMTA4Niw3
ICsxMDg2LDYgQEAgcHJpdmF0ZToKICAgICBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCBtX2xvZ0RpYWdub3N0aWNNZXNzYWdlQ2xpZW50OwogCiAgICAgRmluZENvbnRy
b2xsZXIgbV9maW5kQ29udHJvbGxlcjsKLSAgICBQYWdlT3ZlcmxheUxpc3QgbV9wYWdlT3Zlcmxh
eXM7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIFJlZlB0cjxXZWJJbnNwZWN0b3I+IG1f
aW5zcGVjdG9yOwpAQCAtMTE4Nyw2ICsxMTg2LDggQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgUmVmUHRyPFRlbGVwaG9uZU51bWJlck92ZXJs
YXlDb250cm9sbGVyPiBtX3RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOwogI2VuZGlm
CisKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaAppbmRleCA0ODQ2NjZjLi5mMTg5NWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogCkBAIC00MCw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBSZW1vdGVMYXllclRyZWVDb250ZXh0OwogCi1jbGFzcyBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQgeworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgOiBwdWJsaWMg
RHJhd2luZ0FyZWEgewogcHVibGljOgogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdl
YlBhZ2UqLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB+
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoKTsKQEAgLTYwLDExICs1OSw2IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5j
ZXNTdG9yZSYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3Rh
bGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5
KFBhZ2VPdmVybGF5KiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclBh
Z2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQXN5bmNTY3JvbGxpbmcoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKQEAgLTgz
LDEyICs3Nyw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCkgb3Zl
cnJpZGU7CiAKLSAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGUgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CiAjZW5k
aWYKQEAgLTEwMSw5ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5n
KiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVMYXllclRyZWVDb250ZXh0PiBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQ7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICBIYXNoTWFw
PFBhZ2VPdmVybGF5Kiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4+IG1f
cGFnZU92ZXJsYXlMYXllcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCAyYjI3NWY0Li4zMjBk
YzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAgLTQ4LDYgKzQ4
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSogd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYpCiAgICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGVSZW1v
dGVMYXllclRyZWUsIHdlYlBhZ2UpCiAgICAgLCBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQoc3Rk
OjptYWtlX3VuaXF1ZTxSZW1vdGVMYXllclRyZWVDb250ZXh0Pih3ZWJQYWdlKSkKKyAgICAsIG1f
cm9vdExheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCBu
dWxscHRyKSkKICAgICAsIG1fZXhwb3NlZFJlY3QoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkK
ICAgICAsIG1fc2Nyb2xsZWRFeHBvc2VkUmVjdChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQog
ICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
OjpsYXllckZsdXNoVGltZXJGaXJlZCkKQEAgLTg1LDcgKzg2LDEyIEBAIEdyYXBoaWNzTGF5ZXJG
YWN0b3J5KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXllckZhY3Rvcnko
KQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7Ci0gICAgbV9yb290TGF5ZXIgPSByb290
TGF5ZXIgPyB0b0dyYXBoaWNzTGF5ZXJDQVJlbW90ZShyb290TGF5ZXIpLT5wbGF0Zm9ybUNBTGF5
ZXIoKSA6IG51bGxwdHI7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIgKj4gY2hpbGRyZW47Cisg
ICAgaWYgKHJvb3RMYXllcikgeworICAgICAgICBjaGlsZHJlbi5hcHBlbmQocm9vdExheWVyKTsK
KyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkucm9vdExheWVyKCkpOworICAgIH0KKyAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOwogfQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVHZW9t
ZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQb3NpdGlv
bikKQEAgLTkzLDEyICs5OSw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVw
ZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJCiAgICAgbV92aWV3
U2l6ZSA9IHZpZXdTaXplOwogICAgIG1fd2ViUGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7CiAKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fcGFnZU92ZXJsYXlMYXllcnMp
IHsKLSAgICAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBvdmVybGF5QW5kTGF5ZXIudmFsdWUu
Z2V0KCk7Ci0gICAgICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBs
YXllci0+c2V0U2l6ZSh2aWV3U2l6ZSk7Ci0gICAgfQotCiAgICAgc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKTsKIAogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWFQcm94eTo6RGlkVXBkYXRlR2VvbWV0cnkoKSk7CkBAIC0xMTcsOTUgKzExNyw2IEBAIHZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmUmKQogICAgIC8vIGluIG9yZGVyIHRvIGJlIHNjcm9sbGVkIGJ5IHRoZSBT
Y3JvbGxpbmdDb29yZGluYXRvci4KICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7CiAgICAgc2V0dGluZ3Muc2V0Rml4ZWRQ
b3NpdGlvbkNyZWF0ZXNTdGFja2luZ0NvbnRleHQodHJ1ZSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fcGFnZU92ZXJsYXlMYXllcnMpIHsKLSAgICAgICAgb3Zl
cmxheUFuZExheWVyLnZhbHVlLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxl
cmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICAgICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5z
ZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICAgICAg
b3ZlcmxheUFuZExheWVyLnZhbHVlLT5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Muc2hv
d1JlcGFpbnRDb3VudGVyKCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllckNBUmVtb3RlPiBsYXllcihzdGF0
aWNfY2FzdDxHcmFwaGljc0xheWVyQ0FSZW1vdGUqPihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcykucmVsZWFzZSgpKSk7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGxheWVyLT5zZXROYW1lKCJwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAg
ICBsYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0
dGluZ3MoKS5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgIGxheWVyLT5zZXRTaG93
RGVidWdCb3JkZXIobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNob3dEZWJ1Z0Jv
cmRlcnMoKSk7Ci0gICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCkuc2hvd1JlcGFpbnRDb3VudGVyKCkpOwotCi0gICAgbV9yb290
TGF5ZXItPmFwcGVuZFN1YmxheWVyKGxheWVyLT5wbGF0Zm9ybUNBTGF5ZXIoKSk7Ci0gICAgbV9y
ZW1vdGVMYXllclRyZWVDb250ZXh0LT5vdXRPZlRyZWVMYXllcldhc0FkZGVkKGxheWVyLmdldCgp
KTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllcnMuYWRkKHBhZ2VPdmVybGF5LCBzdGQ6Om1vdmUo
bGF5ZXIpKTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheShQYWdl
T3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5
ZXJDQVJlbW90ZT4gbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLnRha2UocGFnZU92ZXJsYXkp
OwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPm91
dE9mVHJlZUxheWVyV2lsbEJlUmVtb3ZlZChsYXllci5nZXQoKSk7Ci0gICAgbGF5ZXItPnBsYXRm
b3JtQ0FMYXllcigpLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotCi0gICAgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZSogbGF5ZXIg
PSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewot
ICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgICAgICBsYXllci0+c2V0
U2l6ZShtX3ZpZXdTaXplKTsKLSAgICB9Ci0KLSAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdl
T3ZlcmxheSogcGFnZU92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NMYXll
ckNBUmVtb3RlKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsK
LSAgICAKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbGF5ZXIt
PnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Y2xlYXJQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
LSAgICBsYXllci0+c2V0U2l6ZShJbnRTaXplKCkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExh
eWVyIDogbV9wYWdlT3ZlcmxheUxheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVy
LnZhbHVlLmdldCgpID09IGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+
ZHJhd1BhZ2VPdmVybGF5KG92ZXJsYXlBbmRMYXllci5rZXksIGdyYXBoaWNzQ29udGV4dCwgZW5j
bG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWZsb2F0IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTI4MywxMyArMTk0
LDkgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRFeHBv
c2VkUmVjdCgpCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3QobV9zY3Jv
bGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX3BhZ2VP
dmVybGF5TGF5ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVk
QmFja2luZyA9IGxheWVyLT50aWxlZEJhY2tpbmcoKSkKLSAgICAgICAgICAgIHRpbGVkQmFja2lu
Zy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICB9Ci0gICAgCiAg
ICAgZnJhbWVWaWV3LT5hZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgbV93ZWJQ
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQog
CiBUaWxlZEJhY2tpbmcqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVUaWxl
ZEJhY2tpbmcoKSBjb25zdApAQCAtMzM4LDEzICsyNDUsMTYgQEAgdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogICAgIH0KIAogICAgIG1fd2ViUGFnZS0+bGF5
b3V0SWZOZWVkZWQoKTsKLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKLSAgICBt
X3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmZsdXNoT3V0T2ZUcmVlTGF5ZXJzKCk7CisgICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3U2l6ZSk7CisgICAgdmlzaWJs
ZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7CisgICAgbV93ZWJQYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5mbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKHZpc2libGVSZWN0
KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9yb290TGF5ZXItPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAogICAgIC8vIEZJWE1FOiBt
aW5pemUgdGhlc2UgdHJhbnNhY3Rpb25zIGlmIG5vdGhpbmcgY2hhbmdlZC4KICAgICBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbiBsYXllclRyYW5zYWN0aW9uOwotICAgIG1fcmVtb3RlTGF5ZXJU
cmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXllclRyYW5zYWN0aW9uLCAqbV9yb290TGF5
ZXIpOworICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXll
clRyYW5zYWN0aW9uLCAqdG9HcmFwaGljc0xheWVyQ0FSZW1vdGUobV9yb290TGF5ZXIuZ2V0KCkp
LT5wbGF0Zm9ybUNBTGF5ZXIoKSk7CiAgICAgbV93ZWJQYWdlLT53aWxsQ29tbWl0TGF5ZXJUcmVl
KGxheWVyVHJhbnNhY3Rpb24pOwogCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFu
c2FjdGlvbiBzY3JvbGxpbmdUcmFuc2FjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWEuaAppbmRleCAyMTlhNThjLi43YjFlNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRHJh
d2luZ0FyZWEuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Rp
bWVyLmg+CkBAIC01MSw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXll
ckhvc3RpbmdDb250ZXh0OwogCi1jbGFzcyBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSA6
IHB1YmxpYyBEcmF3aW5nQXJlYSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCwgV2ViQ29y
ZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCB7CitjbGFzcyBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSwgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVk
dWxlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEo
V2ViUGFnZSosIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKICAgICB2aXJ0dWFs
IH5UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSgpOwpAQCAtNzEsMTEgKzcwLDYgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3Rh
bGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRVbmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KFBhZ2VPdmVybGF5KiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKIApAQCAtODQsMTkgKzc4LDEwIEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRG
b3JBbnlGcmFtZSgpIG92ZXJyaWRlOwotCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQWZ0ZXJF
bnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3NpdGlvbihzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZp
ZXcoY29uc3QgV2ViQ29yZTo6RnJhbWVWaWV3Kikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5n
ZXNGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGU7
Ci0KICAgICAvLyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVh
bCBib29sIGZsdXNoTGF5ZXJzKCkgb3ZlcnJpZGU7CiAKQEAgLTExOSwxNSArMTA0LDExIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKik7CiAK
LSAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoUGFnZU92ZXJsYXkqKTsKLSAgICB2b2lk
IGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVybGF5Kik7CiAgICAgV2ViQ29yZTo6VGls
ZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0
ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVyKTsKIAogICAgIHZvaWQgdXBkYXRlSW50cmlu
c2ljQ29udGVudFNpemVUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhPiopOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOwot
ICAgIAotICAgIHZvaWQgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpOwogCiAgICAgYm9vbCBt
X2xheWVyVHJlZVN0YXRlSXNGcm96ZW47CiAgICAgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxl
ciBtX2xheWVyRmx1c2hTY2hlZHVsZXI7CkBAIC0xNDAsMTAgKzEyMSw2IEBAIHByaXZhdGU6CiAK
ICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9wZW5kaW5nUm9vdExheWVyOwogCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+PiBQYWdlT3ZlcmxheUxheWVyTWFwOwotICAgIFBhZ2VPdmVybGF5TGF5ZXJNYXAgbV9w
YWdlT3ZlcmxheUxheWVyczsKLSAgICBtdXRhYmxlIEhhc2hNYXA8Y29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIFJldGFpblB0cjxDQUxheWVyPj4gbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5
ZXJzOwotCiAgICAgYm9vbCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQ7CiAKICAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgbV9leHBvc2VkUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhLm1tCmluZGV4IDhiMjUwZWUuLmMzNzZlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtMTEwLDE3ICsxMTAsNiBAQCB2b2lkIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgSW50UwogICAgIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKIH0KIAotdm9pZCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6aW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygp
Ci17Ci0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92
ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotfQot
Ci12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXRGb3JBbnlGcmFtZSgpCi17Ci0gICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpOwotfQot
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIENBTGF5ZXIgKnJvb3RM
YXllciA9IGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBu
aWw7CkBAIC0xODUsNzEgKzE3NCw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKICAgICBtX2xheWVyRmx1c2hTY2hl
ZHVsZXIuc2NoZWR1bGUoKTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YTo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNo
cm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXModHJ1ZSk7Ci0jZW5kaWYKLQotICAgIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIocGFnZU92ZXJsYXkpOwotfQotCi12b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSog
cGFnZU92ZXJsYXkpCi17Ci0gICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIocGFnZU92ZXJsYXkp
OwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVycy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkp
IHsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KGZhbHNlKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVy
bGF5LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bV9wYWdlT3ZlcmxheUxheWVycy5nZXQocGFnZU92ZXJsYXkpOwotCi0gICAgaWYgKCFsYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKLSAg
ICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNldFNp
emUoZXhwYW5kZWRJbnRTaXplKEZsb2F0U2l6ZShtX2hvc3RpbmdMYXllci5nZXQoKS5mcmFtZS5z
aXplKSkpOwotICAgIH0KLQotICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7
Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5
KiBwYWdlT3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwot
ICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VP
dmVybGF5KQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVy
cy5nZXQocGFnZU92ZXJsYXkpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbGF5ZXItPnNldFNpemUo
SW50U2l6ZSgpKTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCiB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25z
dCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKIHsKICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCk7CkBAIC0yNjEsMTIgKzE4NSw2IEBAIHZvaWQg
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdl
YlByZWZlcmVuY2VzU3RvcmUmCiAgICAgfQogI2VuZGlmCiAKLSAgICBmb3IgKFBhZ2VPdmVybGF5
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQg
PSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aXQtPnZhbHVlLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCgpKTsKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRTaG93RGVidWdCb3JkZXIoc2V0
dGluZ3Muc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICAgICAgaXQtPnZhbHVlLT5zZXRTaG93UmVw
YWludENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOwotICAgIH0KLQogICAg
IC8vIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIG5lZWQgdG8gYmUgY29tcG9zaXRlZCBhbmQgY3Jl
YXRlIHN0YWNraW5nIGNvbnRleHRzCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUgc2Nyb2xsZWQgYnkg
dGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLiBXZSBhbHNvIHdhbnQgdG8ga2VlcAogICAgIC8vIFNl
dHRpbmdzOnNldEZpeGVkUG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkgZW5hYmxlZCBm
b3IgaU9TLiBTZWUKQEAgLTM0NCwyOSArMjYyLDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nVXBkYXRlZFNjcm9sbFBvc2l0aW9uKHMK
ICNlbmRpZgogfQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpCi17Ci19Ci0KLXZv
aWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29u
c3QgR3JhcGhpY3NMYXllciopCi17Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGZvciAoYXV0byBpdCA9IG1f
cGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgPT0gZ3Jh
cGhpY3NMYXllcikgewotICAgICAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoaXQt
PmtleSwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotZmxvYXQgVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotfQotCiBib29s
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiB7CiAgICAgQVNT
RVJUKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pOwpAQCAtMzgzLDExICsyNzgsNyBAQCBib29s
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAKICAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QgPSBbbV9ob3N0aW5nTGF5ZXIgZnJhbWVdOwogICAgIHZpc2libGVS
ZWN0LmludGVyc2VjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgZm9yIChQYWdlT3Zl
cmxheUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwg
ZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICBsYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLSAgICB9CisgICAgbV93ZWJQ
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5mbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKHZpc2li
bGVSZWN0KTsKIAogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLnZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CiAKQEAgLTQ0OSwxMyArMzQwLDkgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpCiAjZW5kaWYKIAogICAgIGZyYW1l
Vmlldy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgbGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGxheWVyLT50aWxlZEJhY2tpbmco
KSkKLSAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4
cG9zZWRSZWN0KTsKLSAgICB9Ci0KICAgICBmcmFtZVZpZXctPmFkanVzdFRpbGVkQmFja2luZ0Nv
dmVyYWdlKCk7CisKKyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENo
YW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJbnRTaXpl
JiBsYXllclBvc2l0aW9uKQpAQCAtNDgwLDE3ICszNjcsOSBAQCB2b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwg
Y29ucwogICAgICAgICBzaXplID0gY29udGVudFNpemU7CiAgICAgfQogCi0gICAgZm9yIChQYWdl
T3ZlcmxheUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4o
KSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICBp
ZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgbGF5ZXItPnNldFNpemUodmll
d1NpemUpOwotICAgIH0KLQogICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKQogICAg
ICAgICBmbHVzaExheWVycygpOwogCi0gICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5cygpOwot
CiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CiAKQEAgLTUxMiw5ICszOTEsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwg
Y29ucwogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgbV93ZWJQYWdlLT5zZXREZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBmb3IgKFBhZ2VPdmVybGF5
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQg
PSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT52YWx1ZS0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2Nl
bmRhbnRzKCk7CiB9CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldExh
eWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKQEAgLTU2OSw3ICs0NDUsNyBAQCB2b2lk
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihD
QUxheWVyICpsYXllcikKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNh
Y3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAotICAgIFttX2hvc3RpbmdMYXllciBzZXRT
dWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciBdIDogQFsgXV07CisgICAgW21faG9zdGluZ0xheWVy
IHNldFN1YmxheWVyczpsYXllciA/IEBbIGxheWVyLCBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIF1dOwogCiAgICAg
Ym9vbCBoYWRSb290TGF5ZXIgPSAhIW1fcm9vdExheWVyOwogICAgIG1fcm9vdExheWVyID0gbGF5
ZXI7CkBAIC01NzgsNzMgKzQ1NCwxMSBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICpsYXllcikKICAgICBpZiAoaGFk
Um9vdExheWVyICE9ICEhbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0
Um9vdExheWVyKGxheWVyID8gbV9ob3N0aW5nTGF5ZXIuZ2V0KCkgOiAwKTsKIAotICAgIGZvciAo
UGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgW21faG9zdGluZ0xheWVyIGFkZFN1YmxheWVyOml0LT52YWx1ZS0+cGxhdGZvcm1M
YXllcigpXTsKLQogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKG1fd2ViUGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKSk7CiAKICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOwogfQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGxheWVyLT5zZXROYW1lKCJwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAg
ICBsYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0
dGluZ3MoKS5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgIGxheWVyLT5zZXRTaG93
RGVidWdCb3JkZXIobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNob3dEZWJ1Z0Jv
cmRlcnMoKSk7Ci0gICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCkuc2hvd1JlcGFpbnRDb3VudGVyKCkpOwotCi0gICAgbV9wYWdl
T3ZlcmxheVBsYXRmb3JtTGF5ZXJzLnNldChsYXllci5nZXQoKSwgbGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSk7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24g
c2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIFttX2hvc3RpbmdMYXllciBhZGRTdWJsYXll
cjpsYXllci0+cGxhdGZvcm1MYXllcigpXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Ci0KLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXJzLmFkZChwYWdlT3ZlcmxheSwgc3RkOjptb3ZlKGxh
eWVyKSk7Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRlc3Ryb3lQ
YWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLnRha2Uo
cGFnZU92ZXJsYXkpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAg
IFtsYXllci0+cGxhdGZvcm1MYXllcigpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLQotICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICBtX3BhZ2VPdmVybGF5UGxhdGZvcm1MYXllcnMu
cmVtb3ZlKGxheWVyLmdldCgpKTsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVy
KSBjb25zdAotewotICAgIFJldGFpblB0cjxDQUxheWVyPiBvbGRQbGF0Zm9ybUxheWVyID0gbV9w
YWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzLmdldChsYXllcik7Ci0KLSAgICBpZiAoIW9sZFBsYXRm
b3JtTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChvbGRQbGF0Zm9ybUxheWVyLmdl
dCgpID09IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOwotCi0gICAgW21faG9zdGluZ0xheWVyIGluc2VydFN1YmxheWVyOmxheWVyLT5wbGF0
Zm9ybUxheWVyKCkgYWJvdmU6b2xkUGxhdGZvcm1MYXllci5nZXQoKV07Ci0gICAgW29sZFBsYXRm
b3JtTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLQotICAgIG1fcGFnZU92ZXJsYXlQbGF0Zm9ybUxheWVycy5zZXQobGF5ZXIsIGxheWVy
LT5wbGF0Zm9ybUxheWVyKCkpOwotfQotCiBUaWxlZEJhY2tpbmcqIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjptYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdAogewogICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dL
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KaW5kZXgg
MjZiMDE4ZS4uMDZmMDgyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdE1hYy5tbQpAQCAtNzUsNyArNzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiAt
IChOU0FycmF5ICopYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwogewot
ICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdl
T3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKKyAgICBXS1Jl
dGFpblB0cjxXS0FycmF5UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkpOwogICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMTcyLDcgKzE3Miw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgICAgfQogICAgIAogICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBhdHRyaWJ1dGVSZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKChDRlN0cmluZ1JlZilhdHRyaWJ1dGUpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlUmVmLmdldCgpLCBwYWdlT3ZlcmxheVBhcmFtZXRlci5n
ZXQoKSkpOworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3Bh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWUoYXR0cmlidXRlUmVmLmdldCgpLCBwYWdlT3ZlcmxheVBhcmFtZXRlci5nZXQoKSkpOwogICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228881</attachid>
            <date>2014-04-08 13:51:54 -0700</date>
            <delta_ts>2014-04-08 13:56:20 -0700</delta_ts>
            <desc>found more code to delete</desc>
            <filename>pageoverlay5.diff</filename>
            <type>text/plain</type>
            <size>68094</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOTk2YzE1Li44NDQzZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTQtMDQtMDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVW5pZnkgYW5kIGZhY3RvciBvdXQgcGFnZSBvdmVybGF5IGltcGxlbWVudGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMzUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcg
YWxsIG9mIHRoZSBQYWdlT3ZlcmxheSBjb2RlIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGNyb3NzLXBs
YXRmb3JtCisgICAgICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciwgaW5jbHVkaW5nIGhpdC10ZXN0
aW5nIGNvZGUgZnJvbSBXZWJQYWdlIGFuZCBwYWludGluZworICAgICAgICBhbmQgbGF5ZXItdHJl
ZSBtYW5pcHVsYXRpb24gY29kZSBmcm9tIHRoZSBEcmF3aW5nQXJlYS4KKworICAgICAgICBUaGlz
IGFsc28gbWFrZXMgYWxsIFBhZ2VPdmVybGF5cyBhIHNpbmdsZSBHcmFwaGljc0xheWVyIHRyZWUg
d2hpY2ggY2FuIGJlCisgICAgICAgIGZsdXNoZWQgYW5kIHBsdWdnZWQgaW50byBhbnkgRHJhd2lu
Z0FyZWEgaW4gYSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgorICAgICAgICBXZSBubyBsb25nZXIg
aGF2ZSB0byB3YXRjaCBmb3IgaW5kaXZpZHVhbCBsYXllcnMgZmxpcHBpbmcgaW50by9vdXQgb2Yg
dGlsaW5nLAorICAgICAgICBiZWNhdXNlIHRoZXkncmUgaGlkZGVuIHVuZGVybmVhdGggdGhlIHJv
b3QgUGFnZU92ZXJsYXkgR3JhcGhpY3NMYXllci4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBiZWNh
dXNlIEdyYXBoaWNzTGF5ZXIgaXMgY3Jvc3MtcGxhdGZvcm0sIHdlIGNhbiBzaGFyZQorICAgICAg
ICBhbGwgb2YgdGhlIGZhaXJseSB0cml2aWFsIGJ1dCBvZnQtcmVwZWF0ZWQgb3ZlcmxheSBtYW5h
Z2VtZW50IGNvZGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
cm9vdExheWVyKToKKyAgICAgICAgQWRkIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tOgorICAgICAgICBSZW1vdmUgUGFnZU92ZXJsYXktcmVsYXRlZCBjb2Rl
IGZyb20gdGhlIERyYXdpbmdBcmVhcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMu
bW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6
XSk6CisgICAgICAgIFVzZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgRHJh
d2luZ0FyZWEvV2ViUGFnZSB0byBtYW5pcHVsYXRlIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZU92ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgUmVtb3ZlIFBhZ2VPdmVybGF5LXJlbGF0ZWQgY29kZSBmcm9t
IFdlYlBhZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZUNvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ6Om91dE9mVHJlZUxheWVyV2FzQWRkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllclRyZWVDb250ZXh0OjpvdXRPZlRyZWVMYXllcldpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjpmbHVzaE91dE9m
VHJlZUxheWVycyk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSB0aGUgbm8tbG9uZ2VyLW5lY2Vz
c2FyeSBvdXQtb2YtdHJlZSBsYXllciBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdl
SW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXS0J1bmRsZVBhZ2VV
bmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1
cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJv
bGxlcjo6aGlkZUZpbmRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9u
ZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVsZXBob25l
TnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpkZXN0cm95T3Zlcmxh
eSk6CisgICAgICAgIE1ha2UgdXNlIG9mIHRoZSBGYWRlTW9kZSBlbnVtLgorCiAyMDE0LTA0LTA3
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1Mg
V2ViS2l0Ml0gV0tQREZWaWV3IGZhZGVzIGluIHRpbGVzLCBQREZzIGxvYWQgdmVyeSBmbGFzaGls
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGZjNzcwN2QuLmU1YWMwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUwNyw2ICs1MDcsOCBAQAogCQkyOUQ1NURG
MjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAw
MzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUx
ODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NC
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovOyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAz
QkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKKwkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3
NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8q
IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29u
dHJvbGxlci5oICovOyB9OwogCQkyRDFCNUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2
OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZD
NjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNF
NDE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFF
IC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSAqLzsgfTsKQEAgLTIzMDgsNiArMjMxMCw4IEBACiAJ
CTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUMxODU3RUEwNTAwM0JB
M0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZXdHZXN0dXJl
Q29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQxNDBFQUQx
OEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
Z2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFC
NUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTUzMzYsNiArNTM0MCw4IEBACiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkx
IC8qIFBhZ2VCYW5uZXIuaCAqLywKIAkJCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFn
ZU92ZXJsYXkuY3BwICovLAogCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zl
cmxheS5oICovLAorCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuY3BwICovLAorCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQk1MTlFRjU4RjE4RUY3NzIxMDAwM0I3RjQgLyogVGVs
ZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTUxOUVGNTkwMThFRjc3
MjEwMDAzQjdGNCAvKiBUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlci5oICovLAogCQkJ
CTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmNwcCAqLywKQEAgLTY3MzUsNiArNjc0MSw3IEBACiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQx
OTEwIC8qIEZvbnRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUJDM0RGQzE4OTlGNTFDMDA0
RjA2MjYgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVG
RTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTJEMTQwRUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OUE4NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tB
Y3RpdmF0ZWRFbGVtZW50SW5mb0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQy
RjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtODQ3Nyw2ICs4NDg0LDcgQEAKIAkJCQkxQUZBM0FDODE4RTYx
QzYxMDAzQ0NCQUUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDMDMzN0RBRTEyN0EyNEZFMDA4RkY0RjQgLyogV2ViRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMwMzJEQkExMEY0MzgwRjAwNThDMTVBIC8qIFdlYkV2ZW50Q29udmVyc2lvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDE0MEVBRjE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQjVFMTEyRjYyOTgw
MDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTNERDFG
RDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0U0Njk1MzEyMTRFNkNCMDAwQjk4RUIgLyogV2ViRm9ybUNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCA5ZDA3YzNmLi40YzhkZTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC0zNjQsMTIgKzM2NCwxMiBAQCB2
b2lkIFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5KFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmLCBXS0J1bmRsZVBhZ2VPdmVybAogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3Zl
cmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxs
UGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgdHJ1ZSk7CisgICAgdG9JbXBsKHBh
Z2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQ
YWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51
bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCB0cnVlKTsKKyAgICB0
b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJl
ZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdl
U2V0VG9wT3ZlcmhhbmdJbWFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tJbWFnZVJlZiBp
bWFnZVJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggOTdlODc5OC4u
MjY3ZjY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTE1NzYsNyAr
MTU3Niw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZVNjcm9sbE9mZnNl
dCgpCiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICB3ZWJQYWdlLT5k
cmF3aW5nQXJlYSgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpOworICAgIHdl
YlBhZ2UtPmRpZENoYW5nZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCk7CiAKICAgICBpZiAoIW1f
ZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50LmNwcAppbmRleCBiNDc5NTNlLi4wZGNiMWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdo
bGlnaHQoKQogICAgIGlmICghbV9oaWdobGlnaHRPdmVybGF5KSB7CiAgICAgICAgIFJlZlB0cjxQ
YWdlT3ZlcmxheT4gaGlnaGxpZ2h0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7
CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkuZ2V0KCk7Ci0g
ICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFz
ZSgpLCB0cnVlKTsKKyAgICAgICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0
T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAg
IG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOwpAQCAtOTQs
NyArOTQsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKIHZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBpZiAobV9oaWdobGlnaHRP
dmVybGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0
T3ZlcmxheSwgdHJ1ZSk7CisgICAgICAgIG1fcGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9o
aWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiAjaWYg
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaAppbmRleCBlNDE3YzI2Li4xMjQ2MDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtNTAsNyArNTAsNiBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IENvbG9yU3BhY2VEYXRhOwogY2xhc3MgTGF5ZXJUcmVl
SG9zdDsKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGFnZTsKIHN0cnVjdCBXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlByZWZlcmVuY2VzU3RvcmU7CkBAIC03OCwx
MiArNzcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96
ZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQ
YWdlT3ZlcmxheSosIGZsb2F0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSopIHsgfQotCiAgICAgdmlydHVhbCB2b2lkIHNldFBhaW50aW5nRW5hYmxl
ZChib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2Vi
UHJlZmVyZW5jZXNTdG9yZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVDb250ZW50
U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQpAQCAtMTAwLDggKzkzLDYg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNl
dEZvckFueUZyYW1lKCkgeyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNr
aW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyopIHsgcmV0dXJuIGZhbHNl
OyB9CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGlj
c0xheWVyRmFjdG9yeSgpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGY1NjYwMDEuLmIwNmM2
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcApAQCAtMTU2LDEyICsxNTYsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6
dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3Ry
aW4KIAogICAgIGlmICghc2hvdWxkU2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBh
Z2VPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheSht
X2ZpbmRQYWdlT3ZlcmxheSwgdHJ1ZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFs
bFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9maW5kUGFnZU92ZXJsYXkpIHsKICAg
ICAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92ZXJs
YXk6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gZmluZFBh
Z2VPdmVybGF5LmdldCgpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJs
YXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX3dlYlBh
Z2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXktPnNl
dE5lZWRzRGlzcGxheSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fZmluZFBhZ2VP
dmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpoaWRlRmluZFVJKCkKIHsKICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAg
ICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCB0cnVlKTsKKyAgICAgICAgbV93ZWJQYWdlLT51
bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpGYWRlKTsKIAogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9y
RnJhbWUobV93ZWJQYWdlLT5tYWluRnJhbWUoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAppbmRleCAzNWI5ODI1Li4xOWRl
YTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92
ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheS5jcHAKQEAgLTkwLDggKzkwLDggQEAgdm9pZCBQYWdlT3ZlcmxheTo6c2V0UGFnZShXZWJQ
YWdlKiB3ZWJQYWdlKQogdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAobV93ZWJQYWdlKSB7Ci0gICAgICAgIG1fd2Vi
UGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0UGFnZU92ZXJsYXlPcGFjaXR5KHRoaXMsIG1fZnJhY3Rp
b25GYWRlZEluKTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheSh0aGlzLCBkaXJ0eVJlY3QpOworICAgICAgICBtX3dlYlBhZ2UtPnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5T3BhY2l0eSh0aGlzLCBtX2ZyYWN0
aW9uRmFkZWRJbik7CisgICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkodGhpcywgZGlydHlSZWN0KTsKICAgICB9CiB9CiAK
QEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJG
aXJlZCgpCiAgICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7CiAKICAg
ICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1h
dGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAg
IG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0UGFnZU92ZXJsYXlPcGFjaXR5KHRoaXMsIG1f
ZnJhY3Rpb25GYWRlZEluKTsKKyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnNldFBhZ2VPdmVybGF5T3BhY2l0eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CiAKICAgICBp
ZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7CiAgICAgICAgIG1fZmFkZUFuaW1hdGlvblRp
bWVyLnN0b3AoKTsKQEAgLTE4NiwxNCArMTg2LDE0IEBAIHZvaWQgUGFnZU92ZXJsYXk6OmZhZGVB
bmltYXRpb25UaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAod2FzRmFkaW5nT3V0KSB7CiAgICAg
ICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGZhZGUgb3V0LCBnbyBhaGVhZCBhbmQgdW5pbnN0YWxs
IHRoZSBwYWdlIG92ZXJsYXkuCi0gICAgICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VP
dmVybGF5KHRoaXMsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFn
ZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgICAg
ICB9CiAgICAgfQogfQogCiB2b2lkIFBhZ2VPdmVybGF5OjpjbGVhcigpCiB7Ci0gICAgbV93ZWJQ
YWdlLT5kcmF3aW5nQXJlYSgpLT5jbGVhclBhZ2VPdmVybGF5KHRoaXMpOworICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSh0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheS5oCmluZGV4IDI5NWYxZTguLjYxZGJhOGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCkBAIC03OSw2ICs3OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBDbGllbnQqIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBlbnVtIGNsYXNzIEZhZGVNb2RlIHsgRG9O
b3RGYWRlLCBGYWRlIH07CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJs
YXkoQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQ5ZDEzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDI2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGFnZU92ZXJs
YXlDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIkRyYXdpbmdBcmVhLmgiCisjaW1wb3J0ICJQYWdl
T3ZlcmxheS5oIgorI2ltcG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGls
ZWRCYWNraW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2Vi
UGFnZSogd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQoreworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgQVNTRVJUKCFtX3Jvb3RM
YXllcik7CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBh
Z2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMpOworI2lmbmRl
ZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5l
ciIpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFn
ZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBBU1NFUlQobV9yb290TGF5ZXIpOworCisgICAg
UmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7CisKKyAgICBpZiAobV9w
YWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKKyAgICBvdmVybGF5LT5zZXRQYWdlKG1fd2Vi
UGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1f
d2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIp
OworI2VuZGlmCisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKGxheWVyLmdldCgpKTsKKyAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOworICAgIG1fb3ZlcmxheUdyYXBo
aWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBzdGQ6Om1vdmUobGF5ZXIpKTsKKworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRp
b25VcGRhdGVzKHRydWUpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZU91dEFu
aW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3ZlcmxheS0+c2V0UGFn
ZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3ZlcmxheSkt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBtX3BhZ2VP
dmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0gbm90Rm91
bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOworCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKSkgeworICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXMoZmFsc2UpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXks
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KG92ZXJsYXkpOwor
ICAgIGlmICghZ3JhcGhpY3NMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFncmFw
aGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBncmFwaGljc0xheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworICAgIH0KKyAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBh
Z2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSogb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKK3sK
KyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZ2V0KG92ZXJsYXkpOworICAgIGlmICghZ3JhcGhpY3NMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ3JhcGhpY3NMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJs
YXkpCit7CisgICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IG1fb3ZlcmxheUdyYXBo
aWNzTGF5ZXJzLmdldChvdmVybGF5KTsKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Cisg
ICAgZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShJbnRTaXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1NpemUoKQoreworICAgIGZvciAoYXV0byYgZ3Jh
cGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKSB7CisgICAgICAg
IGlmICghZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Cisg
ICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIH0KK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVByZWZlcmVuY2VzKCkKK3sKKyAgICBm
b3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMo
KSkKKyAgICAgICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcihncmFwaGljc0xheWVyLmdldCgpKTsK
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFj
dG9yKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5
TGF5ZXJzKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VFeHBv
c2VkUmVjdCgpCit7CisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRC
YWNraW5nID0gZ3JhcGhpY3NMYXllci0+dGlsZWRCYWNraW5nKCkpCisgICAgICAgICAgICB0aWxl
ZEJhY2tpbmctPnNldEV4cG9zZWRSZWN0KG1fd2ViUGFnZS0+bWFpbkZyYW1lVmlldygpLT5leHBv
c2VkUmVjdCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRT
Y3JvbGxBbnlGcmFtZSgpCit7CisgICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnZhbGlkYXRlQWxsUGFnZU92ZXJs
YXlMYXllcnMoKQoreworICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnZhbHVlcygpKQorICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmZsdXNoUGFnZU92ZXJs
YXlMYXllcnMoRmxvYXRSZWN0IHZpc2libGVSZWN0KQoreworICAgIG1fcm9vdExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6dXBkYXRlU2V0dGluZ3NGb3JMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCk7CisgICAgbGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5hY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKCkpOworICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGlu
Z3Muc2hvd0RlYnVnQm9yZGVycygpKTsKKyAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVy
KHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRy
aWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5z
aXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9w
YWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dL
QXJyYXlSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJs
YXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8gaXQg
PSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgZm9yIChhdXRvIGl0ID0g
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLmdl
dCgpICE9IGdyYXBoaWNzTGF5ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOworICAgICAgICBpdC0+a2V5LT5k
cmF3UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKKwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCitmbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikK
K3sKKyAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
ckZsdXNoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzAyZTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9s
bGVyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlD
b250cm9sbGVyX2gKKyNkZWZpbmUgUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUg
IlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViTW91c2VFdmVudDsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFBh
Z2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSopOworCisgICAg
dm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBpbnN0
YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5
KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFn
ZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiwgZmxvYXQpOworICAgIHZvaWQgY2xlYXJQYWdl
T3ZlcmxheShQYWdlT3ZlcmxheSopOworCisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlUHJlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGRpZENoYW5nZURldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOworICAgIHZv
aWQgZGlkU2Nyb2xsQW55RnJhbWUoKTsKKworICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVy
cyhXZWJDb3JlOjpGbG9hdFJlY3QpOworCisgICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0
IFdlYk1vdXNlRXZlbnQmKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0
eXBlcyBoZXJlLgorICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7CisgICAgV0tBcnJh
eVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheUxh
eWVycygpOworCisgICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBkb3VibGUpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJl
cXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGlj
c0xheWVyczsKKyAgICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7
CisgICAgV2ViUGFnZSogbV93ZWJQYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxlcGhvbmVOdW1iZXJP
dmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXggNDE2NzJjMC4uODFhNmVmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGVs
ZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQg
VGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgp
CiAgICAgCiAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNy
ZWF0ZSh0aGlzKTsKICAgICBtX3RlbGVwaG9uZU51bWJlck92ZXJsYXkgPSBvdmVybGF5LmdldCgp
OwotICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCB0
cnVlKTsKKyAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2Uo
KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICBtX3RlbGVwaG9uZU51bWJlck92
ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgVGVs
ZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmRlc3Ryb3lPdmVybGF5KCkKICAgICBpZiAo
IW1fdGVsZXBob25lTnVtYmVyT3ZlcmxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3RlbGVwaG9uZU51bWJlck92ZXJsYXksIGZhbHNl
KTsKKyAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fdGVsZXBob25lTnVtYmVy
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiB2b2lkIFRl
bGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdl
T3ZlcmxheSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKaW5kZXggMDIyNjk4Zi4uYjZhYjc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIk5ldHNj
YXBlUGx1Z2luLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQbHVnaW5Q
cm94eS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKQEAgLTMwNyw2ICszMDYsNyBAQCBXZWJQ
YWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdM
UG9saWN5KFdlYkdMQWxsb3dDcmVhdGlvbikKICNlbmRpZgorICAgICwgbV9wYWdlT3ZlcmxheUNv
bnRyb2xsZXIodGhpcykKIHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgbm9uLWlkZWFsIGxvY2F0aW9uIGZvciB0aGlzIFNldHRpbmcgYW5kCkBAIC0zNDAs
NiArMzQwLDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKICAgICBtX2RyYXdpbmdBcmVhID0g
RHJhd2luZ0FyZWE6OmNyZWF0ZSh0aGlzLCBwYXJhbWV0ZXJzKTsKICAgICBtX2RyYXdpbmdBcmVh
LT5zZXRQYWludGluZ0VuYWJsZWQoZmFsc2UpOworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVy
LmluaXRpYWxpemUoKTsKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgbV91c2VB
c3luY1Njcm9sbGluZyA9IHBhcmFtZXRlcnMuc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5Ojp0aHJlYWRlZFNjcm9sbGluZ0VuYWJsZWRLZXkoKSk7CkBAIC0xMTIxLDYg
KzExMjIsOCBAQCB2b2lkIFdlYlBhZ2U6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
dmlld1NpemUpCiAgICAgaWYgKHZpZXctPnVzZUZpeGVkTGF5b3V0KCkpCiAgICAgICAgIHNlbmRW
aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKCk7CiAjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlD
b250cm9sbGVyLmRpZENoYW5nZVZpZXdTaXplKCk7CiB9CiAKICNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKQEAgLTEyMDYsMTUgKzEyMDksNiBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0KEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAg
IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpLT5wYWludCgmZ3JhcGhpY3NDb250ZXh0
LCByZWN0KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpkcmF3UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkq
IHBhZ2VPdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQocGFnZU92ZXJsYXkpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgZ3JhcGhp
Y3NDb250ZXh0LmNsaXAocmVjdCk7Ci0gICAgcGFnZU92ZXJsYXktPmRyYXdSZWN0KGdyYXBoaWNz
Q29udGV4dCwgcmVjdCk7Ci19Ci0KIGRvdWJsZSBXZWJQYWdlOjp0ZXh0Wm9vbUZhY3RvcigpIGNv
bnN0CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwpAQCAt
MTMzNyw2ICsxMzMxLDggQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkp
CiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFu
Z2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZh
Y3RvcigpIGNvbnN0CkBAIC0xNDUyLDM3ICsxNDQ4LDE0IEBAIHZvaWQgV2ViUGFnZTo6cG9zdElu
amVjdGVkQnVuZGxlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBJUEM6Ok1lc3Nh
Z2VECiAgICAgaW5qZWN0ZWRCdW5kbGUtPmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKHRoaXMsIG1l
c3NhZ2VOYW1lLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zdGFs
bFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBib29sIHNo
b3VsZEZhZGVJbikKK3ZvaWQgV2ViUGFnZTo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8
UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUp
CiB7Ci0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0gICAg
Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkuZ2V0KCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7Ci0gICAgb3Zl
cmxheS0+c2V0UGFnZSh0aGlzKTsKLQotICAgIGlmIChzaG91bGRGYWRlSW4pCi0gICAgICAgIG92
ZXJsYXktPnN0YXJ0RmFkZUluQW5pbWF0aW9uKCk7Ci0KLSAgICBtX2RyYXdpbmdBcmVhLT5kaWRJ
bnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5nZXQoKSk7CisgICAgbV9wYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaW5zdGFsbFBhZ2VPdmVybGF5KHBhZ2VPdmVybGF5LCBmYWRlTW9kZSk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5
LCBib29sIHNob3VsZEZhZGVPdXQpCit2b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2Rl
KQogewotICAgIHNpemVfdCBleGlzdGluZ092ZXJsYXlJbmRleCA9IG1fcGFnZU92ZXJsYXlzLmZp
bmQocGFnZU92ZXJsYXkpOwotICAgIGlmIChleGlzdGluZ092ZXJsYXlJbmRleCA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNob3VsZEZhZGVPdXQpIHsKLSAgICAgICAg
cGFnZU92ZXJsYXktPnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgcGFnZU92ZXJsYXktPnNldFBhZ2UoMCk7Ci0gICAgbV9wYWdlT3ZlcmxheXMu
cmVtb3ZlKGV4aXN0aW5nT3ZlcmxheUluZGV4KTsKLQotICAgIG1fZHJhd2luZ0FyZWEtPmRpZFVu
aW5zdGFsbFBhZ2VPdmVybGF5KHBhZ2VPdmVybGF5KTsKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwogfQogCiAj
aWYgIVBMQVRGT1JNKElPUykKQEAgLTE3NjEsMTQgKzE3MzQsNyBAQCB2b2lkIFdlYlBhZ2U6Om1v
dXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmIChtX3Bh
Z2VPdmVybGF5cy5zaXplKCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSBwYWdlIG92ZXJsYXkgaGFu
ZGxlIHRoZSBldmVudC4KLSAgICAgICAgUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9y
IGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAgICAgICAgZm9yIChQYWdlT3ZlcmxheUxp
c3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgaWYgKChoYW5kbGVkID0gKCppdCktPm1vdXNlRXZlbnQo
bW91c2VFdmVudCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBib29sIGhh
bmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZl
bnQpOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWhhbmRsZWQgJiYgbV9oZWFkZXJC
YW5uZXIpCkBAIC0xNzk0LDE0ICsxNzYwLDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAKIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVu
dFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGJvb2wmIGhh
bmRsZWQpCiB7Ci0gICAgaGFuZGxlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fcGFnZU92ZXJsYXlz
LnNpemUoKSkgewotICAgICAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5k
ID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOwotICAgICAgICBmb3IgKFBhZ2VPdmVybGF5TGlzdDo6
cmV2ZXJzZV9pdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBpZiAoKGhhbmRsZWQgPSAoKml0KS0+bW91c2VFdmVudChtb3Vz
ZUV2ZW50KSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGhhbmRsZWQgPSBt
X3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFoYW5kbGVkICYmIG1faGVhZGVyQmFubmVyKQogICAg
ICAgICBoYW5kbGVkID0gbV9oZWFkZXJCYW5uZXItPm1vdXNlRXZlbnQobW91c2VFdmVudCk7CkBA
IC0xODkyLDMyICsxODUxLDYgQEAgdm9pZCBXZWJQYWdlOjprZXlFdmVudFN5bmNGb3JUZXN0aW5n
KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQsIGJvb2wKICAgICAgICAgaGFu
ZGxlZCA9IHBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChrZXlib2FyZEV2ZW50KTsK
IH0KIAotV0tUeXBlUmVmIFdlYlBhZ2U6OnBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17
Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVybGF5cy5y
ZW5kKCk7Ci0gICAgZm9yIChQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBt
X3BhZ2VPdmVybGF5cy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdLVHlw
ZVJlZiB2YWx1ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJp
YnV0ZSwgcGFyYW1ldGVyKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotV0tBcnJheVJlZiBXZWJQYWdlOjpw
YWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVy
aXplZE5hbWVzKQotewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5kID0gbV9w
YWdlT3ZlcmxheXMucmVuZCgpOwotICAgIGZvciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0
ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBXS0FycmF5UmVmIHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMocGFyYW1ldGVyaXplZE5hbWVzKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBXZWJQ
YWdlOjp2YWxpZGF0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKIHsKICAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNlOwpAQCAtMjcwNSw2ICsy
NjM4LDggQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJl
bmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2Ry
YXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7CisKKyAgICBtX3BhZ2VPdmVybGF5
Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCkBAIC00NTY3LDQgKzQ1MDIsOSBAQCBUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxl
ciYgV2ViUGFnZTo6dGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIoKQogfQogI2VuZGlm
CiAKK3ZvaWQgV2ViUGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55RnJhbWUoKQorewor
ICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZFNjcm9sbEFueUZyYW1lKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKaW5kZXggMjAwMDM0OS4uNTJmNTkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00MSwxMCArNDEsMTEgQEAKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiVGFwSGln
aGxpZ2h0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUYXBIaWdobGlnaHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiV2ViVW5kb1N0ZXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRN
ZW51SXRlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaD4KQEAg
LTE4NCw4ICsxODUsNiBAQCBjbGFzcyBXZWJUb3VjaEV2ZW50OwogY2xhc3MgVGVsZXBob25lTnVt
YmVyT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFBh
Z2VPdmVybGF5Pj4gUGFnZU92ZXJsYXlMaXN0OwotCiBjbGFzcyBXZWJQYWdlIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlUGFnZT4sIHB1YmxpYyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGFnZT4gY3JlYXRlKHVpbnQ2NF90IHBhZ2VJRCwgY29u
c3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwpAQCAtMjEwLDYgKzIwOSw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9k
cmF3aW5nQXJlYS5nZXQoKTsgfQorICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xs
ZXI7IH0KKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigp
IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtMjQxLDcgKzI0Miw2IEBAIHB1YmxpYzoKICAg
ICAvLyAtLSBDYWxsZWQgYnkgdGhlIERyYXdpbmdBcmVhLgogICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBnZW5lcmljaXplIHRoZXNlIGludG8gYSBEcmF3aW5nQXJlYSBjbGllbnQgaW50ZXJmYWNlLiBX
b3VsZCB0aGF0IGJlIGJlbmVmaWNpYWw/CiAgICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3UGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBsYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgLy8g
LS0gQ2FsbGVkIGZyb20gV2ViQ29yZSBjbGllbnRzLgpAQCAtNDEwLDEwICs0MTAsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0OwogICAgIGJvb2wgd2luZG93
QW5kV2ViUGFnZUFyZUZvY3VzZWQoKSBjb25zdDsKLSAgICB2b2lkIGluc3RhbGxQYWdlT3Zlcmxh
eShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgYm9vbCBzaG91bGRGYWRlSW4gPSBmYWxzZSk7Ci0g
ICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIGJvb2wgc2hvdWxkRmFk
ZU91dCA9IGZhbHNlKTsKLSAgICBib29sIGhhc1BhZ2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4g
bV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyB9Ci0gICAgUGFnZU92ZXJsYXlMaXN0JiBwYWdlT3Zlcmxh
eXMoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5czsgfQorICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVy
bGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRI
ZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtNzgxLDYgKzc3OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0IFN0
cmluZyYgbnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogI2VuZGlmCiAKKyAgICB2
b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCk7CisKIHByaXZhdGU6CiAgICAg
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
KTsKIApAQCAtMTA4Niw3ICsxMDg2LDYgQEAgcHJpdmF0ZToKICAgICBJbmplY3RlZEJ1bmRsZVBh
Z2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCBtX2xvZ0RpYWdub3N0aWNNZXNzYWdlQ2xpZW50Owog
CiAgICAgRmluZENvbnRyb2xsZXIgbV9maW5kQ29udHJvbGxlcjsKLSAgICBQYWdlT3ZlcmxheUxp
c3QgbV9wYWdlT3ZlcmxheXM7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIFJlZlB0cjxX
ZWJJbnNwZWN0b3I+IG1faW5zcGVjdG9yOwpAQCAtMTE4Nyw2ICsxMTg2LDggQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgUmVmUHRyPFRlbGVw
aG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyPiBtX3RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250
cm9sbGVyOwogI2VuZGlmCisKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVDb250ZXh0LmgKaW5kZXggNDU3ZDFhNS4uNDA3NGUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVD
b250ZXh0LmgKQEAgLTQ4LDE1ICs0OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXllcldhc0Ny
ZWF0ZWQoUGxhdGZvcm1DQUxheWVyUmVtb3RlKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGUpOwogICAgIHZvaWQgbGF5ZXJXaWxsQmVEZXN0cm95ZWQoUGxhdGZvcm1DQUxheWVy
UmVtb3RlKik7CiAKLSAgICB2b2lkIG91dE9mVHJlZUxheWVyV2FzQWRkZWQoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZvaWQgb3V0T2ZUcmVlTGF5ZXJXaWxsQmVSZW1vdmVkKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKLQogICAgIHZvaWQgYmFja2luZ1N0b3JlV2FzQ3JlYXRlZChS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogICAgIHZvaWQgYmFja2luZ1N0b3JlV2lsbEJlRGVz
dHJveWVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKik7CiAKICAgICBMYXllckhvc3RpbmdNb2Rl
IGxheWVySG9zdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2UtPmxheWVySG9zdGlu
Z01vZGUoKTsgfQogCi0gICAgdm9pZCBmbHVzaE91dE9mVHJlZUxheWVycygpOwogICAgIHZvaWQg
YnVpbGRUcmFuc2FjdGlvbihSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYsIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllciYgcm9vdExheWVyKTsKIAogICAgIC8vIEZyb20gdGhlIFVJIHByb2Nlc3MK
QEAgLTcyLDggKzY4LDYgQEAgcHJpdmF0ZToKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKIAot
ICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gbV9vdXRPZlRyZWVMYXllcnM7Ci0K
ICAgICBWZWN0b3I8UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRpb25Qcm9w
ZXJ0aWVzPiBtX2NyZWF0ZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gbV9kZXN0cm95ZWRMYXllcnM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dC5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dC5tbQppbmRleCBlNTVlMzFmLi5mZGFjMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVDb250ZXh0Lm1tCkBAIC03MSwxOSArNzEsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ6OmxheWVyV2lsbEJlRGVzdHJveWVkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSogbGF5ZXIpCiAg
ICAgbV9sYXllcnNBd2FpdGluZ0FuaW1hdGlvblN0YXJ0LnJlbW92ZShsYXllci0+bGF5ZXJJRCgp
KTsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpvdXRPZlRyZWVMYXllcldhc0Fk
ZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVCghbV9vdXRPZlRyZWVMYXll
cnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBtX291dE9mVHJlZUxheWVycy5hcHBlbmQobGF5ZXIp
OwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6Om91dE9mVHJlZUxheWVyV2lsbEJl
UmVtb3ZlZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBzaXplX3QgbGF5ZXJJbmRleCA9
IG1fb3V0T2ZUcmVlTGF5ZXJzLmZpbmQobGF5ZXIpOwotICAgIEFTU0VSVChsYXllckluZGV4ICE9
IG5vdEZvdW5kKTsKLSAgICBtX291dE9mVHJlZUxheWVycy5yZW1vdmUobGF5ZXJJbmRleCk7Ci19
Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YmFja2luZ1N0b3JlV2FzQ3JlYXRlZChS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewogICAgIG1fYmFja2luZ1N0
b3JlQ29sbGVjdGlvbi5iYWNraW5nU3RvcmVXYXNDcmVhdGVkKGJhY2tpbmdTdG9yZSk7CkBAIC05
OSwxMiArODYsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaAogICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4oY2xpZW50LCB0aGlzKTsKIH0KIAotdm9p
ZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpmbHVzaE91dE9mVHJlZUxheWVycygpCi17Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBsYXllciA6IG1fb3V0T2ZUcmVlTGF5ZXJzKQotICAgICAgICBsYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotfQotCiB2b2lkIFJl
bW90ZUxheWVyVHJlZUNvbnRleHQ6OmJ1aWxkVHJhbnNhY3Rpb24oUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBQbGF0Zm9ybUNBTGF5ZXImIHJvb3RMYXllcikKIHsKICAg
ICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIHJvb3RMYXllclJlbW90ZSA9IHRvUGxhdGZvcm1DQUxh
eWVyUmVtb3RlKHJvb3RMYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgK
aW5kZXggNDg0NjY2Yy4uZjE4OTVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ0FSZW1vdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIApAQCAtNDAsNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsKIAotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50IHsKK2NsYXNzIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIDogcHVibGljIERyYXdp
bmdBcmVhIHsKIHB1YmxpYzoKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYShXZWJQYWdl
KiwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZpcnR1YWwgflJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhKCk7CkBAIC02MCwxMSArNTksNiBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3Rv
cmUmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXko
UGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdl
T3ZlcmxheSosIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Fz
eW5jU2Nyb2xsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkgb3ZlcnJpZGU7CkBAIC04MywxMiAr
NzcsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpIG92ZXJyaWRl
OwogCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVx
dWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIGNvbnN0IG92ZXJyaWRlIHsgfQogI2lmIFBMQVRGT1JNKElPUykKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwogI2VuZGlmCkBA
IC0xMDEsOSArODksNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZyogbWFp
bkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dD4gbV9yZW1vdGVMYXllclRyZWVDb250ZXh0OwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgSGFzaE1hcDxQYWdl
T3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyQ0FSZW1vdGU+PiBtX3BhZ2VP
dmVybGF5TGF5ZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKIAogICAgIFdlYkNvcmU6OkludFNpemUgbV92aWV3U2l6ZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5kZXggMmIyNzVmNC4uMzIwZGM2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC00OCw2ICs0OCw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UqIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMmKQogICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5
ZXJUcmVlLCB3ZWJQYWdlKQogICAgICwgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0KHN0ZDo6bWFr
ZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVlQ29udGV4dD4od2ViUGFnZSkpCisgICAgLCBtX3Jvb3RM
YXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgbnVsbHB0
cikpCiAgICAgLCBtX2V4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAgICAg
LCBtX3Njcm9sbGVkRXhwb3NlZFJlY3QoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKICAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bGF5
ZXJGbHVzaFRpbWVyRmlyZWQpCkBAIC04NSw3ICs4NiwxMiBAQCBHcmFwaGljc0xheWVyRmFjdG9y
eSogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKIAog
dm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogcm9vdExheWVyKQogewotICAgIG1fcm9vdExheWVyID0gcm9vdExheWVy
ID8gdG9HcmFwaGljc0xheWVyQ0FSZW1vdGUocm9vdExheWVyKS0+cGxhdGZvcm1DQUxheWVyKCkg
OiBudWxscHRyOworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyICo+IGNoaWxkcmVuOworICAgIGlm
IChyb290TGF5ZXIpIHsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7CisgICAg
ICAgIGNoaWxkcmVuLmFwcGVuZChtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnJv
b3RMYXllcigpKTsKKyAgICB9CisgICAgbV9yb290TGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVu
KTsKIH0KIAogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnko
Y29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBA
IC05MywxMiArOTksNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSQogICAgIG1fdmlld1NpemUg
PSB2aWV3U2l6ZTsKICAgICBtX3dlYlBhZ2UtPnNldFNpemUodmlld1NpemUpOwogCi0gICAgZm9y
IChjb25zdCBhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzKSB7Ci0g
ICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gb3ZlcmxheUFuZExheWVyLnZhbHVlLmdldCgp
OwotICAgICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgbGF5ZXIt
PnNldFNpemUodmlld1NpemUpOwotICAgIH0KLQogICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
ckZsdXNoKCk7CiAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJv
eHk6OkRpZFVwZGF0ZUdlb21ldHJ5KCkpOwpAQCAtMTE3LDk1ICsxMTcsNiBAQCB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJl
bmNlc1N0b3JlJikKICAgICAvLyBpbiBvcmRlciB0byBiZSBzY3JvbGxlZCBieSB0aGUgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuCiAgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
ckZpeGVkUG9zaXRpb25FbmFibGVkKHRydWUpOwogICAgIHNldHRpbmdzLnNldEZpeGVkUG9zaXRp
b25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRydWUpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBv
dmVybGF5QW5kTGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzKSB7Ci0gICAgICAgIG92ZXJsYXlB
bmRMYXllci52YWx1ZS0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0U2hv
d0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgICAgIG92ZXJs
YXlBbmRMYXllci52YWx1ZS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBh
aW50Q291bnRlcigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OmRpZEluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4gbGF5ZXIoc3RhdGljX2Nh
c3Q8R3JhcGhpY3NMYXllckNBUmVtb3RlKj4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCksIHRoaXMpLnJlbGVhc2UoKSkpOwotI2lmbmRlZiBOREVCVUcKLSAgICBs
YXllci0+c2V0TmFtZSgicGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbGF5
ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICBsYXllci0+c2V0U2hvd0RlYnVn
Qm9yZGVyKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93RGVidWdCb3JkZXJz
KCkpOwotICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLnNob3dSZXBhaW50Q291bnRlcigpKTsKLQotICAgIG1fcm9vdExheWVy
LT5hcHBlbmRTdWJsYXllcihsYXllci0+cGxhdGZvcm1DQUxheWVyKCkpOwotICAgIG1fcmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC0+b3V0T2ZUcmVlTGF5ZXJXYXNBZGRlZChsYXllci5nZXQoKSk7Ci0K
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXJzLmFkZChwYWdlT3ZlcmxheSwgc3RkOjptb3ZlKGxheWVy
KSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJs
YXkqIHBhZ2VPdmVybGF5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyQ0FS
ZW1vdGU+IGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy50YWtlKHBhZ2VPdmVybGF5KTsKLSAg
ICBBU1NFUlQobGF5ZXIpOwotCi0gICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5vdXRPZlRy
ZWVMYXllcldpbGxCZVJlbW92ZWQobGF5ZXIuZ2V0KCkpOwotICAgIGxheWVyLT5wbGF0Zm9ybUNB
TGF5ZXIoKS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLQotICAgIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNl
dFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBHcmFwaGljc0xheWVyQ0FSZW1vdGUqIGxheWVyID0gbV9w
YWdlT3ZlcmxheUxheWVycy5nZXQocGFnZU92ZXJsYXkpOwotCi0gICAgaWYgKCFsYXllcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKLSAgICAg
ICAgbGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgbGF5ZXItPnNldFNpemUo
bV92aWV3U2l6ZSk7Ci0gICAgfQotCi0gICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJs
YXkqIHBhZ2VPdmVybGF5LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzTGF5ZXJDQVJl
bW90ZSogbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0gICAg
Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGxheWVyLT5zZXRP
cGFjaXR5KG9wYWNpdHkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmNsZWFyUGFnZU92ZXJsYXkoUGFn
ZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbV9w
YWdlT3ZlcmxheUxheWVycy5nZXQocGFnZU92ZXJsYXkpOwotCi0gICAgaWYgKCFsYXllcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAg
bGF5ZXItPnNldFNpemUoSW50U2l6ZSgpKTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJG
bHVzaCgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXlBbmRMYXllciA6
IG1fcGFnZU92ZXJsYXlMYXllcnMpIHsKLSAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci52YWx1
ZS5nZXQoKSA9PSBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQ
YWdlT3ZlcmxheShvdmVybGF5QW5kTGF5ZXIua2V5LCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2lu
Z0ludFJlY3QoY2xpcFJlY3QpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1mbG9hdCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6ZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNj
YWxlRmFjdG9yKCk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC0yODMsMTMgKzE5NCw5IEBA
IHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJl
Y3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRF
eHBvc2VkUmVjdCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogbV9wYWdlT3Zlcmxh
eUxheWVycy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcgPSBsYXllci0+dGlsZWRCYWNraW5nKCkpCi0gICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNl
dEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgfQotICAgIAogICAgIGZy
YW1lVmlldy0+YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIG1fd2ViUGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogVGls
ZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNr
aW5nKCkgY29uc3QKQEAgLTMzOCwxMyArMjQ1LDE2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICB9CiAKICAgICBtX3dlYlBhZ2UtPmxheW91dElm
TmVlZGVkKCk7Ci0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkt
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogCi0gICAgbV9yZW1v
dGVMYXllclRyZWVDb250ZXh0LT5mbHVzaE91dE9mVHJlZUxheWVycygpOworICAgIEZsb2F0UmVj
dCB2aXNpYmxlUmVjdChGbG9hdFBvaW50KCksIG1fdmlld1NpemUpOworICAgIHZpc2libGVSZWN0
LmludGVyc2VjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOworICAgIG1fd2ViUGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVjdCk7Cisg
ICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fcm9vdExheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBGSVhNRTogbWluaXpl
IHRoZXNlIHRyYW5zYWN0aW9ucyBpZiBub3RoaW5nIGNoYW5nZWQuCiAgICAgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24gbGF5ZXJUcmFuc2FjdGlvbjsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNv
bnRleHQtPmJ1aWxkVHJhbnNhY3Rpb24obGF5ZXJUcmFuc2FjdGlvbiwgKm1fcm9vdExheWVyKTsK
KyAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJ1aWxkVHJhbnNhY3Rpb24obGF5ZXJUcmFu
c2FjdGlvbiwgKnRvR3JhcGhpY3NMYXllckNBUmVtb3RlKG1fcm9vdExheWVyLmdldCgpKS0+cGxh
dGZvcm1DQUxheWVyKCkpOwogICAgIG1fd2ViUGFnZS0+d2lsbENvbW1pdExheWVyVHJlZShsYXll
clRyYW5zYWN0aW9uKTsKIAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rp
b24gc2Nyb2xsaW5nVHJhbnNhY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhLmgKaW5kZXggMjE5YTU4Yy4uN2IxZTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkRyYXdpbmdB
cmVhLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9MYXllckZsdXNoU2NoZWR1bGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgpAQCAtNTEsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJIb3N0
aW5nQ29udGV4dDsKIAotY2xhc3MgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEgOiBwdWJs
aWMgRHJhd2luZ0FyZWEsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQsIFdlYkNvcmU6Okxh
eWVyRmx1c2hTY2hlZHVsZXJDbGllbnQgeworY2xhc3MgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEsIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXJD
bGllbnQgewogcHVibGljOgogICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKFdlYlBh
Z2UqLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB+VGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoKTsKQEAgLTcxLDExICs3MCw2IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5p
bnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3Bh
Y2l0eShQYWdlT3ZlcmxheSosIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJikgb3ZlcnJpZGU7CiAKQEAgLTg0LDE5ICs3OCwxMCBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55
RnJhbWUoKSBvdmVycmlkZTsKLQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJp
bmdVcGRhdGVkU2Nyb2xsUG9zaXRpb24oc3RkOjpmdW5jdGlvbjx2b2lkICgpPikgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNv
bnN0IFdlYkNvcmU6OkZyYW1lVmlldyopIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBjbGlwUmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRDaGFuZ2VzRm9y
TGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlOwotCiAg
ICAgLy8gV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudAogICAgIHZpcnR1YWwgYm9v
bCBmbHVzaExheWVycygpIG92ZXJyaWRlOwogCkBAIC0xMTksMTUgKzEwNCwxMSBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICopOwogCi0gICAg
dm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVybGF5Kik7Ci0gICAgdm9pZCBkZXN0
cm95UGFnZU92ZXJsYXlMYXllcihQYWdlT3ZlcmxheSopOwogICAgIFdlYkNvcmU6OlRpbGVkQmFj
a2luZyogbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVEZWJ1
Z0luZm9MYXllcihib29sIHNob3dMYXllcik7CiAKICAgICB2b2lkIHVwZGF0ZUludHJpbnNpY0Nv
bnRlbnRTaXplVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYT4qKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKLSAgICAK
LSAgICB2b2lkIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKIAogICAgIGJvb2wgbV9sYXll
clRyZWVTdGF0ZUlzRnJvemVuOwogICAgIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXIgbV9s
YXllckZsdXNoU2NoZWR1bGVyOwpAQCAtMTQwLDEwICsxMjEsNiBAQCBwcml2YXRlOgogCiAgICAg
UmV0YWluUHRyPENBTGF5ZXI+IG1fcGVuZGluZ1Jvb3RMYXllcjsKIAotICAgIHR5cGVkZWYgSGFz
aE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
Pj4gUGFnZU92ZXJsYXlMYXllck1hcDsKLSAgICBQYWdlT3ZlcmxheUxheWVyTWFwIG1fcGFnZU92
ZXJsYXlMYXllcnM7Ci0gICAgbXV0YWJsZSBIYXNoTWFwPGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBSZXRhaW5QdHI8Q0FMYXllcj4+IG1fcGFnZU92ZXJsYXlQbGF0Zm9ybUxheWVyczsK
LQogICAgIGJvb2wgbV9pc1BhaW50aW5nU3VzcGVuZGVkOwogCiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fZXhwb3NlZFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5tbQppbmRleCA4YjI1MGVlLi5jMzc2ZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEubW0KQEAgLTExMCwxNyArMTEwLDYgQEAgdm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0
IEludFMKICAgICB1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCk7CiB9CiAKLXZvaWQgVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKQotewot
ICAgIGZvciAoUGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5
TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9y
QW55RnJhbWUoKQotewotICAgIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKLX0KLQogdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBDQUxheWVyICpyb290TGF5ZXIg
PSBncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsOwpA
QCAtMTg1LDcxICsxNzQsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCiAgICAgbV9sYXllckZsdXNoU2NoZWR1bGVy
LnNjaGVkdWxlKCk7CiB9CiAKLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRp
ZEluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0jaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91
c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKHRydWUpOwotI2VuZGlmCi0KLSAgICBjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKHBhZ2VPdmVybGF5KTsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYTo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VP
dmVybGF5KQotewotICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKHBhZ2VPdmVybGF5KTsKLSAg
ICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcnMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpKSB7Ci0g
ICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNldEZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhmYWxz
ZSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fcGFn
ZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgICAgIGxheWVyLT5zZXRTaXplKGV4
cGFuZGVkSW50U2l6ZShGbG9hdFNpemUobV9ob3N0aW5nTGF5ZXIuZ2V0KCkuZnJhbWUuc2l6ZSkp
KTsKLSAgICB9Ci0KLSAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAg
IHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBt
X3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3Zlcmxh
eSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0
KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIGxheWVyLT5zZXRTaXplKEludFNp
emUoKSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQogdm9pZCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2Vi
UHJlZmVyZW5jZXNTdG9yZSYpCiB7CiAgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOwpAQCAtMjYxLDEyICsxODUsNiBAQCB2b2lkIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVm
ZXJlbmNlc1N0b3JlJgogICAgIH0KICNlbmRpZgogCi0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9w
YWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0LT52
YWx1ZS0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoKSk7Ci0gICAgICAgIGl0LT52YWx1ZS0+c2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdz
LnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgICAgIGl0LT52YWx1ZS0+c2V0U2hvd1JlcGFpbnRD
b3VudGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLSAgICB9Ci0KICAgICAvLyBG
aXhlZCBwb3NpdGlvbiBlbGVtZW50cyBuZWVkIHRvIGJlIGNvbXBvc2l0ZWQgYW5kIGNyZWF0ZSBz
dGFja2luZyBjb250ZXh0cwogICAgIC8vIGluIG9yZGVyIHRvIGJlIHNjcm9sbGVkIGJ5IHRoZSBT
Y3JvbGxpbmdDb29yZGluYXRvci4gV2UgYWxzbyB3YW50IHRvIGtlZXAKICAgICAvLyBTZXR0aW5n
czpzZXRGaXhlZFBvc2l0aW9uQ3JlYXRlc1N0YWNraW5nQ29udGV4dCgpIGVuYWJsZWQgZm9yIGlP
Uy4gU2VlCkBAIC0zNDQsMjkgKzI2Miw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OmRpc3BhdGNoQWZ0ZXJFbnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3NpdGlvbihzCiAjZW5k
aWYKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKQotewotfQotCi12b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VP
dmVybGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpID09IGdyYXBoaWNz
TGF5ZXIpIHsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGl0LT5rZXks
IGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWZsb2F0IFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQogYm9vbCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogewogICAgIEFTU0VSVCgh
bV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKTsKQEAgLTM4MywxMSArMjc4LDcgQEAgYm9vbCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0
IHZpc2libGVSZWN0ID0gW21faG9zdGluZ0xheWVyIGZyYW1lXTsKICAgICB2aXNpYmxlUmVjdC5p
bnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIGZvciAoUGFnZU92ZXJsYXlM
YXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgbGF5ZXItPmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7Ci0gICAgfQorICAgIG1fd2ViUGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVj
dCk7CiAKICAgICBib29sIHJldHVyblZhbHVlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygp
OwogCkBAIC00NDksMTMgKzM0MCw5IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXct
PnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGxheWVyIDogbV9wYWdlT3ZlcmxheUxheWVycy52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBsYXllci0+dGlsZWRCYWNraW5nKCkpCi0g
ICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2Vk
UmVjdCk7Ci0gICAgfQotCiAgICAgZnJhbWVWaWV3LT5hZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFn
ZSgpOworCisgICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VF
eHBvc2VkUmVjdCgpOwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1
cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5
ZXJQb3NpdGlvbikKQEAgLTQ4MCwxNyArMzY3LDkgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnMK
ICAgICAgICAgc2l6ZSA9IGNvbnRlbnRTaXplOwogICAgIH0KIAotICAgIGZvciAoUGFnZU92ZXJs
YXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKGxh
eWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgIGxheWVyLT5zZXRTaXplKHZpZXdTaXpl
KTsKLSAgICB9Ci0KICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAg
Zmx1c2hMYXllcnMoKTsKIAotICAgIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKLQogICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOwogCkBAIC01MTIsOSArMzkxLDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnMK
IHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldERldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIG1fd2ViUGFnZS0+c2V0RGV2aWNlU2Nh
bGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVy
TWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9w
YWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFs
dWUtPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRMYXllckhv
c3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpCkBAIC01NjksNyArNDQ1LDcgQEAgdm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FMYXll
ciAqbGF5ZXIpCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtDQVRyYW5zYWN0aW9u
IHNldERpc2FibGVBY3Rpb25zOllFU107CiAKLSAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3VibGF5
ZXJzOmxheWVyID8gQFsgbGF5ZXIgXSA6IEBbIF1dOworICAgIFttX2hvc3RpbmdMYXllciBzZXRT
dWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciwgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5yb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpIF0gOiBAWyBdXTsKIAogICAgIGJvb2wg
aGFkUm9vdExheWVyID0gISFtX3Jvb3RMYXllcjsKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwpA
QCAtNTc4LDczICs0NTQsMTEgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FMYXllciAqbGF5ZXIpCiAgICAgaWYgKGhhZFJvb3RM
YXllciAhPSAhIWxheWVyKQogICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RM
YXllcihsYXllciA/IG1faG9zdGluZ0xheWVyLmdldCgpIDogMCk7CiAKLSAgICBmb3IgKFBhZ2VP
dmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigp
LCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIFttX2hvc3RpbmdMYXllciBhZGRTdWJsYXllcjppdC0+dmFsdWUtPnBsYXRmb3JtTGF5ZXIo
KV07Ci0KICAgICB1cGRhdGVEZWJ1Z0luZm9MYXllcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkuc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCkpOwogCiAgICAgW0NBVHJhbnNh
Y3Rpb24gY29tbWl0XTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcihQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBs
YXllci0+c2V0TmFtZSgicGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbGF5
ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICBsYXllci0+c2V0U2hvd0RlYnVn
Qm9yZGVyKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93RGVidWdCb3JkZXJz
KCkpOwotICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLnNob3dSZXBhaW50Q291bnRlcigpKTsKLQotICAgIG1fcGFnZU92ZXJs
YXlQbGF0Zm9ybUxheWVycy5zZXQobGF5ZXIuZ2V0KCksIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkp
OwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbbV9ob3N0aW5nTGF5ZXIgYWRkU3VibGF5ZXI6bGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKV07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0g
ICAgbV9wYWdlT3ZlcmxheUxheWVycy5hZGQocGFnZU92ZXJsYXksIHN0ZDo6bW92ZShsYXllcikp
OwotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkZXN0cm95UGFnZU92
ZXJsYXlMYXllcihQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy50YWtlKHBhZ2VP
dmVybGF5KTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5d
OwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbbGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOwotCi0gICAgbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzLnJlbW92
ZShsYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6
OmRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikgY29u
c3QKLXsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gb2xkUGxhdGZvcm1MYXllciA9IG1fcGFnZU92
ZXJsYXlQbGF0Zm9ybUxheWVycy5nZXQobGF5ZXIpOwotCi0gICAgaWYgKCFvbGRQbGF0Zm9ybUxh
eWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAob2xkUGxhdGZvcm1MYXllci5nZXQoKSA9
PSBsYXllci0+cGxhdGZvcm1MYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKLQotICAgIFttX2hvc3RpbmdMYXllciBpbnNlcnRTdWJsYXllcjpsYXllci0+cGxhdGZvcm1M
YXllcigpIGFib3ZlOm9sZFBsYXRmb3JtTGF5ZXIuZ2V0KCldOwotICAgIFtvbGRQbGF0Zm9ybUxh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Ci0KLSAgICBtX3BhZ2VPdmVybGF5UGxhdGZvcm1MYXllcnMuc2V0KGxheWVyLCBsYXllci0+cGxh
dGZvcm1MYXllcigpKTsKLX0KLQogVGlsZWRCYWNraW5nKiBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IDI2YjAx
OGUuLjA2ZjA4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RN
YWMubW0KQEAgLTc1LDcgKzc1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKIHsKLSAgICBX
S1JldGFpblB0cjxXS0FycmF5UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJs
YXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTE3Miw3ICsxNzIsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICAgIH0KICAgICAKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYXR0cmlidXRlUmVmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpYXR0cmlidXRlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBy
ZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlKGF0dHJpYnV0ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkp
KTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0
dHJpYnV0ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228883</attachid>
            <date>2014-04-08 13:56:20 -0700</date>
            <delta_ts>2014-04-08 14:09:10 -0700</delta_ts>
            <desc>rebase</desc>
            <filename>overlay.diff</filename>
            <type>text/plain</type>
            <size>68110</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjNTYzMjA5Li44Yzk4Yzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTQtMDQtMDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVW5pZnkgYW5kIGZhY3RvciBvdXQgcGFnZSBvdmVybGF5IGltcGxlbWVudGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMzUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcg
YWxsIG9mIHRoZSBQYWdlT3ZlcmxheSBjb2RlIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGNyb3NzLXBs
YXRmb3JtCisgICAgICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciwgaW5jbHVkaW5nIGhpdC10ZXN0
aW5nIGNvZGUgZnJvbSBXZWJQYWdlIGFuZCBwYWludGluZworICAgICAgICBhbmQgbGF5ZXItdHJl
ZSBtYW5pcHVsYXRpb24gY29kZSBmcm9tIHRoZSBEcmF3aW5nQXJlYS4KKworICAgICAgICBUaGlz
IGFsc28gbWFrZXMgYWxsIFBhZ2VPdmVybGF5cyBhIHNpbmdsZSBHcmFwaGljc0xheWVyIHRyZWUg
d2hpY2ggY2FuIGJlCisgICAgICAgIGZsdXNoZWQgYW5kIHBsdWdnZWQgaW50byBhbnkgRHJhd2lu
Z0FyZWEgaW4gYSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgorICAgICAgICBXZSBubyBsb25nZXIg
aGF2ZSB0byB3YXRjaCBmb3IgaW5kaXZpZHVhbCBsYXllcnMgZmxpcHBpbmcgaW50by9vdXQgb2Yg
dGlsaW5nLAorICAgICAgICBiZWNhdXNlIHRoZXkncmUgaGlkZGVuIHVuZGVybmVhdGggdGhlIHJv
b3QgUGFnZU92ZXJsYXkgR3JhcGhpY3NMYXllci4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBiZWNh
dXNlIEdyYXBoaWNzTGF5ZXIgaXMgY3Jvc3MtcGxhdGZvcm0sIHdlIGNhbiBzaGFyZQorICAgICAg
ICBhbGwgb2YgdGhlIGZhaXJseSB0cml2aWFsIGJ1dCBvZnQtcmVwZWF0ZWQgb3ZlcmxheSBtYW5h
Z2VtZW50IGNvZGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
cm9vdExheWVyKToKKyAgICAgICAgQWRkIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tOgorICAgICAgICBSZW1vdmUgUGFnZU92ZXJsYXktcmVsYXRlZCBjb2Rl
IGZyb20gdGhlIERyYXdpbmdBcmVhcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMu
bW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6
XSk6CisgICAgICAgIFVzZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgRHJh
d2luZ0FyZWEvV2ViUGFnZSB0byBtYW5pcHVsYXRlIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZU92ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgUmVtb3ZlIFBhZ2VPdmVybGF5LXJlbGF0ZWQgY29kZSBmcm9t
IFdlYlBhZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZUNvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ6Om91dE9mVHJlZUxheWVyV2FzQWRkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllclRyZWVDb250ZXh0OjpvdXRPZlRyZWVMYXllcldpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjpmbHVzaE91dE9m
VHJlZUxheWVycyk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSB0aGUgbm8tbG9uZ2VyLW5lY2Vz
c2FyeSBvdXQtb2YtdHJlZSBsYXllciBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdl
SW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXS0J1bmRsZVBhZ2VV
bmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1
cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJv
bGxlcjo6aGlkZUZpbmRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9u
ZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVsZXBob25l
TnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpkZXN0cm95T3Zlcmxh
eSk6CisgICAgICAgIE1ha2UgdXNlIG9mIHRoZSBGYWRlTW9kZSBlbnVtLgorCiAyMDE0LTA0LTA4
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEZsYWdzQ2hh
bmdlZCBldmVudHMgYXJlIG5vdCBkZWxpdmVyZWQgdG8gaW5wdXQgbWV0aG9kcyB3aGVuIHVzaW5n
IGFzeW5jIHRleHQgaW5wdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBmNzM5YjQ3Li42YzU4Njg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MDcsNiArNTA3
LDggQEAKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87
IH07CiAJCTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVD
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQx
MjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVEMTg1N0VB
MDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi87IH07CisJCTJEMTQw
RUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUQxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTJEMTQwRUIwMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAv
KiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQxQjVENUQxODU4NjlDODAwNkM2
NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QjE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
IAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFC
NUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAq
LzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjhGM0Uw
MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gKi87IH07CkBAIC0yMzEw
LDYgKzIzMTIsOCBAQAogCQkyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3Vw
UHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdl
R3JvdXBQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1
QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQxNDBFQUUxOEYzN0JF
MDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUMxODU4NjlDODAw
NkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzQyLDYgKzUzNDYsOCBAQAogCQkJCTdDRjQ3RkY5
MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCiAJCQkJMUE5MEMyMzYxMjY1MDcx
NzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKIAkJCQkxQTkwQzIzNTEyNjUwNzE3MDAz
RTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkyRDE0MEVBRTE4RjM3QkUwMDA1
RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJNTE5RUY1OEYxOEVGNzcy
MTAwMDNCN0Y0IC8qIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKIAkJ
CQk1MTlFRjU5MDE4RUY3NzIxMDAwM0I3RjQgLyogVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVH
ZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCkBAIC02NzQxLDYgKzY3NDcsNyBAQAogCQkJCUJDRTgx
RDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFC
QzNERkMxODk5RjUxQzAwNEYwNjI2IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUzRjExOEJBQkYwMDA3RDlFOUEg
LyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzlBODczNjE4QkJGQTQz
MDA1ODhBRjIgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTg0ODUsNiArODQ5Miw3IEBACiAJ
CQkJMUFGQTNBQzgxOEU2MUM2MTAwM0NDQkFFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEQUUxMjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDMyREJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJF
dmVudENvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQxNDBFQUYxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEzREQxRkQxMjVFNTlGMzAwNDUxNUU2IC8qIFdlYkZpbmRDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNFNDY5NTMxMjE0RTZDQjAwMEI5OEVCIC8qIFdlYkZvcm1DbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXgg
OWQwN2MzZi4uNGM4ZGU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtMzY0
LDEyICszNjQsMTIgQEAgdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheShXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmwKIAogdm9pZCBXS0J1bmRsZVBh
Z2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIHRydWUp
OworICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zl
cmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5k
bGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVm
KSwgdHJ1ZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0lt
cGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLSW1hZ2VSZWYgaW1hZ2VSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CmluZGV4IDk3ZTg3OTguLjI2N2Y2NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCkBAIC0xNTc2LDcgKzE1NzYsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRD
aGFuZ2VTY3JvbGxPZmZzZXQoKQogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yQW55
RnJhbWUoKTsKKyAgICB3ZWJQYWdlLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgp
OwogCiAgICAgaWYgKCFtX2ZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggYjQ3OTUzZS4uMGRjYjFjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKICAgICBpZiAoIW1faGlnaGxpZ2h0T3ZlcmxheSkgewog
ICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3Zlcmxh
eTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBoaWdobGlnaHRP
dmVybGF5LmdldCgpOwotICAgICAgICBtX3BhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShoaWdobGln
aHRPdmVybGF5LnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmlt
YXRpb24oKTsKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hs
aWdodCgpCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCiB7CiAgICAg
aWYgKG1faGlnaGxpZ2h0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3Zl
cmxheShtX2hpZ2hsaWdodE92ZXJsYXksIHRydWUpOworICAgICAgICBtX3BhZ2UtPnVuaW5zdGFs
bFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggZTQxN2MyNi4uMTI0NjA5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTUw
LDcgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBDb2xvclNwYWNlRGF0YTsK
IGNsYXNzIExheWVyVHJlZUhvc3Q7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7
CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJQcmVmZXJlbmNl
c1N0b3JlOwpAQCAtNzgsMTIgKzc3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBsYXll
clRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IExheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdl
T3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYWludGluZ0VuYWJsZWQoYm9vbCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVByZWZl
cmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH0K
QEAgLTEwMCw4ICs5Myw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Fz
eW5jU2Nyb2xsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpIHsgfQotCiAgICAgdmlydHVhbCBib29sIHNo
b3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcq
KSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRl
eCBmNTY2MDAxLi5iMDZjNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTE1NiwxMiArMTU2LDEyIEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbChib29sIGZvdW5kLCBj
b25zdCBTdHJpbmcmIHN0cmluCiAKICAgICBpZiAoIXNob3VsZFNob3dPdmVybGF5KSB7CiAgICAg
ICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIHRydWUpOworICAgICAgICAgICAgbV93
ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fZmluZFBh
Z2VPdmVybGF5KSB7CiAgICAgICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGZpbmRQYWdlT3Zl
cmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7CiAgICAgICAgICAgICBtX2ZpbmRQYWdl
T3ZlcmxheSA9IGZpbmRQYWdlT3ZlcmxheS5nZXQoKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+
aW5zdGFsbFBhZ2VPdmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIHRydWUpOworICAg
ICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJl
bGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgICAgIG1fZmlu
ZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRVSSgpCiB7CiAgICAgbV9maW5kTWF0
Y2hlcy5jbGVhcigpOwogICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKLSAgICAgICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgdHJ1ZSk7CisgICAg
ICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3
ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKaW5k
ZXggMzViOTgyNS4uMTlkZWE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC05MCw4ICs5MCw4IEBAIHZvaWQgUGFnZU92ZXJs
YXk6OnNldFBhZ2UoV2ViUGFnZSogd2ViUGFnZSkKIHZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRz
RGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKG1fd2ViUGFnZSkg
ewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFBhZ2VPdmVybGF5T3BhY2l0
eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0Fy
ZWEoKS0+c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkodGhpcywgZGlydHlSZWN0KTsKKyAgICAg
ICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNp
dHkodGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOworICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KHRoaXMsIGRpcnR5UmVj
dCk7CiAgICAgfQogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBQYWdlT3ZlcmxheTo6ZmFk
ZUFuaW1hdGlvblRpbWVyRmlyZWQoKQogICAgIGZsb2F0IGZhZGVBbmltYXRpb25WYWx1ZSA9IHNp
bmUgKiBzaW5lOwogCiAgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAobV9mYWRlQW5pbWF0aW9uVHlw
ZSA9PSBGYWRlSW5BbmltYXRpb24pID8gZmFkZUFuaW1hdGlvblZhbHVlIDogMSAtIGZhZGVBbmlt
YXRpb25WYWx1ZTsKLSAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFBhZ2VPdmVybGF5
T3BhY2l0eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisgICAgbV93ZWJQYWdlLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkodGhpcywgbV9mcmFjdGlvbkZh
ZGVkSW4pOwogCiAgICAgaWYgKGFuaW1hdGlvblByb2dyZXNzID09IDEuMCkgewogICAgICAgICBt
X2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7CkBAIC0xODYsMTQgKzE4NiwxNCBAQCB2b2lkIFBh
Z2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKHdhc0Zh
ZGluZ091dCkgewogICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBmYWRlIG91dCwgZ28gYWhl
YWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5LgotICAgICAgICAgICAgbV93ZWJQYWdl
LT51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3dlYlBh
Z2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRoaXMsIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9O
b3RGYWRlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIo
KQogewotICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+Y2xlYXJQYWdlT3ZlcmxheSh0aGlz
KTsKKyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNsZWFyUGFnZU92ZXJs
YXkodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaAppbmRleCAyOTVmMWU4Li42MWRiYThi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
aApAQCAtNzksNiArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgQ2xp
ZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgZW51bSBjbGFz
cyBGYWRlTW9kZSB7IERvTm90RmFkZSwgRmFkZSB9OwogICAgIAogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQxM2M1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorCisjaW1wb3J0ICJEcmF3aW5nQXJlYS5o
IgorI2ltcG9ydCAiUGFnZU92ZXJsYXkuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1RpbGVkQmFja2luZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92ZXJs
YXlDb250cm9sbGVyKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkK
K3sKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmluaXRpYWxpemUoKQoreworICAg
IEFTU0VSVCghbV9yb290TGF5ZXIpOworCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUobV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIlBhZ2Ug
T3ZlcmxheSBjb250YWluZXIiKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVy
bGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgQVNTRVJUKG1fcm9v
dExheWVyKTsKKworICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5
OworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7CisgICAgb3Zlcmxh
eS0+c2V0UGFnZShtX3dlYlBhZ2UpOworCisgICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSkKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24o
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCksIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBP
dmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcihs
YXllci5nZXQoKSk7CisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKKyAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgc3RkOjptb3ZlKGxh
eWVyKSk7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIGlmIChQYWdlKiBwYWdl
ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpKSB7CisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGlu
YXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigp
KQorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldEZvcmNlU3luY2hyb25vdXNT
Y3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyh0cnVlKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5
KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgaWYgKGZh
ZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgeworICAgICAgICBvdmVybGF5
LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7CisKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBzaXplX3Qgb3Zlcmxh
eUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKKyAgICBBU1NFUlQob3Zlcmxh
eUluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUlu
ZGV4KTsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Nj
cm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZhbHNlKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VP
dmVybGF5KiBvdmVybGF5LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7Cisg
ICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJz
LmdldChvdmVybGF5KTsKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgZ3Jh
cGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBncmFwaGljc0xheWVy
LT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICB9CisgICAgZ3JhcGhpY3NMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIGZs
b2F0IG9wYWNpdHkpCit7CisgICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IG1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldChvdmVybGF5KTsKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGdyYXBoaWNzTGF5ZXItPnNldE9wYWNpdHkob3BhY2l0
eSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVybGF5KFBh
Z2VPdmVybGF5KiBvdmVybGF5KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIg
PSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQob3ZlcmxheSk7CisgICAgaWYgKCFncmFwaGlj
c0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldFNpemUoSW50U2l6ZSgpKTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdTaXplKCkKK3sKKyAg
ICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1
ZXMoKSkgeworICAgICAgICBpZiAoIWdyYXBoaWNzTGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQcmVmZXJl
bmNlcygpCit7CisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoZ3JhcGhp
Y3NMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFu
Z2VEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAgbV9yb290TGF5ZXItPm5vdGVEZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgIGludmFsaWRh
dGVBbGxQYWdlT3ZlcmxheUxheWVycygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQoreworICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXll
ciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChUaWxl
ZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGdyYXBoaWNzTGF5ZXItPnRpbGVkQmFja2luZygpKQor
ICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRFeHBvc2VkUmVjdChtX3dlYlBhZ2UtPm1haW5G
cmFtZVZpZXcoKS0+ZXhwb3NlZFJlY3QoKSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkU2Nyb2xsQW55RnJhbWUoKQoreworICAgIGludmFsaWRhdGVBbGxQYWdl
T3ZlcmxheUxheWVycygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW52YWxp
ZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5
ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAgICAgZ3JhcGhpY3NM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKEZsb2F0UmVjdCB2aXNpYmxlUmVjdCkKK3sKKyAgICBt
X3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpOworICAgIGxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0
dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKKyAgICBsYXllci0+c2V0U2hvd0Rl
YnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgbGF5ZXItPnNldFNo
b3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9CisKK2Jv
b2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlz
LnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dLVHlwZVJl
ZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
V0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQoreworICAgIGlmICgh
bV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZv
ciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5
cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoV0tUeXBlUmVmIHZhbHVl
ID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLCBwYXJh
bWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHJldHVybiBu
dWxscHRyOworfQorCitXS0FycmF5UmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAg
aWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92
ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChXS0FycmF5UmVm
IHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFyYW1ldGVy
aXplZE5hbWVzKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50Q29udGVu
dHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAg
IGZvciAoYXV0byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBo
aWNzQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAg
ICAgICAgaXQtPmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0
KGNsaXBSZWN0KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopCit7CisgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5zY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDMwMmU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxl
cl9oCisKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIldLQmFzZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1vdXNlRXZlbnQ7CitjbGFzcyBXZWJQ
YWdlOworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgUGFnZU92ZXJsYXlDb250cm9sbGVyKFdl
YlBhZ2UqKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0K
KworICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQ
YWdlT3ZlcmxheTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFn
ZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAgdm9pZCBzZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0KTsKKyAg
ICB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKTsKKworICAgIHZvaWQgZGlkQ2hh
bmdlVmlld1NpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVByZWZlcmVuY2VzKCk7CisgICAgdm9p
ZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3Nl
ZFJlY3QoKTsKKyAgICB2b2lkIGRpZFNjcm9sbEFueUZyYW1lKCk7CisKKyAgICB2b2lkIGZsdXNo
UGFnZU92ZXJsYXlMYXllcnMoV2ViQ29yZTo6RmxvYXRSZWN0KTsKKworICAgIGJvb2wgaGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IHVzZSBBUEkgdHlwZXMgaGVyZS4KKyAgICBXS1R5cGVSZWYgY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0
ZXIpOworICAgIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9v
bCBwYXJhbWV0ZXJpemVkTmFtZXMpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2V0dGlu
Z3NGb3JMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBpbnZhbGlkYXRl
QWxsUGFnZU92ZXJsYXlMYXllcnMoKTsKKworICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgSGFzaE1h
cDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPj4g
bV9vdmVybGF5R3JhcGhpY3NMYXllcnM7CisgICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+
IG1fcGFnZU92ZXJsYXlzOworICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxlcGhvbmVOdW1iZXJP
dmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmluZGV4IDQxNjcyYzAuLjgxYTZl
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxlcGhv
bmVOdW1iZXJPdmVybGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcApAQCAtNTEs
NyArNTEsNyBAQCB2b2lkIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVP
dmVybGF5SWZOZWVkZWQoKQogICAgIAogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9
IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7CiAgICAgbV90ZWxlcGhvbmVOdW1iZXJPdmVybGF5
ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShvdmVy
bGF5LnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXko
b3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgbV90
ZWxlcGhvbmVOdW1iZXJPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtNjAsNyAr
NjAsNyBAQCB2b2lkIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpkZXN0cm95T3Zl
cmxheSgpCiAgICAgaWYgKCFtX3RlbGVwaG9uZU51bWJlck92ZXJsYXkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV90ZWxlcGhvbmVOdW1i
ZXJPdmVybGF5LCBmYWxzZSk7CisgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheSht
X3RlbGVwaG9uZU51bWJlck92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRl
KTsKIH0KIAogdm9pZCBUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDAyMjY5OGYuLmI2YWI3N2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAK
ICNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKLSNpbmNsdWRl
ICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCkBAIC0zMDcs
NiArMzA2LDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAjaWYgRU5BQkxFKFdFQkdMKQogICAg
ICwgbV9zeXN0ZW1XZWJHTFBvbGljeShXZWJHTEFsbG93Q3JlYXRpb24pCiAjZW5kaWYKKyAgICAs
IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHRoaXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0
aW5nIGFuZApAQCAtMzQwLDYgKzM0MCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFn
ZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAg
bV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUodGhpcywgcGFyYW1ldGVycyk7CiAg
ICAgbV9kcmF3aW5nQXJlYS0+c2V0UGFpbnRpbmdFbmFibGVkKGZhbHNlKTsKKyAgICBtX3BhZ2VP
dmVybGF5Q29udHJvbGxlci5pbml0aWFsaXplKCk7CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQogICAgIG1fdXNlQXN5bmNTY3JvbGxpbmcgPSBwYXJhbWV0ZXJzLnN0b3JlLmdldEJvb2xW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6dGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkS2V5
KCkpOwpAQCAtMTEyMSw2ICsxMTIyLDggQEAgdm9pZCBXZWJQYWdlOjpzZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHZpZXdTaXplKQogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgp
KQogICAgICAgICBzZW5kVmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwogI2VuZGlmCisKKyAg
ICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMjA2LDE1ICsxMjA5LDYgQEAgdm9pZCBXZWJQ
YWdlOjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKICAgICBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKS0+cGFpbnQo
JmdyYXBoaWNzQ29udGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKHBhZ2VPdmVybGF5KTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwotICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHJlY3QpOwotICAgIHBhZ2VPdmVybGF5LT5k
cmF3UmVjdChncmFwaGljc0NvbnRleHQsIHJlY3QpOwotfQotCiBkb3VibGUgV2ViUGFnZTo6dGV4
dFpvb21GYWN0b3IoKSBjb25zdAogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5j
b3JlRnJhbWUoKTsKQEAgLTEzMzcsNiArMTMzMSw4IEBAIHZvaWQgV2ViUGFnZTo6c2V0RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAKICAgICBpZiAobV9kcmF3aW5nQXJlYS0+
bGF5ZXJUcmVlSG9zdCgpKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkt
PmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgbV9wYWdlT3ZlcmxheUNv
bnRyb2xsZXIuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogZmxvYXQgV2ViUGFn
ZTo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdApAQCAtMTQ1MiwzNyArMTQ0OCwxNCBAQCB2b2lk
IFdlYlBhZ2U6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdl
TmFtZSwgSVBDOjpNZXNzYWdlRAogICAgIGluamVjdGVkQnVuZGxlLT5kaWRSZWNlaXZlTWVzc2Fn
ZVRvUGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCi12b2lk
IFdlYlBhZ2U6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdl
T3ZlcmxheSwgYm9vbCBzaG91bGRGYWRlSW4pCit2b2lkIFdlYlBhZ2U6Omluc3RhbGxQYWdlT3Zl
cmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlIGZhZGVNb2RlKQogewotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBh
Z2VPdmVybGF5OwotICAgIAotICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlucyhvdmVybGF5
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5kKG92
ZXJsYXkpOwotICAgIG92ZXJsYXktPnNldFBhZ2UodGhpcyk7Ci0KLSAgICBpZiAoc2hvdWxkRmFk
ZUluKQotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwotCi0gICAgbV9k
cmF3aW5nQXJlYS0+ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkuZ2V0KCkpOworICAgIG1f
cGFnZU92ZXJsYXlDb250cm9sbGVyLmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFk
ZU1vZGUpOwogfQogCi12b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBzaG91bGRGYWRlT3V0KQordm9pZCBXZWJQYWdlOjp1bmlu
c3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSBmYWRlTW9kZSkKIHsKLSAgICBzaXplX3QgZXhpc3RpbmdPdmVybGF5SW5kZXggPSBt
X3BhZ2VPdmVybGF5cy5maW5kKHBhZ2VPdmVybGF5KTsKLSAgICBpZiAoZXhpc3RpbmdPdmVybGF5
SW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzaG91bGRGYWRl
T3V0KSB7Ci0gICAgICAgIHBhZ2VPdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBhZ2VPdmVybGF5LT5zZXRQYWdlKDApOwotICAg
IG1fcGFnZU92ZXJsYXlzLnJlbW92ZShleGlzdGluZ092ZXJsYXlJbmRleCk7Ci0KLSAgICBtX2Ry
YXdpbmdBcmVhLT5kaWRVbmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSk7CisgICAgbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXIudW5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZh
ZGVNb2RlKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC0xNzYxLDE0ICsxNzM0LDcgQEAg
dm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBib29sIGhhbmRsZWQgPSBmYWxz
ZTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuc2l6ZSgpKSB7Ci0gICAgICAgIC8vIExldCB0aGUg
cGFnZSBvdmVybGF5IGhhbmRsZSB0aGUgZXZlbnQuCi0gICAgICAgIFBhZ2VPdmVybGF5TGlzdDo6
cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7Ci0gICAgICAgIGZv
ciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheXMu
cmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGlmICgoaGFuZGxlZCA9ICgq
aXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgYm9vbCBoYW5kbGVkID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaGFuZGxlTW91
c2VFdmVudChtb3VzZUV2ZW50KTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFoYW5k
bGVkICYmIG1faGVhZGVyQmFubmVyKQpAQCAtMTc5NCwxNCArMTc2MCw3IEBAIHZvaWQgV2ViUGFn
ZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdl
YlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBmYWxzZTsKLQotICAgIGlm
IChtX3BhZ2VPdmVybGF5cy5zaXplKCkpIHsKLSAgICAgICAgUGFnZU92ZXJsYXlMaXN0OjpyZXZl
cnNlX2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAgICAgICAgZm9yIChQ
YWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaWYgKChoYW5kbGVkID0gKCppdCkt
Pm1vdXNlRXZlbnQobW91c2VFdmVudCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICBoYW5kbGVkID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaGFuZGxlTW91c2VFdmVudCht
b3VzZUV2ZW50KTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hl
YWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50
KG1vdXNlRXZlbnQpOwpAQCAtMTg5MiwzMiArMTg1MSw2IEBAIHZvaWQgV2ViUGFnZTo6a2V5RXZl
bnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50LCBi
b29sCiAgICAgICAgIGhhbmRsZWQgPSBwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQo
a2V5Ym9hcmRFdmVudCk7CiB9CiAKLVdLVHlwZVJlZiBXZWJQYWdlOjpwYWdlT3ZlcmxheUNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVS
ZWYgcGFyYW1ldGVyKQotewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgZW5kID0g
bV9wYWdlT3ZlcmxheXMucmVuZCgpOwotICAgIGZvciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNl
X2l0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdLQXJy
YXlSZWYgV2ViUGFnZTo6cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1l
cyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0
ZXJhdG9yIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAgICBmb3IgKFBhZ2VPdmVybGF5
TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV0tBcnJheVJlZiB2YWx1ZSA9ICgqaXQpLT5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0gICAgICAgIGlm
ICh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgYm9vbCBpc0VuYWJsZWQgPSBmYWxz
ZTsKQEAgLTI3MDUsNiArMjYzOCw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKICAgICBpZiAobV9kcmF3aW5nQXJl
YSkKICAgICAgICAgbV9kcmF3aW5nQXJlYS0+dXBkYXRlUHJlZmVyZW5jZXMoc3RvcmUpOworCisg
ICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlUHJlZmVyZW5jZXMoKTsKIH0KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNDU2Nyw0ICs0NTAyLDkgQEAgVGVsZXBob25lTnVtYmVy
T3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6OnRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9s
bGVyKCkKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNjcm9sbE9mZnNldEZv
ckFueUZyYW1lKCkKK3sKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRTY3JvbGxBbnlG
cmFtZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDIwMDAzNDkuLjUyZjU5MzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDEsMTAgKzQxLDEx
IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmgiCiAj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgot
I2luY2x1ZGUgIlRhcEhpZ2hsaWdodENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJTYW5kYm94RXh0
ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGFwSGln
aGxpZ2h0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlVuZG9TdGVwLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFs
dGVybmF0aXZlLmg+CkBAIC0xODQsOCArMTg1LDYgQEAgY2xhc3MgV2ViVG91Y2hFdmVudDsKIGNs
YXNzIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOwogI2VuZGlmCiAKLXR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IFBhZ2VPdmVybGF5TGlzdDsKLQogY2xhc3MgV2Vi
UGFnZSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBh
Z2U+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2U+IGNyZWF0ZSh1aW50
NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKQEAgLTIxMCw2
ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCgpOwogICAgIERyYXdpbmdBcmVhKiBkcmF3aW5nQXJlYSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0KCk7IH0KKyAgICBjb25zdCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFn
ZU92ZXJsYXlDb250cm9sbGVyOyB9CisgICAgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsgfQogI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTI0MSw3ICsyNDIs
NiBAQCBwdWJsaWM6CiAgICAgLy8gLS0gQ2FsbGVkIGJ5IHRoZSBEcmF3aW5nQXJlYS4KICAgICAv
LyBGSVhNRTogV2UgY291bGQgZ2VuZXJpY2l6ZSB0aGVzZSBpbnRvIGEgRHJhd2luZ0FyZWEgY2xp
ZW50IGludGVyZmFjZS4gV291bGQgdGhhdCBiZSBiZW5lZmljaWFsPwogICAgIHZvaWQgZHJhd1Jl
Y3QoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwot
ICAgIHZvaWQgZHJhd1BhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgbGF5b3V0SWZOZWVk
ZWQoKTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNvcmUgY2xpZW50cy4KQEAgLTQxMCwx
MCArNDEwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCB3aW5kb3dJc0ZvY3VzZWQoKSBjb25zdDsK
ICAgICBib29sIHdpbmRvd0FuZFdlYlBhZ2VBcmVGb2N1c2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBp
bnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIGJvb2wgc2hvdWxkRmFk
ZUluID0gZmFsc2UpOwotICAgIHZvaWQgdW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkq
LCBib29sIHNob3VsZEZhZGVPdXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBoYXNQYWdlT3ZlcmxheSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgfQotICAgIFBhZ2VPdmVybGF5
TGlzdCYgcGFnZU92ZXJsYXlzKCkgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXM7IH0KKyAgICB2b2lk
IGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIHZvaWQg
dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICNpZiAhUExBVEZPUk0oSU9T
KQogICAgIHZvaWQgc2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+KTsK
QEAgLTc4MSw2ICs3NzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1i
ZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
ICNlbmRpZgogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JBbnlGcmFtZSgpOwor
CiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTEwODYsNyArMTA4Niw2IEBAIHByaXZhdGU6CiAgICAg
SW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgbV9sb2dEaWFnbm9zdGlj
TWVzc2FnZUNsaWVudDsKIAogICAgIEZpbmRDb250cm9sbGVyIG1fZmluZENvbnRyb2xsZXI7Ci0g
ICAgUGFnZU92ZXJsYXlMaXN0IG1fcGFnZU92ZXJsYXlzOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBSZWZQdHI8V2ViSW5zcGVjdG9yPiBtX2luc3BlY3RvcjsKQEAgLTExODcsNiArMTE4
Niw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQog
ICAgIFJlZlB0cjxUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlcj4gbV90ZWxlcGhvbmVO
dW1iZXJPdmVybGF5Q29udHJvbGxlcjsKICNlbmRpZgorCisgICAgUGFnZU92ZXJsYXlDb250cm9s
bGVyIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IDQ1N2QxYTUuLjQwNzRlMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC00OCwxNSArNDgsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgbGF5ZXJXYXNDcmVhdGVkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSosIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlKTsKICAgICB2b2lkIGxheWVyV2lsbEJlRGVzdHJveWVk
KFBsYXRmb3JtQ0FMYXllclJlbW90ZSopOwogCi0gICAgdm9pZCBvdXRPZlRyZWVMYXllcldhc0Fk
ZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIG91dE9mVHJlZUxheWVyV2ls
bEJlUmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0KICAgICB2b2lkIGJhY2tpbmdT
dG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIGJhY2tp
bmdTdG9yZVdpbGxCZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSopOwogCiAgICAg
TGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQ
YWdlLT5sYXllckhvc3RpbmdNb2RlKCk7IH0KIAotICAgIHZvaWQgZmx1c2hPdXRPZlRyZWVMYXll
cnMoKTsKICAgICB2b2lkIGJ1aWxkVHJhbnNhY3Rpb24oUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24mLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImIHJvb3RMYXllcik7CiAKICAgICAvLyBGcm9t
IHRoZSBVSSBwcm9jZXNzCkBAIC03Miw4ICs2OCw2IEBAIHByaXZhdGU6CiAKICAgICBXZWJQYWdl
KiBtX3dlYlBhZ2U7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IG1fb3V0
T2ZUcmVlTGF5ZXJzOwotCiAgICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpM
YXllckNyZWF0aW9uUHJvcGVydGllcz4gbV9jcmVhdGVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG1fZGVzdHJveWVkTGF5ZXJzOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZUNvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KaW5kZXggZTU1ZTMxZi4uZmRhYzI2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXll
clRyZWVDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtNzEsMTkgKzcxLDYgQEAgdm9pZCBSZW1v
dGVMYXllclRyZWVDb250ZXh0OjpsYXllcldpbGxCZURlc3Ryb3llZChQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUqIGxheWVyKQogICAgIG1fbGF5ZXJzQXdhaXRpbmdBbmltYXRpb25TdGFydC5yZW1vdmUo
bGF5ZXItPmxheWVySUQoKSk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6b3V0
T2ZUcmVlTGF5ZXJXYXNBZGRlZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBBU1NFUlQo
IW1fb3V0T2ZUcmVlTGF5ZXJzLmNvbnRhaW5zKGxheWVyKSk7Ci0gICAgbV9vdXRPZlRyZWVMYXll
cnMuYXBwZW5kKGxheWVyKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpvdXRP
ZlRyZWVMYXllcldpbGxCZVJlbW92ZWQoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgc2l6
ZV90IGxheWVySW5kZXggPSBtX291dE9mVHJlZUxheWVycy5maW5kKGxheWVyKTsKLSAgICBBU1NF
UlQobGF5ZXJJbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgbV9vdXRPZlRyZWVMYXllcnMucmVtb3Zl
KGxheWVySW5kZXgpOwotfQotCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdT
dG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKIHsK
ICAgICBtX2JhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3JlV2FzQ3JlYXRlZChiYWNr
aW5nU3RvcmUpOwpAQCAtOTksMTIgKzg2LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5
ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGgKICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmFwaGljc0xheWVyQ0FSZW1vdGU+KGNsaWVudCwg
dGhpcyk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6Zmx1c2hPdXRPZlRyZWVM
YXllcnMoKQotewotICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX291dE9mVHJlZUxheWVy
cykKLSAgICAgICAgbGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpidWlsZFRyYW5zYWN0aW9uKFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgUGxhdGZvcm1DQUxheWVyJiBy
b290TGF5ZXIpCiB7CiAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiByb290TGF5ZXJSZW1vdGUg
PSB0b1BsYXRmb3JtQ0FMYXllclJlbW90ZShyb290TGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCmluZGV4IDQ4NDY2NmMuLmYxODk1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkRyYXdp
bmdBcmVhLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNBUmVtb3RlLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTQwLDcgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7CiAKLWNsYXNzIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YSA6IHB1YmxpYyBEcmF3aW5nQXJlYSB7CiBwdWJsaWM6CiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEoV2ViUGFnZSosIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKICAg
ICB2aXJ0dWFsIH5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSgpOwpAQCAtNjAsMTEgKzU5LDYg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBX
ZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5z
dGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJy
aWRlOwpAQCAtODMsMTIgKzc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRV
cGRhdGUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQK
LSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVy
cmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3Qp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IH0KICNpZiBQTEFURk9S
TShJT1MpCiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVy
cmlkZTsKICNlbmRpZgpAQCAtMTAxLDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpU
aWxlZEJhY2tpbmcqIG1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0OwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+IG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBtX3Jvb3RMYXllcjsKLQot
ICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllckNB
UmVtb3RlPj4gbV9wYWdlT3ZlcmxheUxheWVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
dmlld1NpemU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDJi
Mjc1ZjQuLjMyMGRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpA
QCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYShXZWJQYWdlKiB3ZWJQYWdlLCBjb25z
dCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJikKICAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdB
cmVhVHlwZVJlbW90ZUxheWVyVHJlZSwgd2ViUGFnZSkKICAgICAsIG1fcmVtb3RlTGF5ZXJUcmVl
Q29udGV4dChzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+KHdlYlBhZ2Up
KQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksIG51bGxwdHIpKQogICAgICwgbV9leHBvc2VkUmVjdChGbG9hdFJlY3Q6OmluZmlu
aXRlUmVjdCgpKQogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5p
dGVSZWN0KCkpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmxheWVyRmx1c2hUaW1lckZpcmVkKQpAQCAtODUsNyArODYsMTIgQEAgR3Jh
cGhpY3NMYXllckZhY3RvcnkqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpCiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKIHsKLSAgICBtX3Jvb3RM
YXllciA9IHJvb3RMYXllciA/IHRvR3JhcGhpY3NMYXllckNBUmVtb3RlKHJvb3RMYXllciktPnBs
YXRmb3JtQ0FMYXllcigpIDogbnVsbHB0cjsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllciAqPiBj
aGlsZHJlbjsKKyAgICBpZiAocm9vdExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChy
b290TGF5ZXIpOworICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV93ZWJQYWdlLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5yb290TGF5ZXIoKSk7CisgICAgfQorICAgIG1fcm9vdExheWVyLT5zZXRD
aGlsZHJlbihjaGlsZHJlbik7CiB9CiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJbnRTaXplJiBs
YXllclBvc2l0aW9uKQpAQCAtOTMsMTIgKzk5LDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IEkK
ICAgICBtX3ZpZXdTaXplID0gdmlld1NpemU7CiAgICAgbV93ZWJQYWdlLT5zZXRTaXplKHZpZXdT
aXplKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9wYWdlT3Zl
cmxheUxheWVycykgewotICAgICAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG92ZXJsYXlBbmRM
YXllci52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAg
ICAgICAgICAgIGxheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKLSAgICB9Ci0KICAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVHZW9tZXRyeSgpKTsKQEAgLTExNyw5NSArMTE3
LDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUgc2Nyb2xs
ZWQgYnkgdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgogICAgIHNldHRpbmdzLnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKICAgICBzZXR0aW5n
cy5zZXRGaXhlZFBvc2l0aW9uQ3JlYXRlc1N0YWNraW5nQ29udGV4dCh0cnVlKTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9wYWdlT3ZlcmxheUxheWVycykgewot
ICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0
aW5ncy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgICAgICBvdmVybGF5QW5kTGF5
ZXIudmFsdWUtPnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkp
OwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldFNob3dSZXBhaW50Q291bnRlcihz
ZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0gICAgfQotfQotCi12b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBh
Z2VPdmVybGF5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyQ0FSZW1vdGU+
IGxheWVyKHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQVJlbW90ZSo+KEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKS5yZWxlYXNlKCkpKTsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgbGF5ZXItPnNldE5hbWUoInBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7Ci0j
ZW5kaWYKLQotICAgIGxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcobV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5
ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCku
c2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0K
LSAgICBtX3Jvb3RMYXllci0+YXBwZW5kU3VibGF5ZXIobGF5ZXItPnBsYXRmb3JtQ0FMYXllcigp
KTsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPm91dE9mVHJlZUxheWVyV2FzQWRkZWQo
bGF5ZXIuZ2V0KCkpOwotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVycy5hZGQocGFnZU92ZXJsYXks
IHN0ZDo6bW92ZShsYXllcikpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7
Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NMYXllckNBUmVtb3RlPiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMudGFrZShw
YWdlT3ZlcmxheSk7Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1fcmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC0+b3V0T2ZUcmVlTGF5ZXJXaWxsQmVSZW1vdmVkKGxheWVyLmdldCgpKTsKLSAgICBs
YXllci0+cGxhdGZvcm1DQUxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0KLSAgICBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3JhcGhpY3NMYXllckNBUmVt
b3RlKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLQotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXItPmRyYXdzQ29u
dGVudCgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgICAg
IGxheWVyLT5zZXRTaXplKG1fdmlld1NpemUpOwotICAgIH0KLQotICAgIGxheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlP
cGFjaXR5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBH
cmFwaGljc0xheWVyQ0FSZW1vdGUqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy5nZXQocGFn
ZU92ZXJsYXkpOwotICAgIAotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBsYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpjbGVh
clBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLQotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOwotICAgIGxheWVyLT5zZXRTaXplKEludFNpemUoKSk7Ci0gICAgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBv
dmVybGF5QW5kTGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVy
bGF5QW5kTGF5ZXIudmFsdWUuZ2V0KCkgPT0gZ3JhcGhpY3NMYXllcikgewotICAgICAgICAgICAg
bV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkob3ZlcmxheUFuZExheWVyLmtleSwgZ3JhcGhpY3ND
b250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotZmxvYXQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAt
MjgzLDEzICsxOTQsOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVT
Y3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2Vk
UmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBsYXll
ciA6IG1fcGFnZU92ZXJsYXlMYXllcnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKFRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXItPnRpbGVkQmFja2luZygpKQotICAgICAgICAgICAg
dGlsZWRCYWNraW5nLT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotICAg
IH0KLSAgICAKICAgICBmcmFtZVZpZXctPmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CisK
KyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZUV4cG9zZWRS
ZWN0KCk7CiB9CiAKIFRpbGVkQmFja2luZyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CkBAIC0zMzgsMTMgKzI0NSwxNiBAQCB2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAgICAgfQogCiAgICAgbV93
ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkudmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKIAotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+Zmx1c2hPdXRPZlRyZWVMYXllcnMo
KTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdTaXplKTsK
KyAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKKyAgICBt
X3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnMo
dmlzaWJsZVJlY3QpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKKyAgICBtX3Jv
b3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAg
Ly8gRklYTUU6IG1pbml6ZSB0aGVzZSB0cmFuc2FjdGlvbnMgaWYgbm90aGluZyBjaGFuZ2VkLgog
ICAgIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uIGxheWVyVHJhbnNhY3Rpb247Ci0gICAgbV9y
ZW1vdGVMYXllclRyZWVDb250ZXh0LT5idWlsZFRyYW5zYWN0aW9uKGxheWVyVHJhbnNhY3Rpb24s
ICptX3Jvb3RMYXllcik7CisgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5idWlsZFRyYW5z
YWN0aW9uKGxheWVyVHJhbnNhY3Rpb24sICp0b0dyYXBoaWNzTGF5ZXJDQVJlbW90ZShtX3Jvb3RM
YXllci5nZXQoKSktPnBsYXRmb3JtQ0FMYXllcigpKTsKICAgICBtX3dlYlBhZ2UtPndpbGxDb21t
aXRMYXllclRyZWUobGF5ZXJUcmFuc2FjdGlvbik7CiAKICAgICBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uIHNjcm9sbGluZ1RyYW5zYWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCmluZGV4IDIxOWE1OGMuLjdiMWU3M2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVGltZXIuaD4KQEAgLTUxLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7CiAKLWNsYXNzIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50LCBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50IHsKK2NsYXNzIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBXZWJDb3JlOjpMYXll
ckZsdXNoU2NoZWR1bGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYShXZWJQYWdlKiwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwog
ICAgIHZpcnR1YWwgflRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKCk7CkBAIC03MSwxMSAr
NzAsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9y
ZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogCkBAIC04NCwxOSArNzgsMTAg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNj
cm9sbE9mZnNldEZvckFueUZyYW1lKCkgb3ZlcnJpZGU7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hBZnRlckVuc3VyaW5nVXBkYXRlZFNjcm9sbFBvc2l0aW9uKHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4pIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZVRpbGVkQmFja2lu
Z0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcqKSBvdmVycmlkZTsKIAotICAg
IC8vIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRp
bWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25z
dCBvdmVycmlkZTsKLQogICAgIC8vIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQK
ICAgICB2aXJ0dWFsIGJvb2wgZmx1c2hMYXllcnMoKSBvdmVycmlkZTsKIApAQCAtMTE5LDE1ICsx
MDQsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FM
YXllciAqKTsKIAotICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcihQYWdlT3ZlcmxheSop
OwotICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoUGFnZU92ZXJsYXkqKTsKICAgICBX
ZWJDb3JlOjpUaWxlZEJhY2tpbmcqIG1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0OwogICAg
IHZvaWQgdXBkYXRlRGVidWdJbmZvTGF5ZXIoYm9vbCBzaG93TGF5ZXIpOwogCiAgICAgdm9pZCB1
cGRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8VGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE+Kik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxlZEV4cG9z
ZWRSZWN0KCk7Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlQWxsUGFnZU92ZXJsYXlzKCk7CiAK
ICAgICBib29sIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsKICAgICBXZWJDb3JlOjpMYXllckZs
dXNoU2NoZWR1bGVyIG1fbGF5ZXJGbHVzaFNjaGVkdWxlcjsKQEAgLTE0MCwxMCArMTIxLDYgQEAg
cHJpdmF0ZToKIAogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3BlbmRpbmdSb290TGF5ZXI7CiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4+IFBhZ2VPdmVybGF5TGF5ZXJNYXA7Ci0gICAgUGFnZU92ZXJsYXlM
YXllck1hcCBtX3BhZ2VPdmVybGF5TGF5ZXJzOwotICAgIG11dGFibGUgSGFzaE1hcDxjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgUmV0YWluUHRyPENBTGF5ZXI+PiBtX3BhZ2VPdmVybGF5
UGxhdGZvcm1MYXllcnM7Ci0KICAgICBib29sIG1faXNQYWludGluZ1N1c3BlbmRlZDsKIAogICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBtX2V4cG9zZWRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggOGIyNTBlZS4uYzM3NmUzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBAIC0xMTAsMTcgKzExMCw2IEBAIHZv
aWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBJbnRTCiAgICAgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOwog
fQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjppbnZhbGlkYXRlQWxsUGFn
ZU92ZXJsYXlzKCkKLXsKLSAgICBmb3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+c2V0TmVlZHNEaXNw
bGF5KCk7Ci19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRpZENoYW5n
ZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCkKLXsKLSAgICBpbnZhbGlkYXRlQWxsUGFnZU92ZXJs
YXlzKCk7Ci19Ci0KIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgQ0FM
YXllciAqcm9vdExheWVyID0gZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSA6IG5pbDsKQEAgLTE4NSw3MSArMTc0LDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQogICAgIG1fbGF5
ZXJGbHVzaFNjaGVkdWxlci5zY2hlZHVsZSgpOwogfQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVy
bGF5KQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dEZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyh0cnVlKTsKLSNlbmRp
ZgotCi0gICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcihwYWdlT3ZlcmxheSk7Ci19Ci0KLXZvaWQg
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcihw
YWdlT3ZlcmxheSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLQotICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXJzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMoZmFsc2UpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3Zlcmxh
eSogcGFnZU92ZXJsYXksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBp
ZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRl
bnQoKSkgewotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgICAgICBs
YXllci0+c2V0U2l6ZShleHBhbmRlZEludFNpemUoRmxvYXRTaXplKG1faG9zdGluZ0xheWVyLmdl
dCgpLmZyYW1lLnNpemUpKSk7Ci0gICAgfQotCi0gICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHko
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy5nZXQocGFnZU92ZXJsYXkpOwotCi0g
ICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldE9wYWNpdHko
b3BhY2l0eSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zl
cmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBtX3BhZ2VP
dmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBsYXll
ci0+c2V0U2l6ZShJbnRTaXplKCkpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNo
KCk7Ci19Ci0KIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZl
cmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKQogewogICAgIFNldHRpbmdzJiBzZXR0
aW5ncyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKTsKQEAgLTI2MSwxMiArMTg1
LDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5j
ZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYKICAgICB9CiAjZW5kaWYKIAotICAgIGZvciAo
UGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpdC0+dmFsdWUtPnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5hY2Nl
bGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgICAgICBpdC0+dmFsdWUtPnNldFNob3dEZWJ1
Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOwotICAgICAgICBpdC0+dmFsdWUt
PnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0g
ICAgfQotCiAgICAgLy8gRml4ZWQgcG9zaXRpb24gZWxlbWVudHMgbmVlZCB0byBiZSBjb21wb3Np
dGVkIGFuZCBjcmVhdGUgc3RhY2tpbmcgY29udGV4dHMKICAgICAvLyBpbiBvcmRlciB0byBiZSBz
Y3JvbGxlZCBieSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIFdlIGFsc28gd2FudCB0byBrZWVw
CiAgICAgLy8gU2V0dGluZ3M6c2V0Rml4ZWRQb3NpdGlvbkNyZWF0ZXNTdGFja2luZ0NvbnRleHQo
KSBlbmFibGVkIGZvciBpT1MuIFNlZQpAQCAtMzQ0LDI5ICsyNjIsNiBAQCB2b2lkIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVkU2Nyb2xs
UG9zaXRpb24ocwogI2VuZGlmCiB9CiAKLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSkK
LXsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bm90aWZ5Rmx1c2hS
ZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChh
dXRvIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5
TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS5n
ZXQoKSA9PSBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdl
T3ZlcmxheShpdC0+a2V5LCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1mbG9hdCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
Ci19Ci0KIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkK
IHsKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik7CkBAIC0zODMsMTEgKzI3
OCw3IEBAIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkK
IAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IFttX2hvc3RpbmdMYXllciBmcmFtZV07CiAg
ICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBm
b3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVy
cy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0g
ICAgICAgIGxheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOwotICAgIH0K
KyAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlM
YXllcnModmlzaWJsZVJlY3QpOwogCiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNs
dWRpbmdTdWJmcmFtZXMoKTsKIApAQCAtNDQ5LDEzICszNDAsOSBAQCB2b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgog
CiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsYXllciA6IG1fcGFnZU92ZXJsYXlMYXllcnMudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXItPnRp
bGVkQmFja2luZygpKQotICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRFeHBvc2VkUmVjdCht
X3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotICAgIH0KLQogICAgIGZyYW1lVmlldy0+YWRqdXN0VGls
ZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNv
bnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBAIC00ODAsMTcgKzM2Nyw5IEBAIHZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUm
IHZpZXdTaXplLCBjb25zCiAgICAgICAgIHNpemUgPSBjb250ZW50U2l6ZTsKICAgICB9CiAKLSAg
ICBmb3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxh
eWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7
Ci0gICAgICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBsYXllci0+
c2V0U2l6ZSh2aWV3U2l6ZSk7Ci0gICAgfQotCiAgICAgaWYgKCFtX2xheWVyVHJlZVN0YXRlSXNG
cm96ZW4pCiAgICAgICAgIGZsdXNoTGF5ZXJzKCk7CiAKLSAgICBpbnZhbGlkYXRlQWxsUGFnZU92
ZXJsYXlzKCk7Ci0KICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIApAQCAtNTEyLDkgKzM5MSw2IEBAIHZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUm
IHZpZXdTaXplLCBjb25zCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBtX3dlYlBh
Z2UtPnNldERldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGZvciAo
UGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnZhbHVlLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQpAQCAtNTY5LDcgKzQ0
NSw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKENBTGF5ZXIgKmxheWVyKQogICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogCi0gICAgW21faG9zdGlu
Z0xheWVyIHNldFN1YmxheWVyczpsYXllciA/IEBbIGxheWVyIF0gOiBAWyBdXTsKKyAgICBbbV9o
b3N0aW5nTGF5ZXIgc2V0U3VibGF5ZXJzOmxheWVyID8gQFsgbGF5ZXIsIG1fd2ViUGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkucm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsg
XV07CiAKICAgICBib29sIGhhZFJvb3RMYXllciA9ICEhbV9yb290TGF5ZXI7CiAgICAgbV9yb290
TGF5ZXIgPSBsYXllcjsKQEAgLTU3OCw3MyArNDU0LDExIEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKmxheWVyKQog
ICAgIGlmIChoYWRSb290TGF5ZXIgIT0gISFsYXllcikKICAgICAgICAgbV9sYXllckhvc3RpbmdD
b250ZXh0LT5zZXRSb290TGF5ZXIobGF5ZXIgPyBtX2hvc3RpbmdMYXllci5nZXQoKSA6IDApOwog
Ci0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJs
YXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBbbV9ob3N0aW5nTGF5ZXIgYWRkU3VibGF5ZXI6aXQtPnZhbHVl
LT5wbGF0Zm9ybUxheWVyKCldOwotCiAgICAgdXBkYXRlRGVidWdJbmZvTGF5ZXIobV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcigpKTsK
IAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CiAKLXZvaWQgVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWE6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoUGFnZU92ZXJsYXkqIHBhZ2VP
dmVybGF5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKTsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgbGF5ZXItPnNldE5hbWUoInBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7Ci0j
ZW5kaWYKLQotICAgIGxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcobV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5
ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCku
c2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0K
LSAgICBtX3BhZ2VPdmVybGF5UGxhdGZvcm1MYXllcnMuc2V0KGxheWVyLmdldCgpLCBsYXllci0+
cGxhdGZvcm1MYXllcigpKTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FU
cmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotCi0gICAgW21faG9zdGluZ0xheWVy
IGFkZFN1YmxheWVyOmxheWVyLT5wbGF0Zm9ybUxheWVyKCldOwotCi0gICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllcnMuYWRkKHBhZ2VPdmVybGF5LCBz
dGQ6Om1vdmUobGF5ZXIpKTsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YTo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQotewot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IG1fcGFnZU92ZXJsYXlM
YXllcnMudGFrZShwYWdlT3ZlcmxheSk7Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOwotCi0gICAgW2xheWVyLT5wbGF0Zm9ybUxheWVyKCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJd
OwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIG1fcGFnZU92ZXJsYXlQbGF0
Zm9ybUxheWVycy5yZW1vdmUobGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjpkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NM
YXllciogbGF5ZXIpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG9sZFBsYXRmb3Jt
TGF5ZXIgPSBtX3BhZ2VPdmVybGF5UGxhdGZvcm1MYXllcnMuZ2V0KGxheWVyKTsKLQotICAgIGlm
ICghb2xkUGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG9sZFBsYXRm
b3JtTGF5ZXIuZ2V0KCkgPT0gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbbV9ob3N0aW5nTGF5ZXIgaW5zZXJ0U3VibGF5ZXI6
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBhYm92ZTpvbGRQbGF0Zm9ybUxheWVyLmdldCgpXTsKLSAg
ICBbb2xkUGxhdGZvcm1MYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOwotCi0gICAgbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzLnNldChs
YXllciwgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci19Ci0KIFRpbGVkQmFja2luZyogVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CiB7
CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1h
Yy5tbQppbmRleCAyNmIwMThlLi4wNmYwODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC03NSw3ICs3NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyht
X3BhZ2UtPnBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkp
OworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0
cnVlKSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0x
NzIsNyArMTcyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAgICB9CiAgICAgCiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJpYnV0ZVJlZiA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWF0dHJpYnV0ZSkpOwotICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVSZWYuZ2V0KCksIHBhZ2VPdmVybGF5
UGFyYW1ldGVyLmdldCgpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVSZWYuZ2V0KCksIHBhZ2VPdmVybGF5UGFyYW1ldGVyLmdl
dCgpKSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228886</attachid>
            <date>2014-04-08 14:09:10 -0700</date>
            <delta_ts>2014-04-08 16:07:20 -0700</delta_ts>
            <desc>rebasex2</desc>
            <filename>overlay.diff</filename>
            <type>text/plain</type>
            <size>67734</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyMjEyNGNiLi44Njk0MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTQtMDQtMDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVW5pZnkgYW5kIGZhY3RvciBvdXQgcGFnZSBvdmVybGF5IGltcGxlbWVudGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMzUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcg
YWxsIG9mIHRoZSBQYWdlT3ZlcmxheSBjb2RlIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGNyb3NzLXBs
YXRmb3JtCisgICAgICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciwgaW5jbHVkaW5nIGhpdC10ZXN0
aW5nIGNvZGUgZnJvbSBXZWJQYWdlIGFuZCBwYWludGluZworICAgICAgICBhbmQgbGF5ZXItdHJl
ZSBtYW5pcHVsYXRpb24gY29kZSBmcm9tIHRoZSBEcmF3aW5nQXJlYS4KKworICAgICAgICBUaGlz
IGFsc28gbWFrZXMgYWxsIFBhZ2VPdmVybGF5cyBhIHNpbmdsZSBHcmFwaGljc0xheWVyIHRyZWUg
d2hpY2ggY2FuIGJlCisgICAgICAgIGZsdXNoZWQgYW5kIHBsdWdnZWQgaW50byBhbnkgRHJhd2lu
Z0FyZWEgaW4gYSBzdHJhaWdodGZvcndhcmQgbWFubmVyLgorICAgICAgICBXZSBubyBsb25nZXIg
aGF2ZSB0byB3YXRjaCBmb3IgaW5kaXZpZHVhbCBsYXllcnMgZmxpcHBpbmcgaW50by9vdXQgb2Yg
dGlsaW5nLAorICAgICAgICBiZWNhdXNlIHRoZXkncmUgaGlkZGVuIHVuZGVybmVhdGggdGhlIHJv
b3QgUGFnZU92ZXJsYXkgR3JhcGhpY3NMYXllci4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBiZWNh
dXNlIEdyYXBoaWNzTGF5ZXIgaXMgY3Jvc3MtcGxhdGZvcm0sIHdlIGNhbiBzaGFyZQorICAgICAg
ICBhbGwgb2YgdGhlIGZhaXJseSB0cml2aWFsIGJ1dCBvZnQtcmVwZWF0ZWQgb3ZlcmxheSBtYW5h
Z2VtZW50IGNvZGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
cm9vdExheWVyKToKKyAgICAgICAgQWRkIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tOgorICAgICAgICBSZW1vdmUgUGFnZU92ZXJsYXktcmVsYXRlZCBjb2Rl
IGZyb20gdGhlIERyYXdpbmdBcmVhcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMu
bW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6
XSk6CisgICAgICAgIFVzZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgaW5zdGVhZCBvZiB0aGUgRHJh
d2luZ0FyZWEvV2ViUGFnZSB0byBtYW5pcHVsYXRlIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZU92ZXJsYXlD
b250cm9sbGVyKToKKyAgICAgICAgUmVtb3ZlIFBhZ2VPdmVybGF5LXJlbGF0ZWQgY29kZSBmcm9t
IFdlYlBhZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZUNvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ6Om91dE9mVHJlZUxheWVyV2FzQWRkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllclRyZWVDb250ZXh0OjpvdXRPZlRyZWVMYXllcldpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjpmbHVzaE91dE9m
VHJlZUxheWVycyk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSB0aGUgbm8tbG9uZ2VyLW5lY2Vz
c2FyeSBvdXQtb2YtdHJlZSBsYXllciBjb2RlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdl
SW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXS0J1bmRsZVBhZ2VV
bmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1
cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJv
bGxlcjo6aGlkZUZpbmRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9u
ZU51bWJlck92ZXJsYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVsZXBob25l
TnVtYmVyT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOjpkZXN0cm95T3Zlcmxh
eSk6CisgICAgICAgIE1ha2UgdXNlIG9mIHRoZSBGYWRlTW9kZSBlbnVtLgorCiAyMDE0LTA0LTA4
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgZXhw
b3NlZFJlY3QgZnJvbSBUaWxlQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY3MzliNDcuLjZjNTg2ODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTUwNyw2ICs1MDcsOCBAQAogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdy
b3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICov
OyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQx
MjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLzsg
fTsKKwkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0MEVB
RDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJ
MkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUUxOEYzN0JF
MDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyB9OwogCQkyRDFCNUQ1RDE4
NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVC
MTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
ZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViQ2hyb21l
Q2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSAqLzsg
fTsKQEAgLTIzMTAsNiArMjMxMiw4IEBACiAJCTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBX
ZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NC
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDE0
MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4NjlD
ODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1
QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzNDIsNiArNTM0Niw4IEBACiAJ
CQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKIAkJCQkxQTkw
QzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwICovLAogCQkJCTFBOTBDMjM1
MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJEMTQwRUFEMThGMzdC
RTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTJEMTQwRUFF
MThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQk1MTlF
RjU4RjE4RUY3NzIxMDAwM0I3RjQgLyogVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTUxOUVGNTkwMThFRjc3MjEwMDAzQjdGNCAvKiBUZWxlcGhvbmVOdW1iZXJP
dmVybGF5Q29udHJvbGxlci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBW
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKQEAgLTY3NDEsNiArNjc0Nyw3IEBA
CiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUJDM0RGQzE4OTlGNTFDMDA0RjA2MjYgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5n
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJEMTQwRUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTc3NTNGMTE4QkFC
RjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OUE4
NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODQ4NSw2ICs4
NDkyLDcgQEAKIAkJCQkxQUZBM0FDODE4RTYxQzYxMDAzQ0NCQUUgLyogV0tVc2VyQ29udGVudENv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RBRTEyN0EyNEZFMDA4RkY0RjQg
LyogV2ViRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQkExMEY0MzgwRjAwNThD
MTVBIC8qIFdlYkV2ZW50Q29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDE0MEVB
RjE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMTExQjVFMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQTNERDFGRDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U0Njk1MzEyMTRFNkNCMDAwQjk4RUIgLyog
V2ViRm9ybUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
LmNwcAppbmRleCA5ZDA3YzNmLi40YzhkZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2Uu
Y3BwCkBAIC0zNjQsMTIgKzM2NCwxMiBAQCB2b2lkIFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VP
dmVybGF5KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybAogCiB2b2lk
IFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdl
UmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5
UmVmKSwgdHJ1ZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJsYXkodG9J
bXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYp
CiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFn
ZU92ZXJsYXlSZWYpLCB0cnVlKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VP
dmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VG9wT3ZlcmhhbmdJbWFnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZiwgV0tJbWFnZVJlZiBpbWFnZVJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAKaW5kZXggOTdlODc5OC4uMjY3ZjY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAKQEAgLTE1NzYsNyArMTU3Niw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpZENoYW5nZVNjcm9sbE9mZnNldCgpCiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICB3ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5kaWRDaGFuZ2VTY3JvbGxP
ZmZzZXRGb3JBbnlGcmFtZSgpOworICAgIHdlYlBhZ2UtPmRpZENoYW5nZVNjcm9sbE9mZnNldEZv
ckFueUZyYW1lKCk7CiAKICAgICBpZiAoIW1fZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCBiNDc5NTNlLi4wZGNi
MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQogICAgIGlmICghbV9oaWdobGlnaHRP
dmVybGF5KSB7CiAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gaGlnaGxpZ2h0T3ZlcmxheSA9
IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9
IGhpZ2hsaWdodE92ZXJsYXkuZ2V0KCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVy
bGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCB0cnVlKTsKKyAgICAgICAgbV9wYWdlLT5p
bnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9w
RmFkZU91dEFuaW1hdGlvbigpOwpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6aGlnaGxpZ2h0KCkKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0
KCkKIHsKICAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5z
dGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgdHJ1ZSk7CisgICAgICAgIG1fcGFn
ZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkZhZGUpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBlNDE3YzI2Li4xMjQ2
MDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaApAQCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IENvbG9y
U3BhY2VEYXRhOwogY2xhc3MgTGF5ZXJUcmVlSG9zdDsKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xh
c3MgV2ViUGFnZTsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdl
YlByZWZlcmVuY2VzU3RvcmU7CkBAIC03OCwxMiArNzcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJs
YXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92
ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0KSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIHsgfQotCiAgICAgdmly
dHVhbCB2b2lkIHNldFBhaW50aW5nRW5hYmxlZChib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpIHsgfQpAQCAtMTAwLDggKzkzLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldEZvckFueUZyYW1lKCkgeyB9Ci0KICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6
OkZyYW1lVmlldyopIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIHsgcmV0dXJuIDA7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCmluZGV4IGY1NjYwMDEuLmIwNmM2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMTU2LDEyICsxNTYs
MTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJv
b2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxkU2hvd092ZXJs
YXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgdHJ1ZSk7CisgICAg
ICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9maW5kUGFnZU92ZXJsYXkpIHsKICAgICAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4g
ZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgICAg
IG1fZmluZFBhZ2VPdmVybGF5ID0gZmluZFBhZ2VPdmVybGF5LmdldCgpOwotICAgICAgICAgICAg
bV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwg
dHJ1ZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFn
ZU92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAg
ICAgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKQEAg
LTI3Miw3ICsyNzIsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZFVJKCkKIHsKICAg
ICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAg
ICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCB0
cnVlKTsKKyAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdl
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIAogICAgIFBsdWdpblZpZXcq
IHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV93ZWJQYWdlLT5tYWluRnJhbWUoKSk7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVy
bGF5LmNwcAppbmRleCAzNWI5ODI1Li4xOWRlYTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTkwLDggKzkwLDggQEAgdm9p
ZCBQYWdlT3ZlcmxheTo6c2V0UGFnZShXZWJQYWdlKiB3ZWJQYWdlKQogdm9pZCBQYWdlT3Zlcmxh
eTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAo
bV93ZWJQYWdlKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0UGFnZU92
ZXJsYXlPcGFjaXR5KHRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKLSAgICAgICAgbV93ZWJQYWdl
LT5kcmF3aW5nQXJlYSgpLT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSh0aGlzLCBkaXJ0eVJl
Y3QpOworICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VP
dmVybGF5T3BhY2l0eSh0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisgICAgICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkodGhp
cywgZGlydHlSZWN0KTsKICAgICB9CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIFBhZ2VP
dmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCiAgICAgZmxvYXQgZmFkZUFuaW1hdGlv
blZhbHVlID0gc2luZSAqIHNpbmU7CiAKICAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVB
bmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAx
IC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0
UGFnZU92ZXJsYXlPcGFjaXR5KHRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKKyAgICBtX3dlYlBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5T3BhY2l0eSh0aGlzLCBt
X2ZyYWN0aW9uRmFkZWRJbik7CiAKICAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7
CiAgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKQEAgLTE4NiwxNCArMTg2LDE0
IEBAIHZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKIAogICAgICAg
ICBpZiAod2FzRmFkaW5nT3V0KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGZhZGUg
b3V0LCBnbyBhaGVhZCBhbmQgdW5pbnN0YWxsIHRoZSBwYWdlIG92ZXJsYXkuCi0gICAgICAgICAg
ICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRoaXMsIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpEb05vdEZhZGUpOwogICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIFBhZ2VPdmVy
bGF5OjpjbGVhcigpCiB7Ci0gICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5jbGVhclBhZ2VP
dmVybGF5KHRoaXMpOworICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xl
YXJQYWdlT3ZlcmxheSh0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmluZGV4IDI5NWYx
ZTguLjYxZGJhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9QYWdlT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5oCkBAIC03OSw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7
CiAKICAgICBDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAg
ICBlbnVtIGNsYXNzIEZhZGVNb2RlIHsgRG9Ob3RGYWRlLCBGYWRlIH07CiAgICAgCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTU1NGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIkRy
YXdpbmdBcmVhLmgiCisjaW1wb3J0ICJQYWdlT3ZlcmxheS5oIgorI2ltcG9ydCAiV2ViUGFnZS5o
IgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFn
ZSh3ZWJQYWdlKQoreworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6
ZSgpCit7CisgICAgQVNTRVJUKCFtX3Jvb3RMYXllcik7CisKKyAgICBtX3Jvb3RMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCksIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0
TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciIpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3Zlcmxh
eT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBB
U1NFUlQobV9yb290TGF5ZXIpOworCisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0g
cGFnZU92ZXJsYXk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsK
KyAgICBvdmVybGF5LT5zZXRQYWdlKG1fd2ViUGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0g
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJ
bkFuaW1hdGlvbigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhp
Y3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIGxheWVyLT5zZXRO
YW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICB1cGRhdGVTZXR0aW5n
c0ZvckxheWVyKGxheWVyLmdldCgpKTsKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIu
Z2V0KCkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBz
dGQ6Om1vdmUobGF5ZXIpKTsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkpIHsKKyAgICAgICAgaWYgKFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VT
eW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKHRydWUpOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXko
UGFnZU92ZXJsYXkqIG92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sK
KyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAg
ICAgIG92ZXJsYXktPnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgb3ZlcmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnRha2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNp
emVfdCBvdmVybGF5SW5kZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFT
U0VSVChvdmVybGF5SW5kZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92
ZShvdmVybGF5SW5kZXgpOworCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKSkgeworICAgICAgICBpZiAoU2Nyb2xs
aW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZmFsc2UpOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rp
c3BsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMuZ2V0KG92ZXJsYXkpOworICAgIGlmICghZ3JhcGhpY3NMYXllcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFncmFwaGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewor
ICAgICAgICBncmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGdy
YXBoaWNzTGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIH0KKyAgICBncmFw
aGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSog
b3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KG92ZXJsYXkpOworICAgIGlmICghZ3Jh
cGhpY3NMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXkpCit7CisgICAgR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldChvdmVybGF5KTsKKyAgICBp
ZiAoIWdyYXBoaWNzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGdyYXBoaWNzTGF5ZXIt
PnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShJbnRT
aXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1Np
emUoKQoreworICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250
ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0
U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRz
RGlzcGxheSgpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENo
YW5nZVByZWZlcmVuY2VzKCkKK3sKKyAgICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292
ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAgICAgdXBkYXRlU2V0dGluZ3NGb3JM
YXllcihncmFwaGljc0xheWVyLmdldCgpKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+bm90
ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7Cisg
ICAgaW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpCit7CisgICAgbV93ZWJQYWdlLT5k
cmF3aW5nQXJlYSgpLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsQW55RnJhbWUoKQoreworICAgIGludmFs
aWRhdGVBbGxQYWdlT3ZlcmxheUxheWVycygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6aW52YWxpZGF0ZUFsbFBhZ2VPdmVybGF5TGF5ZXJzKCkKK3sKKyAgICBmb3IgKGF1dG8m
IGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAg
ICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKEZsb2F0UmVjdCB2aXNpYmxlUmVj
dCkKK3sKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOworICAgIGxheWVyLT5zZXRBY2NlbGVyYXRl
c0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKKyAgICBsYXll
ci0+c2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAg
bGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIo
KSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1f
cGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1dLVHlwZVJlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQor
eworICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBt
X3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoV0tU
eXBlUmVmIHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0
cmlidXRlLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitXS0FycmF5UmVmIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFt
ZXMpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlm
IChXS0FycmF5UmVmIHZhbHVlID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMocGFyYW1ldGVyaXplZE5hbWVzKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBS
ZWN0KQoreworICAgIGZvciAoYXV0byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2lu
KCksIGVuZCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNs
aXBSZWN0KTsKKyAgICAgICAgaXQtPmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
ZmxvYXQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsK
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7CisgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJl
YSgpLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NDMwMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFBhZ2VPdmVy
bGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIldL
QmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1vdXNlRXZlbnQ7
CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgUGFnZU92ZXJsYXlD
b250cm9sbGVyKFdlYlBhZ2UqKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFn
ZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxsUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAgdm9p
ZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSos
IGZsb2F0KTsKKyAgICB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKTsKKworICAg
IHZvaWQgZGlkQ2hhbmdlVmlld1NpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVByZWZlcmVuY2Vz
KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHZvaWQgZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIGRpZFNjcm9sbEFueUZyYW1lKCk7CisKKyAg
ICB2b2lkIGZsdXNoUGFnZU92ZXJsYXlMYXllcnMoV2ViQ29yZTo6RmxvYXRSZWN0KTsKKworICAg
IGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IHVzZSBBUEkgdHlwZXMgaGVyZS4KKyAgICBXS1R5cGVSZWYgY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlw
ZVJlZiBwYXJhbWV0ZXIpOworICAgIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOworCitwcml2YXRlOgorICAgIHZvaWQg
dXBkYXRlU2V0dGluZ3NGb3JMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9p
ZCBpbnZhbGlkYXRlQWxsUGFnZU92ZXJsYXlMYXllcnMoKTsKKworICAgIC8vIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSBvdmVycmlkZSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGNsaXBSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JM
YXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGUgeyB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
CisgICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7CisgICAgVmVjdG9yPFJlZlB0cjxQ
YWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOworICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9s
bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UZWxl
cGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGVsZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmluZGV4IDQx
NjcyYzAuLjgxYTZlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVy
LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9s
bGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQoKQogICAgIAogICAgIFJlZlB0cjxQYWdlT3Zlcmxh
eT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcyk7CiAgICAgbV90ZWxlcGhvbmVO
dW1iZXJPdmVybGF5ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdl
T3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAgbV93ZWJQYWdlLT5pbnN0YWxs
UGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiAgICAgbV90ZWxlcGhvbmVOdW1iZXJPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0K
IApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVy
OjpkZXN0cm95T3ZlcmxheSgpCiAgICAgaWYgKCFtX3RlbGVwaG9uZU51bWJlck92ZXJsYXkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV90
ZWxlcGhvbmVOdW1iZXJPdmVybGF5LCBmYWxzZSk7CisgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQ
YWdlT3ZlcmxheShtX3RlbGVwaG9uZU51bWJlck92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxl
cjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDAyMjY5OGYuLmI2YWI3N2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ1
LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgogI2luY2x1ZGUgIk5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIu
aCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCkBAIC0zMDcsNiArMzA2LDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQs
IGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAjaWYgRU5BQkxF
KFdFQkdMKQogICAgICwgbV9zeXN0ZW1XZWJHTFBvbGljeShXZWJHTEFsbG93Q3JlYXRpb24pCiAj
ZW5kaWYKKyAgICAsIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHRoaXMpCiB7CiAgICAgQVNTRVJU
KG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBm
b3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzQwLDYgKzM0MCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
dWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUodGhpcywgcGFy
YW1ldGVycyk7CiAgICAgbV9kcmF3aW5nQXJlYS0+c2V0UGFpbnRpbmdFbmFibGVkKGZhbHNlKTsK
KyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbml0aWFsaXplKCk7CiAKICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQogICAgIG1fdXNlQXN5bmNTY3JvbGxpbmcgPSBwYXJhbWV0ZXJzLnN0
b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6dGhyZWFkZWRTY3JvbGxp
bmdFbmFibGVkS2V5KCkpOwpAQCAtMTEyMSw2ICsxMTIyLDggQEAgdm9pZCBXZWJQYWdlOjpzZXRT
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplKQogICAgIGlmICh2aWV3LT51c2VG
aXhlZExheW91dCgpKQogICAgICAgICBzZW5kVmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwog
I2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3U2l6ZSgp
OwogfQogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMjA2LDE1ICsxMjA5LDYg
QEAgdm9pZCBXZWJQYWdlOjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnZp
ZXcoKS0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6
ZHJhd1BhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKHBh
Z2VPdmVybGF5KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihn
cmFwaGljc0NvbnRleHQpOwotICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHJlY3QpOwotICAgIHBh
Z2VPdmVybGF5LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIHJlY3QpOwotfQotCiBkb3VibGUg
V2ViUGFnZTo6dGV4dFpvb21GYWN0b3IoKSBjb25zdAogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
bWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKQEAgLTEzMzcsNiArMTMzMSw4IEBAIHZvaWQgV2ViUGFn
ZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAKICAgICBpZiAobV9k
cmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdCgpKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0KCktPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworCisgICAgbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAog
ZmxvYXQgV2ViUGFnZTo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdApAQCAtMTQ1MiwzNyArMTQ0
OCwxNCBAQCB2b2lkIFdlYlBhZ2U6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlTmFtZSwgSVBDOjpNZXNzYWdlRAogICAgIGluamVjdGVkQnVuZGxlLT5kaWRS
ZWNlaXZlTWVzc2FnZVRvUGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OwogfQogCi12b2lkIFdlYlBhZ2U6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VP
dmVybGF5PiBwYWdlT3ZlcmxheSwgYm9vbCBzaG91bGRGYWRlSW4pCit2b2lkIFdlYlBhZ2U6Omlu
c3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQogewotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4g
b3ZlcmxheSA9IHBhZ2VPdmVybGF5OwotICAgIAotICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250
YWlucyhvdmVybGF5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlT3Zlcmxh
eXMuYXBwZW5kKG92ZXJsYXkpOwotICAgIG92ZXJsYXktPnNldFBhZ2UodGhpcyk7Ci0KLSAgICBp
ZiAoc2hvdWxkRmFkZUluKQotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigp
OwotCi0gICAgbV9kcmF3aW5nQXJlYS0+ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkuZ2V0
KCkpOworICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmluc3RhbGxQYWdlT3ZlcmxheShwYWdl
T3ZlcmxheSwgZmFkZU1vZGUpOwogfQogCi12b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBzaG91bGRGYWRlT3V0KQordm9pZCBX
ZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKIHsKLSAgICBzaXplX3QgZXhpc3RpbmdPdmVy
bGF5SW5kZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKHBhZ2VPdmVybGF5KTsKLSAgICBpZiAoZXhp
c3RpbmdPdmVybGF5SW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChzaG91bGRGYWRlT3V0KSB7Ci0gICAgICAgIHBhZ2VPdmVybGF5LT5zdGFydEZhZGVPdXRBbmlt
YXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBhZ2VPdmVybGF5LT5zZXRQ
YWdlKDApOwotICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShleGlzdGluZ092ZXJsYXlJbmRleCk7
Ci0KLSAgICBtX2RyYXdpbmdBcmVhLT5kaWRVbmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3Zlcmxh
eSk7CisgICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIudW5pbnN0YWxsUGFnZU92ZXJsYXkocGFn
ZU92ZXJsYXksIGZhZGVNb2RlKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC0xNzYxLDE0
ICsxNzM0LDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
IG1vdXNlRXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBib29sIGhh
bmRsZWQgPSBmYWxzZTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuc2l6ZSgpKSB7Ci0gICAgICAg
IC8vIExldCB0aGUgcGFnZSBvdmVybGF5IGhhbmRsZSB0aGUgZXZlbnQuCi0gICAgICAgIFBhZ2VP
dmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7
Ci0gICAgICAgIGZvciAoUGFnZU92ZXJsYXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbV9w
YWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGlmICgo
aGFuZGxlZCA9ICgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgYm9vbCBoYW5kbGVkID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50KTsKIAogI2lmICFQTEFURk9STShJT1MpCiAg
ICAgaWYgKCFoYW5kbGVkICYmIG1faGVhZGVyQmFubmVyKQpAQCAtMTc5NCwxNCArMTc2MCw3IEBA
IHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50
KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBmYWxz
ZTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5cy5zaXplKCkpIHsKLSAgICAgICAgUGFnZU92ZXJs
YXlMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAg
ICAgICAgZm9yIChQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXQgPSBtX3BhZ2VP
dmVybGF5cy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaWYgKChoYW5k
bGVkID0gKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBoYW5kbGVkID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaGFuZGxl
TW91c2VFdmVudChtb3VzZUV2ZW50KTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFu
ZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVy
LT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMTg5MiwzMiArMTg1MSw2IEBAIHZvaWQgV2Vi
UGFnZTo6a2V5RXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXli
b2FyZEV2ZW50LCBib29sCiAgICAgICAgIGhhbmRsZWQgPSBwZXJmb3JtRGVmYXVsdEJlaGF2aW9y
Rm9yS2V5RXZlbnQoa2V5Ym9hcmRFdmVudCk7CiB9CiAKLVdLVHlwZVJlZiBXZWJQYWdlOjpwYWdl
T3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmli
dXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQotewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6
ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBQYWdlT3ZlcmxheUxpc3Q6OnJldmVyc2VfaXRl
cmF0b3IgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOwotICAgIGZvciAoUGFnZU92ZXJsYXlM
aXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci0gICAgICAgIGlm
ICh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVdLQXJyYXlSZWYgV2ViUGFnZTo6cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFn
ZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUGFnZU92ZXJsYXlMaXN0
OjpyZXZlcnNlX2l0ZXJhdG9yIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsKLSAgICBmb3Ig
KFBhZ2VPdmVybGF5TGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlzLnJi
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV0tBcnJheVJlZiB2YWx1ZSA9ICgq
aXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFtZXRlcml6ZWROYW1lcyk7
Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgYm9vbCBpc0Vu
YWJsZWQgPSBmYWxzZTsKQEAgLTI3MDUsNiArMjYzOCw4IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRl
UHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKICAgICBpZiAo
bV9kcmF3aW5nQXJlYSkKICAgICAgICAgbV9kcmF3aW5nQXJlYS0+dXBkYXRlUHJlZmVyZW5jZXMo
c3RvcmUpOworCisgICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlUHJlZmVyZW5j
ZXMoKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNDU2Nyw0ICs0NTAyLDkgQEAgVGVs
ZXBob25lTnVtYmVyT3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6OnRlbGVwaG9uZU51bWJlck92
ZXJsYXlDb250cm9sbGVyKCkKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNj
cm9sbE9mZnNldEZvckFueUZyYW1lKCkKK3sKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5k
aWRTY3JvbGxBbnlGcmFtZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDIwMDAzNDkuLjUyZjU5
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAt
NDEsMTAgKzQxLDExIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2Fk
Q2xpZW50LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVNlbmRlci5oIgotI2luY2x1ZGUgIlRhcEhpZ2hsaWdodENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5j
bHVkZSAiVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlVuZG9TdGVwLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RpY3RhdGlvbkFsdGVybmF0aXZlLmg+CkBAIC0xODQsOCArMTg1LDYgQEAgY2xhc3MgV2ViVG91
Y2hFdmVudDsKIGNsYXNzIFRlbGVwaG9uZU51bWJlck92ZXJsYXlDb250cm9sbGVyOwogI2VuZGlm
CiAKLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IFBhZ2VPdmVybGF5TGlzdDsK
LQogY2xhc3MgV2ViUGFnZSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkJ1bmRsZVBhZ2U+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBJUEM6
Ok1lc3NhZ2VTZW5kZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2U+
IGNyZWF0ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
KTsKQEAgLTIxMCw2ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpOwogICAgIERyYXdpbmdBcmVhKiBkcmF3
aW5nQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0KCk7IH0KKyAgICBjb25z
dCBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CisgICAgUGFnZU92ZXJsYXlDb250cm9s
bGVyJiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlcjsgfQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3Q7CiAjZW5kaWYKQEAg
LTI0MSw3ICsyNDIsNiBAQCBwdWJsaWM6CiAgICAgLy8gLS0gQ2FsbGVkIGJ5IHRoZSBEcmF3aW5n
QXJlYS4KICAgICAvLyBGSVhNRTogV2UgY291bGQgZ2VuZXJpY2l6ZSB0aGVzZSBpbnRvIGEgRHJh
d2luZ0FyZWEgY2xpZW50IGludGVyZmFjZS4gV291bGQgdGhhdCBiZSBiZW5lZmljaWFsPwogICAg
IHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZvaWQgZHJhd1BhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQg
bGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNvcmUgY2xpZW50
cy4KQEAgLTQxMCwxMCArNDEwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCB3aW5kb3dJc0ZvY3Vz
ZWQoKSBjb25zdDsKICAgICBib29sIHdpbmRvd0FuZFdlYlBhZ2VBcmVGb2N1c2VkKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIGJv
b2wgc2hvdWxkRmFkZUluID0gZmFsc2UpOwotICAgIHZvaWQgdW5pbnN0YWxsUGFnZU92ZXJsYXko
UGFnZU92ZXJsYXkqLCBib29sIHNob3VsZEZhZGVPdXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBoYXNQ
YWdlT3ZlcmxheSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgfQotICAg
IFBhZ2VPdmVybGF5TGlzdCYgcGFnZU92ZXJsYXlzKCkgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXM7
IH0KKyAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5Piwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUp
OworICAgIHZvaWQgdW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHZvaWQgc2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBh
Z2VCYW5uZXI+KTsKQEAgLTc4MSw2ICs3NzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVU
ZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKICNlbmRpZgogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JB
bnlGcmFtZSgpOworCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25z
dCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTEwODYsNyArMTA4Niw2IEBAIHBy
aXZhdGU6CiAgICAgSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgbV9s
b2dEaWFnbm9zdGljTWVzc2FnZUNsaWVudDsKIAogICAgIEZpbmRDb250cm9sbGVyIG1fZmluZENv
bnRyb2xsZXI7Ci0gICAgUGFnZU92ZXJsYXlMaXN0IG1fcGFnZU92ZXJsYXlzOwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKICAgICBSZWZQdHI8V2ViSW5zcGVjdG9yPiBtX2luc3BlY3RvcjsKQEAg
LTExODcsNiArMTE4Niw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKQogICAgIFJlZlB0cjxUZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlcj4g
bV90ZWxlcGhvbmVOdW1iZXJPdmVybGF5Q29udHJvbGxlcjsKICNlbmRpZgorCisgICAgUGFnZU92
ZXJsYXlDb250cm9sbGVyIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IDQ1N2QxYTUuLjQw
NzRlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC00OCwxNSArNDgsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgbGF5ZXJXYXNDcmVhdGVkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSos
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlKTsKICAgICB2b2lkIGxheWVyV2ls
bEJlRGVzdHJveWVkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSopOwogCi0gICAgdm9pZCBvdXRPZlRy
ZWVMYXllcldhc0FkZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIG91dE9m
VHJlZUxheWVyV2lsbEJlUmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0KICAgICB2
b2lkIGJhY2tpbmdTdG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqKTsKICAg
ICB2b2lkIGJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZSopOwogCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJQYWdlLT5sYXllckhvc3RpbmdNb2RlKCk7IH0KIAotICAgIHZvaWQgZmx1c2hP
dXRPZlRyZWVMYXllcnMoKTsKICAgICB2b2lkIGJ1aWxkVHJhbnNhY3Rpb24oUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24mLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImIHJvb3RMYXllcik7CiAK
ICAgICAvLyBGcm9tIHRoZSBVSSBwcm9jZXNzCkBAIC03Miw4ICs2OCw2IEBAIHByaXZhdGU6CiAK
ICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcio+IG1fb3V0T2ZUcmVlTGF5ZXJzOwotCiAgICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcz4gbV9jcmVhdGVkTGF5ZXJzOwogICAg
IFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG1fZGVzdHJv
eWVkTGF5ZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KaW5kZXggZTU1ZTMxZi4u
ZmRhYzI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtNzEsMTkgKzcxLDYg
QEAgdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpsYXllcldpbGxCZURlc3Ryb3llZChQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyKQogICAgIG1fbGF5ZXJzQXdhaXRpbmdBbmltYXRpb25T
dGFydC5yZW1vdmUobGF5ZXItPmxheWVySUQoKSk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dDo6b3V0T2ZUcmVlTGF5ZXJXYXNBZGRlZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICBBU1NFUlQoIW1fb3V0T2ZUcmVlTGF5ZXJzLmNvbnRhaW5zKGxheWVyKSk7Ci0gICAgbV9v
dXRPZlRyZWVMYXllcnMuYXBwZW5kKGxheWVyKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVD
b250ZXh0OjpvdXRPZlRyZWVMYXllcldpbGxCZVJlbW92ZWQoR3JhcGhpY3NMYXllciogbGF5ZXIp
Ci17Ci0gICAgc2l6ZV90IGxheWVySW5kZXggPSBtX291dE9mVHJlZUxheWVycy5maW5kKGxheWVy
KTsKLSAgICBBU1NFUlQobGF5ZXJJbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgbV9vdXRPZlRyZWVM
YXllcnMucmVtb3ZlKGxheWVySW5kZXgpOwotfQotCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ6OmJhY2tpbmdTdG9yZVdhc0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSkKIHsKICAgICBtX2JhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3JlV2Fz
Q3JlYXRlZChiYWNraW5nU3RvcmUpOwpAQCAtOTksMTIgKzg2LDYgQEAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmNyZWF0ZUdyYXBoaWNzTGF5
ZXIoR3JhcGgKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmFwaGljc0xheWVyQ0FSZW1v
dGU+KGNsaWVudCwgdGhpcyk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6Zmx1
c2hPdXRPZlRyZWVMYXllcnMoKQotewotICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX291
dE9mVHJlZUxheWVycykKLSAgICAgICAgbGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpidWlsZFRy
YW5zYWN0aW9uKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgUGxhdGZv
cm1DQUxheWVyJiByb290TGF5ZXIpCiB7CiAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiByb290
TGF5ZXJSZW1vdGUgPSB0b1BsYXRmb3JtQ0FMYXllclJlbW90ZShyb290TGF5ZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCmluZGV4IDQ4NDY2NmMuLmYxODk1ZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNBUmVtb3RlLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTQwLDcgKzM5LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7CiAK
LWNsYXNzIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBw
dWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSB7CiBwdWJsaWM6CiAgICAgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSosIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnMmKTsKICAgICB2aXJ0dWFsIH5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSgpOwpAQCAt
NjAsMTEgKzU5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQcmVmZXJl
bmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVy
bGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVu
KGJvb2wpIG92ZXJyaWRlOwpAQCAtODMsMTIgKzc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKIAotICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0Zv
ckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IH0K
ICNpZiBQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTAxLDkgKzg5LDcgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIG1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0Owog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+IG1fcmVtb3RlTGF5
ZXJUcmVlQ29udGV4dDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBtX3Jv
b3RMYXllcjsKLQotICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NMYXllckNBUmVtb3RlPj4gbV9wYWdlT3ZlcmxheUxheWVyczsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAKICAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fdmlld1NpemU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
Lm1tCmluZGV4IGE3ZmViMzUuLjMyMGRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5tbQpAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYShXZWJQYWdlKiB3
ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJikKICAgICA6IERyYXdpbmdB
cmVhKERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSwgd2ViUGFnZSkKICAgICAsIG1fcmVt
b3RlTGF5ZXJUcmVlQ29udGV4dChzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQ+KHdlYlBhZ2UpKQorICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCksIG51bGxwdHIpKQogICAgICwgbV9leHBvc2VkUmVjdChGbG9h
dFJlY3Q6OmluZmluaXRlUmVjdCgpKQogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0
UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmxheWVyRmx1c2hUaW1lckZpcmVkKQpAQCAtODUsNyAr
ODYsMTIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKIHsK
LSAgICBtX3Jvb3RMYXllciA9IHJvb3RMYXllciA/IHRvR3JhcGhpY3NMYXllckNBUmVtb3RlKHJv
b3RMYXllciktPnBsYXRmb3JtQ0FMYXllcigpIDogbnVsbHB0cjsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NMYXllciAqPiBjaGlsZHJlbjsKKyAgICBpZiAocm9vdExheWVyKSB7CisgICAgICAgIGNoaWxk
cmVuLmFwcGVuZChyb290TGF5ZXIpOworICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV93ZWJQYWdl
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5yb290TGF5ZXIoKSk7CisgICAgfQorICAgIG1fcm9v
dExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7CiB9CiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25z
dCBJbnRTaXplJiBsYXllclBvc2l0aW9uKQpAQCAtOTMsMTIgKzk5LDYgQEAgdm9pZCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUsIGNvbnN0IEkKICAgICBtX3ZpZXdTaXplID0gdmlld1NpemU7CiAgICAgbV93ZWJQYWdlLT5z
ZXRTaXplKHZpZXdTaXplKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExheWVy
IDogbV9wYWdlT3ZlcmxheUxheWVycykgewotICAgICAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IG92ZXJsYXlBbmRMYXllci52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSkKLSAgICAgICAgICAgIGxheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKLSAgICB9Ci0K
ICAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVHZW9tZXRyeSgpKTsKQEAg
LTExNyw5NSArMTE3LDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRl
UHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCiAgICAgLy8gaW4gb3JkZXIg
dG8gYmUgc2Nyb2xsZWQgYnkgdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgogICAgIHNldHRpbmdz
LnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsK
ICAgICBzZXR0aW5ncy5zZXRGaXhlZFBvc2l0aW9uQ3JlYXRlc1N0YWNraW5nQ29udGV4dCh0cnVl
KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9wYWdlT3Zlcmxh
eUxheWVycykgewotICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldEFjY2VsZXJhdGVz
RHJhd2luZyhzZXR0aW5ncy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgICAgICBv
dmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVi
dWdCb3JkZXJzKCkpOwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldFNob3dSZXBh
aW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Ci0gICAgfQotfQotCi12
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFn
ZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xh
eWVyQ0FSZW1vdGU+IGxheWVyKHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQVJlbW90ZSo+KEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzKS5yZWxlYXNl
KCkpKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbGF5ZXItPnNldE5hbWUoInBhZ2Ugb3ZlcmxheSBj
b250ZW50Iik7Ci0jZW5kaWYKLQotICAgIGxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcobV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
KSk7Ci0gICAgbGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkuc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICBsYXllci0+c2V0U2hvd1JlcGFp
bnRDb3VudGVyKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93UmVwYWludENv
dW50ZXIoKSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+YXBwZW5kU3VibGF5ZXIobGF5ZXItPnBsYXRm
b3JtQ0FMYXllcigpKTsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPm91dE9mVHJlZUxh
eWVyV2FzQWRkZWQobGF5ZXIuZ2V0KCkpOwotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVycy5hZGQo
cGFnZU92ZXJsYXksIHN0ZDo6bW92ZShsYXllcikpOwotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVu
aW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllckNBUmVtb3RlPiBsYXllciA9IG1fcGFnZU92ZXJsYXlM
YXllcnMudGFrZShwYWdlT3ZlcmxheSk7Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1fcmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC0+b3V0T2ZUcmVlTGF5ZXJXaWxsQmVSZW1vdmVkKGxheWVyLmdl
dCgpKTsKLSAgICBsYXllci0+cGxhdGZvcm1DQUxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVy
KCk7Ci0KLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdl
T3ZlcmxheSogcGFnZU92ZXJsYXksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3JhcGhp
Y3NMYXllckNBUmVtb3RlKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVy
bGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5
ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7Ci0gICAgICAgIGxheWVyLT5zZXRTaXplKG1fdmlld1NpemUpOwotICAgIH0KLQotICAgIGxh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0
UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBHcmFwaGljc0xheWVyQ0FSZW1vdGUqIGxheWVyID0gbV9wYWdlT3ZlcmxheUxh
eWVycy5nZXQocGFnZU92ZXJsYXkpOwotICAgIAotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBsYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKLXsKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVy
bGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5z
ZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIGxheWVyLT5zZXRTaXplKEludFNpemUoKSk7Ci0g
ICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX3BhZ2VPdmVybGF5TGF5ZXJzKSB7Ci0gICAg
ICAgIGlmIChvdmVybGF5QW5kTGF5ZXIudmFsdWUuZ2V0KCkgPT0gZ3JhcGhpY3NMYXllcikgewot
ICAgICAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkob3ZlcmxheUFuZExheWVyLmtl
eSwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotZmxvYXQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiAjaWYgUExBVEZP
Uk0oSU9TKQpAQCAtMjgzLDExICsxOTQsOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3
LT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiBsYXllciA6IG1fcGFnZU92ZXJsYXlMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIGxh
eWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQogICAg
IGZyYW1lVmlldy0+YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAog
VGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRC
YWNraW5nKCkgY29uc3QKQEAgLTMzNiwxMyArMjQ1LDE2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICB9CiAKICAgICBtX3dlYlBhZ2UtPmxheW91
dElmTmVlZGVkKCk7Ci0gICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogCi0gICAgbV9y
ZW1vdGVMYXllclRyZWVDb250ZXh0LT5mbHVzaE91dE9mVHJlZUxheWVycygpOworICAgIEZsb2F0
UmVjdCB2aXNpYmxlUmVjdChGbG9hdFBvaW50KCksIG1fdmlld1NpemUpOworICAgIHZpc2libGVS
ZWN0LmludGVyc2VjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOworICAgIG1fd2ViUGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVjdCk7
CisgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fcm9vdExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBGSVhNRTogbWlu
aXplIHRoZXNlIHRyYW5zYWN0aW9ucyBpZiBub3RoaW5nIGNoYW5nZWQuCiAgICAgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24gbGF5ZXJUcmFuc2FjdGlvbjsKLSAgICBtX3JlbW90ZUxheWVyVHJl
ZUNvbnRleHQtPmJ1aWxkVHJhbnNhY3Rpb24obGF5ZXJUcmFuc2FjdGlvbiwgKm1fcm9vdExheWVy
KTsKKyAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJ1aWxkVHJhbnNhY3Rpb24obGF5ZXJU
cmFuc2FjdGlvbiwgKnRvR3JhcGhpY3NMYXllckNBUmVtb3RlKG1fcm9vdExheWVyLmdldCgpKS0+
cGxhdGZvcm1DQUxheWVyKCkpOwogICAgIG1fd2ViUGFnZS0+d2lsbENvbW1pdExheWVyVHJlZShs
YXllclRyYW5zYWN0aW9uKTsKIAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24gc2Nyb2xsaW5nVHJhbnNhY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLmgKaW5kZXggMjE5YTU4Yy4uN2IxZTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkRyYXdp
bmdBcmVhLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9MYXllckZsdXNoU2NoZWR1bGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1l
ci5oPgpAQCAtNTEsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJI
b3N0aW5nQ29udGV4dDsKIAotY2xhc3MgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEgOiBw
dWJsaWMgRHJhd2luZ0FyZWEsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQsIFdlYkNvcmU6
OkxheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQgeworY2xhc3MgVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEsIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQgewogcHVibGljOgogICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKFdl
YlBhZ2UqLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdmlydHVhbCB+
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoKTsKQEAgLTcxLDExICs3MCw2IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxs
UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
VW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5
T3BhY2l0eShQYWdlT3ZlcmxheSosIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBXZWJD
b3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CiAKQEAgLTg0LDE5ICs3OCwxMCBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9y
QW55RnJhbWUoKSBvdmVycmlkZTsKLQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEFmdGVyRW5z
dXJpbmdVcGRhdGVkU2Nyb2xsUG9zaXRpb24oc3RkOjpmdW5jdGlvbjx2b2lkICgpPikgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3
KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyopIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRDaGFuZ2Vz
Rm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlOwot
CiAgICAgLy8gV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudAogICAgIHZpcnR1YWwg
Ym9vbCBmbHVzaExheWVycygpIG92ZXJyaWRlOwogCkBAIC0xMTksMTUgKzEwNCwxMSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICopOwogCi0g
ICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKFBhZ2VPdmVybGF5Kik7Ci0gICAgdm9pZCBk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcihQYWdlT3ZlcmxheSopOwogICAgIFdlYkNvcmU6OlRpbGVk
QmFja2luZyogbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVE
ZWJ1Z0luZm9MYXllcihib29sIHNob3dMYXllcik7CiAKICAgICB2b2lkIHVwZGF0ZUludHJpbnNp
Y0NvbnRlbnRTaXplVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYT4qKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKLSAg
ICAKLSAgICB2b2lkIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKIAogICAgIGJvb2wgbV9s
YXllclRyZWVTdGF0ZUlzRnJvemVuOwogICAgIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXIg
bV9sYXllckZsdXNoU2NoZWR1bGVyOwpAQCAtMTQwLDEwICsxMjEsNiBAQCBwcml2YXRlOgogCiAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fcGVuZGluZ1Jvb3RMYXllcjsKIAotICAgIHR5cGVkZWYg
SGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPj4gUGFnZU92ZXJsYXlMYXllck1hcDsKLSAgICBQYWdlT3ZlcmxheUxheWVyTWFwIG1fcGFn
ZU92ZXJsYXlMYXllcnM7Ci0gICAgbXV0YWJsZSBIYXNoTWFwPGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBSZXRhaW5QdHI8Q0FMYXllcj4+IG1fcGFnZU92ZXJsYXlQbGF0Zm9ybUxheWVy
czsKLQogICAgIGJvb2wgbV9pc1BhaW50aW5nU3VzcGVuZGVkOwogCiAgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fZXhwb3NlZFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYS5tbQppbmRleCA1NWFiMGRlLi5jMzc2ZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0KQEAgLTExMCwxNyArMTEwLDYgQEAgdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IEludFMKICAgICB1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCk7CiB9CiAKLXZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKQot
ewotICAgIGZvciAoUGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVy
bGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQot
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0
Rm9yQW55RnJhbWUoKQotewotICAgIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKLX0KLQog
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBDQUxheWVyICpyb290TGF5
ZXIgPSBncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDogbmls
OwpAQCAtMTg1LDcxICsxNzQsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCiAgICAgbV9sYXllckZsdXNoU2NoZWR1
bGVyLnNjaGVkdWxlKCk7CiB9CiAKLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6
OmRpZEluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0jaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKHRydWUpOwotI2VuZGlmCi0KLSAgICBjcmVh
dGVQYWdlT3ZlcmxheUxheWVyKHBhZ2VPdmVybGF5KTsKLX0KLQotdm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBh
Z2VPdmVybGF5KQotewotICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKHBhZ2VPdmVybGF5KTsK
LSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgaWYgKG1fcGFnZU92
ZXJsYXlMYXllcnMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpKSB7
Ci0gICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldEZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhm
YWxzZSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiBwYWdlT3Zlcmxh
eSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1f
cGFnZU92ZXJsYXlMYXllcnMuZ2V0KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgICAgIGxheWVyLT5zZXRTaXpl
KGV4cGFuZGVkSW50U2l6ZShGbG9hdFNpemUobV9ob3N0aW5nTGF5ZXIuZ2V0KCkuZnJhbWUuc2l6
ZSkpKTsKLSAgICB9Ci0KLSAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwot
ICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSog
cGFnZU92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmdldChwYWdlT3ZlcmxheSk7Ci0KLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAg
ICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3Zl
cmxheSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IG1fcGFnZU92ZXJsYXlMYXllcnMu
Z2V0KHBhZ2VPdmVybGF5KTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIGxheWVyLT5zZXRTaXplKElu
dFNpemUoKSk7Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQogdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3Qg
V2ViUHJlZmVyZW5jZXNTdG9yZSYpCiB7CiAgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOwpAQCAtMjYxLDEyICsxODUsNiBAQCB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQ
cmVmZXJlbmNlc1N0b3JlJgogICAgIH0KICNlbmRpZgogCi0gICAgZm9yIChQYWdlT3ZlcmxheUxh
eWVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0g
bV9wYWdlT3ZlcmxheUxheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGl0
LT52YWx1ZS0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSk7Ci0gICAgICAgIGl0LT52YWx1ZS0+c2V0U2hvd0RlYnVnQm9yZGVyKHNldHRp
bmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgICAgIGl0LT52YWx1ZS0+c2V0U2hvd1JlcGFp
bnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLSAgICB9Ci0KICAgICAv
LyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBuZWVkIHRvIGJlIGNvbXBvc2l0ZWQgYW5kIGNyZWF0
ZSBzdGFja2luZyBjb250ZXh0cwogICAgIC8vIGluIG9yZGVyIHRvIGJlIHNjcm9sbGVkIGJ5IHRo
ZSBTY3JvbGxpbmdDb29yZGluYXRvci4gV2UgYWxzbyB3YW50IHRvIGtlZXAKICAgICAvLyBTZXR0
aW5nczpzZXRGaXhlZFBvc2l0aW9uQ3JlYXRlc1N0YWNraW5nQ29udGV4dCgpIGVuYWJsZWQgZm9y
IGlPUy4gU2VlCkBAIC0zNDQsMjkgKzI2Miw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWE6OmRpc3BhdGNoQWZ0ZXJFbnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3NpdGlvbihzCiAj
ZW5kaWYKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKQotewotfQotCi12b2lk
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3Bh
Z2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpID09IGdyYXBo
aWNzTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGl0LT5r
ZXksIGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWZsb2F0IFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQogYm9vbCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogewogICAgIEFTU0VS
VCghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKTsKQEAgLTM4MywxMSArMjc4LDcgQEAgYm9vbCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRS
ZWN0IHZpc2libGVSZWN0ID0gW21faG9zdGluZ0xheWVyIGZyYW1lXTsKICAgICB2aXNpYmxlUmVj
dC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIGZvciAoUGFnZU92ZXJs
YXlMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgbGF5ZXIt
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7Ci0gICAgfQorICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxl
UmVjdCk7CiAKICAgICBib29sIHJldHVyblZhbHVlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOwogCkBAIC00NDksMTEgKzM0MCw5IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZp
ZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGxheWVyIDogbV9wYWdlT3ZlcmxheUxheWVycy52YWx1ZXMoKSkKLSAgICAgICAg
bGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCiAg
ICAgZnJhbWVWaWV3LT5hZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgbV93ZWJQ
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQog
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25z
dCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQb3NpdGlvbikKQEAgLTQ3
OCwxNyArMzY3LDkgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRl
R2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnMKICAgICAgICAgc2l6ZSA9IGNv
bnRlbnRTaXplOwogICAgIH0KIAotICAgIGZvciAoUGFnZU92ZXJsYXlMYXllck1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BhZ2VPdmVybGF5TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlM
YXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQo
KSkKLSAgICAgICAgICAgIGxheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKLSAgICB9Ci0KICAgICBp
ZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAgZmx1c2hMYXllcnMoKTsKIAot
ICAgIGludmFsaWRhdGVBbGxQYWdlT3ZlcmxheXMoKTsKLQogICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogCkBAIC01
MTAsOSArMzkxLDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRl
R2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnMKIHZvaWQgVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQogewogICAgIG1fd2ViUGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2Nh
bGVGYWN0b3IpOwotCi0gICAgZm9yIChQYWdlT3ZlcmxheUxheWVyTWFwOjppdGVyYXRvciBpdCA9
IG1fcGFnZU92ZXJsYXlMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheUxheWVycy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUtPm5vdGVEZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogfQogCiB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9z
dGluZ01vZGUpCkBAIC01NjcsNyArNDQ1LDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FMYXllciAqbGF5ZXIpCiAgICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107CiAKLSAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3VibGF5ZXJzOmxheWVyID8gQFsgbGF5
ZXIgXSA6IEBbIF1dOworICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bGF5ZXIgPyBA
WyBsYXllciwgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5yb290TGF5ZXIoKS0+
cGxhdGZvcm1MYXllcigpIF0gOiBAWyBdXTsKIAogICAgIGJvb2wgaGFkUm9vdExheWVyID0gISFt
X3Jvb3RMYXllcjsKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwpAQCAtNTc2LDczICs0NTQsMTEg
QEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoQ0FMYXllciAqbGF5ZXIpCiAgICAgaWYgKGhhZFJvb3RMYXllciAhPSAhIWxheWVyKQog
ICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXllcihsYXllciA/IG1faG9z
dGluZ0xheWVyLmdldCgpIDogMCk7CiAKLSAgICBmb3IgKFBhZ2VPdmVybGF5TGF5ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wYWdlT3ZlcmxheUxheWVycy5iZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVy
bGF5TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFttX2hvc3RpbmdMYXll
ciBhZGRTdWJsYXllcjppdC0+dmFsdWUtPnBsYXRmb3JtTGF5ZXIoKV07Ci0KICAgICB1cGRhdGVE
ZWJ1Z0luZm9MYXllcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2hvd1RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yKCkpOwogCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0K
IAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Y3JlYXRlUGFnZU92ZXJsYXlM
YXllcihQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksIHRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgicGFn
ZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbGF5ZXItPnNldEFjY2VsZXJhdGVz
RHJhd2luZyhtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCgpKTsKLSAgICBsYXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zaG93RGVidWdCb3JkZXJzKCkpOwotICAgIGxheWVyLT5z
ZXRTaG93UmVwYWludENvdW50ZXIobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNo
b3dSZXBhaW50Q291bnRlcigpKTsKLQotICAgIG1fcGFnZU92ZXJsYXlQbGF0Zm9ybUxheWVycy5z
ZXQobGF5ZXIuZ2V0KCksIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotCi0gICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
Ci0KLSAgICBbbV9ob3N0aW5nTGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KV07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgbV9wYWdlT3ZlcmxheUxh
eWVycy5hZGQocGFnZU92ZXJsYXksIHN0ZDo6bW92ZShsYXllcikpOwotfQotCi12b2lkIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcihQYWdlT3Zl
cmxheSogcGFnZU92ZXJsYXkpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+
IGxheWVyID0gbV9wYWdlT3ZlcmxheUxheWVycy50YWtlKHBhZ2VPdmVybGF5KTsKLSAgICBBU1NF
UlQobGF5ZXIpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0
aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbbGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwot
Ci0gICAgbV9wYWdlT3ZlcmxheVBsYXRmb3JtTGF5ZXJzLnJlbW92ZShsYXllci5nZXQoKSk7Ci19
Ci0KLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRpZENvbW1pdENoYW5nZXNG
b3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikgY29uc3QKLXsKLSAgICBSZXRhaW5Q
dHI8Q0FMYXllcj4gb2xkUGxhdGZvcm1MYXllciA9IG1fcGFnZU92ZXJsYXlQbGF0Zm9ybUxheWVy
cy5nZXQobGF5ZXIpOwotCi0gICAgaWYgKCFvbGRQbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAob2xkUGxhdGZvcm1MYXllci5nZXQoKSA9PSBsYXllci0+cGxhdGZvcm1M
YXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0g
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIFttX2hvc3Rp
bmdMYXllciBpbnNlcnRTdWJsYXllcjpsYXllci0+cGxhdGZvcm1MYXllcigpIGFib3ZlOm9sZFBs
YXRmb3JtTGF5ZXIuZ2V0KCldOwotICAgIFtvbGRQbGF0Zm9ybUxheWVyIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICBtX3BhZ2VPdmVy
bGF5UGxhdGZvcm1MYXllcnMuc2V0KGxheWVyLCBsYXllci0+cGxhdGZvcm1MYXllcigpKTsKLX0K
LQogVGlsZWRCYWNraW5nKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bWFpbkZyYW1l
VGlsZWRCYWNraW5nKCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IDI2YjAxOGUuLjA2ZjA4MmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KQEAgLTc1LDcgKzc1
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxp
dHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5
UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSk7CisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKQEAgLTE3Miw3ICsxNzIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwogICAgIH0KICAgICAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0cmlidXRl
UmVmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpYXR0
cmlidXRlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKG1f
cGFnZS0+cGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0
ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsKKyAgICBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZVJlZi5nZXQoKSwg
cGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAK
</data>
<flag name="review"
          id="253214"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228912</attachid>
            <date>2014-04-08 16:37:55 -0700</date>
            <delta_ts>2014-04-08 16:38:53 -0700</delta_ts>
            <desc>fix a tiny bug</desc>
            <filename>fastscroll.diff</filename>
            <type>text/plain</type>
            <size>1519</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2ODliOTBmLi40YTI1ZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0zLDYgKzMsMTcg
QEAKICAgICAgICAgVW5pZnkgYW5kIGZhY3RvciBvdXQgcGFnZSBvdmVybGF5IGltcGxlbWVudGF0
aW9ucwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMx
MzUzCiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1bmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAg
ICAgIERvbid0IHR1cm4gZmFzdCBzY3JvbGxpbmcgYmFjayBvZmYgdW5sZXNzIHRoZSBsYXN0IG92
ZXJsYXkgaXMgcmVtb3ZlZC4KKworMjAxNC0wNC0wOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KKworICAgICAgICBVbmlmeSBhbmQgZmFjdG9yIG91dCBwYWdlIG92ZXJs
YXkgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzEzNTMKKwogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CiAKICAgICAgICAgQnJpbmcgYWxsIG9mIHRoZSBQYWdlT3ZlcmxheSBjb2RlIHRvZ2V0aGVyIGlu
IGEgc2luZ2xlIGNyb3NzLXBsYXRmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmluZGV4IGE2OTU1
NGQuLjA4ZDc4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0xMDIsNiArMTAyLDkgQEAg
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KiBvdmVybGF5LCBQYWdlT3ZlcmwKICAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZv
dW5kKTsKICAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKIAorICAgIGlm
IChtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCkpIHsKICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCg==
</data>
<flag name="review"
          id="253244"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>